Ken Martin преди 22 години
родител
ревизия
7b3f2d4420

+ 105 - 0
Tests/CustomCommand/CMakeLists.txt

@@ -0,0 +1,105 @@
+#
+# Wrapping
+#
+PROJECT (CustomCommand)
+
+#
+# Lib and exe path
+#
+SET (LIBRARY_OUTPUT_PATH 
+     ${PROJECT_BINARY_DIR}/bin/ CACHE PATH 
+     "Single output directory for building all libraries.")
+
+SET (EXECUTABLE_OUTPUT_PATH 
+     ${PROJECT_BINARY_DIR}/bin/ CACHE PATH 
+     "Single output directory for building all executables.")
+
+################################################################
+#
+#  First test using a compiled generator to create a .c file
+#
+################################################################
+# add the executable that will generate the file
+ADD_EXECUTABLE(generator generator.c)
+
+# the folowing assumes that a cmSourceFile
+# is instantiated for the output, with GENERATED 1
+# at the end of the day this becomes a what in VS ?
+ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/generated.c
+      DEPENDS generator
+      COMMAND ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/generator
+      ARGS ${PROJECT_BINARY_DIR}/generated.c
+      )
+
+################################################################
+#
+#  Test using a wrapper to wrap a header file
+#
+################################################################
+# add the executable that will generate the file
+ADD_EXECUTABLE(wrapper wrapper.c)
+
+# the following assumes that a cmSourceFile
+# is instantiated for the output, with GENERATED 1
+# at the end of the day this becomes a what in VS ?
+ADD_CUSTOM_COMMAND(
+      OUTPUT ${PROJECT_BINARY_DIR}/wrapped.c
+      DEPENDS wrapper
+      MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/wrapped.h
+      COMMAND ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/wrapper
+      ARGS ${PROJECT_BINARY_DIR}/wrapped.c ${PROJECT_SOURCE_DIR}/wrapped.h
+      )
+   
+################################################################
+#
+#  Test creating files from a custom target
+#
+################################################################
+ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/doc1.dvi
+      DEPENDS ${PROJECT_SOURCE_DIR}/doc1.tex 
+      COMMAND   ${CMAKE_COMMAND}  
+      ARGS      -E copy ${PROJECT_SOURCE_DIR}/doc1.tex 
+                        ${PROJECT_BINARY_DIR}/doc1.dvi
+      )
+
+ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/doc1.h
+      DEPENDS   ${PROJECT_BINARY_DIR}/doc1.dvi 
+      COMMAND   ${CMAKE_COMMAND}
+      ARGS      -E copy ${PROJECT_BINARY_DIR}/doc1.dvi
+                        ${PROJECT_BINARY_DIR}/doc1.h
+      )
+
+ADD_CUSTOM_TARGET(TDocument ALL 
+      ${CMAKE_COMMAND} -E echo "building doc1.h"  
+      DEPENDS ${PROJECT_BINARY_DIR}/doc1.h
+      ) 
+
+################################################################
+#
+#  Test using a multistep generated file
+#
+################################################################
+ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.pre
+      DEPENDS ${PROJECT_SOURCE_DIR}/foo.in
+      COMMAND   ${CMAKE_COMMAND}  
+      ARGS      -E copy ${PROJECT_SOURCE_DIR}/foo.in 
+                        ${PROJECT_BINARY_DIR}/foo.pre
+      )
+
+ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.c
+      DEPENDS   TDocument ${PROJECT_BINARY_DIR}/foo.pre 
+      COMMAND   ${CMAKE_COMMAND}
+      ARGS      -E copy ${PROJECT_BINARY_DIR}/foo.pre
+                        ${PROJECT_BINARY_DIR}/foo.c
+      )
+
+# add the library
+ADD_EXECUTABLE(CustomCommand 
+  ${PROJECT_BINARY_DIR}/foo.c
+  ${PROJECT_BINARY_DIR}/wrapped.c
+  ${PROJECT_BINARY_DIR}/generated.c
+  )
+
+# must add a dependency on TDocument otherwise it might never build and 
+# the CustomCommand executable really needs doc1.h
+ADD_DEPENDENCIES(CustomCommand TDocument)

+ 1 - 0
Tests/CustomCommand/doc1.tex

@@ -0,0 +1 @@
+int doc() { return 7;}

+ 15 - 0
Tests/CustomCommand/foo.in

@@ -0,0 +1,15 @@
+#include "doc1.h"
+
+int generated();
+int wrapped();
+
+int main ()
+{
+  if (generated()*wrapped()*doc() == 3*5*7)
+    {
+    return 0;
+    }
+  
+  return -1;
+}
+

+ 9 - 0
Tests/CustomCommand/generator.c

@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+main(int argc, char *argv[])
+{
+  FILE *fp = fopen(argv[1],"w");
+  
+  fprintf(fp,"int generated() { return 3; }\n");
+  fclose(fp);
+}

+ 1 - 0
Tests/CustomCommand/wrapped.h

@@ -0,0 +1 @@
+/* empty file */

+ 9 - 0
Tests/CustomCommand/wrapper.c

@@ -0,0 +1,9 @@
+#include <stdio.h>
+
+main(int argc, char *argv[])
+{
+  FILE *fp = fopen(argv[1],"w");
+  
+  fprintf(fp,"int wrapped() { return 5; }\n");
+  fclose(fp);
+}