Mercurial > projects > qtd
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) |