diff options
author | Amitha Perera <perera@cs.rpi.edu> | 2002-11-19 18:01:05 -0500 |
---|---|---|
committer | Amitha Perera <perera@cs.rpi.edu> | 2002-11-19 18:01:05 -0500 |
commit | 939035ad91aff5de5a1b514176cd2765a1b9a728 (patch) | |
tree | 9994ce3571301afd9a375bd50eda63603b4de202 /Tests/LinkLineOrder | |
parent | 7140c6f364c55084d5e581cc7e603032ec4087b9 (diff) | |
download | cmake-939035ad91aff5de5a1b514176cd2765a1b9a728.tar.gz |
BUG: the dependency analysis would incorrectly alphabetically re-order the
link lines, which affects external libraries pulled up from deep within
the dependency tree. Fixed by preserving order everywhere.
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 | 7 |
13 files changed, 127 insertions, 0 deletions
diff --git a/Tests/LinkLineOrder/CMakeLists.txt b/Tests/LinkLineOrder/CMakeLists.txt new file mode 100644 index 0000000000..21a502217b --- /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 0000000000..1948129603 --- /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 0000000000..013d94e8f8 --- /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 0000000000..4f4904c679 --- /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 0000000000..eadd895576 --- /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 0000000000..00c1af4193 --- /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 0000000000..4c5d329e5f --- /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 0000000000..86db248acf --- /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 0000000000..4a3a15f4ce --- /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 0000000000..e6e3078ee2 --- /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 0000000000..fab10b656a --- /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 0000000000..7131c1bcd3 --- /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 0000000000..794c023502 --- /dev/null +++ b/Tests/LinkLineOrder/Two.c @@ -0,0 +1,7 @@ +void OneFunc(); + +void TwoFunc() +{ + OneFunc(); + NoDepZ_func(); +} |