Tests: Cover NO_SONAME property for SHARED libraries

This property was added by commit v2.8.9~204^2~2 (Support building
shared libraries or modules without soname, 2012-04-22).  A test for
using the property on MODULE libraries was added by commit
v2.8.9~204^2~1 (Test NO_SONAME property, 2012-04-23).  Add such a test
for SHARED libraries too.
This commit is contained in:
Brad King 2015-08-20 10:37:18 -04:00
parent e72a5b2c0b
commit 899458ab20
5 changed files with 70 additions and 0 deletions

View File

@ -127,6 +127,9 @@ target_link_libraries(testLibCycleA testLibCycleB)
target_link_libraries(testLibCycleB testLibCycleA) target_link_libraries(testLibCycleB testLibCycleA)
set_property(TARGET testLibCycleA PROPERTY LINK_INTERFACE_MULTIPLICITY 3) set_property(TARGET testLibCycleA PROPERTY LINK_INTERFACE_MULTIPLICITY 3)
add_library(testLibNoSONAME SHARED testLibNoSONAME.c)
set_property(TARGET testLibNoSONAME PROPERTY NO_SONAME 1)
# Test exporting dependent libraries into different exports # Test exporting dependent libraries into different exports
add_library(testLibRequired testLibRequired.c) add_library(testLibRequired testLibRequired.c)
add_library(testLibDepends testLibDepends.c) add_library(testLibDepends testLibDepends.c)
@ -467,6 +470,7 @@ install(
testExe2lib testLib4lib testLib4libdbg testLib4libopt testExe2lib testLib4lib testLib4libdbg testLib4libopt
testLib6 testLib7 testLib6 testLib7
testLibCycleA testLibCycleB testLibCycleA testLibCycleB
testLibNoSONAME
cmp0022NEW cmp0022OLD cmp0022NEW cmp0022OLD
systemlib systemlib
EXPORT exp EXPORT exp
@ -527,6 +531,7 @@ export(TARGETS testExe1 testLib1 testLib2 testLib3
export(TARGETS testExe2 testLib4 testLib5 testLib6 testLib7 testExe3 testExe4 testExe2lib export(TARGETS testExe2 testLib4 testLib5 testLib6 testLib7 testExe3 testExe4 testExe2lib
testLib4lib testLib4libdbg testLib4libopt testLib4lib testLib4libdbg testLib4libopt
testLibCycleA testLibCycleB testLibCycleA testLibCycleB
testLibNoSONAME
testLibPerConfigDest testLibPerConfigDest
NAMESPACE bld_ NAMESPACE bld_
APPEND FILE ExportBuildTree.cmake APPEND FILE ExportBuildTree.cmake

View File

@ -0,0 +1,7 @@
#if defined(_WIN32) || defined(__CYGWIN__)
# define testLibNoSONAME_EXPORT __declspec(dllexport)
#else
# define testLibNoSONAME_EXPORT
#endif
testLibNoSONAME_EXPORT int testLibNoSONAME(void) { return 0; }

View File

@ -90,6 +90,50 @@ add_custom_target(check_testLib1_genex ALL
-P ${CMAKE_CURRENT_SOURCE_DIR}/check_testLib1_genex.cmake -P ${CMAKE_CURRENT_SOURCE_DIR}/check_testLib1_genex.cmake
) )
if(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG AND
"${CMAKE_C_CREATE_SHARED_MODULE}" MATCHES "SONAME_FLAG")
foreach(ns exp bld)
get_property(configs TARGET ${ns}_testLib5 PROPERTY IMPORTED_CONFIGURATIONS)
foreach(c ${configs})
string(TOUPPER "${c}" CONFIG)
get_property(soname TARGET ${ns}_testLib5 PROPERTY IMPORTED_NO_SONAME_${CONFIG})
if(soname)
message(SEND_ERROR "${ns}_testLib5 has IMPORTED_NO_SONAME_${CONFIG} but should:\n ${soname}")
else()
message(STATUS "${ns}_testLib5 does not have IMPORTED_NO_SONAME_${CONFIG} as expected")
endif()
endforeach()
get_property(configs TARGET ${ns}_testLibNoSONAME PROPERTY IMPORTED_CONFIGURATIONS)
foreach(c ${configs})
string(TOUPPER "${c}" CONFIG)
get_property(soname TARGET ${ns}_testLibNoSONAME PROPERTY IMPORTED_NO_SONAME_${CONFIG})
if(soname)
message(STATUS "${ns}_testLibNoSONAME has IMPORTED_NO_SONAME_${CONFIG} as expected")
else()
message(SEND_ERROR "${ns}_testLibNoSONAME does not have IMPORTED_NO_SONAME_${CONFIG} but should")
endif()
endforeach()
# Parse the binary to check for SONAME if possible.
if("${CMAKE_EXECUTABLE_FORMAT}" MATCHES "ELF")
find_program(READELF_EXE readelf)
if(READELF_EXE)
add_custom_target(check_${ns}_testLib5_soname ALL COMMAND
${CMAKE_COMMAND} -Dreadelf=${READELF_EXE}
-Dlib=$<TARGET_FILE:${ns}_testLib5>
-P ${CMAKE_CURRENT_SOURCE_DIR}/check_lib_soname.cmake
)
add_custom_target(check_${ns}_testLibNoSONAME_soname ALL COMMAND
${CMAKE_COMMAND} -Dreadelf=${READELF_EXE}
-Dlib=$<TARGET_FILE:${ns}_testLibNoSONAME>
-P ${CMAKE_CURRENT_SOURCE_DIR}/check_lib_nosoname.cmake
)
endif()
endif()
endforeach()
endif()
add_executable(cmp0022OLD_test cmp0022OLD_test_vs6_1.cpp) add_executable(cmp0022OLD_test cmp0022OLD_test_vs6_1.cpp)
target_link_libraries(cmp0022OLD_test bld_cmp0022OLD) target_link_libraries(cmp0022OLD_test bld_cmp0022OLD)
add_executable(cmp0022NEW_test cmp0022NEW_test_vs6_1.cpp) add_executable(cmp0022NEW_test cmp0022NEW_test_vs6_1.cpp)

View File

@ -0,0 +1,7 @@
execute_process(COMMAND ${readelf} -d ${lib} OUTPUT_FILE ${lib}.readelf.txt)
file(STRINGS ${lib}.readelf.txt soname REGEX "\\(SONAME\\)")
if(soname)
message(FATAL_ERROR "${lib} has soname but should not:\n ${soname}")
else()
message(STATUS "${lib} has no soname as expected:\n ${soname}")
endif()

View File

@ -0,0 +1,7 @@
execute_process(COMMAND ${readelf} -d ${lib} OUTPUT_FILE ${lib}.readelf.txt)
file(STRINGS ${lib}.readelf.txt soname REGEX "\\(SONAME\\)")
if(soname)
message(STATUS "${lib} has soname as expected:\n ${soname}")
else()
message(FATAL_ERROR "${lib} has no soname but should:\n ${soname}")
endif()