Bläddra i källkod

Test per-config OUTPUT_DIRECTORY properties

We test (ARCHIVE|LIBRARY|RUNTIME)_OUTPUT_DIRECTORY_<CONFIG> properties
by building COnly as a subdirectory and setting the properties to put
its files in specific locations.  We build an executable that verifies
the targets actually appear where expected.
Brad King 16 år sedan
förälder
incheckning
28c3d59ed9
4 ändrade filer med 88 tillägg och 0 borttagningar
  1. 1 0
      Tests/CMakeLists.txt
  2. 35 0
      Tests/OutDir/CMakeLists.txt
  3. 24 0
      Tests/OutDir/OutDir.c
  4. 28 0
      Tests/OutDir/OutDir.cmake

+ 1 - 0
Tests/CMakeLists.txt

@@ -117,6 +117,7 @@ IF(BUILD_TESTING)
   ADD_TEST_MACRO(COnly COnly)
   ADD_TEST_MACRO(CxxOnly CxxOnly)
   ADD_TEST_MACRO(IPO COnly/COnly)
+  ADD_TEST_MACRO(OutDir runtime/OutDir)
   ADD_TEST_MACRO(NewlineArgs NewlineArgs)
   ADD_TEST_MACRO(SetLang SetLang)
   ADD_TEST_MACRO(ExternalOBJ ExternalOBJ)

+ 35 - 0
Tests/OutDir/CMakeLists.txt

@@ -0,0 +1,35 @@
+cmake_minimum_required(VERSION 2.8)
+project(OutDir C)
+
+if(CMAKE_CONFIGURATION_TYPES)
+  foreach(config ${CMAKE_CONFIGURATION_TYPES})
+    string(TOUPPER "${config}" CONFIG)
+    list(APPEND configs "${CONFIG}")
+  endforeach()
+  set(CMAKE_BUILD_TYPE)
+elseif(NOT CMAKE_BUILD_TYPE)
+  set(CMAKE_BUILD_TYPE Debug)
+endif()
+
+if(CMAKE_BUILD_TYPE)
+  string(TOUPPER "${CMAKE_BUILD_TYPE}" configs)
+endif()
+
+set(top "${OutDir_BINARY_DIR}")
+foreach(config ${configs})
+  foreach(type archive runtime library)
+    string(TOUPPER "${type}" TYPE)
+    set(CMAKE_${TYPE}_OUTPUT_DIRECTORY_${config} "${top}/${type}")
+    file(REMOVE_RECURSE "${top}/${type}")
+  endforeach()
+endforeach()
+
+add_subdirectory(../COnly COnly)
+
+add_custom_command(
+  OUTPUT OutDir.h
+  COMMAND ${CMAKE_COMMAND} -Dtop=${top} -P ${OutDir_SOURCE_DIR}/OutDir.cmake
+  DEPENDS COnly ${OutDir_SOURCE_DIR}/OutDir.cmake
+  )
+include_directories(${top})
+add_executable(OutDir OutDir.c OutDir.h)

+ 24 - 0
Tests/OutDir/OutDir.c

@@ -0,0 +1,24 @@
+#include <OutDir.h>
+#include <stdio.h>
+
+int main(void)
+{
+  const char* files[] = {TESTC1_LIB, TESTC2_LIB, CONLY_EXE, 0};
+  int result = 0;
+  const char** fname = files;
+  for(;*fname;++fname)
+    {
+    FILE* f = fopen(*fname, "rb");
+    if(f)
+      {
+      printf("found: [%s]\n", *fname);
+      fclose(f);
+      }
+    else
+      {
+      printf("error: [%s]\n", *fname);
+      result = 1;
+      }
+    }
+  return result;
+}

+ 28 - 0
Tests/OutDir/OutDir.cmake

@@ -0,0 +1,28 @@
+set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
+set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".a" ".so" ".dylib")
+
+find_library(TESTC1_LIB
+  NAMES testc1 testc1_test_debug_postfix
+  PATHS ${top}/archive
+  NO_DEFAULT_PATH)
+
+find_library(TESTC2_LIB
+  NAMES testc2 testc2_test_debug_postfix
+  PATHS ${top}/archive ${top}/library
+  NO_DEFAULT_PATH)
+
+find_program(CONLY_EXE
+  NAMES COnly
+  PATHS ${top}/runtime
+  NO_DEFAULT_PATH)
+
+file(WRITE ${top}/OutDir.h "/* Generated by ${CMAKE_CURRENT_LIST_FILE} */
+#ifndef OutDir_h
+#define OutDir_h
+
+#define TESTC1_LIB \"${TESTC1_LIB}\"
+#define TESTC2_LIB \"${TESTC2_LIB}\"
+#define CONLY_EXE  \"${CONLY_EXE}\"
+
+#endif
+")