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