Fix the dependency by making the stamp an actual (yet empty/no-op) header file which is included by all generated source file. This way, we ensure that meson rebuild .o files when the .pdb sources are changed. This is the second solution proposed by eli-schwartz here: https://github.com/mesonbuild/meson/issues/10196#issuecomment-1080053413
198 lines
3.9 KiB
Meson
198 lines
3.9 KiB
Meson
pdbgen_backup = false
|
|
pdbgen_groups = false
|
|
|
|
pdb_names = [
|
|
'brush_select',
|
|
'brush',
|
|
'brushes',
|
|
'buffer',
|
|
'channel',
|
|
'context',
|
|
'debug',
|
|
'display',
|
|
'drawable_color',
|
|
'drawable_edit',
|
|
'drawable',
|
|
'dynamics',
|
|
'edit',
|
|
'file',
|
|
'floating_sel',
|
|
'font_select',
|
|
'fonts',
|
|
'gimp',
|
|
'gimprc',
|
|
'gradient_select',
|
|
'gradient',
|
|
'gradients',
|
|
'help',
|
|
'image_color_profile',
|
|
'image_convert',
|
|
'image_grid',
|
|
'image_guides',
|
|
'image_sample_points',
|
|
'image_select',
|
|
'image_transform',
|
|
'image_undo',
|
|
'image',
|
|
'item_transform',
|
|
'item',
|
|
'layer',
|
|
'message',
|
|
'paint_tools',
|
|
'palette_select',
|
|
'palette',
|
|
'palettes',
|
|
'pattern_select',
|
|
'pattern',
|
|
'patterns',
|
|
'pdb',
|
|
'plug_in_compat',
|
|
'plug_in',
|
|
'progress',
|
|
'selection',
|
|
'text_layer',
|
|
'text_tool',
|
|
'unit',
|
|
'vectors',
|
|
]
|
|
|
|
pdb_sources = []
|
|
foreach name : pdb_names
|
|
pdb_sources += files('groups' / name + '.pdb')
|
|
endforeach
|
|
|
|
|
|
enum_headers = [
|
|
meson.source_root() + '/libgimpbase/gimpbaseenums.h',
|
|
meson.source_root() + '/libgimpconfig/gimpconfigenums.h',
|
|
meson.source_root() + '/app/operations/operations-enums.h',
|
|
meson.source_root() + '/app/core/core-enums.h',
|
|
meson.source_root() + '/app/paint/paint-enums.h'
|
|
]
|
|
|
|
# Perl environment
|
|
perlsrcdir = meson.current_source_dir()
|
|
perlbindir = meson.current_build_dir()
|
|
|
|
perl_env = [
|
|
'PDBGEN_BACKUP=' + (pdbgen_backup ? '1' : '0'),
|
|
'PDBGEN_GROUPS=' + (pdbgen_groups ? '1' : '0'),
|
|
'rootme=' + perlbindir,
|
|
'srcdir=' + perlsrcdir,
|
|
'destdir=' + meson.build_root(),
|
|
'builddir=' + meson.build_root(),
|
|
]
|
|
perl_opts = [
|
|
perl,
|
|
'-I', perlbindir,
|
|
'-I', perlsrcdir,
|
|
]
|
|
|
|
groups_pl_content = '# This file is autogenerated\n'
|
|
groups_pl_content += '@groups = qw(\n'
|
|
foreach source : pdb_names
|
|
groups_pl_content += ' '+ source +'\n'
|
|
endforeach
|
|
groups_pl_content += ');\n'
|
|
|
|
|
|
|
|
# All perl files
|
|
|
|
groups_pl = custom_target('groups.pl',
|
|
input : [ ],
|
|
output: [ 'groups.pl', ],
|
|
command: [ 'echo', groups_pl_content, ],
|
|
capture: true,
|
|
)
|
|
|
|
pdbgen_run = find_program('meson-pdbgen.sh')
|
|
|
|
if meson.version().version_compare('>=0.57.0')
|
|
enums_pl = custom_target('enums.pl',
|
|
input : [ 'enumgen.pl', 'enums-external.pl', enum_headers, ],
|
|
output: [ 'enums.pl', ],
|
|
env: perl_env,
|
|
command: [
|
|
perl, '@INPUT0@',
|
|
enum_headers,
|
|
],
|
|
)
|
|
|
|
pdbgen = custom_target('stamp-pdbgen.h',
|
|
input : [
|
|
files(
|
|
'meson-pdbgen.sh',
|
|
'pdbgen.pl',
|
|
|
|
'app.pl',
|
|
'lib.pl',
|
|
'pdb.pl',
|
|
'stddefs.pdb',
|
|
'util.pl',
|
|
),
|
|
enums_pl,
|
|
groups_pl,
|
|
pdb_sources,
|
|
],
|
|
output: [ 'stamp-pdbgen.h', ],
|
|
env: perl_env,
|
|
command: [
|
|
pdbgen_run, perl, meson.source_root(), meson.build_root()
|
|
],
|
|
)
|
|
|
|
stamp_enumcode = custom_target('stamp-enum-code',
|
|
input : [ 'enumcode.pl', ],
|
|
output: [ 'stamp-enum-code', ],
|
|
env: perl_env,
|
|
command: [
|
|
perl_opts, '@INPUT0@',
|
|
],
|
|
)
|
|
else
|
|
# TODO: remove this workaround when we bump meson requirement to >= 0.57.0
|
|
# See MR !506.
|
|
# In the meantime, make sure the 2 if/else blocks are well synced.
|
|
env = find_program('env')
|
|
|
|
enums_pl = custom_target('enums.pl',
|
|
input : [ 'enumgen.pl', 'enums-external.pl', enum_headers, ],
|
|
output: [ 'enums.pl', ],
|
|
command: [
|
|
env, perl_env, perl_opts, '@INPUT0@',
|
|
enum_headers,
|
|
],
|
|
)
|
|
|
|
pdbgen = custom_target('stamp-pdbgen.h',
|
|
input : [
|
|
files(
|
|
'meson-pdbgen.sh',
|
|
'pdbgen.pl',
|
|
|
|
'app.pl',
|
|
'lib.pl',
|
|
'pdb.pl',
|
|
'stddefs.pdb',
|
|
'util.pl',
|
|
),
|
|
enums_pl,
|
|
groups_pl,
|
|
pdb_sources,
|
|
],
|
|
output: [ 'stamp-pdbgen.h', ],
|
|
command: [
|
|
env, perl_env, pdbgen_run, perl, meson.source_root(), meson.build_root()
|
|
],
|
|
)
|
|
|
|
|
|
stamp_enumcode = custom_target('stamp-enum-code',
|
|
input : [ 'enumcode.pl', ],
|
|
output: [ 'stamp-enum-code', ],
|
|
command: [
|
|
env, perl_env, perl_opts, '@INPUT0@',
|
|
],
|
|
)
|
|
endif
|