Mercurial > projects > qtd
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) |