summaryrefslogtreecommitdiffstats
path: root/Tests/OutOfSource
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/OutOfSource')
-rw-r--r--Tests/OutOfSource/CMakeLists.txt18
-rw-r--r--Tests/OutOfSource/OutOfSourceSubdir/CMakeLists.txt62
-rw-r--r--Tests/OutOfSource/OutOfSourceSubdir/simple.cxx34
-rw-r--r--Tests/OutOfSource/OutOfSourceSubdir/simple.cxx.in1
-rw-r--r--Tests/OutOfSource/OutOfSourceSubdir/testlib.cxx6
-rw-r--r--Tests/OutOfSource/OutOfSourceSubdir/testlib.h11
-rw-r--r--Tests/OutOfSource/SubDir/CMakeLists.txt10
-rw-r--r--Tests/OutOfSource/SubDir/subdir.c4
-rw-r--r--Tests/OutOfSource/simple.cxx4
-rw-r--r--Tests/OutOfSource/testdp.h.in1
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}";