@@ -31,6 +31,7 @@ option (XSD_USE_SHORT_TARGET_NAMES "Reduces the name of targets to a minimum" OF
3131# list_directory
3232#
3333# Utility function returns a list of all children in a directory for iteration
34+
3435function (list_directory _result _curdir)
3536 cmake_parse_arguments ( ""
3637 "DEBUG"
@@ -52,7 +53,8 @@ function(list_directory _result _curdir)
5253 endforeach ()
5354 set (${_result} ${_list} PARENT_SCOPE)
5455endfunction ()
55- #######################################################################################################################
56+
57+ #dd######################################################################################################################
5658
5759# Register All files ending XSD in a directory and its subdirectories
5860#
@@ -81,21 +83,31 @@ endfunction()
8183# -- TARGETS
8284# Variable where generated targets will be stored for used in setting target_dependecies
8385# Defaults to _REGISTER_XSD_DIR_TARGETS
86+ #
87+ # -- HEADERS_VAR
88+ # Variable which all resulting .hxx files will be stored. DEfaults to _XSD_HEADERS
89+ #
90+ # -- SOURCES_VAR
91+ # Variable which all resulting .cxx files will be stored. Defaults to _XSD_SOURCES
92+ #
8493# Multi arguments
8594#
8695# -- DEPENDS
8796# List of targets which the generated targets depend on.
8897function (REGISTER_XSD_DIR _directory)
8998 cmake_parse_arguments ( "_l"
90- "STAGE;INSTALL "
91- "WORKING_DIR;PROJECT;COMPONENT;RESOURCE_FOLDER;CONFIG;TARGETS"
99+ "STAGE;INSTALLi;NO_TARGETS "
100+ "WORKING_DIR;PROJECT;COMPONENT;RESOURCE_FOLDER;CONFIG;TARGETS;HEADERS_VAR;SOURCES_VAR "
92101 "DEPENDS"
93102 ${ARGN}
94103 )
95104
96105 if (NOT _directory)
97106 set (_directory "${PROJECT_SOURCE_DIR} /share/xsd" )
98107 endif ()
108+ if (_l_NO_TARGETS)
109+ list (APPEND _flags NO_TARGETS)
110+ endif ()
99111 if (_l_STAGE)
100112 list (APPEND _flags STAGE)
101113 endif ()
@@ -105,6 +117,12 @@ function(REGISTER_XSD_DIR _directory)
105117 if (NOT _l_TARGETS )
106118 set (_l_TARGETS _REGISTER_XSD_DIR_TARGETS )
107119 endif ()
120+ if (NOT _l_HEADERS_VAR)
121+ set (_l_HEADERS_VAR _XSD_HEADERS )
122+ endif ()
123+ if (NOT _l_SOURCES_VAR)
124+ set (_l_SOURCES_VAR _XSD_SOURCES )
125+ endif ()
108126 if ( NOT _l_WORKING_DIR)
109127 set (_l_WORKING_DIR "${_directory} " )
110128 endif ()
@@ -113,7 +131,6 @@ function(REGISTER_XSD_DIR _directory)
113131 set (_component ${_l_COMPONENT} )
114132 set (_resource_path ${_l_RESOURCE_FOLDER} )
115133 set (_working_directory ${_l_WORKING_DIR} )
116-
117134 if ( NOT EXISTS "${_directory} " )
118135 message (FATAL_ERROR "REGISTER_XSD_DIR called on non existant directory ${_directory} " )
119136 endif ()
@@ -123,23 +140,33 @@ function(REGISTER_XSD_DIR _directory)
123140 REGISTER_XSD_DIR( ${_directory} /${_item} CONFIG ${_config_file}
124141 PROJECT ${_project} COMPONENT ${_component} /${_item}
125142 RESOURCE_PATH ${_resource_path} /${_item} ${_flags} TARGETS ${_l_TARGETS} ${_verbose_Flag}
126- WORKING_DIR ${_working_directory} DEPENDS ${_DEPENDS} )
143+ WORKING_DIR ${_working_directory}
144+ HEADERS_VAR ${_l_HEADERS_VAR}
145+ SOURCES_VAR ${_l_SOURCES_VAR}
146+ DEPENDS ${_DEPENDS}
147+ )
127148 elseif ( _item MATCHES ".*\\ .xsd" )
128149 REGISTER_XSD_FILE( ${_directory} /${_item} CONFIG ${_config_file}
129150 PROJECT ${_project} COMPONENT ${_component} /
130151 RESOURCE_PATH ${_resource_path} / ${_flags} TARGETS ${_l_TARGETS}
131- WORKING_DIR ${_working_directory} DEPENDS ${_DEPENDS} )
152+ WORKING_DIR ${_working_directory}
153+ HEADERS_VAR ${_l_HEADERS_VAR}
154+ SOURCES_VAR ${_l_SOURCES_VAR}
155+ DEPENDS ${_DEPENDS}
156+ )
132157 endif ()
133158 endforeach ()
134159 set (${_l_TARGETS} ${${_l_TARGETS} } PARENT_SCOPE)
160+ set (${_l_HEADERS_VAR} ${${_l_HEADERS_VAR} } PARENT_SCOPE)
161+ set (${_l_SOURCES_VAR} ${${_l_SOURCES_VAR} } PARENT_SCOPE)
135162endfunction (REGISTER_XSD_DIR)
136163#######################################################################################################################
137164#REGISTER_XSD_FILE
138165#######################################################################################################################
139166function (REGISTER_XSD_FILE _filepath )
140167 cmake_parse_arguments ( "_l"
141- "STAGE;INSTALL"
142- "WORKING_DIR;PROJECT;COMPONENT;RESOURCE_FOLDER;CONFIG;TARGETS"
168+ "STAGE;INSTALL;NO_TARGETS "
169+ "WORKING_DIR;PROJECT;COMPONENT;RESOURCE_FOLDER;CONFIG;TARGETS;HEADERS_VAR;SOURCES_VAR "
143170 "DEPENDS"
144171 ${ARGN}
145172 )
@@ -184,12 +211,13 @@ function(REGISTER_XSD_FILE _filepath )
184211
185212 string (REPLACE "//" "/" _safe_unique_name ${_component} /${_schema} )
186213 string (MAKE_C_IDENTIFIER ${_component} /${_schema} _safe_unique_name)
214+
187215 if (XSD_USE_SHORT_TARGET_NAMES)
188- set ( _gen_target_name "xsd_${_schema} " )
189- set ( _mv_target_name "xsd_mv_${_schema} " )
216+ set ( _gen_target_name "xsd_${_schema} " )
217+ set ( _mv_target_name "xsd_mv_${_schema} " )
190218 else ()
191- set ( _gen_target_name "xsd_gen${_safe_unique_name} " )
192- set ( _mv_target_name "${_mv_target_name} " )
219+ set ( _gen_target_name "xsd_gen${_safe_unique_name} " )
220+ set ( _mv_target_name "${_mv_target_name} " )
193221 endif ()
194222
195223 add_custom_command ( OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /${_project} /${_component} /${_schema} .hxx ${CMAKE_CURRENT_BINARY_DIR} /${_project} /${_component} /${_schema} .cxx ${_l_OUTPUTS}
@@ -199,32 +227,37 @@ function(REGISTER_XSD_FILE _filepath )
199227 DEPENDS ${CodeSynthesis_EXECUTABLE} ${_config_file}
200228 DEPENDS ${_l_DEPENDS}
201229 COMMENT "Generating source code from XML ${_filepath} " )
202-
203- add_custom_target ( ${_gen_target_name} DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${_project} /${_component} /${_schema} .hxx ${CMAKE_CURRENT_BINARY_DIR} /${_project} /${_component} /${_schema} .cxx
204- COMMENT "Checking if re-generation is required" )
205-
206- get_filename_component (SOLUTION_FOLDER "${_component}${_schema} " DIRECTORY )
207-
208- set_target_properties (${_gen_target_name}
230+ list (APPEND ${_l_HEADERS_VAR} ${CMAKE_CURRENT_BINARY_DIR} /${_project} /${_component} /${_schema} .hxx )
231+ list (APPEND ${_l_SOURCES_VAR} ${CMAKE_CURRENT_BINARY_DIR} /${_project} /${_component} /${_schema} .cxx )
232+ get_filename_component (SOLUTION_FOLDER "${_component}${_schema} " DIRECTORY )
233+ if ( NOT _l_NO_TARGETS )
234+ add_custom_target ( ${_gen_target_name}
235+ COMMENT "Checking if re-generation is required"
236+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${_project} /${_component} /${_schema} .hxx ${CMAKE_CURRENT_BINARY_DIR} /${_project} /${_component} /${_schema} .cxx)
237+ set_target_properties (${_gen_target_name}
209238 PROPERTIES
210239 FOLDER "Code Generators/${SOLUTION_FOLDER} " )
240+ list (APPEND ${_l_TARGETS} ${_gen_target_name} )
241+ endif ()
211242
212- list (APPEND ${_l_TARGETS} ${_gen_target_name} )
213- if (_l_STAGE)
214- add_custom_target ( ${_mv_target_name} DEPENDS ${CMAKE_BINARY_DIR} /${_resource_path} /${_schema} .xsd
215- COMMENT "Checking if re-generation is required" )
216243
244+ if (_l_STAGE)
217245 add_custom_command ( OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /${_schema} .xsd
218246 WORKING_DIRECTORY ${_l_WORKING_DIR}
219247 COMMAND ${CMAKE_COMMAND} -E copy ${_filepath} ${CMAKE_BINARY_DIR} /${_resource_path} /
220248 DEPENDS ${_filepath}
221249 DEPENDS ${_config_file}
222250 COMMENT "Staging XSD Template for runtime" )
223-
224- set_target_properties (${_mv_target_name}
251+ if (NOT _l_NO_TARGETS )
252+ add_custom_target ( ${_mv_target_name}
253+ DEPENDS ${CMAKE_BINARY_DIR} /${_resource_path} /${_schema} .xsd
254+ COMMENT "Checking if re-generation is required"
255+ )
256+ set_target_properties (${_mv_target_name}
225257 PROPERTIES
226258 FOLDER "Code Generators" )
227- list (APPEND ${_l_TARGETS} ${_gen_target_name} )
259+ list (APPEND ${_l_TARGETS} ${_gen_target_name} )
260+ endif ()
228261 endif ()
229262
230263 if (_l_INSTALL)
@@ -234,6 +267,8 @@ get_filename_component(SOLUTION_FOLDER "${_component}${_schema}" DIRECTORY )
234267 )
235268 endif ()
236269 set (${_l_TARGETS} ${${_l_TARGETS} } PARENT_SCOPE)
270+ set (${_l_HEADERS_VAR} ${${_l_HEADERS_VAR} } PARENT_SCOPE)
271+ set (${_l_SOURCES_VAR} ${${_l_SOURCES_VAR} } PARENT_SCOPE)
237272endfunction (REGISTER_XSD_FILE)
238273
239274#################################################################################################################
0 commit comments