[gimp] icons: have -Dvec-icons=false option work with meson.



commit 11183f4fa4b39b4f3e287a676b6871b048aa4ee9
Author: Jehan <jehan girinstud io>
Date:   Wed Jan 26 00:29:39 2022 +0100

    icons: have -Dvec-icons=false option work with meson.
    
    The whole logics of creating specially prepared PNG images for vector
    icons (with gtk-encode-symbolic-svg) was absent. This option was
    basically completely broken, yet we now know that we need the ability to
    install PNG alternatives for the icons (see #6821).
    
    This is a continuation of previous commit which is straightening a bit
    our whole icon theme builds. Note though that more needs to be done
    because I definitely still see room for more mess and far too much
    duplication.

 icons/Symbolic/12/meson.build  | 24 +++++++++++++++++
 icons/Symbolic/128/meson.build | 24 +++++++++++++++++
 icons/Symbolic/16/meson.build  | 24 +++++++++++++++++
 icons/Symbolic/18/meson.build  | 24 +++++++++++++++++
 icons/Symbolic/192/meson.build | 24 +++++++++++++++++
 icons/Symbolic/20/meson.build  | 24 +++++++++++++++++
 icons/Symbolic/22/meson.build  | 24 +++++++++++++++++
 icons/Symbolic/24/meson.build  | 24 +++++++++++++++++
 icons/Symbolic/256/meson.build | 24 +++++++++++++++++
 icons/Symbolic/32/meson.build  | 24 +++++++++++++++++
 icons/Symbolic/48/meson.build  | 24 +++++++++++++++++
 icons/Symbolic/64/meson.build  | 30 +++++++++++++++++++++
 icons/Symbolic/96/meson.build  | 24 +++++++++++++++++
 icons/Symbolic/meson.build     | 61 +++++++++++++++++++++++++-----------------
 meson.build                    |  1 +
 15 files changed, 355 insertions(+), 25 deletions(-)
---
diff --git a/icons/Symbolic/12/meson.build b/icons/Symbolic/12/meson.build
new file mode 100644
index 0000000000..fb32320141
--- /dev/null
+++ b/icons/Symbolic/12/meson.build
@@ -0,0 +1,24 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  custom_target(icon_name,
+    input : [ input_path ],
+    output: [ icon_name ],
+    command: [
+      gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+    ],
+    install: true,
+    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+  )
+
+endforeach
diff --git a/icons/Symbolic/128/meson.build b/icons/Symbolic/128/meson.build
new file mode 100644
index 0000000000..fb32320141
--- /dev/null
+++ b/icons/Symbolic/128/meson.build
@@ -0,0 +1,24 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  custom_target(icon_name,
+    input : [ input_path ],
+    output: [ icon_name ],
+    command: [
+      gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+    ],
+    install: true,
+    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+  )
+
+endforeach
diff --git a/icons/Symbolic/16/meson.build b/icons/Symbolic/16/meson.build
new file mode 100644
index 0000000000..fb32320141
--- /dev/null
+++ b/icons/Symbolic/16/meson.build
@@ -0,0 +1,24 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  custom_target(icon_name,
+    input : [ input_path ],
+    output: [ icon_name ],
+    command: [
+      gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+    ],
+    install: true,
+    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+  )
+
+endforeach
diff --git a/icons/Symbolic/18/meson.build b/icons/Symbolic/18/meson.build
new file mode 100644
index 0000000000..fb32320141
--- /dev/null
+++ b/icons/Symbolic/18/meson.build
@@ -0,0 +1,24 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  custom_target(icon_name,
+    input : [ input_path ],
+    output: [ icon_name ],
+    command: [
+      gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+    ],
+    install: true,
+    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+  )
+
+endforeach
diff --git a/icons/Symbolic/192/meson.build b/icons/Symbolic/192/meson.build
new file mode 100644
index 0000000000..fb32320141
--- /dev/null
+++ b/icons/Symbolic/192/meson.build
@@ -0,0 +1,24 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  custom_target(icon_name,
+    input : [ input_path ],
+    output: [ icon_name ],
+    command: [
+      gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+    ],
+    install: true,
+    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+  )
+
+endforeach
diff --git a/icons/Symbolic/20/meson.build b/icons/Symbolic/20/meson.build
new file mode 100644
index 0000000000..fb32320141
--- /dev/null
+++ b/icons/Symbolic/20/meson.build
@@ -0,0 +1,24 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  custom_target(icon_name,
+    input : [ input_path ],
+    output: [ icon_name ],
+    command: [
+      gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+    ],
+    install: true,
+    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+  )
+
+endforeach
diff --git a/icons/Symbolic/22/meson.build b/icons/Symbolic/22/meson.build
new file mode 100644
index 0000000000..fb32320141
--- /dev/null
+++ b/icons/Symbolic/22/meson.build
@@ -0,0 +1,24 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  custom_target(icon_name,
+    input : [ input_path ],
+    output: [ icon_name ],
+    command: [
+      gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+    ],
+    install: true,
+    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+  )
+
+endforeach
diff --git a/icons/Symbolic/24/meson.build b/icons/Symbolic/24/meson.build
new file mode 100644
index 0000000000..fb32320141
--- /dev/null
+++ b/icons/Symbolic/24/meson.build
@@ -0,0 +1,24 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  custom_target(icon_name,
+    input : [ input_path ],
+    output: [ icon_name ],
+    command: [
+      gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+    ],
+    install: true,
+    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+  )
+
+endforeach
diff --git a/icons/Symbolic/256/meson.build b/icons/Symbolic/256/meson.build
new file mode 100644
index 0000000000..fb32320141
--- /dev/null
+++ b/icons/Symbolic/256/meson.build
@@ -0,0 +1,24 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  custom_target(icon_name,
+    input : [ input_path ],
+    output: [ icon_name ],
+    command: [
+      gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+    ],
+    install: true,
+    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+  )
+
+endforeach
diff --git a/icons/Symbolic/32/meson.build b/icons/Symbolic/32/meson.build
new file mode 100644
index 0000000000..fb32320141
--- /dev/null
+++ b/icons/Symbolic/32/meson.build
@@ -0,0 +1,24 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  custom_target(icon_name,
+    input : [ input_path ],
+    output: [ icon_name ],
+    command: [
+      gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+    ],
+    install: true,
+    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+  )
+
+endforeach
diff --git a/icons/Symbolic/48/meson.build b/icons/Symbolic/48/meson.build
new file mode 100644
index 0000000000..fb32320141
--- /dev/null
+++ b/icons/Symbolic/48/meson.build
@@ -0,0 +1,24 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  custom_target(icon_name,
+    input : [ input_path ],
+    output: [ icon_name ],
+    command: [
+      gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+    ],
+    install: true,
+    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+  )
+
+endforeach
diff --git a/icons/Symbolic/64/meson.build b/icons/Symbolic/64/meson.build
new file mode 100644
index 0000000000..124be6b24e
--- /dev/null
+++ b/icons/Symbolic/64/meson.build
@@ -0,0 +1,30 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  if fs.exists(input_path)
+    custom_target(icon_name,
+      input : [ input_path ],
+      output: [ icon_name ],
+      command: [
+        gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+      ],
+      install: true,
+      install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+    )
+  else
+    # In size 64, some icons are not generated from vector images.
+    install_data(color_icon.split('/')[1],
+      install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+    )
+  endif
+endforeach
diff --git a/icons/Symbolic/96/meson.build b/icons/Symbolic/96/meson.build
new file mode 100644
index 0000000000..fb32320141
--- /dev/null
+++ b/icons/Symbolic/96/meson.build
@@ -0,0 +1,24 @@
+icons_dir = size + 'x' + size
+
+foreach color_icon : source_icons
+  split_name = color_icon.split('.')
+  if split_name.length() != 2
+    error('Unexpected icon name: ' + color_icon)
+  endif
+  output_path = split_name[0] + '-symbolic.symbolic.' + split_name[-1]
+  icon_name = output_path.split('/')[1]
+
+  input_path = split_name[0] + '-symbolic.svg'
+  input_path = '../scalable/' + input_path.split('/')[1]
+
+  custom_target(icon_name,
+    input : [ input_path ],
+    output: [ icon_name ],
+    command: [
+      gtk_encode_symbolic_svg, '-o', '@OUTDIR@', '@INPUT@', icons_dir
+    ],
+    install: true,
+    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+  )
+
+endforeach
diff --git a/icons/Symbolic/meson.build b/icons/Symbolic/meson.build
index c6df06fafe..6f1cc87da5 100644
--- a/icons/Symbolic/meson.build
+++ b/icons/Symbolic/meson.build
@@ -6,38 +6,49 @@ if have_vector_icons
     # [ '64x64',    bitmap_64system ],
     [ '64x64',    bitmap_64_always ],
   ]
