comparison CMakeLists.txt @ 89:8a4e85876ea8

CMake: improve of OS detection.
author SokoL_SD
date Tue, 26 May 2009 14:55:13 +0000
parents 201684eb20ee
children 08135aa00cc9
comparison
equal deleted inserted replaced
88:201684eb20ee 89:8a4e85876ea8
118 if(D_IS_MARS) 118 if(D_IS_MARS)
119 set(D_FLAGS ${D_FLAGS} -inline) 119 set(D_FLAGS ${D_FLAGS} -inline)
120 elseif(D_IS_LLVM) 120 elseif(D_IS_LLVM)
121 set(D_FLAGS ${D_FLAGS} -enable-inlining) 121 set(D_FLAGS ${D_FLAGS} -enable-inlining)
122 endif(D_IS_MARS) 122 endif(D_IS_MARS)
123 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 123 if(CMAKE_HOST_WIN32)
124 set(D_FLAGS ${D_FLAGS} -L/subsystem:windows) 124 set(D_FLAGS ${D_FLAGS} -L/subsystem:windows)
125 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 125 endif(CMAKE_HOST_WIN32)
126 endif(${CMAKE_BUILD_TYPE} MATCHES [rR][eE][lL][eE][aA][sS] ) 126 endif(${CMAKE_BUILD_TYPE} MATCHES [rR][eE][lL][eE][aA][sS] )
127 127
128 set(D_FLAGS ${D_FLAGS} -I${CMAKE_BINARY_DIR} -I${CMAKE_SOURCE_DIR}) 128 set(D_FLAGS ${D_FLAGS} -I${CMAKE_BINARY_DIR} -I${CMAKE_SOURCE_DIR})
129 if(D_IS_MARS AND ${CMAKE_SYSTEM_NAME} STREQUAL Windows) 129 if(D_IS_MARS AND CMAKE_HOST_WIN32)
130 else(D_IS_MARS AND ${CMAKE_SYSTEM_NAME} STREQUAL Windows) 130 else(D_IS_MARS AND CMAKE_HOST_WIN32)
131 set(D_FLAGS ${D_FLAGS} -L-L${CMAKE_BINARY_DIR}/lib) 131 set(D_FLAGS ${D_FLAGS} -L-L${CMAKE_BINARY_DIR}/lib)
132 endif(D_IS_MARS AND ${CMAKE_SYSTEM_NAME} STREQUAL Windows) 132 endif(D_IS_MARS AND CMAKE_HOST_WIN32)
133 133
134 # System specifc settings. 134 # System specifc settings.
135 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 135 if(CMAKE_HOST_WIN32)
136 set(implib implib) 136 set(implib implib)
137 find_program(IMPLIB ${implib}) 137 find_program(IMPLIB ${implib})
138 if (NOT IMPLIB) 138 if (NOT IMPLIB)
139 message(FATAL_ERROR "implib not found. You can donwload it from http://ftp.digitalmars.com/bup.zip") 139 message(FATAL_ERROR "implib not found. You can donwload it from http://ftp.digitalmars.com/bup.zip")
140 endif (NOT IMPLIB) 140 endif (NOT IMPLIB)
147 set(D_LIB_PREFIX lib) 147 set(D_LIB_PREFIX lib)
148 endif(D_IS_MARS) 148 endif(D_IS_MARS)
149 set(GEN_OPT ${GEN_OPT} --cpp_shared) 149 set(GEN_OPT ${GEN_OPT} --cpp_shared)
150 add_definitions(-DCPP_SHARED) 150 add_definitions(-DCPP_SHARED)
151 string(REGEX REPLACE ".dll([A-Za-z\\.0-9]+)" "\\1" CMAKE_IMPORT_LIBRARY_SUFFIX "${CMAKE_IMPORT_LIBRARY_SUFFIX}") 151 string(REGEX REPLACE ".dll([A-Za-z\\.0-9]+)" "\\1" CMAKE_IMPORT_LIBRARY_SUFFIX "${CMAKE_IMPORT_LIBRARY_SUFFIX}")
152 elseif(${CMAKE_SYSTEM_NAME} STREQUAL Linux) 152 elseif(CMAKE_HOST_UNIX)
153 set(D_LIB_SUFFIX .a) 153 set(D_LIB_SUFFIX .a)
154 set(D_LIB_PREFIX lib) 154 set(D_LIB_PREFIX lib)
155 set(D_OBJECT_SUFFIX .o) 155 set(D_OBJECT_SUFFIX .o)
156 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 156 endif(CMAKE_HOST_WIN32)
157 157
158 set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ./) 158 set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ./)
159 set(GEN_OPT ${GEN_OPT} --d-target=${D_TARGET}) 159 set(GEN_OPT ${GEN_OPT} --d-target=${D_TARGET})
160 160
161 ## Bootstrap settings for tools. 161 ## Bootstrap settings for tools.
172 ## message(STATUS ${path}) 172 ## message(STATUS ${path})
173 ## Output: 173 ## Output:
174 ## -- "c:\file_path\file_name.cpp" 174 ## -- "c:\file_path\file_name.cpp"
175 ## Command "file(TO_NATIVE_PATH ...)" is wrong on Windows 175 ## Command "file(TO_NATIVE_PATH ...)" is wrong on Windows
176 macro(MAKE_NATIVE_PATH pathname) 176 macro(MAKE_NATIVE_PATH pathname)
177 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 177 if(CMAKE_HOST_WIN32)
178 # An extra \\ escape is necessary to get a \ through CMake's processing. 178 # An extra \\ escape is necessary to get a \ through CMake's processing.
179 string(REPLACE "/" "\\" ${pathname} "${${pathname}}") 179 string(REPLACE "/" "\\" ${pathname} "${${pathname}}")
180 # Enclose with UNESCAPED quotes. This means we need to escape our 180 # Enclose with UNESCAPED quotes. This means we need to escape our
181 # quotes once here, i.e. with \" 181 # quotes once here, i.e. with \"
182 set(${pathname} \"${${pathname}}\") 182 set(${pathname} \"${${pathname}}\")
183 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 183 endif(CMAKE_HOST_WIN32)
184 endmacro(MAKE_NATIVE_PATH) 184 endmacro(MAKE_NATIVE_PATH)
185 185
186 ## 186 ##
187 ## Example: 187 ## Example:
188 ## set(path 24.3+23.bin) 188 ## set(path 24.3+23.bin)
248 set(${objects_list} ${tmp_dir}/${target}${D_OBJECT_SUFFIX}) 248 set(${objects_list} ${tmp_dir}/${target}${D_OBJECT_SUFFIX})
249 set(d_obj_out ${${objects_list}}) 249 set(d_obj_out ${${objects_list}})
250 obj_path(d_obj_out) 250 obj_path(d_obj_out)
251 set(parameters ${D_FLAGS} -c ${ARGN} -of${${objects_list}}) 251 set(parameters ${D_FLAGS} -c ${ARGN} -of${${objects_list}})
252 set(parameters_list_file ${tmp_dir}/parameters) 252 set(parameters_list_file ${tmp_dir}/parameters)
253 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 253 if(CMAKE_HOST_WIN32)
254 file(REMOVE ${parameters_list_file}) 254 file(REMOVE ${parameters_list_file})
255 foreach(arg ${parameters}) 255 foreach(arg ${parameters})
256 file(APPEND ${parameters_list_file} "${arg}\n") 256 file(APPEND ${parameters_list_file} "${arg}\n")
257 endforeach(arg) 257 endforeach(arg)
258 set(param @${parameters_list_file}) 258 set(param @${parameters_list_file})
259 elseif(${CMAKE_SYSTEM_NAME} STREQUAL Linux) 259 elseif(CMAKE_HOST_UNIX)
260 set(param ${parameters}) 260 set(param ${parameters})
261 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 261 endif(CMAKE_HOST_WIN32)
262 add_custom_command(OUTPUT "${${objects_list}}" 262 add_custom_command(OUTPUT "${${objects_list}}"
263 COMMAND "${DC}" 263 COMMAND "${DC}"
264 ARGS ${param} 264 ARGS ${param}
265 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 265 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
266 DEPENDS ${ARGN} 266 DEPENDS ${ARGN}
361 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 361 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
362 COMMENT "Building example ${name}" 362 COMMENT "Building example ${name}"
363 ) 363 )
364 add_custom_target(example_${name} ALL DEPENDS "${output}") 364 add_custom_target(example_${name} ALL DEPENDS "${output}")
365 ## TODO: Enable on windows too. 365 ## TODO: Enable on windows too.
366 if(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND ${CMAKE_SYSTEM_NAME} STREQUAL Linux) ## 366 if(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) ##
367 add_custom_command(TARGET example_${name} POST_BUILD COMMAND "${STRIP}" ARGS "${output}") 367 add_custom_command(TARGET example_${name} POST_BUILD COMMAND "${STRIP}" ARGS "${output}")
368 endif(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND ${CMAKE_SYSTEM_NAME} STREQUAL Linux) 368 endif(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX)
369 add_dependencies(example_${name} allpackages) 369 add_dependencies(example_${name} allpackages)
370 endmacro(build_example sources) 370 endmacro(build_example sources)
371 371
372 ##-------------------------------------------- 372 ##--------------------------------------------
373 ## Build and install library. 373 ## Build and install library.
479 ## Link D library. 479 ## Link D library.
480 set(lib_name ${D_LIB_PREFIX}qtd${package}${D_LIB_SUFFIX}) 480 set(lib_name ${D_LIB_PREFIX}qtd${package}${D_LIB_SUFFIX})
481 set(lib lib/${lib_name}) 481 set(lib lib/${lib_name})
482 compile_d_files(${package}_dobjs objects ${d_sources}) 482 compile_d_files(${package}_dobjs objects ${d_sources})
483 set(d_objs ${d_objs} ${objects}) 483 set(d_objs ${d_objs} ${objects})
484 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 484 if(CMAKE_HOST_WIN32)
485 set_property(TARGET cpp_${package} PROPERTY RUNTIME_OUTPUT_DIRECTORY lib) 485 set_property(TARGET cpp_${package} PROPERTY RUNTIME_OUTPUT_DIRECTORY lib)
486 set_property(TARGET cpp_${package} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles) 486 set_property(TARGET cpp_${package} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles)
487 foreach(req ${required}) 487 foreach(req ${required})
488 set(is_found) 488 set(is_found)
489 foreach(pack ${packages_big}) 489 foreach(pack ${packages_big})
521 ARGS -lib ${d_objs} ${d_implib} -of${lib} 521 ARGS -lib ${d_objs} ${d_implib} -of${lib}
522 DEPENDS ${d_objs} ${d_implib} 522 DEPENDS ${d_objs} ${d_implib}
523 COMMENT "Linking ${lib_name}" 523 COMMENT "Linking ${lib_name}"
524 ) 524 )
525 install(FILES ${cpp_lib} COMPONENT qtd DESTINATION lib) 525 install(FILES ${cpp_lib} COMPONENT qtd DESTINATION lib)
526 else(${CMAKE_SYSTEM_NAME} STREQUAL Linux) 526 else(CMAKE_HOST_UNIX)
527 set_property(TARGET cpp_${package} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles) 527 set_property(TARGET cpp_${package} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles)
528 foreach(cpp_source ${cpp_sources}) 528 foreach(cpp_source ${cpp_sources})
529 set(cpp_source ${cpp_source}) 529 set(cpp_source ${cpp_source})
530 obj_path(cpp_source) 530 obj_path(cpp_source)
531 set(cpp_objs ${cpp_objs} CMakeFiles/cpp_${package}.dir/${cpp_source}${CMAKE_CXX_OUTPUT_EXTENSION}) 531 set(cpp_objs ${cpp_objs} CMakeFiles/cpp_${package}.dir/${cpp_source}${CMAKE_CXX_OUTPUT_EXTENSION})
535 COMMAND "${CMAKE_AR}" 535 COMMAND "${CMAKE_AR}"
536 ARGS rcs ${lib} ${d_objs} ${cpp_objs} 536 ARGS rcs ${lib} ${d_objs} ${cpp_objs}
537 DEPENDS ${d_objs} cpp_${package} 537 DEPENDS ${d_objs} cpp_${package}
538 COMMENT "Linking ${lib_name}" 538 COMMENT "Linking ${lib_name}"
539 ) 539 )
540 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 540 endif(CMAKE_HOST_WIN32)
541 install(FILES ${CMAKE_BINARY_DIR}/${lib} COMPONENT qtd DESTINATION lib) 541 install(FILES ${CMAKE_BINARY_DIR}/${lib} COMPONENT qtd DESTINATION lib)
542 542
543 ## Dependences. 543 ## Dependences.
544 add_custom_target(${package} DEPENDS ${lib}) 544 add_custom_target(${package} DEPENDS ${lib})
545 foreach(depend ${required}) 545 foreach(depend ${required})
548 add_dependencies(${package} ${depend}) 548 add_dependencies(${package} ${depend})
549 endforeach(depend ${required}) 549 endforeach(depend ${required})
550 add_dependencies(allpackages ${package}) 550 add_dependencies(allpackages ${package})
551 551
552 ## Paths for QtD libs. Needed by examples. 552 ## Paths for QtD libs. Needed by examples.
553 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS) 553 if(CMAKE_HOST_WIN32 AND D_IS_MARS)
554 set(libs_path ${CMAKE_BINARY_DIR}/lib/qtd${package}.lib) 554 set(libs_path ${CMAKE_BINARY_DIR}/lib/qtd${package}.lib)
555 make_native_path(libs_path) 555 make_native_path(libs_path)
556 set(${package}_lib_param -L+${libs_path}) 556 set(${package}_lib_param -L+${libs_path})
557 foreach(link ${link_example}) 557 foreach(link ${link_example})
558 set(link ${CMAKE_SOURCE_DIR}/lib/${link}.lib) 558 set(link ${CMAKE_SOURCE_DIR}/lib/${link}.lib)
559 make_native_path(link) 559 make_native_path(link)
560 set(link -L+${link}) 560 set(link -L+${link})
561 set(${package}_lib_param ${${package}_lib_param} ${link}) 561 set(${package}_lib_param ${${package}_lib_param} ${link})
562 endforeach(link ${link_example}) 562 endforeach(link ${link_example})
563 else (${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS) 563 else (CMAKE_HOST_WIN32 AND D_IS_MARS)
564 set(${package}_lib_param -L-lqtd${package} -L-lQt${package_big}) 564 set(${package}_lib_param -L-lqtd${package} -L-lQt${package_big})
565 foreach(link ${link_example}) 565 foreach(link ${link_example})
566 set(${package}_lib_param ${${package}_lib_param} ${link}) 566 set(${package}_lib_param ${${package}_lib_param} ${link})
567 endforeach(link ${link_example}) 567 endforeach(link ${link_example})
568 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS) 568 endif(CMAKE_HOST_WIN32 AND D_IS_MARS)
569 569
570 if(GENERATE_DI_FILES) 570 if(GENERATE_DI_FILES)
571 regexseafestring(cbd_safe ${CMAKE_BINARY_DIR}) 571 regexseafestring(cbd_safe ${CMAKE_BINARY_DIR})
572 regexseafestring(csd_safe ${CMAKE_SOURCE_DIR}) 572 regexseafestring(csd_safe ${CMAKE_SOURCE_DIR})
573 set(regexp_str "(${csd}/qt/d${D_VERSION}|${csd_safe}|${cbd_safe})/([A-Za-z0-9\\-_\\\\/]+)[/]+([A-Za-z0-9\\-_\\\\]+).d") 573 set(regexp_str "(${csd}/qt/d${D_VERSION}|${csd_safe}|${cbd_safe})/([A-Za-z0-9\\-_\\\\/]+)[/]+([A-Za-z0-9\\-_\\\\]+).d")
644 SET(CPACK_PACKAGE_VERSION "0.1") 644 SET(CPACK_PACKAGE_VERSION "0.1")
645 #set(CPACK_PACKAGE_VERSION_PATCH "${RFS_VERSION_BUILD}") 645 #set(CPACK_PACKAGE_VERSION_PATCH "${RFS_VERSION_BUILD}")
646 set(CPACK_PACKAGE_INSTALL_DIRECTORY "qtd ${CPACK_PACKAGE_VERSION}") 646 set(CPACK_PACKAGE_INSTALL_DIRECTORY "qtd ${CPACK_PACKAGE_VERSION}")
647 set(CPACK_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}") 647 set(CPACK_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}")
648 set(CPACK_SOURCE_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}") 648 set(CPACK_SOURCE_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}")
649 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 649 if(CMAKE_HOST_WIN32)
650 set(CPACK_GENERATOR "ZIP") 650 set(CPACK_GENERATOR "ZIP")
651 elseif(${CMAKE_SYSTEM_NAME} STREQUAL Linux) 651 elseif(CMAKE_HOST_UNIX)
652 set(CPACK_GENERATOR "TBZ2;DEB;RPM") 652 set(CPACK_GENERATOR "TBZ2;DEB;RPM")
653 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 653 endif(CMAKE_HOST_WIN32)
654 include(CPack) 654 include(CPack)