diff options
Diffstat (limited to '')
-rw-r--r-- | src/boost/tools/build/test/package.py | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/src/boost/tools/build/test/package.py b/src/boost/tools/build/test/package.py new file mode 100644 index 000000000..f5fc44dff --- /dev/null +++ b/src/boost/tools/build/test/package.py @@ -0,0 +1,231 @@ +#!/usr/bin/python + +# Copyright 2018 Steven Watanabe +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE.txt or https://www.bfgroup.xyz/b2/LICENSE.txt) + +# Test the package module. + +import BoostBuild +import os + +def setup(): + t = BoostBuild.Tester(["p//install", "p//data"], + use_test_config=False) + + t.write("p/jamroot.jam", "") + t.write("p/jamfile.jam", """\ + import package ; + exe a : a.cpp ; + lib b : b.cpp ; + package.install install Test : + : a + : b/<link>static b/<link>shared + : a.h ; + package.install-data data : Test : a.txt ; + """) + t.write("p/a.cpp", "int main() {}") + t.write("p/b.cpp", """ + int + #ifdef _WIN32 + __declspec(dllexport) + #endif + must_export_something; + """) + t.write("p/a.h", "") + t.write("p/a.txt", "") + return t + +def test_defaults(): + t = setup() + + # Since the default install location is outside out test area, + # we don't want to actually execute the build. + t.run_build_system(["-n", "-d1"]) + + installdir = "C:/Test" if os.name == 'nt' else "/usr/local" + t.expect_output_lines([ + x.replace('/', os.sep) for x in + ["common.copy %s/bin/%s" % (installdir, t.adjust_name("a.exe")), + "common.copy %s/lib/%s" % (installdir, t.adjust_name("b.dll")), + "common.copy %s/lib/%s" % (installdir, t.adjust_name("b.lib")), + "common.copy %s/include/a.h" % installdir, + "common.copy %s/share/Test/a.txt" % installdir]]) + + t.cleanup() + +def test_prefix(): + t = setup() + # An explicit --prefix on the command should override all of these: + t.write("project-config.jam", """ + option.set prefix : bad ; + option.set bindir : bad/bin ; + option.set libdir : bad/lib ; + option.set includedir : bad/include ; + option.set datarootdir : bad/share ; + """) + + t.run_build_system(["--prefix=installdir"]) + t.expect_addition("installdir/bin/a.exe") + t.expect_addition("installdir/lib/b.dll") + t.expect_addition("installdir/lib/b.lib") + t.expect_addition("installdir/include/a.h") + t.expect_addition("installdir/share/Test/a.txt") + + t.cleanup() + +def test_subdirs(): + t = setup() + # Command line options override config files + t.write("project-config.jam", """ + option.set prefix : bad ; + option.set bindir : bad/bin ; + option.set libdir : bad/lib ; + option.set includedir : bad/include ; + option.set datarootdir : bad/share ; + """) + + t.run_build_system(["--libdir=installdir/lib64", + "--bindir=installdir/binx", + "--includedir=installdir/includex", + "--datarootdir=installdir/sharex"]) + t.expect_addition("installdir/binx/a.exe") + t.expect_addition("installdir/lib64/b.dll") + t.expect_addition("installdir/lib64/b.lib") + t.expect_addition("installdir/includex/a.h") + t.expect_addition("installdir/sharex/Test/a.txt") + + t.cleanup() + +def test_subdirs_with_prefix(): + t = setup() + # Command line options override config files + t.write("project-config.jam", """ + option.set prefix : bad ; + option.set bindir : bad/bin ; + option.set libdir : bad/lib ; + option.set includedir : bad/include ; + option.set datarootdir : bad/share ; + """) + + t.run_build_system(["--prefix=bad", + "--libdir=installdir/lib64", + "--bindir=installdir/binx", + "--includedir=installdir/includex", + "--datarootdir=installdir/sharex"]) + t.expect_addition("installdir/binx/a.exe") + t.expect_addition("installdir/lib64/b.dll") + t.expect_addition("installdir/lib64/b.lib") + t.expect_addition("installdir/includex/a.h") + t.expect_addition("installdir/sharex/Test/a.txt") + + t.cleanup() + +def test_prefix_config_file(): + t = setup() + # An explicit --prefix on the command should override all of these: + t.write("project-config.jam", """ + option.set prefix : installdir ; + """) + + t.run_build_system() + t.expect_addition("installdir/bin/a.exe") + t.expect_addition("installdir/lib/b.dll") + t.expect_addition("installdir/lib/b.lib") + t.expect_addition("installdir/include/a.h") + t.expect_addition("installdir/share/Test/a.txt") + + t.cleanup() + +def test_subdirs_config_file(): + t = setup() + # An explicit --prefix on the command should override all of these: + t.write("project-config.jam", """ + option.set prefix : installdir ; + option.set libdir : installdir/lib64 ; + option.set bindir : installdir/binx ; + option.set includedir : installdir/includex ; + option.set datarootdir : installdir/sharex ; + """) + + t.run_build_system() + t.expect_addition("installdir/binx/a.exe") + t.expect_addition("installdir/lib64/b.dll") + t.expect_addition("installdir/lib64/b.lib") + t.expect_addition("installdir/includex/a.h") + t.expect_addition("installdir/sharex/Test/a.txt") + + t.cleanup() + +def test_multiple(): + '''If no prefix is specified, we might use several default + install prefixes.''' + t = BoostBuild.Tester(use_test_config=False) + + t.write("p/jamroot.jam", "") + t.write("p/jamfile.jam", """\ + import package ; + exe a : a.cpp ; + lib b : b.cpp ; + package.install installx TestX : <install-default-prefix>xxx + : a + : b/<link>static b/<link>shared + : a.h ; + package.install instally TestY : <install-default-prefix>yyy + : a + : b/<link>static b/<link>shared + : a.h ; + """) + t.write("p/a.cpp", "int main() {}") + t.write("p/b.cpp", """ + int + #ifdef _WIN32 + __declspec(dllexport) + #endif + must_export_something; + """) + t.write("p/a.h", "") + t.run_build_system(["p//installx", "p//instally"]) + t.expect_addition("p/xxx/bin/a.exe") + t.expect_addition("p/xxx/lib/b.dll") + t.expect_addition("p/xxx/lib/b.lib") + t.expect_addition("p/xxx/include/a.h") + t.expect_addition("p/yyy/bin/a.exe") + t.expect_addition("p/yyy/lib/b.dll") + t.expect_addition("p/yyy/lib/b.lib") + t.expect_addition("p/yyy/include/a.h") + +def test_paths(): + t = BoostBuild.Tester(pass_toolset=False) + t.write("Jamroot.jam", """\ + import package ; + import assert ; + import os ; + if [ os.name ] = NT + { + default-prefix = "/C:/Test" ; + } + else + { + default-prefix = /usr/local ; + } + paths = [ package.paths Test ] ; + assert.result $(default-prefix) : $(paths).prefix ; + assert.result $(default-prefix)/lib : $(paths).libdir ; + assert.result $(default-prefix)/bin : $(paths).bindir ; + assert.result $(default-prefix)/include : $(paths).includedir ; + assert.result $(default-prefix)/share : $(paths).datarootdir ; + package.add-path-option bardir : bar : libdir ; + assert.result $(default-prefix)/lib/bar : $(paths).get bardir ; + """) + t.run_build_system() + t.cleanup() + +test_defaults() +test_prefix() +test_subdirs() +test_subdirs_with_prefix() +test_prefix_config_file() +test_subdirs_config_file() +test_multiple() +test_paths() |