+
+  foreach icon_info : all_icons
+    icons_dir = icon_info[0]
+    icons_list= icon_info[1]
+    install_data(icons_list,
+      install_dir: gimpiconsdir / theme / icons_dir / 'apps',
+    )
+endforeach
 else
-  all_icons = [
-    [ '12x12',    bitmap_12 ],
-    [ '16x16',    bitmap_16 ],
-    [ '18x18',    bitmap_18 ],
-    [ '20x20',    bitmap_20 ],
-    [ '22x22',    bitmap_22 ],
-    [ '24x24',    bitmap_24 ],
-    [ '32x32',    bitmap_32 ],
-    [ '48x48',    bitmap_48 ],
-    [ '64x64',    bitmap_64 + bitmap_64_always + bitmap_64system ],
-    [ '96x96',    bitmap_96 ],
-    [ '128x128',  bitmap_128 ],
-    [ '192x192',  bitmap_192 ],
-    [ '256x256',  bitmap_256 ],
-  ]
-endif
+  gtk_encode_symbolic_svg = find_program('gtk-encode-symbolic-svg')
 
+  sizes = [ '12', '16', '18', '20', '22', '24', '32',
+            '48', '64', '96', '128', '192', '256' ]
+  sizes = {
+    '12':   bitmap_12,
+    '16':   bitmap_16,
+    '18':   bitmap_18,
+    '20':   bitmap_20,
+    '22':   bitmap_22,
+    '24':   bitmap_24,
+    '32':   bitmap_32,
+    '48':   bitmap_48,
+    '64':   bitmap_64 + bitmap_64_always + bitmap_64system,
+    '96':   bitmap_96,
+    '128':  bitmap_128,
+    '192':  bitmap_192,
+    '256':  bitmap_256,
+  }
+  foreach size, source_icons: sizes
+    # Note: I originally wanted to implement it here in a loop but
+    # custom_target() doesn't accept an output path with a folder! So I
+    # end up creating as many empty directories as generated sizes and
+    # copying the same meson.build everywhere (which is really stupid,
+    # let's admit it). Only the 64x64 size has a slightly different
+    # meson.build as it also installs some non-symbolic images.
+    subdir(size)
+  endforeach
+endif
 
 install_data('index.theme',
   install_dir: gimpiconsdir / theme,
 )
 
-foreach icon_info : all_icons
-  icons_dir = icon_info[0]
-  icons_list= icon_info[1]
-  install_data(icons_list,
-    install_dir: gimpiconsdir / theme / icons_dir / 'apps',
-  )
-endforeach
-
-
 icons_core = [ '64/gimp-question.png', ]
 icons_imgs = [ '64/gimp-wilber-eek.png', ]
 
diff --git a/meson.build b/meson.build
index 2f9527ee46..65f10f14c7 100644
--- a/meson.build
+++ b/meson.build
@@ -87,6 +87,7 @@ i18n      = import('i18n')
 gnome     = import('gnome')
 pythonmod = import('python')
 simd      = import('unstable-simd')
+fs        = import('fs')
 
 cc        = meson.get_compiler('c')
 cxx       = meson.get_compiler('cpp')


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]