Test link multiplicity export/import

We test that LINK_INTERFACE_MULTIPLICITY propagates through export() and
install(EXPORT) into dependent projects.  A simple cycle of two archives
that need to be scanned three times ensures that the importing project
uses the multiplicity correctly.
This commit is contained in:
Brad King 2009-09-01 10:38:36 -04:00
parent 0cfd8c411f
commit d259128894
9 changed files with 26 additions and 1 deletions

View File

@ -73,12 +73,22 @@ target_link_libraries(testLib4
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)
# Test cyclic dependencies.
add_library(testLibCycleA STATIC
testLibCycleA1.c testLibCycleA2.c testLibCycleA3.c)
add_library(testLibCycleB STATIC
testLibCycleB1.c testLibCycleB2.c testLibCycleB3.c)
target_link_libraries(testLibCycleA testLibCycleB)
target_link_libraries(testLibCycleB testLibCycleA)
set_property(TARGET testLibCycleA PROPERTY LINK_INTERFACE_MULTIPLICITY 3)
# Install and export from install tree. # Install and export from install tree.
install( install(
TARGETS TARGETS
testExe1 testLib1 testLib2 testExe2 testLib3 testLib4 testExe3 testExe1 testLib1 testLib2 testExe2 testLib3 testLib4 testExe3
testExe2lib testLib4lib testLib4libdbg testLib4libopt testExe2lib testLib4lib testLib4libdbg testLib4libopt
testLib6 testLib6
testLibCycleA testLibCycleB
EXPORT exp EXPORT exp
RUNTIME DESTINATION bin RUNTIME DESTINATION bin
LIBRARY DESTINATION lib NAMELINK_SKIP LIBRARY DESTINATION lib NAMELINK_SKIP
@ -116,6 +126,7 @@ export(TARGETS testExe1 testLib1 testLib2 testLib3
) )
export(TARGETS testExe2 testLib4 testLib5 testLib6 testExe3 testExe2lib export(TARGETS testExe2 testLib4 testLib5 testLib6 testExe3 testExe2lib
testLib4lib testLib4libdbg testLib4libopt testLib4lib testLib4libdbg testLib4libopt
testLibCycleA testLibCycleB
NAMESPACE bld_ NAMESPACE bld_
APPEND FILE ExportBuildTree.cmake APPEND FILE ExportBuildTree.cmake
) )

View File

@ -0,0 +1,2 @@
extern int testLibCycleB1(void);
int testLibCycleA1(void) { return testLibCycleB1(); }

View File

@ -0,0 +1,2 @@
extern int testLibCycleB2(void);
int testLibCycleA2(void) { return testLibCycleB2(); }

View File

@ -0,0 +1,2 @@
extern int testLibCycleB3(void);
int testLibCycleA3(void) { return testLibCycleB3(); }

View File

@ -0,0 +1,2 @@
extern int testLibCycleA2(void);
int testLibCycleB1(void) { return testLibCycleA2(); }

View File

@ -0,0 +1,2 @@
extern int testLibCycleA3(void);
int testLibCycleB2(void) { return testLibCycleA3(); }

View File

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

View File

@ -29,6 +29,7 @@ target_link_libraries(imp_testExe1
exp_testLib4 exp_testLib4
exp_testLib5 exp_testLib5
exp_testLib6 exp_testLib6
exp_testLibCycleA
) )
# Try building a plugin to an executable imported from the install tree. # Try building a plugin to an executable imported from the install tree.
@ -60,6 +61,7 @@ target_link_libraries(imp_testExe1b
bld_testLib4 bld_testLib4
bld_testLib5 bld_testLib5
bld_testLib6 bld_testLib6
bld_testLibCycleA
) )
# Try building a plugin to an executable imported from the build tree. # Try building a plugin to an executable imported from the build tree.

View File

@ -6,6 +6,7 @@ extern int testLib4();
extern int testLib4lib(); extern int testLib4lib();
extern int testLib5(); extern int testLib5();
extern int testLib6(); extern int testLib6();
extern int testLibCycleA1();
/* Switch a symbol between debug and optimized builds to make sure the /* Switch a symbol between debug and optimized builds to make sure the
proper library is found from the testLib4 link interface. */ proper library is found from the testLib4 link interface. */
@ -19,6 +20,6 @@ extern testLib4libcfg(void);
int main() int main()
{ {
return (testLib2() + generated_by_testExe1() + testLib3() + testLib4() return (testLib2() + generated_by_testExe1() + testLib3() + testLib4()
+ testLib5() + testLib6() + testLib5() + testLib6() + testLibCycleA1()
+ generated_by_testExe3() + testLib4lib() + testLib4libcfg()); + generated_by_testExe3() + testLib4lib() + testLib4libcfg());
} }