From 19fcec84d8d7d21e796c7624e521b60d28ee21ed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:45:59 +0200 Subject: Adding upstream version 16.2.11+ds. Signed-off-by: Daniel Baumann --- src/boost/tools/build/test/use_requirements.py | 283 +++++++++++++++++++++++++ 1 file changed, 283 insertions(+) create mode 100644 src/boost/tools/build/test/use_requirements.py (limited to 'src/boost/tools/build/test/use_requirements.py') diff --git a/src/boost/tools/build/test/use_requirements.py b/src/boost/tools/build/test/use_requirements.py new file mode 100644 index 000000000..366281509 --- /dev/null +++ b/src/boost/tools/build/test/use_requirements.py @@ -0,0 +1,283 @@ +#!/usr/bin/python + +# Copyright 2003 Dave Abrahams +# Copyright 2002, 2003, 2004, 2006 Vladimir Prus +# 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) + +import BoostBuild + +t = BoostBuild.Tester(use_test_config=False) + + +# Test that usage requirements on main targets work (and are propagated all the +# way up, and not only to direct dependants). +t.write("jamroot.jam", "") + +# Note: 'lib cc ..', not 'lib c'. If using 'lib c: ...' the HP-CXX linker will +# confuse it with the system C runtime. +t.write("jamfile.jam", """\ +lib b : b.cpp : shared:SHARED_B : : + FOO shared:SHARED_B ; +lib cc : c.cpp b ; +exe a : a.cpp cc ; +""") + +t.write("b.cpp", """\ +void +#if defined(_WIN32) && defined(SHARED_B) +__declspec(dllexport) +#endif +foo() {} +""") + +t.write("c.cpp", """\ +void +#if defined(_WIN32) && defined(SHARED_B) +__declspec(dllexport) +#endif +create_lib_please() {} +""") + +t.write("a.cpp", """\ +#ifdef FOO +void +# if defined(_WIN32) && defined(SHARED_B) +__declspec(dllexport) +# endif +foo() {} +#endif +int main() { foo(); } +""") + +t.run_build_system() +t.run_build_system(["--clean"]) + + +# Test that use requirements on main target work, when they are referred using +# 'dependency' features. + +t.write("jamfile.jam", """\ +lib b : b.cpp : shared:SHARED_B : : FOO + shared:SHARED_B ; +exe a : a.cpp : b ; +""") + +t.write("b.cpp", """\ +void +#if defined(_WIN32) && defined(SHARED_B) +__declspec(dllexport) +#endif +foo() {} +""") + +t.write("a.cpp", """\ +#ifdef FOO +int main() {} +#endif +""") + +t.run_build_system() +t.run_build_system(["--clean"]) + + +# Test that usage requirements on a project work. +t.write("jamfile.jam", "exe a : a.cpp lib//b ;") + +t.write("lib/jamfile.jam", """\ +project + : requirements shared:SHARED_B + : usage-requirements FOO shared:SHARED_B ; +lib b : b.cpp ; +""") + +t.write("lib/b.cpp", """\ +void +#if defined(_WIN32) && defined(SHARED_B) +__declspec(dllexport) +#endif +foo() {} +""") + +t.run_build_system() + + +# Test that use requirements are inherited correctly. +t.write("jamfile.jam", "exe a : a.cpp lib/1//b ;") + +t.write("a.cpp", """\ +#if defined(FOO) && defined(ZOO) +void foo() {} +#endif +int main() { foo(); } +""") + +t.write("lib/jamfile.jam", """\ +project : requirements : usage-requirements FOO ; +""") + +t.write("lib/1/jamfile.jam", """\ +project + : requirements shared:SHARED_B + : usage-requirements ZOO shared:SHARED_B ; +lib b : b.cpp ; +""") + +t.write("lib/1/b.cpp", """\ +void +#if defined(_WIN32) && defined(SHARED_B) +__declspec(dllexport) +#endif +foo() {} +""") + +t.run_build_system() +t.run_build_system(["--clean"]) + + +# Test that we correctly handle dependency features in usage requirements on +# target. +t.write("jamfile.jam", """\ +lib b : b.cpp : shared:SHARED_B : : FOO + shared:SHARED_B ; + +# Here's the test: we should correctly handle dependency feature and get usage +# requirements from 'b'. +lib cc : c.cpp : shared:SHARED_C : : b ; + +# This will build only if FOO was propagated from 'c'. +exe a : a.cpp cc ; +""") + +t.write("a.cpp", """\ +#ifdef FOO +void +# if defined(_WIN32) && defined(SHARED_B) +__declspec(dllexport) +# endif +foo(); +#endif + +int main() { foo(); } +""") + +t.write("c.cpp", """\ +int +#if defined(_WIN32) && defined(SHARED_C) +__declspec(dllexport) +#endif +must_export_something; +""") + +t.run_build_system() +t.run_build_system(["--clean"]) + + +# Test correct handling of dependency features in project requirements. +t.write("jamfile.jam", "exe a : a.cpp lib1//cc ;") + +t.write("lib1/jamfile.jam", """\ +project + : requirements shared:SHARED_C + : usage-requirements ../lib2//b shared:SHARED_C ; +lib cc : c.cpp ; +""") + +t.write("lib1/c.cpp", """\ +int +#if defined(_WIN32) && defined(SHARED_C) +__declspec(dllexport) +#endif +must_export_something; +""") + +t.write("lib2/jamfile.jam", """\ +lib b : b.cpp : shared:SHARED_B : : FOO + shared:SHARED_B ; +""") + +t.copy("b.cpp", "lib2/b.cpp") + +t.run_build_system() + + +# Test that targets listed in dependency features in usage requirements are +# built with the correct properties. +t.rm(".") + +t.write("jamroot.jam", "") +t.write("jamfile.jam", """\ +lib main : main.cpp : libs//lib1 : : libs//lib1 ; +exe hello : hello.cpp main : ; +""") + +t.write("main.cpp", """\ +void +#if defined(_WIN32) && defined(SHARED_LIB1) +__declspec(dllimport) +#endif +foo(); + +int main() { foo(); } +""") + +t.write("hello.cpp", "\n") +t.write("libs/a.cpp", """\ +void +#if defined(_WIN32) && defined(SHARED_LIB1) +__declspec(dllexport) +#endif +foo() {} +""") + + +# This library should be built with the same properties as 'main'. This is a +# regression test for a bug when they were generated with empty properties, and +# there were ambiguities between variants. +t.write("libs/jamfile.jam", """\ +lib lib1 : a_d.cpp : debug shared:SHARED_LIB1 : : + shared:SHARED_LIB1 ; +lib lib1 : a.cpp : release shared:SHARED_LIB1 : : + shared:SHARED_LIB1 ; +""") + +t.write("libs/a_d.cpp", """\ +void +#if defined(_WIN32) && defined(SHARED_LIB1) +__declspec(dllexport) +#endif +foo() {} +""") + +t.run_build_system(["link=static"]) +t.expect_addition("libs/bin/$toolset/debug/link-static*/a_d.obj") + + +# Test that indirect conditionals are respected in usage requirements. +t.rm(".") + +t.write("jamroot.jam", """\ +rule has-foo ( properties * ) { return HAS_FOO ; } +exe a : a.cpp b ; +lib b : b.cpp : static : : @has-foo ; +""") + +t.write("a.cpp", """\ +#ifdef HAS_FOO +void foo(); +int main() { foo(); } +#endif +""") + +t.write("b.cpp", """\ +void +#if defined(_WIN32) && defined(SHARED_B) +__declspec(dllexport) +#endif +foo() {} +""") + +t.run_build_system() +t.expect_addition("bin/$toolset/debug*/a.exe") + +t.cleanup() -- cgit v1.2.3