diff options
author | Ed Baunton <ebaunton1@bloomberg.net> | 2018-06-06 14:51:36 +0100 |
---|---|---|
committer | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2018-06-06 17:56:59 +0000 |
commit | 5dc8ab983def6bdc1ab1f447a9fec8b675aa7310 (patch) | |
tree | 7e5cd29ab0334b94eee577bc79306fe628f7dff5 | |
parent | 7f9216b3da17418e6b918a872896d98d490ae86a (diff) | |
download | buildstream-5dc8ab983def6bdc1ab1f447a9fec8b675aa7310.tar.gz |
Add a kind for Make
-rw-r--r-- | buildstream/plugins/elements/make.py | 42 | ||||
-rw-r--r-- | buildstream/plugins/elements/make.yaml | 42 | ||||
-rw-r--r-- | tests/integration/make.py | 47 | ||||
-rw-r--r-- | tests/integration/project/elements/make/makehello.bst | 10 | ||||
-rw-r--r-- | tests/integration/project/files/makehello.tar.gz | bin | 0 -> 432 bytes |
5 files changed, 141 insertions, 0 deletions
diff --git a/buildstream/plugins/elements/make.py b/buildstream/plugins/elements/make.py new file mode 100644 index 000000000..a6ba8576b --- /dev/null +++ b/buildstream/plugins/elements/make.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# +# Copyright Bloomberg Finance LP +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. If not, see <http://www.gnu.org/licenses/>. +# +# Authors: +# Ed Baunton <ebaunton1@bloomberg.net> + +"""Make build element + +This is a :mod:`BuildElement <buildstream.buildelement>` implementation for +using GNU make based build. + +Here is the default configuration for the ``make`` element in full: + + .. literalinclude:: ../../../buildstream/plugins/elements/make.yaml + :language: yaml +""" + +from buildstream import BuildElement + + +# Element implementation for the 'make' kind. +class MakeElement(BuildElement): + pass + + +# Plugin entry point +def setup(): + return MakeElement diff --git a/buildstream/plugins/elements/make.yaml b/buildstream/plugins/elements/make.yaml new file mode 100644 index 000000000..a8e63b5d5 --- /dev/null +++ b/buildstream/plugins/elements/make.yaml @@ -0,0 +1,42 @@ +# make default configurations + +variables: + make: make + make-install: make -j1 DESTDIR="%{install-root}" install + + # Set this if the sources cannot handle parallelization. + # + # notparallel: True + +config: + + # Commands for building the software + # + build-commands: + - | + %{make} + + # Commands for installing the software into a + # destination folder + # + install-commands: + - | + %{make-install} + + # Commands for stripping debugging information out of + # installed binaries + # + strip-commands: + - | + %{strip-binaries} + +# Use max-jobs CPUs for building and enable verbosity +environment: + MAKEFLAGS: -j%{max-jobs} + V: 1 + +# And dont consider MAKEFLAGS or V as something which may +# effect build output. +environment-nocache: +- MAKEFLAGS +- V diff --git a/tests/integration/make.py b/tests/integration/make.py new file mode 100644 index 000000000..6928cfdc2 --- /dev/null +++ b/tests/integration/make.py @@ -0,0 +1,47 @@ +import os +import pytest + +from tests.testutils import cli_integration as cli +from tests.testutils.integration import assert_contains + + +pytestmark = pytest.mark.integration + + +DATA_DIR = os.path.join( + os.path.dirname(os.path.realpath(__file__)), + "project" +) + + +# Test that a make build 'works' - we use the make sample +# makehello project for this. +@pytest.mark.integration +@pytest.mark.datafiles(DATA_DIR) +def test_make_build(cli, tmpdir, datafiles): + project = os.path.join(datafiles.dirname, datafiles.basename) + checkout = os.path.join(cli.directory, 'checkout') + element_name = 'make/makehello.bst' + + result = cli.run(project=project, args=['build', element_name]) + assert result.exit_code == 0 + + result = cli.run(project=project, args=['checkout', element_name, checkout]) + assert result.exit_code == 0 + + assert_contains(checkout, ['/usr', '/usr/bin', + '/usr/bin/hello']) + + +# Test running an executable built with make +@pytest.mark.datafiles(DATA_DIR) +def test_make_run(cli, tmpdir, datafiles): + project = os.path.join(datafiles.dirname, datafiles.basename) + element_name = 'make/makehello.bst' + + result = cli.run(project=project, args=['build', element_name]) + assert result.exit_code == 0 + + result = cli.run(project=project, args=['shell', element_name, '/usr/bin/hello']) + assert result.exit_code == 0 + assert result.output == 'Hello, world\n' diff --git a/tests/integration/project/elements/make/makehello.bst b/tests/integration/project/elements/make/makehello.bst new file mode 100644 index 000000000..4b5c5ac3b --- /dev/null +++ b/tests/integration/project/elements/make/makehello.bst @@ -0,0 +1,10 @@ +kind: make +description: make test + +depends: +- base.bst + +sources: +- kind: tar + url: project_dir:/files/makehello.tar.gz + ref: fd342a36503a0a0dd37b81ddb4d2b78bd398d912d813339e0de44a6b6c393b8e diff --git a/tests/integration/project/files/makehello.tar.gz b/tests/integration/project/files/makehello.tar.gz Binary files differnew file mode 100644 index 000000000..d0edcb29c --- /dev/null +++ b/tests/integration/project/files/makehello.tar.gz |