#! /usr/bin/env avocado-runner-avocado-classless # SPDX-License-Identifier: GPL-2.0-or-later # # Copyright Red Hat # Author: David Gibson """ avocado/build.py - Test passt & pasta build targets """ import contextlib import os import os.path import shutil from tempfile import TemporaryDirectory from avocado_classless.test import assert_raises, test from tasst.exesite import CmdError, REAL_HOST @contextlib.contextmanager def clone_source_tree(): REAL_HOST.require_cmds('git', 'make') with TemporaryDirectory(ignore_cleanup_errors=False) as tmpdir: os.chdir('..') # Make a temporary copy of the sources srcfiles = REAL_HOST.output('git ls-files') \ .decode('utf-8').splitlines() for src in srcfiles: dst = os.path.join(tmpdir, src) os.makedirs(os.path.dirname(dst), exist_ok=True) shutil.copy(src, dst) os.chdir(tmpdir) yield tmpdir def build_target(target, outputs): with clone_source_tree(): for o in outputs: assert not os.path.exists(o) REAL_HOST.fg(f'make {target} CFLAGS="-Werror"') for o in outputs: assert os.path.exists(o) REAL_HOST.fg('make clean') for o in outputs: assert not os.path.exists(o) @test def test_make_passt(): build_target('passt', ['passt']) @test def test_make_pasta(): build_target('pasta', ['pasta']) @test def test_make_qrap(): build_target('qrap', ['qrap']) @test def test_make_all(): build_target('all', ['passt', 'pasta', 'qrap']) @test def test_make_install_uninstall(): with clone_source_tree(): with TemporaryDirectory(ignore_cleanup_errors=False) as prefix: bindir = os.path.join(prefix, 'bin') mandir = os.path.join(prefix, 'share', 'man') exes = ['passt', 'pasta', 'qrap'] # Install REAL_HOST.fg(f'make install CFLAGS="-Werror" prefix={prefix}') for t in exes: assert os.path.isfile(os.path.join(bindir, t)) REAL_HOST.fg(f'man -M {mandir} -W passt') # Uninstall REAL_HOST.fg(f'make uninstall prefix={prefix}') for t in exes: assert not os.path.exists(os.path.join(bindir, t)) assert_raises(CmdError, REAL_HOST.fg, f'man -M {mandir} -W passt')