From 69fe98bdccc9c1c50e51bdfffa26cddacf07b575 Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Mon, 23 Oct 2017 04:53:04 -0400 Subject: Initial work on meson port --- Makefile-gir.am | 12 +- docs/meson.build | 2 + examples/meson.build | 3 + gir/cairo-1.0.gir.in | 4 +- gir/generate_source_list.py | 16 +++ gir/meson.build | 272 ++++++++++++++++++++++++++++++++++++++++++ girepository/cmph/meson.build | 50 ++++++++ girepository/meson.build | 163 +++++++++++++++++++++++++ giscanner/meson.build | 74 ++++++++++++ meson.build | 91 ++++++++++++++ meson_options.txt | 11 ++ tools/g-ir-tool-template.in | 4 + tools/meson.build | 54 +++++++++ 13 files changed, 748 insertions(+), 8 deletions(-) create mode 100644 docs/meson.build create mode 100644 examples/meson.build create mode 100755 gir/generate_source_list.py create mode 100644 gir/meson.build create mode 100644 girepository/cmph/meson.build create mode 100644 girepository/meson.build create mode 100644 giscanner/meson.build create mode 100644 meson.build create mode 100644 meson_options.txt mode change 100644 => 100755 tools/g-ir-tool-template.in create mode 100644 tools/meson.build diff --git a/Makefile-gir.am b/Makefile-gir.am index 86ab5bf1..1d0da9b1 100644 --- a/Makefile-gir.am +++ b/Makefile-gir.am @@ -18,8 +18,8 @@ EXTRA_DIST += $(STATIC_GIRSOURCES) gir/cairo-1.0.gir: gir/cairo-1.0.gir.in Makefile [ -d $(@D) ] || $(mkdir_p) $(@D) ; \ sed \ - -e s,%CAIRO_SHARED_LIBRARY%,$(CAIRO_SHARED_LIBRARY), \ - -e s,%CAIRO_GIR_PACKAGE%,$(CAIRO_GIR_PACKAGE), \ + -e s,\@CAIRO_SHARED_LIBRARY\@,$(CAIRO_SHARED_LIBRARY), \ + -e s,\@CAIRO_GIR_PACKAGE\@,$(CAIRO_GIR_PACKAGE), \ < $< > $@.tmp && mv $@.tmp $@ BUILT_SOURCES += gir/cairo-1.0.gir SUBSTITUTED_GIRSOURCES += gir/cairo-1.0.gir @@ -47,10 +47,10 @@ if WITH_GLIBSRC GModule_2_0_gir_DOCSRC = $(GLIBSRC)/gmodule/*.c Gio_2_0_gir_DOCSRC = $(GLIBSRC)/gio/*.c else - GLib_2_0_gir_DOCSRC = - GObject_2_0_gir_DOCSRC = - GModule_2_0_gir_DOCSRC = - Gio_2_0_gir_DOCSRC = + GLib_2_0_gir_DOCSRC = + GObject_2_0_gir_DOCSRC = + GModule_2_0_gir_DOCSRC = + Gio_2_0_gir_DOCSRC = endif diff --git a/docs/meson.build b/docs/meson.build new file mode 100644 index 00000000..1ffde1f8 --- /dev/null +++ b/docs/meson.build @@ -0,0 +1,2 @@ +install_man('g-ir-compiler.1', 'g-ir-generate.1', 'g-ir-scanner.1') +install_data('gir-1.2.rnc', install_dir: join_paths(get_option('datadir'), 'gir-1.0')) diff --git a/examples/meson.build b/examples/meson.build new file mode 100644 index 00000000..6cc214b5 --- /dev/null +++ b/examples/meson.build @@ -0,0 +1,3 @@ +executable('glib-print', 'glib-print.c', + dependencies: girepo_dep, +) diff --git a/gir/cairo-1.0.gir.in b/gir/cairo-1.0.gir.in index 73c993ab..60113e6e 100644 --- a/gir/cairo-1.0.gir.in +++ b/gir/cairo-1.0.gir.in @@ -3,9 +3,9 @@ xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0"> - + = 0.40.0', + default_options: [ + 'warning_level=1', + 'buildtype=debugoptimized', + ], +) + +py3 = import('python3') + +cc = meson.get_compiler('c') +config = configuration_data() +config.set_quoted('GIR_SUFFIX', 'gir-1.0') +config.set_quoted('GIR_DIR', join_paths(get_option('prefix'), get_option('datadir'), 'gir-1.0')) +config.set_quoted('GOBJECT_INTROSPECTION_LIBDIR', join_paths(get_option('prefix'), get_option('libdir'))) + +foreach type : ['char', 'short', 'int', 'long'] + size = cc.sizeof(type) + if size == -1 + error('Failed to get size of @0@'.format(type)) + endif + config.set('SIZEOF_@0@'.format(type.to_upper()), size) +endforeach + +configure_file( + configuration: config, + output: 'config.h' +) + +add_project_arguments([ + '-I' + meson.build_root(), + '-DHAVE_CONFIG_H', + ] language: 'c', +) + +gi_hidden_visibility_cflags = [] +if cc.has_argument('-fvisibility=hidden') + gi_hidden_visibility_cflags = [ + '-D_GI_EXTERN=__attribute__((visibility("default"))) extern', + '-fvisibility=hidden', + ] +endif + +gobject_dep = dependency('gobject-2.0', version: '>= 2.55.0') +gio_dep = dependency('gio-2.0') +giounix_dep = dependency('gio-unix-2.0', required: false) +gmodule_dep = dependency('gmodule-2.0') +libffi_dep = dependency('libffi') + +subdir('girepository') +subdir('tools') +subdir('giscanner') +subdir('gir') +subdir('examples') +subdir('docs') +subdir('tests') + +install_data('Makefile.introspection', install_dir: join_paths(get_option('datadir'), 'gobject-introspection-1.0')) +install_data('m4/introspection.m4', install_dir: join_paths(get_option('datadir'), 'aclocal')) + +prefix = get_option('prefix') +pkgconfig_conf = configuration_data() +pkgconfig_conf.set('prefix', prefix) +pkgconfig_conf.set('exec_prefix', '${prefix}') +pkgconfig_conf.set('bindir', join_paths(prefix, get_option('bindir'))) +pkgconfig_conf.set('libdir', join_paths(prefix, get_option('libdir'))) +pkgconfig_conf.set('datarootdir', join_paths(prefix, get_option('datadir'))) +pkgconfig_conf.set('datadir', '${datarootdir}') +pkgconfig_conf.set('includedir', join_paths(prefix, get_option('includedir'))) +pkgconfig_conf.set('EXEEXT', '') # TODO? +pkgconfig_conf.set('VERSION', meson.project_version()) +pkgconfig_conf.set('FFI_PC_CFLAGS', libffi_dep.get_pkgconfig_variable('Cflags')) +pkgconfig_conf.set('FFI_PC_PACKAGES', 'libffi') +pkgconfig_conf.set('FFI_PC_LIBS', libffi_dep.get_pkgconfig_variable('Libs')) + +configure_file( + input: 'gobject-introspection-no-export-1.0.pc.in', + output: 'gobject-introspection-no-export-1.0.pc', + configuration: pkgconfig_conf, + install: true, + install_dir: join_paths(get_option('libdir'), 'pkgconfig'), +) + +configure_file( + input: 'gobject-introspection-1.0.pc.in', + output: 'gobject-introspection-1.0.pc', + configuration: pkgconfig_conf, + install: true, + install_dir: join_paths(get_option('libdir'), 'pkgconfig'), +) diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 00000000..e9d21e93 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,11 @@ +option('cairo', type: 'boolean', + description: 'Use cairo for tests' +) + +option('doctool', type: 'boolean', + description: 'Install g-ir-doc-tool' +) + +option('glib-src-dir', type: 'string', + description: 'Source directory for glib - needed to add docs to gir' +) diff --git a/tools/g-ir-tool-template.in b/tools/g-ir-tool-template.in old mode 100644 new mode 100755 index edc68a4c..2eac21fd --- a/tools/g-ir-tool-template.in +++ b/tools/g-ir-tool-template.in @@ -62,5 +62,9 @@ if srcdir is not None: sys.path.insert(0, pylibdir) +builddir = os.getenv('UNINSTALLED_INTROSPECTION_BUILDDIR', None) +if builddir is not None: + sys.path.insert(0, os.path.join(builddir, 'giscanner')) + from giscanner.@TOOL_MODULE@ import @TOOL_FUNCTION@ sys.exit(@TOOL_FUNCTION@(sys.argv)) diff --git a/tools/meson.build b/tools/meson.build new file mode 100644 index 00000000..73817ec8 --- /dev/null +++ b/tools/meson.build @@ -0,0 +1,54 @@ +libdir_abs = join_paths(get_option('prefix'), get_option('libdir')) +datadir_abs = join_paths(get_option('prefix'), get_option('datadir')) +python_path = py3.find_python().path() + +tools = [ + ['g-ir-scanner', 'scannermain', 'scanner_main'], + ['g-ir-annotation-tool', 'annotationmain', 'annotation_main'], +] +if get_option('doctool') + tools += [['g-ir-doc-tool', 'docmain', 'doc_main']] +endif + +tool_output = [] +foreach tool : tools + tools_conf = configuration_data() + tools_conf.set('libdir', libdir_abs) + tools_conf.set('datarootdir', datadir_abs) + tools_conf.set('PYTHON', python_path) + + tools_conf.set('TOOL_MODULE', tool[1]) + tools_conf.set('TOOL_FUNCTION', tool[2]) + tool_output += configure_file( + input: 'g-ir-tool-template.in', + output: tool[0], + configuration: tools_conf, + install: true, + install_dir: get_option('bindir'), + ) +endforeach + +girscanner = tool_output[0] + +gircompiler = executable('g-ir-compiler', 'compiler.c', + c_args: '-DGIREPO_DEFAULT_SEARCH_PATH="@0"'.format(libdir_abs), + dependencies: [ + girepo_internals_dep, + girepo_dep, + ], + install: true, +) + +girgenerate = executable('g-ir-generate', 'generate.c', + c_args: '-DGIREPO_DEFAULT_SEARCH_PATH="@0"'.format(libdir_abs), + dependencies: [ + girepo_internals_dep, + girepo_dep, + ], + install: true, +) + +girinspect = executable('g-ir-inspect', 'g-ir-inspect.c', + dependencies: girepo_dep, + install: true, +) -- cgit v1.2.1