From 634bb0836e36d792f4d3c7362724ba5c8caef696 Mon Sep 17 00:00:00 2001 From: Jehan Date: Tue, 4 Apr 2023 17:28:49 +0200 Subject: [PATCH] menus: fix dialogs_dockable_actions being in 2 groups. Depending on where it's used, this list of action can be either in the "dockable" or the "dialogs" action group. The meson rule is a bit more complicated than I wished it were because of the ever-so-blocking lack of simple dependency in meson. Cf. my latest comment: https://github.com/mesonbuild/meson/issues/8123#issuecomment-1496168759 --- menus/Makefile.am | 30 +++++++++++----- menus/dialogs-menuitems.ui | 36 ------------------- menus/dialogs-menuitems.ui.in | 36 +++++++++++++++++++ ...able-menu.ui.in => dockable-menu.ui.in.in} | 2 +- .../{image-menu.ui.in => image-menu.ui.in.in} | 2 +- menus/meson.build | 31 +++++++++++++++- 6 files changed, 89 insertions(+), 48 deletions(-) delete mode 100644 menus/dialogs-menuitems.ui create mode 100644 menus/dialogs-menuitems.ui.in rename menus/{dockable-menu.ui.in => dockable-menu.ui.in.in} (97%) rename menus/{image-menu.ui.in => image-menu.ui.in.in} (99%) diff --git a/menus/Makefile.am b/menus/Makefile.am index 5575ee56bb..e095b53456 100644 --- a/menus/Makefile.am +++ b/menus/Makefile.am @@ -3,10 +3,10 @@ menudatadir = $(gimpdatadir)/menus menudata_in_files = \ - dockable-menu.ui.in \ - image-menu.ui.in + dockable-menu.ui.in.in \ + image-menu.ui.in.in -menudata_built_files = $(menudata_in_files:.ui.in=.ui) +menudata_built_files = $(menudata_in_files:.ui.in.in=.ui) menudata_DATA = \ $(menudata_built_files) \ @@ -46,7 +46,7 @@ menudata_DATA = \ EXTRA_DIST = \ $(menudata_DATA) \ $(menudata_in_files) \ - dialogs-menuitems.ui \ + dialogs-menuitems.ui.in \ gtkuimanager.dtd \ menus.xsl @@ -57,20 +57,32 @@ if GIMP_UNSTABLE UNSTABLE_MENU_PARAMS = --stringparam unstable-menus yes endif -SUFFIXES = .ui.in .ui +SUFFIXES = .ui.in.in .ui + +%-dialogs-menuitems.ui: dialogs-menuitems.ui.in + sed 's/@GROUP@/$*/' $< > $@ + +dockable-menu.ui.in: dockable-menu.ui.in.in + sed 's/@GROUP@/dockable/' $< > $@ + +image-menu.ui.in: image-menu.ui.in.in + sed 's/@GROUP@/dialogs/' $< > $@ # Adding a `realpath` because xsltproc adds an xml:base attribute when the path # is absolute. This breaks our parsing at runtime. -.ui.in.ui: +image-menu.ui: image-menu.ui.in dialogs-dialogs-menuitems.ui $(srcdir)/menus.xsl $(top_srcdir)/configure.ac if HAVE_XSLTPROC $(XSLTPROC) --xinclude $(UNSTABLE_MENU_PARAMS) $(srcdir)/menus.xsl "`realpath --relative-to=. $<`" > $(@) || rm -f $(@) else @echo "*** xsltproc is required to build the menus XML files ***"; exit 1; endif -# Specifying dependencies in the implicit rule above does not work, so -# specify them here instead -dockable-menu.ui image-menu.ui: $(top_srcdir)/configure.ac $(srcdir)/menus.xsl dialogs-menuitems.ui +dockable-menu.ui: dockable-menu.ui.in dockable-dialogs-menuitems.ui $(srcdir)/menus.xsl $(top_srcdir)/configure.ac +if HAVE_XSLTPROC + $(XSLTPROC) --xinclude $(UNSTABLE_MENU_PARAMS) $(srcdir)/menus.xsl "`realpath --relative-to=. $<`" > $(@) || rm -f $(@) +else + @echo "*** xsltproc is required to build the menus XML files ***"; exit 1; +endif validate: $(menudata_DATA) if HAVE_XMLLINT diff --git a/menus/dialogs-menuitems.ui b/menus/dialogs-menuitems.ui deleted file mode 100644 index 56f8987df5..0000000000 --- a/menus/dialogs-menuitems.ui +++ /dev/null @@ -1,36 +0,0 @@ - - -
- app.dialogs-tool-options - app.dialogs-device-status -
- app.dialogs-layers - app.dialogs-channels - app.dialogs-vectors - app.dialogs-indexed-palette - app.dialogs-histogram - app.dialogs-selection-editor - app.dialogs-navigation - app.dialogs-undo-history - app.dialogs-cursor - app.dialogs-sample-points - app.dialogs-symmetry -
-
- app.dialogs-colors - app.dialogs-brushes - app.dialogs-dynamics - app.dialogs-mypaint-brushes - app.dialogs-patterns - app.dialogs-gradients - app.dialogs-palettes - app.dialogs-fonts - app.dialogs-tool-presets - app.dialogs-buffers -
- app.dialogs-images - app.dialogs-document-history - app.dialogs-templates - app.dialogs-error-console - app.dialogs-dashboard -
diff --git a/menus/dialogs-menuitems.ui.in b/menus/dialogs-menuitems.ui.in new file mode 100644 index 0000000000..9a0df3ccf8 --- /dev/null +++ b/menus/dialogs-menuitems.ui.in @@ -0,0 +1,36 @@ + + +
+ @GROUP@.dialogs-tool-options + @GROUP@.dialogs-device-status +
+ @GROUP@.dialogs-layers + @GROUP@.dialogs-channels + @GROUP@.dialogs-vectors + @GROUP@.dialogs-indexed-palette + @GROUP@.dialogs-histogram + @GROUP@.dialogs-selection-editor + @GROUP@.dialogs-navigation + @GROUP@.dialogs-undo-history + @GROUP@.dialogs-cursor + @GROUP@.dialogs-sample-points + @GROUP@.dialogs-symmetry +
+
+ @GROUP@.dialogs-colors + @GROUP@.dialogs-brushes + @GROUP@.dialogs-dynamics + @GROUP@.dialogs-mypaint-brushes + @GROUP@.dialogs-patterns + @GROUP@.dialogs-gradients + @GROUP@.dialogs-palettes + @GROUP@.dialogs-fonts + @GROUP@.dialogs-tool-presets + @GROUP@.dialogs-buffers +
+ @GROUP@.dialogs-images + @GROUP@.dialogs-document-history + @GROUP@.dialogs-templates + @GROUP@.dialogs-error-console + @GROUP@.dialogs-dashboard +
diff --git a/menus/dockable-menu.ui.in b/menus/dockable-menu.ui.in.in similarity index 97% rename from menus/dockable-menu.ui.in rename to menus/dockable-menu.ui.in.in index b9b2cff945..c13e3acb54 100644 --- a/menus/dockable-menu.ui.in +++ b/menus/dockable-menu.ui.in.in @@ -4,7 +4,7 @@ _Add Tab - + dockable.dockable-close-tab dockable.dockable-detach-tab diff --git a/menus/image-menu.ui.in b/menus/image-menu.ui.in.in similarity index 99% rename from menus/image-menu.ui.in rename to menus/image-menu.ui.in.in index a6dd9b1b0a..a41d760fa9 100644 --- a/menus/image-menu.ui.in +++ b/menus/image-menu.ui.in.in @@ -795,7 +795,7 @@ _Dockable Dialogs - + app.dialogs-toolbox diff --git a/menus/meson.build b/menus/meson.build index 4ad1b368ad..e13814bbaa 100644 --- a/menus/meson.build +++ b/menus/meson.build @@ -43,13 +43,42 @@ unstable_menus_args = stable ? [] : [ '--stringparam', 'unstable-menus', 'yes' ] menus_ui_built_files = [] foreach menu_filegen : [ 'dockable-menu.ui', 'image-menu.ui', ] + # This does look a bit overly complicated, but I encountered 2 issues: + # 1. The simpler solution was to do first the custom_target() then a single + # configure_file() per file. It didn't work out because of meson complex + # dependency logic (see https://github.com/mesonbuild/meson/issues/8123). + # 2. So I inverted, but now xsltproc was the one acting up by adding the + # 'xml:base' attribute when the included and including XML files are in + # different folders. This is why I added a second configure_file() to have + # both XML files in the same folder. + conf = configuration_data() + if menu_filegen == 'dockable-menu.ui' + group = 'dockable' + else + group = 'dialogs' + endif + conf.set('GROUP', group) + included_file = configure_file( + input: 'dialogs-menuitems.ui.in', + output: group + '-dialogs-menuitems.ui', + configuration: conf, + ) + + pre_built_file = configure_file( + input: menu_filegen + '.in.in', + output: menu_filegen + '.in', + configuration: conf, + ) + menus_ui_built_files += custom_target(menu_filegen, - input : [ menu_filegen +'.in', 'menus.xsl', 'dialogs-menuitems.ui'], + input : [ pre_built_file, 'menus.xsl', included_file], output: [ menu_filegen ], command: [ xsltproc, '--xinclude', unstable_menus_args, + '--path', + meson.current_build_dir(), '--output', '@OUTPUT@', '@INPUT1@', '@INPUT0@',