Mercurial > projects > qtd
comparison cmake/FindD.cmake @ 366:da4235301224
Fixed VoidFunc. Updated to dmd.2.047.
author | Max Samukha <maxter@spambox.com> |
---|---|
date | Wed, 23 Jun 2010 21:34:43 +0300 |
parents | 08c1ca7975ab |
children | 185df9220ea7 |
comparison
equal
deleted
inserted
replaced
365:958e8b9a89bd | 366:da4235301224 |
---|---|
2 ## Variables. | 2 ## Variables. |
3 ##-------------------------------------------- | 3 ##-------------------------------------------- |
4 | 4 |
5 ## Find D compiler and parse its version. | 5 ## Find D compiler and parse its version. |
6 find_program(DC NAMES dmd ldc) | 6 find_program(DC NAMES dmd ldc) |
7 if (DC) | 7 if (DC) |
8 get_filename_component(dc_path ${DC} PATH) | 8 get_filename_component(dc_path ${DC} PATH) |
9 if("${dc_path}" STREQUAL ${CMAKE_BINARY_DIR}) | 9 if("${dc_path}" STREQUAL ${CMAKE_BINARY_DIR}) |
10 get_filename_component(DC ${DC} NAME) | 10 get_filename_component(DC ${DC} NAME) |
11 endif("${dc_path}" STREQUAL ${CMAKE_BINARY_DIR}) | 11 endif("${dc_path}" STREQUAL ${CMAKE_BINARY_DIR}) |
12 exec_program(${DC} ARGS "" OUTPUT_VARIABLE d_output) | 12 exec_program(${DC} ARGS "" OUTPUT_VARIABLE d_output) |
13 string(REGEX MATCH "Digital Mars D Compiler v[0-9]\\.[0-9]+" dmd_version "${d_output}") | 13 string(REGEX MATCH "Digital Mars D Compiler v[0-9]\\.[0-9]+" dmd_version "${d_output}") |
14 if (dmd_version) | 14 if (dmd_version) |
15 set(D_IS_MARS true) | 15 set(D_IS_MARS true) |
16 set(D_IS_DMD true) | 16 set(D_IS_DMD true) |
17 set(D_COMPILER_NAME "Digital Mars D Compiler") | 17 set(D_COMPILER_NAME "Digital Mars D Compiler") |
18 string(REGEX REPLACE "Digital Mars D Compiler v([0-9])\\.[0-9]+" "\\1" D_VERSION "${dmd_version}") | 18 string(REGEX REPLACE "Digital Mars D Compiler v([0-9])\\.[0-9]+" "\\1" D_VERSION "${dmd_version}") |
19 string(REGEX REPLACE "Digital Mars D Compiler v[0-9]\\.([0-9]+)" "\\1" D_FRONTEND "${dmd_version}") | 19 string(REGEX REPLACE "Digital Mars D Compiler v[0-9]\\.([0-9]+)" "\\1" D_FRONTEND "${dmd_version}") |
20 else (dmd_version) | 20 else (dmd_version) |
21 string(REGEX MATCH "LLVM-based D Compiler" is_ldc "${d_output}") | 21 string(REGEX MATCH "LLVM-based D Compiler" is_ldc "${d_output}") |
22 if (is_ldc) | 22 if (is_ldc) |
23 exec_program(${DC} ARGS "--version" OUTPUT_VARIABLE d_output) | 23 exec_program(${DC} ARGS "--version" OUTPUT_VARIABLE d_output) |
24 string(REGEX MATCH "based on DMD v[0-9]\\.[0-9]+" ldc_version "${d_output}") | 24 string(REGEX MATCH "based on DMD v[0-9]\\.[0-9]+" ldc_version "${d_output}") |
25 set(D_IS_LLVM true) | 25 set(D_IS_LLVM true) |
26 set(D_IS_LDC true) | 26 set(D_IS_LDC true) |
27 if(ldc_version) | 27 if(ldc_version) |
28 set(D_IS_LLVM true) | 28 set(D_IS_LLVM true) |
29 set(D_COMPILER_NAME "LLVM-based D Compiler") | 29 set(D_COMPILER_NAME "LLVM-based D Compiler") |
30 string(REGEX REPLACE "based on DMD v([0-9])\\.[0-9]+" "\\1" D_VERSION "${ldc_version}") | 30 string(REGEX REPLACE "based on DMD v([0-9])\\.[0-9]+" "\\1" D_VERSION "${ldc_version}") |
31 string(REGEX REPLACE "based on DMD v[0-9]\\.([0-9]+)" "\\1" D_FRONTEND "${ldc_version}") | 31 string(REGEX REPLACE "based on DMD v[0-9]\\.([0-9]+)" "\\1" D_FRONTEND "${ldc_version}") |
32 else(ldc_version) | 32 else(ldc_version) |
33 message(FATAL_ERROR "LDC compiler found, but the version can not be processed") | 33 message(FATAL_ERROR "LDC compiler found, but the version can not be processed") |
34 endif(ldc_version) | 34 endif(ldc_version) |
35 else (is_ldc) | 35 else (is_ldc) |
36 message(FATAL_ERROR "D compiler are not found") | 36 message(FATAL_ERROR "D compiler is not found") |
37 endif(is_ldc) | 37 endif(is_ldc) |
38 endif(dmd_version) | 38 endif(dmd_version) |
39 message(STATUS "D compiler found -- ${D_COMPILER_NAME} v${D_VERSION}.${D_FRONTEND}") | 39 message(STATUS "D compiler found -- ${D_COMPILER_NAME} v${D_VERSION}.${D_FRONTEND}") |
40 else (DC) | 40 else (DC) |
41 message(FATAL_ERROR "D compliler are not found") | 41 message(FATAL_ERROR "D compliler is not found") |
42 endif (DC) | 42 endif (DC) |
43 | 43 |
44 ## Get D compiler path. | 44 ## Get D compiler path. |
45 get_filename_component(DC_PATH ${DC} PATH) | 45 get_filename_component(DC_PATH ${DC} PATH) |
46 if("${DC_PATH}" STREQUAL "") | 46 if("${DC_PATH}" STREQUAL "") |
47 find_program(dc_path_tmp ${DC}) | 47 find_program(dc_path_tmp ${DC}) |
48 get_filename_component(DC_PATH ${dc_path_tmp} PATH) | 48 get_filename_component(DC_PATH ${dc_path_tmp} PATH) |
49 mark_as_advanced(dc_path_tmp) | 49 mark_as_advanced(dc_path_tmp) |
50 endif("${DC_PATH}" STREQUAL "") | 50 endif("${DC_PATH}" STREQUAL "") |
51 get_filename_component(dc_parent_dir ${DC_PATH} NAME) | 51 get_filename_component(dc_parent_dir ${DC_PATH} NAME) |
52 if("${dc_parent_dir}" STREQUAL "bin") | 52 if("${dc_parent_dir}" STREQUAL "bin") |
53 get_filename_component(DC_PATH ${DC_PATH} PATH) | 53 get_filename_component(DC_PATH ${DC_PATH} PATH) |
54 endif("${dc_parent_dir}" STREQUAL "bin") | 54 endif("${dc_parent_dir}" STREQUAL "bin") |
55 | 55 |
56 #option(ONE_BUILD_COMMAND "Build in one command" "OFF") | 56 #option(ONE_BUILD_COMMAND "Build in one command" "OFF") |
57 set(ONE_BUILD_COMMAND OFF) ## TODO: test it and uncomment the previous line. | 57 set(ONE_BUILD_COMMAND OFF) ## TODO: test it and uncomment the previous line. |
59 if (NOT ONE_BUILD_COMMAND) | 59 if (NOT ONE_BUILD_COMMAND) |
60 if(D_IS_MARS) | 60 if(D_IS_MARS) |
61 set(opt_tmp "ON") | 61 set(opt_tmp "ON") |
62 else(D_IS_MARS) | 62 else(D_IS_MARS) |
63 set(opt_tmp "OFF") | 63 set(opt_tmp "OFF") |
64 endif(D_IS_MARS) | 64 endif(D_IS_MARS) |
65 option(SINGLE_D_OBJECT "Build all d sources to one object file" ${opt_tmp}) | 65 option(SINGLE_D_OBJECT "Build all d sources to one object file" ${opt_tmp}) |
66 if(D_IS_LLVM) | 66 if(D_IS_LLVM) |
67 set(D_FLAGS ${D_FLAGS} -singleobj) | 67 set(D_FLAGS ${D_FLAGS} -singleobj) |
68 endif(D_IS_LLVM) | 68 endif(D_IS_LLVM) |
69 if(CMAKE_HOST_WIN32 AND D_IS_MARS) | 69 if(CMAKE_HOST_WIN32 AND D_IS_MARS) |
86 set(D_VERSION_FLAG -version) | 86 set(D_VERSION_FLAG -version) |
87 set(D_DEBUG_FLAG -debug) | 87 set(D_DEBUG_FLAG -debug) |
88 endif(D_IS_LLVM) | 88 endif(D_IS_LLVM) |
89 if(CMAKE_HOST_WIN32) | 89 if(CMAKE_HOST_WIN32) |
90 set(D_RELEASE_FLAGS ${D_RELEASE_FLAGS} -L/subsystem:windows) | 90 set(D_RELEASE_FLAGS ${D_RELEASE_FLAGS} -L/subsystem:windows) |
91 endif(CMAKE_HOST_WIN32) | 91 endif(CMAKE_HOST_WIN32) |
92 set(D_DEBUG_FLAGS ${D_DEBUG_FLAGS} ${D_DEBUG_FLAG}) | 92 set(D_DEBUG_FLAGS ${D_DEBUG_FLAGS} ${D_DEBUG_FLAG}) |
93 | 93 |
94 # Unittest flags. | 94 # Unittest flags. |
95 option(UNITTEST "Includes unittests" "OFF") | 95 option(UNITTEST "Includes unittests" "OFF") |
96 if(UNITTEST) | 96 if(UNITTEST) |
105 set(D_LIB_PREFIX ) | 105 set(D_LIB_PREFIX ) |
106 elseif(D_IS_LDC) | 106 elseif(D_IS_LDC) |
107 set(D_LIB_SUFFIX .a) | 107 set(D_LIB_SUFFIX .a) |
108 set(D_LIB_PREFIX lib) | 108 set(D_LIB_PREFIX lib) |
109 endif(D_IS_MARS) | 109 endif(D_IS_MARS) |
110 elseif(CMAKE_HOST_UNIX) | 110 elseif(CMAKE_HOST_UNIX) |
111 set(D_LIB_SUFFIX .a) | 111 set(D_LIB_SUFFIX .a) |
112 set(D_LIB_PREFIX lib) | 112 set(D_LIB_PREFIX lib) |
113 set(D_OBJECT_SUFFIX .o) | 113 set(D_OBJECT_SUFFIX .o) |
114 endif(CMAKE_HOST_WIN32) | 114 endif(CMAKE_HOST_WIN32) |
115 | 115 |
116 ##-------------------------------------------- | 116 ##-------------------------------------------- |
117 ## Macros and functions. | 117 ## Macros and functions. |
118 ##-------------------------------------------- | 118 ##-------------------------------------------- |
119 | 119 |
144 # An extra \\ escape is necessary to get a \ through CMake's processing. | 144 # An extra \\ escape is necessary to get a \ through CMake's processing. |
145 string(REPLACE "/" "\\" ${pathname} "${${pathname}}") | 145 string(REPLACE "/" "\\" ${pathname} "${${pathname}}") |
146 # Enclose with UNESCAPED quotes. This means we need to escape our | 146 # Enclose with UNESCAPED quotes. This means we need to escape our |
147 # quotes once here, i.e. with \" | 147 # quotes once here, i.e. with \" |
148 set(${pathname} \"${${pathname}}\") | 148 set(${pathname} \"${${pathname}}\") |
149 endif(CMAKE_HOST_WIN32) | 149 endif(CMAKE_HOST_WIN32) |
150 endmacro(make_native_path) | 150 endmacro(make_native_path) |
151 | 151 |
152 ## | 152 ## |
153 ## Example: | 153 ## Example: |
154 ## set(path 24.3+23.bin) | 154 ## set(path 24.3+23.bin) |
176 ## -- CMakeFiles/target.dir/main.d.obj | 176 ## -- CMakeFiles/target.dir/main.d.obj |
177 macro(obj_path path) | 177 macro(obj_path path) |
178 regex_safe_string(cbd_safe_tmp ${CMAKE_CURRENT_BINARY_DIR}) | 178 regex_safe_string(cbd_safe_tmp ${CMAKE_CURRENT_BINARY_DIR}) |
179 regex_safe_string(csd_safe_tmp ${CMAKE_CURRENT_SOURCE_DIR}) | 179 regex_safe_string(csd_safe_tmp ${CMAKE_CURRENT_SOURCE_DIR}) |
180 set(regexp_str_tmp "(${cbd_safe_tmp}/|${csd_safe_tmp}/|)(.+)") | 180 set(regexp_str_tmp "(${cbd_safe_tmp}/|${csd_safe_tmp}/|)(.+)") |
181 string(REGEX REPLACE ${regexp_str_tmp} "\\2" ${path} "${${path}}") | 181 string(REGEX REPLACE ${regexp_str_tmp} "\\2" ${path} "${${path}}") |
182 endmacro(obj_path path) | 182 endmacro(obj_path path) |
183 | 183 |
184 ## Compile d files. | 184 ## Compile d files. |
185 ## target -- name of a new target. | 185 ## target -- name of a new target. |
186 ## objects_list -- created object files. | 186 ## objects_list -- created object files. |
187 ## params -- sources files. | 187 ## params -- sources files. |
188 macro(compile_d_files target objects_list) | 188 macro(compile_d_files target objects_list) |
189 set(${objects_list}) | 189 set(${objects_list}) |
190 set(tmp_dir_tmp ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target}.dir) | 190 set(tmp_dir_tmp ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target}.dir) |
191 | 191 |
192 set(type_tmp SOURCES) | 192 set(type_tmp SOURCES) |
193 set(SOURCES_tmp ) | 193 set(SOURCES_tmp ) |
194 set(FLAGS_tmp ) | 194 set(FLAGS_tmp ) |
195 | 195 |
196 ## Parse parameters list. | 196 ## Parse parameters list. |
197 set(params_tmp SOURCES FLAGS) | 197 set(params_tmp SOURCES FLAGS) |
198 foreach(arg_tmp ${ARGN}) | 198 foreach(arg_tmp ${ARGN}) |
199 set(found_type_tmp) | 199 set(found_type_tmp) |
200 if(NOT found_type_tmp) | 200 if(NOT found_type_tmp) |
201 foreach(param_tmp ${params_tmp}) | 201 foreach(param_tmp ${params_tmp}) |
202 if(arg_tmp STREQUAL param_tmp) | 202 if(arg_tmp STREQUAL param_tmp) |
203 set(type_tmp ${param_tmp}) | 203 set(type_tmp ${param_tmp}) |
204 set(found_type_tmp 1) | 204 set(found_type_tmp 1) |
205 break(param_tmp ${params_tmp}) | 205 break(param_tmp ${params_tmp}) |
206 endif(arg_tmp STREQUAL param_tmp) | 206 endif(arg_tmp STREQUAL param_tmp) |
207 endforeach(param_tmp ${params_tmp}) | 207 endforeach(param_tmp ${params_tmp}) |
208 endif(NOT found_type_tmp) | 208 endif(NOT found_type_tmp) |
209 if(NOT found_type_tmp) | 209 if(NOT found_type_tmp) |
210 set(${type_tmp}_tmp ${${type_tmp}_tmp} ${arg_tmp}) | 210 set(${type_tmp}_tmp ${${type_tmp}_tmp} ${arg_tmp}) |
211 endif(NOT found_type_tmp) | 211 endif(NOT found_type_tmp) |
212 endforeach(arg_tmp ${ARGN}) | 212 endforeach(arg_tmp ${ARGN}) |
219 ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) | 219 ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) |
220 set (d_source_tmp ${d_source_p_tmp}) | 220 set (d_source_tmp ${d_source_p_tmp}) |
221 obj_path(d_source_tmp) | 221 obj_path(d_source_tmp) |
222 set(d_obj_tmp ${tmp_dir_tmp}/${d_source_tmp}${D_OBJECT_SUFFIX}) | 222 set(d_obj_tmp ${tmp_dir_tmp}/${d_source_tmp}${D_OBJECT_SUFFIX}) |
223 set(${objects_list} ${${objects_list}} ${d_obj_tmp}) | 223 set(${objects_list} ${${objects_list}} ${d_obj_tmp}) |
224 get_filename_component(path_tmp ${d_obj_tmp} PATH) | 224 get_filename_component(path_tmp ${d_obj_tmp} PATH) |
225 file(MAKE_DIRECTORY ${path_tmp}) | 225 file(MAKE_DIRECTORY ${path_tmp}) |
226 set(d_obj_out_tmp ${d_obj_tmp}) | 226 set(d_obj_out_tmp ${d_obj_tmp}) |
227 obj_path(d_obj_out_tmp) | 227 obj_path(d_obj_out_tmp) |
228 #get_imported_files(depends_tmp ${d_source_p_tmp}) ## Too slow..... | 228 #get_imported_files(depends_tmp ${d_source_p_tmp}) ## Too slow..... |
229 add_custom_command(OUTPUT "${d_obj_tmp}" | 229 add_custom_command(OUTPUT "${d_obj_tmp}" |
262 set(object_tmp ${tmp_dir_tmp}/${target}${id_tmp}${D_OBJECT_SUFFIX}) | 262 set(object_tmp ${tmp_dir_tmp}/${target}${id_tmp}${D_OBJECT_SUFFIX}) |
263 set(d_obj_out_tmp ${${object_tmp}}) | 263 set(d_obj_out_tmp ${${object_tmp}}) |
264 obj_path(d_obj_out_tmp) | 264 obj_path(d_obj_out_tmp) |
265 set(parameters_tmp ${FLAGS_tmp} -c ${files${id_tmp}_tmp} -of${object_tmp}) | 265 set(parameters_tmp ${FLAGS_tmp} -c ${files${id_tmp}_tmp} -of${object_tmp}) |
266 set(parameters_list_file_tmp ${tmp_dir_tmp}/parameters${id_tmp}_obj) | 266 set(parameters_list_file_tmp ${tmp_dir_tmp}/parameters${id_tmp}_obj) |
267 if(CMAKE_HOST_WIN32) | 267 if(CMAKE_HOST_WIN32) |
268 file(REMOVE ${parameters_list_file_tmp}) | 268 file(REMOVE ${parameters_list_file_tmp}) |
269 foreach(arg_tmp ${parameters_tmp}) | 269 foreach(arg_tmp ${parameters_tmp}) |
270 file(APPEND ${parameters_list_file_tmp} "${arg_tmp}\n") | 270 file(APPEND ${parameters_list_file_tmp} "${arg_tmp}\n") |
271 endforeach(arg_tmp) | 271 endforeach(arg_tmp) |
272 set(param_tmp @${parameters_list_file_tmp}) | 272 set(param_tmp @${parameters_list_file_tmp}) |
321 set(detect_deps_tmp 1) | 321 set(detect_deps_tmp 1) |
322 set(link_flags_tmp ) | 322 set(link_flags_tmp ) |
323 | 323 |
324 ## Parse parameters list. | 324 ## Parse parameters list. |
325 set(params_tmp TYPE INCLUDES FLAGS SOURCES NO_DEPS_SOURCES OBJECTS LIBS LIB_PATHS DEPENDS OUTPUT_PATH) | 325 set(params_tmp TYPE INCLUDES FLAGS SOURCES NO_DEPS_SOURCES OBJECTS LIBS LIB_PATHS DEPENDS OUTPUT_PATH) |
326 | 326 |
327 foreach(arg_tmp ${ARGN}) | 327 foreach(arg_tmp ${ARGN}) |
328 set(found_type_tmp) | 328 set(found_type_tmp) |
329 if(${arg_tmp} STREQUAL "NOT_DETECT_DEPENDS") | 329 if(${arg_tmp} STREQUAL "NOT_DETECT_DEPENDS") |
330 set(detect_deps_tmp 0) | 330 set(detect_deps_tmp 0) |
331 set(found_type_tmp 1) | 331 set(found_type_tmp 1) |
332 endif(${arg_tmp} STREQUAL "NOT_DETECT_DEPENDS") | 332 endif(${arg_tmp} STREQUAL "NOT_DETECT_DEPENDS") |
333 if(NOT found_type_tmp) | 333 if(NOT found_type_tmp) |
334 foreach(param_tmp ${params_tmp}) | 334 foreach(param_tmp ${params_tmp}) |
335 if(arg_tmp STREQUAL param_tmp) | 335 if(arg_tmp STREQUAL param_tmp) |
336 set(type_tmp ${param_tmp}) | 336 set(type_tmp ${param_tmp}) |
337 set(found_type_tmp 1) | 337 set(found_type_tmp 1) |
338 break(param_tmp ${params_tmp}) | 338 break(param_tmp ${params_tmp}) |
339 endif(arg_tmp STREQUAL param_tmp) | 339 endif(arg_tmp STREQUAL param_tmp) |
340 endforeach(param_tmp ${params_tmp}) | 340 endforeach(param_tmp ${params_tmp}) |
341 endif(NOT found_type_tmp) | 341 endif(NOT found_type_tmp) |
342 if(NOT found_type_tmp) | 342 if(NOT found_type_tmp) |
343 set(${type_tmp}_tmp ${${type_tmp}_tmp} ${arg_tmp}) | 343 set(${type_tmp}_tmp ${${type_tmp}_tmp} ${arg_tmp}) |
344 endif(NOT found_type_tmp) | 344 endif(NOT found_type_tmp) |
345 endforeach(arg_tmp ${ARGN}) | 345 endforeach(arg_tmp ${ARGN}) |
352 set(link_flags_tmp ${link_flags_tmp} -lib) | 352 set(link_flags_tmp ${link_flags_tmp} -lib) |
353 if(NOT OUTPUT_PATH_tmp) | 353 if(NOT OUTPUT_PATH_tmp) |
354 if(ARCHIVE_OUTPUT_DIRECTORY) | 354 if(ARCHIVE_OUTPUT_DIRECTORY) |
355 set(output_name_tmp ${ARCHIVE_OUTPUT_DIRECTORY}) | 355 set(output_name_tmp ${ARCHIVE_OUTPUT_DIRECTORY}) |
356 else(ARCHIVE_OUTPUT_DIRECTORY) | 356 else(ARCHIVE_OUTPUT_DIRECTORY) |
357 set(output_name_tmp ${CMAKE_CURRENT_BINARY_DIR}/lib) | 357 set(output_name_tmp ${CMAKE_CURRENT_BINARY_DIR}/lib) |
358 endif(ARCHIVE_OUTPUT_DIRECTORY) | 358 endif(ARCHIVE_OUTPUT_DIRECTORY) |
359 endif(NOT OUTPUT_PATH_tmp) | 359 endif(NOT OUTPUT_PATH_tmp) |
360 set(output_name_tmp ${output_name_tmp}/${D_LIB_PREFIX}${name}${D_LIB_SUFFIX}) | 360 set(output_name_tmp ${output_name_tmp}/${D_LIB_PREFIX}${name}${D_LIB_SUFFIX}) |
361 elseif("${TYPE_tmp}" STREQUAL "BINARY") | 361 elseif("${TYPE_tmp}" STREQUAL "BINARY") |
362 set(build_binary_tmp 1) | 362 set(build_binary_tmp 1) |
363 if(NOT OUTPUT_PATH_tmp) | 363 if(NOT OUTPUT_PATH_tmp) |
364 if(RUNTIME_OUTPUT_DIRECTORY) | 364 if(RUNTIME_OUTPUT_DIRECTORY) |
365 set(output_name ${RUNTIME_OUTPUT_DIRECTORY}) | 365 set(output_name ${RUNTIME_OUTPUT_DIRECTORY}) |
366 else(RUNTIME_OUTPUT_DIRECTORY) | 366 else(RUNTIME_OUTPUT_DIRECTORY) |
367 set(output_name_tmp ${CMAKE_CURRENT_BINARY_DIR}/bin) | 367 set(output_name_tmp ${CMAKE_CURRENT_BINARY_DIR}/bin) |
368 endif(RUNTIME_OUTPUT_DIRECTORY) | 368 endif(RUNTIME_OUTPUT_DIRECTORY) |
369 endif(NOT OUTPUT_PATH_tmp) | 369 endif(NOT OUTPUT_PATH_tmp) |
370 set(output_name_tmp ${output_name_tmp}/${name}${CMAKE_EXECUTABLE_SUFFIX}) | 370 set(output_name_tmp ${output_name_tmp}/${name}${CMAKE_EXECUTABLE_SUFFIX}) |
371 elseif("${TYPE_tmp}" STREQUAL "SHARED") | 371 elseif("${TYPE_tmp}" STREQUAL "SHARED") |
372 if(D_IS_MARS) | 372 if(D_IS_MARS) |
374 endif(D_IS_MARS) | 374 endif(D_IS_MARS) |
375 if(NOT OUTPUT_PATH_tmp) | 375 if(NOT OUTPUT_PATH_tmp) |
376 if(LIBRARY_OUTPUT_DIRECTORY) | 376 if(LIBRARY_OUTPUT_DIRECTORY) |
377 set(output_name_tmp ${LIBRARY_OUTPUT_DIRECTORY}) | 377 set(output_name_tmp ${LIBRARY_OUTPUT_DIRECTORY}) |
378 else(LIBRARY_OUTPUT_DIRECTORY) | 378 else(LIBRARY_OUTPUT_DIRECTORY) |
379 set(output_name_tmp ${CMAKE_CURRENT_BINARY_DIR}/lib) | 379 set(output_name_tmp ${CMAKE_CURRENT_BINARY_DIR}/lib) |
380 endif(LIBRARY_OUTPUT_DIRECTORY) | 380 endif(LIBRARY_OUTPUT_DIRECTORY) |
381 endif(NOT OUTPUT_PATH_tmp) | 381 endif(NOT OUTPUT_PATH_tmp) |
382 set(build_binary 1) | 382 set(build_binary 1) |
383 set(output_name_tmp ${output_name_tmp}/${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX}) | 383 set(output_name_tmp ${output_name_tmp}/${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX}) |
384 set(link_flags_tmp ${compile_flags_tmp} -L-shared) | 384 set(link_flags_tmp ${compile_flags_tmp} -L-shared) |
385 else("${TYPE_tmp}" STREQUAL "STATIC") | 385 else("${TYPE_tmp}" STREQUAL "STATIC") |
386 message(FATAL_ERROR "D target ${TYPE_tmp} not supported") | 386 message(FATAL_ERROR "D target ${TYPE_tmp} not supported") |
387 endif("${TYPE_tmp}" STREQUAL "STATIC") | 387 endif("${TYPE_tmp}" STREQUAL "STATIC") |
388 | 388 |
389 ## Include paths. | 389 ## Include paths. |
390 foreach(inc_tmp ${INCLUDES_tmp} ${D_INCLUDES}) | 390 foreach(inc_tmp ${INCLUDES_tmp} ${D_INCLUDES}) |
391 set(compile_flags_tmp ${compile_flags_tmp} -I${inc_tmp}) | 391 set(compile_flags_tmp ${compile_flags_tmp} -I${inc_tmp}) |
392 endforeach(inc_tmp ${INCLUDES_tmp} ${D_INCLUDES}) | 392 endforeach(inc_tmp ${INCLUDES_tmp} ${D_INCLUDES}) |
393 | 393 |
394 ## Libraries and paths of them. | 394 ## Libraries and paths of them. |
395 set(libs_tmp) | 395 set(libs_tmp) |
396 if(build_binary_tmp) | 396 if(build_binary_tmp) |
397 if(D_IS_MARS AND CMAKE_HOST_WIN32) | 397 if(D_IS_MARS AND CMAKE_HOST_WIN32) |
398 foreach(lib_path_tmp ${LIB_PATHS_tmp} ${D_LIB_PATHS}) | 398 foreach(lib_path_tmp ${LIB_PATHS_tmp} ${D_LIB_PATHS}) |
410 foreach(lib_path_tmp ${LIB_PATHS_tmp} ${D_LIB_PATHS}) | 410 foreach(lib_path_tmp ${LIB_PATHS_tmp} ${D_LIB_PATHS}) |
411 set(link_flags_tmp ${link_flags_tmp} -L-L${lib_path_tmp}) | 411 set(link_flags_tmp ${link_flags_tmp} -L-L${lib_path_tmp}) |
412 endforeach(lib_path_tmp ${LIB_PATHS_tmp} ${D_LIB_PATHS}) | 412 endforeach(lib_path_tmp ${LIB_PATHS_tmp} ${D_LIB_PATHS}) |
413 endif(D_IS_MARS AND CMAKE_HOST_WIN32) | 413 endif(D_IS_MARS AND CMAKE_HOST_WIN32) |
414 foreach(lib_tmp ${LIBS_tmp} ${D_LIBS}) | 414 foreach(lib_tmp ${LIBS_tmp} ${D_LIBS}) |
415 if(D_IS_MARS AND CMAKE_HOST_WIN32) | 415 if(D_IS_MARS AND CMAKE_HOST_WIN32) |
416 set(link_flags_tmp ${link_flags_tmp} -L+${lib_tmp}) | 416 set(link_flags_tmp ${link_flags_tmp} -L+${lib_tmp}) |
417 else(D_IS_MARS AND CMAKE_HOST_WIN32) | 417 else(D_IS_MARS AND CMAKE_HOST_WIN32) |
418 set(link_flags_tmp ${link_flags_tmp} -L-l${lib_tmp}) | 418 set(link_flags_tmp ${link_flags_tmp} -L-l${lib_tmp}) |
419 endif(D_IS_MARS AND CMAKE_HOST_WIN32) | 419 endif(D_IS_MARS AND CMAKE_HOST_WIN32) |
420 endforeach(lib_tmp ${LIBS_tmp} ${D_LIBS}) | 420 endforeach(lib_tmp ${LIBS_tmp} ${D_LIBS}) |
421 endif(build_binary_tmp) | 421 endif(build_binary_tmp) |
422 | 422 |
423 set(not_obj_tmp ${ONE_BUILD_COMMAND}) | 423 set(not_obj_tmp ${ONE_BUILD_COMMAND}) |
424 ## Ldc not support -lib flag. | 424 ## Ldc not support -lib flag. |
425 if(ONE_BUILD_COMMAND AND ${TYPE_tmp} STREQUAL "STATIC" AND D_IS_LLVM) | 425 if(ONE_BUILD_COMMAND AND ${TYPE_tmp} STREQUAL "STATIC" AND D_IS_LLVM) |
426 set(not_obj_tmp OFF) | 426 set(not_obj_tmp OFF) |
427 endif(ONE_BUILD_COMMAND AND ${TYPE_tmp} STREQUAL "STATIC" AND D_IS_LLVM) | 427 endif(ONE_BUILD_COMMAND AND ${TYPE_tmp} STREQUAL "STATIC" AND D_IS_LLVM) |
439 message(STATUS "Getting dependencies for ${name}") | 439 message(STATUS "Getting dependencies for ${name}") |
440 get_files_depends(tmp ${SOURCES_tmp}) | 440 get_files_depends(tmp ${SOURCES_tmp}) |
441 set(SOURCES_tmp ${tmp}) | 441 set(SOURCES_tmp ${tmp}) |
442 endif(detect_deps_tmp) | 442 endif(detect_deps_tmp) |
443 set(SOURCES_tmp ${SOURCES_tmp} ${NO_DEPS_SOURCES_tmp}) | 443 set(SOURCES_tmp ${SOURCES_tmp} ${NO_DEPS_SOURCES_tmp}) |
444 | 444 |
445 set(used_ar_tmp) | 445 set(used_ar_tmp) |
446 get_filename_component(output_path_tmp ${output_name_tmp} PATH) | 446 get_filename_component(output_path_tmp ${output_name_tmp} PATH) |
447 if (NOT not_obj_tmp) | 447 if (NOT not_obj_tmp) |
448 compile_d_files(${name} objs_tmp ${SOURCES_tmp} FLAGS ${compile_flags_tmp}) | 448 compile_d_files(${name} objs_tmp ${SOURCES_tmp} FLAGS ${compile_flags_tmp}) |
449 set(SOURCES_tmp ${objs_tmp}) | 449 set(SOURCES_tmp ${objs_tmp}) |
450 if(NOT D_IS_MARS AND ${TYPE_tmp} STREQUAL "STATIC") | 450 if(NOT D_IS_MARS AND ${TYPE_tmp} STREQUAL "STATIC") |
451 set(parameters_tmp rcs ${output_name_tmp} ${SOURCES_tmp} ${OBJECTS_tmp}) | 451 set(parameters_tmp rcs ${output_name_tmp} ${SOURCES_tmp} ${OBJECTS_tmp}) |
452 set(parameters_list_file_tmp ${tmp_dir_tmp}/parameters) | 452 set(parameters_list_file_tmp ${tmp_dir_tmp}/parameters) |
453 if(CMAKE_HOST_WIN32) | 453 if(CMAKE_HOST_WIN32) |
454 file(REMOVE ${parameters_list_file_tmp}) | 454 file(REMOVE ${parameters_list_file_tmp}) |
455 foreach(arg_tmp ${parameters_tmp}) | 455 foreach(arg_tmp ${parameters_tmp}) |
456 file(APPEND ${parameters_list_file_tmp} "${arg_tmp}\n") | 456 file(APPEND ${parameters_list_file_tmp} "${arg_tmp}\n") |
457 endforeach(arg_tmp) | 457 endforeach(arg_tmp) |
458 set(param_tmp @${parameters_list_file_tmp}) | 458 set(param_tmp @${parameters_list_file_tmp}) |
476 set(additional_commands_tmp ${additional_commands_tmp} COMMAND ${CMAKE_COMMAND} -E make_directory ${output_path_tmp}) | 476 set(additional_commands_tmp ${additional_commands_tmp} COMMAND ${CMAKE_COMMAND} -E make_directory ${output_path_tmp}) |
477 make_native_path(output_name_native_tmp) | 477 make_native_path(output_name_native_tmp) |
478 endif(D_IS_MARS) | 478 endif(D_IS_MARS) |
479 set(parameters_tmp ${compile_flags_tmp} ${link_flags_tmp} ${SOURCES_tmp} ${OBJECTS_tmp} -of${output_name_native_tmp}) | 479 set(parameters_tmp ${compile_flags_tmp} ${link_flags_tmp} ${SOURCES_tmp} ${OBJECTS_tmp} -of${output_name_native_tmp}) |
480 set(parameters_list_file_tmp ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${name}.dir/parameters) | 480 set(parameters_list_file_tmp ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${name}.dir/parameters) |
481 if(CMAKE_HOST_WIN32) | 481 if(CMAKE_HOST_WIN32) |
482 file(REMOVE ${parameters_list_file_tmp}) | 482 file(REMOVE ${parameters_list_file_tmp}) |
483 foreach(arg_tmp ${parameters_tmp}) | 483 foreach(arg_tmp ${parameters_tmp}) |
484 file(APPEND ${parameters_list_file_tmp} "${arg_tmp}\n") | 484 file(APPEND ${parameters_list_file_tmp} "${arg_tmp}\n") |
485 endforeach(arg_tmp) | 485 endforeach(arg_tmp) |
486 set(param_tmp @${parameters_list_file_tmp}) | 486 set(param_tmp @${parameters_list_file_tmp}) |
487 elseif(CMAKE_HOST_UNIX) | 487 elseif(CMAKE_HOST_UNIX) |
488 set(param_tmp ${parameters_tmp}) | 488 set(param_tmp ${parameters_tmp}) |
489 endif(CMAKE_HOST_WIN32) | 489 endif(CMAKE_HOST_WIN32) |
490 #get_imported_files(depends_tmp ${SOURCES_tmp}) | 490 #get_imported_files(depends_tmp ${SOURCES_tmp}) |
491 add_custom_command( | 491 add_custom_command( |
492 OUTPUT ${output_name_tmp} | 492 OUTPUT ${output_name_tmp} |
493 ${additional_commands_tmp} | 493 ${additional_commands_tmp} |
494 COMMAND ${DC} | 494 COMMAND ${DC} |
529 ## | 529 ## |
530 macro(get_imported_files_old imported) | 530 macro(get_imported_files_old imported) |
531 execute_process(COMMAND ${DC} -c -o- -v ${compile_flags_tmp} ${ARGN} | 531 execute_process(COMMAND ${DC} -c -o- -v ${compile_flags_tmp} ${ARGN} |
532 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | 532 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
533 OUTPUT_VARIABLE dc_output_tmp | 533 OUTPUT_VARIABLE dc_output_tmp |
534 | 534 |
535 ) | 535 ) |
536 string(REGEX MATCHALL "import[^(]*([^)]*)" dc_output_tmp "${dc_output_tmp}") | 536 string(REGEX MATCHALL "import[^(]*([^)]*)" dc_output_tmp "${dc_output_tmp}") |
537 | 537 |
538 ## Initial filter. | 538 ## Initial filter. |
539 regex_safe_string(tmp ${CMAKE_CURRENT_SOURCE_DIR}) | 539 regex_safe_string(tmp ${CMAKE_CURRENT_SOURCE_DIR}) |
540 regex_safe_string(tmp2 ${CMAKE_CURRENT_BINARY_DIR}) | 540 regex_safe_string(tmp2 ${CMAKE_CURRENT_BINARY_DIR}) |
541 set(regex_includes_tmp "${tmp}|${tmp2}") | 541 set(regex_includes_tmp "${tmp}|${tmp2}") |
542 | 542 |
545 ## Getting a next import. | 545 ## Getting a next import. |
546 string(REGEX REPLACE "import[^(]*\\(([^)]*)" "\\1" import_tmp ${import_tmp}) | 546 string(REGEX REPLACE "import[^(]*\\(([^)]*)" "\\1" import_tmp ${import_tmp}) |
547 ## Filtering. | 547 ## Filtering. |
548 string(REPLACE "\\" "/" import_tmp ${import_tmp}) | 548 string(REPLACE "\\" "/" import_tmp ${import_tmp}) |
549 string(REGEX MATCH "(${regex_includes_tmp})" found "${import_tmp}") | 549 string(REGEX MATCH "(${regex_includes_tmp})" found "${import_tmp}") |
550 if(CMAKE_HOST_WIN32) | 550 if(CMAKE_HOST_WIN32) |
551 string(SUBSTRING "${import_tmp}" 1 2 first_sym_tmp) | 551 string(SUBSTRING "${import_tmp}" 1 2 first_sym_tmp) |
552 set(full_path_tmp) | 552 set(full_path_tmp) |
553 if(${first_sym_tmp} STREQUAL ":/") | 553 if(${first_sym_tmp} STREQUAL ":/") |
554 set(full_path_tmp 1) | 554 set(full_path_tmp 1) |
555 endif(${first_sym_tmp} STREQUAL ":/") | 555 endif(${first_sym_tmp} STREQUAL ":/") |
557 string(SUBSTRING "${import_tmp}" 0 1 first_sym_tmp) | 557 string(SUBSTRING "${import_tmp}" 0 1 first_sym_tmp) |
558 set(full_path_tmp) | 558 set(full_path_tmp) |
559 if(${first_sym_tmp} STREQUAL "/") | 559 if(${first_sym_tmp} STREQUAL "/") |
560 set(full_path_tmp 1) | 560 set(full_path_tmp 1) |
561 endif(${first_sym_tmp} STREQUAL "/") | 561 endif(${first_sym_tmp} STREQUAL "/") |
562 endif(CMAKE_HOST_WIN32) | 562 endif(CMAKE_HOST_WIN32) |
563 if(found OR NOT full_path_tmp) | 563 if(found OR NOT full_path_tmp) |
564 set(${imported} ${${imported}} ${import_tmp}) | 564 set(${imported} ${${imported}} ${import_tmp}) |
565 endif(found OR NOT full_path_tmp) | 565 endif(found OR NOT full_path_tmp) |
566 endforeach(import_tmp ${dc_output_tmp}) | 566 endforeach(import_tmp ${dc_output_tmp}) |
567 endmacro(get_imported_files_old imported) | 567 endmacro(get_imported_files_old imported) |
568 | 568 |
569 macro(filter_paths result) | 569 macro(filter_paths result) |
570 set(${result}) | 570 set(${result}) |
582 set(founded_tmp 1) | 582 set(founded_tmp 1) |
583 endif(${arg_tmp} STREQUAL "INCLUDE_PATHS") | 583 endif(${arg_tmp} STREQUAL "INCLUDE_PATHS") |
584 if(NOT founded_tmp) | 584 if(NOT founded_tmp) |
585 set(${read_now_tmp}_tmp ${${read_now_tmp}_tmp} ${arg_tmp}) | 585 set(${read_now_tmp}_tmp ${${read_now_tmp}_tmp} ${arg_tmp}) |
586 endif(NOT founded_tmp) | 586 endif(NOT founded_tmp) |
587 endforeach(arg_tmp ${ARGN}) | 587 endforeach(arg_tmp ${ARGN}) |
588 regex_safe_string(include_tmp ${includes_tmp}) | 588 regex_safe_string(include_tmp ${includes_tmp}) |
589 set(regex_include_tmp) | 589 set(regex_include_tmp) |
590 set(is_first_tmp 1) | 590 set(is_first_tmp 1) |
591 foreach(include_tmp ${includes_tmp}) | 591 foreach(include_tmp ${includes_tmp}) |
592 if(is_first_tmp) | 592 if(is_first_tmp) |
594 else(is_first_tmp) | 594 else(is_first_tmp) |
595 set(regex_includes_tmp ${regex_includes_tmp}|) | 595 set(regex_includes_tmp ${regex_includes_tmp}|) |
596 endif(is_first_tmp) | 596 endif(is_first_tmp) |
597 set(regex_includes_tmp ${regex_includes_tmp}${include_tmp}) | 597 set(regex_includes_tmp ${regex_includes_tmp}${include_tmp}) |
598 endforeach(include_tmp ${include_tmp}) | 598 endforeach(include_tmp ${include_tmp}) |
599 foreach(path_tmp ${paths_tmp}) | 599 foreach(path_tmp ${paths_tmp}) |
600 file(TO_CMAKE_PATH path_tmp ${path_tmp}) | 600 file(TO_CMAKE_PATH path_tmp ${path_tmp}) |
601 string(REGEX MATCH "(${regex_includes_tmp})[^/]*" found "${path_tmp}") | 601 string(REGEX MATCH "(${regex_includes_tmp})[^/]*" found "${path_tmp}") |
602 set(full_path_tmp 1) | 602 set(full_path_tmp 1) |
603 if(locale_tmp) | 603 if(locale_tmp) |
604 string(SUBSTRING "${path_tmp}" 0 1 first_sym_tmp) | 604 string(SUBSTRING "${path_tmp}" 0 1 first_sym_tmp) |
605 set(full_path_tmp) | 605 set(full_path_tmp) |
606 if(${first_sym_tmp} STREQUAL "/") | 606 if(${first_sym_tmp} STREQUAL "/") |
607 set(full_path_tmp 1) | 607 set(full_path_tmp 1) |
608 endif(${first_sym_tmp} STREQUAL "/") | 608 endif(${first_sym_tmp} STREQUAL "/") |
609 endif(locale_tmp) | 609 endif(locale_tmp) |
610 if(NOT found AND full_path_tmp) | 610 if(NOT found AND full_path_tmp) |
611 else(NOT found AND full_path_tmp) | 611 else(NOT found AND full_path_tmp) |
612 set(${result} ${${result}} ${path_tmp}) | 612 set(${result} ${${result}} ${path_tmp}) |
613 endif(NOT found AND full_path_tmp) | 613 endif(NOT found AND full_path_tmp) |
614 endforeach(path_tmp ${paths_tmp}) | 614 endforeach(path_tmp ${paths_tmp}) |
615 endmacro(filter_paths ) | 615 endmacro(filter_paths ) |
616 | 616 |
617 macro(get_files_depends out) | 617 macro(get_files_depends out) |
618 set(deps_file_tmp ${CMAKE_CURRENT_BINARY_DIR}/${ARGN}.deps) | 618 set(deps_file_tmp ${CMAKE_CURRENT_BINARY_DIR}/${ARGN}.deps) |