diff options
-rw-r--r-- | Tests/CustomCommand/CMakeLists.txt | 105 | ||||
-rw-r--r-- | Tests/CustomCommand/doc1.tex | 1 | ||||
-rw-r--r-- | Tests/CustomCommand/foo.in | 15 | ||||
-rw-r--r-- | Tests/CustomCommand/generator.c | 9 | ||||
-rw-r--r-- | Tests/CustomCommand/wrapped.h | 1 | ||||
-rw-r--r-- | Tests/CustomCommand/wrapper.c | 9 |
6 files changed, 140 insertions, 0 deletions
diff --git a/Tests/CustomCommand/CMakeLists.txt b/Tests/CustomCommand/CMakeLists.txt new file mode 100644 index 0000000..19a8399 --- /dev/null +++ b/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)
\ No newline at end of file diff --git a/Tests/CustomCommand/doc1.tex b/Tests/CustomCommand/doc1.tex new file mode 100644 index 0000000..e6b6ccb --- /dev/null +++ b/Tests/CustomCommand/doc1.tex @@ -0,0 +1 @@ +int doc() { return 7;} diff --git a/Tests/CustomCommand/foo.in b/Tests/CustomCommand/foo.in new file mode 100644 index 0000000..a887264 --- /dev/null +++ b/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; +} + diff --git a/Tests/CustomCommand/generator.c b/Tests/CustomCommand/generator.c new file mode 100644 index 0000000..cda3e0f --- /dev/null +++ b/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); +} diff --git a/Tests/CustomCommand/wrapped.h b/Tests/CustomCommand/wrapped.h new file mode 100644 index 0000000..fa882cb --- /dev/null +++ b/Tests/CustomCommand/wrapped.h @@ -0,0 +1 @@ +/* empty file */ diff --git a/Tests/CustomCommand/wrapper.c b/Tests/CustomCommand/wrapper.c new file mode 100644 index 0000000..0ed4b76 --- /dev/null +++ b/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); +} |