gimp/libgimp/meson.build
Jehan 106f2a061d Issue #8145: meson: generation of '*-enums.c' files.
Our meson build system was not properly building the enums.c file,
because they are versionned.

I did a similar trick as what I did for the pdbgen, which is that I used
a wrapper script around the existing perl script, which sets proper
options and generate a stamp file in the end (which is considered by
meson as the actual custom target, not the C file since it is generated
in the source dir).

The most important part is that the stamp file is a generated header
source (not just a random text file) which is **included** by the
generated C file. This is what will force meson to regenerate the C file
if the header is updated, **then** build using this new version, not use
an outdated versionned version (which would make for hard to diagnose
bugs), through the indirection of the intermediate stamp header.

See #4201.
See also: https://github.com/mesonbuild/meson/issues/10196#issuecomment-1080742592
2022-08-01 19:59:53 +02:00

553 lines
13 KiB
Meson

# Similarly to libgimpthumb/gimpthumb-enums.c, libgimp/gimpenums.c is
# not versionned so we don't use the mkenums_wrap.
# Moreover it is generated in 2 steps, first with common mkenums
# arguments, then concatenating with a "tail" file.
gimpenums_notail = custom_target('gimpenums.c.notail',
input : [ 'gimpenums.h', ],
output: [ 'gimpenums.c.notail', ],
command: [
gimp_mkenums,
'--fhead','#include "config.h"\n'
+ '#include <gio/gio.h>\n'
+ '#include <gegl.h>\n'
+ '#undef GIMP_DISABLE_DEPRECATED\n'
+ '#include "libgimpbase/gimpbase.h"\n'
+ '#include "libgimpbase/gimpbase-private.h"\n'
+ '#include "libgimpconfig/gimpconfigenums.h"\n'
+ '#include "gimpenums.h"\n',
'--fprod',
'/* enumerations from "@basename@" */',
'--vhead',
'GType\n'+
'@enum_name@_get_type (void)\n'+
'{\n'+
' static const G@Type@Value values[] =\n'+
' {',
'--vprod',
' { @VALUENAME@, "@VALUENAME@", "@valuenick@" },',
'--vtail',
' { 0, NULL, NULL }\n'+
' };\n',
'--dhead',
' static const Gimp@Type@Desc descs[] =\n'+
' {',
'--dprod',
' { @VALUENAME@, @valuedesc@, @valuehelp@ },'+
'@if (\'@valueabbrev@\' ne \'NULL\')@\n'+
' /* Translators: this is an abbreviated version of @valueudesc@.\n'+
' Keep it short. */\n'+
' { @VALUENAME@, @valueabbrev@, NULL },'+
'@endif@',
'--dtail',
libgimp_mkenums_dtails,
'@INPUT@',
],
capture: true,
)
gimpenums = custom_target('gimpenums.c',
input : [ gimpenums_notail, 'gimpenums.c.tail', ],
output: [ 'gimpenums.c', ],
command: [ 'cat', '@INPUT@' ],
capture: true,
)
gimpuimarshal = gnome.genmarshal('gimpuimarshal',
prefix: '_gimpui_marshal',
sources: 'gimpuimarshal.list',
install_header: false,
)
pdb_wrappers_sources = [
'gimp_pdb.c',
'gimpbrush_pdb.c',
'gimpbrushes_pdb.c',
'gimpbrushselect_pdb.c',
'gimpbuffer_pdb.c',
'gimpchannel_pdb.c',
'gimpcontext_pdb.c',
'gimpdebug_pdb.c',
'gimpdisplay_pdb.c',
'gimpdrawable_pdb.c',
'gimpdrawablecolor_pdb.c',
'gimpdrawableedit_pdb.c',
'gimpdynamics_pdb.c',
'gimpedit_pdb.c',
'gimpfile_pdb.c',
'gimpfloatingsel_pdb.c',
'gimpfonts_pdb.c',
'gimpfontselect_pdb.c',
'gimpgimprc_pdb.c',
'gimpgradient_pdb.c',
'gimpgradients_pdb.c',
'gimpgradientselect_pdb.c',
'gimphelp_pdb.c',
'gimpimage_pdb.c',
'gimpimagecolorprofile_pdb.c',
'gimpimageconvert_pdb.c',
'gimpimagegrid_pdb.c',
'gimpimageguides_pdb.c',
'gimpimagesamplepoints_pdb.c',
'gimpimageselect_pdb.c',
'gimpimagetransform_pdb.c',
'gimpimageundo_pdb.c',
'gimpitem_pdb.c',
'gimpitemtransform_pdb.c',
'gimplayer_pdb.c',
'gimpmessage_pdb.c',
'gimppainttools_pdb.c',
'gimppalette_pdb.c',
'gimppalettes_pdb.c',
'gimppaletteselect_pdb.c',
'gimppattern_pdb.c',
'gimppatterns_pdb.c',
'gimppatternselect_pdb.c',
'gimpprogress_pdb.c',
'gimpselection_pdb.c',
'gimptextlayer_pdb.c',
'gimptexttool_pdb.c',
'gimpvectors_pdb.c',
]
pdb_wrappers_headers = [
'gimp_pdb_headers.h',
'gimp_pdb.h',
'gimpbrush_pdb.h',
'gimpbrushes_pdb.h',
'gimpbrushselect_pdb.h',
'gimpbuffer_pdb.h',
'gimpchannel_pdb.h',
'gimpcontext_pdb.h',
'gimpdebug_pdb.h',
'gimpdisplay_pdb.h',
'gimpdrawable_pdb.h',
'gimpdrawablecolor_pdb.h',
'gimpdrawableedit_pdb.h',
'gimpdynamics_pdb.h',
'gimpedit_pdb.h',
'gimpfile_pdb.h',
'gimpfloatingsel_pdb.h',
'gimpfonts_pdb.h',
'gimpfontselect_pdb.h',
'gimpgimprc_pdb.h',
'gimpgradient_pdb.h',
'gimpgradients_pdb.h',
'gimpgradientselect_pdb.h',
'gimphelp_pdb.h',
'gimpimage_pdb.h',
'gimpimagecolorprofile_pdb.h',
'gimpimageconvert_pdb.h',
'gimpimagegrid_pdb.h',
'gimpimageguides_pdb.h',
'gimpimagesamplepoints_pdb.h',
'gimpimageselect_pdb.h',
'gimpimagetransform_pdb.h',
'gimpimageundo_pdb.h',
'gimpitem_pdb.h',
'gimpitemtransform_pdb.h',
'gimplayer_pdb.h',
'gimpmessage_pdb.h',
'gimppainttools_pdb.h',
'gimppalette_pdb.h',
'gimppalettes_pdb.h',
'gimppaletteselect_pdb.h',
'gimppattern_pdb.h',
'gimppatterns_pdb.h',
'gimppatternselect_pdb.h',
'gimpprogress_pdb.h',
'gimpselection_pdb.h',
'gimptextlayer_pdb.h',
'gimptexttool_pdb.h',
'gimpvectors_pdb.h',
]
libgimp_sources_introspectable = [
'gimp.c',
'gimpbatchprocedure.c',
'gimpbrushselect.c',
'gimpchannel.c',
'gimpdisplay.c',
'gimpdrawable.c',
'gimpfileprocedure.c',
'gimpfontselect.c',
'gimpgimprc.c',
'gimpgradientselect.c',
'gimpimage.c',
'gimpimagecolorprofile.c',
'gimpimagemetadata.c',
'gimpimagemetadata-save.c',
'gimpimageprocedure.c',
'gimpitem.c',
'gimplayer.c',
'gimplayermask.c',
'gimploadprocedure.c',
'gimppaletteselect.c',
'gimpparamspecs.c',
'gimppatternselect.c',
'gimppdb.c',
'gimpplugin.c',
'gimpprocedure.c',
'gimpprocedureconfig.c',
'gimpprogress.c',
'gimpsaveprocedure.c',
'gimpselection.c',
'gimpthumbnailprocedure.c',
'gimpvectors.c',
gimpenums,
pdb_wrappers_sources,
]
libgimp_sources = [
libgimp_sources_introspectable,
'gimp-debug.c',
'gimp-shm.c',
'gimpgpparams.c',
'gimpparamspecs-desc.c',
'gimppdb_pdb.c',
'gimppdbprocedure.c',
'gimppixbuf.c',
'gimpplugin_pdb.c',
'gimpunit_pdb.c',
'gimpunitcache.c',
'gimptilebackendplugin.c',
]
libgimp_headers_introspectable = [
# Order matters. Leave these headers at the top.
'gimp.h',
'gimptypes.h',
'gimpenums.h',
# Other headers
'gimpbatchprocedure.h',
'gimpbrushselect.h',
'gimpchannel.h',
'gimpdisplay.h',
'gimpdrawable.h',
'gimpfileprocedure.h',
'gimpfontselect.h',
'gimpgimprc.h',
'gimpgradientselect.h',
'gimpimage.h',
'gimpimagecolorprofile.h',
'gimpimagemetadata.h',
'gimpimageprocedure.h',
'gimpitem.h',
'gimplayer.h',
'gimplayermask.h',
'gimploadprocedure.h',
'gimppaletteselect.h',
'gimpparamspecs.h',
'gimppatternselect.h',
'gimppdb.h',
'gimpplugin.h',
'gimpprocedure.h',
'gimpprocedureconfig.h',
'gimpprogress.h',
'gimpsaveprocedure.h',
'gimpselection.h',
'gimpthumbnailprocedure.h',
'gimpvectors.h',
pdb_wrappers_headers,
]
libgimp_headers = [
libgimp_headers_introspectable,
'gimpprocedure-params.h',
]
libgimpui_sources_introspectable = [
'gimpaspectpreview.c',
'gimpbrushselectbutton.c',
'gimpdrawablepreview.c',
'gimpexport.c',
'gimpfontselectbutton.c',
'gimpgradientselectbutton.c',
'gimpimagecombobox.c',
'gimpitemcombobox.c',
'gimppaletteselectbutton.c',
'gimppatternselectbutton.c',
'gimpprocbrowserdialog.c',
'gimpproceduredialog.c',
'gimpprocview.c',
'gimpprogressbar.c',
'gimpsaveproceduredialog.c',
'gimpselectbutton.c',
'gimpui.c',
'gimpzoompreview.c',
]
libgimpui_sources = [
libgimpui_sources_introspectable,
gimpuimarshal,
]
libgimpui_headers_introspectable = [
# Order matters. Leave these headers at the top.
'gimpui.h',
'gimpuitypes.h',
# Other headers
'gimpaspectpreview.h',
'gimpbrushselectbutton.h',
'gimpdrawablepreview.h',
'gimpexport.h',
'gimpfontselectbutton.h',
'gimpgradientselectbutton.h',
'gimpimagecombobox.h',
'gimpitemcombobox.h',
'gimppaletteselectbutton.h',
'gimppatternselectbutton.h',
'gimpprocbrowserdialog.h',
'gimpproceduredialog.h',
'gimpprocview.h',
'gimpprogressbar.h',
'gimpsaveproceduredialog.h',
'gimpselectbutton.h',
'gimpzoompreview.h',
]
libgimp_introspectable = [
libgimp_sources_introspectable,
libgimp_headers_introspectable,
]
libgimpui_introspectable = [
libgimpui_sources_introspectable,
libgimpui_headers_introspectable,
]
libgimp = library('gimp-'+ gimp_api_version,
libgimp_sources,
include_directories: rootInclude,
dependencies: [
gegl,
gexiv2,
drmingw,
gtk3,
],
sources: [
pdbgen
],
c_args: [ '-DG_LOG_DOMAIN="LibGimp"', '-DGIMP_COMPILATION', ],
link_with: [
libgimpbase,
libgimpcolor,
libgimpconfig,
libgimpmodule,
],
vs_module_defs: 'gimp.def',
install: true,
version: so_version,
)
# Define an internal dependency for ease of reuse
libgimp_dep = declare_dependency(
dependencies: [
cairo,
gdk_pixbuf,
gegl,
],
link_with: [
libgimp,
libgimpbase,
libgimpcolor,
libgimpconfig,
libgimpmath,
libgimpmodule,
],
include_directories: rootInclude,
)
libgimpui = library('gimpui-'+ gimp_api_version,
libgimpui_sources,
dependencies: [
libgimp_dep,
gexiv2,
gtk3,
],
c_args: [ '-DG_LOG_DOMAIN="LibGimpUI"', '-DGIMP_COMPILATION', ],
link_with: [
libgimpwidgets,
],
vs_module_defs: 'gimpui.def',
install: true,
version: so_version,
)
# Define an internal dependency for ease of reuse
libgimpui_dep = declare_dependency(
dependencies: [
libgimp_dep,
gtk3,
],
link_with: [
libgimpui,
libgimpwidgets,
],
include_directories: rootInclude,
)
install_headers(
libgimp_headers,
libgimpui_headers_introspectable,
subdir: gimp_api_name / 'libgimp',
)
### GObject introspection
libgimp_introspectable_files = [
libgimp_introspectable,
libgimpbase_introspectable,
libgimpcolor_introspectable,
libgimpconfig_introspectable,
libgimpmath_introspectable,
libgimpmodule_introspectable,
'gimpparamspecs-body.c',
]
libgimpui_introspectable_files = [
libgimpui_introspectable,
libgimpwidgets_introspectable,
]
if meson.is_cross_build() and not get_option('can-crosscompile-gir')
have_gobject_introspection = false
gobject_introspection_warning = '\n '.join(['',
'GObject Introspection is disabled while cross-compiling because',
'GI tools do not manage to properly generate introspection data',
'while cross-compiling. Nevertheless we consider our introspected',
'API as a core component of GIMP, thus you are expected to build',
'this data natively.',
'To forcefully build with GObject Introspection, set:',
'-Dcan-crosscompile-gir=true'
])
warning(gobject_introspection_warning)
warnings += gobject_introspection_warning
else
have_gobject_introspection = true
libgimp_gir_includes = [
'Babl-0.1',
'cairo-1.0',
'GdkPixbuf-2.0',
'Gegl-0.4',
'Gio-2.0',
'GLib-2.0',
'GObject-2.0',
'Gtk-3.0',
]
gir_args = [
'-DGIMP_COMPILATION',
'-DGIMP_BASE_COMPILATION',
'-DGIMP_COLOR_COMPILATION',
'-DGIMP_CONFIG_COMPILATION',
'-DGIMP_MATH_COMPILATION',
'-DGIMP_MODULE_COMPILATION',
'-DGIMP_THUMB_COMPILATION',
'-DGIMP_WIDGETS_COMPILATION',
'-DGIMP_DISABLE_DEPRECATED',
'--quiet',
]
libgimp_gir = gnome.generate_gir(
libgimp,
libgimpbase,
libgimpcolor,
libgimpconfig,
libgimpmath,
libgimpmodule,
sources: libgimp_introspectable_files,
nsversion: gimp_api_version,
namespace: 'Gimp',
identifier_prefix: 'Gimp',
symbol_prefix: 'gimp',
export_packages: 'gimp-' + gimp_api_version,
header: 'libgimp/gimp.h',
includes: libgimp_gir_includes,
extra_args: gir_args,
include_directories: rootInclude,
install: true,
)
libgimpui_gir = gnome.generate_gir(
libgimpui,
libgimpwidgets,
sources: libgimpui_introspectable_files,
nsversion: gimp_api_version,
namespace: 'GimpUi',
identifier_prefix: 'Gimp',
symbol_prefix: [ 'gimp_ui', 'gimp' ],
export_packages: 'gimp-ui-' + gimp_api_version,
header: 'libgimp/gimpui.h',
includes: [ libgimp_gir_includes, libgimp_gir[0] ],
extra_args: gir_args,
include_directories: rootInclude,
install: true,
)
if have_vala
vapi_deps = [
'babl-0.1',
'cairo-1.0',
'gdk-pixbuf-2.0',
'gegl-0.4',
'gio-2.0',
'glib-2.0',
'gobject-2.0',
'gtk+-3.0',
]
libgimp_vapi = gnome.generate_vapi('gimp-' + gimp_api_version,
sources: libgimp_gir[0],
packages: vapi_deps,
install: true,
)
libgimpui_vapi = gnome.generate_vapi('gimp-ui-' + gimp_api_version,
sources: libgimpui_gir[0],
packages: vapi_deps + [ libgimp_vapi ],
install: true,
)
endif
endif
if have_python
# Check .def files for Windows.
custom_target('check-def-files',
input: [
'../libgimpbase/gimpbase.def',
'../libgimpcolor/gimpcolor.def',
'../libgimpconfig/gimpconfig.def',
'../libgimp/gimp.def',
'../libgimp/gimpui.def',
'../libgimpmath/gimpmath.def',
'../libgimpmodule/gimpmodule.def',
'../libgimpthumb/gimpthumb.def',
'../libgimpwidgets/gimpwidgets.def',
],
depends: [
libgimpbase,
libgimpcolor,
libgimpconfig,
libgimp,
libgimpui,
libgimpmath,
libgimpmodule,
libgimpthumb,
libgimpwidgets
],
output: [ 'check-def-files', ],
command: [
python, meson.source_root() / 'tools' / 'defcheck.py', meson.source_root(),
],
build_by_default: true,
)
endif