Mercurial > projects > qtd
annotate CMakeLists.txt @ 374:681af90e1d53
Removed debug writelns. Fixed build script.
author | Max Samukha <maxter@spambox.com> |
---|---|
date | Thu, 08 Jul 2010 22:21:56 +0300 |
parents | a032df77b6ab |
children | c429854a40c0 |
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 endif(D_IS_MARS) | |
344 | 86 endif(CMAKE_HOST_WIN32) |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
87 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
|
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) |
363
3b0545d4d479
Fixed enums in designated interfaces
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
141 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "QtD is a D binding to the Qt application and UI framework.") |
241 | 142 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
|
143 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
|
144 set(CPACK_PACKAGE_VENDOR "QtD team") |
363
3b0545d4d479
Fixed enums in designated interfaces
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
145 set(CPACK_PACKAGE_CONTACT "e@mail.ru") |
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
|
146 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
|
147 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
|
148 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
|
149 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
|
150 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
|
151 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
|
152 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
|
153 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
|
154 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
|
155 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
|
156 |
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 ########################################################## |
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
|
158 ## 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
|
159 ########################################################## |
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
|
160 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
|
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 PROJECT(qtd CXX C) |
240 | 163 if(NOT ${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR}) |
164 load_cache(${CMAKE_BINARY_DIR}/.. INCLUDE_INTERNALS all_packages QTD_VERSION_STR QTD_VERSION) | |
241 | 165 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
|
166 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
|
167 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
|
168 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
|
169 |
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 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
|
171 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
|
172 |
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 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
|
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 # 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
|
176 if(CMAKE_HOST_WIN32) |
132 | 177 string(REGEX REPLACE ".dll([A-Za-z\\.0-9]+)" "\\1" CMAKE_IMPORT_LIBRARY_SUFFIX "${CMAKE_IMPORT_LIBRARY_SUFFIX}") |
344 | 178 endif(CMAKE_HOST_WIN32) |
132 | 179 |
229 | 180 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
|
181 set(D_FLAGS -version=cpp_shared) |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
182 endif(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 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
|
184 set(CPP_SHARED 1 CACHE INTERNAL "") |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
185 |
229 | 186 |
273 | 187 if(UNITTEST) |
188 add_d_versions(QtdUnittest) | |
344 | 189 set(D_FLAGS ${D_FLAGS} -unittest) |
273 | 190 endif(UNITTEST) |
191 | |
274 | 192 if(VERBOSE_DEBUG) |
193 add_d_debugs(QtdVerbose) | |
194 endif(VERBOSE_DEBUG) | |
195 | |
344 | 196 if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") |
197 add_d_debugs(QtdDebug) | |
198 endif(${CMAKE_BUILD_TYPE} STREQUAL "Debug") | |
199 | |
132 | 200 ## 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
|
201 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
|
202 set(DUIC ${CMAKE_BINARY_DIR}/tools/duic/duic CACHE INTERNAL "") |
344 | 203 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
|
204 set(QTD_LIBRARIES_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "") |
132 | 205 |
206 ##-------------------------------------------- | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
207 ## Macros and functions. |
132 | 208 ##-------------------------------------------- |
209 | |
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
|
210 macro(load_generated_classes ) |
237 | 211 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
|
212 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
|
213 |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
214 macro(qtd_add_resource output) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
215 set (params NAME OPTIONS) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
216 qtd_parse_params (RESOURCES params ${ARGN}) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
217 if(NAME_tmp) |
344 | 218 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
|
219 endif(NAME_tmp) |
344 | 220 qtd_command ("${output}" "${DRCC}" "${OPTIONS_tmp}" "qrc_" |
221 "Generate" ${RESOURCES_tmp}) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
222 endmacro(qtd_add_resource output) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
223 |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
224 macro(qtd_wrap_ui output) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
225 set (params OPTIONS) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
226 qtd_parse_params (UI params ${ARGN}) |
344 | 227 qtd_command ("${output}" "${DUIC}" "${OPTIONS_tmp}" "uic_" |
228 "Generate" ${UI_tmp}) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
229 endmacro(qtd_wrap_ui output) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
230 |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
231 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
|
232 foreach(file "${ARGN}") |
344 | 233 ## Test if the input file exists |
234 get_filename_component(file_path ${file} PATH) | |
235 get_filename_component(file_name ${file} NAME_WE) | |
236 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
|
237 |
344 | 238 set(out ${CMAKE_CURRENT_BINARY_DIR}/${file_path}${prefix}${file_name}.d) |
239 add_custom_command(OUTPUT "${out}" | |
240 COMMAND "${command}" | |
241 ARGS ${options} ${file} -o ${out} | |
242 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | |
243 DEPENDS ${file} | |
244 COMMENT "${comment} ${file}" | |
245 ) | |
246 set(${output} ${${output}} ${out}) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
247 endforeach(file "${ARGN}") |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
248 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
|
249 |
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
|
250 ## Parses the parameters list. |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
251 macro(qtd_parse_params default params) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
252 set(type_tmp ${default}) |
344 | 253 set(params_tmp ${default} ${${params}}) |
254 foreach(param_tmp ${params_tmp}) | |
255 set(${param_tmp}_tmp ) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
256 endforeach(param_tmp ${params_tmp}) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
257 foreach(arg_tmp ${ARGN}) |
344 | 258 set(found_type_tmp) |
259 if(NOT found_type_tmp) | |
260 foreach(param_tmp ${params_tmp}) | |
261 if(arg_tmp STREQUAL param_tmp) | |
262 set(type_tmp ${param_tmp}) | |
263 set(found_type_tmp 1) | |
264 break(param_tmp ${params_tmp}) | |
265 endif(arg_tmp STREQUAL param_tmp) | |
266 endforeach(param_tmp ${params_tmp}) | |
267 endif(NOT found_type_tmp) | |
268 if(NOT found_type_tmp) | |
269 set(${type_tmp}_tmp ${${type_tmp}_tmp} ${arg_tmp}) | |
270 endif(NOT found_type_tmp) | |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
271 endforeach(arg_tmp ${ARGN}) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
272 endmacro(qtd_parse_params default) |
132 | 273 |
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
|
274 ## Adds a new example. |
132 | 275 ## name -- example name. |
276 ## Options: | |
344 | 277 ## PACKAGES -- list of packages for link to example (for example, QtCore QtGui QtOpenGL). |
278 ## Default value is "QtCore QtGui". | |
132 | 279 ## params -- sources d files. |
280 ## Usage: | |
344 | 281 ## build_example(ExampleName PACKAGES QtCore QtGui QtXml main.d another_d_file.d) |
132 | 282 macro(build_example name) |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
283 set (params UIC RESOURCES PACKAGES) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
284 qtd_parse_params (SOURCES params ${ARGN}) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
285 |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
286 if(NOT PACKAGES_tmp) |
344 | 287 set(PACKAGES_tmp QtCore QtGui) |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
288 endif(NOT PACKAGES_tmp) |
344 | 289 |
182
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
290 if(RESOURCES_tmp) |
344 | 291 if(NOT BUILD_TOOLS) |
292 message(STATUS "Example '${name}' requires drcc. Example will not be built") | |
293 return(build_example name) | |
294 endif(NOT BUILD_TOOLS) | |
295 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
|
296 endif(RESOURCES_tmp) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
297 |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
298 if(UIC_tmp) |
344 | 299 if(NOT BUILD_TOOLS) |
300 message(STATUS "Example '${name}' requires drcc. Example will not be built") | |
301 return(build_example name) | |
302 endif(NOT BUILD_TOOLS) | |
303 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
|
304 endif(UIC_tmp) |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
305 |
973564c7e388
CMake: add an UIC option in the build_example macro.
SokoL_SD
parents:
177
diff
changeset
|
306 foreach(package ${PACKAGES_tmp}) |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
307 string(REGEX REPLACE "Qt([A-Za-z0-9])" "\\1" req "${package}") |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
308 set(is_found) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
309 foreach(package_big ${packages_big}) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
310 string(TOLOWER ${package_big} package) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
311 if(${req} STREQUAL ${package_big}) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
312 set(is_found 1) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
313 break(package_big ${packages_big}) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
314 endif() |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
315 endforeach() |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
316 if(NOT is_found) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
317 message(STATUS "Example '${name}' requires the package '${req}', but it is not active. Example will not be built") |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
318 return(build_example name) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
319 else() |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
320 set(qtd_libs cpp_${package} ${${package}_lib_param} ${qtd_libs}) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
321 endif() |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
322 endforeach() |
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
|
323 add_d_program(${name} ${SOURCES_tmp} NO_DEPS_SOURCES ${res_sources} ${uic_sources} |
344 | 324 DEPENDS ${res_sources} INCLUDES ${QTD_IMPORT_PATH} ${CMAKE_CURRENT_BINARY_DIR} |
325 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
|
326 ## 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
|
327 #if(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) ## |
344 | 328 # 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
|
329 #endif(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) |
237 | 330 add_dependencies(examples ${name}) |
331 add_dependencies(${name} allpackages tools) | |
132 | 332 endmacro(build_example sources) |
333 | |
334 ##-------------------------------------------- | |
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
|
335 ## Build and install the QtD libraries. |
132 | 336 ##-------------------------------------------- |
337 | |
338 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib) | |
339 add_custom_target(allpackages) | |
340 link_directories(${CMAKE_BINARY_DIR}/CMakeFiles) | |
341 | |
342 foreach(package_big ${all_packages}) | |
344 | 343 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
|
344 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
|
345 ## Load settings for the package. |
132 | 346 set(required) |
347 set(d_objs) | |
348 set(cpp_objs) | |
349 set(d_sources) | |
350 set(cpp_sources) | |
351 set(lib_name) | |
352 set(link_cpp) | |
353 set(link_d) | |
354 set(cpp_files) | |
227 | 355 set(cpp_generated_files) |
344 | 356 set(d_qt_files) |
357 set(d_qtd_files) | |
132 | 358 set(classes) |
359 set(d_generated_files) | |
360 set(link_example) | |
344 | 361 include (${CMAKE_SOURCE_DIR}/build/${package}.txt) |
132 | 362 |
363 set(all_req_found 1) | |
364 if(BUILD_QT_${package_upper}) | |
344 | 365 foreach(req ${required}) |
366 set(req_found) | |
367 foreach(pack ${packages_big}) | |
368 if(${pack} STREQUAL ${req}) | |
369 set(req_found 1) | |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
370 endif() |
344 | 371 endforeach(pack ${packages}) |
372 if(NOT req_found) | |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
373 set(req_found) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
374 foreach(pack ${all_packages}) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
375 if(${pack} STREQUAL ${req}) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
376 set(req_found 1) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
377 endif(${pack} STREQUAL ${req}) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
378 endforeach(pack ${all_packages}) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
379 if(req_found) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
380 message(STATUS "Package '${package_big}' requires '${req}', but it is not active") |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
381 else() |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
382 message(STATUS "Package '${package_big}' requires '${req}', but it is not found") |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
383 endif() |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
384 set(all_req_found) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
385 endif() |
344 | 386 endforeach(req ${required}) |
132 | 387 else(BUILD_QT_${package_upper}) |
344 | 388 set(all_req_found) |
132 | 389 endif(BUILD_QT_${package_upper}) |
344 | 390 |
132 | 391 if("${all_req_found}" EQUAL 1) |
344 | 392 set(packages_big ${packages_big} ${package_big}) |
393 set(packages ${packages} ${package}) | |
394 ## Load a package sources list. | |
395 foreach(d_source ${package}/ArrayOps2 ${d_generated_files}) | |
396 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d) | |
397 if(EXISTS ${CMAKE_BINARY_DIR}/qt/${d_source}_aux.d) | |
398 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}_aux.d) | |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
399 endif() |
344 | 400 endforeach(d_source ${d_generated_files}) |
401 set(classes ArrayOps ${classes}) | |
402 foreach(class ${classes}) | |
403 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d) | |
404 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp) | |
405 if(EXISTS ${CMAKE_BINARY_DIR}/qt/${package}/${class}_aux.d) | |
406 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}_aux.d) | |
407 endif(EXISTS ${CMAKE_BINARY_DIR}/qt/${package}/${class}_aux.d) | |
408 endforeach(class ${classes}) | |
409 set(files_for_gen ${files_for_gen} ${cpp_sources} ${d_sources}) | |
410 | |
411 foreach (cpp_source ${cpp_files}) | |
412 set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp) | |
413 endforeach(cpp_source ${cpp_files}) | |
414 foreach (cpp_source ${cpp_generated_files}) | |
415 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/${cpp_source}.cpp) | |
416 endforeach(cpp_source ${cpp_generated_files}) | |
417 foreach(d_source ${d_qt_files}) | |
418 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/d${D_VERSION}/qt/${d_source}.d) | |
419 endforeach(d_source ${d_qt_files}) | |
420 foreach(d_source ${d_qtd_files}) | |
421 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/d${D_VERSION}/qtd/${d_source}.d) | |
422 endforeach(d_source ${d_qtd_files}) | |
132 | 423 |
344 | 424 if(NOT GENERATE_DI_FILES) |
425 foreach(d_source ${d_sources}) | |
426 get_filename_component(path ${d_source} PATH) | |
427 get_filename_component(name ${d_source} NAME_WE) | |
428 regex_safe_string(cbd_safe_tmp ${CMAKE_CURRENT_BINARY_DIR}) | |
429 regex_safe_string(csd_safe_tmp ${CMAKE_CURRENT_SOURCE_DIR}) | |
363
3b0545d4d479
Fixed enums in designated interfaces
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
430 regex_safe_string(ver_safe_tmp ${CMAKE_CURRENT_SOURCE_DIR}/d${D_VERSION}) |
344 | 431 set(regexp_str_tmp "(${ver_safe_tmp}/|${cbd_safe_tmp}/|${csd_safe_tmp}/|)(.+)") |
432 string(REGEX REPLACE ${regexp_str_tmp} "\\2" ins_path "${path}") | |
433 install(FILES ${d_source} DESTINATION include/d/${ins_path} COMPONENT qtd RENAME ${name}.di) | |
434 endforeach(d_source ${d_sources}) | |
435 endif(NOT GENERATE_DI_FILES) | |
132 | 436 |
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
|
437 ### Build the CPP part. |
344 | 438 if(CPP_SHARED) |
439 set(cpp_method SHARED) | |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
440 else() |
344 | 441 set(cpp_method STATIC) |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
442 endif() |
344 | 443 add_library(cpp_${package} ${cpp_method} ${cpp_sources}) |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
444 # FIXME, do less redundant |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
445 if(CMAKE_HOST_WIN32) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
446 set_target_properties(cpp_${package} PROPERTIES |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
447 RUNTIME_OUTPUT_DIRECTORY lib |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
448 ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
449 LINK_FLAGS -Wl,-enable-auto-import |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
450 COMPILE_DEFINITIONS QTD_${package_upper} |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
451 ) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
452 else() |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
453 set_target_properties(cpp_${package} PROPERTIES |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
454 LIBRARY_OUTPUT_DIRECTORY lib |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
455 ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
456 COMPILE_DEFINITIONS QTD_${package_upper} |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
457 ) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
458 endif() |
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
|
459 |
344 | 460 set(link_cpp ${link_cpp} ${QT_QT${package_upper}_LIBRARY}) |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
461 if(NOT CPP_SHARED) |
344 | 462 ## Get an objects list. It will be used in building the D part. |
463 foreach(cpp_source ${cpp_sources}) | |
464 set(cpp_source ${cpp_source}) | |
465 obj_path(cpp_source) | |
466 set(cpp_objs ${cpp_objs} ${CMAKE_BINARY_DIR}/CMakeFiles/cpp_${package}.dir/${cpp_source}${CMAKE_CXX_OUTPUT_EXTENSION}) | |
467 endforeach(cpp_source ${cpp_sources}) | |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
468 endif() |
132 | 469 |
344 | 470 ## Settings for the D part. |
471 set(lib_name qtd${package}) | |
472 if(BUILD_SHARED_LIBRARIES) | |
473 set(lib lib/${CMAKE_SHARED_LIBRARY_PREFIX}${lib_name}${CMAKE_SHARED_LIBRARY_SUFFIX}) | |
474 set(build_type SHARED) | |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
475 else() |
344 | 476 set(lib lib/${D_LIB_PREFIX}${lib_name}${D_LIB_SUFFIX}) |
477 set(build_type STATIC) | |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
478 endif() |
132 | 479 |
344 | 480 ## Package dependencies. |
481 foreach(req ${required}) | |
482 set(is_found) | |
483 foreach(pack ${packages_big}) | |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
484 if("${pack}" STREQUAL "${req}") |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
485 set(is_found 1) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
486 break(pack ${packages_big}) |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
487 endif() |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
488 endforeach() |
344 | 489 if(NOT is_found) |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
490 message(FATAL_ERROR "Package ${package_big} requires ${req}, but it is not found") |
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
491 endif() |
344 | 492 string(TOUPPER ${req} req_upper) |
493 string(TOLOWER ${req} req_lower) | |
494 set(link_cpp ${link_cpp} cpp_${req_lower} ${QT_QT${req_upper}_LIBRARY}) | |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
495 endforeach() |
344 | 496 target_link_libraries(cpp_${package} ${link_cpp} ) |
497 set(d_objs ${d_objs} ${objects}) | |
132 | 498 |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
499 if(CPP_SHARED) |
374
681af90e1d53
Removed debug writelns. Fixed build script.
Max Samukha <maxter@spambox.com>
parents:
372
diff
changeset
|
500 set(cpp_lib ${CMAKE_BINARY_DIR}/lib/libcpp_${package}${CMAKE_SHARED_LIBRARY_SUFFIX}) |
344 | 501 install(FILES ${cpp_lib} COMPONENT qtd DESTINATION lib) |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
502 |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
503 if(CMAKE_HOST_WIN32) |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
504 ## Create an implib library which will be linked to the D part. |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
505 set(cpp_lib_native ${cpp_lib}) |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
506 make_native_path(cpp_lib_native) |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
507 set(d_implib ${CMAKE_BINARY_DIR}/CMakeFiles/${package}.dir/cpp_${package}.lib) |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
508 set(d_implib_native ${d_implib}) |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
509 make_native_path(d_implib_native) |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
510 add_custom_command( |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
511 OUTPUT "${d_implib}" |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
512 COMMAND "${IMPLIB}" |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
513 ARGS /system /PAGESIZE:64 ${d_implib_native} ${cpp_lib_native} |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
514 DEPENDS "cpp_${package}" |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
515 COMMENT "Creating implib ${lib_name}" |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
516 ) |
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
517 endif() |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
518 else() |
344 | 519 set(${package}_lib_param Qt${package_big}) |
370
7fd4b69378bf
move cpp part of QtD into shared libs on linux to reduce binaries size
Eldar Insafutdinov
parents:
363
diff
changeset
|
520 endif() |
372
a032df77b6ab
Simple debug helper. Unittests. Meta-object for polymorphic non-QObjects
Max Samukha <maxter@spambox.com>
parents:
370
diff
changeset
|
521 |
344 | 522 ## Link the D part. |
523 add_d_target(${lib_name} NOT_DETECT_DEPENDS TYPE ${build_type} INCLUDES ${QTD_IMPORT_PATH} SOURCES ${d_sources} OBJECTS ${cpp_objs} ${d_implib} | |
524 OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib DEPENDS ${d_implib} ) | |
525 install(FILES ${CMAKE_BINARY_DIR}/${lib} COMPONENT qtd DESTINATION lib) | |
526 ## Paths for the QtD libs. It is necessary for examples. | |
527 set(${package}_lib_param qtd${package} ${${package}_lib_param} ${link_example}) | |
132 | 528 |
344 | 529 ## Generate dependences for make (or nmake). |
530 add_custom_target(${package}) | |
531 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
|
532 |
344 | 533 add_dependencies(${lib_name} cpp_${package}) |
534 foreach(depend ${required}) | |
535 string(TOLOWER ${depend} depend) | |
536 add_dependencies(cpp_${package} cpp_${depend}) | |
537 add_dependencies(${package} ${depend}) | |
538 endforeach(depend ${required}) | |
539 add_dependencies(allpackages ${package}) | |
540 | |
363
3b0545d4d479
Fixed enums in designated interfaces
Max Samukha <maxter@maxter.com>
parents:
357
diff
changeset
|
541 ## TODO: Do we need to generate *.di files? |
344 | 542 if(GENERATE_DI_FILES) |
543 regexseafestring(cbd_safe ${CMAKE_BINARY_DIR}) | |
544 regexseafestring(csd_safe ${CMAKE_SOURCE_DIR}) | |
545 set(regexp_str "(${csd}/qt/d${D_VERSION}|${csd_safe}|${cbd_safe})/([A-Za-z0-9\\-_\\\\/]+)[/]+([A-Za-z0-9\\-_\\\\]+).d") | |
546 foreach(source ${d_sources}) | |
547 # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} | |
548 # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) | |
549 string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}") | |
550 string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}") | |
551 set(interface_file_path ${CMAKE_BINARY_DIR}/d/${inc_path}) | |
552 set(interface_file "${interface_file_path}/${file_name}.di") | |
553 if(NOT "${file_name}" STREQUAL "QGlobal") | |
554 add_custom_command(OUTPUT "${interface_file}" | |
555 COMMAND "${DC}" | |
556 ARGS ${D_FLAGS} -o- -H -Hd${interface_file_path} ${source} | |
557 COMMENT "Generating header for ${source}" | |
558 DEPENDS ${source} | |
559 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | |
560 ) | |
561 else(NOT "${file_name}" STREQUAL "QGlobal") ## The DMD frontend crashes on this file. | |
562 add_custom_command(OUTPUT "${interface_file}" | |
563 COMMAND ${CMAKE_COMMAND} -E make_directory ${interface_file_path} | |
564 COMMAND ${CMAKE_COMMAND} -E remove -f ${interface_file} | |
565 COMMAND ${CMAKE_COMMAND} -E copy ${source} ${interface_file} | |
566 COMMENT "" | |
567 DEPENDS ${source} | |
568 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | |
569 ) | |
570 endif(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES) | |
571 set(interfaces_list ${interfaces_list} ${interface_file_path}/${file_name}.di) | |
572 install(FILES ${interface_file} COMPONENT qtd DESTINATION include/d/${inc_path}) | |
573 endforeach(source) | |
574 endif(GENERATE_DI_FILES) | |
132 | 575 endif("${all_req_found}" EQUAL 1) |
576 endforeach(package_big ${packages_big}) | |
344 | 577 if(GENERATE_DI_FILES) |
132 | 578 add_custom_target(generate_headers ALL DEPENDS ${interfaces_list}) |
579 endif(GENERATE_DI_FILES) | |
580 | |
581 set(CPACK_COMPONENTS_ALL qtd qtd_tools) | |
582 | |
583 ##-------------------------------------------- | |
584 ## Build other parts of the QtD. | |
585 ##-------------------------------------------- | |
237 | 586 |
132 | 587 if(BUILD_TOOLS) |
237 | 588 add_custom_target(tools ALL) |
132 | 589 add_subdirectory(tools) |
590 add_dependencies(tools drcc duic) | |
591 endif(BUILD_TOOLS) | |
592 | |
593 if(BUILD_EXAMPLES) | |
237 | 594 add_custom_target(examples ALL) |
595 add_dependencies(examples allpackages tools) | |
132 | 596 add_subdirectory(demos) |
597 add_subdirectory(examples) | |
598 endif(BUILD_EXAMPLES) | |
599 | |
239 | 600 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
|
601 |
344 | 602 endif(NOT SECOND_RUN) |