diff options
Diffstat (limited to 'Tests/OutOfSource')
-rw-r--r-- | Tests/OutOfSource/CMakeLists.txt | 18 | ||||
-rw-r--r-- | Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt | 62 | ||||
-rw-r--r-- | Tests/OutOfSource/OutOfSourceSubdir/simple.cxx | 34 | ||||
-rw-r--r-- | Tests/OutOfSource/OutOfSourceSubdir/simple.cxx.in | 1 | ||||
-rw-r--r-- | Tests/OutOfSource/OutOfSourceSubdir/testlib.cxx | 6 | ||||
-rw-r--r-- | Tests/OutOfSource/OutOfSourceSubdir/testlib.h | 11 | ||||
-rw-r--r-- | Tests/OutOfSource/SubDir/CMakeLists.txt | 10 | ||||
-rw-r--r-- | Tests/OutOfSource/SubDir/subdir.c | 4 | ||||
-rw-r--r-- | Tests/OutOfSource/simple.cxx | 4 | ||||
-rw-r--r-- | Tests/OutOfSource/testdp.h.in | 1 |
10 files changed, 151 insertions, 0 deletions
diff --git a/Tests/OutOfSource/CMakeLists.txt b/Tests/OutOfSource/CMakeLists.txt new file mode 100644 index 0000000..4687882 --- /dev/null +++ b/Tests/OutOfSource/CMakeLists.txt @@ -0,0 +1,18 @@ +# a simple test case +cmake_minimum_required (VERSION 2.6) +project (OutOfSource) + +add_subdirectory(SubDir) + +get_directory_property(ANIMAL DIRECTORY OutOfSourceSubdir DEFINITION WEASELS) +get_directory_property(ANIMALREL DIRECTORY SubDir/../OutOfSourceSubdir DEFINITION WEASELS) +if(NOT "${ANIMAL}" STREQUAL "${ANIMALREL}") + message(FATAL_ERROR "GET_DIRECTORY_PROPERTY does not seem to collapse paths.") +endif() + +configure_file( + ${OutOfSource_SOURCE_DIR}/testdp.h.in + ${OutOfSource_BINARY_DIR}/SubDir/OutOfSourceSubdir/testdp.h + ) + +set(KEN 1) diff --git a/Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt b/Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt new file mode 100644 index 0000000..76a93d2 --- /dev/null +++ b/Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt @@ -0,0 +1,62 @@ +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +if ("${PROJECT_SOURCE_DIR}" STREQUAL "${ANOTHER_PROJ_SOURCE_DIR}") + set(BUILD_SHARED_LIBS 1) + + # Construct a source file outside the tree whose full path is close to + # the path length limit. This will cause the full path to the object + # file in the build tree to exceed the maximum path length which will + # test cmLocalGenerator::CreateSafeUniqueObjectFileName. + get_filename_component(DEEPDIR + ${OutOfSource_BINARY_DIR}/../OutOfSourceDeep/deeper ABSOLUTE) + + # Test giving the generator a custom limit. + set(CMAKE_OBJECT_PATH_MAX 220) + + # Use a separate variable for computation. + set(MAXPATH "${CMAKE_OBJECT_PATH_MAX}") + + # VS adds "OutOfSource/SubDir/OutOfSourceSubdir/../../../" to the + # path of the source file for no good reason. Reduce the length + # limit by 46 characters to account for it. It should still be long + # enough to require special object file name conversion. + if(${CMAKE_GENERATOR} MATCHES "Visual Studio") + math(EXPR MAXPATH "${MAXPATH} - 46") + endif() + + # Ninja imposes a maximum path component count of 30. Permit more + # path components in the source path. + if(${CMAKE_GENERATOR} MATCHES "Ninja") + math(EXPR MAXPATH "${MAXPATH} - 44") + endif() + + # MAXPATH less 25 for last /and/deeper/simple.cxx part and small safety + math(EXPR MAXPATH "${MAXPATH} - 25") + string(LENGTH "${DEEPDIR}" DEEPDIR_LEN) + while("${DEEPDIR_LEN}" LESS "${MAXPATH}") + set(DEEPDIR ${DEEPDIR}/and/deeper) + string(LENGTH "${DEEPDIR}" DEEPDIR_LEN) + endwhile() + set(DEEPSRC ${DEEPDIR}/simple.cxx) + string(LENGTH "${DEEPSRC}" DEEPSRC_LEN) + configure_file(simple.cxx.in ${DEEPSRC} COPYONLY) + + # Watcom WMake seems to have problems with long command lines. Just + # disable this part of the test until it is resolved. + if(${CMAKE_GENERATOR} MATCHES "Watcom WMake") + set(DEEPSRC "") + add_definitions(-DNO_DEEPSRC) + endif() + + add_library(testlib testlib.cxx) + add_executable (simple simple.cxx ../simple.cxx ${DEEPSRC}) + target_link_libraries(simple testlib outlib) +endif () + +# test getting a definition from a subdir +set (WEASELS SIZZLING) + +get_directory_property(incDirs INCLUDE_DIRECTORIES) +if(NOT incDirs) + message(FATAL_ERROR "get_directory_property(INCLUDE_DIRECTORIES) returned empty list") +endif() diff --git a/Tests/OutOfSource/OutOfSourceSubdir/simple.cxx b/Tests/OutOfSource/OutOfSourceSubdir/simple.cxx new file mode 100644 index 0000000..12cbd1a --- /dev/null +++ b/Tests/OutOfSource/OutOfSourceSubdir/simple.cxx @@ -0,0 +1,34 @@ +#include <stdio.h> +#include <string.h> + +#include "testdp.h" +#include "testlib.h" + +extern int simple(); +#ifndef NO_DEEPSRC +extern int simple2(); +#endif +extern "C" int outlib(); + +int main() +{ + if (simple() != 123) { + return -3; + } + if (strcmp(animal, "SIZZLING")) { + fprintf(stderr, "Get definitions from a subdir did not work\n"); + return -2; + } + if (TestLib() != 1.0) { + return -1; + } + if (outlib() != 456) { + return -4; + } +#ifndef NO_DEEPSRC + if (simple2() != 789) { + return -5; + } +#endif + return 0; +} diff --git a/Tests/OutOfSource/OutOfSourceSubdir/simple.cxx.in b/Tests/OutOfSource/OutOfSourceSubdir/simple.cxx.in new file mode 100644 index 0000000..8339b7c --- /dev/null +++ b/Tests/OutOfSource/OutOfSourceSubdir/simple.cxx.in @@ -0,0 +1 @@ +int simple2() { return 789; } diff --git a/Tests/OutOfSource/OutOfSourceSubdir/testlib.cxx b/Tests/OutOfSource/OutOfSourceSubdir/testlib.cxx new file mode 100644 index 0000000..1f78bd3 --- /dev/null +++ b/Tests/OutOfSource/OutOfSourceSubdir/testlib.cxx @@ -0,0 +1,6 @@ +#include "testlib.h" + +float TestLib() +{ + return 1.0; +} diff --git a/Tests/OutOfSource/OutOfSourceSubdir/testlib.h b/Tests/OutOfSource/OutOfSourceSubdir/testlib.h new file mode 100644 index 0000000..3e012d2 --- /dev/null +++ b/Tests/OutOfSource/OutOfSourceSubdir/testlib.h @@ -0,0 +1,11 @@ +#ifdef _WIN32 +# ifdef testlib_EXPORTS +# define CM_TEST_LIB_EXPORT __declspec(dllexport) +# else +# define CM_TEST_LIB_EXPORT __declspec(dllimport) +# endif +#else +# define CM_TEST_LIB_EXPORT +#endif + +CM_TEST_LIB_EXPORT float TestLib(); diff --git a/Tests/OutOfSource/SubDir/CMakeLists.txt b/Tests/OutOfSource/SubDir/CMakeLists.txt new file mode 100644 index 0000000..e18dbb9 --- /dev/null +++ b/Tests/OutOfSource/SubDir/CMakeLists.txt @@ -0,0 +1,10 @@ +project(ANOTHER_PROJ) + +# subdir to an out of source and out of binary directory +add_subdirectory(${OutOfSource_SOURCE_DIR}/../OutOfBinary + ${OutOfSource_BINARY_DIR}/../OutOfBinary) + +# subdir to a sibling dir +add_subdirectory(${OutOfSource_SOURCE_DIR}/${KEN}OutOfSourceSubdir OutOfSourceSubdir ) + +add_library(subdir subdir.c) diff --git a/Tests/OutOfSource/SubDir/subdir.c b/Tests/OutOfSource/SubDir/subdir.c new file mode 100644 index 0000000..abf4e18 --- /dev/null +++ b/Tests/OutOfSource/SubDir/subdir.c @@ -0,0 +1,4 @@ +int subdir(void) +{ + return 0; +} diff --git a/Tests/OutOfSource/simple.cxx b/Tests/OutOfSource/simple.cxx new file mode 100644 index 0000000..ffe0db9 --- /dev/null +++ b/Tests/OutOfSource/simple.cxx @@ -0,0 +1,4 @@ +int simple() +{ + return 123; +} diff --git a/Tests/OutOfSource/testdp.h.in b/Tests/OutOfSource/testdp.h.in new file mode 100644 index 0000000..2ca99d5 --- /dev/null +++ b/Tests/OutOfSource/testdp.h.in @@ -0,0 +1 @@ +char *animal = "${ANIMAL}"; |