From 9b6c531505ff74f119bff6facae35c10801b2c6c Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Fri, 31 May 2024 17:04:21 +0200 Subject: Link dynamic lib, test --- test-ymake.cpp | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) (limited to 'test-ymake.cpp') diff --git a/test-ymake.cpp b/test-ymake.cpp index 8184bcf..cf51a26 100644 --- a/test-ymake.cpp +++ b/test-ymake.cpp @@ -805,8 +805,71 @@ int main(int argc, char* argv[]) EXPECT_TRUE(!fs::exists("runmain")); } +TEST_F(ymakeTest, use_one_dynamic_lib) +{ + create_file("YMakefile", R"( + + + libhello.so.1.0.0 + hello.cpp + + + runmain + runmain.cpp + libhello.so + + +)"); + + create_file("hello.cpp", R"(#include "hello.h" +#include +int hello() +{ + std::cout << "Hello." << std::endl; + return 0; +})"); + + create_file("hello.h", R"(#pragma once +__attribute__((visibility("default"))) int hello(); +)"); + + create_file("runmain.cpp", R"(#include "hello.h" +int main(int argc, char* argv[]) +{ + hello(); + return 0; +})"); + + std::vector 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("hello.o")); + EXPECT_TRUE(fs::exists("libhello.so.1.0.0")); + EXPECT_TRUE(fs::exists("libhello.so.1")); + EXPECT_TRUE(fs::exists("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("hello.o")); + EXPECT_TRUE(!fs::exists("libhello.so.1.0.0")); + EXPECT_TRUE(!fs::exists("libhello.so.1")); + EXPECT_TRUE(!fs::exists("libhello.so")); + EXPECT_TRUE(!fs::exists("runmain.o")); + EXPECT_TRUE(!fs::exists("runmain")); +} + // TODO: -// use dynamic lib // use static lib from subdir // use dynamic lib from subdir // use static lib from subdir in subdir -- cgit v1.2.3