ENH: Test target_link_libraries INTERFACE option

This commit is contained in:
Brad King 2008-08-11 16:23:10 -04:00
parent e322d288af
commit 7b873cd951
6 changed files with 63 additions and 2 deletions

View File

@ -35,6 +35,22 @@ set_property(TARGET testLib3 PROPERTY SOVERSION 3)
add_library(testLib4 SHARED testLib4.c) add_library(testLib4 SHARED testLib4.c)
set_property(TARGET testLib4 PROPERTY FRAMEWORK 1) set_property(TARGET testLib4 PROPERTY FRAMEWORK 1)
# Test using the target_link_libraries command to set the
# LINK_INTERFACE_LIBRARIES* properties. We construct two libraries
# providing the same two symbols. In each library one of the symbols
# will work and the other one will fail to link. The import part of
# this test will try to use the symbol corresponding to the
# configuration in which it is built. If the proper library is not
# used via the link interface the import test will fail to link.
add_library(testLib4lib STATIC testLib4lib.c)
add_library(testLib4libdbg STATIC testLib4libopt.c testLib4libdbg.c)
add_library(testLib4libopt STATIC testLib4libdbg.c testLib4libopt.c)
set_property(TARGET testLib4libdbg PROPERTY COMPILE_DEFINITIONS LIB_DBG)
set_property(TARGET testLib4libopt PROPERTY COMPILE_DEFINITIONS LIB_OPT)
target_link_libraries(testLib4
INTERFACE testLib4lib debug testLib4libdbg optimized testLib4libopt
)
add_executable(testExe3 testExe3.c) add_executable(testExe3 testExe3.c)
set_property(TARGET testExe3 PROPERTY MACOSX_BUNDLE 1) set_property(TARGET testExe3 PROPERTY MACOSX_BUNDLE 1)
@ -42,7 +58,7 @@ set_property(TARGET testExe3 PROPERTY MACOSX_BUNDLE 1)
install( install(
TARGETS TARGETS
testExe1 testLib1 testLib2 testExe2 testLib3 testLib4 testExe3 testExe1 testLib1 testLib2 testExe2 testLib3 testLib4 testExe3
testExe2lib testExe2lib testLib4lib testLib4libdbg testLib4libopt
EXPORT exp EXPORT exp
RUNTIME DESTINATION bin RUNTIME DESTINATION bin
LIBRARY DESTINATION lib NAMELINK_SKIP LIBRARY DESTINATION lib NAMELINK_SKIP
@ -67,6 +83,7 @@ export(TARGETS testExe1 testLib1 testLib2 testLib3
FILE ExportBuildTree.cmake FILE ExportBuildTree.cmake
) )
export(TARGETS testExe2 testLib4 testExe3 testExe2lib export(TARGETS testExe2 testLib4 testExe3 testExe2lib
testLib4lib testLib4libdbg testLib4libopt
NAMESPACE bld_ NAMESPACE bld_
APPEND FILE ExportBuildTree.cmake APPEND FILE ExportBuildTree.cmake
) )

View File

@ -0,0 +1,4 @@
int testLib4lib(void)
{
return 0;
}

View File

@ -0,0 +1,14 @@
#ifdef LIB_DBG
/* We are building in testLib4libdbg. Provide the correct symbol. */
int testLib4libdbg(void)
{
return 0;
}
#else
/* We are not building in testLib4libdbg. Poison the symbol. */
extern int testLib4libdbg_noexist(void);
int testLib4libdbg(void)
{
return testLib4libdbg_noexist();
}
#endif

View File

@ -0,0 +1,14 @@
#ifdef LIB_OPT
/* We are building in testLib4libopt. Provide the correct symbol. */
int testLib4libopt(void)
{
return 0;
}
#else
/* We are not building in testLib4libopt. Poison the symbol. */
extern int testLib4libopt_noexist(void);
int testLib4libopt(void)
{
return testLib4libopt_noexist();
}
#endif

View File

@ -32,6 +32,7 @@ add_executable(imp_testExe1
# Try linking to a library imported from the install tree. # Try linking to a library imported from the install tree.
target_link_libraries(imp_testExe1 exp_testLib2 exp_testLib3 exp_testLib4) target_link_libraries(imp_testExe1 exp_testLib2 exp_testLib3 exp_testLib4)
set_property(TARGET imp_testExe1 PROPERTY COMPILE_DEFINITIONS_DEBUG EXE_DBG)
# Try building a plugin to an executable imported from the install tree. # Try building a plugin to an executable imported from the install tree.
add_library(imp_mod1 MODULE imp_mod1.c) add_library(imp_mod1 MODULE imp_mod1.c)
@ -57,6 +58,7 @@ add_executable(imp_testExe1b
# Try linking to a library imported from the build tree. # Try linking to a library imported from the build tree.
target_link_libraries(imp_testExe1b bld_testLib2 bld_testLib3 bld_testLib4) target_link_libraries(imp_testExe1b bld_testLib2 bld_testLib3 bld_testLib4)
set_property(TARGET imp_testExe1b PROPERTY COMPILE_DEFINITIONS_DEBUG EXE_DBG)
# Try building a plugin to an executable imported from the build tree. # Try building a plugin to an executable imported from the build tree.
add_library(imp_mod1b MODULE imp_mod1.c) add_library(imp_mod1b MODULE imp_mod1.c)

View File

@ -3,9 +3,19 @@ extern int generated_by_testExe3();
extern int testLib2(); extern int testLib2();
extern int testLib3(); extern int testLib3();
extern int testLib4(); extern int testLib4();
extern int testLib4lib();
/* Switch a symbol between debug and optimized builds to make sure the
proper library is found from the testLib4 link interface. */
#ifdef EXE_DBG
# define testLib4libcfg testLib4libdbg
#else
# define testLib4libcfg testLib4libopt
#endif
extern testLib4libcfg(void);
int main() int main()
{ {
return (testLib2() + generated_by_testExe1() + testLib3() + testLib4() return (testLib2() + generated_by_testExe1() + testLib3() + testLib4()
+ generated_by_testExe3()); + generated_by_testExe3() + testLib4lib() + testLib4libcfg());
} }