Raoul Hidalgo Charman pushed to branch raoul/775-execution-environment-reqs at BuildStream / buildstream
Commits:
-
2818fe1d
by Raoul Hidalgo Charman at 2018-11-26T13:48:05Z
-
daae7eff
by Raoul Hidalgo Charman at 2018-11-26T13:48:18Z
-
5d2b1519
by Raoul Hidalgo Charman at 2018-11-26T13:48:19Z
-
c03c1362
by Raoul Hidalgo Charman at 2018-11-26T13:48:20Z
24 changed files:
- buildstream/_options/optionarch.py
- + buildstream/_options/optionos.py
- buildstream/_options/optionpool.py
- buildstream/sandbox/_sandboxremote.py
- doc/examples/flatpak-autotools/elements/base/sdk.bst
- doc/examples/flatpak-autotools/project.conf
- tests/cachekey/cachekey.py
- tests/examples/autotools.py
- tests/examples/developing.py
- tests/examples/flatpak-autotools.py
- tests/examples/integration-commands.py
- tests/examples/junctions.py
- tests/examples/running-commands.py
- tests/format/list-directive-type-error/project.conf
- tests/format/option-arch/element.bst
- tests/format/option-arch/project.conf
- + tests/format/option-os/element.bst
- + tests/format/option-os/project.conf
- tests/format/optionarch.py
- + tests/format/optionos.py
- tests/integration/base/generate-base.sh
- tests/integration/project/elements/base/base-alpine.bst
- tests/integration/project/project.conf
- tests/testutils/site.py
Changes:
| ... | ... | @@ -17,7 +17,7 @@ |
| 17 | 17 |
# Authors:
|
| 18 | 18 |
# Tristan Van Berkom <tristan vanberkom codethink co uk>
|
| 19 | 19 |
|
| 20 |
-import os
|
|
| 20 |
+from .._platform import Platform
|
|
| 21 | 21 |
from .optionenum import OptionEnum
|
| 22 | 22 |
|
| 23 | 23 |
|
| ... | ... | @@ -41,8 +41,7 @@ class OptionArch(OptionEnum): |
| 41 | 41 |
super(OptionArch, self).load(node, allow_default_definition=False)
|
| 42 | 42 |
|
| 43 | 43 |
def load_default_value(self, node):
|
| 44 |
- _, _, _, _, machine_arch = os.uname()
|
|
| 45 |
- return machine_arch
|
|
| 44 |
+ return Platform.get_host_arch()
|
|
| 46 | 45 |
|
| 47 | 46 |
def resolve(self):
|
| 48 | 47 |
|
| 1 |
+ |
|
| 2 |
+#
|
|
| 3 |
+# Copyright (C) 2017 Codethink Limited
|
|
| 4 |
+#
|
|
| 5 |
+# This program is free software; you can redistribute it and/or
|
|
| 6 |
+# modify it under the terms of the GNU Lesser General Public
|
|
| 7 |
+# License as published by the Free Software Foundation; either
|
|
| 8 |
+# version 2 of the License, or (at your option) any later version.
|
|
| 9 |
+#
|
|
| 10 |
+# This library is distributed in the hope that it will be useful,
|
|
| 11 |
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
| 12 |
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
| 13 |
+# Lesser General Public License for more details.
|
|
| 14 |
+#
|
|
| 15 |
+# You should have received a copy of the GNU Lesser General Public
|
|
| 16 |
+# License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
| 17 |
+#
|
|
| 18 |
+# Authors:
|
|
| 19 |
+# Raoul Hidalgo Charman <raoul hidalgocharman codethink co uk>
|
|
| 20 |
+ |
|
| 21 |
+import os
|
|
| 22 |
+from .optionenum import OptionEnum
|
|
| 23 |
+ |
|
| 24 |
+ |
|
| 25 |
+# OptionOS
|
|
| 26 |
+#
|
|
| 27 |
+class OptionOS(OptionEnum):
|
|
| 28 |
+ |
|
| 29 |
+ OPTION_TYPE = 'os'
|
|
| 30 |
+ |
|
| 31 |
+ def load(self, node):
|
|
| 32 |
+ super(OptionOS, self).load(node, allow_default_definition=False)
|
|
| 33 |
+ |
|
| 34 |
+ def load_default_value(self, node):
|
|
| 35 |
+ return os.uname()[0]
|
|
| 36 |
+ |
|
| 37 |
+ def resolve(self):
|
|
| 38 |
+ |
|
| 39 |
+ # Validate that the default OS reported by uname() is explicitly
|
|
| 40 |
+ # supported by the project, if not overridden by user config or cli.
|
|
| 41 |
+ self.validate(self.value)
|
| ... | ... | @@ -28,6 +28,7 @@ from .optionenum import OptionEnum |
| 28 | 28 |
from .optionflags import OptionFlags
|
| 29 | 29 |
from .optioneltmask import OptionEltMask
|
| 30 | 30 |
from .optionarch import OptionArch
|
| 31 |
+from .optionos import OptionOS
|
|
| 31 | 32 |
|
| 32 | 33 |
|
| 33 | 34 |
_OPTION_TYPES = {
|
| ... | ... | @@ -36,6 +37,7 @@ _OPTION_TYPES = { |
| 36 | 37 |
OptionFlags.OPTION_TYPE: OptionFlags,
|
| 37 | 38 |
OptionEltMask.OPTION_TYPE: OptionEltMask,
|
| 38 | 39 |
OptionArch.OPTION_TYPE: OptionArch,
|
| 40 |
+ OptionOS.OPTION_TYPE: OptionOS,
|
|
| 39 | 41 |
}
|
| 40 | 42 |
|
| 41 | 43 |
|
| ... | ... | @@ -65,13 +65,20 @@ class SandboxRemote(Sandbox): |
| 65 | 65 |
EnvironmentVariable(name=k, value=v)
|
| 66 | 66 |
for (k, v) in environment.items()]
|
| 67 | 67 |
|
| 68 |
+ config = self._get_config()
|
|
| 69 |
+ platform = remote_execution_pb2.Platform()
|
|
| 70 |
+ platform.properties.extend([remote_execution_pb2.Platform.
|
|
| 71 |
+ Property(name="os", value=config.build_os),
|
|
| 72 |
+ remote_execution_pb2.Platform.
|
|
| 73 |
+ Property(name="arch", value=config.build_arch)])
|
|
| 74 |
+ |
|
| 68 | 75 |
# Create and send the Command object.
|
| 69 | 76 |
remote_command = remote_execution_pb2.Command(arguments=command,
|
| 70 | 77 |
working_directory=working_directory,
|
| 71 | 78 |
environment_variables=environment_variables,
|
| 72 | 79 |
output_files=[],
|
| 73 | 80 |
output_directories=[self._output_directory],
|
| 74 |
- platform=None)
|
|
| 81 |
+ platform=platform)
|
|
| 75 | 82 |
context = self._get_context()
|
| 76 | 83 |
cascache = context.artifactcache
|
| 77 | 84 |
# Upload the Command message to the remote CAS server
|
| ... | ... | @@ -5,10 +5,10 @@ sources: |
| 5 | 5 |
url: gnomesdk:repo/
|
| 6 | 6 |
gpg-key: keys/gnome-sdk.gpg
|
| 7 | 7 |
(?):
|
| 8 |
- - arch == "x86_64":
|
|
| 8 |
+ - arch == "x86-64":
|
|
| 9 | 9 |
track: runtime/org.freedesktop.BaseSdk/x86_64/1.4
|
| 10 | 10 |
ref: 0d9d255d56b08aeaaffb1c820eef85266eb730cb5667e50681185ccf5cd7c882
|
| 11 |
- - arch == "i386":
|
|
| 11 |
+ - arch == "x86-32":
|
|
| 12 | 12 |
track: runtime/org.freedesktop.BaseSdk/i386/1.4
|
| 13 | 13 |
ref: 16036b747c1ec8e7fe291f5b1f667cb942f0267d08fcad962e9b7627d6cf1981
|
| 14 | 14 |
config:
|
| ... | ... | @@ -10,6 +10,6 @@ options: |
| 10 | 10 |
type: arch
|
| 11 | 11 |
description: The machine architecture
|
| 12 | 12 |
values:
|
| 13 |
- - x86_64
|
|
| 14 |
- - i386
|
|
| 13 |
+ - x86-64
|
|
| 14 |
+ - x86-32
|
|
| 15 | 15 |
|
| ... | ... | @@ -144,7 +144,7 @@ DATA_DIR = os.path.join( |
| 144 | 144 |
# The cache key test uses a project which exercises all plugins,
|
| 145 | 145 |
# so we cant run it at all if we dont have them installed.
|
| 146 | 146 |
#
|
| 147 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 147 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 148 | 148 |
reason='Cache keys depend on architecture')
|
| 149 | 149 |
@pytest.mark.skipif(not IS_LINUX, reason='Only available on linux')
|
| 150 | 150 |
@pytest.mark.skipif(HAVE_BZR is False, reason="bzr is not available")
|
| ... | ... | @@ -13,8 +13,8 @@ DATA_DIR = os.path.join( |
| 13 | 13 |
|
| 14 | 14 |
|
| 15 | 15 |
# Tests a build of the autotools amhello project on a alpine-linux base runtime
|
| 16 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 17 |
- reason='Examples are writtent for x86_64')
|
|
| 16 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 17 |
+ reason='Examples are writtent for x86-64')
|
|
| 18 | 18 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_BWRAP, reason='Only available on linux with bubblewrap')
|
| 19 | 19 |
@pytest.mark.datafiles(DATA_DIR)
|
| 20 | 20 |
def test_autotools_build(cli, tmpdir, datafiles):
|
| ... | ... | @@ -38,8 +38,8 @@ def test_autotools_build(cli, tmpdir, datafiles): |
| 38 | 38 |
|
| 39 | 39 |
|
| 40 | 40 |
# Test running an executable built with autotools.
|
| 41 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 42 |
- reason='Examples are writtent for x86_64')
|
|
| 41 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 42 |
+ reason='Examples are writtent for x86-64')
|
|
| 43 | 43 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_BWRAP, reason='Only available on linux with bubblewrap')
|
| 44 | 44 |
@pytest.mark.datafiles(DATA_DIR)
|
| 45 | 45 |
def test_autotools_run(cli, tmpdir, datafiles):
|
| ... | ... | @@ -14,8 +14,8 @@ DATA_DIR = os.path.join( |
| 14 | 14 |
|
| 15 | 15 |
|
| 16 | 16 |
# Test that the project builds successfully
|
| 17 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 18 |
- reason='Examples are writtent for x86_64')
|
|
| 17 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 18 |
+ reason='Examples are writtent for x86-64')
|
|
| 19 | 19 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_BWRAP, reason='Only available on linux with bubblewrap')
|
| 20 | 20 |
@pytest.mark.datafiles(DATA_DIR)
|
| 21 | 21 |
def test_autotools_build(cli, tmpdir, datafiles):
|
| ... | ... | @@ -37,8 +37,8 @@ def test_autotools_build(cli, tmpdir, datafiles): |
| 37 | 37 |
|
| 38 | 38 |
|
| 39 | 39 |
# Test the unmodified hello command works as expected.
|
| 40 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 41 |
- reason='Examples are writtent for x86_64')
|
|
| 40 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 41 |
+ reason='Examples are writtent for x86-64')
|
|
| 42 | 42 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_BWRAP, reason='Only available on linux with bubblewrap')
|
| 43 | 43 |
@pytest.mark.datafiles(DATA_DIR)
|
| 44 | 44 |
def test_run_unmodified_hello(cli, tmpdir, datafiles):
|
| ... | ... | @@ -70,8 +70,8 @@ def test_open_workspace(cli, tmpdir, datafiles): |
| 70 | 70 |
|
| 71 | 71 |
|
| 72 | 72 |
# Test making a change using the workspace
|
| 73 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 74 |
- reason='Examples are writtent for x86_64')
|
|
| 73 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 74 |
+ reason='Examples are writtent for x86-64')
|
|
| 75 | 75 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_BWRAP, reason='Only available on linux with bubblewrap')
|
| 76 | 76 |
@pytest.mark.datafiles(DATA_DIR)
|
| 77 | 77 |
def test_make_change_in_workspace(cli, tmpdir, datafiles):
|
| ... | ... | @@ -32,8 +32,8 @@ def workaround_setuptools_bug(project): |
| 32 | 32 |
|
| 33 | 33 |
# Test that a build upon flatpak runtime 'works' - we use the autotools sample
|
| 34 | 34 |
# amhello project for this.
|
| 35 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 36 |
- reason='Examples are writtent for x86_64')
|
|
| 35 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 36 |
+ reason='Examples are writtent for x86-64')
|
|
| 37 | 37 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_OSTREE, reason='Only available on linux with ostree')
|
| 38 | 38 |
@pytest.mark.datafiles(DATA_DIR)
|
| 39 | 39 |
def test_autotools_build(cli, tmpdir, datafiles):
|
| ... | ... | @@ -57,8 +57,8 @@ def test_autotools_build(cli, tmpdir, datafiles): |
| 57 | 57 |
|
| 58 | 58 |
|
| 59 | 59 |
# Test running an executable built with autotools
|
| 60 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 61 |
- reason='Examples are writtent for x86_64')
|
|
| 60 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 61 |
+ reason='Examples are writtent for x86-64')
|
|
| 62 | 62 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_OSTREE, reason='Only available on linux with ostree')
|
| 63 | 63 |
@pytest.mark.datafiles(DATA_DIR)
|
| 64 | 64 |
def test_autotools_run(cli, tmpdir, datafiles):
|
| ... | ... | @@ -12,8 +12,8 @@ DATA_DIR = os.path.join( |
| 12 | 12 |
)
|
| 13 | 13 |
|
| 14 | 14 |
|
| 15 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 16 |
- reason='Examples are writtent for x86_64')
|
|
| 15 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 16 |
+ reason='Examples are writtent for x86-64')
|
|
| 17 | 17 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_BWRAP, reason='Only available on linux with bubblewrap')
|
| 18 | 18 |
@pytest.mark.datafiles(DATA_DIR)
|
| 19 | 19 |
def test_integration_commands_build(cli, tmpdir, datafiles):
|
| ... | ... | @@ -25,8 +25,8 @@ def test_integration_commands_build(cli, tmpdir, datafiles): |
| 25 | 25 |
|
| 26 | 26 |
|
| 27 | 27 |
# Test running the executable
|
| 28 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 29 |
- reason='Examples are writtent for x86_64')
|
|
| 28 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 29 |
+ reason='Examples are writtent for x86-64')
|
|
| 30 | 30 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_BWRAP, reason='Only available on linux with bubblewrap')
|
| 31 | 31 |
@pytest.mark.datafiles(DATA_DIR)
|
| 32 | 32 |
def test_integration_commands_run(cli, tmpdir, datafiles):
|
| ... | ... | @@ -13,8 +13,8 @@ DATA_DIR = os.path.join( |
| 13 | 13 |
|
| 14 | 14 |
|
| 15 | 15 |
# Test that the project builds successfully
|
| 16 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 17 |
- reason='Examples are writtent for x86_64')
|
|
| 16 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 17 |
+ reason='Examples are writtent for x86-64')
|
|
| 18 | 18 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_BWRAP, reason='Only available on linux with bubblewrap')
|
| 19 | 19 |
@pytest.mark.datafiles(DATA_DIR)
|
| 20 | 20 |
def test_build(cli, tmpdir, datafiles):
|
| ... | ... | @@ -25,8 +25,8 @@ def test_build(cli, tmpdir, datafiles): |
| 25 | 25 |
|
| 26 | 26 |
|
| 27 | 27 |
# Test the callHello script works as expected.
|
| 28 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 29 |
- reason='Examples are writtent for x86_64')
|
|
| 28 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 29 |
+ reason='Examples are writtent for x86-64')
|
|
| 30 | 30 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_BWRAP, reason='Only available on linux with bubblewrap')
|
| 31 | 31 |
@pytest.mark.datafiles(DATA_DIR)
|
| 32 | 32 |
def test_shell_call_hello(cli, tmpdir, datafiles):
|
| ... | ... | @@ -12,8 +12,8 @@ DATA_DIR = os.path.join( |
| 12 | 12 |
)
|
| 13 | 13 |
|
| 14 | 14 |
|
| 15 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 16 |
- reason='Examples are writtent for x86_64')
|
|
| 15 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 16 |
+ reason='Examples are writtent for x86-64')
|
|
| 17 | 17 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_BWRAP, reason='Only available on linux with bubblewrap')
|
| 18 | 18 |
@pytest.mark.datafiles(DATA_DIR)
|
| 19 | 19 |
def test_running_commands_build(cli, tmpdir, datafiles):
|
| ... | ... | @@ -25,8 +25,8 @@ def test_running_commands_build(cli, tmpdir, datafiles): |
| 25 | 25 |
|
| 26 | 26 |
|
| 27 | 27 |
# Test running the executable
|
| 28 |
-@pytest.mark.skipif(MACHINE_ARCH != 'x86_64',
|
|
| 29 |
- reason='Examples are writtent for x86_64')
|
|
| 28 |
+@pytest.mark.skipif(MACHINE_ARCH != 'x86-64',
|
|
| 29 |
+ reason='Examples are writtent for x86-64')
|
|
| 30 | 30 |
@pytest.mark.skipif(not IS_LINUX or not HAVE_BWRAP, reason='Only available on linux with bubblewrap')
|
| 31 | 31 |
@pytest.mark.datafiles(DATA_DIR)
|
| 32 | 32 |
def test_running_commands_run(cli, tmpdir, datafiles):
|
| ... | ... | @@ -4,4 +4,4 @@ options: |
| 4 | 4 |
arch:
|
| 5 | 5 |
type: arch
|
| 6 | 6 |
description: Example architecture option
|
| 7 |
- values: [ x86_32, x86_64, aarch64 ]
|
|
| 7 |
+ values: [ x86-32, x86-64, AArch64 ]
|
|
| \ No newline at end of file |
| ... | ... | @@ -2,7 +2,7 @@ kind: autotools |
| 2 | 2 |
variables:
|
| 3 | 3 |
result: "Nothing"
|
| 4 | 4 |
(?):
|
| 5 |
- - machine_arch == "arm":
|
|
| 5 |
+ - machine_arch == "AArch32":
|
|
| 6 | 6 |
result: "Army"
|
| 7 |
- - machine_arch == "aarch64":
|
|
| 7 |
+ - machine_arch == "AArch64":
|
|
| 8 | 8 |
result: "Aarchy"
|
| ... | ... | @@ -5,5 +5,5 @@ options: |
| 5 | 5 |
type: arch
|
| 6 | 6 |
description: The machine architecture
|
| 7 | 7 |
values:
|
| 8 |
- - arm
|
|
| 9 |
- - aarch64
|
|
| 8 |
+ - AArch32
|
|
| 9 |
+ - AArch64
|
| 1 |
+kind: autotools
|
|
| 2 |
+variables:
|
|
| 3 |
+ result: "Nothing"
|
|
| 4 |
+ (?):
|
|
| 5 |
+ - machine_os == "Linux":
|
|
| 6 |
+ result: "Linuxy"
|
|
| 7 |
+ - machine_os == "Darwin":
|
|
| 8 |
+ result: "Darwiny"
|
|
| 9 |
+ - machine_os == "SunOS":
|
|
| 10 |
+ result: "SunOSy"
|
|
| 11 |
+ - machine_os == "FreeBSD":
|
|
| 12 |
+ result: "FreeBSDy"
|
|
| \ No newline at end of file |
| 1 |
+name: test
|
|
| 2 |
+ |
|
| 3 |
+options:
|
|
| 4 |
+ machine_os:
|
|
| 5 |
+ type: os
|
|
| 6 |
+ description: The operating system
|
|
| 7 |
+ values:
|
|
| 8 |
+ - Linux
|
|
| 9 |
+ - Darwin
|
|
| 10 |
+ - FreeBSD
|
|
| 11 |
+ - SunOS
|
| ... | ... | @@ -29,8 +29,8 @@ def override_uname_arch(name): |
| 29 | 29 |
@pytest.mark.datafiles(DATA_DIR)
|
| 30 | 30 |
@pytest.mark.parametrize("uname,value,expected", [
|
| 31 | 31 |
# Test explicitly provided arches
|
| 32 |
- ('arm', 'arm', 'Army'),
|
|
| 33 |
- ('arm', 'aarch64', 'Aarchy'),
|
|
| 32 |
+ ('arm', 'AArch32', 'Army'),
|
|
| 33 |
+ ('arm', 'AArch64', 'Aarchy'),
|
|
| 34 | 34 |
|
| 35 | 35 |
# Test automatically derived arches
|
| 36 | 36 |
('arm', None, 'Army'),
|
| ... | ... | @@ -38,8 +38,8 @@ def override_uname_arch(name): |
| 38 | 38 |
|
| 39 | 39 |
# Test that explicitly provided arches dont error out
|
| 40 | 40 |
# when the `uname` reported arch is not supported
|
| 41 |
- ('i386', 'arm', 'Army'),
|
|
| 42 |
- ('x86_64', 'aarch64', 'Aarchy'),
|
|
| 41 |
+ ('i386', 'AArch32', 'Army'),
|
|
| 42 |
+ ('x86_64', 'AArch64', 'Aarchy'),
|
|
| 43 | 43 |
])
|
| 44 | 44 |
def test_conditional(cli, datafiles, uname, value, expected):
|
| 45 | 45 |
with override_uname_arch(uname):
|
| 1 |
+import os
|
|
| 2 |
+import pytest
|
|
| 3 |
+from contextlib import contextmanager
|
|
| 4 |
+ |
|
| 5 |
+from buildstream import _yaml
|
|
| 6 |
+from buildstream._exceptions import ErrorDomain, LoadErrorReason
|
|
| 7 |
+from tests.testutils.runcli import cli
|
|
| 8 |
+ |
|
| 9 |
+DATA_DIR = os.path.dirname(os.path.realpath(__file__))
|
|
| 10 |
+ |
|
| 11 |
+ |
|
| 12 |
+@contextmanager
|
|
| 13 |
+def override_uname_os(name):
|
|
| 14 |
+ orig_uname = os.uname
|
|
| 15 |
+ orig_tuple = tuple(os.uname())
|
|
| 16 |
+ override_result = (name, orig_tuple[1],
|
|
| 17 |
+ orig_tuple[2], orig_tuple[3],
|
|
| 18 |
+ orig_tuple[4])
|
|
| 19 |
+ |
|
| 20 |
+ def override():
|
|
| 21 |
+ return override_result
|
|
| 22 |
+ |
|
| 23 |
+ os.uname = override
|
|
| 24 |
+ yield
|
|
| 25 |
+ os.uname = orig_uname
|
|
| 26 |
+ |
|
| 27 |
+ |
|
| 28 |
+@pytest.mark.datafiles(DATA_DIR)
|
|
| 29 |
+@pytest.mark.parametrize("uname,value,expected", [
|
|
| 30 |
+ # Test explicitly provided arches
|
|
| 31 |
+ ('Darwin', 'Linux', 'Linuxy'),
|
|
| 32 |
+ ('SunOS', 'FreeBSD', 'FreeBSDy'),
|
|
| 33 |
+ |
|
| 34 |
+ # Test automatically derived arches
|
|
| 35 |
+ ('Linux', None, 'Linuxy'),
|
|
| 36 |
+ ('Darwin', None, 'Darwiny'),
|
|
| 37 |
+ |
|
| 38 |
+ # Test that explicitly provided arches dont error out
|
|
| 39 |
+ # when the `uname` reported arch is not supported
|
|
| 40 |
+ ('AIX', 'Linux', 'Linuxy'),
|
|
| 41 |
+ ('HaikuOS', 'SunOS', 'SunOSy'),
|
|
| 42 |
+])
|
|
| 43 |
+def test_conditionals(cli, datafiles, uname, value, expected):
|
|
| 44 |
+ with override_uname_os(uname):
|
|
| 45 |
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'option-os')
|
|
| 46 |
+ |
|
| 47 |
+ bst_args = []
|
|
| 48 |
+ if value is not None:
|
|
| 49 |
+ bst_args += ['--option', 'machine_os', value]
|
|
| 50 |
+ |
|
| 51 |
+ bst_args += [
|
|
| 52 |
+ 'show',
|
|
| 53 |
+ '--deps', 'none',
|
|
| 54 |
+ '--format', '%{vars}',
|
|
| 55 |
+ 'element.bst'
|
|
| 56 |
+ ]
|
|
| 57 |
+ result = cli.run(project=project, silent=True, args=bst_args)
|
|
| 58 |
+ result.assert_success()
|
|
| 59 |
+ |
|
| 60 |
+ loaded = _yaml.load_data(result.output)
|
|
| 61 |
+ assert loaded['result'] == expected
|
|
| 62 |
+ |
|
| 63 |
+ |
|
| 64 |
+@pytest.mark.datafiles(DATA_DIR)
|
|
| 65 |
+def test_unsupported_arch(cli, datafiles):
|
|
| 66 |
+ |
|
| 67 |
+ with override_uname_os("AIX"):
|
|
| 68 |
+ project = os.path.join(datafiles.dirname, datafiles.basename, 'option-os')
|
|
| 69 |
+ result = cli.run(project=project, silent=True, args=[
|
|
| 70 |
+ 'show',
|
|
| 71 |
+ '--deps', 'none',
|
|
| 72 |
+ '--format', '%{vars}',
|
|
| 73 |
+ 'element.bst'
|
|
| 74 |
+ ])
|
|
| 75 |
+ |
|
| 76 |
+ result.assert_main_error(ErrorDomain.LOAD, LoadErrorReason.INVALID_DATA)
|
| ... | ... | @@ -9,7 +9,7 @@ |
| 9 | 9 |
|
| 10 | 10 |
set -eux
|
| 11 | 11 |
|
| 12 |
-ALPINE_ARCH=${ARCH:-x86_64}
|
|
| 12 |
+ALPINE_ARCH=${ARCH:-x86-64}
|
|
| 13 | 13 |
ALPINE_BASE=http://dl-cdn.alpinelinux.org/alpine/v3.7/releases/${ALPINE_ARCH}/alpine-minirootfs-3.7.0-${ALPINE_ARCH}.tar.gz
|
| 14 | 14 |
|
| 15 | 15 |
mkdir root
|
| ... | ... | @@ -9,9 +9,9 @@ sources: |
| 9 | 9 |
- kind: tar
|
| 10 | 10 |
base-dir: ''
|
| 11 | 11 |
(?):
|
| 12 |
- - arch == "x86_64":
|
|
| 12 |
+ - arch == "x86-64":
|
|
| 13 | 13 |
ref: 3eb559250ba82b64a68d86d0636a6b127aa5f6d25d3601a79f79214dc9703639
|
| 14 | 14 |
url: "alpine:integration-tests-base.v1.x86_64.tar.xz"
|
| 15 |
- - arch == "aarch64":
|
|
| 15 |
+ - arch == "AArch64":
|
|
| 16 | 16 |
ref: 431fb5362032ede6f172e70a3258354a8fd71fcbdeb1edebc0e20968c792329a
|
| 17 | 17 |
url: "alpine:integration-tests-base.v1.aarch64.tar.xz"
|
| ... | ... | @@ -13,8 +13,8 @@ options: |
| 13 | 13 |
type: arch
|
| 14 | 14 |
description: Current architecture
|
| 15 | 15 |
values:
|
| 16 |
- - x86_64
|
|
| 17 |
- - aarch64
|
|
| 16 |
+ - x86-64
|
|
| 17 |
+ - AArch64
|
|
| 18 | 18 |
split-rules:
|
| 19 | 19 |
test:
|
| 20 | 20 |
- |
|
| ... | ... | @@ -5,6 +5,7 @@ import os |
| 5 | 5 |
import sys
|
| 6 | 6 |
|
| 7 | 7 |
from buildstream import _site, utils, ProgramNotFoundError
|
| 8 |
+from buildstream._platform import Platform
|
|
| 8 | 9 |
|
| 9 | 10 |
try:
|
| 10 | 11 |
utils.get_host_tool('bzr')
|
| ... | ... | @@ -52,4 +53,4 @@ except ImportError: |
| 52 | 53 |
|
| 53 | 54 |
IS_LINUX = os.getenv('BST_FORCE_BACKEND', sys.platform).startswith('linux')
|
| 54 | 55 |
|
| 55 |
-_, _, _, _, MACHINE_ARCH = os.uname()
|
|
| 56 |
+MACHINE_ARCH = Platform.get_host_arch()
|
