import os import pytest from tests.testutils import cli # Project directory DATA_DIR = os.path.join( os.path.dirname(os.path.realpath(__file__)), "project", ) def strict_args(args, strict): if strict != "strict": return ['--no-strict'] + args return args @pytest.mark.datafiles(DATA_DIR) @pytest.mark.parametrize("strict", ["strict", "non-strict"]) def test_rebuild(datafiles, cli, strict): project = os.path.join(datafiles.dirname, datafiles.basename) checkout = os.path.join(cli.directory, 'checkout') # First build intermediate target.bst result = cli.run(project=project, args=strict_args(['build', 'target.bst'], strict)) result.assert_success() # Modify base import with open(os.path.join(project, 'files', 'dev-files', 'usr', 'include', 'new.h'), "w") as f: f.write("#define NEW") # Rebuild base import and build top-level rebuild-target.bst # In non-strict mode, this does not rebuild intermediate target.bst, # which means that a weakly cached target.bst will be staged as dependency. result = cli.run(project=project, args=strict_args(['build', 'rebuild-target.bst'], strict)) result.assert_success()