diff options
author | Roland Reichwein <mail@reichwein.it> | 2024-05-31 17:28:53 +0200 |
---|---|---|
committer | Roland Reichwein <mail@reichwein.it> | 2024-05-31 17:28:53 +0200 |
commit | 16e95b415d0f96be88764fb54e04d48dd3ad9302 (patch) | |
tree | c61c4ef5c5439f595e1b94e8e26f4f9fbfa7c42b | |
parent | 5ba7c40ffa7fff89267639df2e1d3bba13e8b451 (diff) |
use lib from sub-subdir, test
-rw-r--r-- | test-ymake.cpp | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/test-ymake.cpp b/test-ymake.cpp index 820befe..dc50bdb 100644 --- a/test-ymake.cpp +++ b/test-ymake.cpp @@ -1006,9 +1006,79 @@ __attribute__((visibility("default"))) int hello(); EXPECT_TRUE(!fs::exists("runmain")); } +TEST_F(ymakeTest, use_one_dynamic_lib_from_subsubdir) +{ + create_file("YMakefile", R"( +<ymake> + <build> + <name>runmain</name> + <source>runmain.cpp</source> + <linklib>subdir1/subdir2/libhello.so</linklib> + </build> +</ymake> +)"); + + create_file("runmain.cpp", R"(#include "subdir1/subdir2/hello.h" +int main(int argc, char* argv[]) +{ + hello(); + return 0; +})"); + + fs::create_directories("subdir1/subdir2"); + + create_file("subdir1/subdir2/YMakefile", R"( +<ymake> + <build> + <name>libhello.so.1.0.0</name> + <source>hello.cpp</source> + </build> +</ymake> +)"); + + create_file("subdir1/subdir2/hello.cpp", R"(#include "hello.h" +#include <iostream> +int hello() +{ + std::cout << "Hello." << std::endl; + return 0; +})"); + + create_file("subdir1/subdir2/hello.h", R"(#pragma once +__attribute__((visibility("default"))) int hello(); +)"); + + std::vector<std::string> output; + int result = run_command("../ymake", output); + EXPECT_EQ(result, 0); + ASSERT_EQ(output.size(), 6); // compile, link, compile, link, 2 dyn. lib links + + EXPECT_TRUE(fs::exists("subdir1/subdir2/hello.o")); + EXPECT_TRUE(fs::exists("subdir1/subdir2/libhello.so.1.0.0")); + EXPECT_TRUE(fs::exists("subdir1/subdir2/libhello.so.1")); + EXPECT_TRUE(fs::exists("subdir1/subdir2/libhello.so")); + EXPECT_TRUE(fs::exists("runmain.o")); + EXPECT_TRUE(fs::exists("runmain")); + + result = run_command("./runmain", output); + EXPECT_EQ(result, 0); + ASSERT_EQ(output.size(), 1); + EXPECT_EQ(output[0], "Hello."); + + result = run_command("../ymake clean", output); + EXPECT_EQ(result, 0); + ASSERT_EQ(output.size(), 8); // hello.o, hello.d, hello.so.1.0.0, hello.so.1, hello.so, runmain.o, runmain.d, runmain + + EXPECT_TRUE(!fs::exists("subdir1/subdir2/hello.o")); + EXPECT_TRUE(!fs::exists("subdir1/subdir2/libhello.so.1.0.0")); + EXPECT_TRUE(!fs::exists("subdir1/subdir2/libhello.so.1")); + EXPECT_TRUE(!fs::exists("subdir1/subdir2/libhello.so")); + EXPECT_TRUE(!fs::exists("runmain.o")); + EXPECT_TRUE(!fs::exists("runmain")); +} + // TODO: // use static lib from subdir in subdir -// use dynamic lib from subdir in subdir TEST_F(yscanTest, no_cpp_file) { |