# HG changeset patch # User SokoL_SD # Date 1248026973 0 # Node ID b796329e8c38c86d5f5bbec558d58ee8ba9eba0c # Parent 1b0e2ee5aedcd0a13787176d6fb81f8593209880 We need to start cmake twice. It is necessary for getting a class list from the generator and using this list for building other parts of QtD. diff -r 1b0e2ee5aedc -r b796329e8c38 CMakeLists.txt --- a/CMakeLists.txt Sat Jul 18 15:06:12 2009 +0000 +++ b/CMakeLists.txt Sun Jul 19 18:09:33 2009 +0000 @@ -1,5 +1,11 @@ cmake_minimum_required(VERSION 2.6) PROJECT(qtd CXX C) + +########################################################## +## Building generator and settings. +########################################################## +if(NOT SECOND_RUN) + FIND_PACKAGE(Qt4 REQUIRED) set (QT_USE_QTMAIN false) set (QT_USE_QTGUI false) @@ -8,8 +14,6 @@ ## Settings. ##-------------------------------------------- -include_directories(${QT_INCLUDES} include ${CMAKE_CURRENT_BINARY_DIR}/include) - ## Options. option(BUILD_EXAMPLES "Build examples" "OFF") option(BUILD_SHARED_LIBRARIES "Build shared library (very experemental and only for ldc)" "OFF") @@ -17,18 +21,12 @@ #option(GENERATE_DI_FILES "Generate *.di files with DC -H command" "OFF") set(GENERATE_DI_FILES OFF) ## Very experemental option. Temporary disabled. -set(QTD_VERSION_STR ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}) -math(EXPR QTD_VERSION "(${QT_VERSION_MAJOR} << 16) + (${QT_VERSION_MINOR} << 8) + ${QT_VERSION_PATCH}") - -set(all_packages Core Gui OpenGL Xml Svg Network WebKit) +set(all_packages Core Gui OpenGL Xml Svg Network WebKit CACHE INTERNAL "") ## Init D toolkit. set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) FIND_PACKAGE(D REQUIRED) -## Strip utility. -find_program(STRIP strip) - if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR "${CMAKE_INSTALL_PREFIX}" STREQUAL "") set(CMAKE_INSTALL_PREFIX ${DC_PATH} CACHE PATH "QtD install prefix" FORCE @@ -40,9 +38,9 @@ if (D_FRONTEND LESS "041") message(STATUS "Minimum required version of D compiler is 1.041 (or compiler based on this version)") endif(D_FRONTEND LESS "041") - set(D_TARGET d1-tango) + set(D_TARGET d1-tango CACHE INTERNAL "") elseif(D_VERSION EQUAL "2") - set(D_TARGET d2-phobos) + set(D_TARGET d2-phobos CACHE INTERNAL "") endif(D_VERSION EQUAL "1") # Debug and release flags. @@ -70,30 +68,123 @@ message(FATAL_ERROR "implib not found. You can donwload it from http://ftp.digitalmars.com/bup.zip") endif (NOT IMPLIB) if(D_IS_MARS) - set(D_FLAGS ${D_FLAGS} -version=cpp_shared) set(GEN_OPT ${GEN_OPT} --cpp_shared) add_definitions(-DCPP_SHARED) endif(D_IS_MARS) +endif(CMAKE_HOST_WIN32) + +set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ./) +set(GEN_OPT ${GEN_OPT} --d-target=${D_TARGET}) + +set(packages CACHE INTERNAL "") +foreach(package_big ${all_packages}) + string(TOLOWER ${package_big} package) + string(TOUPPER ${package_big} package_upper) + option(BUILD_QT_${package_upper} "Build Qt${package_big}" "ON") + set(packages ${packages} ${package}) +endforeach(package_big ${all_packages}) + +add_subdirectory(generator) + +add_custom_target(main ALL) +add_dependencies(main dgen) + +if(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") + set(make_util nmake) +elseif(${CMAKE_GENERATOR} STREQUAL "MinGW Makefiles" OR + ${CMAKE_GENERATOR} STREQUAL "Unix Makefiles") + set(make_util $(MAKE)) +else(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") + message(FATAL_ERROR "${CMAKE_GENERATOR} isn't supported") +endif(${CMAKE_GENERATOR} STREQUAL "NMake Makefiles") + +set(cd_path ${CMAKE_BINARY_DIR}/build) +make_native_path(cd_path) +add_custom_command(TARGET main POST_BUILD + COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${CMAKE_BINARY_DIR}/build + COMMAND cd ARGS ${cd_path} && ${CMAKE_COMMAND} -G${CMAKE_GENERATOR} -DSECOND_RUN=1 ${CMAKE_SOURCE_DIR} && ${make_util} allpackages + COMMENT "" + ) + +## Make commands. +set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_BINARY_DIR}/build) +add_custom_target(install + COMMAND cd ${CMAKE_BINARY_DIR}/build && ${make_util} install + COMMENT "" + ) +add_dependencies(install preinstall) + +##-------------------------------------------- +## CPack. +##-------------------------------------------- +set(CPACK_PACKAGE_VERSION_PATCH 1) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "QtD is a D binding to the Qt application and UI framework. +QtD is a D binding to the Qt application and UI framework. +This package installs binding and static library for qt port on D programming language. +") +#SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt") +SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/license.txt") +set(CPACK_PACKAGE_VENDOR "QtD team") +set(CPACK_PACKAGE_CONTACT "e@mail.ru" ) +SET(CPACK_PACKAGE_VERSION "0.1") +#set(CPACK_PACKAGE_VERSION_PATCH "${RFS_VERSION_BUILD}") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "qtd ${CPACK_PACKAGE_VERSION}") +set(CPACK_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}") +set(CPACK_SOURCE_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}") +if(CMAKE_HOST_WIN32) + set(CPACK_GENERATOR "ZIP") +elseif(CMAKE_HOST_UNIX) + set(CPACK_GENERATOR "TBZ2;DEB;RPM") +endif(CMAKE_HOST_WIN32) +include(CPack) + +########################################################## +## Building QtD. +########################################################## +else(NOT SECOND_RUN) + +PROJECT(qtd CXX C) +load_cache(${CMAKE_BINARY_DIR}/.. INCLUDE_INTERNALS all_packages QTD_VERSION_STR QTD_VERSION) +set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) +FIND_PACKAGE(D REQUIRED) +FIND_PACKAGE(Qt4 REQUIRED) + +set(QTD_VERSION_STR ${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH}) +math(EXPR QTD_VERSION "(${QT_VERSION_MAJOR} << 16) + (${QT_VERSION_MINOR} << 8) + ${QT_VERSION_PATCH}") + +include_directories(${QT_INCLUDES} ${CMAKE_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR}/include) + +## Strip utility. +find_program(STRIP strip) + +# System specifc settings. +if(CMAKE_HOST_WIN32) string(REGEX REPLACE ".dll([A-Za-z\\.0-9]+)" "\\1" CMAKE_IMPORT_LIBRARY_SUFFIX "${CMAKE_IMPORT_LIBRARY_SUFFIX}") endif(CMAKE_HOST_WIN32) if(CMAKE_HOST_WIN32 AND D_IS_MARS) - set(CPP_SHARED 1) + set(CPP_SHARED 1 CACHE INTERNAL "") endif(CMAKE_HOST_WIN32 AND D_IS_MARS) -set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ./) -set(GEN_OPT ${GEN_OPT} --d-target=${D_TARGET}) +if(D_IS_MARS) + set(D_FLAGS -version=cpp_shared) + add_definitions(-DCPP_SHARED) +endif(D_IS_MARS) ## Bootstrap settings for QtD. -set(DRCC ${CMAKE_BINARY_DIR}/tools/drcc/drcc) -set(DUIC ${CMAKE_BINARY_DIR}/tools/duic/duic) -set(QTD_IMPORT_PATH ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}) -set(QTD_LIBRARIES_PATH ${CMAKE_BINARY_DIR}/lib) +set(DRCC ${CMAKE_BINARY_DIR}/tools/drcc/drcc CACHE INTERNAL "") +set(DUIC ${CMAKE_BINARY_DIR}/tools/duic/duic CACHE INTERNAL "") +set(QTD_IMPORT_PATH ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION} CACHE INTERNAL "") +set(QTD_LIBRARIES_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "") ##-------------------------------------------- ## Macros and functions. ##-------------------------------------------- +macro(load_generated_classes ) + include(cpp/qt_${package}/qt_${package}.txt) +endmacro(load_generated_classes ) + macro(qtd_add_resource output) set (params NAME OPTIONS) qtd_parse_params (RESOURCES params ${ARGN}) @@ -208,10 +299,10 @@ add_d_program(${name} ${SOURCES_tmp} NO_DEPS_SOURCES ${res_sources} ${uic_sources} DEPENDS ${res_sources} INCLUDES ${QTD_IMPORT_PATH} ${CMAKE_CURRENT_BINARY_DIR} LIB_PATHS ${QTD_LIBRARIES_PATH} ${CMAKE_SOURCE_DIR}/lib LIBS ${qtd_libs}) - ## TODO: Enable on windows too. - if(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) ## - add_custom_command(TARGET example_${name} POST_BUILD COMMAND "${STRIP}" ARGS "${output}") - endif(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) + ## TODO: Enable. + #if(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) ## + # add_custom_command(TARGET example_${name} POST_BUILD COMMAND "${STRIP}" ARGS "${output}") + #endif(STRIP AND ${CMAKE_BUILD_TYPE} EQUAL "Release" AND CMAKE_HOST_UNIX) add_dependencies(${name} allpackages) endmacro(build_example sources) @@ -245,7 +336,6 @@ set(all_req_found 1) string(TOUPPER ${package} package_upper) - option(BUILD_QT_${package_upper} "Build Qt${package_big}" "ON") if(BUILD_QT_${package_upper}) foreach(req ${required}) set(req_found) @@ -383,14 +473,16 @@ set(${package}_lib_param Qt${package_big}) ## Paths for QtD libs. Needed by examples. endif(CPP_SHARED) add_d_target(${lib_name} NOT_DETECT_DEPENDS TYPE ${build_type} INCLUDES ${QTD_IMPORT_PATH} SOURCES ${d_sources} OBJECTS ${cpp_objs} ${d_implib} - OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib DEPENDS ${d_implib}) - install(FILES ${CMAKE_BINARY_DIR}/${lib} COMPONENT qtd DESTINATION lib) + OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib DEPENDS ${d_implib} ) + install(FILES ${CMAKE_BINARY_DIR}/${lib} COMPONENT qtd DESTINATION lib) ## Paths for QtD libs. Needed by examples. set(${package}_lib_param qtd${package} ${${package}_lib_param} ${link_example}) ## Dependences. - add_custom_target(${package} DEPENDS ${lib}) + add_custom_target(${package}) + add_dependencies(${package} ${lib_name}) + add_dependencies(${lib_name} cpp_${package}) foreach(depend ${required}) string(TOLOWER ${depend} depend) add_dependencies(cpp_${package} cpp_${depend}) @@ -437,12 +529,6 @@ add_custom_target(generate_headers ALL DEPENDS ${interfaces_list}) endif(GENERATE_DI_FILES) -add_subdirectory(generator) -## Dependences. -foreach(package ${packages}) - add_dependencies(cpp_${package} dgen) -endforeach(package ${packages}) -add_sources_for_generating(${files_for_gen}) set(CPACK_COMPONENTS_ALL qtd qtd_tools) @@ -460,26 +546,6 @@ add_subdirectory(examples) endif(BUILD_EXAMPLES) -##-------------------------------------------- -## CPack. -##-------------------------------------------- -set(CPACK_PACKAGE_VERSION_PATCH 1) -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "QtD is a D binding to the Qt application and UI framework. -QtD is a D binding to the Qt application and UI framework. -This package installs binding and static library for qt port on D programming language. -") -#SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt") -SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/license.txt") -set(CPACK_PACKAGE_VENDOR "QtD team") -set(CPACK_PACKAGE_CONTACT "e@mail.ru" ) -SET(CPACK_PACKAGE_VERSION "0.1") -#set(CPACK_PACKAGE_VERSION_PATCH "${RFS_VERSION_BUILD}") -set(CPACK_PACKAGE_INSTALL_DIRECTORY "qtd ${CPACK_PACKAGE_VERSION}") -set(CPACK_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}") -set(CPACK_SOURCE_PACKAGE_FILE_NAME "qtd-${CPACK_PACKAGE_VERSION}") -if(CMAKE_HOST_WIN32) - set(CPACK_GENERATOR "ZIP") -elseif(CMAKE_HOST_UNIX) - set(CPACK_GENERATOR "TBZ2;DEB;RPM") -endif(CMAKE_HOST_WIN32) -include(CPack) \ No newline at end of file +#execute_process(COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_BINARY_DIR}/CMakeCache.txt) + +endif(NOT SECOND_RUN) \ No newline at end of file diff -r 1b0e2ee5aedc -r b796329e8c38 cmake/FindD.cmake --- a/cmake/FindD.cmake Sat Jul 18 15:06:12 2009 +0000 +++ b/cmake/FindD.cmake Sun Jul 19 18:09:33 2009 +0000 @@ -2,7 +2,7 @@ ## Variables. ##-------------------------------------------- -## Find D compiler and parsing its version. +## Find D compiler and parse its version. find_program(DC NAMES dmd ldc) if (DC) get_filename_component(dc_path ${DC} PATH) @@ -30,15 +30,15 @@ string(REGEX REPLACE "based on DMD v([0-9])\\.[0-9]+" "\\1" D_VERSION "${ldc_version}") string(REGEX REPLACE "based on DMD v[0-9]\\.([0-9]+)" "\\1" D_FRONTEND "${ldc_version}") else(ldc_version) - message(FATAL_ERROR "LDC compiler was found, but the version can not be processed") + message(FATAL_ERROR "LDC compiler found, but the version can not be processed") endif(ldc_version) else (is_ldc) - message(FATAL_ERROR "D compliler not found") + message(FATAL_ERROR "D compiler are not found") endif(is_ldc) endif(dmd_version) message(STATUS "D compiler found -- ${D_COMPILER_NAME} v${D_VERSION}.${D_FRONTEND}") else (DC) - message(FATAL_ERROR "D compliler not found") + message(FATAL_ERROR "D compliler are not found") endif (DC) ## Get D compiler path. @@ -69,7 +69,7 @@ set(D_MODULES_PER_OBJECT 10000 CACHE STRING "Max number of modules per object file") endif(NOT ONE_BUILD_COMMAND) -## Specifics flags for build configurations. +## Specific flags for build configurations. ## TODO: Add another targets. set(D_RELEASE_FLAGS -O -release) set(D_DEBUG_FLAGS -g ) @@ -488,7 +488,7 @@ endmacro(add_d_shared_lib name) ## Add library target. -## If it support library would shared. +## Library would shared if it supported. macro(add_d_lib name) if(D_IS_MARS) add_d_target(${name} TYPE STATIC ${ARGN}) diff -r 1b0e2ee5aedc -r b796329e8c38 generator/CMakeLists.txt --- a/generator/CMakeLists.txt Sat Jul 18 15:06:12 2009 +0000 +++ b/generator/CMakeLists.txt Sun Jul 19 18:09:33 2009 +0000 @@ -302,15 +302,11 @@ if(d_inc_file_found) set(${CMAKE_SOURCE_DIR}/generator/typesystem_${package}-java.java) endif(d_inc_file_found) -endforeach(package ${packages}) +endforeach(package ${all_packages}) mark_as_advanced(d_inc_file_found) set(d_inc_file_found 1) -foreach(package ${packages}) - set(dgen_impl ${CMAKE_BINARY_DIR}/cpp/qt_${package}/qt_${package}.pri) - break(package ${packages}) -endforeach(package ${packages}) - +set(dgen_impl ${CMAKE_BINARY_DIR}/build/cpp/qt_core/ArrayOps_shell.cpp) if(CMAKE_HOST_WIN32) set(sep ";") else(CMAKE_HOST_WIN32) @@ -322,22 +318,12 @@ add_custom_command(OUTPUT ${dgen_impl} COMMAND ${CMAKE_COMMAND} -E remove -f ${dgen_impl} COMMAND "generator" - ARGS ${GEN_OPT} --include-paths=${inc_paths} --output-directory=${CMAKE_BINARY_DIR} + ARGS ${GEN_OPT} --qt-include-directory=${QT_INCLUDE_DIR} + --output-directory=${CMAKE_BINARY_DIR}/build --source-directory=${CMAKE_SOURCE_DIR}/generator qtjambi_masterinclude.h ${CMAKE_BINARY_DIR}/CMakeFiles/build.txt COMMENT "Generating binding..." - DEPENDS generator ${gen_sources} - ) -add_custom_target(dgen DEPENDS ${dgen_impl} COMMENT "") - -macro(add_sources_for_generating) - foreach(source ${ARGN}) - add_custom_command(OUTPUT "${source}" - COMMAND "" - ARGS "" - DEPENDS ${dgen_impl} - COMMENT "" - ) - endforeach(source ${ARGN}) -endmacro(add_sources_for_generating) \ No newline at end of file + DEPENDS ${gen_sources} ${CMAKE_BINARY_DIR}/CMakeFiles/build.txt +) +add_custom_target(dgen ALL DEPENDS ${dgen_impl} COMMENT "")