comparison CMakeLists.txt @ 16:6faf3d3cb95e

CMake: implement install and package targets.
author SokoL_SD
date Thu, 14 May 2009 17:09:25 +0000
parents 4faee409a98d
children 3925148ba2b6
comparison
equal deleted inserted replaced
15:056e83133e29 16:6faf3d3cb95e
30 if (DC) 30 if (DC)
31 exec_program(${DC} ARGS "" OUTPUT_VARIABLE d_output) 31 exec_program(${DC} ARGS "" OUTPUT_VARIABLE d_output)
32 string(REGEX MATCH "Digital Mars D Compiler v[0-9]\\.[0-9]+" dmd_version "${d_output}") 32 string(REGEX MATCH "Digital Mars D Compiler v[0-9]\\.[0-9]+" dmd_version "${d_output}")
33 if (dmd_version) 33 if (dmd_version)
34 set(D_IS_MARS true) 34 set(D_IS_MARS true)
35 set(D_IS_DMD true)
35 set(D_COMPILER_NAME "Digital Mars D Compiler") 36 set(D_COMPILER_NAME "Digital Mars D Compiler")
36 string(REGEX REPLACE "Digital Mars D Compiler v([0-9])\\.[0-9]+" "\\1" D_VERSION "${dmd_version}") 37 string(REGEX REPLACE "Digital Mars D Compiler v([0-9])\\.[0-9]+" "\\1" D_VERSION "${dmd_version}")
37 string(REGEX REPLACE "Digital Mars D Compiler v[0-9]\\.([0-9]+)" "\\1" D_FRONTEND "${dmd_version}") 38 string(REGEX REPLACE "Digital Mars D Compiler v[0-9]\\.([0-9]+)" "\\1" D_FRONTEND "${dmd_version}")
38 else (dmd_version) 39 else (dmd_version)
39 string(REGEX MATCH "LLVM-based D Compiler" is_ldc "${d_output}") 40 string(REGEX MATCH "LLVM-based D Compiler" is_ldc "${d_output}")
40 if (is_ldc) 41 if (is_ldc)
41 exec_program(${DC} ARGS "--version" OUTPUT_VARIABLE d_output) 42 exec_program(${DC} ARGS "--version" OUTPUT_VARIABLE d_output)
42 string(REGEX MATCH "based on DMD v[0-9]\\.[0-9]+" ldc_version "${d_output}") 43 string(REGEX MATCH "based on DMD v[0-9]\\.[0-9]+" ldc_version "${d_output}")
43 set(D_IS_LLVM true) 44 set(D_IS_LLVM true)
45 set(D_IS_LDC true)
44 if(ldc_version) 46 if(ldc_version)
45 set(D_IS_LLVM true) 47 set(D_IS_LLVM true)
46 set(D_COMPILER_NAME "LLVM-based D Compiler") 48 set(D_COMPILER_NAME "LLVM-based D Compiler")
47 string(REGEX REPLACE "based on DMD v([0-9])\\.[0-9]+" "\\1" D_VERSION "${ldc_version}") 49 string(REGEX REPLACE "based on DMD v([0-9])\\.[0-9]+" "\\1" D_VERSION "${ldc_version}")
48 string(REGEX REPLACE "based on DMD v[0-9]\\.([0-9]+)" "\\1" D_FRONTEND "${ldc_version}") 50 string(REGEX REPLACE "based on DMD v[0-9]\\.([0-9]+)" "\\1" D_FRONTEND "${ldc_version}")
72 # Check D compiler version 74 # Check D compiler version
73 if(D_VERSION EQUAL "1") 75 if(D_VERSION EQUAL "1")
74 if (D_FRONTEND LESS "041") 76 if (D_FRONTEND LESS "041")
75 message(STATUS "Minimum required version of D compiler is 1.041 (or compiler based on this version)") 77 message(STATUS "Minimum required version of D compiler is 1.041 (or compiler based on this version)")
76 endif(D_FRONTEND LESS "041") 78 endif(D_FRONTEND LESS "041")
77 set(D_TARGET d1-tango) 79 set(D_TARGET d1-tango)
78 #set(D_FLAGS ${D_FLAGS} -I${CMAKE_SOURCE_DIR}/qtd/d1)
79 elseif(D_VERSION EQUAL "2") 80 elseif(D_VERSION EQUAL "2")
80 set(D_TARGET ) ## TODO: hm... I don`t known this parameter for D2 ^( 81 set(D_TARGET ) ## TODO: hm... I don`t known this parameter for D2 ^(
81 #set(D_FLAGS ${D_FLAGS} -I${CMAKE_SOURCE_DIR}/qtd/d2)
82 endif(D_VERSION EQUAL "1") 82 endif(D_VERSION EQUAL "1")
83 set(D_FLAGS ${D_FLAGS} -I${CMAKE_SOURCE_DIR}/qt/d${D_VERSION})
83 84
84 # Debug and release flags. 85 # Debug and release flags.
85 if (${CMAKE_BUILD_TYPE} MATCHES [dD][eE][bB][uU][gG]) 86 if (${CMAKE_BUILD_TYPE} MATCHES [dD][eE][bB][uU][gG])
86 #set(CMAKE_BUILD_TYPE Debug) 87 #set(CMAKE_BUILD_TYPE Debug)
87 #set( SUFFIXLIB "${SUFFIXLIB}-debug" ) 88 #set( SUFFIXLIB "${SUFFIXLIB}-debug" )
90 set(D_FLAGS ${D_FLAGS} -g -gc -debug) 91 set(D_FLAGS ${D_FLAGS} -g -gc -debug)
91 else (${CMAKE_BUILD_TYPE} MATCHES [dD][eE][bB][uU][gG]) 92 else (${CMAKE_BUILD_TYPE} MATCHES [dD][eE][bB][uU][gG])
92 #set(CMAKE_BUILD_TYPE Release) 93 #set(CMAKE_BUILD_TYPE Release)
93 add_definitions(-UNO_DEBUG) 94 add_definitions(-UNO_DEBUG)
94 set(D_FLAGS ${D_FLAGS} -O -release -inline) 95 set(D_FLAGS ${D_FLAGS} -O -release -inline)
96 if(D_IS_MARS)
97 set(D_FLAGS ${D_FLAGS} -inline)
98 elseif(D_IS_LLVM)
99 set(D_FLAGS ${D_FLAGS} -enable-inlining)
100 endif(D_IS_MARS)
95 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 101 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
96 set(D_FLAGS ${D_FLAGS} -L/subsystem:windows) 102 set(D_FLAGS ${D_FLAGS} -L/subsystem:windows)
97 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 103 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
98 endif (${CMAKE_BUILD_TYPE} MATCHES [dD][eE][bB][uU][gG]) 104 endif (${CMAKE_BUILD_TYPE} MATCHES [dD][eE][bB][uU][gG])
99 set(D_FLAGS ${D_FLAGS} -I${CMAKE_BINARY_DIR} -I${CMAKE_SOURCE_DIR}) 105 set(D_FLAGS ${D_FLAGS} -I${CMAKE_BINARY_DIR} -I${CMAKE_SOURCE_DIR})
328 set(link_d) 334 set(link_d)
329 set(cpp_files) 335 set(cpp_files)
330 set(d_files) 336 set(d_files)
331 set(classes) 337 set(classes)
332 set(d_generated_files) 338 set(d_generated_files)
339 set(d_version_files)
333 set(link_example) 340 set(link_example)
334 include (${CMAKE_SOURCE_DIR}/build/${package}.txt) 341 include (${CMAKE_SOURCE_DIR}/build/${package}.txt)
335 342
336 ## Loading package sources list. 343 ## Loading package sources list.
344 foreach(d_source ${d_version_files})
345 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}/qt/${d_source}.d)
346 if(NOT GENERATE_DI_FILES)
347 get_filename_component(path ${d_source}.d PATH)
348 get_filename_component(name ${d_source}.d NAME_WE)
349 install(FILES ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di)
350 endif(NOT GENERATE_DI_FILES)
351 endforeach(d_source)
337 foreach(d_source ${d_files}) 352 foreach(d_source ${d_files})
338 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d) 353 set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d)
354 if(NOT GENERATE_DI_FILES)
355 get_filename_component(path ${d_source}.d PATH)
356 get_filename_component(name ${d_source}.d NAME_WE)
357 install(FILES ${CMAKE_SOURCE_DIR}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di)
358 endif(NOT GENERATE_DI_FILES)
339 endforeach(d_source) 359 endforeach(d_source)
340 foreach(d_source ${d_generated_files}) 360 foreach(d_source ${d_generated_files})
341 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d) 361 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d)
342 get_filename_component(path ${d_source}.d PATH)
343 get_filename_component(path ${d_source}.d NAME_WE)
344 if(NOT GENERATE_DI_FILES) 362 if(NOT GENERATE_DI_FILES)
345 install(FILES ${d_source} DESTINATION include/d/qtd/${path} RENAME ${class}.di) 363 get_filename_component(path ${d_source}.d PATH)
364 get_filename_component(name ${d_source}.d NAME_WE)
365 install(FILES ${CMAKE_BINARY_DIR}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di)
346 endif(NOT GENERATE_DI_FILES) 366 endif(NOT GENERATE_DI_FILES)
347 endforeach(d_source) 367 endforeach(d_source)
348 foreach (cpp_source ${cpp_files}) 368 foreach (cpp_source ${cpp_files})
349 set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp) 369 set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp)
350 endforeach(cpp_source) 370 endforeach(cpp_source)
353 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d) 373 set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d)
354 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp) 374 set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp)
355 add_sources_for_generating(${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp) 375 add_sources_for_generating(${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp)
356 add_sources_for_generating(${CMAKE_BINARY_DIR}/qt/${package}/${class}.d) 376 add_sources_for_generating(${CMAKE_BINARY_DIR}/qt/${package}/${class}.d)
357 if(NOT GENERATE_DI_FILES) 377 if(NOT GENERATE_DI_FILES)
358 install(FILES ${d_source} DESTINATION include/d/qtd/${package} RENAME ${class}.di) 378 install(FILES ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d DESTINATION include/d/qtd/${package} RENAME ${class}.di)
359 endif(NOT GENERATE_DI_FILES) 379 endif(NOT GENERATE_DI_FILES)
360 endforeach(class) 380 endforeach(class)
361 381
362 ## Link CPP library. 382 ## Link CPP library.
363 add_library(cpp_${package} SHARED ${cpp_sources}) 383 add_library(cpp_${package} SHARED ${cpp_sources})
405 ARGS rcs ${lib} ${d_objs} ${cpp_objs} 425 ARGS rcs ${lib} ${d_objs} ${cpp_objs}
406 DEPENDS ${d_objs} cpp_${package} 426 DEPENDS ${d_objs} cpp_${package}
407 COMMENT "Linking ${lib_name}" 427 COMMENT "Linking ${lib_name}"
408 ) 428 )
409 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 429 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
410 install(FILES ${lib} DESTINATION lib) 430 install(FILES ${CMAKE_BINARY_DIR}/${lib} DESTINATION lib)
411 431
412 ## Dependences. 432 ## Dependences.
413 add_dependencies(cpp_${package} dgen) 433 add_dependencies(cpp_${package} dgen)
414 add_custom_target(${package} DEPENDS ${lib}) 434 add_custom_target(${package} DEPENDS ${lib})
415 foreach(depend ${depends}) 435 foreach(depend ${depends})
436 set(${package}_lib_param ${${package}_lib_param} ${link}) 456 set(${package}_lib_param ${${package}_lib_param} ${link})
437 endforeach(link ${link_example}) 457 endforeach(link ${link_example})
438 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS) 458 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
439 459
440 if(GENERATE_DI_FILES) 460 if(GENERATE_DI_FILES)
441 set(regexp_str "(${CMAKE_BINARY_DIR}|${CMAKE_SOURCE_DIR})/([A-Za-z0-9\\-_\\\\/]+)[/]+([A-Za-z0-9\\-_\\\\]+).d") 461 set(regexp_str "(${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}|${CMAKE_BINARY_DIR}|${CMAKE_SOURCE_DIR})/([A-Za-z0-9\\-_\\\\/]+)[/]+([A-Za-z0-9\\-_\\\\]+).d")
442 foreach(source ${d_sources}) 462 foreach(source ${d_sources})
443 # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} 463 # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
444 # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) 464 # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
445 string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}") 465 string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}")
446 string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}") 466 string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}")
478 ##-------------------------------------------- 498 ##--------------------------------------------
479 if(BUILD_EXAMPLES) 499 if(BUILD_EXAMPLES)
480 add_subdirectory(demos) 500 add_subdirectory(demos)
481 add_subdirectory(examples) 501 add_subdirectory(examples)
482 endif(BUILD_EXAMPLES) 502 endif(BUILD_EXAMPLES)
503
504
505 ##--------------------------------------------
506 ## CPack.
507 ##--------------------------------------------
508 set(CPACK_PACKAGE_VERSION_PATCH 1)
509 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "QtD is a D binding to the Qt")
510 set(CPACK_PACKAGE_VENDOR "QtD team")
511 set(CPACK_PACKAGE_CONTACT "e@mail.ru" )
512 SET(CPACK_PACKAGE_VERSION "0.1")
513 #set(CPACK_PACKAGE_VERSION_PATCH "${RFS_VERSION_BUILD}")
514 set(CPACK_PACKAGE_INSTALL_DIRECTORY "qtd ${CPACK_PACKAGE_VERSION}")
515 set(CPACK_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}")
516 set(CPACK_SOURCE_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}")
517 SET(CPACK_GENERATOR "TBZ2;DEB;RPM")
518 include(CPack)