| From ea25a5a755bc839d5b504aac207f860ae68109bc Mon Sep 17 00:00:00 2001 |
| From: Alexander Kanavin <alex.kanavin@gmail.com> |
| 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 <alex.kanavin@gmail.com> |
| |
| --- |
| gir/meson.build | 59 ++++++++++++++++++++++++++++++++++------------- |
| meson.build | 4 +++- |
| meson_options.txt | 20 ++++++++++++++++ |
| 3 files changed, 66 insertions(+), 17 deletions(-) |
| |
| diff --git a/gir/meson.build b/gir/meson.build |
| index 1cb514a..f873068 100644 |
| --- a/gir/meson.build |
| +++ b/gir/meson.build |
| @@ -36,15 +36,27 @@ 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', |
| - '--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', |
| + '--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', |
| + '--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' |
| @@ -57,6 +69,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 |
| @@ -83,8 +101,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') |
| @@ -338,7 +356,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 |
| @@ -416,15 +434,24 @@ gir_files += custom_target('gir-girepository', |
| ] |
| ) |
| |
| +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 |
| 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 17acd82..e0bb495 100644 |
| --- a/meson.build |
| +++ b/meson.build |
| @@ -81,7 +81,9 @@ libffi_dep = dependency('libffi', |
| 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 ee6958d..b168142 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)' |
| +) |