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)