diff options
Diffstat (limited to 'Tests/LinkLineOrder')
-rw-r--r-- | Tests/LinkLineOrder/CMakeLists.txt | 36 | ||||
-rw-r--r-- | Tests/LinkLineOrder/Exec1.c | 8 | ||||
-rw-r--r-- | Tests/LinkLineOrder/Exec2.c | 8 | ||||
-rw-r--r-- | Tests/LinkLineOrder/NoDepA.c | 7 | ||||
-rw-r--r-- | Tests/LinkLineOrder/NoDepB.c | 4 | ||||
-rw-r--r-- | Tests/LinkLineOrder/NoDepC.c | 7 | ||||
-rw-r--r-- | Tests/LinkLineOrder/NoDepE.c | 11 | ||||
-rw-r--r-- | Tests/LinkLineOrder/NoDepF.c | 11 | ||||
-rw-r--r-- | Tests/LinkLineOrder/NoDepX.c | 7 | ||||
-rw-r--r-- | Tests/LinkLineOrder/NoDepY.c | 4 | ||||
-rw-r--r-- | Tests/LinkLineOrder/NoDepZ.c | 7 | ||||
-rw-r--r-- | Tests/LinkLineOrder/One.c | 10 | ||||
-rw-r--r-- | Tests/LinkLineOrder/Two.c | 8 |
13 files changed, 128 insertions, 0 deletions
diff --git a/Tests/LinkLineOrder/CMakeLists.txt b/Tests/LinkLineOrder/CMakeLists.txt new file mode 100644 index 0000000..78455e9 --- /dev/null +++ b/Tests/LinkLineOrder/CMakeLists.txt @@ -0,0 +1,36 @@ +project( LinkLineOrder ) + +# This tests ensures that the order of libraries are preserved when +# they don't have dependency information, even if they are deep in the +# dependency tree. + +# NoDepC depends on NoDepA which depends on NoDepB. NoDepE and NoDepF +# are dependent on each other (recursive dependency). However, CMake +# has no information about these libraries except for the order they +# are specified in One. We must make sure we don't lose that. + +add_library( NoDepA NoDepA.c ) +add_library( NoDepB NoDepB.c ) +add_library( NoDepC NoDepC.c ) +add_library( NoDepE NoDepE.c ) +add_library( NoDepF NoDepF.c ) + +add_library( One One.c ) +target_link_libraries( One NoDepC NoDepA NoDepB NoDepE NoDepF NoDepE ) + +add_executable( Exec1 Exec1.c ) +target_link_libraries( Exec1 One ) + + +# Similar situation as One, except at a different level of the +# dependency tree. This makes sure that the order is presevered +# everywhere in the graph. +add_library( NoDepX NoDepX.c ) +add_library( NoDepY NoDepY.c ) +add_library( NoDepZ NoDepZ.c ) + +add_library( Two Two.c ) +target_link_libraries( Two One NoDepZ NoDepX NoDepY ) + +add_executable( Exec2 Exec2.c ) +target_link_libraries( Exec2 Two ) diff --git a/Tests/LinkLineOrder/Exec1.c b/Tests/LinkLineOrder/Exec1.c new file mode 100644 index 0000000..9bbf0f6 --- /dev/null +++ b/Tests/LinkLineOrder/Exec1.c @@ -0,0 +1,8 @@ +/* Directly depends on One */ +void OneFunc(); + +int main() +{ + OneFunc(); + return 0; +} diff --git a/Tests/LinkLineOrder/Exec2.c b/Tests/LinkLineOrder/Exec2.c new file mode 100644 index 0000000..91b8575 --- /dev/null +++ b/Tests/LinkLineOrder/Exec2.c @@ -0,0 +1,8 @@ +/* Directly depends on Two */ +void TwoFunc(); + +int main() +{ + TwoFunc(); + return 0; +} diff --git a/Tests/LinkLineOrder/NoDepA.c b/Tests/LinkLineOrder/NoDepA.c new file mode 100644 index 0000000..76f97bc --- /dev/null +++ b/Tests/LinkLineOrder/NoDepA.c @@ -0,0 +1,7 @@ +/* depends on NoDepB */ +void NoDepB_func(); + +void NoDepA_func() +{ + NoDepB_func(); +} diff --git a/Tests/LinkLineOrder/NoDepB.c b/Tests/LinkLineOrder/NoDepB.c new file mode 100644 index 0000000..fa89ae9 --- /dev/null +++ b/Tests/LinkLineOrder/NoDepB.c @@ -0,0 +1,4 @@ +/* No dependencies */ +void NoDepB_func() +{ +} diff --git a/Tests/LinkLineOrder/NoDepC.c b/Tests/LinkLineOrder/NoDepC.c new file mode 100644 index 0000000..f05d962 --- /dev/null +++ b/Tests/LinkLineOrder/NoDepC.c @@ -0,0 +1,7 @@ +/* depends on NoDepA */ +void NoDepA_func(); + +void NoDepC_func() +{ + NoDepA_func(); +} diff --git a/Tests/LinkLineOrder/NoDepE.c b/Tests/LinkLineOrder/NoDepE.c new file mode 100644 index 0000000..e1ba749 --- /dev/null +++ b/Tests/LinkLineOrder/NoDepE.c @@ -0,0 +1,11 @@ +/* depends on NoDepF */ +void NoDepF_func(); + +void NoDepE_func() +{ + static int firstcall = 1; + if( firstcall ) { + firstcall = 0; + NoDepF_func(); + } +} diff --git a/Tests/LinkLineOrder/NoDepF.c b/Tests/LinkLineOrder/NoDepF.c new file mode 100644 index 0000000..8311cb8 --- /dev/null +++ b/Tests/LinkLineOrder/NoDepF.c @@ -0,0 +1,11 @@ +/* depends on NoDepE */ +void NoDepE_func(); + +void NoDepF_func() +{ + static int firstcall = 1; + if( firstcall ) { + firstcall = 0; + NoDepE_func(); + } +} diff --git a/Tests/LinkLineOrder/NoDepX.c b/Tests/LinkLineOrder/NoDepX.c new file mode 100644 index 0000000..c895dd1 --- /dev/null +++ b/Tests/LinkLineOrder/NoDepX.c @@ -0,0 +1,7 @@ +/* depends on NoDepY*/ +void NoDepY_func(); + +void NoDepX_func() +{ + NoDepY_func(); +} diff --git a/Tests/LinkLineOrder/NoDepY.c b/Tests/LinkLineOrder/NoDepY.c new file mode 100644 index 0000000..1e6a4ae --- /dev/null +++ b/Tests/LinkLineOrder/NoDepY.c @@ -0,0 +1,4 @@ +/* No dependencies */ +void NoDepY_func() +{ +} diff --git a/Tests/LinkLineOrder/NoDepZ.c b/Tests/LinkLineOrder/NoDepZ.c new file mode 100644 index 0000000..045e570 --- /dev/null +++ b/Tests/LinkLineOrder/NoDepZ.c @@ -0,0 +1,7 @@ +/* depends on NoDepX */ +void NoDepX_func(); + +void NoDepZ_func() +{ + NoDepX_func(); +} diff --git a/Tests/LinkLineOrder/One.c b/Tests/LinkLineOrder/One.c new file mode 100644 index 0000000..b23b1ec --- /dev/null +++ b/Tests/LinkLineOrder/One.c @@ -0,0 +1,10 @@ +/* depends on NoDepC and NoDepE (and hence on NoDepA, NoDepB and */ +/* NoDepF) */ +void NoDepC_func(); +void NoDepE_func(); + +void OneFunc() +{ + NoDepC_func(); + NoDepE_func(); +} diff --git a/Tests/LinkLineOrder/Two.c b/Tests/LinkLineOrder/Two.c new file mode 100644 index 0000000..6bffaa8 --- /dev/null +++ b/Tests/LinkLineOrder/Two.c @@ -0,0 +1,8 @@ +void OneFunc(); +void NoDepZ_func(); + +void TwoFunc() +{ + OneFunc(); + NoDepZ_func(); +} |