122 kx # Glade uses a Major.Minor.Micro versioning system
122 kx #
122 kx # With odd minor numbers representing development releases and even numbers
122 kx # stable releases and micro numbers bug bugfixes.
122 kx #
122 kx # Since master is built as a nightly flatpak, we bump the version to development
122 kx # inmediatelly after making a stable release, that way people using the nigthly
122 kx # version will always know they are on a development release.
122 kx project(
122 kx 'glade', 'c',
122 kx version: '3.40.0',
122 kx license: 'GPL2',
122 kx default_options: 'buildtype=debugoptimized',
122 kx meson_version: '>= 0.53.0',
122 kx )
122 kx
122 kx glade_name = meson.project_name()
122 kx
122 kx glade_version = meson.project_version()
122 kx version_array = glade_version.split('.')
122 kx glade_major_version = version_array[0].to_int()
122 kx glade_minor_version = version_array[1].to_int()
122 kx glade_micro_version = version_array[2].to_int()
122 kx
122 kx glade_prefix = get_option('prefix')
122 kx glade_bindir = get_option('bindir')
122 kx glade_datadir = get_option('datadir')
122 kx glade_libdir = get_option('libdir')
122 kx glade_localedir = get_option('localedir')
122 kx glade_mandir = get_option('mandir')
122 kx
122 kx glade_catalogdir = glade_name / 'catalogs'
122 kx glade_moduledir = glade_name / 'modules'
122 kx glade_pixmapdir = glade_name / 'pixmaps'
122 kx
122 kx gladeui_name = 'gladeui'
122 kx
122 kx gladeui_version = '2.0'
122 kx version_array = gladeui_version.split('.')
122 kx gladeui_major_version = version_array[0].to_int()
122 kx gladeui_minor_version = version_array[1].to_int()
122 kx
122 kx gladeui_libname = '@0@-@1@'.format(gladeui_name, gladeui_version)
122 kx
122 kx # If the source code has changed at all, increment gladeui_revision
122 kx # If any interfaces have been added, removed, or changed, increment gladeui_current, and set gladeui_revision to 0.
122 kx # If any interfaces have been added since the last public release, then increment gladeui_age.
122 kx # If any interfaces have been removed since the last public release, then set gladeui_age to 0.
122 kx # Reference: http://www.gnu.org/software/libtool/manual/libtool.html#Versioning
122 kx
122 kx gladeui_revision = 0
122 kx gladeui_current = 14
122 kx gladeui_age = 1
122 kx gladeui_current_minus_age = gladeui_current - gladeui_age
122 kx gladeui_libversion = '@0@.@1@.@2@'.format(gladeui_current_minus_age, gladeui_age, gladeui_revision)
122 kx
122 kx glade_system = host_machine.system()
122 kx glade_debug = get_option('buildtype').contains('debug')
122 kx if glade_debug
122 kx add_project_arguments('-DGLADE_ENABLE_DEBUG', language : 'c')
122 kx endif
122 kx
122 kx glade_unstable = glade_minor_version.is_odd()
122 kx
122 kx gnome = import('gnome')
122 kx i18n = import('i18n')
122 kx pkg = import('pkgconfig')
122 kx
122 kx # NOTE: On windows we only target MSYS2/mingw
122 kx windows = import('windows')
122 kx
122 kx source_root = meson.current_source_dir()
122 kx build_root = meson.current_build_dir()
122 kx
122 kx its_dir = source_root / 'data/gettext'
122 kx po_dir = source_root / 'po'
122 kx
122 kx top_inc = include_directories('.')
122 kx
122 kx cc = meson.get_compiler('c')
122 kx
122 kx config_h = configuration_data()
122 kx
122 kx # package defines
122 kx set_defines = [
122 kx # package
122 kx ['PACKAGE_NAME', meson.project_name()],
122 kx ['PACKAGE_STRING', '@0@ @1@'.format(glade_name, glade_version)],
122 kx ['PACKAGE_VERSION', glade_version],
122 kx ['VERSION', glade_version],
122 kx # i18n
122 kx ['GETTEXT_PACKAGE', glade_name],
122 kx ]
122 kx
122 kx foreach define: set_defines
122 kx config_h.set_quoted(define[0], define[1])
122 kx endforeach
122 kx
122 kx config_h.set('GLADE_MAJOR_VERSION', glade_major_version)
122 kx config_h.set('GLADE_MINOR_VERSION', glade_minor_version)
122 kx config_h.set('GLADE_MICRO_VERSION', glade_micro_version)
122 kx config_h.set('GDK_VERSION_MIN_REQUIRED', '(G_ENCODE_VERSION (3, 0))')
122 kx config_h.set('ENABLE_NLS', true)
122 kx
122 kx # compiler flags
122 kx common_flags = ['-DHAVE_CONFIG_H']
122 kx
122 kx if get_option('buildtype').contains('debug')
122 kx common_flags += cc.get_supported_arguments('-Wnested-externs')
122 kx endif
122 kx
122 kx add_project_arguments(common_flags, language: 'c')
122 kx
122 kx # Check required libraries
122 kx glib_dep = dependency('glib-2.0', version: '>= 2.64.0')
122 kx gio_dep = dependency('gio-2.0', version: '>= 2.64.0')
122 kx gmodule_dep = dependency('gmodule-2.0')
122 kx gmodule_export_dep = dependency('gmodule-export-2.0')
122 kx gtk_dep = dependency('gtk+-3.0', version: '>= 3.24.0')
122 kx libxml_dep = dependency('libxml-2.0', version: '>= 2.4.0')
122 kx
122 kx m_dep = cc.find_library('m')
122 kx
122 kx # Check for the unix print widgets in gtk+
122 kx have_gtk_unix_print = cc.has_function('gtk_print_unix_dialog_new', dependencies: gtk_dep)
122 kx
122 kx # Check for _gtk_widget_class_template_unset_only_for_glade() in gtk+
122 kx config_h.set10('HAVE_GTK_TEMPLATE_UNSET', cc.has_function('_gtk_widget_class_template_unset_only_for_glade', dependencies: gtk_dep))
122 kx
122 kx # va_copy.
122 kx va_copy_src = '''
122 kx #include <stdarg.h>
122 kx int main() {
122 kx va_list ap1, ap2;
122 kx @0@(ap1, ap2);
122 kx };
122 kx '''
122 kx
122 kx if not cc.links(va_copy_src.format('va_copy'), name: 'how to copy va_list')
122 kx if cc.links(va_copy_src.format('__va_copy'))
122 kx config_h.set('va_copy', '__va_copy')
122 kx else
122 kx config_h.set('va_copy(dest,src)', 'memcpy(&dest,&src,sizeof(va_list))')
122 kx endif
122 kx endif
122 kx
122 kx # GJS support
122 kx gjs_dep = dependency('gjs-1.0', version: '>= 1.64.0', required: get_option('gjs'))
122 kx have_gjs = gjs_dep.found()
122 kx
122 kx # Python for optional python dev libs
122 kx pygobject_version = '3.8.0'
122 kx pygobject_dep = dependency('pygobject-3.0', version: '>= ' + pygobject_version, required: get_option('python'))
122 kx have_python = pygobject_dep.found()
122 kx if have_python
122 kx python_dep = import('python').find_installation().dependency(embed: true)
122 kx
122 kx version_array = pygobject_version.split('.')
122 kx config_h.set('PYGOBJECT_REQUIRED_MAJOR', version_array[0].to_int())
122 kx config_h.set('PYGOBJECT_REQUIRED_MINOR', version_array[1].to_int())
122 kx config_h.set('PYGOBJECT_REQUIRED_MICRO', version_array[2].to_int())
122 kx endif
122 kx
122 kx # WebKit2GTK support
122 kx webkit2gtk_dep = dependency('webkit2gtk-4.0', version: '>= 2.28.0', required: get_option('webkit2gtk'))
122 kx have_webkit2gtk = webkit2gtk_dep.found()
122 kx
122 kx # Check for GDK Quartz and MacOSX integration package
122 kx enable_mac_integration = dependency('gdk-3.0').get_pkgconfig_variable('targets').contains('quartz')
122 kx if enable_mac_integration
122 kx
122 kx if get_option('mac_bundle')
122 kx gtk_mac_integration_gtk3_dep = dependency('gtk-mac-integration-gtk3')
122 kx gtk_mac_bundle_flags = '-DMAC_BUNDLE'
122 kx endif
122 kx endif
122 kx
122 kx # Check for osx
122 kx config_h.set('PLATFORM_OSX', glade_system == 'darwin')
122 kx
122 kx if glade_system == 'windows'
122 kx rc_conf = configuration_data()
122 kx rc_conf.set('GLADE_MAJOR_VERSION', glade_major_version)
122 kx rc_conf.set('GLADE_MINOR_VERSION', glade_minor_version)
122 kx rc_conf.set('GLADE_MICRO_VERSION', glade_micro_version)
122 kx rc_conf.set('GLADE_CURRENT_MINUS_AGE', gladeui_current_minus_age)
122 kx rc_conf.set('SOURCE_ROOT', source_root)
122 kx endif
122 kx
122 kx subdir('po')
122 kx subdir('data')
122 kx subdir('gladeui')
122 kx subdir('src')
122 kx subdir('plugins')
122 kx subdir('tests')
122 kx subdir('help')
122 kx
122 kx enable_gtk_doc = get_option('gtk_doc')
122 kx if enable_gtk_doc
122 kx subdir('doc')
122 kx endif
122 kx
122 kx enable_man = get_option('man')
122 kx if enable_man
122 kx subdir('man')
122 kx endif
122 kx
122 kx configure_file(
122 kx output: 'config.h',
122 kx configuration: config_h,
122 kx )
122 kx
122 kx meson.add_install_script(
122 kx 'meson_post_install.py',
122 kx glade_datadir,
122 kx )
122 kx
122 kx tls_backend_support_src = '''
122 kx #include <stdio.h>
122 kx #include <gio/gio.h>
122 kx int main(int argc, char **argv)
122 kx {
122 kx printf ("%s\n", g_tls_backend_supports_tls (g_tls_backend_get_default ()) ? "true" : "false");
122 kx return 0;
122 kx }
122 kx '''
122 kx tls_backend_support = 'false'
122 kx
122 kx output = '\nConfiguration:\n\n'
122 kx output += '\tCompiler: ' + cc.get_id() + '\n'
122 kx output += '\tSource code location: ' + source_root + '\n'
122 kx output += '\tDebug Enabled: ' + glade_debug.to_string() + '\n'
122 kx output += '\tGTK+ UNIX Print Widgets: ' + have_gtk_unix_print.to_string() + '\n'
122 kx output += '\tGJS Widgets support: ' + have_gjs.to_string() + '\n'
122 kx output += '\tPYTHON Widgets support: ' + have_python.to_string() + '\n'
122 kx output += '\tGladeui Catalog: ' + enable_gladeui.to_string() + '\n'
122 kx output += '\tWebKit2GTK+ Catalog: ' + have_webkit2gtk.to_string() + '\n'
122 kx output += '\tIntrospection Data: ' + enable_introspection.to_string() + '\n\n'
122 kx output += '\tBuild Reference Manual: ' + enable_gtk_doc.to_string() + '\n'
122 kx output += '\tBuild Manual Pages: ' + enable_man.to_string() + '\n'
122 kx output += '\tTLS backend support: ' + tls_backend_support
122 kx message(output)