Browse Source

Merge topic 'ExternalProject-depend-INTERFACE'

e1c6df39 ExternalProject: Allow dependencies on INTERFACE libraries
c0502faa ExternalProject: Fix error message typo
Brad King 10 years ago
parent
commit
6189cdda79

+ 17 - 5
Modules/ExternalProject.cmake

@@ -1539,6 +1539,11 @@ function(ExternalProject_Add_StepDependencies name step)
     message(FATAL_ERROR "Cannot find target \"${name}\". Perhaps it has not yet been created using ExternalProject_Add.")
   endif()
 
+  get_property(type TARGET ${name} PROPERTY TYPE)
+  if(NOT type STREQUAL "UTILITY")
+    message(FATAL_ERROR "Target \"${name}\" was not generated by ExternalProject_Add.")
+  endif()
+
   get_property(is_ep TARGET ${name} PROPERTY _EP_IS_EXTERNAL_PROJECT)
   if(NOT is_ep)
     message(FATAL_ERROR "Target \"${name}\" was not generated by ExternalProject_Add.")
@@ -1551,9 +1556,13 @@ function(ExternalProject_Add_StepDependencies name step)
   endif()
 
   if(TARGET ${name}-${step})
+    get_property(type TARGET ${name}-${step} PROPERTY TYPE)
+    if(NOT type STREQUAL "UTILITY")
+      message(FATAL_ERROR "Target \"${name}-${step}\" was not generated by ExternalProject_Add_StepTargets.")
+    endif()
     get_property(is_ep_step TARGET ${name}-${step} PROPERTY _EP_IS_EXTERNAL_PROJECT_STEP)
     if(NOT is_ep_step)
-      message(FATAL_ERROR "Target \"${name}\" was not generated by ExternalProject_Add_StepTargets.")
+      message(FATAL_ERROR "Target \"${name}-${step}\" was not generated by ExternalProject_Add_StepTargets.")
     endif()
   endif()
 
@@ -2034,10 +2043,13 @@ function(_ep_add_configure_command name)
   set(file_deps)
   get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS)
   foreach(dep IN LISTS deps)
-    get_property(is_ep TARGET ${dep} PROPERTY _EP_IS_EXTERNAL_PROJECT)
-    if(is_ep)
-      _ep_get_step_stampfile(${dep} "done" done_stamp_file)
-      list(APPEND file_deps ${done_stamp_file})
+    get_property(dep_type TARGET ${dep} PROPERTY TYPE)
+    if(dep_type STREQUAL "UTILITY")
+      get_property(is_ep TARGET ${dep} PROPERTY _EP_IS_EXTERNAL_PROJECT)
+      if(is_ep)
+        _ep_get_step_stampfile(${dep} "done" done_stamp_file)
+        list(APPEND file_deps ${done_stamp_file})
+      endif()
     endif()
   endforeach()
 

+ 15 - 0
Tests/ExternalProjectSubdir/CMakeLists.txt

@@ -2,6 +2,19 @@ cmake_minimum_required(VERSION 3.2)
 project(ExternalProjectSubdir NONE)
 include(ExternalProject)
 
+# Remove the custom target output to be sure it runs in an
+# incremental test.  Skip this on VS 6 because it sometimes
+# re-runs CMake after the custom command runs.
+if(NOT CMAKE_GENERATOR STREQUAL "Visual Studio 6")
+  file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/PreSubdir1.txt)
+endif()
+
+add_custom_target(PreSubdir1
+  COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/PreSubdir1.txt
+  )
+add_library(PreSubdir1Interface INTERFACE)
+add_dependencies(PreSubdir1Interface PreSubdir1)
+
 ExternalProject_Add(Subdir1
   SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Subdir1
   BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/Subdir1
@@ -11,4 +24,6 @@ ExternalProject_Add(Subdir1
 
   BUILD_COMMAND ""
   INSTALL_COMMAND ""
+
+  DEPENDS PreSubdir1Interface
   )

+ 4 - 0
Tests/ExternalProjectSubdir/Subdir1/CMakeLists.txt

@@ -8,3 +8,7 @@ endif()
 if(NOT "${GENEX_VAR}" STREQUAL "GENEX_VALUE")
   message(SEND_ERROR "GENEX_VAR != 'GENEX_VALUE'")
 endif()
+
+if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/../PreSubdir1.txt")
+  message(SEND_ERROR "../PreSubdir1.txt not provided!")
+endif()

+ 1 - 0
Tests/RunCMake/ExternalProject/Add_StepDependencies_iface-result.txt

@@ -0,0 +1 @@
+1

+ 5 - 0
Tests/RunCMake/ExternalProject/Add_StepDependencies_iface-stderr.txt

@@ -0,0 +1,5 @@
+^CMake Error at .*/Modules/ExternalProject.cmake:[0-9]+ \(message\):
+  Target "SomeInterface" was not generated by ExternalProject_Add.
+Call Stack \(most recent call first\):
+  Add_StepDependencies_iface.cmake:[0-9]+ \(ExternalProject_Add_StepDependencies\)
+  CMakeLists.txt:[0-9]+ \(include\)$

+ 4 - 0
Tests/RunCMake/ExternalProject/Add_StepDependencies_iface.cmake

@@ -0,0 +1,4 @@
+include(ExternalProject)
+
+add_library(SomeInterface INTERFACE)
+ExternalProject_Add_StepDependencies(SomeInterface step dep)

+ 1 - 0
Tests/RunCMake/ExternalProject/Add_StepDependencies_iface_step-result.txt

@@ -0,0 +1 @@
+1

+ 5 - 0
Tests/RunCMake/ExternalProject/Add_StepDependencies_iface_step-stderr.txt

@@ -0,0 +1,5 @@
+^CMake Error at .*/Modules/ExternalProject.cmake:[0-9]+ \(message\):
+  Target "MyProj-IFace" was not generated by ExternalProject_Add_StepTargets.
+Call Stack \(most recent call first\):
+  Add_StepDependencies_iface_step.cmake:[0-9]+ \(ExternalProject_Add_StepDependencies\)
+  CMakeLists.txt:[0-9]+ \(include\)$

+ 11 - 0
Tests/RunCMake/ExternalProject/Add_StepDependencies_iface_step.cmake

@@ -0,0 +1,11 @@
+include(ExternalProject)
+
+ExternalProject_Add(MyProj
+  DOWNLOAD_COMMAND ""
+  CONFIGURE_COMMAND ""
+  BUILD_COMMAND ""
+  INSTALL_COMMAND ""
+  )
+
+add_library(MyProj-IFace INTERFACE)
+ExternalProject_Add_StepDependencies(MyProj IFace dep)

+ 2 - 0
Tests/RunCMake/ExternalProject/RunCMakeTest.cmake

@@ -5,4 +5,6 @@ run_cmake(CMAKE_CACHE_DEFAULT_ARGS)
 run_cmake(CMAKE_CACHE_mix)
 run_cmake(NO_DEPENDS)
 run_cmake(Add_StepDependencies)
+run_cmake(Add_StepDependencies_iface)
+run_cmake(Add_StepDependencies_iface_step)
 run_cmake(Add_StepDependencies_no_target)