'cpp',
version : run_command('./version.sh', check : true).stdout().strip(),
license : ['GPL-2.0-or-later'],
- meson_version : '>=0.53.0',
- default_options : ['warning_level=3', 'buildtype=debugoptimized']
+ meson_version : '>=0.56.2',
+ default_options : ['warning_level=3', 'buildtype=debugoptimized', 'cpp_link_args=-rdynamic']
)
# To inhibit warnings from the generated files icons_inline.h and ui_icons.h
add_global_arguments('-Wno-overlength-strings', language : 'c')
# To compile originally-C files as C++
-add_global_arguments('-fpermissive', language : 'cpp')
add_global_arguments('-Wno-error=deprecated-declarations', language : 'cpp')
add_global_arguments('-Wno-error=sign-compare', language : 'cpp')
add_global_arguments('-Wno-error=return-type', language : 'cpp')
fs = import('fs')
configuration_inc = include_directories('.')
+# Extended stack trace using backward-app
+option = get_option('devel')
+if option.enabled()
+ if cc.has_link_argument('-ldwarf')
+ add_project_link_arguments('-ldwarf', language: 'cpp')
+ endif
+endif
+
# External programs
gdk_pixbuf_csource = find_program('gdk-pixbuf-csource', required : true)
+glib_compile_resources = find_program('glib-compile-resources', required : true)
glib_genmarshal = find_program('glib-genmarshal', required : true)
option = get_option('git')
icondir = join_paths(datadir, 'pixmaps')
mandir1 = join_paths(datadir, 'man', 'man1')
-podir = join_paths(meson.source_root(), 'po')
+podir = join_paths(meson.project_source_root(), 'po')
+scriptsdir = join_paths(meson.project_source_root(), 'scripts')
summary({'gq_appdir': gq_appdir,
'gq_bindir': gq_helpdir,
conf_data.set_quoted('VERSION', meson.project_version())
conf_data.set('DEBUG', debug)
-gtk_dep = dependency('gtk+-3.0', version : '>=3.22', required: true)
+option = get_option('gtk4')
+if option.enabled()
+ gtk_dep = dependency('gtk4', required: true)
+ conf_data.set('HAVE_GTK4', 1)
+else
+ gtk_dep = dependency('gtk+-3.0', version : '>=3.24', required: true)
+endif
glib_dep = dependency('glib-2.0', version : '>=2.52', required: true)
+# Required only when backward-cpp is used
+libdw_dep = []
+libunwind_dep = []
+option = get_option('devel')
+if option.enabled()
+ libdw_dep = dependency('libdw', required : true)
+ if libdw_dep.found()
+ libunwind_dep = dependency('libunwind', required : true)
+ if libunwind_dep.found()
+ conf_data.set('HAVE_DEVELOPER', 1)
+ summary({'developer mode' : ['extended stacktrace:', true]}, section : 'Debugging', bool_yn : true)
+ else
+ summary({'developer mode' : ['libunwind not found. extended stacktrace:', false]}, section : 'Debugging', bool_yn : true)
+ endif
+ else
+ summary({'developer mode' : ['libdw not found. extended stacktrace:', false]}, section : 'Debugging', bool_yn : true)
+ endif
+else
+ summary({'developer mode' : ['extended stacktrace:', false]}, section : 'Debugging', bool_yn : true)
+endif
+
+# Required only for seg. fault stacktrace and backtrace debugging
+option = get_option('execinfo')
+if not option.disabled()
+ result = cc.check_header('execinfo.h')
+ if result
+ conf_data.set('HAVE_EXECINFO_H', 1)
+ summary({'execinfo' : ['stacktrace supported:', true]}, section : 'Debugging', bool_yn : true)
+ else
+ summary({'execinfo' : ['stacktrace supported:', false]}, section : 'Debugging', bool_yn : true)
+ endif
+else
+ summary({'execinfo' : ['stacktrace supported:', false]}, section : 'Debugging', bool_yn : true)
+endif
+
libarchive_dep = []
req_version = '>=3.4.0'
option = get_option('archive')
req_version = '>=2.0'
option = get_option('cms')
if not option.disabled()
- lcms_dep = dependency('lcms2', version : req_version, required : get_option('cms'))
- if lcms_dep.found()
- conf_data.set('HAVE_LCMS', 1)
- conf_data.set('HAVE_LCMS2', 1)
- summary({'cms' : ['color management supported:', true]}, section : 'Configuration', bool_yn : true)
+ xxd = find_program('xxd', 'xxdi.pl', required : false)
+ if xxd.found()
+ lcms_dep = dependency('lcms2', version : req_version, required : get_option('cms'))
+ if lcms_dep.found()
+ conf_data.set('HAVE_LCMS', 1)
+ conf_data.set('HAVE_LCMS2', 1)
+ summary({'cms' : ['color management supported:', true]}, section : 'Configuration', bool_yn : true)
+ else
+ summary({'cms' : ['lcms2' + req_version + ' not found - color management supported:', false]}, section : 'Configuration', bool_yn : true)
+ endif
else
- summary({'cms' : ['lcms2' + req_version + ' not found - color management supported:', false]}, section : 'Configuration', bool_yn : true)
+ summary({'cms' : ['xxd or xxdi.pl not found - color management supported:', false]}, section : 'Configuration', bool_yn : true)
endif
else
summary({'cms' : ['disabled - color management supported:', false]}, section : 'Configuration', bool_yn : true)
summary({'print preview' : ['disabled - print preview supported:', false]}, section : 'Configuration', bool_yn : true)
endif
+# Required only for seg. fault stacktrace and backtrace debugging
+option = get_option('execinfo')
+if not option.disabled()
+ result = cc.check_header('execinfo.h')
+ if result
+ conf_data.set('HAVE_EXECINFO_H', 1)
+ summary({'execinfo' : ['stacktrace supported:', true]}, section : 'Configuration', bool_yn : true)
+ else
+ summary({'execinfo' : ['stacktrace supported:', false]}, section : 'Configuration', bool_yn : true)
+ endif
+else
+ summary({'execinfo' : ['stacktrace supported:', false]}, section : 'Configuration', bool_yn : true)
+endif
+
exiv2_dep = []
req_version = '>=0.11'
option = get_option('exiv2')
else
summary({'README' : ['pandoc not found - README.html created:', false]}, section : 'Documentation', bool_yn : true)
endif
- install_data('README.md', 'COPYING', 'TODO', 'AUTHORS', install_dir : helpdir)
+ install_data('README.md', 'COPYING', 'TODO', install_dir : helpdir)
else
summary({'pandoc' : ['disabled - README.html created:', false]}, section : 'Documentation', bool_yn : true)
endif
summary({'videothumbnailer' : ['disabled -thumbnails of video files supported', false]}, section : 'Configuration', bool_yn : true)
endif
-libwebp_dep = []
-req_version = '>=0.6.1'
-option = get_option('webp')
-if not option.disabled()
- libwebp_dep = dependency('libwebp', version : req_version, required : get_option('webp'))
+# libpixbufloader-webp is not loaded as part of libgdk-pixbuf. Just issue
+# a warning if not installed
+libwebp_dir = dependency('gdk-pixbuf-2.0', method: 'pkg-config').get_variable(pkgconfig: 'gdk_pixbuf_moduledir', internal: 'gdk_pixbuf_moduledir')
+
+if libwebp_dir.contains('loaders')
+ libwebp_dep = cc.find_library('pixbufloader-webp', dirs : libwebp_dir, required : false)
if libwebp_dep.found()
- conf_data.set('HAVE_WEBP', 1)
summary({'webp' : ['webp files supported:', true]}, section : 'Configuration', bool_yn : true)
else
- summary({'webp' : ['libwebp ' + req_version + ' not found - webp files supported:', false]}, section : 'Configuration', bool_yn : true)
+ summary({'webp' : ['webp-pixbuf-loader not installed - webp files supported:', false]}, section : 'Configuration', bool_yn : true)
endif
else
- summary({'webp' : ['disabled - webp files supported:', false]}, section : 'Configuration', bool_yn : true)
+ summary({'webp' : ['webp-pixbuf-loader not installed - webp files supported:', false]}, section : 'Configuration', bool_yn : true)
endif
# Check for nl_langinfo and _NL_TIME_FIRST_WEEKDAY
summary({'nl_langinfo' : ['nl_langinfo not found - first weekday depends on locale:', false, 'first weekday defaults to Monday']}, section : 'Documentation', bool_yn : true)
endif
-result = cc.has_function('strverscmp', prefix : '#include <string.h>')
-if result
- conf_data.set('HAVE_STRVERSCMP', 1)
-endif
-
conf_data.set_quoted('GETTEXT_PACKAGE', meson.project_name())
conf_data.set_quoted('GQ_APPDIR', gq_appdir)
conf_data.set_quoted('GQ_BINDIR', gq_bindir)
install_dir : appdatadir)
configure_file(input: 'geeqie.spec.in', output: 'geeqie.spec', configuration: conf_data)
+
+# Basic test of the executable
+xvfb = find_program('xvfb-run', required : false)
+if xvfb.found()
+ test('Basic test', xvfb, args: ['--auto-servernum', geeqie_exe, '--version'], timeout: 100)
+ summary({'xvfb' : ['Test runs:', true]}, section : 'Debugging', bool_yn : true)
+else
+ summary({'xvfb' : ['Test runs:', false]}, section : 'Debugging', bool_yn : true)
+
+endif