comparison CMakeLists.txt @ 314:80b52f5e97b6 lifetime

Structure without common root dir
author maxter <spambox@d-coding.com>
date Wed, 23 Dec 2009 23:17:36 +0200
parents 34a37904ff77
children
comparison
equal deleted inserted replaced
313:cb7fb9195175 314:80b52f5e97b6
40 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) 40 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
41 FIND_PACKAGE(D REQUIRED) 41 FIND_PACKAGE(D REQUIRED)
42 42
43 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR "${CMAKE_INSTALL_PREFIX}" STREQUAL "") 43 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR "${CMAKE_INSTALL_PREFIX}" STREQUAL "")
44 set(CMAKE_INSTALL_PREFIX 44 set(CMAKE_INSTALL_PREFIX
45 ${DC_PATH} CACHE PATH "QtD install prefix" 45 ${DC_PATH} CACHE PATH "QtD install prefix"
46 ) 46 )
47 endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR "${CMAKE_INSTALL_PREFIX}" STREQUAL "") 47 endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR "${CMAKE_INSTALL_PREFIX}" STREQUAL "")
48 48
49 # Check D compiler version 49 # Check D compiler version
50 if(D_VERSION EQUAL "1") 50 if(D_VERSION EQUAL "1")
51 if (D_FRONTEND LESS "041") 51 if (D_FRONTEND LESS "041")
52 message(STATUS "Minimum required version of D compiler is 1.041 (or compiler based on this version)") 52 message(STATUS "Minimum required version of D compiler is 1.041 (or compiler based on this version)")
53 endif(D_FRONTEND LESS "041") 53 endif(D_FRONTEND LESS "041")
54 set(D_TARGET d1-tango CACHE INTERNAL "") 54 set(D_TARGET d1-tango CACHE INTERNAL "")
55 elseif(D_VERSION EQUAL "2") 55 elseif(D_VERSION EQUAL "2")
56 set(D_TARGET d2-phobos CACHE INTERNAL "") 56 set(D_TARGET d2-phobos CACHE INTERNAL "")
57 endif(D_VERSION EQUAL "1") 57 endif(D_VERSION EQUAL "1")
76 # System specific settings. 76 # System specific settings.
77 if(CMAKE_HOST_WIN32) 77 if(CMAKE_HOST_WIN32)
78 set(implib implib) 78 set(implib implib)
79 find_program(IMPLIB ${implib}) 79 find_program(IMPLIB ${implib})
80 if (NOT IMPLIB) 80 if (NOT IMPLIB)
81 message(FATAL_ERROR "implib is not found. You can donwload it from http://ftp.digitalmars.com/bup.zip") 81 message(FATAL_ERROR "implib is not found. You can donwload it from http://ftp.digitalmars.com/bup.zip")
82 endif (NOT IMPLIB) 82 endif (NOT IMPLIB)
83 if(D_IS_MARS) 83 if(D_IS_MARS)
84 set(GEN_OPT ${GEN_OPT} --cpp_shared) 84 set(GEN_OPT ${GEN_OPT} --cpp_shared)
85 add_definitions(-DCPP_SHARED) 85 add_definitions(-DCPP_SHARED)
86 endif(D_IS_MARS) 86 endif(D_IS_MARS)
93 foreach(package_big ${all_packages}) 93 foreach(package_big ${all_packages})
94 string(TOLOWER ${package_big} package) 94 string(TOLOWER ${package_big} package)
95 string(TOUPPER ${package_big} package_upper) 95 string(TOUPPER ${package_big} package_upper)
96 option(BUILD_QT_${package_upper} "Build Qt${package_big}" "ON") 96 option(BUILD_QT_${package_upper} "Build Qt${package_big}" "ON")
97 if(BUILD_QT_${package_upper}) 97 if(BUILD_QT_${package_upper})
98 set(packages ${packages} ${package}) 98 set(packages ${packages} ${package})
99 endif(BUILD_QT_${package_upper}) 99 endif(BUILD_QT_${package_upper})
100 endforeach(package_big ${all_packages}) 100 endforeach(package_big ${all_packages})
101 101
102 add_subdirectory(generator) 102 add_subdirectory(generator)
103 103
118 else(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) 118 else(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR})
119 set(cd_path ${CMAKE_BINARY_DIR}/build) 119 set(cd_path ${CMAKE_BINARY_DIR}/build)
120 endif(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) 120 endif(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR})
121 121
122 make_native_path(cd_path) 122 make_native_path(cd_path)
123 add_custom_command(TARGET main POST_BUILD 123 add_custom_command(TARGET main POST_BUILD
124 COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${CMAKE_BINARY_DIR}/build 124 COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${CMAKE_BINARY_DIR}/build
125 COMMAND cd ARGS ${cd_path} && ${CMAKE_COMMAND} -G${CMAKE_GENERATOR} -DSECOND_RUN=1 ${CMAKE_SOURCE_DIR} && ${make_util} 125 COMMAND cd ARGS ${cd_path} && ${CMAKE_COMMAND} -G${CMAKE_GENERATOR} -DSECOND_RUN=1 ${CMAKE_SOURCE_DIR} && ${make_util}
126 COMMENT "" 126 COMMENT ""
127 ) 127 )
128 128
129 ## Make commands. 129 ## Make commands.
130 set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_BINARY_DIR}/build) 130 set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_BINARY_DIR}/build)
131 add_custom_target(install 131 add_custom_target(install
132 COMMAND cd ${CMAKE_BINARY_DIR}/build && ${make_util} install 132 COMMAND cd ${CMAKE_BINARY_DIR}/build && ${make_util} install
133 COMMENT "" 133 COMMENT ""
134 ) 134 )
135 add_dependencies(install preinstall) 135 add_dependencies(install preinstall)
136 136
137 ##-------------------------------------------- 137 ##--------------------------------------------
138 ## CPack. 138 ## CPack.
139 ##-------------------------------------------- 139 ##--------------------------------------------
204 204
205 macro(qtd_add_resource output) 205 macro(qtd_add_resource output)
206 set (params NAME OPTIONS) 206 set (params NAME OPTIONS)
207 qtd_parse_params (RESOURCES params ${ARGN}) 207 qtd_parse_params (RESOURCES params ${ARGN})
208 if(NAME_tmp) 208 if(NAME_tmp)
209 set(OPTIONS_tmp ${OPTIONS_tmp} -name ${NAME_tmp}) 209 set(OPTIONS_tmp ${OPTIONS_tmp} -name ${NAME_tmp})
210 endif(NAME_tmp) 210 endif(NAME_tmp)
211 qtd_command ("${output}" "${DRCC}" "${OPTIONS_tmp}" "qrc_" 211 qtd_command ("${output}" "${DRCC}" "${OPTIONS_tmp}" "qrc_"
212 "Generate" ${RESOURCES_tmp}) 212 "Generate" ${RESOURCES_tmp})
213 endmacro(qtd_add_resource output) 213 endmacro(qtd_add_resource output)
214 214
215 macro(qtd_wrap_ui output) 215 macro(qtd_wrap_ui output)
216 set (params OPTIONS) 216 set (params OPTIONS)
217 qtd_parse_params (UI params ${ARGN}) 217 qtd_parse_params (UI params ${ARGN})
218 qtd_command ("${output}" "${DUIC}" "${OPTIONS_tmp}" "uic_" 218 qtd_command ("${output}" "${DUIC}" "${OPTIONS_tmp}" "uic_"
219 "Generate" ${UI_tmp}) 219 "Generate" ${UI_tmp})
220 endmacro(qtd_wrap_ui output) 220 endmacro(qtd_wrap_ui output)
221 221
222 macro(qtd_command output command options prefix comment) 222 macro(qtd_command output command options prefix comment)
223 foreach(file "${ARGN}") 223 foreach(file "${ARGN}")
224 ## Test an exist of the input file. 224 ## Test an exist of the input file.
225 get_filename_component(file_path ${file} PATH) 225 get_filename_component(file_path ${file} PATH)
226 get_filename_component(file_name ${file} NAME_WE) 226 get_filename_component(file_name ${file} NAME_WE)
227 get_filename_component(file_ext ${file} EXT) 227 get_filename_component(file_ext ${file} EXT)
228 228
229 set(out ${CMAKE_CURRENT_BINARY_DIR}/${file_path}${prefix}${file_name}.d) 229 set(out ${CMAKE_CURRENT_BINARY_DIR}/${file_path}${prefix}${file_name}.d)
230 add_custom_command(OUTPUT "${out}" 230 add_custom_command(OUTPUT "${out}"
231 COMMAND "${command}" 231 COMMAND "${command}"
232 ARGS ${options} ${file} -o ${out} 232 ARGS ${options} ${file} -o ${out}
233 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 233 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
234 DEPENDS ${file} 234 DEPENDS ${file}
235 COMMENT "${comment} ${file}" 235 COMMENT "${comment} ${file}"
236 ) 236 )
237 set(${output} ${${output}} ${out}) 237 set(${output} ${${output}} ${out})
238 endforeach(file "${ARGN}") 238 endforeach(file "${ARGN}")
239 endmacro(qtd_command output command options files prefix comment) 239 endmacro(qtd_command output command options files prefix comment)
240 240
241 ## Parsing the parameters list. 241 ## Parsing the parameters list.
242 macro(qtd_parse_params default params) 242 macro(qtd_parse_params default params)
243 set(type_tmp ${default}) 243 set(type_tmp ${default})
244 set(params_tmp ${default} ${${params}}) 244 set(params_tmp ${default} ${${params}})
245 foreach(param_tmp ${params_tmp}) 245 foreach(param_tmp ${params_tmp})
246 set(${param_tmp}_tmp ) 246 set(${param_tmp}_tmp )
247 endforeach(param_tmp ${params_tmp}) 247 endforeach(param_tmp ${params_tmp})
248 foreach(arg_tmp ${ARGN}) 248 foreach(arg_tmp ${ARGN})
249 set(found_type_tmp) 249 set(found_type_tmp)
250 if(NOT found_type_tmp) 250 if(NOT found_type_tmp)
251 foreach(param_tmp ${params_tmp}) 251 foreach(param_tmp ${params_tmp})
252 if(arg_tmp STREQUAL param_tmp) 252 if(arg_tmp STREQUAL param_tmp)
253 set(type_tmp ${param_tmp}) 253 set(type_tmp ${param_tmp})
254 set(found_type_tmp 1) 254 set(found_type_tmp 1)
255 break(param_tmp ${params_tmp}) 255 break(param_tmp ${params_tmp})
256 endif(arg_tmp STREQUAL param_tmp) 256 endif(arg_tmp STREQUAL param_tmp)
257 endforeach(param_tmp ${params_tmp}) 257 endforeach(param_tmp ${params_tmp})
258 endif(NOT found_type_tmp) 258 endif(NOT found_type_tmp)
259 if(NOT found_type_tmp) 259 if(NOT found_type_tmp)
260 set(${type_tmp}_tmp ${${type_tmp}_tmp} ${arg_tmp}) 260 set(${type_tmp}_tmp ${${type_tmp}_tmp} ${arg_tmp})
261 endif(NOT found_type_tmp) 261 endif(NOT found_type_tmp)
262 endforeach(arg_tmp ${ARGN}) 262 endforeach(arg_tmp ${ARGN})
263 endmacro(qtd_parse_params default) 263 endmacro(qtd_parse_params default)
264 264
265 ## Build example macro. 265 ## Build example macro.
266 ## name -- example name. 266 ## name -- example name.
267 ## Options: 267 ## Options:
268 ## PACKAGES -- list of packages to link to exaple (for example, QtCore QtGui QtOpenGL). 268 ## PACKAGES -- list of packages to link to exaple (for example, QtCore QtGui QtOpenGL).
269 ## Default value is "QtCore QtGui". 269 ## Default value is "QtCore QtGui".
270 ## params -- sources d files. 270 ## params -- sources d files.
271 ## Usage: 271 ## Usage:
272 ## build_example(ExampleName PACKAGES QtCore QtGui QtXml main.d another_d_file.d) 272 ## build_example(ExampleName PACKAGES QtCore QtGui QtXml main.d another_d_file.d)
273 macro(build_example name) 273 macro(build_example name)
274 set (params UIC RESOURCES PACKAGES) 274 set (params UIC RESOURCES PACKAGES)
275 qtd_parse_params (SOURCES params ${ARGN}) 275 qtd_parse_params (SOURCES params ${ARGN})
276 276
277 if(NOT PACKAGES_tmp) 277 if(NOT PACKAGES_tmp)
278 set(PACKAGES_tmp QtCore QtGui) 278 set(PACKAGES_tmp QtCore QtGui)
279 endif(NOT PACKAGES_tmp) 279 endif(NOT PACKAGES_tmp)
280 280
281 if(RESOURCES_tmp) 281 if(RESOURCES_tmp)
282 if(NOT BUILD_TOOLS) 282 if(NOT BUILD_TOOLS)
283 message(STATUS "Example '${name}' requires drcc. Example will not build") 283 message(STATUS "Example '${name}' requires drcc. Example will not build")
284 return(build_example name) 284 return(build_example name)
285 endif(NOT BUILD_TOOLS) 285 endif(NOT BUILD_TOOLS)
286 qtd_add_resource(res_sources ${RESOURCES_tmp} NAME ${name} ) 286 qtd_add_resource(res_sources ${RESOURCES_tmp} NAME ${name} )
287 endif(RESOURCES_tmp) 287 endif(RESOURCES_tmp)
288 288
289 if(UIC_tmp) 289 if(UIC_tmp)
290 if(NOT BUILD_TOOLS) 290 if(NOT BUILD_TOOLS)
291 message(STATUS "Example '${name}' requires drcc. Example will not build") 291 message(STATUS "Example '${name}' requires drcc. Example will not build")
292 return(build_example name) 292 return(build_example name)
293 endif(NOT BUILD_TOOLS) 293 endif(NOT BUILD_TOOLS)
294 qtd_wrap_ui(uic_sources ${UIC_tmp}) 294 qtd_wrap_ui(uic_sources ${UIC_tmp})
295 endif(UIC_tmp) 295 endif(UIC_tmp)
296 296
297 foreach(package ${PACKAGES_tmp}) 297 foreach(package ${PACKAGES_tmp})
298 string(REGEX REPLACE "Qt([A-Za-z0-9])" "\\1" req "${package}") 298 string(REGEX REPLACE "Qt([A-Za-z0-9])" "\\1" req "${package}")
299 set(is_founded) 299 set(is_founded)
300 foreach(package_big ${packages_big}) 300 foreach(package_big ${packages_big})
301 string(TOLOWER ${package_big} package) 301 string(TOLOWER ${package_big} package)
302 if(${req} STREQUAL ${package_big}) 302 if(${req} STREQUAL ${package_big})
303 set(is_founded 1) 303 set(is_founded 1)
304 break(package_big ${packages_big}) 304 break(package_big ${packages_big})
305 endif(${req} STREQUAL ${package_big}) 305 endif(${req} STREQUAL ${package_big})
306 endforeach(package_big ${packages_big}) 306 endforeach(package_big ${packages_big})
307 if(NOT is_founded) 307 if(NOT is_founded)
308 message(STATUS "Example '${name}' requires the package '${req}', but it is not active. Example will not build") 308 message(STATUS "Example '${name}' requires the package '${req}', but it is not active. Example will not build")
309 return(build_example name) 309 return(build_example name)
310 else(NOT is_founded) 310 else(NOT is_founded)
311 set(qtd_libs ${${package}_lib_param} ${qtd_libs}) 311 set(qtd_libs ${${package}_lib_param} ${qtd_libs})
312 endif(NOT is_founded) 312 endif(NOT is_founded)
313 endforeach(package ${PACKAGES_tmp}) 313 endforeach(package ${PACKAGES_tmp})
314 add_d_program(${name} ${SOURCES_tmp} NO_DEPS_SOURCES ${res_sources} ${uic_sources} 314 add_d_program(${name} ${SOURCES_tmp} NO_DEPS_SOURCES ${res_sources} ${uic_sources}
315 DEPENDS ${res_sources} INCLUDES ${QTD_IMPORT_PATH} ${CMAKE_CURRENT_BINARY_DIR} 315 DEPENDS ${res_sources} INCLUDES ${QTD_IMPORT_PATH} ${CMAKE_CURRENT_BINARY_DIR}
316 LIB_PATHS ${QTD_LIBRARIES_PATH} ${CMAKE_SOURCE_DIR}/lib LIBS ${qtd_libs}) 316 LIB_PATHS ${QTD_LIBRARIES_PATH} ${CMAKE_SOURCE_DIR}/lib LIBS ${qtd_libs})
317 ## TODO: Enable. 317 ## TODO: Enable.
318 #if(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) ## 318 #if(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) ##
319 # add_custom_command(TARGET example_${name} POST_BUILD COMMAND "${STRIP}" ARGS "${output}") 319 # add_custom_command(TARGET example_${name} POST_BUILD COMMAND "${STRIP}" ARGS "${output}")
320 #endif(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) 320 #endif(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX)
321 add_dependencies(examples ${name}) 321 add_dependencies(examples ${name})
322 add_dependencies(${name} allpackages tools) 322 add_dependencies(${name} allpackages tools)
323 endmacro(build_example sources) 323 endmacro(build_example sources)
324 324
341 set(lib_name) 341 set(lib_name)
342 set(link_cpp) 342 set(link_cpp)
343 set(link_d) 343 set(link_d)
344 set(cpp_files) 344 set(cpp_files)
345 set(cpp_generated_files) 345 set(cpp_generated_files)
346 set(d_files) 346 set(d_qt_files)
347 set(d_qtd_files)
348 set(d_generated_files)
347 set(classes) 349 set(classes)
348 set(d_generated_files)
349 set(d_version_files)
350 set(link_example) 350 set(link_example)
351 include (${CMAKE_SOURCE_DIR}/build/${package}.txt) 351 include (${CMAKE_SOURCE_DIR}/build/${package}.txt)
352 352
353 set(all_req_found 1) 353 set(all_req_found 1)
354 string(TOUPPER ${package} package_upper) 354 string(TOUPPER ${package} package_upper)
355 if(BUILD_QT_${package_upper}) 355 if(BUILD_QT_${package_upper})
356 foreach(req ${required}) 356 foreach(req ${required})
357 set(req_found) 357 set(req_found)
358 foreach(pack ${packages_big}) 358 foreach(pack ${packages_big})
359 if(${pack} STREQUAL ${req}) 359 if(${pack} STREQUAL ${req})
360 set(req_found 1) 360 set(req_found 1)
361 endif(${pack} STREQUAL ${req}) 361 endif(${pack} STREQUAL ${req})
362 endforeach(pack ${packages}) 362 endforeach(pack ${packages})
363 if(NOT req_found) 363 if(NOT req_found)
364 set(req_found) 364 set(req_found)
365 foreach(pack ${all_packages}) 365 foreach(pack ${all_packages})
366 if(${pack} STREQUAL ${req}) 366 if(${pack} STREQUAL ${req})
367 set(req_found 1) 367 set(req_found 1)
368 endif(${pack} STREQUAL ${req}) 368 endif(${pack} STREQUAL ${req})
369 endforeach(pack ${all_packages}) 369 endforeach(pack ${all_packages})
370 if(req_found) 370 if(req_found)
371 message(STATUS "Package '${package_big}' requires '${req}', but it is not active") 371 message(STATUS "Package '${package_big}' requires '${req}', but it is not active")
372 else(req_found) 372 else(req_found)
373 message(STATUS "Package '${package_big}' requires '${req}', but it is not found") 373 message(STATUS "Package '${package_big}' requires '${req}', but it is not found")
374 endif(req_found) 374 endif(req_found)
375 set(all_req_found) 375 set(all_req_found)
376 endif(NOT req_found) 376 endif(NOT req_found)
377 endforeach(req ${required}) 377 endforeach(req ${required})
378 else(BUILD_QT_${package_upper}) 378 else(BUILD_QT_${package_upper})
379 set(all_req_found) 379 set(all_req_found)
380 endif(BUILD_QT_${package_upper}) 380 endif(BUILD_QT_${package_upper})
381 381
382 ## TODO: cleanup. 382 ## TODO: cleanup.
383 if("${all_req_found}" EQUAL 1) 383 if("${all_req_found}" EQUAL 1)
384 set(packages_big ${packages_big} ${package_big}) 384 set(packages_big ${packages_big} ${package_big})
385 set(packages ${packages} ${package}) 385 set(packages ${packages} ${package})
386 ## Loading package sources list. 386 ## Loading package sources list.
387 foreach(d_source ${package}/ArrayOps2 ${d_generated_files}) 387 foreach(d_source qt/${package}/ArrayOps2 ${d_generated_files})
388 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d) 388 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/${d_source}.d)
389 endforeach(d_source ${d_generated_files}) 389 endforeach(d_source ${d_generated_files})
390 set(classes ArrayOps ${classes}) 390 set(classes ArrayOps ${classes})
391 foreach(class ${classes}) 391 foreach(class ${classes})
392 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d) 392 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d)
393 set(aux_name ${CMAKE_BINARY_DIR}/qt/${package}/${class}_aux.d ) 393 set(aux_name ${CMAKE_BINARY_DIR}/qt/${package}/${class}_aux.d )
394 if(EXISTS ${aux_name}) 394 if(EXISTS ${aux_name})
395 set(d_sources ${d_sources} ${aux_name}) 395 set(d_sources ${d_sources} ${aux_name})
396 endif(EXISTS ${aux_name}) 396 endif(EXISTS ${aux_name})
397 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp) 397 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp)
398 endforeach(class ${classes}) 398 endforeach(class ${classes})
399 set(files_for_gen ${files_for_gen} ${cpp_sources} ${d_sources}) 399 set(files_for_gen ${files_for_gen} ${cpp_sources} ${d_sources})
400 400
401 foreach (cpp_source ${cpp_files}) 401 foreach (cpp_source ${cpp_files})
402 set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp) 402 set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp)
403 endforeach(cpp_source ${cpp_files}) 403 endforeach(cpp_source ${cpp_files})
404 foreach (cpp_source ${cpp_generated_files}) 404 foreach (cpp_source ${cpp_generated_files})
405 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/${cpp_source}.cpp) 405 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/${cpp_source}.cpp)
406 endforeach(cpp_source ${cpp_generated_files}) 406 endforeach(cpp_source ${cpp_generated_files})
407 foreach(d_source ${d_version_files}) 407 foreach(d_source ${d_qt_files})
408 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}/qt/${d_source}.d) 408 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/d${D_VERSION}/qt/${d_source}.d)
409 endforeach(d_source ${d_version_files}) 409 endforeach(d_source ${d_qt_files})
410 foreach(d_source ${d_files}) 410 foreach(d_source ${d_qtd_files})
411 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d) 411 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/d${D_VERSION}/qtd/${d_source}.d)
412 endforeach(d_source ${d_files}) 412 endforeach(d_source ${d_qtd_files})
413 413
414 if(NOT GENERATE_DI_FILES) 414 if(NOT GENERATE_DI_FILES)
415 foreach(d_source ${d_sources}) 415 foreach(d_source ${d_sources})
416 get_filename_component(path ${d_source} PATH) 416 get_filename_component(path ${d_source} PATH)
417 get_filename_component(name ${d_source} NAME_WE) 417 get_filename_component(name ${d_source} NAME_WE)
418 regex_safe_string(cbd_safe_tmp ${CMAKE_CURRENT_BINARY_DIR}) 418 regex_safe_string(cbd_safe_tmp ${CMAKE_CURRENT_BINARY_DIR})
419 regex_safe_string(csd_safe_tmp ${CMAKE_CURRENT_SOURCE_DIR}) 419 regex_safe_string(csd_safe_tmp ${CMAKE_CURRENT_SOURCE_DIR})
420 regex_safe_string(ver_safe_tmp ${CMAKE_CURRENT_SOURCE_DIR}/qt/d${D_VERSION}) 420 regex_safe_string(ver_safe_tmp ${CMAKE_CURRENT_SOURCE_DIR}/qt/d${D_VERSION})
421 set(regexp_str_tmp "(${ver_safe_tmp}/|${cbd_safe_tmp}/|${csd_safe_tmp}/|)(.+)") 421 set(regexp_str_tmp "(${ver_safe_tmp}/|${cbd_safe_tmp}/|${csd_safe_tmp}/|)(.+)")
422 string(REGEX REPLACE ${regexp_str_tmp} "\\2" ins_path "${path}") 422 string(REGEX REPLACE ${regexp_str_tmp} "\\2" ins_path "${path}")
423 install(FILES ${d_source} DESTINATION include/d/${ins_path} COMPONENT qtd RENAME ${name}.di) 423 install(FILES ${d_source} DESTINATION include/d/${ins_path} COMPONENT qtd RENAME ${name}.di)
424 install(FILES ${path}/${name}_aux.d DESTINATION include/d/${ins_path} COMPONENT qtd RENAME ${name}_aux.di OPTIONAL) 424 install(FILES ${path}/${name}_aux.d DESTINATION include/d/${ins_path} COMPONENT qtd RENAME ${name}_aux.di OPTIONAL)
425 endforeach(d_source ${d_sources}) 425 endforeach(d_source ${d_sources})
426 endif(NOT GENERATE_DI_FILES) 426 endif(NOT GENERATE_DI_FILES)
427 427
428 ## Link CPP library. 428 ## Link CPP library.
429 if(CPP_SHARED) 429 if(CPP_SHARED)
430 set(cpp_method SHARED) 430 set(cpp_method SHARED)
431 else(CPP_SHARED) 431 else(CPP_SHARED)
432 set(cpp_method STATIC) 432 set(cpp_method STATIC)
433 endif(CPP_SHARED) 433 endif(CPP_SHARED)
434 add_library(cpp_${package} ${cpp_method} ${cpp_sources}) 434 add_library(cpp_${package} ${cpp_method} ${cpp_sources})
435 set_property(TARGET cpp_${package} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles) 435 set_property(TARGET cpp_${package} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles)
436 if(CPP_SHARED) 436 if(CPP_SHARED)
437 else(CPP_SHARED) 437 else(CPP_SHARED)
438 foreach(cpp_source ${cpp_sources}) 438 foreach(cpp_source ${cpp_sources})
439 set(cpp_source ${cpp_source}) 439 set(cpp_source ${cpp_source})
440 obj_path(cpp_source) 440 obj_path(cpp_source)
441 set(cpp_objs ${cpp_objs} ${CMAKE_BINARY_DIR}/CMakeFiles/cpp_${package}.dir/${cpp_source}${CMAKE_CXX_OUTPUT_EXTENSION}) 441 set(cpp_objs ${cpp_objs} ${CMAKE_BINARY_DIR}/CMakeFiles/cpp_${package}.dir/${cpp_source}${CMAKE_CXX_OUTPUT_EXTENSION})
442 endforeach(cpp_source ${cpp_sources}) 442 endforeach(cpp_source ${cpp_sources})
443 endif(CPP_SHARED) 443 endif(CPP_SHARED)
444 444
445 ## Link D library. 445 ## Link D library.
446 set(lib_name qtd${package}) 446 set(lib_name qtd${package})
447 if(BUILD_SHARED_LIBRARIES) 447 if(BUILD_SHARED_LIBRARIES)
448 set(lib lib/${CMAKE_SHARED_LIBRARY_PREFIX}${lib_name}${CMAKE_SHARED_LIBRARY_SUFFIX}) 448 set(lib lib/${CMAKE_SHARED_LIBRARY_PREFIX}${lib_name}${CMAKE_SHARED_LIBRARY_SUFFIX})
449 set(build_type SHARED) 449 set(build_type SHARED)
450 else(BUILD_SHARED_LIBRARIES) 450 else(BUILD_SHARED_LIBRARIES)
451 set(lib lib/${D_LIB_PREFIX}${lib_name}${D_LIB_SUFFIX}) 451 set(lib lib/${D_LIB_PREFIX}${lib_name}${D_LIB_SUFFIX})
452 set(build_type STATIC) 452 set(build_type STATIC)
453 endif(BUILD_SHARED_LIBRARIES) 453 endif(BUILD_SHARED_LIBRARIES)
454 454
455 foreach(req ${required}) 455 foreach(req ${required})
456 set(is_found) 456 set(is_found)
457 foreach(pack ${packages_big}) 457 foreach(pack ${packages_big})
458 if("${pack}" STREQUAL "${req}") 458 if("${pack}" STREQUAL "${req}")
459 set(is_found 1) 459 set(is_found 1)
460 break(pack ${packages_big}) 460 break(pack ${packages_big})
461 endif("${pack}" STREQUAL "${req}") 461 endif("${pack}" STREQUAL "${req}")
462 endforeach(pack ${packages_big}) 462 endforeach(pack ${packages_big})
463 if(NOT is_found) 463 if(NOT is_found)
464 message(FATAL_ERROR "Package ${package_big} requires ${req}, but it is not found") 464 message(FATAL_ERROR "Package ${package_big} requires ${req}, but it is not found")
465 endif(NOT is_found) 465 endif(NOT is_found)
466 string(TOUPPER ${req} req_upper) 466 string(TOUPPER ${req} req_upper)
467 string(TOLOWER ${req} req_lower) 467 string(TOLOWER ${req} req_lower)
468 set(link_cpp ${link_cpp} cpp_${req_lower} ${QT_QT${req_upper}_LIBRARY}) 468 set(link_cpp ${link_cpp} cpp_${req_lower} ${QT_QT${req_upper}_LIBRARY})
469 endforeach(req ${require}) 469 endforeach(req ${require})
470 set(d_objs ${d_objs} ${objects}) 470 set(d_objs ${d_objs} ${objects})
471 471
472 set_property(TARGET cpp_${package} PROPERTY RUNTIME_OUTPUT_DIRECTORY lib) 472 set_property(TARGET cpp_${package} PROPERTY RUNTIME_OUTPUT_DIRECTORY lib)
473 set_property(TARGET cpp_${package} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles) 473 set_property(TARGET cpp_${package} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles)
474 string(TOUPPER ${package} package_upper) 474 string(TOUPPER ${package} package_upper)
475 set(link_cpp ${link_cpp} ${QT_QT${package_upper}_LIBRARY}) 475 set(link_cpp ${link_cpp} ${QT_QT${package_upper}_LIBRARY})
476 target_link_libraries(cpp_${package} ${link_cpp} ) 476 target_link_libraries(cpp_${package} ${link_cpp} )
477 if(CPP_SHARED) 477 if(CPP_SHARED)
478 set(cpp_lib ${CMAKE_BINARY_DIR}/lib/libcpp_${package}.dll) 478 set(cpp_lib ${CMAKE_BINARY_DIR}/lib/libcpp_${package}.dll)
479 set(cpp_lib_native ${cpp_lib}) 479 set(cpp_lib_native ${cpp_lib})
480 make_native_path(cpp_lib_native) 480 make_native_path(cpp_lib_native)
481 set(d_implib ${CMAKE_BINARY_DIR}/CMakeFiles/${package}.dir/cpp_${package}.lib) 481 set(d_implib ${CMAKE_BINARY_DIR}/CMakeFiles/${package}.dir/cpp_${package}.lib)
482 set(d_implib_native ${d_implib}) 482 set(d_implib_native ${d_implib})
483 make_native_path(d_implib_native) 483 make_native_path(d_implib_native)
484 add_custom_command( 484 add_custom_command(
485 OUTPUT "${d_implib}" 485 OUTPUT "${d_implib}"
486 COMMAND "${IMPLIB}" 486 COMMAND "${IMPLIB}"
487 ARGS /system /PAGESIZE:32 ${d_implib_native} ${cpp_lib_native} 487 ARGS /system /PAGESIZE:32 ${d_implib_native} ${cpp_lib_native}
488 DEPENDS "cpp_${package}" 488 DEPENDS "cpp_${package}"
489 COMMENT "Creating implib ${lib_name}" 489 COMMENT "Creating implib ${lib_name}"
490 ) 490 )
491 install(FILES ${cpp_lib} COMPONENT qtd DESTINATION lib) 491 install(FILES ${cpp_lib} COMPONENT qtd DESTINATION lib)
492 else(CPP_SHARED) 492 else(CPP_SHARED)
493 set(${package}_lib_param Qt${package_big}) ## Paths for QtD libs. Needed by examples. 493 set(${package}_lib_param Qt${package_big}) ## Paths for QtD libs. Needed by examples.
494 endif(CPP_SHARED) 494 endif(CPP_SHARED)
495 add_d_target(${lib_name} NOT_DETECT_DEPENDS TYPE ${build_type} INCLUDES ${QTD_IMPORT_PATH} SOURCES ${d_sources} OBJECTS ${cpp_objs} ${d_implib} 495 add_d_target(${lib_name} NOT_DETECT_DEPENDS TYPE ${build_type} INCLUDES ${QTD_IMPORT_PATH} SOURCES ${d_sources} OBJECTS ${cpp_objs} ${d_implib}
496 OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib DEPENDS ${d_implib} ) 496 OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib DEPENDS ${d_implib} )
497 497
498 install(FILES ${CMAKE_BINARY_DIR}/${lib} COMPONENT qtd DESTINATION lib) 498 install(FILES ${CMAKE_BINARY_DIR}/${lib} COMPONENT qtd DESTINATION lib)
499 ## Paths for QtD libs. Needed by examples. 499 ## Paths for QtD libs. Needed by examples.
500 set(${package}_lib_param qtd${package} ${${package}_lib_param} ${link_example}) 500 set(${package}_lib_param qtd${package} ${${package}_lib_param} ${link_example})
501 501
502 ## Dependences. 502 ## Dependences.
503 add_custom_target(${package}) 503 add_custom_target(${package})
504 add_dependencies(${package} ${lib_name}) 504 add_dependencies(${package} ${lib_name})
505 add_dependencies(${lib_name} cpp_${package}) 505 add_dependencies(${lib_name} cpp_${package})
506 foreach(depend ${required}) 506 foreach(depend ${required})
507 string(TOLOWER ${depend} depend) 507 string(TOLOWER ${depend} depend)
508 add_dependencies(cpp_${package} cpp_${depend}) 508 add_dependencies(cpp_${package} cpp_${depend})
509 add_dependencies(${package} ${depend}) 509 add_dependencies(${package} ${depend})
510 endforeach(depend ${required}) 510 endforeach(depend ${required})
511 add_dependencies(allpackages ${package}) 511 add_dependencies(allpackages ${package})
512 512
513 if(GENERATE_DI_FILES) 513 if(GENERATE_DI_FILES)
514 regexseafestring(cbd_safe ${CMAKE_BINARY_DIR}) 514 regexseafestring(cbd_safe ${CMAKE_BINARY_DIR})
515 regexseafestring(csd_safe ${CMAKE_SOURCE_DIR}) 515 regexseafestring(csd_safe ${CMAKE_SOURCE_DIR})
516 set(regexp_str "(${csd}/qt/d${D_VERSION}|${csd_safe}|${cbd_safe})/([A-Za-z0-9\\-_\\\\/]+)[/]+([A-Za-z0-9\\-_\\\\]+).d") 516 set(regexp_str "(${csd}/qt/d${D_VERSION}|${csd_safe}|${cbd_safe})/([A-Za-z0-9\\-_\\\\/]+)[/]+([A-Za-z0-9\\-_\\\\]+).d")
517 foreach(source ${d_sources}) 517 foreach(source ${d_sources})
518 # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} 518 # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
519 # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) 519 # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
520 string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}") 520 string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}")
521 string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}") 521 string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}")
522 set(interface_file_path ${CMAKE_BINARY_DIR}/d/${inc_path}) 522 set(interface_file_path ${CMAKE_BINARY_DIR}/d/${inc_path})
523 set(interface_file "${interface_file_path}/${file_name}.di") 523 set(interface_file "${interface_file_path}/${file_name}.di")
524 if(NOT "${file_name}" STREQUAL "QGlobal") 524 if(NOT "${file_name}" STREQUAL "QGlobal")
525 add_custom_command(OUTPUT "${interface_file}" 525 add_custom_command(OUTPUT "${interface_file}"
526 COMMAND "${DC}" 526 COMMAND "${DC}"
527 ARGS ${D_FLAGS} -o- -H -Hd${interface_file_path} ${source} 527 ARGS ${D_FLAGS} -o- -H -Hd${interface_file_path} ${source}
528 COMMENT "Generating header for ${source}" 528 COMMENT "Generating header for ${source}"
529 DEPENDS ${source} 529 DEPENDS ${source}
530 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 530 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
531 ) 531 )
532 else(NOT "${file_name}" STREQUAL "QGlobal") ## The DMD frontend crashes on this file. 532 else(NOT "${file_name}" STREQUAL "QGlobal") ## The DMD frontend crashes on this file.
533 add_custom_command(OUTPUT "${interface_file}" 533 add_custom_command(OUTPUT "${interface_file}"
534 COMMAND ${CMAKE_COMMAND} -E make_directory ${interface_file_path} 534 COMMAND ${CMAKE_COMMAND} -E make_directory ${interface_file_path}
535 COMMAND ${CMAKE_COMMAND} -E remove -f ${interface_file} 535 COMMAND ${CMAKE_COMMAND} -E remove -f ${interface_file}
536 COMMAND ${CMAKE_COMMAND} -E copy ${source} ${interface_file} 536 COMMAND ${CMAKE_COMMAND} -E copy ${source} ${interface_file}
537 COMMENT "" 537 COMMENT ""
538 DEPENDS ${source} 538 DEPENDS ${source}
539 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 539 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
540 ) 540 )
541 endif(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES) 541 endif(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES)
542 set(interfaces_list ${interfaces_list} ${interface_file_path}/${file_name}.di) 542 set(interfaces_list ${interfaces_list} ${interface_file_path}/${file_name}.di)
543 install(FILES ${interface_file} COMPONENT qtd DESTINATION include/d/${inc_path}) 543 install(FILES ${interface_file} COMPONENT qtd DESTINATION include/d/${inc_path})
544 endforeach(source) 544 endforeach(source)
545 endif(GENERATE_DI_FILES) 545 endif(GENERATE_DI_FILES)
546 endif("${all_req_found}" EQUAL 1) 546 endif("${all_req_found}" EQUAL 1)
547 endforeach(package_big ${packages_big}) 547 endforeach(package_big ${packages_big})
548 if(GENERATE_DI_FILES) 548 if(GENERATE_DI_FILES)
549 add_custom_target(generate_headers ALL DEPENDS ${interfaces_list}) 549 add_custom_target(generate_headers ALL DEPENDS ${interfaces_list})
550 endif(GENERATE_DI_FILES) 550 endif(GENERATE_DI_FILES)