summaryrefslogtreecommitdiffstats
path: root/Tests/CustomCommand/CMakeLists.txt
blob: 19a8399034e76b866d15634a763c076984a11613 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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)