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})