Explorar el Código

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.
Brad King hace 16 años
padre
commit
d259128894

+ 11 - 0
Tests/ExportImport/Export/CMakeLists.txt

@@ -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
   )
   )

+ 2 - 0
Tests/ExportImport/Export/testLibCycleA1.c

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

+ 2 - 0
Tests/ExportImport/Export/testLibCycleA2.c

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

+ 2 - 0
Tests/ExportImport/Export/testLibCycleA3.c

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

+ 2 - 0
Tests/ExportImport/Export/testLibCycleB1.c

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

+ 2 - 0
Tests/ExportImport/Export/testLibCycleB2.c

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

+ 1 - 0
Tests/ExportImport/Export/testLibCycleB3.c

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

+ 2 - 0
Tests/ExportImport/Import/A/CMakeLists.txt

@@ -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.

+ 2 - 1
Tests/ExportImport/Import/A/imp_testExe1.c

@@ -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());
 }
 }