Pārlūkot izejas kodu

Build each library only once instead of once for each test.

Stephen Kelly 14 gadi atpakaļ
vecāks
revīzija
08271ec7d3

+ 26 - 4
Tests/Module/GenerateExportHeader/CMakeLists.txt

@@ -55,6 +55,29 @@ else()
   endif()
 endif()
 
+set(DEPS
+  libshared
+  libstatic
+  lib_shared_and_static
+)
+
+foreach(DEP ${DEPS})
+  try_compile(Result ${CMAKE_CURRENT_BINARY_DIR}/${DEP}_build
+    ${CMAKE_CURRENT_SOURCE_DIR}/${DEP}
+    ${DEP}
+    OUTPUT_VARIABLE Out
+  )
+  if (NOT Result)
+    message("OUTPUT: ${Out}")
+  endif()
+endforeach()
+
+# The _do_build macro is called from a child scope, where
+# the current source and binary dir are different. Save them here
+# for use in the macro.
+set(TEST_TOP_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+set(TEST_TOP_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
+
 
 # We seem to get race conditions is writing this stuff to the same file at least on MinGW
 # So to write to separate source and build directories, we use a count to differentiate.
@@ -67,8 +90,6 @@ macro(_do_build Include Library LibrarySource Source)
     "int main() { ${Source}; }\n"
   )
 
-  file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/../${LibrarySource}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/test${COUNT}")
-
   if ("${Library}" STREQUAL "static_variant")
     set(CONDITIONAL_STATIC_DEFINE "add_definitions(-DLIBSHARED_AND_STATIC_STATIC_DEFINE)\n")
   endif()
@@ -90,9 +111,10 @@ macro(_do_build Include Library LibrarySource Source)
     "  add_definitions(${ERROR_FLAG})\n"
     "endif()\n"
 
-    "add_subdirectory(\"${LibrarySource}\")\n"
+    "include(\"${TEST_TOP_BINARY_DIR}/${LibrarySource}_build/Targets.cmake\")\n"
 
-    "include_directories(\"${LibrarySource}\" \"\${CMAKE_CURRENT_BINARY_DIR}/${LibrarySource}\")\n"
+    "include_directories(\"${TEST_TOP_SOURCE_DIR}/${LibrarySource}\"\n"
+    "                    \"${TEST_TOP_BINARY_DIR}/${LibrarySource}_build\")\n"
 
     "${CONDITIONAL_STATIC_DEFINE}"
 

+ 12 - 1
Tests/Module/GenerateExportHeader/lib_shared_and_static/CMakeLists.txt

@@ -1,4 +1,13 @@
-project(shared_and_static)
+
+cmake_minimum_required(VERSION 2.8)
+
+project(lib_shared_and_static)
+
+include(GenerateExportHeader)
+
+add_compiler_export_flags()
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
 
 set(lib_SRCS
   libshared_and_static.cpp
@@ -10,3 +19,5 @@ add_library(static_variant ${lib_SRCS})
 generate_export_header(shared_variant BASE_NAME libshared_and_static)
 
 set_target_properties(static_variant PROPERTIES COMPILE_FLAGS -DLIBSHARED_AND_STATIC_STATIC_DEFINE)
+
+export(TARGETS shared_variant static_variant FILE Targets.cmake)

+ 10 - 0
Tests/Module/GenerateExportHeader/libshared/CMakeLists.txt

@@ -1,6 +1,16 @@
 
+cmake_minimum_required(VERSION 2.8)
+
 project(libshared)
 
+include(GenerateExportHeader)
+
+add_compiler_export_flags()
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
 add_library(libshared SHARED libshared.cpp)
 
 generate_export_header(libshared)
+
+export(TARGETS libshared FILE Targets.cmake)

+ 10 - 0
Tests/Module/GenerateExportHeader/libstatic/CMakeLists.txt

@@ -1,8 +1,18 @@
 
+cmake_minimum_required(VERSION 2.8)
+
 project(libstatic)
 
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+include(GenerateExportHeader)
+
+add_compiler_export_flags()
+
 # Show that the export header has no effect on a static library.
 
 add_library(libstatic STATIC libstatic.cpp)
 
 generate_export_header(libstatic)
+
+export(TARGETS libstatic FILE Targets.cmake)