Unlike the other bindings (Lua, JS, Vala) where we only have a demo plug-in, we actually have a bunch of interesting and useful Python plug-ins. Furthermore, we are running several Python scripts through GIMP during our build (to generate a few images), so pygobject becomes a build dependency anyway, even if it may not be a run dependency with -Dpython=disabled. This all becomes a bit confusing and in fact handling this case (of not installing Python plug-ins) seems like an annoyance while we lose good core plug-ins. So let's just make Python plug-ins mandatory. It's not like Python is very controversial these days, and AFAWK, it is available on every platform out there.
610 lines
15 KiB
Meson
610 lines
15 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', stamp_enumcode],
|
|
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 "pdb/stamp-enumcode.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,
|
|
'@INPUT0@',
|
|
],
|
|
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',
|
|
'gimpdrawableselect_pdb.c',
|
|
'gimpdynamics_pdb.c',
|
|
'gimpedit_pdb.c',
|
|
'gimpfile_pdb.c',
|
|
'gimpfloatingsel_pdb.c',
|
|
'gimpfont_pdb.c',
|
|
'gimpfonts_pdb.c',
|
|
'gimpfontselect_pdb.c',
|
|
'gimpgimprc_pdb.c',
|
|
'gimpgradient_pdb.c',
|
|
'gimpgradients_pdb.c',
|
|
'gimpgradientselect_pdb.c',
|
|
'gimpgrouplayer_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',
|
|
'gimppath_pdb.c',
|
|
'gimppattern_pdb.c',
|
|
'gimppatterns_pdb.c',
|
|
'gimppatternselect_pdb.c',
|
|
'gimpprogress_pdb.c',
|
|
'gimpresource_pdb.c',
|
|
'gimpselection_pdb.c',
|
|
'gimptextlayer_pdb.c',
|
|
'gimptexttool_pdb.c',
|
|
'gimpunit_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',
|
|
'gimpdrawableselect_pdb.h',
|
|
'gimpdynamics_pdb.h',
|
|
'gimpedit_pdb.h',
|
|
'gimpfile_pdb.h',
|
|
'gimpfloatingsel_pdb.h',
|
|
'gimpfont_pdb.h',
|
|
'gimpfonts_pdb.h',
|
|
'gimpfontselect_pdb.h',
|
|
'gimpgimprc_pdb.h',
|
|
'gimpgradient_pdb.h',
|
|
'gimpgradients_pdb.h',
|
|
'gimpgradientselect_pdb.h',
|
|
'gimpgrouplayer_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',
|
|
'gimppath_pdb.h',
|
|
'gimppattern_pdb.h',
|
|
'gimppatterns_pdb.h',
|
|
'gimppatternselect_pdb.h',
|
|
'gimpprogress_pdb.h',
|
|
'gimpresource_pdb.h',
|
|
'gimpselection_pdb.h',
|
|
'gimptextlayer_pdb.h',
|
|
'gimptexttool_pdb.h',
|
|
'gimpunit_pdb.h',
|
|
]
|
|
|
|
libgimp_sources_introspectable = [
|
|
'gimp.c',
|
|
'gimpbatchprocedure.c',
|
|
'gimpbrush.c',
|
|
'gimpchannel.c',
|
|
'gimpdisplay.c',
|
|
'gimpdrawable.c',
|
|
'gimpfileprocedure.c',
|
|
'gimpfont.c',
|
|
'gimpgimprc.c',
|
|
'gimpgradient.c',
|
|
'gimpgrouplayer.c',
|
|
'gimpimage.c',
|
|
'gimpimagecolorprofile.c',
|
|
'gimpimagemetadata.c',
|
|
'gimpimagemetadata-save.c',
|
|
'gimpimageprocedure.c',
|
|
'gimpitem.c',
|
|
'gimplayer.c',
|
|
'gimplayermask.c',
|
|
'gimploadprocedure.c',
|
|
'gimppalette.c',
|
|
'gimpparamspecs.c',
|
|
'gimppath.c',
|
|
'gimppattern.c',
|
|
'gimppdb.c',
|
|
'gimpplugin.c',
|
|
'gimpprocedure.c',
|
|
'gimpprocedure-params.c',
|
|
'gimpprocedureconfig.c',
|
|
'gimpprogress.c',
|
|
'gimpresource.c',
|
|
'gimpresourceselect.c',
|
|
'gimpexportprocedure.c',
|
|
'gimpselection.c',
|
|
'gimptextlayer.c',
|
|
'gimpthumbnailprocedure.c',
|
|
'gimpvectorloadprocedure.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',
|
|
'gimptilebackendplugin.c',
|
|
]
|
|
|
|
libgimp_headers_introspectable = [
|
|
# Order matters. Leave these headers at the top.
|
|
'gimp.h',
|
|
'gimptypes.h',
|
|
'gimpenums.h',
|
|
|
|
# Other headers
|
|
'gimpbatchprocedure.h',
|
|
'gimpbrush.h',
|
|
'gimpchannel.h',
|
|
'gimpdisplay.h',
|
|
'gimpdrawable.h',
|
|
'gimpfileprocedure.h',
|
|
'gimpfont.h',
|
|
'gimpgimprc.h',
|
|
'gimpgradient.h',
|
|
'gimpgrouplayer.h',
|
|
'gimpimage.h',
|
|
'gimpimagecolorprofile.h',
|
|
'gimpimagemetadata.h',
|
|
'gimpimageprocedure.h',
|
|
'gimpitem.h',
|
|
'gimplayer.h',
|
|
'gimplayermask.h',
|
|
'gimploadprocedure.h',
|
|
'gimppalette.h',
|
|
'gimpparamspecs.h',
|
|
'gimppath.h',
|
|
'gimppattern.h',
|
|
'gimppdb.h',
|
|
'gimpplugin.h',
|
|
'gimpprocedure.h',
|
|
'gimpprocedure-params.h',
|
|
'gimpprocedureconfig.h',
|
|
'gimpprogress.h',
|
|
'gimpresource.h',
|
|
'gimpresourceselect.h',
|
|
'gimpexportprocedure.h',
|
|
'gimpselection.h',
|
|
'gimptextlayer.h',
|
|
'gimpthumbnailprocedure.h',
|
|
'gimpvectorloadprocedure.h',
|
|
pdb_wrappers_headers,
|
|
]
|
|
|
|
libgimp_headers = [
|
|
libgimp_headers_introspectable,
|
|
]
|
|
|
|
libgimpui_sources_introspectable = [
|
|
'gimpaspectpreview.c',
|
|
'gimpbrushchooser.c',
|
|
'gimpdrawablechooser.c',
|
|
'gimpdrawablepreview.c',
|
|
'gimpexport.c',
|
|
'gimpfontchooser.c',
|
|
'gimpgradientchooser.c',
|
|
'gimpimagecombobox.c',
|
|
'gimpitemcombobox.c',
|
|
'gimppalettechooser.c',
|
|
'gimppatternchooser.c',
|
|
'gimpprocbrowserdialog.c',
|
|
'gimpproceduredialog.c',
|
|
'gimpprocview.c',
|
|
'gimpprogressbar.c',
|
|
'gimppropwidgets.c',
|
|
'gimpresourcechooser.c',
|
|
'gimpexportproceduredialog.c',
|
|
'gimpui.c',
|
|
'gimpzoompreview.c',
|
|
'gimpvectorloadproceduredialog.c',
|
|
]
|
|
|
|
libgimpui_sources = [
|
|
libgimpui_sources_introspectable,
|
|
gimpuimarshal,
|
|
|
|
# TODO: eventually move to libgimpwidgets.
|
|
'gimpresolutionentry-private.c'
|
|
]
|
|
|
|
libgimpui_headers_introspectable = [
|
|
# Order matters. Leave these headers at the top.
|
|
'gimpui.h',
|
|
'gimpuitypes.h',
|
|
|
|
# Other headers
|
|
'gimpaspectpreview.h',
|
|
'gimpbrushchooser.h',
|
|
'gimpdrawablechooser.h',
|
|
'gimpdrawablepreview.h',
|
|
'gimpexport.h',
|
|
'gimpfontchooser.h',
|
|
'gimpgradientchooser.h',
|
|
'gimpimagecombobox.h',
|
|
'gimpitemcombobox.h',
|
|
'gimppalettechooser.h',
|
|
'gimppatternchooser.h',
|
|
'gimpprocbrowserdialog.h',
|
|
'gimpproceduredialog.h',
|
|
'gimpprocview.h',
|
|
'gimpprogressbar.h',
|
|
'gimppropwidgets.h',
|
|
'gimpresourcechooser.h',
|
|
'gimpexportproceduredialog.h',
|
|
'gimpvectorloadproceduredialog.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: [
|
|
cairo,
|
|
gdk_pixbuf,
|
|
gegl,
|
|
gexiv2,
|
|
drmingw,
|
|
math,
|
|
pango,
|
|
pangoft2,
|
|
],
|
|
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
|
|
elif get_option('b_sanitize') != 'none'
|
|
have_gobject_introspection = false
|
|
gobject_introspection_warning = '\n '.join(['',
|
|
'GObject Introspection is disabled while building with a sanitizer.',
|
|
'See: https://gitlab.gnome.org/GNOME/gobject-introspection/-/issues/375'
|
|
])
|
|
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',
|
|
'Pango-1.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',
|
|
'--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, 'Gtk-3.0', libgimp_gir[0] ],
|
|
extra_args: gir_args,
|
|
include_directories: rootInclude,
|
|
install: true,
|
|
)
|
|
|
|
if platform_osx
|
|
g_ir_compiler = find_program('g-ir-compiler')
|
|
gimp_exe_typelib = custom_target('macos-typelib.stamp',
|
|
output: [ 'macos-typelib.stamp' ],
|
|
command: [
|
|
'make-in-build-typelib.sh', libgimp_gir, libgimpui_gir,
|
|
meson.current_build_dir(), prefix, g_ir_compiler
|
|
],
|
|
build_by_default: true)
|
|
endif
|
|
|
|
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 not platform_windows and not platform_osx
|
|
# Verify .def files for Windows.
|
|
# Ironically we only check this on non-Windows platform, since the
|
|
# script expects .so libraries, and I'm not sure that the `nm` tool is
|
|
# available on Windows.
|
|
# On the other hand, it is how it always has been, since we used to
|
|
# only run this on dist step (which we historically run on a GNU/Linux
|
|
# machine). And it worked fine until now.
|
|
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.project_source_root() / 'tools' / 'defcheck.py', meson.project_source_root(),
|
|
],
|
|
build_by_default: true,
|
|
)
|
|
endif
|