diff options
author | Dylan Baker <dylan@pnwbakers.com> | 2019-01-07 13:47:27 -0800 |
---|---|---|
committer | Dylan Baker <dylan@pnwbakers.com> | 2019-02-11 12:50:32 -0800 |
commit | 5b896ed70bbf18e633bbeca442c90610e3d66a22 (patch) | |
tree | 1205d983b474f4e97eb596769f410cc6ffc399d6 /mesonbuild | |
parent | b50899419cb2de27af34e5a955695a61c2863c51 (diff) | |
download | meson-5b896ed70bbf18e633bbeca442c90610e3d66a22.zip meson-5b896ed70bbf18e633bbeca442c90610e3d66a22.tar.gz meson-5b896ed70bbf18e633bbeca442c90610e3d66a22.tar.bz2 |
allow setting directory locations in a native file
This allows the person running configure (either a developer, user, or
distro maintainer) to keep a configuration of where various kinds of
files should end up.
Diffstat (limited to 'mesonbuild')
-rw-r--r-- | mesonbuild/ast/introspection.py | 2 | ||||
-rw-r--r-- | mesonbuild/coredata.py | 12 | ||||
-rw-r--r-- | mesonbuild/environment.py | 30 | ||||
-rw-r--r-- | mesonbuild/interpreter.py | 4 | ||||
-rw-r--r-- | mesonbuild/mconf.py | 3 |
5 files changed, 31 insertions, 20 deletions
diff --git a/mesonbuild/ast/introspection.py b/mesonbuild/ast/introspection.py index 5d0ec5a..4a03e98 100644 --- a/mesonbuild/ast/introspection.py +++ b/mesonbuild/ast/introspection.py @@ -86,7 +86,7 @@ class IntrospectionInterpreter(AstInterpreter): self.project_default_options = mesonlib.stringlistify(def_opts) self.project_default_options = cdata.create_options_dict(self.project_default_options) self.default_options.update(self.project_default_options) - self.coredata.set_default_options(self.default_options, self.subproject, self.environment.cmd_line_options) + self.coredata.set_default_options(self.default_options, self.subproject, self.environment) if not self.is_subproject() and 'subproject_dir' in kwargs: spdirname = kwargs['subproject_dir'] diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py index 3ce272e..139dd6e 100644 --- a/mesonbuild/coredata.py +++ b/mesonbuild/coredata.py @@ -525,7 +525,13 @@ class CoreData: sub = 'In subproject {}: '.format(subproject) if subproject else '' mlog.warning('{}Unknown options: "{}"'.format(sub, unknown_options)) - def set_default_options(self, default_options, subproject, cmd_line_options): + def set_default_options(self, default_options, subproject, env): + # Set defaults first from conf files (cross or native), then + # override them as nec as necessary. + for k, v in env.paths.host: + if v is not None: + env.cmd_line_options.setdefault(k, v) + # Set default options as if they were passed to the command line. # Subprojects can only define default for user options. from . import optinterpreter @@ -534,7 +540,7 @@ class CoreData: if optinterpreter.is_invalid_name(k): continue k = subproject + ':' + k - cmd_line_options.setdefault(k, v) + env.cmd_line_options.setdefault(k, v) # Create a subset of cmd_line_options, keeping only options for this # subproject. Also take builtin options if it's the main project. @@ -542,7 +548,7 @@ class CoreData: # languages and setting the backend (builtin options must be set first # to know which backend we'll use). options = {} - for k, v in cmd_line_options.items(): + for k, v in env.cmd_line_options.items(): if subproject: if not k.startswith(subproject + ':'): continue diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py index 8ad65d7..afa6cd8 100644 --- a/mesonbuild/environment.py +++ b/mesonbuild/environment.py @@ -372,6 +372,7 @@ class Environment: # Similar to coredata.compilers and build.compilers, but lower level in # that there is no meta data, only names/paths. self.binaries = PerMachineDefaultable() + # Just uses hard-coded defaults and environment variables. Might be # overwritten by a native file. self.binaries.build = BinaryTable({}) @@ -379,10 +380,16 @@ class Environment: # Misc other properties about each machine. self.properties = PerMachine(Properties(), Properties(), Properties()) + # Store paths for native and cross build files. There is no target + # machine information here because nothing is installed for the target + # architecture, just the build and host architectures + self.paths = PerMachineDefaultable() + if self.coredata.config_files is not None: config = MesonConfigFile.from_config_parser( coredata.load_configs(self.coredata.config_files)) 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) @@ -395,6 +402,7 @@ class Environment: self.machines.default_missing() self.binaries.default_missing() + self.paths.default_missing() exe_wrapper = self.binaries.host.lookup_entry('exe_wrapper') if exe_wrapper is not None: @@ -1173,46 +1181,46 @@ class Environment: def get_exe_suffix(self): return self.exe_suffix - def get_import_lib_dir(self): + def get_import_lib_dir(self) -> str: "Install dir for the import library (library used for linking)" return self.get_libdir() - def get_shared_module_dir(self): + def get_shared_module_dir(self) -> str: "Install dir for shared modules that are loaded at runtime" return self.get_libdir() - def get_shared_lib_dir(self): + def get_shared_lib_dir(self) -> str: "Install dir for the shared library" if self.win_libdir_layout: return self.get_bindir() return self.get_libdir() - def get_static_lib_dir(self): + def get_static_lib_dir(self) -> str: "Install dir for the static library" return self.get_libdir() def get_object_suffix(self): return self.object_suffix - def get_prefix(self): + def get_prefix(self) -> str: return self.coredata.get_builtin_option('prefix') - def get_libdir(self): + def get_libdir(self) -> str: return self.coredata.get_builtin_option('libdir') - def get_libexecdir(self): + def get_libexecdir(self) -> str: return self.coredata.get_builtin_option('libexecdir') - def get_bindir(self): + def get_bindir(self) -> str: return self.coredata.get_builtin_option('bindir') - def get_includedir(self): + def get_includedir(self) -> str: return self.coredata.get_builtin_option('includedir') - def get_mandir(self): + def get_mandir(self) -> str: return self.coredata.get_builtin_option('mandir') - def get_datadir(self): + def get_datadir(self) -> str: return self.coredata.get_builtin_option('datadir') def get_compiler_system_dirs(self): diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index 2eb0720..c03bae1 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -2458,8 +2458,6 @@ external dependencies (including libraries) must go to "dependencies".''') return self.subprojects[dirname] def get_option_internal(self, optname): - # Some base options are not defined in some environments, return the - # default value from compilers.base_options in that case. for d in chain( [self.coredata.base_options, compilers.base_options, self.coredata.builtins], self.coredata.get_all_compiler_options()): @@ -2576,7 +2574,7 @@ external dependencies (including libraries) must go to "dependencies".''') default_options.update(self.default_project_options) else: default_options = {} - self.coredata.set_default_options(default_options, self.subproject, self.environment.cmd_line_options) + self.coredata.set_default_options(default_options, self.subproject, self.environment) self.set_backend() if not self.is_subproject(): diff --git a/mesonbuild/mconf.py b/mesonbuild/mconf.py index 48f88e8..a3feebe 100644 --- a/mesonbuild/mconf.py +++ b/mesonbuild/mconf.py @@ -102,8 +102,7 @@ class Conf: if not options: print(' No {}\n'.format(title.lower())) arr = [] - for k in sorted(options): - o = options[k] + for k, o in sorted(options.items()): d = o.description v = o.printable_value() c = o.choices |