summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/meson/meson/0007-mesonbuild-allow-multiple-cross-file-options.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/meson/meson/0007-mesonbuild-allow-multiple-cross-file-options.patch')
-rw-r--r--meta/recipes-devtools/meson/meson/0007-mesonbuild-allow-multiple-cross-file-options.patch185
1 files changed, 185 insertions, 0 deletions
diff --git a/meta/recipes-devtools/meson/meson/0007-mesonbuild-allow-multiple-cross-file-options.patch b/meta/recipes-devtools/meson/meson/0007-mesonbuild-allow-multiple-cross-file-options.patch
new file mode 100644
index 0000000000..6c2949c0e8
--- /dev/null
+++ b/meta/recipes-devtools/meson/meson/0007-mesonbuild-allow-multiple-cross-file-options.patch
@@ -0,0 +1,185 @@
+From 07ae4f949b8402cff178dd12c210d9a726ffe2da Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@intel.com>
+Date: Mon, 18 Mar 2019 17:27:57 +0000
+Subject: [PATCH] mesonbuild: allow multiple --cross-file options
+
+Just like --native-file, allow multiple --cross-file options. This is mostly
+unifying the logic between cross_files and config_files.
+
+Upstream-Status: Backport [will be in 0.50.1]
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+---
+ .../markdown/snippets/multiple-cross-files.md | 3 ++
+ mesonbuild/backend/backends.py | 3 +-
+ mesonbuild/coredata.py | 52 +++----------------
+ mesonbuild/environment.py | 5 +-
+ mesonbuild/msetup.py | 4 +-
+ mesonbuild/munstable_coredata.py | 5 +-
+ 6 files changed, 20 insertions(+), 52 deletions(-)
+ create mode 100644 docs/markdown/snippets/multiple-cross-files.md
+
+diff --git a/docs/markdown/snippets/multiple-cross-files.md b/docs/markdown/snippets/multiple-cross-files.md
+new file mode 100644
+index 0000000..de229be
+--- /dev/null
++++ b/docs/markdown/snippets/multiple-cross-files.md
+@@ -0,0 +1,3 @@
++## Multipe cross files can be specified
++
++`--cross-file` can be passed multiple times, with the configuration files overlaying the same way as `--native-file`.
+diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
+index 4d35d22..5b270d3 100644
+--- a/mesonbuild/backend/backends.py
++++ b/mesonbuild/backend/backends.py
+@@ -788,8 +788,7 @@ class Backend:
+ deps = [os.path.join(self.build_to_src, df)
+ for df in self.interpreter.get_build_def_files()]
+ if self.environment.is_cross_build():
+- deps.append(os.path.join(self.build_to_src,
+- self.environment.coredata.cross_file))
++ deps.extend(self.environment.coredata.cross_files)
+ deps.append('meson-private/coredata.dat')
+ if os.path.exists(os.path.join(self.environment.get_source_dir(), 'meson_options.txt')):
+ deps.append(os.path.join(self.build_to_src, 'meson_options.txt'))
+diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py
+index 066ad30..d80e9a0 100644
+--- a/mesonbuild/coredata.py
++++ b/mesonbuild/coredata.py
+@@ -265,7 +265,7 @@ class CoreData:
+ self.compiler_options = PerMachine({}, {}, {})
+ self.base_options = {}
+ self.external_preprocess_args = PerMachine({}, {}, {}) # CPPFLAGS only
+- self.cross_file = self.__load_cross_file(options.cross_file)
++ self.cross_files = self.__load_config_files(options.cross_file)
+ self.compilers = OrderedDict()
+ self.cross_compilers = OrderedDict()
+ self.deps = OrderedDict()
+@@ -276,57 +276,19 @@ class CoreData:
+
+ @staticmethod
+ def __load_config_files(filenames):
++ # Need to try and make the passed filenames absolute because when the
++ # files are parsed later we'll have chdir()d.
+ if not filenames:
+ return []
+ filenames = [os.path.abspath(os.path.expanduser(os.path.expanduser(f)))
+ for f in filenames]
+ return filenames
+
+- @staticmethod
+- def __load_cross_file(filename):
+- """Try to load the cross file.
+-
+- If the filename is None return None. If the filename is an absolute
+- (after resolving variables and ~), return that absolute path. Next,
+- check if the file is relative to the current source dir. If the path
+- still isn't resolved do the following:
+- Windows:
+- - Error
+- *:
+- - $XDG_DATA_HOME/meson/cross (or ~/.local/share/meson/cross if
+- undefined)
+- - $XDG_DATA_DIRS/meson/cross (or
+- /usr/local/share/meson/cross:/usr/share/meson/cross if undefined)
+- - Error
+-
+- Non-Windows follows the Linux path and will honor XDG_* if set. This
+- simplifies the implementation somewhat.
+- """
+- if filename is None:
+- return None
+- filename = os.path.expanduser(os.path.expandvars(filename))
+- if os.path.isabs(filename):
+- return filename
+- path_to_try = os.path.abspath(filename)
+- if os.path.isfile(path_to_try):
+- return path_to_try
+- if sys.platform != 'win32':
+- paths = [
+- os.environ.get('XDG_DATA_HOME', os.path.expanduser('~/.local/share')),
+- ] + os.environ.get('XDG_DATA_DIRS', '/usr/local/share:/usr/share').split(':')
+- for path in paths:
+- path_to_try = os.path.join(path, 'meson', 'cross', filename)
+- if os.path.isfile(path_to_try):
+- return path_to_try
+- raise MesonException('Cannot find specified cross file: ' + filename)
+-
+- raise MesonException('Cannot find specified cross file: ' + filename)
+-
+ def libdir_cross_fixup(self):
+ # By default set libdir to "lib" when cross compiling since
+ # getting the "system default" is always wrong on multiarch
+ # platforms as it gets a value like lib/x86_64-linux-gnu.
+- if self.cross_file is not None:
++ if self.cross_files:
+ self.builtins['libdir'].value = 'lib'
+
+ def sanitize_prefix(self, prefix):
+@@ -642,8 +604,8 @@ def read_cmd_line_file(build_dir, options):
+ options.cmd_line_options = d
+
+ properties = config['properties']
+- if options.cross_file is None:
+- options.cross_file = properties.get('cross_file', None)
++ if not options.cross_file:
++ options.cross_file = ast.literal_eval(properties.get('cross_file', '[]'))
+ if not options.native_file:
+ # This will be a string in the form: "['first', 'second', ...]", use
+ # literal_eval to get it into the list of strings.
+@@ -654,7 +616,7 @@ def write_cmd_line_file(build_dir, options):
+ config = CmdLineFileParser()
+
+ properties = {}
+- if options.cross_file is not None:
++ if options.cross_file:
+ properties['cross_file'] = options.cross_file
+ if options.native_file:
+ properties['native_file'] = options.native_file
+diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
+index c25ef33..4c1c5ac 100644
+--- a/mesonbuild/environment.py
++++ b/mesonbuild/environment.py
+@@ -394,8 +394,9 @@ class Environment:
+ self.binaries.build = BinaryTable(config.get('binaries', {}))
+ self.paths.build = Directories(**config.get('paths', {}))
+
+- if self.coredata.cross_file is not None:
+- config = MesonConfigFile.parse_datafile(self.coredata.cross_file)
++ if self.coredata.cross_files:
++ config = MesonConfigFile.from_config_parser(
++ coredata.load_configs(self.coredata.cross_files, 'cross'))
+ self.properties.host = Properties(config.get('properties', {}), False)
+ self.binaries.host = BinaryTable(config.get('binaries', {}), False)
+ if 'host_machine' in config:
+diff --git a/mesonbuild/msetup.py b/mesonbuild/msetup.py
+index 023afdb..6e8ca83 100644
+--- a/mesonbuild/msetup.py
++++ b/mesonbuild/msetup.py
+@@ -29,7 +29,9 @@ from .mesonlib import MesonException
+
+ def add_arguments(parser):
+ coredata.register_builtin_arguments(parser)
+- parser.add_argument('--cross-file', default=None,
++ parser.add_argument('--cross-file',
++ default=[],
++ action='append',
+ help='File describing cross compilation environment.')
+ parser.add_argument('--native-file',
+ default=[],
+diff --git a/mesonbuild/munstable_coredata.py b/mesonbuild/munstable_coredata.py
+index 78f3f34..913f942 100644
+--- a/mesonbuild/munstable_coredata.py
++++ b/mesonbuild/munstable_coredata.py
+@@ -81,8 +81,9 @@ def run(options):
+ print('Last seen PKGCONFIG enviroment variable value: ' + v)
+ elif k == 'version':
+ print('Meson version: ' + v)
+- elif k == 'cross_file':
+- print('Cross File: ' + (v or 'None'))
++ elif k == 'cross_files':
++ if v:
++ print('Cross File: ' + ' '.join(v))
+ elif k == 'config_files':
+ if v:
+ print('Native File: ' + ' '.join(v))