src/cutout.py | 16 ++++++++++++++-- src/meson.build | 5 ++++- 2 files changed, 18 insertions(+), 3 deletions(-) New commits: commit ae9ac2a1bfb6fa800b99791b6fc36711dd0c1fbc Author: Tim-Philipp Müller <tim@xxxxxxxxxxxxxxx> Date: Sun Jan 17 12:51:59 2021 +0000 meson: fix cross-compilation issues with gperf header file preprocessing Pass c_args to the compiler when preprocessing the gperf header file, they might contain important bits without which compilation/preprocessing might fail (e.g. with clang on Android). cc.cmd_array() does not include the c_args and we can't easily look them up from the meson.build file, so we have to retrieve from the introspection info. This is basically the Meson equivalent to commit 57103773. diff --git a/src/cutout.py b/src/cutout.py index 96cafd2..323eec8 100644 --- a/src/cutout.py +++ b/src/cutout.py @@ -1,5 +1,6 @@ import argparse import subprocess +import json import os import re @@ -7,12 +8,23 @@ if __name__== '__main__': parser = argparse.ArgumentParser() parser.add_argument('input') parser.add_argument('output') + parser.add_argument('buildroot') args = parser.parse_known_args() - print (args[0].output) + + # c_args might contain things that are essential for crosscompilation, but + # are not included in cc.cmd_array(), so we have to look them up ourselves + host_cargs = [] + buildroot = args[0].buildroot + with open(os.path.join(buildroot, 'meson-info', 'intro-buildoptions.json')) as json_file: + bopts = json.load(json_file) + for opt in bopts: + if opt['name'] == 'c_args' and opt['section'] == 'compiler' and opt['machine'] == 'host': + host_cargs = opt['value'] + break cpp = args[1] - ret = subprocess.run(cpp + [args[0].input], stdout=subprocess.PIPE, check=True) + ret = subprocess.run(cpp + host_cargs + [args[0].input], stdout=subprocess.PIPE, check=True) stdout = ret.stdout.decode('utf8') diff --git a/src/meson.build b/src/meson.build index f2a4861..7f9bf31 100644 --- a/src/meson.build +++ b/src/meson.build @@ -44,10 +44,13 @@ endif cpp += ['-I', join_paths(meson.current_source_dir(), '..')] +# Can use meson.project_build_dir() once we require Meson 0.56 +project_build_dir = meson.current_build_dir() / '..' + fcobjshash_gperf = custom_target('fcobjshash.gperf', input: 'fcobjshash.gperf.h', output: 'fcobjshash.gperf', - command: [python3, files('cutout.py')[0], '@INPUT@', '@OUTPUT@', cpp], + command: [python3, files('cutout.py')[0], '@INPUT@', '@OUTPUT@', project_build_dir, cpp], build_by_default: true, ) _______________________________________________ Fontconfig mailing list Fontconfig@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/fontconfig