@@ -71,6 +71,7 @@ endif(DOXYGEN_FOUND)
71
71
set (VERSION_VAR_NAME "${LOCAL_CMAKE_PROJECT_NAME} _VERSION" )
72
72
configure_file (${CMAKE_CURRENT_SOURCE_DIR} /templates/version.h.in ${CMAKE_CURRENT_SOURCE_DIR} /src/version.h @ONLY )
73
73
74
+
74
75
####################################
75
76
# build/install/pack instructions #
76
77
####################################
@@ -119,6 +120,72 @@ set(${LOCAL_CMAKE_PROJECT_NAME}_STATIC_LIB "${CMAKE_CURRENT_BINARY_DIR}/${LOCAL_
119
120
set (${LOCAL_CMAKE_PROJECT_NAME} _INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR} /${LOCAL_CMAKE_PROJECT_NAME} /include" )
120
121
set (LIB_SHARED_NAME "${LOCAL_CMAKE_PROJECT_NAME} " )
121
122
set (TEST_NAME "${LOCAL_CMAKE_PROJECT_NAME} _test" )
123
+ set (TOOL_NAME "${LOCAL_CMAKE_PROJECT_NAME} _tool" )
124
+ set (TOOL_INPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR} /json/schema.json" )
125
+ set (TOOL_CPP_OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR} /${LOCAL_CMAKE_PROJECT_NAME} .h" )
126
+ set (TOOL_HTML_OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR} /${LOCAL_CMAKE_PROJECT_NAME} .html" )
127
+
128
+ ###############################################
129
+ # html & cpp code generation by external tool #
130
+ ###############################################
131
+ function (locate_boilerplate_tool TOOL_NAME TOOL_DIR TOOL_SOURCE_DIR TOOL_INCLUDE_DIR TOOL_BINARY )
132
+ set (TOOL_NAME_VAR "${TOOL_NAME} " )
133
+ set (TOOL_DIR_VAR "${TOOL_DIR} " )
134
+ set (TOOL_SOURCE_DIR_VAR "${TOOL_SOURCE_DIR} " )
135
+ set (TOOL_INCLUDE_DIR_VAR "${TOOL_INCLUDE_DIR} " )
136
+ find_program (TOOL_BINARY_VAR NAME ${TOOL_NAME_VAR} HINTS ${TOOL_DIR_VAR} )
137
+ if (NOT TOOL_BINARY_VAR )
138
+ # time to build it in a very dirty way but fast!
139
+ file (GLOB TOOL_SOURCE_FILES ${TOOL_SOURCE_DIR_VAR} /*.cpp )
140
+ if (EXISTS ${TOOL_DIR_VAR} )
141
+ message (STATUS "Using tool directory: ${TOOL_DIR_VAR} " )
142
+ else ()
143
+ message (STATUS "Creating tool at directory: ${TOOL_DIR_VAR} " )
144
+ file (MAKE_DIRECTORY ${TOOL_DIR_VAR} )
145
+ endif ()
146
+ set (EXECUTE_COMMAND ${CMAKE_CXX_COMPILER} -v
147
+ -o ${TOOL_DIR_VAR} /${TOOL_NAME_VAR}
148
+ -I${TOOL_INCLUDE_DIR} -I${TOOL_SOURCE_DIR}/.
149
+ ${TOOL_SOURCE_FILES} )
150
+ execute_process (COMMAND ${EXECUTE_COMMAND} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} TIMEOUT 5
151
+ RESULT_VARIABLE TOOL_BINARY_RESULT OUTPUT_VARIABLE TOOL_BINARY_OUTPUT ERROR_VARIABLE TOOL_BINARY_ERROR )
152
+ find_program (TOOL_BINARY_VAR NAME ${TOOL_NAME_VAR} HINTS ${TOOL_DIR_VAR} )
153
+ endif ()
154
+ message (STATUS "Tool: ${TOOL_BINARY_VAR} " )
155
+ if (NOT TOOL_BINARY_VAR )
156
+ message (STATUS "Tool name: ${TOOL_NAME_VAR} " )
157
+ message (STATUS "Tool dir: ${TOOL_DIR_VAR} " )
158
+ message (STATUS "Tool source dir: ${TOOL_SOURCE_DIR_VAR} " )
159
+ message (STATUS "Tool include dir: ${TOOL_INCLUDE_DIR_VAR} " )
160
+ message (STATUS "Tool binary generation: result<${TOOL_BINARY_RESULT} > output<${TOOL_BINARY_OUTPUT} > error<${TOOL_BINARY_ERROR} >" )
161
+ message (FATAL_ERROR "Unable to find or build ${TOOL_NAME_VAR} required to generate needed code" )
162
+ endif ()
163
+ set (${TOOL_BINARY} "${TOOL_BINARY_VAR} " PARENT_SCOPE )
164
+ endfunction (locate_boilerplate_tool TOOL_NAME TOOL_DIR TOOL_BINARY )
165
+
166
+ ## tool directory
167
+ if (EXISTS ${TOOL_DIR} )
168
+ message (STATUS "Tool directory: ${TOOL_DIR} " )
169
+ else (EXISTS ${TOOL_DIR} )
170
+ if (EXISTS $ENV{JSONSCHEMA2CPP} )
171
+ set (TOOL_DIR "$ENV{JSONSCHEMA2CPP} " )
172
+ else ()
173
+ set (TOOL_DIR "${CMAKE_CURRENT_BINARY_DIR} /src" )
174
+ endif (EXISTS $ENV{JSONSCHEMA2CPP} )
175
+ endif (EXISTS ${TOOL_DIR} )
176
+
177
+ ## tool binary
178
+ locate_boilerplate_tool (${TOOL_NAME} ${TOOL_DIR} "${CMAKE_CURRENT_SOURCE_DIR} /src" "${CMAKE_CURRENT_SOURCE_DIR} /include" TOOL_BINARY )
179
+
180
+ ## Now that tool is found or created, high time to use it!
181
+ execute_process (COMMAND ${TOOL_BINARY} ${TOOL_INPUT_FILE} ${TOOL_HTML_OUTPUT_FILE} ${TOOL_CPP_OUTPUT_FILE} TIMEOUT 5
182
+ RESULT_VARIABLE TOOL_BINARY_RESULT OUTPUT_VARIABLE TOOL_BINARY_OUTPUT ERROR_VARIABLE TOOL_BINARY_ERROR )
183
+ if (TOOL_BINARY_RESULT )
184
+ message (FATAL_ERROR "Unable to generated C++/HTML code" )
185
+ else ()
186
+ message (STATUS "Generated HTML: ${TOOL_HTML_OUTPUT_FILE} " )
187
+ message (STATUS "Generated C++: ${TOOL_CPP_OUTPUT_FILE} " )
188
+ endif ()
122
189
123
190
### Install ###
124
191
if (DEFINED ENV{INSTALL_PREFIX} )
0 commit comments