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