From 2b3bce1526b538dc2c7fa223eaf9808858aa1b06 Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Thu, 15 Nov 2018 15:10:05 +0100 Subject: [PATCH] Port cross-compilation support to meson Upstream-Status: Pending Signed-off-by: Alexander Kanavin --- gir/meson.build | 62 ++++++++++++++++++++++++++++++++++------------- meson.build | 4 ++- meson_options.txt | 20 +++++++++++++++ 3 files changed, 68 insertions(+), 18 deletions(-) diff --git a/gir/meson.build b/gir/meson.build index 85ae575..327c134 100644 --- a/gir/meson.build +++ b/gir/meson.build @@ -36,16 +36,29 @@ gir_files = [ typelibdir = join_paths(get_option('libdir'), 'girepository-1.0') install_data(gir_files, install_dir: girdir) -scanner_command = [ - python, - girscanner, - '--output=@OUTPUT@', - '--no-libtool', - '--quiet', - '--reparse-validate', - '--add-include-path', join_paths(meson.current_build_dir()), - '--add-include-path', join_paths(meson.current_source_dir()), -] +if get_option('enable-host-gi') + scanner_command = [ + 'g-ir-scanner', + '--output=@OUTPUT@', + '--no-libtool', + '--quiet', + '--reparse-validate', + '--add-include-path', join_paths(meson.current_build_dir()), + '--add-include-path', join_paths(meson.current_source_dir()), + ] +else + scanner_command = [ + python, + girscanner, + '--output=@OUTPUT@', + '--no-libtool', + '--quiet', + '--reparse-validate', + '--add-include-path', join_paths(meson.current_build_dir()), + '--add-include-path', join_paths(meson.current_source_dir()), + ] +endif + dep_type = glib_dep.type_name() if dep_type == 'internal' @@ -58,6 +71,12 @@ if dep_type == 'internal' '--extra-library=glib-2.0', '--extra-library=gobject-2.0'] endif +if get_option('enable-gi-cross-wrapper') != '' + scanner_command += ['--use-binary-wrapper=' + get_option('enable-gi-cross-wrapper')] +endif +if get_option('enable-gi-ldd-wrapper') != '' + scanner_command += ['--use-ldd-wrapper=' + get_option('enable-gi-ldd-wrapper')] +endif # Take a glob and print to newlines globber = ''' from glob import glob @@ -84,8 +103,8 @@ glib_command = scanner_command + [ if dep_type == 'pkgconfig' glib_command += ['--external-library', '--pkg=glib-2.0'] - glib_libdir = glib_dep.get_pkgconfig_variable('libdir') - glib_incdir = join_paths(glib_dep.get_pkgconfig_variable('includedir'), 'glib-2.0') + glib_libdir = get_option('pkgconfig-sysroot-path') + glib_dep.get_pkgconfig_variable('libdir') + glib_incdir = get_option('pkgconfig-sysroot-path') + join_paths(glib_dep.get_pkgconfig_variable('includedir'), 'glib-2.0') glib_libincdir = join_paths(glib_libdir, 'glib-2.0', 'include') glib_files += join_paths(glib_incdir, 'gobject', 'glib-types.h') glib_files += join_paths(glib_libincdir, 'glibconfig.h') @@ -339,7 +358,7 @@ endforeach if giounix_dep.found() if dep_type == 'pkgconfig' gio_command += ['--pkg=gio-unix-2.0'] - giounix_includedir = join_paths(giounix_dep.get_pkgconfig_variable('includedir'), 'gio-unix-2.0') + giounix_includedir = get_option('pkgconfig-sysroot-path') + join_paths(giounix_dep.get_pkgconfig_variable('includedir'), 'gio-unix-2.0') # Get the installed gio-unix header list ret = run_command(python, '-c', globber.format(join_paths(giounix_includedir, 'gio', '*.h'))) if ret.returncode() != 0 @@ -422,15 +441,24 @@ gir_files += custom_target('gir-girepository', ) typelibs = [] +if get_option('enable-gi-cross-wrapper') != '' + gircompiler_command = [get_option('enable-gi-cross-wrapper'), gircompiler.full_path(), '-o', '@OUTPUT@', '@INPUT@', + '--includedir', meson.current_build_dir(), + '--includedir', meson.current_source_dir(), + ] +else + gircompiler_command = [gircompiler, '-o', '@OUTPUT@', '@INPUT@', + '--includedir', meson.current_build_dir(), + '--includedir', meson.current_source_dir(), + ] +endif + foreach gir : gir_files typelibs += custom_target('generate-typelib-@0@'.format(gir).underscorify(), input: gir, output: '@BASENAME@.typelib', depends: [gobject_gir, ], - command: [gircompiler, '-o', '@OUTPUT@', '@INPUT@', - '--includedir', meson.current_build_dir(), - '--includedir', meson.current_source_dir(), - ], + command: gircompiler_command, install: true, install_dir: typelibdir, ) diff --git a/meson.build b/meson.build index 95bbd2b..f7baefd 100644 --- a/meson.build +++ b/meson.build @@ -163,7 +163,9 @@ endif subdir('girepository') subdir('tools') subdir('giscanner') -subdir('gir') +if get_option('enable-introspection-data') == true + subdir('gir') +endif subdir('examples') subdir('docs') subdir('tests') diff --git a/meson_options.txt b/meson_options.txt index 445a68a..a325511 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -25,3 +25,23 @@ option('python', type: 'string', value: 'python3', option('gir_dir_prefix', type: 'string', description: 'Intermediate prefix for gir installation under ${prefix}' ) + +option('enable-host-gi', type: 'boolean', value : false, + description: 'Use gobject introspection tools installed in the host system (useful when cross-compiling)' +) + +option('enable-gi-cross-wrapper', type: 'string', + description: 'Use a wrapper to run gicompiler and binaries produced by giscanner (useful when cross-compiling)' +) + +option('enable-gi-ldd-wrapper', type: 'string', + description: 'Use a ldd wrapper instead of system ldd command in giscanner (useful when cross-compiling)' +) + +option('enable-introspection-data', type: 'boolean', value : true, + description: 'Build introspection data (.gir and .typelib files) in addition to library and tools' +) + +option('pkgconfig-sysroot-path', type: 'string', + description: 'Specify a sysroot path to prepend to pkgconfig output (useful when cross-compiling)' +)