aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-12-26 13:22:03 +0200
committerGitHub <noreply@github.com>2017-12-26 13:22:03 +0200
commit1806aac37669fe5b4a50175b7b8298f119248be3 (patch)
treef90f7e219fd6cc17f6db45093ae8b0f58f851bec
parentd55e98ef50782ff011f2e44d7c13886a3f6b6d05 (diff)
parent861cbc2e730805ebdea17647f78503a74bd55a34 (diff)
downloadmeson-1806aac37669fe5b4a50175b7b8298f119248be3.zip
meson-1806aac37669fe5b4a50175b7b8298f119248be3.tar.gz
meson-1806aac37669fe5b4a50175b7b8298f119248be3.tar.bz2
Merge pull request #2817 from jon-turney/master
Update prefix-dependent defaults when project(default_options:) changes prefix
-rw-r--r--mesonbuild/interpreter.py11
-rwxr-xr-xrun_unittests.py39
-rw-r--r--test cases/common/173 default options prefix dependent defaults/meson.build1
3 files changed, 50 insertions, 1 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index f079079..7e29b7c 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1813,9 +1813,18 @@ to directly access options of other subprojects.''')
if coredata.is_builtin_option(key):
if self.subproject != '':
continue # Only the master project is allowed to set global options.
+ # If this was set on the command line, do not override.
if not self.environment.had_argument_for(key):
self.coredata.set_builtin_option(key, value)
- # If this was set on the command line, do not override.
+ # If we are setting the prefix, then other options which
+ # have prefix-dependent defaults need their value updating,
+ # if they haven't been explicitly set (i.e. have their
+ # default value)
+ if key == 'prefix':
+ for option in coredata.builtin_dir_noprefix_options:
+ if not (self.environment.had_argument_for(option) or
+ any([k.startswith(option + '=') for k in default_options])):
+ self.coredata.set_builtin_option(option, coredata.get_builtin_option_default(option, value))
else:
# Option values set with subproject() default_options override those
# set in project() default_options.
diff --git a/run_unittests.py b/run_unittests.py
index 17badae..1387130 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -789,6 +789,45 @@ class AllPlatformTests(BasePlatformTests):
self.assertEqual(value, expected[prefix][name])
self.wipe()
+ def test_default_options_prefix_dependent_defaults(self):
+ '''
+ Tests that setting a prefix in default_options in project() sets prefix
+ dependent defaults for other options, and that those defaults can
+ be overridden in default_options or by the command line.
+ '''
+ testdir = os.path.join(self.common_test_dir, '173 default options prefix dependent defaults')
+ expected = {
+ '':
+ {'prefix': '/usr',
+ 'sysconfdir': '/etc',
+ 'localstatedir': '/var',
+ 'sharedstatedir': '/sharedstate'},
+ '--prefix=/usr':
+ {'prefix': '/usr',
+ 'sysconfdir': '/etc',
+ 'localstatedir': '/var',
+ 'sharedstatedir': '/sharedstate'},
+ '--sharedstatedir=/var/state':
+ {'prefix': '/usr',
+ 'sysconfdir': '/etc',
+ 'localstatedir': '/var',
+ 'sharedstatedir': '/var/state'},
+ '--sharedstatedir=/var/state --prefix=/usr --sysconfdir=sysconf':
+ {'prefix': '/usr',
+ 'sysconfdir': 'sysconf',
+ 'localstatedir': '/var',
+ 'sharedstatedir': '/var/state'},
+ }
+ for args in expected:
+ self.init(testdir, args.split(), default_args=False)
+ opts = self.introspect('--buildoptions')
+ for opt in opts:
+ name = opt['name']
+ value = opt['value']
+ if name in expected[args]:
+ self.assertEqual(value, expected[args][name])
+ self.wipe()
+
def test_static_library_overwrite(self):
'''
Tests that static libraries are never appended to, always overwritten.
diff --git a/test cases/common/173 default options prefix dependent defaults/meson.build b/test cases/common/173 default options prefix dependent defaults/meson.build
new file mode 100644
index 0000000..9ca4ec5
--- /dev/null
+++ b/test cases/common/173 default options prefix dependent defaults/meson.build
@@ -0,0 +1 @@
+project('default options prefix dependent defaults ', 'c', default_options : ['sharedstatedir=/sharedstate', 'prefix=/usr'])