2017-11-01 21:27:13 +08:00
|
|
|
project('gimp',
|
|
|
|
'c', 'cpp',
|
2021-04-26 21:18:46 +08:00
|
|
|
version: '2.99.7',
|
2017-11-01 21:27:13 +08:00
|
|
|
meson_version: '>=0.50.0',
|
|
|
|
default_options: [
|
|
|
|
'cpp_std=gnu++14',
|
2019-10-25 22:24:39 +08:00
|
|
|
'buildtype=debugoptimized',
|
2017-11-01 21:27:13 +08:00
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
project_url = 'https://gitlab.gnome.org/GNOME/gimp'
|
|
|
|
project_url_issues = project_url + '/issues/new'
|
|
|
|
|
|
|
|
conf = configuration_data()
|
|
|
|
|
2019-08-29 21:36:18 +08:00
|
|
|
warnings = []
|
|
|
|
|
2017-11-01 21:27:13 +08:00
|
|
|
################################################################################
|
|
|
|
# Project info
|
|
|
|
|
|
|
|
prettyname = 'GIMP'
|
|
|
|
full_name = 'GNU Image Manipulation Program'
|
|
|
|
|
|
|
|
# General version
|
|
|
|
gimp_version = meson.project_version()
|
|
|
|
|
|
|
|
package_string= prettyname + ' ' + gimp_version
|
|
|
|
|
|
|
|
gimp_app_version_arr = gimp_version.split('.')
|
|
|
|
gimp_app_version_major = gimp_app_version_arr[0].to_int()
|
|
|
|
gimp_app_version_minor = gimp_app_version_arr[1].to_int()
|
|
|
|
gimp_app_version_micro = gimp_app_version_arr[2].to_int()
|
|
|
|
|
|
|
|
# Override for Release-candidates
|
|
|
|
gimp_app_version = '@0@.@1@'.format(
|
|
|
|
gimp_app_version_major,
|
|
|
|
gimp_app_version_minor
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# API & pkg-config version
|
|
|
|
api_version_major = gimp_app_version_major
|
|
|
|
api_version_minor = gimp_app_version_minor
|
|
|
|
|
|
|
|
if api_version_minor == 99
|
|
|
|
api_version_major += 1
|
|
|
|
api_version_minor = 0
|
|
|
|
endif
|
|
|
|
|
|
|
|
gimp_api_version = '@0@.@1@'.format(api_version_major, api_version_minor)
|
|
|
|
gimp_api_name = 'gimp-' + gimp_api_version
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gimp_command = 'gimp-' + gimp_app_version
|
|
|
|
|
|
|
|
gettext_package= 'gimp@0@@1@'.format(api_version_major, api_version_minor)
|
|
|
|
conf.set_quoted('GETTEXT_PACKAGE', gettext_package)
|
|
|
|
|
|
|
|
conf.set_quoted('GIMP_VERSION', gimp_version)
|
|
|
|
|
|
|
|
stable = (gimp_app_version_minor % 2 == 0)
|
2020-07-06 16:55:05 +08:00
|
|
|
conf.set('GIMP_UNSTABLE', stable ? false : 1)
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
versionconfig = configuration_data()
|
|
|
|
versionconfig.set('GIMP_FULL_NAME', full_name)
|
|
|
|
versionconfig.set('GIMP_MAJOR_VERSION', gimp_app_version_major)
|
|
|
|
versionconfig.set('GIMP_MINOR_VERSION', gimp_app_version_minor)
|
|
|
|
versionconfig.set('GIMP_MICRO_VERSION', gimp_app_version_micro)
|
|
|
|
versionconfig.set('GIMP_VERSION', gimp_version)
|
|
|
|
versionconfig.set('GIMP_API_VERSION', gimp_api_version)
|
|
|
|
|
|
|
|
|
2019-09-22 01:10:46 +08:00
|
|
|
# Libtool versioning
|
2017-11-01 21:27:13 +08:00
|
|
|
gimp_interface_age = 0
|
|
|
|
lt_current = 0
|
|
|
|
lt_revision = gimp_app_version_micro
|
|
|
|
lt_age = 100*api_version_minor + 0
|
|
|
|
so_version = '@0@.@1@.@2@'.format(lt_current, lt_age, lt_revision)
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Get configuration and Meson modules
|
|
|
|
|
|
|
|
pkgconfig = import('pkgconfig')
|
|
|
|
i18n = import('i18n')
|
|
|
|
gnome = import('gnome')
|
|
|
|
pythonmod = import('python')
|
2020-05-12 18:47:00 +08:00
|
|
|
simd = import('unstable-simd')
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
cc = meson.get_compiler('c')
|
|
|
|
cxx = meson.get_compiler('cpp')
|
|
|
|
prefix = get_option('prefix')
|
|
|
|
buildtype = get_option('buildtype')
|
|
|
|
|
|
|
|
compiler_args = []
|
|
|
|
linker_args = []
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Host system detection
|
|
|
|
|
2019-10-28 14:00:28 +08:00
|
|
|
host_cpu_family = host_machine.cpu_family()
|
|
|
|
message('Host machine cpu family: ' + host_cpu_family)
|
|
|
|
|
|
|
|
host_cpu_family = host_machine.cpu_family()
|
|
|
|
if host_cpu_family == 'x86'
|
|
|
|
have_x86 = true
|
|
|
|
conf.set10('ARCH_X86', true)
|
|
|
|
elif host_cpu_family == 'x86_64'
|
|
|
|
have_x86 = true
|
|
|
|
conf.set10('ARCH_X86', true)
|
|
|
|
conf.set10('ARCH_X86_64', true)
|
|
|
|
elif host_cpu_family == 'ppc'
|
|
|
|
have_ppc = true
|
|
|
|
conf.set10('ARCH_PPC', true)
|
|
|
|
elif host_cpu_family == 'ppc64'
|
|
|
|
have_ppc = true
|
|
|
|
conf.set10('ARCH_PPC', true)
|
|
|
|
conf.set10('ARCH_PPC64', true)
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
host_os = host_machine.system().to_lower()
|
|
|
|
message('Host os: ' + host_os)
|
|
|
|
|
|
|
|
platform_linux = (
|
|
|
|
host_os.contains('linux')
|
|
|
|
)
|
|
|
|
|
|
|
|
platform_windows = (
|
|
|
|
host_os.contains('mingw') or
|
|
|
|
host_os.contains('cygwin') or
|
|
|
|
host_os.contains('windows')
|
|
|
|
)
|
|
|
|
|
|
|
|
platform_osx = (
|
|
|
|
host_os.contains('machten') or
|
|
|
|
host_os.contains('rhapsody') or
|
|
|
|
host_os.contains('darwin')
|
|
|
|
)
|
|
|
|
|
2020-01-19 06:38:26 +08:00
|
|
|
if platform_osx
|
|
|
|
conf.set('PLATFORM_OSX', 1)
|
|
|
|
endif
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
if platform_windows
|
|
|
|
windows = import('windows')
|
|
|
|
# AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
|
|
|
|
# AM_CONDITIONAL(MS_LIB_AVAILABLE, test "x$ms_librarian" = xyes)
|
|
|
|
# compiler_args += '-Wl,--large-address-aware'
|
|
|
|
endif
|
|
|
|
|
2020-01-19 06:38:26 +08:00
|
|
|
# on OSX ObjC and C sources are mixed so adding objc to the linkflags
|
|
|
|
|
|
|
|
osx_ldflags = []
|
|
|
|
if platform_osx
|
|
|
|
add_languages('objc')
|
|
|
|
osx_ldflags += ['-Wl,-framework,Foundation', '-Wl,-framework,AppKit', '-ObjC']
|
|
|
|
add_project_link_arguments(osx_ldflags, language : ['objc', 'c'])
|
|
|
|
endif
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
if cc.get_id() == 'gcc' and cc.version() == '7.2.0'
|
2019-08-29 21:36:18 +08:00
|
|
|
gcc_warning = '''
|
2017-11-01 21:27:13 +08:00
|
|
|
GCC 7.2.0 has a serious bug affecting GEGL/GIMP. We advise
|
|
|
|
against using this version of the compiler (previous and
|
|
|
|
further versions are fine).
|
|
|
|
See https://bugzilla.gnome.org/show_bug.cgi?id=787222
|
2019-08-29 21:36:18 +08:00
|
|
|
'''
|
|
|
|
warning(gcc_warning)
|
|
|
|
warnings += gcc_warning
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Compiler CPU extensions for optimizations
|
2021-06-16 06:12:02 +08:00
|
|
|
#
|
|
|
|
# -- Don't enable these flags project-wide, only files needing them
|
|
|
|
# should be built with a given extension, which we do with meson simd
|
|
|
|
# module. Otherwise GIMP would end up crashing when run on CPUs which
|
|
|
|
# don't support all the flags supported by the compiler.
|
|
|
|
# See merge request !262 for more details.
|
2020-05-12 18:47:00 +08:00
|
|
|
|
|
|
|
# Note that Meson has a SIMD module which can also do this for us, but it uses
|
|
|
|
# its own #defines and we want to stay compatible with the autotools build
|
|
|
|
conf.set('USE_MMX', cc.has_argument('-mmx'))
|
|
|
|
conf.set('USE_SSE', cc.has_argument('-sse'))
|
|
|
|
conf.set10('COMPILE_SSE2_INTRINISICS', cc.has_argument('-msse2'))
|
|
|
|
conf.set10('COMPILE_SSE4_1_INTRINISICS', cc.has_argument('-msse4.1'))
|
|
|
|
|
|
|
|
if host_cpu_family == 'ppc'
|
|
|
|
altivec_args = cc.get_supported_arguments([
|
|
|
|
'-faltivec',
|
|
|
|
'-maltivec',
|
|
|
|
'-mabi=altivec',
|
|
|
|
])
|
|
|
|
|
|
|
|
if altivec_args != []
|
|
|
|
if host_os.contains('darwin')
|
|
|
|
conf.set('USE_ALTIVEC', true)
|
|
|
|
conf.set('HAVE_ALTIVEC_SYSCTL', true)
|
|
|
|
elif cc.compiles('''
|
|
|
|
int main() { asm ("vand %v0, %v0, %v0"); return 0; }
|
|
|
|
''')
|
|
|
|
conf.set('USE_ALTIVEC', true)
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# CFlags
|
|
|
|
|
|
|
|
|
|
|
|
if get_option('profiling') and cc.get_id() == 'gcc'
|
|
|
|
compiler_args += '-pg'
|
|
|
|
linker_args += '-pg'
|
|
|
|
endif
|
|
|
|
|
|
|
|
if get_option('ansi')
|
|
|
|
compiler_args += [ '-ansi', '-pedantic']
|
|
|
|
endif
|
|
|
|
|
|
|
|
warning_cflags_common = [
|
|
|
|
'-fdiagnostics-show-option',
|
|
|
|
'-fno-common',
|
|
|
|
|
2019-11-06 19:54:04 +08:00
|
|
|
'-Wformat',
|
2017-11-01 21:27:13 +08:00
|
|
|
'-Wformat-security',
|
|
|
|
'-Winit-self',
|
|
|
|
'-Wlogical-op',
|
|
|
|
'-Wmissing-declarations',
|
|
|
|
'-Wmissing-format-attribute',
|
|
|
|
'-Wpointer-arith',
|
|
|
|
'-Wreturn-type',
|
|
|
|
'-Wtype-limits',
|
|
|
|
]
|
|
|
|
warning_cflags_c = [
|
2020-02-18 15:06:10 +08:00
|
|
|
'-Wabsolute-value',
|
2017-11-01 21:27:13 +08:00
|
|
|
'-Wdeclaration-after-statement',
|
2020-02-18 15:06:10 +08:00
|
|
|
'-Wenum-conversion',
|
|
|
|
'-Wliteral-conversion',
|
2017-11-01 21:27:13 +08:00
|
|
|
'-Wno-strict-prototypes',
|
2020-02-18 15:06:10 +08:00
|
|
|
'-Wold-style-definition',
|
|
|
|
'-Wparentheses-equality',
|
|
|
|
'-W#pragma-messages',
|
|
|
|
'-Wsometimes-uninitialized',
|
|
|
|
'-Wtautological-unsigned-enum-zero-compare',
|
|
|
|
'-Wunneeded-internal-declaration',
|
|
|
|
'-Wunused-function',
|
|
|
|
'-Wunused-value',
|
2019-09-13 00:51:04 +08:00
|
|
|
|
|
|
|
'-Werror=implicit-function-declaration',
|
2017-11-01 21:27:13 +08:00
|
|
|
]
|
|
|
|
warning_cflags_cpp = [
|
|
|
|
]
|
|
|
|
|
|
|
|
compiler_args += cc.get_supported_arguments(warning_cflags_common)
|
|
|
|
add_project_arguments(cc .get_supported_arguments(warning_cflags_c), language: 'c')
|
|
|
|
add_project_arguments(cxx.get_supported_arguments(warning_cflags_cpp), language: 'cpp')
|
|
|
|
|
|
|
|
|
|
|
|
# Ensure MSVC-compatible struct packing convention is used when
|
|
|
|
# compiling for Win32 with gcc.
|
|
|
|
if platform_windows and cc.get_id() == 'gcc'
|
|
|
|
msvc_compat_args = cc.first_supported_argument([
|
|
|
|
'-fnative-struct',
|
|
|
|
'-mms-bitfields',
|
|
|
|
])
|
|
|
|
if msvc_compat_args == []
|
|
|
|
error('''
|
|
|
|
GCC does not support '-fnative-struct' nor '-mms-bitfields'.
|
|
|
|
Build will be incompatible with GTK+ DLLs.
|
|
|
|
''')
|
|
|
|
endif
|
|
|
|
compiler_args += msvc_compat_args
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
conf.set('HAVE__NL_MEASUREMENT_MEASUREMENT',
|
|
|
|
cc.compiles('''
|
|
|
|
#include<langinfo.h>
|
|
|
|
int main() {
|
|
|
|
char c = *((unsigned char *) nl_langinfo(_NL_MEASUREMENT_MEASUREMENT));
|
|
|
|
}
|
|
|
|
''')
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Dependencies
|
|
|
|
no_dep = dependency('', required: false)
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Mandatory Dependencies
|
|
|
|
|
2020-03-18 01:48:54 +08:00
|
|
|
if get_option('relocatable-bundle') == 'yes'
|
2019-09-21 19:32:13 +08:00
|
|
|
relocatable_bundle = true
|
2020-03-18 01:48:54 +08:00
|
|
|
elif get_option('relocatable-bundle') == 'no'
|
2019-09-21 19:32:13 +08:00
|
|
|
relocatable_bundle = false
|
2020-03-18 01:48:54 +08:00
|
|
|
else # == 'platform-default'
|
2019-09-21 19:32:13 +08:00
|
|
|
# By default, assume building for Windows or macOS everything to be on
|
|
|
|
# the same prefix and can be relocated.
|
|
|
|
# On other platforms, build-time paths are meaningful.
|
|
|
|
if platform_windows or platform_osx
|
|
|
|
relocatable_bundle = true
|
|
|
|
else
|
|
|
|
relocatable_bundle = false
|
|
|
|
endif
|
|
|
|
endif
|
2017-11-01 21:27:13 +08:00
|
|
|
conf.set('ENABLE_RELOCATABLE_RESOURCES', relocatable_bundle)
|
|
|
|
|
|
|
|
|
|
|
|
math = cc.find_library('m')
|
|
|
|
dl = platform_windows ? no_dep : cc.find_library('dl')
|
|
|
|
rpc = platform_windows ? cc.find_library('rpcrt4') : no_dep
|
|
|
|
dbghelp = platform_windows ? cc.find_library('dbghelp') : no_dep
|
|
|
|
winsock = platform_windows ? cc.find_library('ws2_32') : no_dep
|
2019-10-25 16:46:53 +08:00
|
|
|
atk_minver = '2.4.0'
|
|
|
|
atk = dependency('atk', version: '>='+atk_minver)
|
2020-06-08 02:33:32 +08:00
|
|
|
babl_minver = '0.1.78'
|
2019-10-25 16:46:53 +08:00
|
|
|
babl = dependency('babl', version: '>='+babl_minver)
|
|
|
|
cairo_minver = '1.12.2'
|
|
|
|
cairo = dependency('cairo', version: '>='+cairo_minver)
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
# fontconfig_name = platform_windows ? 'fontconfig_win32' : 'fontconfig'
|
|
|
|
fontconfig_name = 'fontconfig'
|
2019-10-25 16:46:53 +08:00
|
|
|
fontconfig_minver = '2.12.4'
|
|
|
|
fontconfig = dependency(fontconfig_name, version: '>='+fontconfig_minver)
|
|
|
|
freetype2_minver = '2.1.7'
|
|
|
|
freetype2 = dependency('freetype2', version: '>='+freetype2_minver)
|
|
|
|
gdk_pixbuf_minver = '2.30.8'
|
|
|
|
gdk_pixbuf = dependency('gdk-pixbuf-2.0', version: '>='+gdk_pixbuf_minver)
|
2021-09-06 02:34:04 +08:00
|
|
|
gegl_minver = '0.4.32'
|
2019-10-25 16:46:53 +08:00
|
|
|
gegl = dependency('gegl-0.4', version: '>='+gegl_minver)
|
|
|
|
gexiv2_minver = '0.10.6'
|
|
|
|
gexiv2 = dependency('gexiv2', version: '>='+gexiv2_minver)
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
gio = dependency('gio-2.0')
|
|
|
|
gio_specific_name = platform_windows ? 'gio-windows-2.0' : 'gio-unix-2.0'
|
|
|
|
gio_specific = dependency(gio_specific_name)
|
|
|
|
|
2021-08-26 22:57:07 +08:00
|
|
|
glib_minver = '2.68.0'
|
2019-10-25 16:46:53 +08:00
|
|
|
glib = dependency('glib-2.0', version: '>='+glib_minver)
|
2019-09-21 21:12:08 +08:00
|
|
|
|
|
|
|
conf.set('G_DISABLE_DEPRECATED', glib.version().version_compare('>=2.57'))
|
2017-11-01 21:27:13 +08:00
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
gobject = dependency('gobject-2.0', version: '>='+glib_minver)
|
2017-11-01 21:27:13 +08:00
|
|
|
gmodule = dependency('gmodule-no-export-2.0')
|
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
gtk3_minver = '3.16.10'
|
|
|
|
gtk3 = dependency('gtk+-3.0', version: '>='+gtk3_minver)
|
2020-11-16 00:25:49 +08:00
|
|
|
harfbuzz_minver = '1.0.5'
|
2019-10-25 16:46:53 +08:00
|
|
|
harfbuzz = dependency('harfbuzz', version: '>='+harfbuzz_minver)
|
2019-12-09 10:00:57 +08:00
|
|
|
json_glib = dependency('json-glib-1.0', version: '>=1.2.6')
|
2019-10-25 16:46:53 +08:00
|
|
|
lcms_minver = '2.8'
|
|
|
|
lcms = dependency('lcms2', version: '>='+lcms_minver)
|
|
|
|
libmypaint_minver = '1.3.0'
|
|
|
|
libmypaint = dependency('libmypaint', version: '>='+libmypaint_minver)
|
|
|
|
mypaint_brushes = dependency('mypaint-brushes-1.0',version: '>='+libmypaint_minver)
|
2019-11-13 00:21:25 +08:00
|
|
|
if not libmypaint.version().version_compare('>=1.4.0')
|
|
|
|
libmypaint_warning='''
|
|
|
|
|
|
|
|
libmypaint lower than version 1.4.0 is known to crash when
|
|
|
|
parsing MyPaint 2 brushes. Please update.
|
|
|
|
'''
|
|
|
|
warning(libmypaint_warning)
|
|
|
|
warnings += libmypaint_warning
|
|
|
|
endif
|
|
|
|
|
2017-11-01 21:27:13 +08:00
|
|
|
|
2019-09-21 19:32:13 +08:00
|
|
|
if relocatable_bundle
|
2019-10-25 16:46:53 +08:00
|
|
|
mypaint_brushes_dir = '${gimp_installation_dir}'\
|
|
|
|
/'share'/'mypaint-data'/'1.0'/'brushes'
|
2019-09-21 19:32:13 +08:00
|
|
|
else
|
|
|
|
mypaint_brushes_dir = mypaint_brushes.get_pkgconfig_variable('brushesdir')
|
|
|
|
endif
|
2017-11-01 21:27:13 +08:00
|
|
|
|
2019-09-21 19:32:13 +08:00
|
|
|
conf.set_quoted('MYPAINT_BRUSHES_DIR', mypaint_brushes_dir)
|
2017-11-01 21:27:13 +08:00
|
|
|
|
2020-11-16 00:25:49 +08:00
|
|
|
pangocairo_minver = '1.44.0'
|
2019-10-25 16:46:53 +08:00
|
|
|
pangocairo = dependency('pangocairo', version: '>='+pangocairo_minver)
|
2017-11-01 21:27:13 +08:00
|
|
|
pangoft2 = dependency('pangoft2', version: '>=1.29.4')
|
2019-10-25 16:46:53 +08:00
|
|
|
rsvg_minver = '2.40.6'
|
|
|
|
rsvg = dependency('librsvg-2.0', version: '>='+rsvg_minver)
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
conf.set('PANGO_DISABLE_DEPRECATED',pangocairo.version().version_compare('<1.43'))
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Check for GLib Networking
|
|
|
|
|
2019-09-21 18:22:57 +08:00
|
|
|
glib_networking_works_run=false
|
|
|
|
if meson.is_cross_build() and not meson.has_exe_wrapper()
|
|
|
|
# Cross-compilation without run capability: we won't be able to
|
|
|
|
# check networking support.
|
|
|
|
glib_networking_works = true
|
2019-08-29 21:36:18 +08:00
|
|
|
glib_warning = '''
|
2019-09-21 18:22:57 +08:00
|
|
|
Test for glib-networking cannot be performed while cross-compiling,
|
|
|
|
unless you set an `exe_wrapper` binary in your toolchain file.
|
2017-11-01 21:27:13 +08:00
|
|
|
Make sure glib-networking is installed, otherwise GIMP will not be able
|
|
|
|
to display the remote help pages through the help browser, nor will it
|
|
|
|
be able to open remote HTTPS (or other protocol using SSL/TLS) files.
|
|
|
|
HTTPS is becoming the expected standard and should not be considered
|
|
|
|
optional anymore.
|
2019-08-29 21:36:18 +08:00
|
|
|
'''
|
|
|
|
warning(glib_warning)
|
|
|
|
warnings += glib_warning
|
2019-09-21 18:22:57 +08:00
|
|
|
else # not meson.is_cross_build() or meson.has_exe_wrapper()
|
|
|
|
glib_networking_works_run = cc.run(
|
|
|
|
'''#include <gio/gio.h>
|
|
|
|
int main() {
|
|
|
|
return !g_tls_backend_supports_tls (g_tls_backend_get_default ());
|
|
|
|
}''',
|
|
|
|
dependencies: gio,
|
|
|
|
)
|
|
|
|
glib_networking_works = (glib_networking_works_run.compiled() and
|
|
|
|
glib_networking_works_run.returncode() == 0)
|
|
|
|
if not glib_networking_works and meson.is_cross_build()
|
|
|
|
# Since cross-platform test runs may be unreliable, let's be
|
|
|
|
# flexible and pass the test with a warning.
|
|
|
|
glib_networking_works = true
|
|
|
|
glib_warning = '''
|
|
|
|
The cross-platform test for glib-networking failed, using the
|
|
|
|
`exe_wrapper` set in your toolchain file.
|
|
|
|
Make sure glib-networking is installed, otherwise GIMP will not be able
|
|
|
|
to display the remote help pages through the help browser, nor will it
|
|
|
|
be able to open remote HTTPS (or other protocol using SSL/TLS) files.
|
|
|
|
HTTPS is becoming the expected standard and should not be considered
|
|
|
|
optional anymore.
|
|
|
|
'''
|
|
|
|
warning(glib_warning)
|
|
|
|
warnings += glib_warning
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
if not glib_networking_works
|
|
|
|
error('Test for glib-networking failed. This is required.')
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Check if Pango is built with a recent fontconfig
|
|
|
|
|
2019-09-21 18:36:48 +08:00
|
|
|
pango_check = cc.links(
|
2017-11-01 21:27:13 +08:00
|
|
|
'''#include <fontconfig/fontconfig.h>
|
|
|
|
int main() {
|
|
|
|
FcObjectSet *os; os = FcObjectSetBuild (FC_FAMILY, FC_WIDTH);
|
|
|
|
}''',
|
|
|
|
dependencies: fontconfig,
|
|
|
|
)
|
|
|
|
|
|
|
|
if not pango_check
|
2019-08-29 21:36:18 +08:00
|
|
|
pango_warning = '\n *** '.join([
|
2017-11-01 21:27:13 +08:00
|
|
|
'You have a fontconfig >= fontconfig_required_version installed on your',
|
|
|
|
'system, but your Pango library is using an older version. This old version',
|
|
|
|
'is probably in /usr/X11R6. Look at the above output, and note that the',
|
|
|
|
'result for FONTCONFIG_CFLAGS is not in the result for PANGOCAIRO_CFLAGS,',
|
|
|
|
'and that there is likely an extra -I line, other than the ones for GLIB,',
|
|
|
|
'Freetype, and Pango itself. That\'s where your old fontconfig files are.',
|
|
|
|
'Rebuild pango, and make sure that it uses the newer fontconfig.',
|
|
|
|
'The easiest way be sure of this is to simply get rid of the old',
|
|
|
|
'fontconfig. When you rebuild pango, make sure the result for',
|
|
|
|
'FONTCONFIG_CFLAGS is the same as the result here.',
|
2019-08-29 21:36:18 +08:00
|
|
|
])
|
|
|
|
warning(pango_warning)
|
|
|
|
warnings += pango_warning
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Optional Dependencies
|
|
|
|
|
|
|
|
libsocket = cc.find_library('socket', required: false)
|
|
|
|
conf.set('HAVE_LIBSOCKET', libsocket.found())
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Check for extension support
|
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
appstream_glib_minver = '0.7.7'
|
|
|
|
appstream_glib = dependency('appstream-glib', version: '>='+appstream_glib_minver)
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
libarchive = dependency('libarchive')
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Check for debug console (Win32)
|
|
|
|
|
|
|
|
if platform_windows
|
|
|
|
conf.set('ENABLE_WIN32_DEBUG_CONSOLE', get_option('win32-debug-console'))
|
|
|
|
endif
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Check for 32-bit DLLs (Win32 64-bit)
|
|
|
|
|
2019-10-28 14:48:46 +08:00
|
|
|
if platform_windows and host_cpu_family == 'x86_64'
|
2017-11-01 21:27:13 +08:00
|
|
|
conf.set_quoted('WIN32_32BIT_DLL_FOLDER', get_option('win32-32bits-dll-folder'))
|
|
|
|
endif
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Check for detailed backtraces support
|
|
|
|
|
|
|
|
## Check for libbacktrace
|
|
|
|
|
2019-09-12 02:02:15 +08:00
|
|
|
if get_option('libbacktrace')
|
|
|
|
libbacktrace = cc.find_library('backtrace', required: false)
|
|
|
|
|
|
|
|
if libbacktrace.found()
|
2019-09-21 18:36:48 +08:00
|
|
|
libbacktrace_links = cc.links('''
|
2019-09-12 02:02:15 +08:00
|
|
|
#include <stddef.h>
|
|
|
|
#include <backtrace.h>
|
|
|
|
#include <backtrace-supported.h>
|
|
|
|
|
|
|
|
#if ! BACKTRACE_SUPPORTED
|
|
|
|
# error ! BACKTRACE_SUPPORTED
|
|
|
|
#endif
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
(void) backtrace_create_state (NULL, 0, NULL, NULL);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
''',
|
|
|
|
dependencies: libbacktrace,
|
|
|
|
)
|
|
|
|
|
2019-09-21 18:36:48 +08:00
|
|
|
if not libbacktrace_links
|
2019-09-12 02:02:15 +08:00
|
|
|
warning(
|
|
|
|
'libbacktrace was found, but the test compilation failed.\n' +
|
|
|
|
'You can find more info in meson-logs/meson-logs.txt.'
|
|
|
|
)
|
|
|
|
libbacktrace = no_dep
|
|
|
|
endif
|
|
|
|
|
|
|
|
endif
|
|
|
|
else
|
|
|
|
libbacktrace = no_dep
|
|
|
|
endif
|
2017-11-01 21:27:13 +08:00
|
|
|
conf.set('HAVE_LIBBACKTRACE', libbacktrace.found())
|
|
|
|
|
|
|
|
## Check for libunwind
|
|
|
|
libunwind = ( get_option('libunwind')
|
|
|
|
? dependency('libunwind', version: '>=1.1.0', required: false)
|
|
|
|
: no_dep
|
|
|
|
)
|
|
|
|
conf.set('HAVE_LIBUNWIND', libunwind.found())
|
|
|
|
|
|
|
|
|
|
|
|
## Check for Dr. Mingw
|
|
|
|
drmingw = no_dep
|
|
|
|
if platform_windows
|
2019-09-21 18:36:48 +08:00
|
|
|
exchndl = cc.find_library('exchndl', required: false)
|
2017-11-01 21:27:13 +08:00
|
|
|
exchndl_fn = cc.has_function('ExcHndlSetLogFileNameA', dependencies: exchndl)
|
|
|
|
if exchndl.found() and exchndl_fn
|
|
|
|
drmingw = declare_dependency(dependencies: exchndl)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
conf.set('HAVE_EXCHNDL', drmingw.found())
|
|
|
|
|
|
|
|
|
|
|
|
detailed_backtraces = (
|
|
|
|
libbacktrace.found() or
|
|
|
|
libunwind.found() or
|
|
|
|
drmingw.found()
|
|
|
|
)
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Check for x11 support
|
|
|
|
|
|
|
|
x11_target = gtk3.get_pkgconfig_variable('targets').contains('x11')
|
|
|
|
|
|
|
|
x11 = x11_target ? dependency('x11') : no_dep
|
|
|
|
xmu = x11_target ? dependency('xmu') : no_dep
|
|
|
|
xext = x11_target ? dependency('xext') : no_dep
|
|
|
|
xfixes= x11_target ? dependency('xfixes') : no_dep
|
|
|
|
x11_deps = [ x11, xmu, xext, xfixes ]
|
|
|
|
conf.set('HAVE_XFIXES', xfixes.found())
|
|
|
|
|
|
|
|
if x11_target
|
|
|
|
foreach header : [ 'X11/Xmu/WinUtil.h', 'X11/extensions/shape.h', ]
|
|
|
|
if not cc.has_header(header, dependencies: [ xext, xmu ])
|
|
|
|
error('x11 install does not provide required header ' + header)
|
|
|
|
endif
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
foreach function : [ 'XmuClientWindow', 'XShapeGetRectangles', ]
|
|
|
|
if not cc.has_function(function, dependencies: [ xext, xmu ])
|
|
|
|
error('x11 install does not provide required function ' + function)
|
|
|
|
endif
|
|
|
|
endforeach
|
|
|
|
endif
|
2019-10-25 16:46:53 +08:00
|
|
|
conf.set('HAVE_X11_EXTENSIONS_SHAPE_H',
|
|
|
|
x11_target and cc.has_header('X11/extensions/shape.h'))
|
|
|
|
conf.set('HAVE_X11_XMU_WINUTIL_H',
|
|
|
|
x11_target and cc.has_header('X11/Xmu/WinUtil.h'))
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
|
2020-07-06 17:03:21 +08:00
|
|
|
have_print = get_option('print')
|
|
|
|
|
2017-11-01 21:27:13 +08:00
|
|
|
# Features requiring x11
|
|
|
|
|
|
|
|
have_doc_shooter= x11_target
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Plugins (optional dependencies)
|
|
|
|
|
|
|
|
# The list of MIME types that are supported by plug-ins
|
|
|
|
MIMEtypes = [
|
|
|
|
'image/bmp',
|
|
|
|
'image/g3fax',
|
|
|
|
'image/gif',
|
|
|
|
'image/svg+xml',
|
|
|
|
'image/x-compressed-xcf',
|
|
|
|
'image/x-fits',
|
|
|
|
'image/x-gimp-gbr',
|
|
|
|
'image/x-gimp-gih',
|
|
|
|
'image/x-gimp-pat',
|
|
|
|
'image/x-pcx',
|
|
|
|
'image/x-portable-anymap',
|
|
|
|
'image/x-portable-bitmap',
|
|
|
|
'image/x-portable-graymap',
|
|
|
|
'image/x-portable-pixmap',
|
|
|
|
'image/x-psd',
|
|
|
|
'image/x-sgi',
|
meson, configure, plug-ins: image/x-sun-raster is a supported MimeTypes.
Also ".sun" is a possible (and common) file name extension for Sun
Raster images, according to various sources and samples I found (these
samples with .sun extension also opened fine in GIMP, so it's not just a
subvariant which we may not handle or something of the sort). This one
is not so important though as we also register magic bytes for detection
(which is the proper way), but it can still be useful, mostly for
exporting (as we will direct to the SunRaster plug-in if someone tried
to export a file with .sun extension, since no other file format uses
this extension AFAICS).
There is no functional change, I just had a look at this plug-in while
handling !428 and realized this format was not present in the MimeType
list (which is used to generate the desktop file, in order to have
proper mime types, not detection based on extension only, unlike
Windows in !428).
2021-04-04 21:44:26 +08:00
|
|
|
'image/x-sun-raster',
|
2017-11-01 21:27:13 +08:00
|
|
|
'image/x-tga',
|
|
|
|
'image/x-xbitmap',
|
|
|
|
'image/x-xcf',
|
|
|
|
'image/x-xwindowdump',
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-11-17 11:08:15 +08:00
|
|
|
libtiff = dependency('libtiff-4')
|
|
|
|
MIMEtypes += 'image/tiff'
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
|
2020-11-17 11:08:15 +08:00
|
|
|
libjpeg = dependency('libjpeg')
|
|
|
|
MIMEtypes += 'image/jpeg'
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
zlib = dependency('zlib')
|
|
|
|
MIMEtypes += 'image/x-psp'
|
|
|
|
|
|
|
|
bz2 = cc.find_library('bz2')
|
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
liblzma_minver = '5.0.0'
|
|
|
|
liblzma = dependency('liblzma', version: '>='+liblzma_minver)
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
ghostscript = cc.find_library('gs', required: get_option('ghostscript'))
|
|
|
|
if ghostscript.found()
|
|
|
|
MIMEtypes += 'application/postscript'
|
|
|
|
else
|
|
|
|
ghostscript = disabler()
|
|
|
|
endif
|
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
libpng_minver = '1.6.25'
|
|
|
|
libpng = dependency('libpng', version: '>='+libpng_minver,
|
|
|
|
required: get_option('png')
|
|
|
|
)
|
2017-11-01 21:27:13 +08:00
|
|
|
if libpng.found()
|
|
|
|
MIMEtypes += [ 'image/png', 'image/x-icon']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
libmng = cc.find_library('mng', required: get_option('mng'))
|
|
|
|
|
|
|
|
libaa = cc.find_library('aa', required: get_option('aa'))
|
|
|
|
|
|
|
|
libxpm = dependency('xpm', required: get_option('xpm'))
|
|
|
|
if libxpm.found()
|
|
|
|
MIMEtypes += 'image/x-xpixmap'
|
|
|
|
endif
|
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
openexr_minver = '1.6.1'
|
|
|
|
openexr = dependency('OpenEXR', version: '>='+openexr_minver,
|
|
|
|
required: get_option('openexr')
|
|
|
|
)
|
2017-11-01 21:27:13 +08:00
|
|
|
if openexr.found()
|
|
|
|
MIMEtypes += 'image/x-exr'
|
|
|
|
endif
|
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
webp_minver = '0.6.0'
|
2017-11-01 21:27:13 +08:00
|
|
|
webp_libs = [
|
2019-10-25 16:46:53 +08:00
|
|
|
dependency('libwebp', version: '>='+webp_minver, required: get_option('webp')),
|
|
|
|
dependency('libwebpmux', version: '>='+webp_minver, required: get_option('webp')),
|
|
|
|
dependency('libwebpdemux',version: '>='+webp_minver, required: get_option('webp')),
|
2017-11-01 21:27:13 +08:00
|
|
|
]
|
|
|
|
webp_found = true
|
|
|
|
foreach lib : webp_libs
|
|
|
|
webp_found = webp_found and lib.found()
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
if webp_found
|
2020-07-23 01:45:05 +08:00
|
|
|
MIMEtypes += [
|
|
|
|
'image/x-webp',
|
|
|
|
'image/webp'
|
|
|
|
]
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
libheif_minver = '1.3.2'
|
|
|
|
libheif = dependency('libheif', version: '>='+libheif_minver,
|
|
|
|
required: get_option('heif')
|
|
|
|
)
|
2019-11-12 22:56:49 +08:00
|
|
|
conf.set('HAVE_LIBHEIF_1_4_0', libheif.version().version_compare('>=1.4.0'))
|
|
|
|
conf.set('HAVE_LIBHEIF_1_6_0', libheif.version().version_compare('>=1.6.0'))
|
2017-11-01 21:27:13 +08:00
|
|
|
|
2020-10-22 17:54:51 +08:00
|
|
|
can_import_heic = false
|
|
|
|
can_export_heic = false
|
|
|
|
can_import_avif = false
|
|
|
|
can_export_avif = false
|
2017-11-01 21:27:13 +08:00
|
|
|
|
2020-10-20 00:52:18 +08:00
|
|
|
have_heif = libheif.found()
|
2019-11-13 19:52:43 +08:00
|
|
|
libheif_warning=''
|
2020-10-20 00:52:18 +08:00
|
|
|
if have_heif
|
|
|
|
have_heif = true
|
2020-10-22 17:54:51 +08:00
|
|
|
can_import_heic = (libheif.get_pkgconfig_variable('builtin_h265_decoder') == 'yes')
|
|
|
|
can_export_heic = (libheif.get_pkgconfig_variable('builtin_h265_encoder') == 'yes')
|
|
|
|
if can_import_heic
|
2020-10-20 00:52:18 +08:00
|
|
|
MIMEtypes += [
|
|
|
|
'image/heif',
|
|
|
|
'image/heic',
|
|
|
|
]
|
|
|
|
endif
|
2019-11-12 22:56:49 +08:00
|
|
|
|
2020-10-22 17:54:51 +08:00
|
|
|
can_import_avif = (libheif.get_pkgconfig_variable('builtin_avif_decoder') == 'yes')
|
|
|
|
can_export_avif = (libheif.get_pkgconfig_variable('builtin_avif_encoder') == 'yes')
|
|
|
|
if can_import_avif
|
2020-10-20 00:52:18 +08:00
|
|
|
MIMEtypes += [
|
|
|
|
'image/avif'
|
|
|
|
]
|
|
|
|
endif
|
|
|
|
|
2020-10-22 17:54:51 +08:00
|
|
|
if not can_import_heic and not can_import_avif
|
2020-10-20 00:52:18 +08:00
|
|
|
have_heif = false
|
|
|
|
endif
|
|
|
|
|
|
|
|
if have_heif and (libheif.version().version_compare('==1.5.0') or libheif.version().version_compare('==1.5.1'))
|
|
|
|
libheif_warning='''
|
|
|
|
|
|
|
|
libheif version 1.5.0 and 1.5.1 are known to crash when
|
|
|
|
exporting (bug #4185). Please update.
|
|
|
|
'''
|
|
|
|
warning(libheif_warning)
|
|
|
|
warnings += libheif_warning
|
|
|
|
endif
|
2019-11-12 22:56:49 +08:00
|
|
|
endif
|
|
|
|
|
2020-05-09 03:49:44 +08:00
|
|
|
have_vala = add_languages('vala', required: get_option('vala-plugins'))
|
|
|
|
if have_vala
|
|
|
|
babl = declare_dependency(
|
|
|
|
dependencies: [
|
|
|
|
babl,
|
|
|
|
meson.get_compiler('vala').find_library('babl-0.1'),
|
|
|
|
]
|
|
|
|
)
|
|
|
|
|
|
|
|
# TODO: remove this once we release 3.0
|
|
|
|
valac = meson.get_compiler('vala')
|
|
|
|
if valac.version().version_compare('>= 0.31.1')
|
|
|
|
add_project_arguments('--disable-since-check', language: 'vala')
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
webkit_minver = '2.20.3'
|
|
|
|
webkit = dependency('webkit2gtk-4.0', version: '>=' + webkit_minver,
|
|
|
|
required: get_option('webkit')
|
|
|
|
)
|
2017-11-01 21:27:13 +08:00
|
|
|
conf.set('HAVE_WEBKIT', webkit.found())
|
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
poppler_minver = '0.69.0'
|
|
|
|
poppler_data_minver = '0.4.9'
|
2020-07-05 17:28:10 +08:00
|
|
|
poppler = [
|
|
|
|
dependency('poppler-glib', version: '>='+poppler_minver),
|
|
|
|
dependency('poppler-data', version: '>='+poppler_data_minver),
|
|
|
|
]
|
2017-11-01 21:27:13 +08:00
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
cairopdf_minver = '1.12.2'
|
|
|
|
cairopdf = dependency('cairo-pdf', version: '>='+cairopdf_minver,
|
|
|
|
required: get_option('cairo-pdf')
|
|
|
|
)
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
# PDF import support is a granted feature.
|
|
|
|
MIMEtypes += 'application/pdf'
|
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
wmf_minver = '0.2.8'
|
|
|
|
wmf = dependency('libwmf', version: '>='+wmf_minver,
|
|
|
|
required: get_option('wmf')
|
|
|
|
)
|
2017-11-01 21:27:13 +08:00
|
|
|
if wmf.found()
|
|
|
|
MIMEtypes += 'image/x-wmf'
|
|
|
|
endif
|
|
|
|
|
2019-10-25 16:46:53 +08:00
|
|
|
openjpeg_minver = '2.1.0'
|
|
|
|
openjpeg = dependency('libopenjp2', version: '>='+openjpeg_minver,
|
|
|
|
required: get_option('jpeg2000')
|
|
|
|
)
|
2017-11-01 21:27:13 +08:00
|
|
|
if openjpeg.found()
|
|
|
|
MIMEtypes += [ 'image/jp2', 'image/jpeg2000', 'image/jpx', ]
|
|
|
|
endif
|
|
|
|
|
2021-08-26 20:24:21 +08:00
|
|
|
jpegxl_minver = '0.5.0'
|
|
|
|
libjxl = dependency('libjxl',
|
|
|
|
version: '>='+jpegxl_minver,
|
|
|
|
required: get_option('jpeg-xl')
|
|
|
|
)
|
|
|
|
libjxl_threads = dependency('libjxl_threads',
|
|
|
|
version: '>='+jpegxl_minver,
|
|
|
|
required: get_option('jpeg-xl')
|
|
|
|
)
|
|
|
|
if libjxl.found() and libjxl_threads.found()
|
|
|
|
MIMEtypes += 'image/jxl'
|
|
|
|
endif
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
xmc = dependency('xcursor', required: get_option('xcursor'))
|
|
|
|
if xmc.found()
|
|
|
|
MIMEtypes += 'image/x-xcursor'
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
alsa = dependency('alsa', version: '>=1.0.0', required: get_option('alsa'))
|
|
|
|
conf.set('HAVE_ALSA', alsa.found())
|
|
|
|
|
|
|
|
|
|
|
|
if get_option('linux-input').disabled()
|
|
|
|
have_linuxinput = false
|
|
|
|
elif get_option('linux-input').enabled() and not cc.has_header('linux/input.h')
|
|
|
|
error('linux/input.h header not found.')
|
|
|
|
else
|
|
|
|
have_linuxinput = x11_target
|
|
|
|
endif
|
|
|
|
|
|
|
|
# DirectX DirectInput
|
|
|
|
directx = no_dep
|
|
|
|
directx_sdk_path = get_option('directx-sdk-dir')
|
|
|
|
if directx_sdk_path != '' and platform_windows
|
|
|
|
if directx_sdk_path.contains(' ') or directx_sdk_path.contains('\\')
|
|
|
|
error('\n'.join([
|
|
|
|
'The DirectX SDK path should be given :',
|
|
|
|
'* without spaces (use MSys mounts)',
|
|
|
|
'* with plain (forward) slashes only,'
|
|
|
|
]))
|
|
|
|
endif
|
|
|
|
|
|
|
|
directx = declare_dependency(
|
|
|
|
link_with: cc.find_library('dxguid',
|
|
|
|
dirs: directx_sdk_path / 'Lib' / 'x86'),
|
|
|
|
include_directories: directx_sdk_path / 'Include',
|
|
|
|
)
|
|
|
|
endif
|
|
|
|
conf.set('HAVE_DX_DINPUT', directx.found())
|
|
|
|
|
|
|
|
gudev = dependency('gudev-1.0', version: '>=167', required: get_option('gudev'))
|
|
|
|
conf.set('HAVE_LIBGUDEV', gudev.found())
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Email sending
|
|
|
|
email_message = false
|
|
|
|
|
|
|
|
sendmail_choice = get_option('with-sendmail')
|
|
|
|
if not [ '', 'false', 'no', ].contains(sendmail_choice)
|
|
|
|
if [ 'true', 'yes' ].contains(sendmail_choice)
|
|
|
|
sendmail_path = 'sendmail'
|
|
|
|
else
|
|
|
|
sendmail_path = sendmail_choice
|
|
|
|
endif
|
|
|
|
|
|
|
|
sendmail = find_program(sendmail_path, required: false)
|
|
|
|
if sendmail.found()
|
|
|
|
sendmail_path = sendmail.path()
|
|
|
|
else
|
2019-08-29 21:36:18 +08:00
|
|
|
mail_warning = 'Sendmail specified but not found. It should be installed at runtime!'
|
|
|
|
warning(mail_warning)
|
|
|
|
warnings += mail_warning
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
email_message = '@0@ (@1@)'.format(true, sendmail_path)
|
|
|
|
conf.set_quoted('SENDMAIL', sendmail_path)
|
|
|
|
else
|
|
|
|
xdg_email_path = 'xdg-email'
|
|
|
|
xdg_email = find_program(xdg_email_path, required: false)
|
|
|
|
if xdg_email.found()
|
|
|
|
xdg_email_path = xdg_email.path()
|
|
|
|
else
|
2019-08-29 21:36:18 +08:00
|
|
|
mail_warning = 'Xdg-email not found, but required at runtime for email sending.'
|
|
|
|
warning(mail_warning)
|
|
|
|
warnings += mail_warning
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
email_message = '@0@ (@1@)'.format(true, xdg_email_path)
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# ISO codes
|
|
|
|
|
2019-09-21 06:26:31 +08:00
|
|
|
isocodes = dependency('iso-codes', required: false)
|
|
|
|
if isocodes.found()
|
|
|
|
isocodes_prefix = isocodes.get_pkgconfig_variable('prefix')
|
|
|
|
isocodes_location = isocodes_prefix / get_option('datadir') / 'xml' / 'iso-codes'
|
|
|
|
isocodes_localedir= isocodes_prefix / get_option('datadir') / 'locale'
|
|
|
|
endif
|
2017-11-01 21:27:13 +08:00
|
|
|
conf.set('HAVE_ISO_CODES', isocodes.found())
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Program tools
|
|
|
|
|
|
|
|
perl = find_program('perl5', 'perl', 'perl5.005', 'perl5.004', 'perl')
|
|
|
|
|
|
|
|
## Python
|
|
|
|
|
|
|
|
# By default, we want packagers to install Python plug-ins to get the
|
|
|
|
# optimum experience. -Dpython=true will check for a Python 3
|
|
|
|
# interpreter and PyGObject, and warns without.
|
|
|
|
# It is up to the packager to ensure they are available at run time.
|
|
|
|
# This can be useful in particular when cross-compiling since anyway
|
|
|
|
# the interpreter is not useful at build time.
|
|
|
|
|
2020-07-08 17:17:26 +08:00
|
|
|
python3_minver = '>=3.6'
|
2017-11-01 21:27:13 +08:00
|
|
|
|
2020-10-13 04:02:46 +08:00
|
|
|
have_python = get_option('python')
|
2017-11-01 21:27:13 +08:00
|
|
|
|
2020-10-13 04:02:46 +08:00
|
|
|
if have_python
|
2017-11-01 21:27:13 +08:00
|
|
|
python = pythonmod.find_installation('python3', required: false)
|
2020-07-08 17:17:26 +08:00
|
|
|
message('Found Python @0@'.format(python.language_version()))
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
python_found = (
|
|
|
|
python.found() and
|
2020-07-08 17:17:26 +08:00
|
|
|
python.language_version().version_compare(python3_minver)
|
2017-11-01 21:27:13 +08:00
|
|
|
)
|
|
|
|
if python_found
|
|
|
|
pygobject_found = run_command(
|
|
|
|
python, '-c',
|
|
|
|
'\n'.join([
|
|
|
|
'''import sys, gi''',
|
|
|
|
'''version = '@0@' '''.format('3.0'),
|
|
|
|
'''sys.exit(gi.check_version(version))''',
|
|
|
|
]),
|
|
|
|
).returncode() == 0
|
2020-07-08 17:17:26 +08:00
|
|
|
message('Found Pygobject: @0@'.format(pygobject_found))
|
2017-11-01 21:27:13 +08:00
|
|
|
python_found = python_found and pygobject_found
|
|
|
|
endif
|
|
|
|
|
2020-10-13 04:02:46 +08:00
|
|
|
if not python_found
|
2019-08-29 21:36:18 +08:00
|
|
|
python_warning = '''
|
2020-07-08 17:17:26 +08:00
|
|
|
Python @0@ or PyGObject was not found.
|
2017-11-01 21:27:13 +08:00
|
|
|
Python plug-ins will be installed anyway but you should make sure that
|
|
|
|
a compatible Python interpreter is available at installation, otherwise
|
|
|
|
installed plug-ins won't be usable.
|
2019-11-08 20:17:08 +08:00
|
|
|
'''.format(python3_minver)
|
2019-08-29 21:36:18 +08:00
|
|
|
warning(python_warning)
|
|
|
|
warnings += python_warning
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
2021-02-21 01:47:43 +08:00
|
|
|
|
|
|
|
MIMEtypes += 'image/openraster'
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
## Javascript
|
|
|
|
|
2020-10-13 04:02:46 +08:00
|
|
|
have_javascript = get_option('javascript')
|
|
|
|
if have_javascript
|
2017-11-01 21:27:13 +08:00
|
|
|
gjs = find_program('gjs', required: false)
|
2020-10-13 04:02:46 +08:00
|
|
|
if not gjs.found()
|
2019-08-29 21:36:18 +08:00
|
|
|
js_warning = '''
|
2017-11-01 21:27:13 +08:00
|
|
|
GJS was not found.
|
|
|
|
JavaScript plug-ins will be installed anyway but you should make sure that
|
|
|
|
the JavaScript interpreter GJS is available at installation, otherwise
|
|
|
|
installed plug-ins won't be usable.
|
2019-08-29 21:36:18 +08:00
|
|
|
'''
|
|
|
|
warning(js_warning)
|
|
|
|
warnings += js_warning
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
## Lua
|
|
|
|
|
2020-10-13 04:02:46 +08:00
|
|
|
have_lua = get_option('lua')
|
|
|
|
if have_lua
|
2017-11-01 21:27:13 +08:00
|
|
|
lua = find_program('luajit', required: false)
|
2020-10-13 04:02:46 +08:00
|
|
|
if not lua.found()
|
2019-08-29 21:36:18 +08:00
|
|
|
lua_warning = '''
|
2017-11-01 21:27:13 +08:00
|
|
|
Luajit was not found.
|
|
|
|
Lua plug-ins will be installed anyway but you should make sure that
|
|
|
|
luajit and LGI are available at installation, otherwise
|
|
|
|
installed plug-ins won't be usable.
|
2019-08-29 21:36:18 +08:00
|
|
|
'''
|
|
|
|
warning(lua_warning)
|
|
|
|
warnings += lua_warning
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
# Check for GTK Mac Integration
|
2020-01-19 06:38:26 +08:00
|
|
|
if platform_osx and (gtk3.get_pkgconfig_variable('targets').contains('quartz'))
|
2017-11-01 21:27:13 +08:00
|
|
|
gtk3_macos = dependency('gtk-mac-integration', version: '>=2.0.0')
|
|
|
|
else
|
|
|
|
gtk3_macos = no_dep
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Check for XML tools
|
|
|
|
xmllint = find_program('xmllint', required: false)
|
|
|
|
xsltproc = find_program('xsltproc')
|
|
|
|
intltool_merge = find_program('intltool-merge')
|
|
|
|
desktop_validate = find_program('desktop-file-validate', required: false)
|
|
|
|
|
|
|
|
appstream_util = find_program('appstream-util', required: get_option('appdata-test'))
|
|
|
|
|
|
|
|
# Check for doc generation tools
|
2021-01-29 23:51:47 +08:00
|
|
|
if get_option('g-ir-doc')
|
|
|
|
gir_doc_tool = find_program('g-ir-doc-tool', required: true)
|
|
|
|
yelp_build = find_program('yelp-build', required: true)
|
|
|
|
endif
|
2021-01-21 23:31:35 +08:00
|
|
|
|
2017-11-01 21:27:13 +08:00
|
|
|
# Check for vector icons
|
|
|
|
have_vector_icons = get_option('vec-icons')
|
|
|
|
if have_vector_icons
|
|
|
|
# shared-mime-info is needed to correctly detect SVG files
|
|
|
|
# (except on Windows, apparently).
|
|
|
|
if platform_windows
|
2019-08-29 21:36:18 +08:00
|
|
|
vec_warning = '''
|
2017-11-01 21:27:13 +08:00
|
|
|
You enabled vector icons on Win32. Make sure to run:
|
|
|
|
$ gdk-pixbuf-query-loaders.exe --update-cache
|
|
|
|
on the target machine (this command generates loaders.cache)
|
|
|
|
so that GdkPixbuf knows where to find the SVG loader.
|
2019-08-29 21:36:18 +08:00
|
|
|
'''
|
|
|
|
warning(vec_warning)
|
|
|
|
warnings += vec_warning
|
2017-11-01 21:27:13 +08:00
|
|
|
else
|
|
|
|
shared_mime_info = dependency('shared-mime-info')
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2020-05-14 23:51:55 +08:00
|
|
|
# Running tests headless
|
|
|
|
xvfb_run = find_program('xvfb-run', required: get_option('headless-tests'))
|
|
|
|
dbus_run_session = find_program('dbus-run-session', required: get_option('headless-tests'))
|
|
|
|
if xvfb_run.found() and dbus_run_session.found()
|
|
|
|
add_test_setup('headless',
|
|
|
|
exe_wrapper: find_program('build' / 'meson' / 'run_test_env.sh'),
|
|
|
|
is_default: true,
|
|
|
|
)
|
|
|
|
endif
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
# Set bug report URL
|
|
|
|
|
|
|
|
# Allowing third-party packagers to set their own bugtracker URL, in
|
|
|
|
# order to filter first packaging bugs from core bugs.
|
|
|
|
bug_report_url = get_option('bug-report-url')
|
|
|
|
|
|
|
|
if bug_report_url == ''
|
|
|
|
message('''
|
|
|
|
NOTE: if you plan on packaging GIMP for distribution, it is recommended
|
|
|
|
to override the bug report URL with option:
|
|
|
|
-Dbug-report-url=https://example.com/
|
|
|
|
so that you can filter packaging bugs from core bugs before reporting upstream.
|
|
|
|
''')
|
|
|
|
|
|
|
|
bug_report_url = project_url_issues
|
|
|
|
endif
|
|
|
|
conf.set_quoted('PACKAGE_BUGREPORT', project_url_issues)
|
|
|
|
conf.set_quoted('BUG_REPORT_URL', bug_report_url)
|
|
|
|
|
2019-11-30 22:27:30 +08:00
|
|
|
# Build identifiers #
|
|
|
|
|
|
|
|
conf.set_quoted('GIMP_BUILD_ID', get_option('build-id'))
|
|
|
|
conf.set_quoted('GIMP_BUILD_PLATFORM', host_os)
|
|
|
|
if platform_linux
|
|
|
|
conf.set_quoted('GIMP_BUILD_PLATFORM_FAMILY', 'linux')
|
|
|
|
elif platform_windows
|
|
|
|
conf.set_quoted('GIMP_BUILD_PLATFORM_FAMILY', 'windows')
|
|
|
|
elif platform_osx
|
|
|
|
conf.set_quoted('GIMP_BUILD_PLATFORM_FAMILY', 'macos')
|
|
|
|
else
|
|
|
|
conf.set_quoted('GIMP_BUILD_PLATFORM_FAMILY', 'other')
|
|
|
|
endif
|
|
|
|
|
2021-08-26 07:22:32 +08:00
|
|
|
if get_option('check-update') == 'yes'
|
|
|
|
check_update = true
|
|
|
|
elif get_option('check-update') == 'no'
|
|
|
|
check_update = false
|
|
|
|
else # == 'platform-default'
|
|
|
|
if platform_windows or platform_osx
|
|
|
|
check_update = true
|
|
|
|
else
|
|
|
|
# Other packages usually have their own update system (software
|
|
|
|
# repositories on Linux and other *BSDs for instance) so we
|
|
|
|
# shouldn't notify about new versions, at least not as a default.
|
|
|
|
check_update = false
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
conf.set('CHECK_UPDATE', check_update)
|
2020-02-07 04:20:17 +08:00
|
|
|
|
2017-11-01 21:27:13 +08:00
|
|
|
# Default ICC directory #
|
|
|
|
|
|
|
|
# This is necessary because some Unix systems may have a different
|
|
|
|
# standard path for color profiles. And in particular, sandbox builds
|
|
|
|
# might mount the host system at a different root. This is for
|
|
|
|
# instance the case of flatpak which mount the host root at /run/host/.
|
|
|
|
|
|
|
|
# if not (platform_osx or platform_windows)
|
|
|
|
|
|
|
|
icc_directory = get_option('icc-directory')
|
|
|
|
if icc_directory == ''
|
|
|
|
icc_directory = '/usr/share/color/icc'
|
|
|
|
endif
|
|
|
|
conf.set_quoted('COLOR_PROFILE_DIRECTORY', icc_directory)
|
|
|
|
|
|
|
|
# endif
|
|
|
|
|
|
|
|
enable_default_bin = get_option('enable-default-bin')
|
|
|
|
enable_console_bin = get_option('enable-console-bin')
|
|
|
|
|
|
|
|
|
|
|
|
# Possibly change default gimpdir from $XDG_CONFIG_HOME/GIMP/gimp_user_version
|
|
|
|
gimpdir = get_option('gimpdir')
|
|
|
|
if gimpdir == ''
|
|
|
|
# Default value
|
|
|
|
gimpdir = meson.project_name().to_upper()
|
|
|
|
endif
|
|
|
|
|
|
|
|
project_subdir = meson.project_name() / gimp_app_version
|
|
|
|
gimpdatadir = get_option('datadir') / project_subdir
|
|
|
|
gimpplugindir = get_option('libdir') / project_subdir
|
|
|
|
gimpsysconfdir = get_option('sysconfdir') / project_subdir
|
|
|
|
gimpmanpagedir = gimpdir
|
|
|
|
localedir = get_option('datadir') / 'locale'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Check for internal tools
|
|
|
|
defcheck = find_program('tools'/'defcheck.py')
|
|
|
|
extract_vector_icon = find_program('tools'/'extract-vector-icon.sh')
|
|
|
|
generate_changelog = find_program('tools'/'generate_changelog.sh')
|
|
|
|
generate_news = find_program('tools'/'generate-news')
|
|
|
|
gimppath2svg = find_program('tools'/'gimppath2svg.py')
|
|
|
|
module_dependencies = find_program('tools'/'module-dependencies.py')
|
2019-08-30 18:04:28 +08:00
|
|
|
meson_install_subdir= find_program('tools'/'meson_install_subdir.py')
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
gimp_mkenums = find_program('tools'/'gimp-mkenums')
|
|
|
|
gimp_mkenums_custom_target_commonargs = [
|
2019-10-25 16:46:53 +08:00
|
|
|
'--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@',
|
2017-11-01 21:27:13 +08:00
|
|
|
]
|
|
|
|
|
2019-10-20 04:18:50 +08:00
|
|
|
libgimp_mkenums_custom_target_commonargs = [
|
|
|
|
gimp_mkenums_custom_target_commonargs,
|
2019-10-25 16:46:53 +08:00
|
|
|
'--dtail',
|
|
|
|
' { 0, NULL, NULL }\n'+
|
|
|
|
' };\n'+
|
|
|
|
'\n'+
|
|
|
|
' static GType type = 0;\n'+
|
|
|
|
'\n'+
|
|
|
|
' if (G_UNLIKELY (! type))\n'+
|
|
|
|
' {\n'+
|
|
|
|
' type = g_@type@_register_static ("@EnumName@", values);\n'+
|
|
|
|
' gimp_type_set_translation_domain (type, GETTEXT_PACKAGE "-libgimp");\n'+
|
|
|
|
' gimp_type_set_translation_context (type, "@enumnick@");\n'+
|
|
|
|
' gimp_@type@_set_value_descriptions (type, descs);\n'+
|
|
|
|
' }\n'+
|
|
|
|
'\n'+
|
|
|
|
' return type;\n'+
|
|
|
|
'}\n',
|
2019-10-20 04:18:50 +08:00
|
|
|
]
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
conf.set('ENABLE_NLS', true)
|
|
|
|
conf.set('HAVE_GETTEXT', true)
|
|
|
|
|
|
|
|
# localedir = get_option('prefix') / get_option('localedir')
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
2019-09-22 01:10:46 +08:00
|
|
|
# Miscellaneous configuration
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
# #
|
|
|
|
## ## # #### ####
|
|
|
|
# # # # # # # #
|
|
|
|
# # # # #### #
|
|
|
|
# # # # #
|
|
|
|
# # # # # # #
|
|
|
|
# # # #### ####
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Enable support for multiprocessing
|
|
|
|
conf.set10('ENABLE_MP', get_option('enable-multiproc'))
|
|
|
|
|
|
|
|
# Check for available functions
|
|
|
|
foreach fn : [
|
|
|
|
{ 'm': 'HAVE_ALLOCA', 'v': 'alloca', },
|
|
|
|
{ 'm': 'HAVE_DCGETTEXT', 'v': 'dcgettext', },
|
|
|
|
{ 'm': 'HAVE_DIFFTIME', 'v': 'difftime', },
|
|
|
|
{ 'm': 'HAVE_FSYNC', 'v': 'fsync', },
|
|
|
|
{ 'm': 'HAVE_GETADDRINFO', 'v': 'getaddrinfo', },
|
|
|
|
{ 'm': 'HAVE_GETNAMEINFO', 'v': 'getnameinfo', },
|
|
|
|
{ 'm': 'HAVE_GETTEXT', 'v': 'gettext', },
|
|
|
|
{ 'm': 'HAVE_MMAP', 'v': 'mmap', },
|
|
|
|
{ 'm': 'HAVE_RINT', 'v': 'rint', },
|
|
|
|
{ 'm': 'HAVE_THR_SELF', 'v': 'thr_self', },
|
|
|
|
{ 'm': 'HAVE_VFORK', 'v': 'vfork', },
|
|
|
|
]
|
|
|
|
conf.set(fn['m'],
|
|
|
|
cc.has_function(fn['v']) ? 1 : false
|
|
|
|
)
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
conf.set('HAVE_BIND_TEXTDOMAIN_CODESET',
|
|
|
|
cc.has_header_symbol('libintl.h', 'bind_textdomain_codeset') ? 1 : false
|
|
|
|
)
|
|
|
|
conf.set('HAVE_VPRINTF',
|
|
|
|
cc.has_header_symbol('libintl.h', 'vprintf') ? 1 : false
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# Check for available headers
|
|
|
|
foreach header : [
|
|
|
|
{ 'm': 'HAVE_ALLOCA_H', 'v': 'alloca.h' },
|
|
|
|
{ 'm': 'HAVE_DLFCN_H', 'v': 'dlfcn.h' },
|
|
|
|
{ 'm': 'HAVE_FCNTL_H', 'v': 'fcntl.h' },
|
|
|
|
{ 'm': 'HAVE_IEEEFP_H', 'v': 'ieeefp.h' },
|
|
|
|
{ 'm': 'HAVE_INTTYPES_H', 'v': 'inttypes.h' },
|
|
|
|
{ 'm': 'HAVE_LOCALE_H', 'v': 'locale.h' },
|
|
|
|
{ 'm': 'HAVE_MATH_H', 'v': 'math.h' },
|
|
|
|
{ 'm': 'HAVE_MEMORY_H', 'v': 'memory.h' },
|
|
|
|
{ 'm': 'HAVE_STDINT_H', 'v': 'stdint.h' },
|
|
|
|
{ 'm': 'HAVE_STDLIB_H', 'v': 'stdlib.h' },
|
|
|
|
{ 'm': 'HAVE_STRING_H', 'v': 'string.h' },
|
|
|
|
{ 'm': 'HAVE_STRINGS_H', 'v': 'strings.h' },
|
|
|
|
{ 'm': 'HAVE_SYS_PARAM_H', 'v': 'sys/param.h' },
|
|
|
|
{ 'm': 'HAVE_SYS_SELECT_H', 'v': 'sys/select.h' },
|
|
|
|
{ 'm': 'HAVE_SYS_STAT_H', 'v': 'sys/stat.h' },
|
|
|
|
{ 'm': 'HAVE_SYS_THR_H', 'v': 'sys/thr.h' },
|
|
|
|
{ 'm': 'HAVE_SYS_TIME_H', 'v': 'sys/time.h' },
|
|
|
|
{ 'm': 'HAVE_SYS_TIMES_H', 'v': 'sys/times.h' },
|
|
|
|
{ 'm': 'HAVE_SYS_TYPES_H', 'v': 'sys/types.h' },
|
|
|
|
{ 'm': 'HAVE_SYS_WAIT_H', 'v': 'sys/wait.h' },
|
|
|
|
{ 'm': 'HAVE_UNISTD_H', 'v': 'unistd.h' },
|
|
|
|
{ 'm': 'HAVE_MMAN_H', 'v': 'sys/mman.h' },
|
|
|
|
{ 'm': 'HAVE_IPC_H', 'v': 'sys/ipc.h' },
|
|
|
|
{ 'm': 'HAVE_SHM_H', 'v': 'sys/shm.h' },
|
|
|
|
]
|
|
|
|
conf.set(header['m'], cc.has_header(header['v']) ? 1 : false)
|
|
|
|
endforeach
|
|
|
|
|
2021-08-05 03:11:24 +08:00
|
|
|
# In musl, backtrace() is in the libexecinfo library.
|
|
|
|
# In glibc, it is internal (there we only need the header).
|
|
|
|
# So we look for both cases, so that we are able to link to libexecinfo
|
|
|
|
# if it exists. Cf. !455.
|
|
|
|
opt_execinfo = cc.find_library('execinfo', has_headers: ['execinfo.h'], required: false)
|
|
|
|
conf.set('HAVE_EXECINFO_H', opt_execinfo.found() or cc.has_header('execinfo.h') ? 1 : false)
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Check for shared memory handling
|
|
|
|
|
|
|
|
shmem_choice = get_option('shmem-type')
|
|
|
|
if shmem_choice == 'auto'
|
|
|
|
shmem_choice = 'sysv'
|
|
|
|
|
|
|
|
# MacOS X has broken SysV shm
|
|
|
|
if platform_osx
|
|
|
|
shmem_choice = 'posix'
|
|
|
|
endif
|
|
|
|
if platform_windows
|
|
|
|
shmem_choice = 'win32'
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
if shmem_choice == 'sysv'
|
|
|
|
check_ip_rmid_deferred_release = cc.run('''
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/ipc.h>
|
|
|
|
#include <sys/shm.h>
|
|
|
|
int main() {
|
|
|
|
int id = shmget(IPC_PRIVATE, 4, IPC_CREAT | 0600);
|
|
|
|
if (id == -1)
|
|
|
|
exit(2);
|
|
|
|
|
|
|
|
char *shmaddr = shmat(id, 0, 0);
|
|
|
|
shmctl(id, IPC_RMID, 0);
|
|
|
|
if ((char*) shmat(id, 0, 0) == (char*) -1) {
|
|
|
|
shmdt(shmaddr);
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
shmdt(shmaddr);
|
|
|
|
shmdt(shmaddr);
|
|
|
|
exit(0);
|
|
|
|
}
|
|
|
|
''').returncode() == 0
|
|
|
|
conf.set('IPC_RMID_DEFERRED_RELEASE', check_ip_rmid_deferred_release)
|
|
|
|
conf.set('USE_SYSV_SHM', true)
|
|
|
|
elif shmem_choice == 'posix'
|
|
|
|
conf.set('USE_POSIX_SHM', true)
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
conf.set('NO_FD_SET',
|
|
|
|
not platform_windows
|
|
|
|
and not cc.compiles('''
|
|
|
|
#include <sys/types.h>
|
|
|
|
int main() { fd_set readMask, writeMask; return 0; }
|
|
|
|
''')
|
|
|
|
)
|
|
|
|
|
|
|
|
# GCC attributes
|
|
|
|
conf.set('HAVE_FUNC_ATTRIBUTE_DESTRUCTOR',
|
|
|
|
cc.compiles('''__attribute__ ((destructor)) void destructor_fn(void) { }''')
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Set/regroup common CFlags for subdirs
|
|
|
|
|
|
|
|
######
|
|
|
|
# # ###### ###### # # # ###### ####
|
|
|
|
# # # # # ## # # #
|
|
|
|
# # ##### ##### # # # # ##### ####
|
|
|
|
# # # # # # # # # #
|
|
|
|
# # # # # # ## # # #
|
|
|
|
###### ###### # # # # ###### ####
|
|
|
|
|
|
|
|
# Compiler
|
|
|
|
conf.set_quoted('CC', cc.get_id())
|
2019-11-14 20:30:01 +08:00
|
|
|
|
|
|
|
cc_version=''
|
|
|
|
if cc.get_id() == 'gcc' or cc.get_id() == 'clang'
|
|
|
|
cc_cmd = run_command(cc, '-v')
|
|
|
|
# Note: the call might actually fail when using ccache.
|
|
|
|
# See: https://github.com/mesonbuild/meson/issues/6174
|
|
|
|
if cc_cmd.returncode() == 0
|
|
|
|
cc_version = cc_cmd.stdout() + cc_cmd.stderr()
|
|
|
|
endif
|
|
|
|
else
|
|
|
|
# Various compilers have various options. Try most common ones. This
|
|
|
|
# list of options comes from autotools checks.
|
|
|
|
foreach arg : [ '--version', '-v', '-V', '-qversion' ]
|
|
|
|
cc_cmd = run_command(cc, arg)
|
|
|
|
if cc_cmd.returncode() == 0
|
|
|
|
cc_version = cc_cmd.stdout()
|
|
|
|
endif
|
|
|
|
endforeach
|
|
|
|
endif
|
|
|
|
if cc_version == ''
|
|
|
|
# We didn't manage to get a meaningful verbose version from the
|
|
|
|
# compiler. Just save its name and version.
|
|
|
|
cc_version = cc.get_id() + ' ' + cc.version()
|
|
|
|
else
|
2020-08-23 02:35:43 +08:00
|
|
|
if platform_windows
|
|
|
|
# On Windows the CC_VERSION string can contain backslashes in paths,
|
|
|
|
# specifically in COLLECT_GCC. Replace by slashes.
|
|
|
|
cc_version = '/'.join(cc_version.split('\\'))
|
|
|
|
endif
|
2019-11-14 20:30:01 +08:00
|
|
|
# See also: https://github.com/mesonbuild/meson/pull/6179
|
|
|
|
cc_version = '\\n'.join(cc_version.split('\n'))
|
|
|
|
endif
|
2019-11-30 22:27:30 +08:00
|
|
|
conf.set_quoted('CC_VERSION', cc_version.strip())
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
# Names
|
|
|
|
conf.set_quoted('GIMP_PACKAGE', meson.project_name())
|
|
|
|
conf.set_quoted('PACKAGE_NAME', meson.project_name())
|
|
|
|
conf.set_quoted('PACKAGE_STRING', package_string)
|
|
|
|
conf.set_quoted('GIMP_COMMAND', gimp_command)
|
|
|
|
|
|
|
|
# Versions
|
|
|
|
conf.set_quoted('GIMP_APP_VERSION_STRING',gimp_app_version)
|
|
|
|
conf.set_quoted('GIMP_APP_VERSION', gimp_app_version)
|
|
|
|
conf.set_quoted('GIMP_USER_VERSION', gimp_app_version)
|
|
|
|
|
|
|
|
conf.set_quoted('GIMP_DATA_VERSION', gimp_app_version)
|
|
|
|
conf.set_quoted('GIMP_PLUGIN_VERSION', gimp_app_version)
|
|
|
|
conf.set_quoted('GIMP_SYSCONF_VERSION', gimp_app_version)
|
|
|
|
conf.set_quoted('GIMP_TOOL_VERSION', gimp_app_version)
|
|
|
|
conf.set_quoted('GIMP_PKGCONFIG_VERSION', gimp_api_version)
|
|
|
|
|
|
|
|
# Directories
|
|
|
|
conf.set_quoted('PREFIX', prefix)
|
|
|
|
conf.set_quoted('EXEC_PREFIX', prefix)
|
|
|
|
conf.set_quoted('GIMPDIR', gimpdir)
|
|
|
|
conf.set_quoted('GIMPSYSCONFDIR', prefix / gimpsysconfdir)
|
|
|
|
conf.set_quoted('GIMPDATADIR', prefix / gimpdatadir)
|
|
|
|
conf.set_quoted('GIMPPLUGINDIR', prefix / gimpplugindir)
|
|
|
|
conf.set_quoted('PLUGINDIR', prefix / gimpplugindir)
|
|
|
|
conf.set_quoted('LOCALEDIR', prefix / localedir)
|
|
|
|
|
|
|
|
conf.set_quoted('LOCALSTATEDIR', prefix / get_option('localstatedir'))
|
|
|
|
# /usr/com?
|
|
|
|
conf.set_quoted('SHAREDSTATEDIR', prefix / get_option('sharedstatedir'))
|
|
|
|
conf.set_quoted('SYSCONFDIR', prefix / get_option('sysconfdir'))
|
|
|
|
conf.set_quoted('BINDIR', prefix / get_option('bindir'))
|
|
|
|
conf.set_quoted('DATAROOTDIR', prefix / get_option('datadir'))
|
|
|
|
conf.set_quoted('INFODIR', prefix / get_option('infodir'))
|
|
|
|
conf.set_quoted('LIBDIR', prefix / get_option('libdir'))
|
|
|
|
conf.set_quoted('LIBEXECDIR', prefix / get_option('libexecdir'))
|
|
|
|
conf.set_quoted('MANDIR', prefix / get_option('mandir'))
|
|
|
|
conf.set_quoted('SBINDIR', prefix / get_option('sbindir'))
|
|
|
|
conf.set_quoted('SYSDATADIR', prefix / get_option('datadir'))
|
|
|
|
|
|
|
|
# Third-party/Misc
|
2019-09-21 06:26:31 +08:00
|
|
|
if isocodes.found()
|
|
|
|
conf.set_quoted('ISO_CODES_LOCATION', isocodes_location)
|
|
|
|
conf.set_quoted('ISO_CODES_LOCALEDIR', isocodes_localedir)
|
|
|
|
endif
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
if platform_osx
|
|
|
|
# libgimp_cflags += '-xobjective-c'
|
|
|
|
# libgimp_lflags += ['-framework', 'Cocoa']
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Generate files
|
|
|
|
|
|
|
|
##### #######
|
|
|
|
# # #### # # ###### # #### # # # ###### ####
|
|
|
|
# # # ## # # # # # # # # # #
|
|
|
|
# # # # # # ##### # # ##### # # ##### ####
|
|
|
|
# # # # # # # # # ### # # # # #
|
|
|
|
# # # # # ## # # # # # # # # # #
|
|
|
|
##### #### # # # # #### # # ###### ###### ####
|
|
|
|
|
|
|
|
|
2021-09-29 02:16:09 +08:00
|
|
|
# git-version.h is already present and not generated if dist tarball
|
|
|
|
is_git_repository = run_command('python3', '-c',
|
|
|
|
'import sys,os; sys.exit(0 if os.path.exists(".git") else 1)'
|
|
|
|
).returncode() == 0
|
|
|
|
|
2019-11-24 23:47:55 +08:00
|
|
|
has_version_h = run_command('python3', '-c',
|
2019-11-21 19:21:08 +08:00
|
|
|
'import sys,os; sys.exit(0 if os.path.exists("git-version.h") else 1)'
|
|
|
|
).returncode() == 0
|
2021-09-29 02:16:09 +08:00
|
|
|
|
2019-11-21 19:21:08 +08:00
|
|
|
if is_git_repository or not has_version_h
|
2019-11-08 20:17:08 +08:00
|
|
|
gitversion_h1 = vcs_tag(
|
|
|
|
input : 'app/git-version.h.in',
|
|
|
|
output: 'git-version.h.in.1',
|
|
|
|
command: [ 'git', 'describe', '--always', ],
|
|
|
|
replace_string: '@GIMP_GIT_VERSION@',
|
2019-11-21 19:21:08 +08:00
|
|
|
fallback: 'unknown (unsupported)',
|
2019-11-08 20:17:08 +08:00
|
|
|
)
|
|
|
|
gitversion_h2 = vcs_tag(
|
|
|
|
input : gitversion_h1,
|
|
|
|
output: 'git-version.h.in.2',
|
|
|
|
command: [ 'git', 'rev-parse', '--short', 'HEAD', ],
|
|
|
|
replace_string: '@GIMP_GIT_VERSION_ABBREV@',
|
2019-11-21 19:21:08 +08:00
|
|
|
fallback: 'unknown (unsupported)',
|
2019-11-08 20:17:08 +08:00
|
|
|
)
|
|
|
|
gitversion_h = vcs_tag(
|
|
|
|
input : gitversion_h2,
|
|
|
|
output: 'git-version.h',
|
|
|
|
command: [ 'git', 'log', '-n1', '--date=format:%Y', '--pretty=%cd', ],
|
|
|
|
replace_string: '@GIMP_GIT_LAST_COMMIT_YEAR@',
|
2019-11-21 19:21:08 +08:00
|
|
|
fallback: 'unknown (unsupported)',
|
2019-11-08 20:17:08 +08:00
|
|
|
)
|
2019-11-21 21:10:34 +08:00
|
|
|
|
|
|
|
git = find_program('git', required: false)
|
|
|
|
if not is_git_repository or not git.found()
|
2019-11-21 19:21:08 +08:00
|
|
|
# We create git-version.h but know it will be useless because we are
|
|
|
|
# not in a git repository. Output a warning.
|
|
|
|
git_warning = '''
|
|
|
|
|
|
|
|
UNSUPPORTED BUILD!
|
|
|
|
|
2019-11-21 21:10:34 +08:00
|
|
|
This is not a distribution tarball (git-version.h missing) and
|
|
|
|
we could not establish the corresponding commit (either this is
|
|
|
|
not a git repository or git command is missing). Therefore
|
|
|
|
we have no reference for debugging.
|
2019-11-21 19:21:08 +08:00
|
|
|
Please either use release tarballs or build from the repository.
|
|
|
|
'''
|
|
|
|
warning(git_warning)
|
|
|
|
warnings += git_warning
|
|
|
|
endif
|
|
|
|
else
|
|
|
|
gitversion_h = files('git-version.h')
|
2019-11-08 20:17:08 +08:00
|
|
|
endif
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
install_conf = configuration_data()
|
|
|
|
install_conf.set('GIMP_APP_VERSION', gimp_app_version)
|
|
|
|
install_conf.set('GIMP_PKGCONFIG_VERSION', gimp_version)
|
|
|
|
install_conf.set('GIMP_VERSION', gimp_version)
|
2019-10-25 16:46:53 +08:00
|
|
|
install_conf.set('APPSTREAM_GLIB_REQUIRED_VERSION', appstream_glib_minver)
|
|
|
|
install_conf.set('ATK_REQUIRED_VERSION', atk_minver)
|
|
|
|
install_conf.set('BABL_REQUIRED_VERSION', babl_minver)
|
|
|
|
install_conf.set('CAIRO_PDF_REQUIRED_VERSION', cairopdf_minver)
|
|
|
|
install_conf.set('CAIRO_REQUIRED_VERSION', cairo_minver)
|
|
|
|
install_conf.set('FONTCONFIG_REQUIRED_VERSION', fontconfig_minver)
|
|
|
|
install_conf.set('FREETYPE2_REQUIRED_VERSION', freetype2_minver)
|
|
|
|
install_conf.set('GDK_PIXBUF_REQUIRED_VERSION', gdk_pixbuf_minver)
|
|
|
|
install_conf.set('GEGL_REQUIRED_VERSION', gegl_minver)
|
|
|
|
install_conf.set('GEXIV2_REQUIRED_VERSION', gexiv2_minver)
|
|
|
|
install_conf.set('GLIB_REQUIRED_VERSION', glib_minver)
|
|
|
|
install_conf.set('GTK_REQUIRED_VERSION', gtk3_minver)
|
|
|
|
install_conf.set('HARFBUZZ_REQUIRED_VERSION', harfbuzz_minver)
|
2017-11-01 21:27:13 +08:00
|
|
|
install_conf.set('INTLTOOL_REQUIRED_VERSION', '0.40.1')
|
2019-10-25 16:46:53 +08:00
|
|
|
install_conf.set('LCMS_REQUIRED_VERSION', lcms_minver)
|
|
|
|
install_conf.set('LIBHEIF_REQUIRED_VERSION', libheif_minver)
|
|
|
|
install_conf.set('LIBLZMA_REQUIRED_VERSION', liblzma_minver)
|
|
|
|
install_conf.set('LIBMYPAINT_REQUIRED_VERSION', libmypaint_minver)
|
|
|
|
install_conf.set('LIBPNG_REQUIRED_VERSION', libpng_minver)
|
|
|
|
install_conf.set('OPENEXR_REQUIRED_VERSION', openexr_minver)
|
|
|
|
install_conf.set('OPENJPEG_REQUIRED_VERSION', openjpeg_minver)
|
|
|
|
install_conf.set('PANGOCAIRO_REQUIRED_VERSION', pangocairo_minver)
|
|
|
|
install_conf.set('POPPLER_DATA_REQUIRED_VERSION', poppler_data_minver)
|
|
|
|
install_conf.set('POPPLER_REQUIRED_VERSION', poppler_minver)
|
|
|
|
install_conf.set('PYTHON3_REQUIRED_VERSION', python3_minver)
|
|
|
|
install_conf.set('RSVG_REQUIRED_VERSION', rsvg_minver)
|
|
|
|
install_conf.set('WEBKITGTK_REQUIRED_VERSION', webkit_minver)
|
|
|
|
install_conf.set('WEBP_REQUIRED_VERSION', webp_minver)
|
|
|
|
install_conf.set('WMF_REQUIRED_VERSION', wmf_minver)
|
|
|
|
install_conf.set('XGETTEXT_REQUIRED_VERSION', '0.19')
|
2017-11-01 21:27:13 +08:00
|
|
|
|
2019-11-21 19:21:08 +08:00
|
|
|
INSTALL = configure_file(
|
|
|
|
input : 'INSTALL.in',
|
|
|
|
output: 'INSTALL',
|
|
|
|
configuration: install_conf
|
|
|
|
)
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
configure_file(
|
|
|
|
output: 'config.h',
|
|
|
|
configuration: conf
|
|
|
|
)
|
|
|
|
compiler_args +='-DHAVE_CONFIG_H'
|
|
|
|
|
|
|
|
|
|
|
|
add_project_arguments(compiler_args, language: [ 'c', 'cpp' ])
|
|
|
|
add_project_link_arguments(linker_args, language: [ 'c', 'cpp' ])
|
|
|
|
|
|
|
|
################################################################################
|
2019-09-22 01:10:46 +08:00
|
|
|
# Miscellaneous targets
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
# # #######
|
|
|
|
## ## # #### #### # ## ##### #### ###### ##### ####
|
|
|
|
# # # # # # # # # # # # # # # # # #
|
|
|
|
# # # # #### # # # # # # # ##### # ####
|
|
|
|
# # # # # # ###### ##### # ### # # #
|
|
|
|
# # # # # # # # # # # # # # # # # #
|
|
|
|
# # # #### #### # # # # # #### ###### # ####
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
custom_target('AUTHORS',
|
|
|
|
input : [ 'authors.xsl', 'authors.xml', ],
|
|
|
|
output: 'AUTHORS',
|
|
|
|
command: [
|
|
|
|
xsltproc,
|
|
|
|
'-o', '@OUTPUT@',
|
|
|
|
'@INPUT@',
|
|
|
|
],
|
|
|
|
build_by_default: false,
|
|
|
|
)
|
|
|
|
custom_target('authors.md',
|
|
|
|
input : [ 'authors4gimp-web.xsl', 'authors.xml', ],
|
|
|
|
output: 'authors.md',
|
|
|
|
command: [
|
|
|
|
xsltproc,
|
|
|
|
'--stringparam', 'today', '`date --iso-8601=seconds`',
|
|
|
|
'-o', '@OUTPUT@',
|
|
|
|
'@INPUT@',
|
|
|
|
],
|
|
|
|
build_by_default: false,
|
|
|
|
)
|
|
|
|
|
|
|
|
if xmllint.found()
|
2021-06-18 22:09:25 +08:00
|
|
|
custom_target('validate-authors',
|
2017-11-01 21:27:13 +08:00
|
|
|
command: [
|
|
|
|
xmllint,
|
2021-06-18 22:09:25 +08:00
|
|
|
'--output', '@OUTPUT@',
|
|
|
|
'--valid', '@INPUT@',
|
2017-11-01 21:27:13 +08:00
|
|
|
],
|
2021-06-18 22:09:25 +08:00
|
|
|
input : [ 'authors.xml', ],
|
|
|
|
output: [ 'validate-authors-output.xml' ],
|
|
|
|
build_by_default: true,
|
|
|
|
install: false
|
2017-11-01 21:27:13 +08:00
|
|
|
)
|
|
|
|
endif
|
|
|
|
|
|
|
|
if have_python
|
|
|
|
# TODO this python script is waiting for autotools directory/files structure
|
|
|
|
custom_target('check-defs',
|
|
|
|
input : [ ],
|
|
|
|
output: [ 'check-defs', ],
|
|
|
|
command: [
|
|
|
|
find_program(meson.source_root() / 'tools' / 'defcheck.py'),
|
|
|
|
meson.source_root(),
|
|
|
|
],
|
|
|
|
build_by_default: false,
|
|
|
|
)
|
|
|
|
endif
|
|
|
|
|
|
|
|
custom_target('Changelog',
|
|
|
|
input : [ ],
|
|
|
|
output: [ 'Changelog', ],
|
|
|
|
command: [
|
|
|
|
generate_changelog,
|
|
|
|
meson.source_root(),
|
|
|
|
'@OUTPUT@'
|
|
|
|
],
|
|
|
|
build_by_default: false,
|
|
|
|
)
|
|
|
|
|
2019-11-08 20:17:08 +08:00
|
|
|
meson.add_dist_script('meson_dist_script.sh')
|
|
|
|
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
################################################################################
|
|
|
|
# Subdirs
|
|
|
|
|
|
|
|
|
|
|
|
rootInclude = include_directories('.')
|
|
|
|
appInclude = include_directories('app')
|
|
|
|
|
2021-05-20 05:03:46 +08:00
|
|
|
subdir('build/windows')
|
2021-05-19 02:21:18 +08:00
|
|
|
if get_option('windows-installer')
|
|
|
|
subdir('po-windows-installer')
|
|
|
|
subdir('build/windows/installer')
|
2017-11-01 21:27:13 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
# Tools
|
|
|
|
subdir('libgimpbase')
|
|
|
|
subdir('tools')
|
|
|
|
|
|
|
|
# Translations
|
|
|
|
subdir('po')
|
|
|
|
subdir('po-libgimp')
|
|
|
|
subdir('po-plug-ins')
|
|
|
|
subdir('po-python')
|
|
|
|
subdir('po-script-fu')
|
|
|
|
subdir('po-tags')
|
|
|
|
subdir('po-tips')
|
|
|
|
# Data / Desktop / xml files
|
|
|
|
subdir('cursors')
|
|
|
|
subdir('data')
|
|
|
|
subdir('desktop')
|
|
|
|
subdir('etc')
|
|
|
|
subdir('icons')
|
|
|
|
subdir('m4macros')
|
|
|
|
subdir('menus')
|
|
|
|
subdir('themes')
|
|
|
|
|
|
|
|
# Libraries (order here is important!)
|
|
|
|
subdir('libgimpcolor')
|
|
|
|
subdir('libgimpmath')
|
|
|
|
subdir('libgimpconfig')
|
|
|
|
subdir('libgimpmodule')
|
|
|
|
subdir('libgimpthumb')
|
|
|
|
subdir('libgimpwidgets')
|
|
|
|
subdir('libgimp')
|
|
|
|
|
|
|
|
# Executables, plugins
|
2020-10-08 19:58:19 +08:00
|
|
|
subdir('extensions')
|
2017-11-01 21:27:13 +08:00
|
|
|
subdir('modules')
|
|
|
|
subdir('plug-ins')
|
|
|
|
subdir('app')
|
|
|
|
subdir('pdb')
|
|
|
|
subdir('app-tools')
|
|
|
|
|
|
|
|
# Docs
|
|
|
|
subdir('docs')
|
2021-01-29 23:51:47 +08:00
|
|
|
subdir('devel-docs')
|
2017-11-01 21:27:13 +08:00
|
|
|
|
|
|
|
|
|
|
|
pkgconfig.generate(libgimp,
|
|
|
|
filebase: 'gimp-' + gimp_api_version,
|
|
|
|
name: prettyname,
|
|
|
|
description: 'GIMP Library',
|
|
|
|
version: gimp_version,
|
|
|
|
requires: [
|
|
|
|
gdk_pixbuf,
|
|
|
|
cairo,
|
|
|
|
gegl,
|
|
|
|
],
|
|
|
|
libraries: [
|
|
|
|
libgimpbase,
|
|
|
|
libgimpcolor,
|
|
|
|
libgimpconfig,
|
|
|
|
libgimpmath,
|
|
|
|
],
|
|
|
|
subdirs: [
|
|
|
|
gimp_api_name,
|
|
|
|
],
|
|
|
|
variables: [
|
|
|
|
'datarootdir=' +'${prefix}/'+ get_option('datadir'),
|
|
|
|
'gimpdatadir=' +'${prefix}/'+ gimpdatadir,
|
|
|
|
'gimplibdir=' +'${prefix}/'+ gimpplugindir,
|
|
|
|
'gimpsysconfdir=' + gimpsysconfdir,
|
|
|
|
'gimplocaledir=' +'${prefix}/'+ localedir,
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
pkgconfig.generate(libgimpthumb,
|
|
|
|
filebase: 'gimpthumb-' + gimp_api_version,
|
|
|
|
name: 'GIMP Thumb',
|
|
|
|
description: 'GIMP Thumbnail Library',
|
|
|
|
version: gimp_version,
|
|
|
|
requires: [
|
|
|
|
libgimp,
|
|
|
|
gdk_pixbuf,
|
|
|
|
],
|
|
|
|
subdirs: [
|
|
|
|
gimp_api_name,
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
pkgconfig.generate(libgimpui,
|
|
|
|
filebase: 'gimpui-' + gimp_api_version,
|
|
|
|
name: 'GIMP UI',
|
|
|
|
description: 'GIMP User Interface Library',
|
|
|
|
version: gimp_version,
|
|
|
|
requires: [
|
|
|
|
libgimp,
|
|
|
|
gtk3,
|
|
|
|
],
|
|
|
|
libraries: [
|
|
|
|
libgimpwidgets,
|
|
|
|
libgimpmodule,
|
|
|
|
],
|
|
|
|
subdirs: [
|
|
|
|
gimp_api_name,
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-08-30 18:04:28 +08:00
|
|
|
################################################################################
|
|
|
|
# Subdir installations
|
|
|
|
|
|
|
|
foreach dir : [
|
2019-10-12 19:25:31 +08:00
|
|
|
{ 'dir': 'libgimp', 'deps': libgimp},
|
|
|
|
{ 'dir': 'libgimpbase', 'deps': libgimpbase},
|
2019-10-12 17:50:19 +08:00
|
|
|
{ 'dir': 'libgimpcolor', 'deps': libgimpcolor},
|
2019-10-12 19:25:31 +08:00
|
|
|
{ 'dir': 'libgimpconfig', 'deps': libgimpconfig},
|
|
|
|
{ 'dir': 'libgimpmath', 'deps': libgimpmath},
|
|
|
|
{ 'dir': 'libgimpmodule', 'deps': libgimpmodule},
|
2019-10-12 17:50:19 +08:00
|
|
|
{ 'dir': 'libgimpthumb', 'deps': libgimpthumb},
|
2019-10-12 19:25:31 +08:00
|
|
|
{ 'dir': 'libgimpwidgets', 'deps': libgimpwidgets},
|
|
|
|
{ 'dir': 'icons' },
|
2019-08-30 18:04:28 +08:00
|
|
|
{ 'dir': 'plug-ins', },
|
2020-10-18 07:13:42 +08:00
|
|
|
{ 'dir': 'extensions', },
|
2019-08-30 18:04:28 +08:00
|
|
|
]
|
|
|
|
run_target('install-' + dir.get('dir'),
|
|
|
|
command: [
|
|
|
|
meson_install_subdir, '-v', dir.get('dir')
|
|
|
|
],
|
|
|
|
depends: dir.get('deps', [])
|
|
|
|
)
|
|
|
|
endforeach
|
|
|
|
|
2017-11-01 21:27:13 +08:00
|
|
|
################################################################################
|
|
|
|
|
|
|
|
final_message = [
|
|
|
|
'''Extra Binaries:''',
|
|
|
|
''' gimp-console: @0@'''.format(enable_console_bin),
|
|
|
|
'',
|
|
|
|
'''Optional Features:''',
|
2021-08-26 07:22:32 +08:00
|
|
|
''' Check updates at startup: @0@'''.format(check_update),
|
2020-02-07 04:20:17 +08:00
|
|
|
''' Language selection: @0@'''.format(isocodes.found()),
|
|
|
|
''' Vector icons: @0@'''.format(have_vector_icons),
|
|
|
|
''' Dr. Mingw (Win32): @0@'''.format(drmingw.found()),
|
|
|
|
''' Relocatable Bundle: @0@'''.format(relocatable_bundle),
|
2017-11-01 21:27:13 +08:00
|
|
|
''' Default ICC directory: @0@'''.format(icc_directory),
|
|
|
|
''' 32-bit DLL folder (Win32): @0@'''.format(get_option('win32-32bits-dll-folder')),
|
|
|
|
''' Detailed backtraces: @0@'''.format(detailed_backtraces),
|
|
|
|
'',
|
|
|
|
'''Optional Plug-Ins:''',
|
|
|
|
''' Ascii Art: @0@'''.format(libaa.found()),
|
|
|
|
''' Ghostscript: @0@'''.format(ghostscript.found()),
|
|
|
|
''' Help Browser: @0@'''.format(webkit.found()),
|
|
|
|
''' JPEG 2000: @0@'''.format(openjpeg.found()),
|
2021-08-26 20:24:21 +08:00
|
|
|
''' JPEG XL: @0@'''.format(libjxl.found()),
|
2017-11-01 21:27:13 +08:00
|
|
|
''' MNG: @0@'''.format(libmng.found()),
|
|
|
|
''' OpenEXR: @0@'''.format(openexr.found()),
|
|
|
|
''' WebP: @0@'''.format(webp_found),
|
2020-10-20 00:52:18 +08:00
|
|
|
''' HEIC: import: @0@ - export: @1@ [profile support: @2@]@3@'''
|
|
|
|
.format(can_import_heic, can_export_heic,
|
2020-10-22 17:54:51 +08:00
|
|
|
(can_import_heic or can_export_heic) and
|
2019-11-13 19:52:43 +08:00
|
|
|
libheif.version().version_compare('>=1.4.0'),
|
2020-10-20 00:52:18 +08:00
|
|
|
libheif_warning != '' ? ' (see warning below)' : ''),
|
|
|
|
''' AVIF: import: @0@ - export: @1@'''
|
|
|
|
.format(can_import_avif, can_export_avif),
|
2017-11-01 21:27:13 +08:00
|
|
|
''' PDF (export): @0@'''.format(cairopdf.found()),
|
|
|
|
''' Print: @0@'''.format(have_print),
|
|
|
|
''' Python 3 plug-ins: @0@'''.format(have_python),
|
|
|
|
''' Javascript plug-ins: @0@'''.format(have_javascript),
|
|
|
|
''' Lua plug-ins: @0@'''.format(have_lua),
|
2020-10-13 04:02:46 +08:00
|
|
|
''' Vala plug-ins: @0@'''.format(have_vala),
|
2017-11-01 21:27:13 +08:00
|
|
|
''' TWAIN (Win32): @0@'''.format(platform_windows),
|
|
|
|
''' Webpage: @0@'''.format(webkit.found()),
|
|
|
|
''' WMF: @0@'''.format(wmf.found()),
|
|
|
|
''' X11 Mouse Cursor: @0@'''.format(xmc.found()),
|
|
|
|
''' XPM: @0@'''.format(libxpm.found()),
|
|
|
|
''' Email: @0@'''.format(email_message),
|
|
|
|
'',
|
|
|
|
'''Optional Modules:''',
|
|
|
|
''' ALSA (MIDI Input): @0@'''.format(alsa.found()),
|
|
|
|
''' Linux Input: @0@ (GUdev support: @1@)'''
|
|
|
|
.format(have_linuxinput, gudev.found()),
|
|
|
|
''' DirectInput (Win32): @0@'''.format(directx.found()),
|
|
|
|
'',
|
|
|
|
'''Tests:''',
|
|
|
|
''' Use xvfb-run @0@'''.format(xvfb_run.found()),
|
|
|
|
''' Test appdata @0@'''.format(appstream_util.found()),
|
|
|
|
'',
|
2021-01-29 23:51:47 +08:00
|
|
|
'''Documentation:''',
|
|
|
|
''' GObject Introspection: @0@'''.format(get_option('g-ir-doc')),
|
|
|
|
'',
|
2017-11-01 21:27:13 +08:00
|
|
|
'''Bug report URL: @0@'''.format(bug_report_url),
|
|
|
|
]
|
|
|
|
|
|
|
|
message('\n'.join(final_message))
|
2019-08-29 21:36:18 +08:00
|
|
|
|
|
|
|
if warnings.length() > 0
|
2019-09-22 01:10:46 +08:00
|
|
|
warning('Warnings occurred during configuration')
|
2019-08-29 21:36:18 +08:00
|
|
|
foreach warning : warnings
|
|
|
|
warning(warning)
|
|
|
|
endforeach
|
|
|
|
endif
|
2019-10-15 00:35:57 +08:00
|
|
|
|
|
|
|
warning('''
|
|
|
|
|
|
|
|
MESON BUILD IS STILL EXPERIMENTAL!
|
|
|
|
|
|
|
|
we encourage usage of meson if you want to test and
|
|
|
|
report bugs. Yet if you are a packager, DO NOT USE
|
|
|
|
meson until we fix all known issues and bugs.
|
|
|
|
''')
|