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