diff options
| author | Arthur LAURENT <[email protected]> | 2024-08-04 18:35:14 +0200 |
|---|---|---|
| committer | Arthur LAURENT <[email protected]> | 2024-10-08 13:47:44 +0200 |
| commit | d7d57888d888d32d5367d1c076fdb5210fdda4b2 (patch) | |
| tree | 5fec86861f607cfe4f1e688337ae1fa0cdf1b611 /tests/projects/c++/modules | |
| parent | d3a75d4be2aa50a1dfdf5b7708c08409b5e28fcb (diff) | |
add test for dependency scanner regeneration
Diffstat (limited to 'tests/projects/c++/modules')
12 files changed, 166 insertions, 0 deletions
diff --git a/tests/projects/c++/modules/dependency_flag_update/src/bar.mpp b/tests/projects/c++/modules/dependency_flag_update/src/bar.mpp new file mode 100644 index 000000000..812572d69 --- /dev/null +++ b/tests/projects/c++/modules/dependency_flag_update/src/bar.mpp @@ -0,0 +1,9 @@ +module; + +#include <iostream> + +export module bar; + +namespace bar { +export void hello() { std::cout << "Hello world2" << std::endl; } +} // namespace bar diff --git a/tests/projects/c++/modules/dependency_flag_update/src/foo.mpp b/tests/projects/c++/modules/dependency_flag_update/src/foo.mpp new file mode 100644 index 000000000..904d3805e --- /dev/null +++ b/tests/projects/c++/modules/dependency_flag_update/src/foo.mpp @@ -0,0 +1,9 @@ +module; + +#include <iostream> + +export module foo; + +namespace foo { +export void hello() { std::cout << "Hello world" << std::endl; } +} // namespace foo diff --git a/tests/projects/c++/modules/dependency_flag_update/src/main.cpp b/tests/projects/c++/modules/dependency_flag_update/src/main.cpp new file mode 100644 index 000000000..809536065 --- /dev/null +++ b/tests/projects/c++/modules/dependency_flag_update/src/main.cpp @@ -0,0 +1,12 @@ +#if defined(FOO) +import foo; +using namespace foo; +#else +import bar; +using namespace bar; +#endif + +int main() { + hello(); + return 0; +} diff --git a/tests/projects/c++/modules/dependency_flag_update/test.lua b/tests/projects/c++/modules/dependency_flag_update/test.lua new file mode 100644 index 000000000..16312f26a --- /dev/null +++ b/tests/projects/c++/modules/dependency_flag_update/test.lua @@ -0,0 +1 @@ +inherit(".test_dependency_scanner") diff --git a/tests/projects/c++/modules/dependency_flag_update/xmake.lua b/tests/projects/c++/modules/dependency_flag_update/xmake.lua new file mode 100644 index 000000000..d2e889765 --- /dev/null +++ b/tests/projects/c++/modules/dependency_flag_update/xmake.lua @@ -0,0 +1,11 @@ +add_rules("mode.release", "mode.debug") +set_languages("c++20") + +option("foo") + set_default("true") + add_defines("FOO") + +target("dependency_flag_update") + set_kind("binary") + add_files("src/*.cpp", "src/*.mpp") + add_options("foo") diff --git a/tests/projects/c++/modules/dependency_flag_update2/src/bar.mpp b/tests/projects/c++/modules/dependency_flag_update2/src/bar.mpp new file mode 100644 index 000000000..812572d69 --- /dev/null +++ b/tests/projects/c++/modules/dependency_flag_update2/src/bar.mpp @@ -0,0 +1,9 @@ +module; + +#include <iostream> + +export module bar; + +namespace bar { +export void hello() { std::cout << "Hello world2" << std::endl; } +} // namespace bar diff --git a/tests/projects/c++/modules/dependency_flag_update2/src/foo.mpp b/tests/projects/c++/modules/dependency_flag_update2/src/foo.mpp new file mode 100644 index 000000000..904d3805e --- /dev/null +++ b/tests/projects/c++/modules/dependency_flag_update2/src/foo.mpp @@ -0,0 +1,9 @@ +module; + +#include <iostream> + +export module foo; + +namespace foo { +export void hello() { std::cout << "Hello world" << std::endl; } +} // namespace foo diff --git a/tests/projects/c++/modules/dependency_flag_update2/src/foobar.mpp b/tests/projects/c++/modules/dependency_flag_update2/src/foobar.mpp new file mode 100644 index 000000000..1a5fd39ca --- /dev/null +++ b/tests/projects/c++/modules/dependency_flag_update2/src/foobar.mpp @@ -0,0 +1,11 @@ +export module foobar; + +#if defined(FOO) +import foo; +namespace impl = foo; +#else +import bar; +namespace impl = bar; +#endif + +export void hello() { impl::hello(); } diff --git a/tests/projects/c++/modules/dependency_flag_update2/src/main.cpp b/tests/projects/c++/modules/dependency_flag_update2/src/main.cpp new file mode 100644 index 000000000..d34cba080 --- /dev/null +++ b/tests/projects/c++/modules/dependency_flag_update2/src/main.cpp @@ -0,0 +1,6 @@ +import foobar; + +int main() { + hello(); + return 0; +} diff --git a/tests/projects/c++/modules/dependency_flag_update2/test.lua b/tests/projects/c++/modules/dependency_flag_update2/test.lua new file mode 100644 index 000000000..16312f26a --- /dev/null +++ b/tests/projects/c++/modules/dependency_flag_update2/test.lua @@ -0,0 +1 @@ +inherit(".test_dependency_scanner") diff --git a/tests/projects/c++/modules/dependency_flag_update2/xmake.lua b/tests/projects/c++/modules/dependency_flag_update2/xmake.lua new file mode 100644 index 000000000..819ef7263 --- /dev/null +++ b/tests/projects/c++/modules/dependency_flag_update2/xmake.lua @@ -0,0 +1,12 @@ +add_rules("mode.release", "mode.debug") +set_languages("c++20") + +option("foo") + set_default("true") + add_defines("FOO") + +target("dependency_flag_update3") + set_kind("binary") + add_files("src/*.cpp", "src/*.mpp") + add_options("foo") + diff --git a/tests/projects/c++/modules/test_dependency_scanner.lua b/tests/projects/c++/modules/test_dependency_scanner.lua new file mode 100644 index 000000000..c37cc0beb --- /dev/null +++ b/tests/projects/c++/modules/test_dependency_scanner.lua @@ -0,0 +1,76 @@ +import("lib.detect.find_tool") +import("core.base.semver") +import("utils.ci.is_running", {alias = "ci_is_running"}) + +function _build() + os.run("xmake f --foo=n") + local outdata + if ci_is_running() then + outdata = os.iorun("xmake -rvD") + else + outdata = os.iorun("xmake -rv") + end + if outdata then + if outdata:find("FOO") then + raise("Modules dependency scanner update does not work\n%s", outdata) + end + end + outdata = os.iorun("xmake") + if outdata then + if outdata:find("compiling") or outdata:find("linking") or outdata:find("generating") then + raise("Modules incremental compilation does not work\n%s", outdata) + end + end +end + +function can_build() + if is_subhost("windows") then + return true + elseif is_subhost("msys") then + return true + elseif is_host("linux") then + local gcc = find_tool("gcc", {version = true}) + if gcc and gcc.version and semver.compare(gcc.version, "11.0") >= 0 then + return true + end + local clang = find_tool("clang", {version = true}) + if clang and clang.version and semver.compare(clang.version, "14.0") >= 0 then + return true + end + end +end + +function main(t) + if is_subhost("windows") then + local clang = find_tool("clang", {version = true}) + if clang and clang.version and semver.compare(clang.version, "17.0") >= 0 then + os.exec("xmake f --toolchain=clang -c --yes") + _build() + os.exec("xmake clean -a") + os.exec("xmake f --toolchain=clang --runtimes=c++_shared -c --yes") + _build() + end + + os.exec("xmake clean -a") + os.exec("xmake f -c --yes") + _build() + elseif is_subhost("msys") then + os.exec("xmake f -c -p mingw --yes") + _build() + elseif is_host("linux") then + local gcc = find_tool("gcc", {version = true}) + if gcc and gcc.version and semver.compare(gcc.version, "11.0") >= 0 then + os.exec("xmake f -c --yes") + _build() + end + local clang = find_tool("clang", {version = true}) + if clang and clang.version and semver.compare(clang.version, "14.0") >= 0 then + os.exec("xmake clean -a") + os.exec("xmake f --toolchain=clang -c --yes") + _build() + os.exec("xmake clean -a") + os.exec("xmake f --toolchain=clang --runtimes=c++_shared -c --yes") + _build() + end + end +end |
