#!/usr/bin/python
# Copyright 2018 Steven Watanabe
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.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/static b/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 : xxx
: a
: b/static b/shared
: a.h ;
package.install instally TestY : yyy
: a
: b/static b/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()