Teach BuildDepends test to cover LINK_DEPENDS_NO_SHARED
Build a shared library and an executable linking to it inside the inner test. Set LINK_DEPENDS_NO_SHARED on the executable. Add a custom target to compare the output file times. Verify that on the first build the executable is newer than the library. Then modify a library source file. Verify that on the second build the library is newer because the executable did not have a dependency to re-link.
This commit is contained in:
parent
ed9763136a
commit
306796e862
@ -60,6 +60,12 @@ file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_dir.hxx
|
|||||||
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx
|
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx
|
||||||
"static const char* zot_macro_tgt = \"zot_macro_tgt\";\n")
|
"static const char* zot_macro_tgt = \"zot_macro_tgt\";\n")
|
||||||
|
|
||||||
|
file(WRITE ${BuildDepends_BINARY_DIR}/Project/link_depends_no_shared_lib.h
|
||||||
|
"#define link_depends_no_shared_lib_value 1\n")
|
||||||
|
file(WRITE ${BuildDepends_BINARY_DIR}/Project/link_depends_no_shared_exe.h
|
||||||
|
"#define link_depends_no_shared_exe_value 0\n")
|
||||||
|
set(link_depends_no_shared_check_txt ${BuildDepends_BINARY_DIR}/Project/link_depends_no_shared_check.txt)
|
||||||
|
|
||||||
help_xcode_depends()
|
help_xcode_depends()
|
||||||
|
|
||||||
message("Building project first time")
|
message("Building project first time")
|
||||||
@ -125,6 +131,19 @@ else()
|
|||||||
message(SEND_ERROR "Project did not initially build properly: ${out}")
|
message(SEND_ERROR "Project did not initially build properly: ${out}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(EXISTS "${link_depends_no_shared_check_txt}")
|
||||||
|
file(STRINGS "${link_depends_no_shared_check_txt}" link_depends_no_shared_check LIMIT_COUNT 1)
|
||||||
|
if("${link_depends_no_shared_check}" STREQUAL "1")
|
||||||
|
message(STATUS "link_depends_no_shared_exe is newer than link_depends_no_shared_lib as expected.")
|
||||||
|
else()
|
||||||
|
message(SEND_ERROR "Project did not initially build properly: "
|
||||||
|
"link_depends_no_shared_exe is older than link_depends_no_shared_lib.")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(SEND_ERROR "Project did not initially build properly: "
|
||||||
|
"Targets link_depends_no_shared_lib and link_depends_no_shared_exe not both built.")
|
||||||
|
endif()
|
||||||
|
|
||||||
message("Waiting 3 seconds...")
|
message("Waiting 3 seconds...")
|
||||||
# any additional argument will cause ${bar} to wait forever
|
# any additional argument will cause ${bar} to wait forever
|
||||||
execute_process(COMMAND ${bar} -infinite TIMEOUT 3 OUTPUT_VARIABLE out)
|
execute_process(COMMAND ${bar} -infinite TIMEOUT 3 OUTPUT_VARIABLE out)
|
||||||
@ -141,6 +160,9 @@ file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_dir.hxx
|
|||||||
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx
|
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx
|
||||||
"static const char* zot_macro_tgt = \"zot_macro_tgt changed\";\n")
|
"static const char* zot_macro_tgt = \"zot_macro_tgt changed\";\n")
|
||||||
|
|
||||||
|
file(WRITE ${BuildDepends_BINARY_DIR}/Project/link_depends_no_shared_lib.h
|
||||||
|
"#define link_depends_no_shared_lib_value 0\n")
|
||||||
|
|
||||||
if(TEST_LINK_DEPENDS)
|
if(TEST_LINK_DEPENDS)
|
||||||
file(WRITE ${TEST_LINK_DEPENDS} "2")
|
file(WRITE ${TEST_LINK_DEPENDS} "2")
|
||||||
endif()
|
endif()
|
||||||
@ -219,3 +241,15 @@ is not newer than dependency
|
|||||||
")
|
")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(EXISTS "${link_depends_no_shared_check_txt}")
|
||||||
|
file(STRINGS "${link_depends_no_shared_check_txt}" link_depends_no_shared_check LIMIT_COUNT 1)
|
||||||
|
if("${link_depends_no_shared_check}" STREQUAL "0")
|
||||||
|
message(STATUS "link_depends_no_shared_exe is older than link_depends_no_shared_lib as expected.")
|
||||||
|
else()
|
||||||
|
message(SEND_ERROR "Project did not rebuild properly: link_depends_no_shared_exe is newer than link_depends_no_shared_lib.")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(SEND_ERROR "Project did not rebuild properly. "
|
||||||
|
"Targets link_depends_no_shared_lib and link_depends_no_shared_exe not both built.")
|
||||||
|
endif()
|
||||||
|
@ -107,3 +107,18 @@ if(TEST_LINK_DEPENDS)
|
|||||||
add_executable(linkdep linkdep.cxx)
|
add_executable(linkdep linkdep.cxx)
|
||||||
set_property(TARGET linkdep PROPERTY LINK_DEPENDS ${TEST_LINK_DEPENDS})
|
set_property(TARGET linkdep PROPERTY LINK_DEPENDS ${TEST_LINK_DEPENDS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
add_library(link_depends_no_shared_lib SHARED link_depends_no_shared_lib.c
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/link_depends_no_shared_lib.h)
|
||||||
|
add_executable(link_depends_no_shared_exe link_depends_no_shared_exe.c
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/link_depends_no_shared_exe.h)
|
||||||
|
target_link_libraries(link_depends_no_shared_exe link_depends_no_shared_lib)
|
||||||
|
set_property(TARGET link_depends_no_shared_exe PROPERTY LINK_DEPENDS_NO_SHARED 1)
|
||||||
|
add_custom_target(link_depends_no_shared_check ALL
|
||||||
|
COMMAND ${CMAKE_COMMAND}
|
||||||
|
-Dlib=$<TARGET_FILE:link_depends_no_shared_lib>
|
||||||
|
-Dexe=$<TARGET_FILE:link_depends_no_shared_exe>
|
||||||
|
-Dout=${CMAKE_CURRENT_BINARY_DIR}/link_depends_no_shared_check.txt
|
||||||
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/link_depends_no_shared_check.cmake
|
||||||
|
)
|
||||||
|
add_dependencies(link_depends_no_shared_check link_depends_no_shared_exe)
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
if(NOT EXISTS "${lib}" OR NOT EXISTS "${exe}")
|
||||||
|
file(REMOVE "${out}")
|
||||||
|
elseif("${exe}" IS_NEWER_THAN "${lib}")
|
||||||
|
file(WRITE "${out}" "1\n")
|
||||||
|
else()
|
||||||
|
file(WRITE "${out}" "0\n")
|
||||||
|
endif()
|
9
Tests/BuildDepends/Project/link_depends_no_shared_exe.c
Normal file
9
Tests/BuildDepends/Project/link_depends_no_shared_exe.c
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#include "link_depends_no_shared_exe.h"
|
||||||
|
#ifdef _WIN32
|
||||||
|
__declspec(dllimport)
|
||||||
|
#endif
|
||||||
|
int link_depends_no_shared_lib(void);
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
return link_depends_no_shared_lib() + link_depends_no_shared_exe_value;
|
||||||
|
}
|
8
Tests/BuildDepends/Project/link_depends_no_shared_lib.c
Normal file
8
Tests/BuildDepends/Project/link_depends_no_shared_lib.c
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include "link_depends_no_shared_lib.h"
|
||||||
|
#ifdef _WIN32
|
||||||
|
__declspec(dllexport)
|
||||||
|
#endif
|
||||||
|
int link_depends_no_shared_lib(void)
|
||||||
|
{
|
||||||
|
return link_depends_no_shared_lib_value;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user