comparison CMakeLists.txt @ 27:a9626891eca6

CMake: generator will work only for needed packages. CMake: check for depends packages. CMake: add options 'QT_BUILD_PACKAGE'. Now you can build only needed packages.
author SokoL_SD
date Fri, 15 May 2009 16:42:02 +0000
parents ebdd676d0b60
children 10baf869635a
comparison
equal deleted inserted replaced
26:6873e4b22c08 27:a9626891eca6
7 ##-------------------------------------------- 7 ##--------------------------------------------
8 8
9 include_directories(${QT_INCLUDES} include ${CMAKE_CURRENT_BINARY_DIR}/include) 9 include_directories(${QT_INCLUDES} include ${CMAKE_CURRENT_BINARY_DIR}/include)
10 10
11 ## Options. 11 ## Options.
12 option(BUILD_QT_OPENGL "Build QtOpenGL" "ON")
13 option(BUILD_EXAMPLES "Build examples" "ON") 12 option(BUILD_EXAMPLES "Build examples" "ON")
14 option(GENERATE_DI_FILES "Generate *.di files with DC -H command" "OFF") 13 option(GENERATE_DI_FILES "Generate *.di files with DC -H command" "OFF")
15 14
16 ## Packages list. 15 set(all_packages Core Gui OpenGL) ## TODO: Loading.
17 set(packages_big Core Gui) 16
18 if(BUILD_QT_OPENGL)
19 set(packages_big ${packages_big} OpenGL)
20 endif(BUILD_QT_OPENGL)
21
22 set(packages)
23 foreach(package ${packages_big})
24 string(TOLOWER ${package} package)
25 set(packages ${packages} ${package})
26 endforeach(package ${packages_big})
27 17
28 ## Strip utility. 18 ## Strip utility.
29 find_program(STRIP strip) 19 find_program(STRIP strip)
30 20
31 ## Find D compiler and parsing its version. 21 ## Find D compiler and parsing its version.
262 ## build_example(ExampleName PACKAGES QtCore QtGui QtXml main.d another_d_file.d) 252 ## build_example(ExampleName PACKAGES QtCore QtGui QtXml main.d another_d_file.d)
263 macro(build_example name) 253 macro(build_example name)
264 set(is_sources) 254 set(is_sources)
265 set(is_libs) 255 set(is_libs)
266 set(qtd_libs ${core_lib_param} ${gui_lib_param}) 256 set(qtd_libs ${core_lib_param} ${gui_lib_param})
257 set(reqs Core Gui)
267 foreach(param ${ARGN}) 258 foreach(param ${ARGN})
268 if(is_libs) 259 if(is_libs)
269 string(REGEX REPLACE "Qt([A-Za-z0-9])" "\\1" param_package "${param}") 260 string(REGEX REPLACE "Qt([A-Za-z0-9])" "\\1" param_package "${param}")
270 if(${param_package} STREQUAL ${param}) 261 if(${param_package} STREQUAL ${param})
271 set(is_libs) 262 set(is_libs)
272 set(is_sources 1) 263 set(is_sources 1)
273 else(${param_package} STREQUAL ${param}) 264 else(${param_package} STREQUAL ${param})
274 set(is_founded) 265 set(reqs ${reqs} ${param_package})
275 foreach(package_big ${packages_big})
276 string(TOLOWER ${package_big} package)
277 if(${param_package} STREQUAL ${package_big})
278 set(qtd_libs ${qtd_libs} ${${package}_lib_param})
279 set(is_founded 1)
280 break(package_big ${packages_big})
281 endif(${param_package} STREQUAL ${package_big})
282 endforeach(package_big ${packages_big})
283 if(NOT is_founded)
284 message(STATUS "Module ${param_package} not founded for example ${name}")
285 return(build_example name)
286 endif(NOT is_founded)
287 endif(${param_package} STREQUAL ${param}) 266 endif(${param_package} STREQUAL ${param})
288 endif(is_libs) 267 endif(is_libs)
289 if(NOT is_libs) 268 if(NOT is_libs)
290 if(NOT is_sources) 269 if(NOT is_sources)
291 if(${param} STREQUAL PACKAGES) 270 if(${param} STREQUAL PACKAGES)
292 set(is_libs 1) 271 set(is_libs 1)
293 set(qtd_libs) 272 set(reqs)
294 else(${param} STREQUAL PACKAGES) 273 else(${param} STREQUAL PACKAGES)
295 set(is_sources 1) 274 set(is_sources 1)
296 endif(${param} STREQUAL PACKAGES) 275 endif(${param} STREQUAL PACKAGES)
297 endif(NOT is_sources) 276 endif(NOT is_sources)
298 if(is_sources) 277 if(is_sources)
302 endforeach(param ${ARGN}) 281 endforeach(param ${ARGN})
303 compile_d_files(${name}_dobjs objects ${sources} ) 282 compile_d_files(${name}_dobjs objects ${sources} )
304 set(output ${CMAKE_CURRENT_BINARY_DIR}/${name}${CMAKE_EXECUTABLE_SUFFIX}) 283 set(output ${CMAKE_CURRENT_BINARY_DIR}/${name}${CMAKE_EXECUTABLE_SUFFIX})
305 set(output_native ${output}) 284 set(output_native ${output})
306 make_native_path(output_native) 285 make_native_path(output_native)
307 ## Bug fix: Reverse libs for ldc. 286 foreach(req ${reqs})
308 if(D_IS_LLVM) 287 set(is_founded)
309 set(qtd_libs_tmp ${qtd_libs}) 288 foreach(package_big ${packages_big})
310 set(qtd_libs) 289 string(TOLOWER ${package_big} package)
311 foreach(libs ${qtd_libs_tmp}) 290 if(${req} STREQUAL ${package_big})
312 set(qtd_libs ${libs} ${qtd_libs}) 291 set(is_founded 1)
313 endforeach(libs ${qtd_libs_tmp}) 292 break(package_big ${packages_big})
314 endif(D_IS_LLVM) 293 endif(${req} STREQUAL ${package_big})
294 endforeach(package_big ${packages_big})
295 if(NOT is_founded)
296 message(STATUS "Example '${name}' required package '${req}', but its not active. Example will not build")
297 return(build_example name)
298 else(NOT is_founded)
299 set(qtd_libs ${${package}_lib_param} ${qtd_libs})
300 endif(NOT is_founded)
301 endforeach(req ${reqs})
315 add_custom_command(OUTPUT "${output}" 302 add_custom_command(OUTPUT "${output}"
316 COMMAND "${DC}" 303 COMMAND "${DC}"
317 ARGS ${D_FLAGS} ${libs_path} ${qtd_libs} ${objects} 304 ARGS ${D_FLAGS} ${libs_path} ${qtd_libs} ${objects}
318 -of${output_native} 305 -of${output_native}
319 DEPENDS ${objects} 306 DEPENDS ${objects}
329 endmacro(build_example sources) 316 endmacro(build_example sources)
330 317
331 ##-------------------------------------------- 318 ##--------------------------------------------
332 ## Build and install library. 319 ## Build and install library.
333 ##-------------------------------------------- 320 ##--------------------------------------------
334 add_subdirectory(generator) 321
335 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 322 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
336 add_custom_target(allpackages ALL) 323 add_custom_target(allpackages ALL)
337 link_directories(${CMAKE_BINARY_DIR}/CMakeFiles) 324 link_directories(${CMAKE_BINARY_DIR}/CMakeFiles)
338 325 #add_dgen_target(all ${packages})
339 foreach(package_big ${packages_big}) 326
327 foreach(package_big ${all_packages})
340 string(TOLOWER ${package_big} package) 328 string(TOLOWER ${package_big} package)
341 ## Loading settings for package. 329 ## Loading settings for package.
330 set(required)
342 set(d_objs) 331 set(d_objs)
343 set(cpp_objs) 332 set(cpp_objs)
344 set(d_sources) 333 set(d_sources)
345 set(cpp_sources) 334 set(cpp_sources)
346 set(lib_name) 335 set(lib_name)
352 set(d_generated_files) 341 set(d_generated_files)
353 set(d_version_files) 342 set(d_version_files)
354 set(link_example) 343 set(link_example)
355 include (${CMAKE_SOURCE_DIR}/build/${package}.txt) 344 include (${CMAKE_SOURCE_DIR}/build/${package}.txt)
356 345
357 ## Loading package sources list. 346 set(all_req_found 1)
358 foreach(d_source ${d_version_files}) 347 string(TOUPPER ${package} package_upper)
359 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}/qt/${d_source}.d) 348 option(BUILD_QT_${package_upper} "Build Qt${package}" "ON")
360 if(NOT GENERATE_DI_FILES) 349 if(BUILD_QT_${package_upper})
361 get_filename_component(path ${d_source}.d PATH) 350 foreach(req ${required})
362 get_filename_component(name ${d_source}.d NAME_WE) 351 set(req_found)
363 install(FILES ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di) 352 foreach(pack ${packages_big})
364 endif(NOT GENERATE_DI_FILES) 353 if(${pack} STREQUAL ${req})
365 endforeach(d_source) 354 set(req_found 1)
366 foreach(d_source ${d_files}) 355 endif(${pack} STREQUAL ${req})
367 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d) 356 endforeach(pack ${packages})
368 if(NOT GENERATE_DI_FILES) 357 if(NOT req_found)
369 get_filename_component(path ${d_source}.d PATH) 358 set(req_found)
370 get_filename_component(name ${d_source}.d NAME_WE) 359 foreach(pack ${all_packages})
371 install(FILES ${CMAKE_SOURCE_DIR}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di) 360 if(${pack} STREQUAL ${req})
372 endif(NOT GENERATE_DI_FILES) 361 set(req_found 1)
373 endforeach(d_source) 362 endif(${pack} STREQUAL ${req})
374 foreach(d_source ${d_generated_files}) 363 endforeach(pack ${all_packages})
375 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d) 364 if(req_found)
376 if(NOT GENERATE_DI_FILES) 365 message(STATUS "Package '${package_big}' required '${req}', but its not active")
377 get_filename_component(path ${d_source}.d PATH) 366 else(req_found)
378 get_filename_component(name ${d_source}.d NAME_WE) 367 message(STATUS "Package '${package_big}' required '${req}', but its not found")
379 install(FILES ${CMAKE_BINARY_DIR}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di) 368 endif(req_found)
380 endif(NOT GENERATE_DI_FILES) 369 set(all_req_found)
381 endforeach(d_source) 370 endif(NOT req_found)
382 foreach (cpp_source ${cpp_files}) 371 endforeach(req ${required})
383 set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp) 372 else(BUILD_QT_${package_upper})
384 endforeach(cpp_source) 373 set(all_req_found)
385 set(classes ArrayOps ${classes}) 374 endif(BUILD_QT_${package_upper})
386 foreach(class ${classes}) 375
387 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d) 376 if("${all_req_found}" EQUAL 1)
388 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp) 377 set(packages_big ${packages_big} ${package_big})
389 add_sources_for_generating(${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp) 378 set(packages ${packages} ${package})
390 add_sources_for_generating(${CMAKE_BINARY_DIR}/qt/${package}/${class}.d) 379 ## Loading package sources list.
391 if(NOT GENERATE_DI_FILES) 380 foreach(d_source ${d_version_files})
392 install(FILES ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d DESTINATION include/d/qtd/${package} RENAME ${class}.di) 381 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}/qt/${d_source}.d)
393 install(FILES ${CMAKE_BINARY_DIR}/qt/${package}/${class}_enum.d DESTINATION include/d/qtd/${package} RENAME ${class}_enum.di OPTIONAL) 382 if(NOT GENERATE_DI_FILES)
394 endif(NOT GENERATE_DI_FILES) 383 get_filename_component(path ${d_source}.d PATH)
395 endforeach(class) 384 get_filename_component(name ${d_source}.d NAME_WE)
396 385 install(FILES ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di)
397 ## Link CPP library. 386 endif(NOT GENERATE_DI_FILES)
398 add_library(cpp_${package} SHARED ${cpp_sources}) 387 endforeach(d_source)
399 388 foreach(d_source ${d_files})
400 ## Link D library. 389 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d)
401 set(lib_name ${D_LIB_PREFIX}qtd${package}${D_LIB_SUFFIX}) 390 if(NOT GENERATE_DI_FILES)
402 set(lib lib/${lib_name}) 391 get_filename_component(path ${d_source}.d PATH)
403 compile_d_files(${package}_dobjs objects ${d_sources}) 392 get_filename_component(name ${d_source}.d NAME_WE)
404 set(d_objs ${d_objs} ${objects}) 393 install(FILES ${CMAKE_SOURCE_DIR}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di)
405 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 394 endif(NOT GENERATE_DI_FILES)
406 set_property(TARGET cpp_${package} PROPERTY RUNTIME_OUTPUT_DIRECTORY lib) 395 endforeach(d_source)
407 set_property(TARGET cpp_${package} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles) 396 foreach(d_source ${d_generated_files})
408 target_link_libraries(cpp_${package} ${link_cpp} ) 397 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d)
409 set(cpp_lib ${CMAKE_BINARY_DIR}/lib/libcpp_${package}.dll) 398 if(NOT GENERATE_DI_FILES)
410 set(cpp_lib_native ${cpp_lib}) 399 get_filename_component(path ${d_source}.d PATH)
411 make_native_path(cpp_lib_native) 400 get_filename_component(name ${d_source}.d NAME_WE)
412 set(d_implib ${CMAKE_BINARY_DIR}/CMakeFiles/${package}.dir/cpp_${package}.lib) 401 install(FILES ${CMAKE_BINARY_DIR}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di)
413 set(d_implib_native ${d_implib}) 402 endif(NOT GENERATE_DI_FILES)
414 make_native_path(d_implib_native) 403 endforeach(d_source)
415 add_custom_command( 404 foreach (cpp_source ${cpp_files})
416 OUTPUT "${d_implib}" 405 set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp)
417 COMMAND "${IMPLIB}" 406 endforeach(cpp_source)
418 ARGS /system /PAGESIZE:32 ${d_implib_native} ${cpp_lib_native} 407 set(classes ArrayOps ${classes})
419 DEPENDS "cpp_${package}" 408 foreach(class ${classes})
420 COMMENT "Creating implib ${lib_name}" 409 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d)
421 ) 410 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp)
422 add_custom_command( 411 set(files_for_gen ${files_for_gen} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp
423 OUTPUT "${lib}" 412 ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d)
424 COMMAND "${DC}" 413 if(NOT GENERATE_DI_FILES)
425 ARGS -lib ${d_objs} ${d_implib} -of${lib} 414 install(FILES ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d DESTINATION include/d/qtd/${package} RENAME ${class}.di)
426 DEPENDS ${d_objs} ${d_implib} 415 install(FILES ${CMAKE_BINARY_DIR}/qt/${package}/${class}_enum.d DESTINATION include/d/qtd/${package} RENAME ${class}_enum.di OPTIONAL)
427 COMMENT "Linking ${lib_name}" 416 endif(NOT GENERATE_DI_FILES)
428 ) 417 endforeach(class)
429 install(FILES ${cpp_lib} DESTINATION lib) 418
430 else(${CMAKE_SYSTEM_NAME} STREQUAL Linux) 419 ## Link CPP library.
431 set_property(TARGET cpp_${package} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles) 420 add_library(cpp_${package} SHARED ${cpp_sources})
432 foreach(cpp_source ${cpp_sources}) 421
433 set(cpp_source ${cpp_source}) 422 ## Link D library.
434 obj_path(cpp_source) 423 set(lib_name ${D_LIB_PREFIX}qtd${package}${D_LIB_SUFFIX})
435 set(cpp_objs ${cpp_objs} CMakeFiles/cpp_${package}.dir/${cpp_source}${CMAKE_CXX_OUTPUT_EXTENSION}) 424 set(lib lib/${lib_name})
436 endforeach(cpp_source) 425 compile_d_files(${package}_dobjs objects ${d_sources})
437 add_custom_command( 426 set(d_objs ${d_objs} ${objects})
438 OUTPUT "${lib}" 427 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
439 COMMAND "${CMAKE_AR}" 428 set_property(TARGET cpp_${package} PROPERTY RUNTIME_OUTPUT_DIRECTORY lib)
440 ARGS rcs ${lib} ${d_objs} ${cpp_objs} 429 set_property(TARGET cpp_${package} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles)
441 DEPENDS ${d_objs} cpp_${package} 430 foreach(req ${required})
442 COMMENT "Linking ${lib_name}" 431 set(is_found)
443 ) 432 foreach(pack ${packages_big})
444 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 433 if("${pack}" STREQUAL "${req}")
445 install(FILES ${CMAKE_BINARY_DIR}/${lib} DESTINATION lib) 434 set(is_found 1)
446 435 break(pack ${packages_big})
447 ## Dependences. 436 endif("${pack}" STREQUAL "${req}")
448 add_dependencies(cpp_${package} dgen) 437 endforeach(pack ${packages_big})
449 add_custom_target(${package} DEPENDS ${lib}) 438 if(NOT is_found)
450 foreach(depend ${depends}) 439 message(FATAL_ERROR "Package ${package_big} required ${req}, but its not found")
451 add_dependencies(cpp_${package} cpp_${depend}) 440 endif(NOT is_found)
452 add_dependencies(${package} ${depend}) 441 string(TOUPPER ${req} req_upper)
453 endforeach(depend ${depends}) 442 string(TOLOWER ${req} req_lower)
454 add_dependencies(allpackages ${package}) 443 set(link_cpp ${link_cpp} cpp_${req_lower} ${QT_QT${req_upper}_LIBRARY})
455 set(depends ${depends} ${package}) 444 endforeach(req ${require})
456 445 string(TOUPPER ${package} package_upper)
457 ## Paths for QtD libs. Needed by examples. 446 set(link_cpp ${link_cpp} ${QT_QT${package_upper}_LIBRARY})
458 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS) 447 target_link_libraries(cpp_${package} ${link_cpp} )
459 set(libs_path ${CMAKE_BINARY_DIR}/lib/qtd${package}.lib) 448 set(cpp_lib ${CMAKE_BINARY_DIR}/lib/libcpp_${package}.dll)
460 make_native_path(libs_path) 449 set(cpp_lib_native ${cpp_lib})
461 set(${package}_lib_param -L+${libs_path}) 450 make_native_path(cpp_lib_native)
462 foreach(link ${link_example}) 451 set(d_implib ${CMAKE_BINARY_DIR}/CMakeFiles/${package}.dir/cpp_${package}.lib)
463 set(link ${CMAKE_SOURCE_DIR}/lib/${link}.lib) 452 set(d_implib_native ${d_implib})
464 make_native_path(link) 453 make_native_path(d_implib_native)
465 set(link -L+${link}) 454 add_custom_command(
466 set(${package}_lib_param ${${package}_lib_param} ${link}) 455 OUTPUT "${d_implib}"
467 endforeach(link ${link_example}) 456 COMMAND "${IMPLIB}"
468 else (${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS) 457 ARGS /system /PAGESIZE:32 ${d_implib_native} ${cpp_lib_native}
469 set(${package}_lib_param -L-lqtd${package} -L-lQt${package_big}) 458 DEPENDS "cpp_${package}"
470 foreach(link ${link_example}) 459 COMMENT "Creating implib ${lib_name}"
471 set(${package}_lib_param ${${package}_lib_param} ${link}) 460 )
472 endforeach(link ${link_example}) 461 add_custom_command(
473 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS) 462 OUTPUT "${lib}"
474 463 COMMAND "${DC}"
475 if(GENERATE_DI_FILES) 464 ARGS -lib ${d_objs} ${d_implib} -of${lib}
476 set(regexp_str "(${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}|${CMAKE_BINARY_DIR}|${CMAKE_SOURCE_DIR})/([A-Za-z0-9\\-_\\\\/]+)[/]+([A-Za-z0-9\\-_\\\\]+).d") 465 DEPENDS ${d_objs} ${d_implib}
477 foreach(source ${d_sources}) 466 COMMENT "Linking ${lib_name}"
478 # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} 467 )
479 # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) 468 install(FILES ${cpp_lib} DESTINATION lib)
480 string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}") 469 else(${CMAKE_SYSTEM_NAME} STREQUAL Linux)
481 string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}") 470 set_property(TARGET cpp_${package} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles)
482 set(interface_file_path ${CMAKE_BINARY_DIR}/d/${inc_path}) 471 foreach(cpp_source ${cpp_sources})
483 set(interface_file "${interface_file_path}/${file_name}.di") 472 set(cpp_source ${cpp_source})
484 if(NOT "${file_name}" STREQUAL "QGlobal") 473 obj_path(cpp_source)
485 add_custom_command(OUTPUT "${interface_file}" 474 set(cpp_objs ${cpp_objs} CMakeFiles/cpp_${package}.dir/${cpp_source}${CMAKE_CXX_OUTPUT_EXTENSION})
486 COMMAND "${DC}" 475 endforeach(cpp_source)
487 ARGS ${D_FLAGS} -o- -H -Hd${interface_file_path} ${source} 476 add_custom_command(
488 COMMENT "Generating header for ${source}" 477 OUTPUT "${lib}"
489 DEPENDS ${source} 478 COMMAND "${CMAKE_AR}"
490 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 479 ARGS rcs ${lib} ${d_objs} ${cpp_objs}
491 ) 480 DEPENDS ${d_objs} cpp_${package}
492 else(NOT "${file_name}" STREQUAL "QGlobal") ## DMD frontend crash on this file. 481 COMMENT "Linking ${lib_name}"
493 add_custom_command(OUTPUT "${interface_file}" 482 )
494 COMMAND ${CMAKE_COMMAND} -E make_directory ${interface_file_path} 483 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
495 COMMAND ${CMAKE_COMMAND} -E remove -f ${interface_file} 484 install(FILES ${CMAKE_BINARY_DIR}/${lib} DESTINATION lib)
496 COMMAND ${CMAKE_COMMAND} -E copy ${source} ${interface_file} 485
497 COMMENT "" 486 ## Paths for QtD libs. Needed by examples.
498 DEPENDS ${source} 487 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
499 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 488 set(libs_path ${CMAKE_BINARY_DIR}/lib/qtd${package}.lib)
500 ) 489 make_native_path(libs_path)
501 endif(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES) 490 set(${package}_lib_param -L+${libs_path})
502 set(interfaces_list ${interfaces_list} ${interface_file_path}/${file_name}.di) 491 foreach(link ${link_example})
503 install(FILES ${interface_file} DESTINATION include/d/${inc_path}) 492 set(link ${CMAKE_SOURCE_DIR}/lib/${link}.lib)
504 endforeach(source) 493 make_native_path(link)
505 endif(GENERATE_DI_FILES) 494 set(link -L+${link})
495 set(${package}_lib_param ${${package}_lib_param} ${link})
496 endforeach(link ${link_example})
497 else (${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
498 set(${package}_lib_param -L-lqtd${package} -L-lQt${package_big})
499 foreach(link ${link_example})
500 set(${package}_lib_param ${${package}_lib_param} ${link})
501 endforeach(link ${link_example})
502 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
503
504 if(GENERATE_DI_FILES)
505 set(regexp_str "(${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}|${CMAKE_BINARY_DIR}|${CMAKE_SOURCE_DIR})/([A-Za-z0-9\\-_\\\\/]+)[/]+([A-Za-z0-9\\-_\\\\]+).d")
506 foreach(source ${d_sources})
507 # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
508 # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
509 string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}")
510 string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}")
511 set(interface_file_path ${CMAKE_BINARY_DIR}/d/${inc_path})
512 set(interface_file "${interface_file_path}/${file_name}.di")
513 if(NOT "${file_name}" STREQUAL "QGlobal")
514 add_custom_command(OUTPUT "${interface_file}"
515 COMMAND "${DC}"
516 ARGS ${D_FLAGS} -o- -H -Hd${interface_file_path} ${source}
517 COMMENT "Generating header for ${source}"
518 DEPENDS ${source}
519 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
520 )
521 else(NOT "${file_name}" STREQUAL "QGlobal") ## DMD frontend crash on this file.
522 add_custom_command(OUTPUT "${interface_file}"
523 COMMAND ${CMAKE_COMMAND} -E make_directory ${interface_file_path}
524 COMMAND ${CMAKE_COMMAND} -E remove -f ${interface_file}
525 COMMAND ${CMAKE_COMMAND} -E copy ${source} ${interface_file}
526 COMMENT ""
527 DEPENDS ${source}
528 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
529 )
530 endif(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES)
531 set(interfaces_list ${interfaces_list} ${interface_file_path}/${file_name}.di)
532 install(FILES ${interface_file} DESTINATION include/d/${inc_path})
533 endforeach(source)
534 endif(GENERATE_DI_FILES)
535 endif("${all_req_found}" EQUAL 1)
506 endforeach(package_big ${packages_big}) 536 endforeach(package_big ${packages_big})
507 if(GENERATE_DI_FILES) 537 if(GENERATE_DI_FILES)
508 add_custom_target(generate_headers ALL DEPENDS ${interfaces_list}) 538 add_custom_target(generate_headers ALL DEPENDS ${interfaces_list})
509 endif(GENERATE_DI_FILES) 539 endif(GENERATE_DI_FILES)
540
541 ## Dependences.
542 foreach(package ${packages})
543 add_dependencies(cpp_${package} dgen)
544 add_custom_target(${package} DEPENDS ${lib})
545 foreach(depend ${required})
546 string(TOLOWER ${depend} depend)
547 add_dependencies(cpp_${package} cpp_${depend})
548 add_dependencies(${package} ${depend})
549 endforeach(depend ${required})
550 add_dependencies(allpackages ${package})
551 endforeach(package ${packages})
552
553 add_subdirectory(generator)
554 add_sources_for_generating(${files_for_gen})
510 555
511 ##-------------------------------------------- 556 ##--------------------------------------------
512 ## Build other parts of the QtD. 557 ## Build other parts of the QtD.
513 ##-------------------------------------------- 558 ##--------------------------------------------
514 if(BUILD_EXAMPLES) 559 if(BUILD_EXAMPLES)