summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2018-09-18 08:15:52 +0000
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2018-09-18 08:15:52 +0000
commitc8c51231481d2c881e5cffc2b400a95bb43184fa (patch)
tree4e063158f2c01331dfccb279d131e7a53c5907f3
parent045797661e914f66d72cdd3c4186d255f001d6dd (diff)
parent758dbece739606669fb5e1beb45a3e9c0ef7f10c (diff)
downloadbuildstream-c8c51231481d2c881e5cffc2b400a95bb43184fa.tar.gz
Merge branch 'tristan/fix-override-options-1.2' into 'bst-1.2'
Fix override options 1.2 See merge request BuildStream/buildstream!803
-rw-r--r--buildstream/_project.py3
-rw-r--r--tests/format/option-overrides/element.bst1
-rw-r--r--tests/format/option-overrides/project.conf19
-rw-r--r--tests/format/optionoverrides.py29
4 files changed, 52 insertions, 0 deletions
diff --git a/buildstream/_project.py b/buildstream/_project.py
index d5504e201..4a3c075e0 100644
--- a/buildstream/_project.py
+++ b/buildstream/_project.py
@@ -572,7 +572,10 @@ class Project():
# any conditionals specified for project option declarations,
# or conditionally specifying the project name; will be ignored.
#
+ # Don't forget to also resolve options in the element and source overrides.
output.options.process_node(config)
+ output.options.process_node(output.element_overrides)
+ output.options.process_node(output.source_overrides)
# Load base variables
output.base_variables = _yaml.node_get(config, Mapping, 'variables')
diff --git a/tests/format/option-overrides/element.bst b/tests/format/option-overrides/element.bst
new file mode 100644
index 000000000..3c29b4ea1
--- /dev/null
+++ b/tests/format/option-overrides/element.bst
@@ -0,0 +1 @@
+kind: autotools
diff --git a/tests/format/option-overrides/project.conf b/tests/format/option-overrides/project.conf
new file mode 100644
index 000000000..c8058f076
--- /dev/null
+++ b/tests/format/option-overrides/project.conf
@@ -0,0 +1,19 @@
+# Test case ensuring that we can use options
+# in the element overrides.
+#
+name: test
+
+options:
+ arch:
+ type: arch
+ description: architecture
+ values: [i686, x86_64]
+
+elements:
+ autotools:
+ variables:
+ (?):
+ - arch == 'i686':
+ conf-global: --host=i686-unknown-linux-gnu
+ - arch == 'x86_64':
+ conf-global: --host=x86_64-unknown-linux-gnu
diff --git a/tests/format/optionoverrides.py b/tests/format/optionoverrides.py
new file mode 100644
index 000000000..e5c37b3a5
--- /dev/null
+++ b/tests/format/optionoverrides.py
@@ -0,0 +1,29 @@
+import os
+import pytest
+from buildstream import _yaml
+from tests.testutils.runcli import cli
+
+# Project directory
+DATA_DIR = os.path.dirname(os.path.realpath(__file__))
+
+
+@pytest.mark.datafiles(DATA_DIR)
+@pytest.mark.parametrize("arch", [('i686'), ('x86_64')])
+def test_override(cli, datafiles, arch):
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'option-overrides')
+
+ bst_args = ['--option', 'arch', arch]
+ bst_args += [
+ 'show',
+ '--deps', 'none',
+ '--format', '%{vars}',
+ 'element.bst'
+ ]
+ result = cli.run(project=project, silent=True, args=bst_args)
+ result.assert_success()
+
+ # See the associated project.conf for the expected values
+ expected_value = '--host={}-unknown-linux-gnu'.format(arch)
+
+ loaded = _yaml.load_data(result.output)
+ assert loaded['conf-global'] == expected_value