Mercurial > projects > qtd
comparison CMakeLists.txt @ 235:b796329e8c38
We need to start cmake twice. It is necessary for getting a class list from the generator and using this list for building other parts of QtD.
author | SokoL_SD |
---|---|
date | Sun, 19 Jul 2009 18:09:33 +0000 |
parents | aac81791596b |
children | 62d0dce52dac |
comparison
equal
deleted
inserted
replaced
234:1b0e2ee5aedc | 235:b796329e8c38 |
---|---|
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 | |
4 ########################################################## | |
5 ## Building generator and settings. | |
6 ########################################################## | |
7 if(NOT SECOND_RUN) | |
8 | |
3 FIND_PACKAGE(Qt4 REQUIRED) | 9 FIND_PACKAGE(Qt4 REQUIRED) |
4 set (QT_USE_QTMAIN false) | 10 set (QT_USE_QTMAIN false) |
5 set (QT_USE_QTGUI false) | 11 set (QT_USE_QTGUI false) |
6 | 12 |
7 ##-------------------------------------------- | 13 ##-------------------------------------------- |
8 ## Settings. | 14 ## Settings. |
9 ##-------------------------------------------- | 15 ##-------------------------------------------- |
10 | |
11 include_directories(${QT_INCLUDES} include ${CMAKE_CURRENT_BINARY_DIR}/include) | |
12 | 16 |
13 ## Options. | 17 ## Options. |
14 option(BUILD_EXAMPLES "Build examples" "OFF") | 18 option(BUILD_EXAMPLES "Build examples" "OFF") |
15 option(BUILD_SHARED_LIBRARIES "Build shared library (very experemental and only for ldc)" "OFF") | 19 option(BUILD_SHARED_LIBRARIES "Build shared library (very experemental and only for ldc)" "OFF") |
16 option(BUILD_TOOLS "Build tools" "ON") | 20 option(BUILD_TOOLS "Build tools" "ON") |
17 #option(GENERATE_DI_FILES "Generate *.di files with DC -H command" "OFF") | 21 #option(GENERATE_DI_FILES "Generate *.di files with DC -H command" "OFF") |
18 set(GENERATE_DI_FILES OFF) ## Very experemental option. Temporary disabled. | 22 set(GENERATE_DI_FILES OFF) ## Very experemental option. Temporary disabled. |
19 | 23 |
20 set(QTD_VERSION_STR ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}) | 24 set(all_packages Core Gui OpenGL Xml Svg Network WebKit CACHE INTERNAL "") |
21 math(EXPR QTD_VERSION "(${QT_VERSION_MAJOR} << 16) + (${QT_VERSION_MINOR} << 8) + ${QT_VERSION_PATCH}") | |
22 | |
23 set(all_packages Core Gui OpenGL Xml Svg Network WebKit) | |
24 | 25 |
25 ## Init D toolkit. | 26 ## Init D toolkit. |
26 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) | 27 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) |
27 FIND_PACKAGE(D REQUIRED) | 28 FIND_PACKAGE(D REQUIRED) |
28 | |
29 ## Strip utility. | |
30 find_program(STRIP strip) | |
31 | 29 |
32 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR "${CMAKE_INSTALL_PREFIX}" STREQUAL "") | 30 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR "${CMAKE_INSTALL_PREFIX}" STREQUAL "") |
33 set(CMAKE_INSTALL_PREFIX | 31 set(CMAKE_INSTALL_PREFIX |
34 ${DC_PATH} CACHE PATH "QtD install prefix" FORCE | 32 ${DC_PATH} CACHE PATH "QtD install prefix" FORCE |
35 ) | 33 ) |
38 # Check D compiler version | 36 # Check D compiler version |
39 if(D_VERSION EQUAL "1") | 37 if(D_VERSION EQUAL "1") |
40 if (D_FRONTEND LESS "041") | 38 if (D_FRONTEND LESS "041") |
41 message(STATUS "Minimum required version of D compiler is 1.041 (or compiler based on this version)") | 39 message(STATUS "Minimum required version of D compiler is 1.041 (or compiler based on this version)") |
42 endif(D_FRONTEND LESS "041") | 40 endif(D_FRONTEND LESS "041") |
43 set(D_TARGET d1-tango) | 41 set(D_TARGET d1-tango CACHE INTERNAL "") |
44 elseif(D_VERSION EQUAL "2") | 42 elseif(D_VERSION EQUAL "2") |
45 set(D_TARGET d2-phobos) | 43 set(D_TARGET d2-phobos CACHE INTERNAL "") |
46 endif(D_VERSION EQUAL "1") | 44 endif(D_VERSION EQUAL "1") |
47 | 45 |
48 # Debug and release flags. | 46 # Debug and release flags. |
49 if (NOT CMAKE_BUILD_TYPE) | 47 if (NOT CMAKE_BUILD_TYPE) |
50 set(CMAKE_BUILD_TYPE Release) | 48 set(CMAKE_BUILD_TYPE Release) |
68 find_program(IMPLIB ${implib}) | 66 find_program(IMPLIB ${implib}) |
69 if (NOT IMPLIB) | 67 if (NOT IMPLIB) |
70 message(FATAL_ERROR "implib not found. You can donwload it from http://ftp.digitalmars.com/bup.zip") | 68 message(FATAL_ERROR "implib not found. You can donwload it from http://ftp.digitalmars.com/bup.zip") |
71 endif (NOT IMPLIB) | 69 endif (NOT IMPLIB) |
72 if(D_IS_MARS) | 70 if(D_IS_MARS) |
73 set(D_FLAGS ${D_FLAGS} -version=cpp_shared) | |
74 set(GEN_OPT ${GEN_OPT} --cpp_shared) | 71 set(GEN_OPT ${GEN_OPT} --cpp_shared) |
75 add_definitions(-DCPP_SHARED) | 72 add_definitions(-DCPP_SHARED) |
76 endif(D_IS_MARS) | 73 endif(D_IS_MARS) |
74 endif(CMAKE_HOST_WIN32) | |
75 | |
76 set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ./) | |
77 set(GEN_OPT ${GEN_OPT} --d-target=${D_TARGET}) | |
78 | |
79 set(packages CACHE INTERNAL "") | |
80 foreach(package_big ${all_packages}) | |
81 string(TOLOWER ${package_big} package) | |
82 string(TOUPPER ${package_big} package_upper) | |
83 option(BUILD_QT_${package_upper} "Build Qt${package_big}" "ON") | |
84 set(packages ${packages} ${package}) | |
85 endforeach(package_big ${all_packages}) | |
86 | |
87 add_subdirectory(generator) | |
88 | |
89 add_custom_target(main ALL) | |
90 add_dependencies(main dgen) | |
91 | |
92 if(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") | |
93 set(make_util nmake) | |
94 elseif(${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles" OR | |
95 ${CMAKE_GENERATOR} STREQUAL "Unix Makefiles") | |
96 set(make_util $(MAKE)) | |
97 else(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") | |
98 message(FATAL_ERROR "${CMAKE_GENERATOR} isn't supported") | |
99 endif(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") | |
100 | |
101 set(cd_path ${CMAKE_BINARY_DIR}/build) | |
102 make_native_path(cd_path) | |
103 add_custom_command(TARGET main POST_BUILD | |
104 COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${CMAKE_BINARY_DIR}/build | |
105 COMMAND cd ARGS ${cd_path} && ${CMAKE_COMMAND} -G${CMAKE_GENERATOR} -DSECOND_RUN=1 ${CMAKE_SOURCE_DIR} && ${make_util} allpackages | |
106 COMMENT "" | |
107 ) | |
108 | |
109 ## Make commands. | |
110 set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_BINARY_DIR}/build) | |
111 add_custom_target(install | |
112 COMMAND cd ${CMAKE_BINARY_DIR}/build && ${make_util} install | |
113 COMMENT "" | |
114 ) | |
115 add_dependencies(install preinstall) | |
116 | |
117 ##-------------------------------------------- | |
118 ## CPack. | |
119 ##-------------------------------------------- | |
120 set(CPACK_PACKAGE_VERSION_PATCH 1) | |
121 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "QtD is a D binding to the Qt application and UI framework. | |
122 QtD is a D binding to the Qt application and UI framework. | |
123 This package installs binding and static library for qt port on D programming language. | |
124 ") | |
125 #SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt") | |
126 SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/license.txt") | |
127 set(CPACK_PACKAGE_VENDOR "QtD team") | |
128 set(CPACK_PACKAGE_CONTACT "e@mail.ru" ) | |
129 SET(CPACK_PACKAGE_VERSION "0.1") | |
130 #set(CPACK_PACKAGE_VERSION_PATCH "${RFS_VERSION_BUILD}") | |
131 set(CPACK_PACKAGE_INSTALL_DIRECTORY "qtd ${CPACK_PACKAGE_VERSION}") | |
132 set(CPACK_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}") | |
133 set(CPACK_SOURCE_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}") | |
134 if(CMAKE_HOST_WIN32) | |
135 set(CPACK_GENERATOR "ZIP") | |
136 elseif(CMAKE_HOST_UNIX) | |
137 set(CPACK_GENERATOR "TBZ2;DEB;RPM") | |
138 endif(CMAKE_HOST_WIN32) | |
139 include(CPack) | |
140 | |
141 ########################################################## | |
142 ## Building QtD. | |
143 ########################################################## | |
144 else(NOT SECOND_RUN) | |
145 | |
146 PROJECT(qtd CXX C) | |
147 load_cache(${CMAKE_BINARY_DIR}/.. INCLUDE_INTERNALS all_packages QTD_VERSION_STR QTD_VERSION) | |
148 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) | |
149 FIND_PACKAGE(D REQUIRED) | |
150 FIND_PACKAGE(Qt4 REQUIRED) | |
151 | |
152 set(QTD_VERSION_STR ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}) | |
153 math(EXPR QTD_VERSION "(${QT_VERSION_MAJOR} << 16) + (${QT_VERSION_MINOR} << 8) + ${QT_VERSION_PATCH}") | |
154 | |
155 include_directories(${QT_INCLUDES} ${CMAKE_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR}/include) | |
156 | |
157 ## Strip utility. | |
158 find_program(STRIP strip) | |
159 | |
160 # System specifc settings. | |
161 if(CMAKE_HOST_WIN32) | |
77 string(REGEX REPLACE ".dll([A-Za-z\\.0-9]+)" "\\1" CMAKE_IMPORT_LIBRARY_SUFFIX "${CMAKE_IMPORT_LIBRARY_SUFFIX}") | 162 string(REGEX REPLACE ".dll([A-Za-z\\.0-9]+)" "\\1" CMAKE_IMPORT_LIBRARY_SUFFIX "${CMAKE_IMPORT_LIBRARY_SUFFIX}") |
78 endif(CMAKE_HOST_WIN32) | 163 endif(CMAKE_HOST_WIN32) |
79 | 164 |
80 if(CMAKE_HOST_WIN32 AND D_IS_MARS) | 165 if(CMAKE_HOST_WIN32 AND D_IS_MARS) |
81 set(CPP_SHARED 1) | 166 set(CPP_SHARED 1 CACHE INTERNAL "") |
82 endif(CMAKE_HOST_WIN32 AND D_IS_MARS) | 167 endif(CMAKE_HOST_WIN32 AND D_IS_MARS) |
83 | 168 |
84 set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ./) | 169 if(D_IS_MARS) |
85 set(GEN_OPT ${GEN_OPT} --d-target=${D_TARGET}) | 170 set(D_FLAGS -version=cpp_shared) |
171 add_definitions(-DCPP_SHARED) | |
172 endif(D_IS_MARS) | |
86 | 173 |
87 ## Bootstrap settings for QtD. | 174 ## Bootstrap settings for QtD. |
88 set(DRCC ${CMAKE_BINARY_DIR}/tools/drcc/drcc) | 175 set(DRCC ${CMAKE_BINARY_DIR}/tools/drcc/drcc CACHE INTERNAL "") |
89 set(DUIC ${CMAKE_BINARY_DIR}/tools/duic/duic) | 176 set(DUIC ${CMAKE_BINARY_DIR}/tools/duic/duic CACHE INTERNAL "") |
90 set(QTD_IMPORT_PATH ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}) | 177 set(QTD_IMPORT_PATH ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION} CACHE INTERNAL "") |
91 set(QTD_LIBRARIES_PATH ${CMAKE_BINARY_DIR}/lib) | 178 set(QTD_LIBRARIES_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "") |
92 | 179 |
93 ##-------------------------------------------- | 180 ##-------------------------------------------- |
94 ## Macros and functions. | 181 ## Macros and functions. |
95 ##-------------------------------------------- | 182 ##-------------------------------------------- |
183 | |
184 macro(load_generated_classes ) | |
185 include(cpp/qt_${package}/qt_${package}.txt) | |
186 endmacro(load_generated_classes ) | |
96 | 187 |
97 macro(qtd_add_resource output) | 188 macro(qtd_add_resource output) |
98 set (params NAME OPTIONS) | 189 set (params NAME OPTIONS) |
99 qtd_parse_params (RESOURCES params ${ARGN}) | 190 qtd_parse_params (RESOURCES params ${ARGN}) |
100 | 191 |
206 endif(NOT is_founded) | 297 endif(NOT is_founded) |
207 endforeach(package ${PACKAGES_tmp}) | 298 endforeach(package ${PACKAGES_tmp}) |
208 add_d_program(${name} ${SOURCES_tmp} NO_DEPS_SOURCES ${res_sources} ${uic_sources} | 299 add_d_program(${name} ${SOURCES_tmp} NO_DEPS_SOURCES ${res_sources} ${uic_sources} |
209 DEPENDS ${res_sources} INCLUDES ${QTD_IMPORT_PATH} ${CMAKE_CURRENT_BINARY_DIR} | 300 DEPENDS ${res_sources} INCLUDES ${QTD_IMPORT_PATH} ${CMAKE_CURRENT_BINARY_DIR} |
210 LIB_PATHS ${QTD_LIBRARIES_PATH} ${CMAKE_SOURCE_DIR}/lib LIBS ${qtd_libs}) | 301 LIB_PATHS ${QTD_LIBRARIES_PATH} ${CMAKE_SOURCE_DIR}/lib LIBS ${qtd_libs}) |
211 ## TODO: Enable on windows too. | 302 ## TODO: Enable. |
212 if(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) ## | 303 #if(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) ## |
213 add_custom_command(TARGET example_${name} POST_BUILD COMMAND "${STRIP}" ARGS "${output}") | 304 # add_custom_command(TARGET example_${name} POST_BUILD COMMAND "${STRIP}" ARGS "${output}") |
214 endif(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) | 305 #endif(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) |
215 add_dependencies(${name} allpackages) | 306 add_dependencies(${name} allpackages) |
216 endmacro(build_example sources) | 307 endmacro(build_example sources) |
217 | 308 |
218 ##-------------------------------------------- | 309 ##-------------------------------------------- |
219 ## Build and install library. | 310 ## Build and install library. |
243 set(link_example) | 334 set(link_example) |
244 include (${CMAKE_SOURCE_DIR}/build/${package}.txt) | 335 include (${CMAKE_SOURCE_DIR}/build/${package}.txt) |
245 | 336 |
246 set(all_req_found 1) | 337 set(all_req_found 1) |
247 string(TOUPPER ${package} package_upper) | 338 string(TOUPPER ${package} package_upper) |
248 option(BUILD_QT_${package_upper} "Build Qt${package_big}" "ON") | |
249 if(BUILD_QT_${package_upper}) | 339 if(BUILD_QT_${package_upper}) |
250 foreach(req ${required}) | 340 foreach(req ${required}) |
251 set(req_found) | 341 set(req_found) |
252 foreach(pack ${packages_big}) | 342 foreach(pack ${packages_big}) |
253 if(${pack} STREQUAL ${req}) | 343 if(${pack} STREQUAL ${req}) |
381 install(FILES ${cpp_lib} COMPONENT qtd DESTINATION lib) | 471 install(FILES ${cpp_lib} COMPONENT qtd DESTINATION lib) |
382 else(CPP_SHARED) | 472 else(CPP_SHARED) |
383 set(${package}_lib_param Qt${package_big}) ## Paths for QtD libs. Needed by examples. | 473 set(${package}_lib_param Qt${package_big}) ## Paths for QtD libs. Needed by examples. |
384 endif(CPP_SHARED) | 474 endif(CPP_SHARED) |
385 add_d_target(${lib_name} NOT_DETECT_DEPENDS TYPE ${build_type} INCLUDES ${QTD_IMPORT_PATH} SOURCES ${d_sources} OBJECTS ${cpp_objs} ${d_implib} | 475 add_d_target(${lib_name} NOT_DETECT_DEPENDS TYPE ${build_type} INCLUDES ${QTD_IMPORT_PATH} SOURCES ${d_sources} OBJECTS ${cpp_objs} ${d_implib} |
386 OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib DEPENDS ${d_implib}) | 476 OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib DEPENDS ${d_implib} ) |
387 install(FILES ${CMAKE_BINARY_DIR}/${lib} COMPONENT qtd DESTINATION lib) | |
388 | 477 |
478 install(FILES ${CMAKE_BINARY_DIR}/${lib} COMPONENT qtd DESTINATION lib) | |
389 ## Paths for QtD libs. Needed by examples. | 479 ## Paths for QtD libs. Needed by examples. |
390 set(${package}_lib_param qtd${package} ${${package}_lib_param} ${link_example}) | 480 set(${package}_lib_param qtd${package} ${${package}_lib_param} ${link_example}) |
391 | 481 |
392 ## Dependences. | 482 ## Dependences. |
393 add_custom_target(${package} DEPENDS ${lib}) | 483 add_custom_target(${package}) |
484 add_dependencies(${package} ${lib_name}) | |
485 add_dependencies(${lib_name} cpp_${package}) | |
394 foreach(depend ${required}) | 486 foreach(depend ${required}) |
395 string(TOLOWER ${depend} depend) | 487 string(TOLOWER ${depend} depend) |
396 add_dependencies(cpp_${package} cpp_${depend}) | 488 add_dependencies(cpp_${package} cpp_${depend}) |
397 add_dependencies(${package} ${depend}) | 489 add_dependencies(${package} ${depend}) |
398 endforeach(depend ${required}) | 490 endforeach(depend ${required}) |
435 endforeach(package_big ${packages_big}) | 527 endforeach(package_big ${packages_big}) |
436 if(GENERATE_DI_FILES) | 528 if(GENERATE_DI_FILES) |
437 add_custom_target(generate_headers ALL DEPENDS ${interfaces_list}) | 529 add_custom_target(generate_headers ALL DEPENDS ${interfaces_list}) |
438 endif(GENERATE_DI_FILES) | 530 endif(GENERATE_DI_FILES) |
439 | 531 |
440 add_subdirectory(generator) | |
441 ## Dependences. | |
442 foreach(package ${packages}) | |
443 add_dependencies(cpp_${package} dgen) | |
444 endforeach(package ${packages}) | |
445 add_sources_for_generating(${files_for_gen}) | |
446 | 532 |
447 set(CPACK_COMPONENTS_ALL qtd qtd_tools) | 533 set(CPACK_COMPONENTS_ALL qtd qtd_tools) |
448 | 534 |
449 ##-------------------------------------------- | 535 ##-------------------------------------------- |
450 ## Build other parts of the QtD. | 536 ## Build other parts of the QtD. |
458 if(BUILD_EXAMPLES) | 544 if(BUILD_EXAMPLES) |
459 add_subdirectory(demos) | 545 add_subdirectory(demos) |
460 add_subdirectory(examples) | 546 add_subdirectory(examples) |
461 endif(BUILD_EXAMPLES) | 547 endif(BUILD_EXAMPLES) |
462 | 548 |
463 ##-------------------------------------------- | 549 #execute_process(COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/CMakeCache.txt) |
464 ## CPack. | 550 |
465 ##-------------------------------------------- | 551 endif(NOT SECOND_RUN) |
466 set(CPACK_PACKAGE_VERSION_PATCH 1) | |
467 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "QtD is a D binding to the Qt application and UI framework. | |
468 QtD is a D binding to the Qt application and UI framework. | |
469 This package installs binding and static library for qt port on D programming language. | |
470 ") | |
471 #SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt") | |
472 SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/license.txt") | |
473 set(CPACK_PACKAGE_VENDOR "QtD team") | |
474 set(CPACK_PACKAGE_CONTACT "e@mail.ru" ) | |
475 SET(CPACK_PACKAGE_VERSION "0.1") | |
476 #set(CPACK_PACKAGE_VERSION_PATCH "${RFS_VERSION_BUILD}") | |
477 set(CPACK_PACKAGE_INSTALL_DIRECTORY "qtd ${CPACK_PACKAGE_VERSION}") | |
478 set(CPACK_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}") | |
479 set(CPACK_SOURCE_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}") | |
480 if(CMAKE_HOST_WIN32) | |
481 set(CPACK_GENERATOR "ZIP") | |
482 elseif(CMAKE_HOST_UNIX) | |
483 set(CPACK_GENERATOR "TBZ2;DEB;RPM") | |
484 endif(CMAKE_HOST_WIN32) | |
485 include(CPack) |