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)