Mercurial > projects > qtd
comparison CMakeLists.txt @ 264:da7c867ef2ef
1) A bug is fixed when the generator doesn't restart if typesystem_${package}-java.java has been changed.
2) Refactoring.
author | SokoL_SD |
---|---|
date | Mon, 07 Sep 2009 11:37:16 +0000 |
parents | 34a37904ff77 |
children | 6cd923119ab1 |
comparison
equal
deleted
inserted
replaced
256:b1abe7f57321 | 264:da7c867ef2ef |
---|---|
1 cmake_minimum_required(VERSION 2.6) | 1 cmake_minimum_required(VERSION 2.6) |
2 PROJECT(qtd CXX C) | 2 PROJECT(qtd CXX C) |
3 | 3 |
4 ########################################################## | 4 ########################################################## |
5 ## Building generator && settings. | 5 ## Build generator. |
6 ########################################################## | 6 ########################################################## |
7 if(NOT SECOND_RUN) | 7 if(NOT SECOND_RUN) |
8 | 8 |
9 option(ALLOW_IN_SOURCE_BUILDS "Allow in-source builds" "OFF") | 9 option(ALLOW_IN_SOURCE_BUILDS "Allow in-source builds" "OFF") |
10 if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT ALLOW_IN_SOURCE_BUILDS) | 10 if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT ALLOW_IN_SOURCE_BUILDS) |
64 set(CMAKE_BUILD_TYPE Debug) | 64 set(CMAKE_BUILD_TYPE Debug) |
65 #set( SUFFIXLIB "${SUFFIXLIB}-debug" ) | 65 #set( SUFFIXLIB "${SUFFIXLIB}-debug" ) |
66 #set( SUFFIXBIN "${SUFFIXBIN}-debug" ) | 66 #set( SUFFIXBIN "${SUFFIXBIN}-debug" ) |
67 add_definitions(-DDEBUG) | 67 add_definitions(-DDEBUG) |
68 elseif (NOT ${CMAKE_BUILD_TYPE} MATCHES [rR][eE][lL][eE][aA][sS]) | 68 elseif (NOT ${CMAKE_BUILD_TYPE} MATCHES [rR][eE][lL][eE][aA][sS]) |
69 message(STATUS "Only debug and release configurations are supproted now. Configuration will change to 'Release'") | 69 message(STATUS "Only debug and release configurations are supproted. The configuration is changed to 'Release'") |
70 set(CMAKE_BUILD_TYPE Release) | 70 set(CMAKE_BUILD_TYPE Release) |
71 endif (${CMAKE_BUILD_TYPE} MATCHES [dD][eE][bB][uU][gG]) | 71 endif (${CMAKE_BUILD_TYPE} MATCHES [dD][eE][bB][uU][gG]) |
72 if (${CMAKE_BUILD_TYPE} MATCHES [rR][eE][lL][eE][aA][sS]) | 72 if (${CMAKE_BUILD_TYPE} MATCHES [rR][eE][lL][eE][aA][sS]) |
73 #add_definitions(-UNO_DEBUG) | 73 #add_definitions(-UNO_DEBUG) |
74 endif(${CMAKE_BUILD_TYPE} MATCHES [rR][eE][lL][eE][aA][sS] ) | 74 endif(${CMAKE_BUILD_TYPE} MATCHES [rR][eE][lL][eE][aA][sS] ) |
108 set(make_util nmake) | 108 set(make_util nmake) |
109 elseif(${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles" OR | 109 elseif(${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles" OR |
110 ${CMAKE_GENERATOR} STREQUAL "Unix Makefiles") | 110 ${CMAKE_GENERATOR} STREQUAL "Unix Makefiles") |
111 set(make_util $(MAKE)) | 111 set(make_util $(MAKE)) |
112 else(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") | 112 else(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") |
113 message(FATAL_ERROR "${CMAKE_GENERATOR} isn't supported") | 113 message(FATAL_ERROR "${CMAKE_GENERATOR} is not supported") |
114 endif(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") | 114 endif(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") |
115 | 115 |
116 if(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) | 116 if(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) |
117 set(cd_path ${CMAKE_SOURCE_DIR}) | 117 set(cd_path ${CMAKE_SOURCE_DIR}) |
118 else(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) | 118 else(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) |
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 install" command. |
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 ) |
155 set(CPACK_GENERATOR "TBZ2;DEB;RPM") | 155 set(CPACK_GENERATOR "TBZ2;DEB;RPM") |
156 endif(CMAKE_HOST_WIN32) | 156 endif(CMAKE_HOST_WIN32) |
157 include(CPack) | 157 include(CPack) |
158 | 158 |
159 ########################################################## | 159 ########################################################## |
160 ## Building QtD. | 160 ## Build QtD. |
161 ########################################################## | 161 ########################################################## |
162 else(NOT SECOND_RUN) | 162 else(NOT SECOND_RUN) |
163 | 163 |
164 PROJECT(qtd CXX C) | 164 PROJECT(qtd CXX C) |
165 if(NOT ${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) | 165 if(NOT ${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) |
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 ## Parses 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 ) |
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 ## Adds a new example. |
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 for link to example (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) |
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 be built") |
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 be built") |
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 |
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 be built") |
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: Uncomment. |
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 |
325 ##-------------------------------------------- | 325 ##-------------------------------------------- |
326 ## Build and install library. | 326 ## Build and install the QtD libraries. |
327 ##-------------------------------------------- | 327 ##-------------------------------------------- |
328 | 328 |
329 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib) | 329 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib) |
330 add_custom_target(allpackages) | 330 add_custom_target(allpackages) |
331 link_directories(${CMAKE_BINARY_DIR}/CMakeFiles) | 331 link_directories(${CMAKE_BINARY_DIR}/CMakeFiles) |
332 | 332 |
333 foreach(package_big ${all_packages}) | 333 foreach(package_big ${all_packages}) |
334 string(TOLOWER ${package_big} package) | 334 string(TOLOWER ${package_big} package) |
335 ## Loading settings for package. | 335 string(TOUPPER ${package} package_upper) |
336 ## Load settings for the package. | |
336 set(required) | 337 set(required) |
337 set(d_objs) | 338 set(d_objs) |
338 set(cpp_objs) | 339 set(cpp_objs) |
339 set(d_sources) | 340 set(d_sources) |
340 set(cpp_sources) | 341 set(cpp_sources) |
377 endforeach(req ${required}) | 378 endforeach(req ${required}) |
378 else(BUILD_QT_${package_upper}) | 379 else(BUILD_QT_${package_upper}) |
379 set(all_req_found) | 380 set(all_req_found) |
380 endif(BUILD_QT_${package_upper}) | 381 endif(BUILD_QT_${package_upper}) |
381 | 382 |
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 ## Load a package sources list. |
387 foreach(d_source ${package}/ArrayOps2 ${d_generated_files}) | 387 foreach(d_source ${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}/qt/${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 ) | |
394 if(EXISTS ${aux_name}) | |
395 set(d_sources ${d_sources} ${aux_name}) | |
396 endif(EXISTS ${aux_name}) | |
397 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp) | 393 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp) |
398 endforeach(class ${classes}) | 394 endforeach(class ${classes}) |
399 set(files_for_gen ${files_for_gen} ${cpp_sources} ${d_sources}) | 395 set(files_for_gen ${files_for_gen} ${cpp_sources} ${d_sources}) |
400 | 396 |
401 foreach (cpp_source ${cpp_files}) | 397 foreach (cpp_source ${cpp_files}) |
411 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d) | 407 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d) |
412 endforeach(d_source ${d_files}) | 408 endforeach(d_source ${d_files}) |
413 | 409 |
414 if(NOT GENERATE_DI_FILES) | 410 if(NOT GENERATE_DI_FILES) |
415 foreach(d_source ${d_sources}) | 411 foreach(d_source ${d_sources}) |
416 get_filename_component(path ${d_source} PATH) | 412 get_filename_component(path ${d_source} PATH) |
417 get_filename_component(name ${d_source} NAME_WE) | 413 get_filename_component(name ${d_source} NAME_WE) |
418 regex_safe_string(cbd_safe_tmp ${CMAKE_CURRENT_BINARY_DIR}) | 414 regex_safe_string(cbd_safe_tmp ${CMAKE_CURRENT_BINARY_DIR}) |
419 regex_safe_string(csd_safe_tmp ${CMAKE_CURRENT_SOURCE_DIR}) | 415 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}) | 416 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}/|)(.+)") | 417 set(regexp_str_tmp "(${ver_safe_tmp}/|${cbd_safe_tmp}/|${csd_safe_tmp}/|)(.+)") |
422 string(REGEX REPLACE ${regexp_str_tmp} "\\2" ins_path "${path}") | 418 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) | 419 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) | 420 install(FILES ${path}/${name}_enum.d DESTINATION include/d/${ins_path} COMPONENT qtd RENAME ${name}_enum.di OPTIONAL) |
425 endforeach(d_source ${d_sources}) | 421 endforeach(d_source ${d_sources}) |
426 endif(NOT GENERATE_DI_FILES) | 422 endif(NOT GENERATE_DI_FILES) |
427 | 423 |
428 ## Link CPP library. | 424 ## Build the CPP part. |
429 if(CPP_SHARED) | 425 if(CPP_SHARED) |
430 set(cpp_method SHARED) | 426 set(cpp_method SHARED) |
431 else(CPP_SHARED) | 427 else(CPP_SHARED) |
432 set(cpp_method STATIC) | 428 set(cpp_method STATIC) |
433 endif(CPP_SHARED) | 429 endif(CPP_SHARED) |
434 add_library(cpp_${package} ${cpp_method} ${cpp_sources}) | 430 add_library(cpp_${package} ${cpp_method} ${cpp_sources}) |
435 set_property(TARGET cpp_${package} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles) | 431 set_property(TARGET cpp_${package} PROPERTY RUNTIME_OUTPUT_DIRECTORY lib) |
432 set_property(TARGET cpp_${package} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles) | |
433 set(link_cpp ${link_cpp} ${QT_QT${package_upper}_LIBRARY}) | |
434 target_link_libraries(cpp_${package} ${link_cpp} ) | |
436 if(CPP_SHARED) | 435 if(CPP_SHARED) |
437 else(CPP_SHARED) | 436 else(CPP_SHARED) |
437 ## Get an objects list. It will be used in building the D part. | |
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 ## Settings for the D part. |
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 ## A test of packages dependencies. | |
455 foreach(req ${required}) | 456 foreach(req ${required}) |
456 set(is_found) | 457 set(is_found) |
457 foreach(pack ${packages_big}) | 458 foreach(pack ${packages_big}) |
458 if("${pack}" STREQUAL "${req}") | 459 if("${pack}" STREQUAL "${req}") |
459 set(is_found 1) | 460 set(is_found 1) |
467 string(TOLOWER ${req} req_lower) | 468 string(TOLOWER ${req} req_lower) |
468 set(link_cpp ${link_cpp} cpp_${req_lower} ${QT_QT${req_upper}_LIBRARY}) | 469 set(link_cpp ${link_cpp} cpp_${req_lower} ${QT_QT${req_upper}_LIBRARY}) |
469 endforeach(req ${require}) | 470 endforeach(req ${require}) |
470 set(d_objs ${d_objs} ${objects}) | 471 set(d_objs ${d_objs} ${objects}) |
471 | 472 |
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) | |
474 string(TOUPPER ${package} package_upper) | |
475 set(link_cpp ${link_cpp} ${QT_QT${package_upper}_LIBRARY}) | |
476 target_link_libraries(cpp_${package} ${link_cpp} ) | |
477 if(CPP_SHARED) | 473 if(CPP_SHARED) |
474 ## Create an implib library which will be linked to the D part. | |
478 set(cpp_lib ${CMAKE_BINARY_DIR}/lib/libcpp_${package}.dll) | 475 set(cpp_lib ${CMAKE_BINARY_DIR}/lib/libcpp_${package}.dll) |
479 set(cpp_lib_native ${cpp_lib}) | 476 set(cpp_lib_native ${cpp_lib}) |
480 make_native_path(cpp_lib_native) | 477 make_native_path(cpp_lib_native) |
481 set(d_implib ${CMAKE_BINARY_DIR}/CMakeFiles/${package}.dir/cpp_${package}.lib) | 478 set(d_implib ${CMAKE_BINARY_DIR}/CMakeFiles/${package}.dir/cpp_${package}.lib) |
482 set(d_implib_native ${d_implib}) | 479 set(d_implib_native ${d_implib}) |
488 DEPENDS "cpp_${package}" | 485 DEPENDS "cpp_${package}" |
489 COMMENT "Creating implib ${lib_name}" | 486 COMMENT "Creating implib ${lib_name}" |
490 ) | 487 ) |
491 install(FILES ${cpp_lib} COMPONENT qtd DESTINATION lib) | 488 install(FILES ${cpp_lib} COMPONENT qtd DESTINATION lib) |
492 else(CPP_SHARED) | 489 else(CPP_SHARED) |
493 set(${package}_lib_param Qt${package_big}) ## Paths for QtD libs. Needed by examples. | 490 set(${package}_lib_param Qt${package_big}) |
494 endif(CPP_SHARED) | 491 endif(CPP_SHARED) |
492 ## Link the D part. | |
495 add_d_target(${lib_name} NOT_DETECT_DEPENDS TYPE ${build_type} INCLUDES ${QTD_IMPORT_PATH} SOURCES ${d_sources} OBJECTS ${cpp_objs} ${d_implib} | 493 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} ) | 494 OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib DEPENDS ${d_implib} ) |
497 | |
498 install(FILES ${CMAKE_BINARY_DIR}/${lib} COMPONENT qtd DESTINATION lib) | 495 install(FILES ${CMAKE_BINARY_DIR}/${lib} COMPONENT qtd DESTINATION lib) |
499 ## Paths for QtD libs. Needed by examples. | 496 ## Paths for the QtD libs. It is necessary for examples. |
500 set(${package}_lib_param qtd${package} ${${package}_lib_param} ${link_example}) | 497 set(${package}_lib_param qtd${package} ${${package}_lib_param} ${link_example}) |
501 | 498 |
502 ## Dependences. | 499 ## Generate dependences for make (or nmake). |
503 add_custom_target(${package}) | 500 add_custom_target(${package}) |
504 add_dependencies(${package} ${lib_name}) | 501 add_dependencies(${package} ${lib_name}) |
505 add_dependencies(${lib_name} cpp_${package}) | 502 add_dependencies(${lib_name} cpp_${package}) |
506 foreach(depend ${required}) | 503 foreach(depend ${required}) |
507 string(TOLOWER ${depend} depend) | 504 string(TOLOWER ${depend} depend) |
508 add_dependencies(cpp_${package} cpp_${depend}) | 505 add_dependencies(cpp_${package} cpp_${depend}) |
509 add_dependencies(${package} ${depend}) | 506 add_dependencies(${package} ${depend}) |
510 endforeach(depend ${required}) | 507 endforeach(depend ${required}) |
511 add_dependencies(allpackages ${package}) | 508 add_dependencies(allpackages ${package}) |
512 | 509 |
510 ## TODO: Do we need generating of *.di files? | |
513 if(GENERATE_DI_FILES) | 511 if(GENERATE_DI_FILES) |
514 regexseafestring(cbd_safe ${CMAKE_BINARY_DIR}) | 512 regexseafestring(cbd_safe ${CMAKE_BINARY_DIR}) |
515 regexseafestring(csd_safe ${CMAKE_SOURCE_DIR}) | 513 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") | 514 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}) | 515 foreach(source ${d_sources}) |
518 # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} | 516 # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} |
519 # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) | 517 # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) |
520 string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}") | 518 string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}") |
521 string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}") | 519 string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}") |
522 set(interface_file_path ${CMAKE_BINARY_DIR}/d/${inc_path}) | 520 set(interface_file_path ${CMAKE_BINARY_DIR}/d/${inc_path}) |
523 set(interface_file "${interface_file_path}/${file_name}.di") | 521 set(interface_file "${interface_file_path}/${file_name}.di") |
524 if(NOT "${file_name}" STREQUAL "QGlobal") | 522 if(NOT "${file_name}" STREQUAL "QGlobal") |
525 add_custom_command(OUTPUT "${interface_file}" | 523 add_custom_command(OUTPUT "${interface_file}" |
526 COMMAND "${DC}" | 524 COMMAND "${DC}" |
527 ARGS ${D_FLAGS} -o- -H -Hd${interface_file_path} ${source} | 525 ARGS ${D_FLAGS} -o- -H -Hd${interface_file_path} ${source} |
528 COMMENT "Generating header for ${source}" | 526 COMMENT "Generating header for ${source}" |
529 DEPENDS ${source} | 527 DEPENDS ${source} |
530 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | 528 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
531 ) | 529 ) |
532 else(NOT "${file_name}" STREQUAL "QGlobal") ## The DMD frontend crashes on this file. | 530 else(NOT "${file_name}" STREQUAL "QGlobal") ## The DMD frontend crashes on this file. |
533 add_custom_command(OUTPUT "${interface_file}" | 531 add_custom_command(OUTPUT "${interface_file}" |
534 COMMAND ${CMAKE_COMMAND} -E make_directory ${interface_file_path} | 532 COMMAND ${CMAKE_COMMAND} -E make_directory ${interface_file_path} |
535 COMMAND ${CMAKE_COMMAND} -E remove -f ${interface_file} | 533 COMMAND ${CMAKE_COMMAND} -E remove -f ${interface_file} |
536 COMMAND ${CMAKE_COMMAND} -E copy ${source} ${interface_file} | 534 COMMAND ${CMAKE_COMMAND} -E copy ${source} ${interface_file} |
537 COMMENT "" | 535 COMMENT "" |
538 DEPENDS ${source} | 536 DEPENDS ${source} |
539 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | 537 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
540 ) | 538 ) |
541 endif(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES) | 539 endif(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES) |
542 set(interfaces_list ${interfaces_list} ${interface_file_path}/${file_name}.di) | 540 set(interfaces_list ${interfaces_list} ${interface_file_path}/${file_name}.di) |
543 install(FILES ${interface_file} COMPONENT qtd DESTINATION include/d/${inc_path}) | 541 install(FILES ${interface_file} COMPONENT qtd DESTINATION include/d/${inc_path}) |
544 endforeach(source) | 542 endforeach(source) |
545 endif(GENERATE_DI_FILES) | 543 endif(GENERATE_DI_FILES) |
546 endif("${all_req_found}" EQUAL 1) | 544 endif("${all_req_found}" EQUAL 1) |
547 endforeach(package_big ${packages_big}) | 545 endforeach(package_big ${packages_big}) |
548 if(GENERATE_DI_FILES) | 546 if(GENERATE_DI_FILES) |
549 add_custom_target(generate_headers ALL DEPENDS ${interfaces_list}) | 547 add_custom_target(generate_headers ALL DEPENDS ${interfaces_list}) |