浏览代码

ENH: Added test for generation of files listed explicitly as sources but not used during the build of a target.

Brad King 19 年之前
父节点
当前提交
09f2be12b8
共有 3 个文件被更改,包括 33 次插入11 次删除
  1. 19 10
      Tests/CustomCommand/CMakeLists.txt
  2. 1 0
      Tests/CustomCommand/config.h.in
  3. 13 1
      Tests/CustomCommand/foo.in

+ 19 - 10
Tests/CustomCommand/CMakeLists.txt

@@ -131,22 +131,31 @@ ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.c
   ${PROJECT_BINARY_DIR}/foo.c
   )
 
-# These object dependencies can be removed to test the
-# auto-object-depends feature of the Makefile generator.  Currently
-# the feature does not seem to work in Visual Studio generators so
-# these dependencies are needed.
-#SET_SOURCE_FILES_PROPERTIES(${PROJECT_BINARY_DIR}/foo.c 
-#PROPERTIES
-#  OBJECT_DEPENDS "${PROJECT_BINARY_DIR}/doc1.h;${PROJECT_BINARY_DIR}/foo.h"
-#)
-
-# add the library
+# Add custom command to generate not_included.h, which is a header
+# file that is not included by any source in this project.  This will
+# test whether all custom command outputs explicitly listed as sources
+# get generated even if they are not needed by an object file.
+ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/not_included.h
+  DEPENDS ${PROJECT_SOURCE_DIR}/foo.h.in
+  COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/foo.h.in
+                                   ${PROJECT_BINARY_DIR}/not_included.h
+  )
+
+# Tell the executable where to find not_included.h.
+CONFIGURE_FILE(
+  ${PROJECT_SOURCE_DIR}/config.h.in
+  ${PROJECT_BINARY_DIR}/config.h
+  @ONLY IMMEDIATE
+  )
+
+# add the executable
 ADD_EXECUTABLE(CustomCommand 
   ${PROJECT_BINARY_DIR}/foo.h
   ${PROJECT_BINARY_DIR}/foo.c
   ${PROJECT_BINARY_DIR}/wrapped.c
   ${PROJECT_BINARY_DIR}/wrapped_help.c
   ${PROJECT_BINARY_DIR}/generated.c
+  ${PROJECT_BINARY_DIR}/not_included.h
   )
 
 TARGET_LINK_LIBRARIES(CustomCommand GeneratedHeader)

+ 1 - 0
Tests/CustomCommand/config.h.in

@@ -0,0 +1 @@
+#define PROJECT_BINARY_DIR "@PROJECT_BINARY_DIR@"

+ 13 - 1
Tests/CustomCommand/foo.in

@@ -1,5 +1,8 @@
 #include "doc1.h"
 #include "foo.h"
+#include "config.h"
+
+#include <stdio.h>
 
 int generated();
 int wrapped();
@@ -8,7 +11,16 @@ int main ()
 {
   if (generated()*wrapped()*doc() == 3*5*7)
     {
-    return 0;
+    FILE* fin = fopen(PROJECT_BINARY_DIR "/not_included.h", "r");
+    if(fin)
+      {
+      fclose(fin);
+      return 0;
+      }
+    else
+      {
+      return -2;
+      }
     }
   
   return -1;