aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/coredata.py
diff options
context:
space:
mode:
authorRoss Burton <ross.burton@intel.com>2019-03-18 17:27:57 +0000
committerRoss Burton <ross.burton@intel.com>2019-03-20 10:06:17 +0000
commit65e59c84a198062f21ab68fdae41b3e5de8d8480 (patch)
treee0a081529b3ff4764f4f62a4ebc34722615971ee /mesonbuild/coredata.py
parentd57dd1092e84e08ee15d7063b6c56bd6d864f2e1 (diff)
downloadmeson-65e59c84a198062f21ab68fdae41b3e5de8d8480.zip
meson-65e59c84a198062f21ab68fdae41b3e5de8d8480.tar.gz
meson-65e59c84a198062f21ab68fdae41b3e5de8d8480.tar.bz2
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.
Diffstat (limited to 'mesonbuild/coredata.py')
-rw-r--r--mesonbuild/coredata.py52
1 files changed, 7 insertions, 45 deletions
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py
index 6e60917..cb50961 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