Commit 5dc8ab98 authored by Ed Baunton's avatar Ed Baunton Committed by Tristan Van Berkom

Add a kind for Make

parent 7f9216b3
Pipeline #23347259 passed with stages
in 34 minutes and 57 seconds
#!/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
# 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
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'
kind: make
description: make test
depends:
- base.bst
sources:
- kind: tar
url: project_dir:/files/makehello.tar.gz
ref: fd342a36503a0a0dd37b81ddb4d2b78bd398d912d813339e0de44a6b6c393b8e
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment