Mercurial > projects > qtd
annotate CMakeLists.txt @ 361:beaf4a2974d7
Autogeneration of QMetaType. First attempts at fixing qRegisterMetaType etc
author | Max Samukha <maxter@maxter.com> |
---|---|
date | Wed, 09 Jun 2010 11:08:56 +0300 |
parents | 9784459f0750 |
children | 3b0545d4d479 |
rev | line source |
---|---|
132 | 1 cmake_minimum_required(VERSION 2.6) |
2 PROJECT(qtd CXX C) | |
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.
SokoL_SD
parents:
229
diff
changeset
|
3 |
344 | 4 # Debug and release flags. |
5 if (NOT CMAKE_BUILD_TYPE) | |
6 set(CMAKE_BUILD_TYPE Release) | |
7 endif (NOT CMAKE_BUILD_TYPE) | |
8 | |
9 if(${CMAKE_BUILD_TYPE} MATCHES [dD][eE][bB][uU][gG]) | |
10 set(CMAKE_BUILD_TYPE Debug) | |
11 #set( SUFFIXLIB "${SUFFIXLIB}-debug" ) | |
12 #set( SUFFIXBIN "${SUFFIXBIN}-debug" ) | |
13 add_definitions(-DDEBUG) | |
14 elseif (NOT ${CMAKE_BUILD_TYPE} MATCHES [rR][eE][lL][eE][aA][sS]) | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
15 message(STATUS "Only debug and release configurations are supported. The configuration is changed to 'Release'") |
344 | 16 set(CMAKE_BUILD_TYPE Release) |
17 endif (${CMAKE_BUILD_TYPE} MATCHES [dD][eE][bB][uU][gG]) | |
18 | |
19 if (${CMAKE_BUILD_TYPE} MATCHES [rR][eE][lL][eE][aA][sS]) | |
20 #add_definitions(-UNO_DEBUG) | |
21 endif(${CMAKE_BUILD_TYPE} MATCHES [rR][eE][lL][eE][aA][sS] ) | |
22 | |
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.
SokoL_SD
parents:
229
diff
changeset
|
23 ########################################################## |
264
da7c867ef2ef
1) A bug is fixed when the generator doesn't restart if typesystem_${package}-java.java has been changed.
SokoL_SD
parents:
254
diff
changeset
|
24 ## Build generator. |
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.
SokoL_SD
parents:
229
diff
changeset
|
25 ########################################################## |
344 | 26 if (NOT SECOND_RUN) |
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.
SokoL_SD
parents:
229
diff
changeset
|
27 |
242 | 28 option(ALLOW_IN_SOURCE_BUILDS "Allow in-source builds" "OFF") |
344 | 29 if (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT ALLOW_IN_SOURCE_BUILDS) |
30 message(FATAL_ERROR "In-source builds are not allowed. " | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
31 "Please create a directory and run cmake from there, passing the path " |
344 | 32 "to this source directory as the last argument. " |
33 "This process created the file `CMakeCache.txt` and the directory `CMakeFiles'. Please delete them. " | |
34 "Or you can restart cmake with `-DALLOW_IN_SOURCE_BUILDS=1`, but it is not recommended." | |
35 ) | |
36 endif (CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT ALLOW_IN_SOURCE_BUILDS) | |
239 | 37 |
132 | 38 FIND_PACKAGE(Qt4 REQUIRED) |
344 | 39 set(QT_USE_QTMAIN false) |
40 set(QT_USE_QTGUI false) | |
132 | 41 |
42 ##-------------------------------------------- | |
43 ## Settings. | |
44 ##-------------------------------------------- | |
45 | |
46 ## Options. | |
136
798e54c1f66e
CMake: disable building examples by default. You can use -DBUILD_EXAMPLES switch for enable that.
SokoL_SD
parents:
135
diff
changeset
|
47 option(BUILD_EXAMPLES "Build examples" "OFF") |
798e54c1f66e
CMake: disable building examples by default. You can use -DBUILD_EXAMPLES switch for enable that.
SokoL_SD
parents:
135
diff
changeset
|
48 option(BUILD_SHARED_LIBRARIES "Build shared library (very experemental and only for ldc)" "OFF") |
132 | 49 option(BUILD_TOOLS "Build tools" "ON") |
50 #option(GENERATE_DI_FILES "Generate *.di files with DC -H command" "OFF") | |
344 | 51 set(GENERATE_DI_FILES OFF) ## Very experimental option. Temporarily disabled. |
274 | 52 option(VERBOSE_DEBUG "Verbose debug" "OFF") |
273 | 53 |
344 | 54 set(all_packages Core Gui OpenGL Xml Svg Network WebKit CACHE INTERNAL "") |
132 | 55 |
56 ## Init D toolkit. | |
57 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) | |
58 FIND_PACKAGE(D REQUIRED) | |
59 | |
60 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR "${CMAKE_INSTALL_PREFIX}" STREQUAL "") | |
61 set(CMAKE_INSTALL_PREFIX | |
344 | 62 ${DC_PATH} CACHE PATH "QtD install prefix" |
132 | 63 ) |
64 endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR "${CMAKE_INSTALL_PREFIX}" STREQUAL "") | |
65 | |
66 # Check D compiler version | |
67 if(D_VERSION EQUAL "1") | |
282
256ab6cb8e85
Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
eldar
parents:
280
diff
changeset
|
68 if (D_FRONTEND LESS "050") |
344 | 69 message(STATUS "Minimum required version of D compiler is 1.050 (or compiler based on this version)") |
282
256ab6cb8e85
Signals look-up andNew syntax for connect. The old one will not work from now on. This will allow for the signals overload. Although changes are done for both D1 and D2 versions, D1 won't work because of compiler bugs. I am tired of waiting for fixes.
eldar
parents:
280
diff
changeset
|
70 endif(D_FRONTEND LESS "050") |
344 | 71 set(D_TARGET d1-tango CACHE INTERNAL "") |
132 | 72 elseif(D_VERSION EQUAL "2") |
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.
SokoL_SD
parents:
229
diff
changeset
|
73 set(D_TARGET d2-phobos CACHE INTERNAL "") |
132 | 74 endif(D_VERSION EQUAL "1") |
75 | |
237 | 76 # System specific settings. |
132 | 77 if(CMAKE_HOST_WIN32) |
78 set(implib implib) | |
79 find_program(IMPLIB ${implib}) | |
80 if (NOT IMPLIB) | |
344 | 81 message(FATAL_ERROR "implib is not found. You can donwload it from http://ftp.digitalmars.com/bup.zip") |
132 | 82 endif (NOT IMPLIB) |
83 if(D_IS_MARS) | |
84 set(GEN_OPT ${GEN_OPT} --cpp_shared) | |
85 add_definitions(-DCPP_SHARED) | |
86 endif(D_IS_MARS) | |
344 | 87 endif(CMAKE_HOST_WIN32) |
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.
SokoL_SD
parents:
229
diff
changeset
|
88 |
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.
SokoL_SD
parents:
229
diff
changeset
|
89 set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ./) |
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.
SokoL_SD
parents:
229
diff
changeset
|
90 set(GEN_OPT ${GEN_OPT} --d-target=${D_TARGET}) |
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.
SokoL_SD
parents:
229
diff
changeset
|
91 |
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.
SokoL_SD
parents:
229
diff
changeset
|
92 set(packages CACHE INTERNAL "") |
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.
SokoL_SD
parents:
229
diff
changeset
|
93 foreach(package_big ${all_packages}) |
344 | 94 string(TOLOWER ${package_big} package) |
95 string(TOUPPER ${package_big} package_upper) | |
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.
SokoL_SD
parents:
229
diff
changeset
|
96 option(BUILD_QT_${package_upper} "Build Qt${package_big}" "ON") |
243 | 97 if(BUILD_QT_${package_upper}) |
344 | 98 set(packages ${packages} ${package_big}) |
243 | 99 endif(BUILD_QT_${package_upper}) |
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.
SokoL_SD
parents:
229
diff
changeset
|
100 endforeach(package_big ${all_packages}) |
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.
SokoL_SD
parents:
229
diff
changeset
|
101 |
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.
SokoL_SD
parents:
229
diff
changeset
|
102 add_subdirectory(generator) |
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.
SokoL_SD
parents:
229
diff
changeset
|
103 |
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.
SokoL_SD
parents:
229
diff
changeset
|
104 add_custom_target(main ALL) |
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.
SokoL_SD
parents:
229
diff
changeset
|
105 add_dependencies(main dgen) |
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.
SokoL_SD
parents:
229
diff
changeset
|
106 |
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.
SokoL_SD
parents:
229
diff
changeset
|
107 if(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") |
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.
SokoL_SD
parents:
229
diff
changeset
|
108 set(make_util nmake) |
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.
SokoL_SD
parents:
229
diff
changeset
|
109 elseif(${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles" OR |
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.
SokoL_SD
parents:
229
diff
changeset
|
110 ${CMAKE_GENERATOR} STREQUAL "Unix Makefiles") |
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.
SokoL_SD
parents:
229
diff
changeset
|
111 set(make_util $(MAKE)) |
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.
SokoL_SD
parents:
229
diff
changeset
|
112 else(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") |
264
da7c867ef2ef
1) A bug is fixed when the generator doesn't restart if typesystem_${package}-java.java has been changed.
SokoL_SD
parents:
254
diff
changeset
|
113 message(FATAL_ERROR "${CMAKE_GENERATOR} is not supported") |
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.
SokoL_SD
parents:
229
diff
changeset
|
114 endif(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") |
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.
SokoL_SD
parents:
229
diff
changeset
|
115 |
239 | 116 if(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) |
117 set(cd_path ${CMAKE_SOURCE_DIR}) | |
118 else(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) | |
119 set(cd_path ${CMAKE_BINARY_DIR}/build) | |
120 endif(${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) | |
121 | |
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.
SokoL_SD
parents:
229
diff
changeset
|
122 make_native_path(cd_path) |
344 | 123 add_custom_command(TARGET main POST_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} | |
126 COMMENT "" | |
127 ) | |
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.
SokoL_SD
parents:
229
diff
changeset
|
128 |
264
da7c867ef2ef
1) A bug is fixed when the generator doesn't restart if typesystem_${package}-java.java has been changed.
SokoL_SD
parents:
254
diff
changeset
|
129 ## "Make install" command. |
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.
SokoL_SD
parents:
229
diff
changeset
|
130 set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_BINARY_DIR}/build) |
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.
SokoL_SD
parents:
229
diff
changeset
|
131 add_custom_target(install |
344 | 132 COMMAND cd ${CMAKE_BINARY_DIR}/build && ${make_util} install |
133 COMMENT "" | |
134 ) | |
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.
SokoL_SD
parents:
229
diff
changeset
|
135 add_dependencies(install preinstall) |
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.
SokoL_SD
parents:
229
diff
changeset
|
136 |
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.
SokoL_SD
parents:
229
diff
changeset
|
137 ##-------------------------------------------- |
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.
SokoL_SD
parents:
229
diff
changeset
|
138 ## CPack. |
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.
SokoL_SD
parents:
229
diff
changeset
|
139 ##-------------------------------------------- |
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.
SokoL_SD
parents:
229
diff
changeset
|
140 set(CPACK_PACKAGE_VERSION_PATCH 1) |
344 | 141 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "QtD is a D binding to the Qt application and UI framework. |
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.
SokoL_SD
parents:
229
diff
changeset
|
142 This package installs binding and static library for qt port on D programming language. |
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.
SokoL_SD
parents:
229
diff
changeset
|
143 ") |
241 | 144 SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/changelog.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.
SokoL_SD
parents:
229
diff
changeset
|
145 SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/license.txt") |
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.
SokoL_SD
parents:
229
diff
changeset
|
146 set(CPACK_PACKAGE_VENDOR "QtD team") |
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.
SokoL_SD
parents:
229
diff
changeset
|
147 set(CPACK_PACKAGE_CONTACT "e@mail.ru" ) |
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.
SokoL_SD
parents:
229
diff
changeset
|
148 SET(CPACK_PACKAGE_VERSION "0.1") |
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.
SokoL_SD
parents:
229
diff
changeset
|
149 set(CPACK_PACKAGE_INSTALL_DIRECTORY "qtd ${CPACK_PACKAGE_VERSION}") |
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.
SokoL_SD
parents:
229
diff
changeset
|
150 set(CPACK_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}") |
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.
SokoL_SD
parents:
229
diff
changeset
|
151 set(CPACK_SOURCE_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}") |
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.
SokoL_SD
parents:
229
diff
changeset
|
152 if(CMAKE_HOST_WIN32) |
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.
SokoL_SD
parents:
229
diff
changeset
|
153 set(CPACK_GENERATOR "ZIP") |
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.
SokoL_SD
parents:
229
diff
changeset
|
154 elseif(CMAKE_HOST_UNIX) |
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.
SokoL_SD
parents:
229
diff
changeset
|
155 set(CPACK_GENERATOR "TBZ2;DEB;RPM") |
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.
SokoL_SD
parents:
229
diff
changeset
|
156 endif(CMAKE_HOST_WIN32) |
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.
SokoL_SD
parents:
229
diff
changeset
|
157 include(CPack) |
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.
SokoL_SD
parents:
229
diff
changeset
|
158 |
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.
SokoL_SD
parents:
229
diff
changeset
|
159 ########################################################## |
264
da7c867ef2ef
1) A bug is fixed when the generator doesn't restart if typesystem_${package}-java.java has been changed.
SokoL_SD
parents:
254
diff
changeset
|
160 ## Build QtD. |
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.
SokoL_SD
parents:
229
diff
changeset
|
161 ########################################################## |
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.
SokoL_SD
parents:
229
diff
changeset
|
162 else(NOT SECOND_RUN) |
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.
SokoL_SD
parents:
229
diff
changeset
|
163 |
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.
SokoL_SD
parents:
229
diff
changeset
|
164 PROJECT(qtd CXX C) |
240 | 165 if(NOT ${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) |
166 load_cache(${CMAKE_BINARY_DIR}/.. INCLUDE_INTERNALS all_packages QTD_VERSION_STR QTD_VERSION) | |
241 | 167 endif(NOT ${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) |
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.
SokoL_SD
parents:
229
diff
changeset
|
168 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) |
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.
SokoL_SD
parents:
229
diff
changeset
|
169 FIND_PACKAGE(D REQUIRED) |
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.
SokoL_SD
parents:
229
diff
changeset
|
170 FIND_PACKAGE(Qt4 REQUIRED) |
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.
SokoL_SD
parents:
229
diff
changeset
|
171 |
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.
SokoL_SD
parents:
229
diff
changeset
|
172 set(QTD_VERSION_STR ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}) |
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.
SokoL_SD
parents:
229
diff
changeset
|
173 math(EXPR QTD_VERSION "(${QT_VERSION_MAJOR} << 16) + (${QT_VERSION_MINOR} << 8) + ${QT_VERSION_PATCH}") |
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.
SokoL_SD
parents:
229
diff
changeset
|
174 |
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.
SokoL_SD
parents:
229
diff
changeset
|
175 include_directories(${QT_INCLUDES} ${CMAKE_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR}/include) |
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.
SokoL_SD
parents:
229
diff
changeset
|
176 |
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.
SokoL_SD
parents:
229
diff
changeset
|
177 # System specifc settings. |
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.
SokoL_SD
parents:
229
diff
changeset
|
178 if(CMAKE_HOST_WIN32) |
132 | 179 string(REGEX REPLACE ".dll([A-Za-z\\.0-9]+)" "\\1" CMAKE_IMPORT_LIBRARY_SUFFIX "${CMAKE_IMPORT_LIBRARY_SUFFIX}") |
344 | 180 endif(CMAKE_HOST_WIN32) |
132 | 181 |
229 | 182 if(CMAKE_HOST_WIN32 AND D_IS_MARS) |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
183 set(D_FLAGS -version=cpp_shared) |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
184 add_definitions(-DCPP_SHARED) |
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.
SokoL_SD
parents:
229
diff
changeset
|
185 set(CPP_SHARED 1 CACHE INTERNAL "") |
229 | 186 endif(CMAKE_HOST_WIN32 AND D_IS_MARS) |
187 | |
273 | 188 if(UNITTEST) |
189 add_d_versions(QtdUnittest) | |
344 | 190 set(D_FLAGS ${D_FLAGS} -unittest) |
273 | 191 endif(UNITTEST) |
192 | |
274 | 193 if(VERBOSE_DEBUG) |
194 add_d_debugs(QtdVerbose) | |
195 endif(VERBOSE_DEBUG) | |
196 | |
344 | 197 if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") |
198 add_d_debugs(QtdDebug) | |
199 endif(${CMAKE_BUILD_TYPE} STREQUAL "Debug") | |
200 | |
132 | 201 ## Bootstrap settings for QtD. |
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.
SokoL_SD
parents:
229
diff
changeset
|
202 set(DRCC ${CMAKE_BINARY_DIR}/tools/drcc/drcc CACHE INTERNAL "") |
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.
SokoL_SD
parents:
229
diff
changeset
|
203 set(DUIC ${CMAKE_BINARY_DIR}/tools/duic/duic CACHE INTERNAL "") |
344 | 204 set(QTD_IMPORT_PATH ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/d${D_VERSION} CACHE INTERNAL "") |
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.
SokoL_SD
parents:
229
diff
changeset
|
205 set(QTD_LIBRARIES_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "") |
132 | 206 |
207 ##-------------------------------------------- | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
208 ## Macros and functions. |
132 | 209 ##-------------------------------------------- |
210 | |
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.
SokoL_SD
parents:
229
diff
changeset
|
211 macro(load_generated_classes ) |
237 | 212 include(${CMAKE_BINARY_DIR}/cpp/qt_${package}/qt_${package}.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.
SokoL_SD
parents:
229
diff
changeset
|
213 endmacro(load_generated_classes ) |
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.
SokoL_SD
parents:
229
diff
changeset
|
214 |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
215 macro(qtd_add_resource output) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
216 set (params NAME OPTIONS) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
217 qtd_parse_params (RESOURCES params ${ARGN}) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
218 if(NAME_tmp) |
344 | 219 set(OPTIONS_tmp ${OPTIONS_tmp} -name ${NAME_tmp}) |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
220 endif(NAME_tmp) |
344 | 221 qtd_command ("${output}" "${DRCC}" "${OPTIONS_tmp}" "qrc_" |
222 "Generate" ${RESOURCES_tmp}) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
223 endmacro(qtd_add_resource output) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
224 |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
225 macro(qtd_wrap_ui output) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
226 set (params OPTIONS) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
227 qtd_parse_params (UI params ${ARGN}) |
344 | 228 qtd_command ("${output}" "${DUIC}" "${OPTIONS_tmp}" "uic_" |
229 "Generate" ${UI_tmp}) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
230 endmacro(qtd_wrap_ui output) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
231 |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
232 macro(qtd_command output command options prefix comment) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
233 foreach(file "${ARGN}") |
344 | 234 ## Test if the input file exists |
235 get_filename_component(file_path ${file} PATH) | |
236 get_filename_component(file_name ${file} NAME_WE) | |
237 get_filename_component(file_ext ${file} EXT) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
238 |
344 | 239 set(out ${CMAKE_CURRENT_BINARY_DIR}/${file_path}${prefix}${file_name}.d) |
240 add_custom_command(OUTPUT "${out}" | |
241 COMMAND "${command}" | |
242 ARGS ${options} ${file} -o ${out} | |
243 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | |
244 DEPENDS ${file} | |
245 COMMENT "${comment} ${file}" | |
246 ) | |
247 set(${output} ${${output}} ${out}) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
248 endforeach(file "${ARGN}") |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
249 endmacro(qtd_command output command options files prefix comment) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
250 |
264
da7c867ef2ef
1) A bug is fixed when the generator doesn't restart if typesystem_${package}-java.java has been changed.
SokoL_SD
parents:
254
diff
changeset
|
251 ## Parses the parameters list. |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
252 macro(qtd_parse_params default params) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
253 set(type_tmp ${default}) |
344 | 254 set(params_tmp ${default} ${${params}}) |
255 foreach(param_tmp ${params_tmp}) | |
256 set(${param_tmp}_tmp ) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
257 endforeach(param_tmp ${params_tmp}) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
258 foreach(arg_tmp ${ARGN}) |
344 | 259 set(found_type_tmp) |
260 if(NOT found_type_tmp) | |
261 foreach(param_tmp ${params_tmp}) | |
262 if(arg_tmp STREQUAL param_tmp) | |
263 set(type_tmp ${param_tmp}) | |
264 set(found_type_tmp 1) | |
265 break(param_tmp ${params_tmp}) | |
266 endif(arg_tmp STREQUAL param_tmp) | |
267 endforeach(param_tmp ${params_tmp}) | |
268 endif(NOT found_type_tmp) | |
269 if(NOT found_type_tmp) | |
270 set(${type_tmp}_tmp ${${type_tmp}_tmp} ${arg_tmp}) | |
271 endif(NOT found_type_tmp) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
272 endforeach(arg_tmp ${ARGN}) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
273 endmacro(qtd_parse_params default) |
132 | 274 |
264
da7c867ef2ef
1) A bug is fixed when the generator doesn't restart if typesystem_${package}-java.java has been changed.
SokoL_SD
parents:
254
diff
changeset
|
275 ## Adds a new example. |
132 | 276 ## name -- example name. |
277 ## Options: | |
344 | 278 ## PACKAGES -- list of packages for link to example (for example, QtCore QtGui QtOpenGL). |
279 ## Default value is "QtCore QtGui". | |
132 | 280 ## params -- sources d files. |
281 ## Usage: | |
344 | 282 ## build_example(ExampleName PACKAGES QtCore QtGui QtXml main.d another_d_file.d) |
132 | 283 macro(build_example name) |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
284 set (params UIC RESOURCES PACKAGES) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
285 qtd_parse_params (SOURCES params ${ARGN}) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
286 |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
287 if(NOT PACKAGES_tmp) |
344 | 288 set(PACKAGES_tmp QtCore QtGui) |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
289 endif(NOT PACKAGES_tmp) |
344 | 290 |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
291 if(RESOURCES_tmp) |
344 | 292 if(NOT BUILD_TOOLS) |
293 message(STATUS "Example '${name}' requires drcc. Example will not be built") | |
294 return(build_example name) | |
295 endif(NOT BUILD_TOOLS) | |
296 qtd_add_resource(res_sources ${RESOURCES_tmp} NAME ${name} ) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
297 endif(RESOURCES_tmp) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
298 |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
299 if(UIC_tmp) |
344 | 300 if(NOT BUILD_TOOLS) |
301 message(STATUS "Example '${name}' requires drcc. Example will not be built") | |
302 return(build_example name) | |
303 endif(NOT BUILD_TOOLS) | |
304 qtd_wrap_ui(uic_sources ${UIC_tmp}) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
305 endif(UIC_tmp) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
306 |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
307 foreach(package ${PACKAGES_tmp}) |
344 | 308 string(REGEX REPLACE "Qt([A-Za-z0-9])" "\\1" req "${package}") |
309 set(is_found) | |
310 foreach(package_big ${packages_big}) | |
311 string(TOLOWER ${package_big} package) | |
312 if(${req} STREQUAL ${package_big}) | |
313 set(is_found 1) | |
314 break(package_big ${packages_big}) | |
315 endif(${req} STREQUAL ${package_big}) | |
316 endforeach(package_big ${packages_big}) | |
317 if(NOT is_found) | |
318 message(STATUS "Example '${name}' requires the package '${req}', but it is not active. Example will not be built") | |
319 return(build_example name) | |
320 else(NOT is_found) | |
321 set(qtd_libs ${${package}_lib_param} ${qtd_libs}) | |
322 endif(NOT is_found) | |
323 endforeach(package ${PACKAGES_tmp}) | |
203
d3383b16f1d7
Add a 'NO_DEPS_SOURCES' option to the 'add_d_target' macro. And use it for resources and forms in QtD examples.
SokoL_SD
parents:
195
diff
changeset
|
324 add_d_program(${name} ${SOURCES_tmp} NO_DEPS_SOURCES ${res_sources} ${uic_sources} |
344 | 325 DEPENDS ${res_sources} INCLUDES ${QTD_IMPORT_PATH} ${CMAKE_CURRENT_BINARY_DIR} |
326 LIB_PATHS ${QTD_LIBRARIES_PATH} ${CMAKE_SOURCE_DIR}/lib ${QT_LIBRARY_DIR} LIBS ${qtd_libs}) | |
264
da7c867ef2ef
1) A bug is fixed when the generator doesn't restart if typesystem_${package}-java.java has been changed.
SokoL_SD
parents:
254
diff
changeset
|
327 ## TODO: Uncomment. |
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.
SokoL_SD
parents:
229
diff
changeset
|
328 #if(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) ## |
344 | 329 # add_custom_command(TARGET example_${name} POST_BUILD COMMAND "${STRIP}" ARGS "${output}") |
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.
SokoL_SD
parents:
229
diff
changeset
|
330 #endif(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) |
237 | 331 add_dependencies(examples ${name}) |
332 add_dependencies(${name} allpackages tools) | |
132 | 333 endmacro(build_example sources) |
334 | |
335 ##-------------------------------------------- | |
264
da7c867ef2ef
1) A bug is fixed when the generator doesn't restart if typesystem_${package}-java.java has been changed.
SokoL_SD
parents:
254
diff
changeset
|
336 ## Build and install the QtD libraries. |
132 | 337 ##-------------------------------------------- |
338 | |
339 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib) | |
340 add_custom_target(allpackages) | |
341 link_directories(${CMAKE_BINARY_DIR}/CMakeFiles) | |
342 | |
343 foreach(package_big ${all_packages}) | |
344 | 344 string(TOLOWER ${package_big} package) |
264
da7c867ef2ef
1) A bug is fixed when the generator doesn't restart if typesystem_${package}-java.java has been changed.
SokoL_SD
parents:
254
diff
changeset
|
345 string(TOUPPER ${package} package_upper) |
da7c867ef2ef
1) A bug is fixed when the generator doesn't restart if typesystem_${package}-java.java has been changed.
SokoL_SD
parents:
254
diff
changeset
|
346 ## Load settings for the package. |
132 | 347 set(required) |
348 set(d_objs) | |
349 set(cpp_objs) | |
350 set(d_sources) | |
351 set(cpp_sources) | |
352 set(lib_name) | |
353 set(link_cpp) | |
354 set(link_d) | |
355 set(cpp_files) | |
227 | 356 set(cpp_generated_files) |
344 | 357 set(d_qt_files) |
358 set(d_qtd_files) | |
132 | 359 set(classes) |
360 set(d_generated_files) | |
361 set(link_example) | |
344 | 362 include (${CMAKE_SOURCE_DIR}/build/${package}.txt) |
132 | 363 |
364 set(all_req_found 1) | |
365 if(BUILD_QT_${package_upper}) | |
344 | 366 foreach(req ${required}) |
367 set(req_found) | |
368 foreach(pack ${packages_big}) | |
369 if(${pack} STREQUAL ${req}) | |
370 set(req_found 1) | |
371 endif(${pack} STREQUAL ${req}) | |
372 endforeach(pack ${packages}) | |
373 if(NOT req_found) | |
374 set(req_found) | |
375 foreach(pack ${all_packages}) | |
376 if(${pack} STREQUAL ${req}) | |
377 set(req_found 1) | |
378 endif(${pack} STREQUAL ${req}) | |
379 endforeach(pack ${all_packages}) | |
380 if(req_found) | |
381 message(STATUS "Package '${package_big}' requires '${req}', but it is not active") | |
382 else(req_found) | |
383 message(STATUS "Package '${package_big}' requires '${req}', but it is not found") | |
384 endif(req_found) | |
385 set(all_req_found) | |
386 endif(NOT req_found) | |
387 endforeach(req ${required}) | |
132 | 388 else(BUILD_QT_${package_upper}) |
344 | 389 set(all_req_found) |
132 | 390 endif(BUILD_QT_${package_upper}) |
344 | 391 |
132 | 392 if("${all_req_found}" EQUAL 1) |
344 | 393 set(packages_big ${packages_big} ${package_big}) |
394 set(packages ${packages} ${package}) | |
395 ## Load a package sources list. | |
396 foreach(d_source ${package}/ArrayOps2 ${d_generated_files}) | |
397 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d) | |
398 if(EXISTS ${CMAKE_BINARY_DIR}/qt/${d_source}_aux.d) | |
399 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}_aux.d) | |
400 endif(EXISTS ${CMAKE_BINARY_DIR}/qt/${d_source}_aux.d) | |
401 endforeach(d_source ${d_generated_files}) | |
402 set(classes ArrayOps ${classes}) | |
403 foreach(class ${classes}) | |
404 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d) | |
405 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp) | |
406 if(EXISTS ${CMAKE_BINARY_DIR}/qt/${package}/${class}_aux.d) | |
407 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}_aux.d) | |
408 endif(EXISTS ${CMAKE_BINARY_DIR}/qt/${package}/${class}_aux.d) | |
409 endforeach(class ${classes}) | |
410 set(files_for_gen ${files_for_gen} ${cpp_sources} ${d_sources}) | |
411 | |
412 foreach (cpp_source ${cpp_files}) | |
413 set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp) | |
414 endforeach(cpp_source ${cpp_files}) | |
415 foreach (cpp_source ${cpp_generated_files}) | |
416 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/${cpp_source}.cpp) | |
417 endforeach(cpp_source ${cpp_generated_files}) | |
418 foreach(d_source ${d_qt_files}) | |
419 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/d${D_VERSION}/qt/${d_source}.d) | |
420 endforeach(d_source ${d_qt_files}) | |
421 foreach(d_source ${d_qtd_files}) | |
422 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/d${D_VERSION}/qtd/${d_source}.d) | |
423 endforeach(d_source ${d_qtd_files}) | |
132 | 424 |
344 | 425 if(NOT GENERATE_DI_FILES) |
426 foreach(d_source ${d_sources}) | |
427 get_filename_component(path ${d_source} PATH) | |
428 get_filename_component(name ${d_source} NAME_WE) | |
429 regex_safe_string(cbd_safe_tmp ${CMAKE_CURRENT_BINARY_DIR}) | |
430 regex_safe_string(csd_safe_tmp ${CMAKE_CURRENT_SOURCE_DIR}) | |
431 regex_safe_string(ver_safe_tmp ${CMAKE_CURRENT_SOURCE_DIR}/qt/d${D_VERSION}) | |
432 set(regexp_str_tmp "(${ver_safe_tmp}/|${cbd_safe_tmp}/|${csd_safe_tmp}/|)(.+)") | |
433 string(REGEX REPLACE ${regexp_str_tmp} "\\2" ins_path "${path}") | |
434 install(FILES ${d_source} DESTINATION include/d/${ins_path} COMPONENT qtd RENAME ${name}.di) | |
435 endforeach(d_source ${d_sources}) | |
436 endif(NOT GENERATE_DI_FILES) | |
132 | 437 |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
438 ### Build the CPP part. |
344 | 439 if(CPP_SHARED) |
440 set(cpp_method SHARED) | |
441 else(CPP_SHARED) | |
442 set(cpp_method STATIC) | |
443 endif(CPP_SHARED) | |
444 add_library(cpp_${package} ${cpp_method} ${cpp_sources}) | |
445 set_property(TARGET cpp_${package} PROPERTY RUNTIME_OUTPUT_DIRECTORY lib) | |
446 set_property(TARGET cpp_${package} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles) | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
447 set_property(TARGET cpp_${package} PROPERTY COMPILE_DEFINITIONS QTD_${package_upper}) |
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
448 |
344 | 449 set(link_cpp ${link_cpp} ${QT_QT${package_upper}_LIBRARY}) |
450 if(CPP_SHARED) | |
451 else(CPP_SHARED) | |
452 ## Get an objects list. It will be used in building the D part. | |
453 foreach(cpp_source ${cpp_sources}) | |
454 set(cpp_source ${cpp_source}) | |
455 obj_path(cpp_source) | |
456 set(cpp_objs ${cpp_objs} ${CMAKE_BINARY_DIR}/CMakeFiles/cpp_${package}.dir/${cpp_source}${CMAKE_CXX_OUTPUT_EXTENSION}) | |
457 endforeach(cpp_source ${cpp_sources}) | |
458 endif(CPP_SHARED) | |
132 | 459 |
344 | 460 ## Settings for the D part. |
461 set(lib_name qtd${package}) | |
462 if(BUILD_SHARED_LIBRARIES) | |
463 set(lib lib/${CMAKE_SHARED_LIBRARY_PREFIX}${lib_name}${CMAKE_SHARED_LIBRARY_SUFFIX}) | |
464 set(build_type SHARED) | |
465 else(BUILD_SHARED_LIBRARIES) | |
466 set(lib lib/${D_LIB_PREFIX}${lib_name}${D_LIB_SUFFIX}) | |
467 set(build_type STATIC) | |
468 endif(BUILD_SHARED_LIBRARIES) | |
132 | 469 |
344 | 470 ## Package dependencies. |
471 foreach(req ${required}) | |
472 set(is_found) | |
473 foreach(pack ${packages_big}) | |
474 if("${pack}" STREQUAL "${req}") | |
475 set(is_found 1) | |
476 break(pack ${packages_big}) | |
477 endif("${pack}" STREQUAL "${req}") | |
478 endforeach(pack ${packages_big}) | |
479 if(NOT is_found) | |
480 message(FATAL_ERROR "Package ${package_big} requires ${req}, but it is not found") | |
481 endif(NOT is_found) | |
482 string(TOUPPER ${req} req_upper) | |
483 string(TOLOWER ${req} req_lower) | |
484 set(link_cpp ${link_cpp} cpp_${req_lower} ${QT_QT${req_upper}_LIBRARY}) | |
485 endforeach(req ${require}) | |
486 target_link_libraries(cpp_${package} ${link_cpp} ) | |
487 set(d_objs ${d_objs} ${objects}) | |
132 | 488 |
344 | 489 if(CPP_SHARED) |
490 ## Create an implib library which will be linked to the D part. | |
491 set(cpp_lib ${CMAKE_BINARY_DIR}/lib/libcpp_${package}.dll) | |
492 set(cpp_lib_native ${cpp_lib}) | |
493 make_native_path(cpp_lib_native) | |
494 set(d_implib ${CMAKE_BINARY_DIR}/CMakeFiles/${package}.dir/cpp_${package}.lib) | |
495 set(d_implib_native ${d_implib}) | |
496 make_native_path(d_implib_native) | |
497 add_custom_command( | |
498 OUTPUT "${d_implib}" | |
499 COMMAND "${IMPLIB}" | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
500 ARGS /system /PAGESIZE:64 ${d_implib_native} ${cpp_lib_native} |
344 | 501 DEPENDS "cpp_${package}" |
502 COMMENT "Creating implib ${lib_name}" | |
503 ) | |
504 install(FILES ${cpp_lib} COMPONENT qtd DESTINATION lib) | |
505 else(CPP_SHARED) | |
506 set(${package}_lib_param Qt${package_big}) | |
507 endif(CPP_SHARED) | |
508 ## Link the D part. | |
509 add_d_target(${lib_name} NOT_DETECT_DEPENDS TYPE ${build_type} INCLUDES ${QTD_IMPORT_PATH} SOURCES ${d_sources} OBJECTS ${cpp_objs} ${d_implib} | |
510 OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib DEPENDS ${d_implib} ) | |
511 install(FILES ${CMAKE_BINARY_DIR}/${lib} COMPONENT qtd DESTINATION lib) | |
512 ## Paths for the QtD libs. It is necessary for examples. | |
513 set(${package}_lib_param qtd${package} ${${package}_lib_param} ${link_example}) | |
132 | 514 |
344 | 515 ## Generate dependences for make (or nmake). |
516 add_custom_target(${package}) | |
517 add_dependencies(${package} ${lib_name}) | |
357
9784459f0750
An attempt (failed due to optlink) to improve locality of declarations exported from QtD executables
Max Samukha <maxter@spambox.com>
parents:
344
diff
changeset
|
518 |
344 | 519 add_dependencies(${lib_name} cpp_${package}) |
520 foreach(depend ${required}) | |
521 string(TOLOWER ${depend} depend) | |
522 add_dependencies(cpp_${package} cpp_${depend}) | |
523 add_dependencies(${package} ${depend}) | |
524 endforeach(depend ${required}) | |
525 add_dependencies(allpackages ${package}) | |
526 | |
527 ## TODO: Do we need generating of *.di files? | |
528 if(GENERATE_DI_FILES) | |
529 regexseafestring(cbd_safe ${CMAKE_BINARY_DIR}) | |
530 regexseafestring(csd_safe ${CMAKE_SOURCE_DIR}) | |
531 set(regexp_str "(${csd}/qt/d${D_VERSION}|${csd_safe}|${cbd_safe})/([A-Za-z0-9\\-_\\\\/]+)[/]+([A-Za-z0-9\\-_\\\\]+).d") | |
532 foreach(source ${d_sources}) | |
533 # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} | |
534 # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) | |
535 string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}") | |
536 string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}") | |
537 set(interface_file_path ${CMAKE_BINARY_DIR}/d/${inc_path}) | |
538 set(interface_file "${interface_file_path}/${file_name}.di") | |
539 if(NOT "${file_name}" STREQUAL "QGlobal") | |
540 add_custom_command(OUTPUT "${interface_file}" | |
541 COMMAND "${DC}" | |
542 ARGS ${D_FLAGS} -o- -H -Hd${interface_file_path} ${source} | |
543 COMMENT "Generating header for ${source}" | |
544 DEPENDS ${source} | |
545 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | |
546 ) | |
547 else(NOT "${file_name}" STREQUAL "QGlobal") ## The DMD frontend crashes on this file. | |
548 add_custom_command(OUTPUT "${interface_file}" | |
549 COMMAND ${CMAKE_COMMAND} -E make_directory ${interface_file_path} | |
550 COMMAND ${CMAKE_COMMAND} -E remove -f ${interface_file} | |
551 COMMAND ${CMAKE_COMMAND} -E copy ${source} ${interface_file} | |
552 COMMENT "" | |
553 DEPENDS ${source} | |
554 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | |
555 ) | |
556 endif(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES) | |
557 set(interfaces_list ${interfaces_list} ${interface_file_path}/${file_name}.di) | |
558 install(FILES ${interface_file} COMPONENT qtd DESTINATION include/d/${inc_path}) | |
559 endforeach(source) | |
560 endif(GENERATE_DI_FILES) | |
132 | 561 endif("${all_req_found}" EQUAL 1) |
562 endforeach(package_big ${packages_big}) | |
344 | 563 if(GENERATE_DI_FILES) |
132 | 564 add_custom_target(generate_headers ALL DEPENDS ${interfaces_list}) |
565 endif(GENERATE_DI_FILES) | |
566 | |
567 set(CPACK_COMPONENTS_ALL qtd qtd_tools) | |
568 | |
569 ##-------------------------------------------- | |
570 ## Build other parts of the QtD. | |
571 ##-------------------------------------------- | |
237 | 572 |
132 | 573 if(BUILD_TOOLS) |
237 | 574 add_custom_target(tools ALL) |
132 | 575 add_subdirectory(tools) |
576 add_dependencies(tools drcc duic) | |
577 endif(BUILD_TOOLS) | |
578 | |
579 if(BUILD_EXAMPLES) | |
237 | 580 add_custom_target(examples ALL) |
581 add_dependencies(examples allpackages tools) | |
132 | 582 add_subdirectory(demos) |
583 add_subdirectory(examples) | |
584 endif(BUILD_EXAMPLES) | |
585 | |
239 | 586 set(SECOND_RUN 0 CACHE INTERNAL "") |
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.
SokoL_SD
parents:
229
diff
changeset
|
587 |
344 | 588 endif(NOT SECOND_RUN) |