# HG changeset patch
# User SokoL_SD
# Date 1242405722 0
# Node ID a9626891eca614984c714108b29cd6a245dc34a9
# Parent 6873e4b22c080e08daf853689566a075b2dfc03c
CMake: generator will work only for needed packages.
CMake: check for depends packages.
CMake: add options 'QT_BUILD_PACKAGE'. Now you can build only needed packages.
diff -r 6873e4b22c08 -r a9626891eca6 CMakeLists.txt
--- a/CMakeLists.txt Fri May 15 13:38:09 2009 +0000
+++ b/CMakeLists.txt Fri May 15 16:42:02 2009 +0000
@@ -9,21 +9,11 @@
include_directories(${QT_INCLUDES} include ${CMAKE_CURRENT_BINARY_DIR}/include)
## Options.
-option(BUILD_QT_OPENGL "Build QtOpenGL" "ON")
option(BUILD_EXAMPLES "Build examples" "ON")
option(GENERATE_DI_FILES "Generate *.di files with DC -H command" "OFF")
-## Packages list.
-set(packages_big Core Gui)
-if(BUILD_QT_OPENGL)
- set(packages_big ${packages_big} OpenGL)
-endif(BUILD_QT_OPENGL)
+set(all_packages Core Gui OpenGL) ## TODO: Loading.
-set(packages)
-foreach(package ${packages_big})
- string(TOLOWER ${package} package)
- set(packages ${packages} ${package})
-endforeach(package ${packages_big})
## Strip utility.
find_program(STRIP strip)
@@ -264,6 +254,7 @@
set(is_sources)
set(is_libs)
set(qtd_libs ${core_lib_param} ${gui_lib_param})
+ set(reqs Core Gui)
foreach(param ${ARGN})
if(is_libs)
string(REGEX REPLACE "Qt([A-Za-z0-9])" "\\1" param_package "${param}")
@@ -271,26 +262,14 @@
set(is_libs)
set(is_sources 1)
else(${param_package} STREQUAL ${param})
- set(is_founded)
- foreach(package_big ${packages_big})
- string(TOLOWER ${package_big} package)
- if(${param_package} STREQUAL ${package_big})
- set(qtd_libs ${qtd_libs} ${${package}_lib_param})
- set(is_founded 1)
- break(package_big ${packages_big})
- endif(${param_package} STREQUAL ${package_big})
- endforeach(package_big ${packages_big})
- if(NOT is_founded)
- message(STATUS "Module ${param_package} not founded for example ${name}")
- return(build_example name)
- endif(NOT is_founded)
+ set(reqs ${reqs} ${param_package})
endif(${param_package} STREQUAL ${param})
endif(is_libs)
if(NOT is_libs)
if(NOT is_sources)
if(${param} STREQUAL PACKAGES)
set(is_libs 1)
- set(qtd_libs)
+ set(reqs)
else(${param} STREQUAL PACKAGES)
set(is_sources 1)
endif(${param} STREQUAL PACKAGES)
@@ -304,14 +283,22 @@
set(output ${CMAKE_CURRENT_BINARY_DIR}/${name}${CMAKE_EXECUTABLE_SUFFIX})
set(output_native ${output})
make_native_path(output_native)
- ## Bug fix: Reverse libs for ldc.
- if(D_IS_LLVM)
- set(qtd_libs_tmp ${qtd_libs})
- set(qtd_libs)
- foreach(libs ${qtd_libs_tmp})
- set(qtd_libs ${libs} ${qtd_libs})
- endforeach(libs ${qtd_libs_tmp})
- endif(D_IS_LLVM)
+ foreach(req ${reqs})
+ set(is_founded)
+ foreach(package_big ${packages_big})
+ string(TOLOWER ${package_big} package)
+ if(${req} STREQUAL ${package_big})
+ set(is_founded 1)
+ break(package_big ${packages_big})
+ endif(${req} STREQUAL ${package_big})
+ endforeach(package_big ${packages_big})
+ if(NOT is_founded)
+ message(STATUS "Example '${name}' required package '${req}', but its not active. Example will not build")
+ return(build_example name)
+ else(NOT is_founded)
+ set(qtd_libs ${${package}_lib_param} ${qtd_libs})
+ endif(NOT is_founded)
+ endforeach(req ${reqs})
add_custom_command(OUTPUT "${output}"
COMMAND "${DC}"
ARGS ${D_FLAGS} ${libs_path} ${qtd_libs} ${objects}
@@ -331,14 +318,16 @@
##--------------------------------------------
## Build and install library.
##--------------------------------------------
-add_subdirectory(generator)
+
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
add_custom_target(allpackages ALL)
link_directories(${CMAKE_BINARY_DIR}/CMakeFiles)
+#add_dgen_target(all ${packages})
-foreach(package_big ${packages_big})
+foreach(package_big ${all_packages})
string(TOLOWER ${package_big} package)
## Loading settings for package.
+ set(required)
set(d_objs)
set(cpp_objs)
set(d_sources)
@@ -354,160 +343,216 @@
set(link_example)
include (${CMAKE_SOURCE_DIR}/build/${package}.txt)
- ## Loading package sources list.
- foreach(d_source ${d_version_files})
- set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}/qt/${d_source}.d)
- if(NOT GENERATE_DI_FILES)
- get_filename_component(path ${d_source}.d PATH)
- get_filename_component(name ${d_source}.d NAME_WE)
- install(FILES ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di)
- endif(NOT GENERATE_DI_FILES)
- endforeach(d_source)
- foreach(d_source ${d_files})
- set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d)
- if(NOT GENERATE_DI_FILES)
- get_filename_component(path ${d_source}.d PATH)
- get_filename_component(name ${d_source}.d NAME_WE)
- install(FILES ${CMAKE_SOURCE_DIR}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di)
- endif(NOT GENERATE_DI_FILES)
- endforeach(d_source)
- foreach(d_source ${d_generated_files})
- set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d)
- if(NOT GENERATE_DI_FILES)
- get_filename_component(path ${d_source}.d PATH)
- get_filename_component(name ${d_source}.d NAME_WE)
- install(FILES ${CMAKE_BINARY_DIR}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di)
- endif(NOT GENERATE_DI_FILES)
- endforeach(d_source)
- foreach (cpp_source ${cpp_files})
- set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp)
- endforeach(cpp_source)
- set(classes ArrayOps ${classes})
- foreach(class ${classes})
- set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d)
- set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp)
- add_sources_for_generating(${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp)
- add_sources_for_generating(${CMAKE_BINARY_DIR}/qt/${package}/${class}.d)
- if(NOT GENERATE_DI_FILES)
- install(FILES ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d DESTINATION include/d/qtd/${package} RENAME ${class}.di)
- install(FILES ${CMAKE_BINARY_DIR}/qt/${package}/${class}_enum.d DESTINATION include/d/qtd/${package} RENAME ${class}_enum.di OPTIONAL)
- endif(NOT GENERATE_DI_FILES)
- endforeach(class)
+ set(all_req_found 1)
+ string(TOUPPER ${package} package_upper)
+ option(BUILD_QT_${package_upper} "Build Qt${package}" "ON")
+ if(BUILD_QT_${package_upper})
+ foreach(req ${required})
+ set(req_found)
+ foreach(pack ${packages_big})
+ if(${pack} STREQUAL ${req})
+ set(req_found 1)
+ endif(${pack} STREQUAL ${req})
+ endforeach(pack ${packages})
+ if(NOT req_found)
+ set(req_found)
+ foreach(pack ${all_packages})
+ if(${pack} STREQUAL ${req})
+ set(req_found 1)
+ endif(${pack} STREQUAL ${req})
+ endforeach(pack ${all_packages})
+ if(req_found)
+ message(STATUS "Package '${package_big}' required '${req}', but its not active")
+ else(req_found)
+ message(STATUS "Package '${package_big}' required '${req}', but its not found")
+ endif(req_found)
+ set(all_req_found)
+ endif(NOT req_found)
+ endforeach(req ${required})
+ else(BUILD_QT_${package_upper})
+ set(all_req_found)
+ endif(BUILD_QT_${package_upper})
- ## Link CPP library.
- add_library(cpp_${package} SHARED ${cpp_sources})
+ if("${all_req_found}" EQUAL 1)
+ set(packages_big ${packages_big} ${package_big})
+ set(packages ${packages} ${package})
+ ## Loading package sources list.
+ foreach(d_source ${d_version_files})
+ set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}/qt/${d_source}.d)
+ if(NOT GENERATE_DI_FILES)
+ get_filename_component(path ${d_source}.d PATH)
+ get_filename_component(name ${d_source}.d NAME_WE)
+ install(FILES ${CMAKE_SOURCE_DIR}/qt/d${D_VERSION}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di)
+ endif(NOT GENERATE_DI_FILES)
+ endforeach(d_source)
+ foreach(d_source ${d_files})
+ set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d)
+ if(NOT GENERATE_DI_FILES)
+ get_filename_component(path ${d_source}.d PATH)
+ get_filename_component(name ${d_source}.d NAME_WE)
+ install(FILES ${CMAKE_SOURCE_DIR}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di)
+ endif(NOT GENERATE_DI_FILES)
+ endforeach(d_source)
+ foreach(d_source ${d_generated_files})
+ set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d)
+ if(NOT GENERATE_DI_FILES)
+ get_filename_component(path ${d_source}.d PATH)
+ get_filename_component(name ${d_source}.d NAME_WE)
+ install(FILES ${CMAKE_BINARY_DIR}/qt/${d_source}.d DESTINATION include/d/qtd/${path} RENAME ${name}.di)
+ endif(NOT GENERATE_DI_FILES)
+ endforeach(d_source)
+ foreach (cpp_source ${cpp_files})
+ set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp)
+ endforeach(cpp_source)
+ set(classes ArrayOps ${classes})
+ foreach(class ${classes})
+ set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d)
+ set(cpp_sources ${cpp_sources} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp)
+ set(files_for_gen ${files_for_gen} ${CMAKE_BINARY_DIR}/cpp/qt_${package}/${class}_shell.cpp
+ ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d)
+ if(NOT GENERATE_DI_FILES)
+ install(FILES ${CMAKE_BINARY_DIR}/qt/${package}/${class}.d DESTINATION include/d/qtd/${package} RENAME ${class}.di)
+ install(FILES ${CMAKE_BINARY_DIR}/qt/${package}/${class}_enum.d DESTINATION include/d/qtd/${package} RENAME ${class}_enum.di OPTIONAL)
+ endif(NOT GENERATE_DI_FILES)
+ endforeach(class)
+
+ ## Link CPP library.
+ add_library(cpp_${package} SHARED ${cpp_sources})
- ## Link D library.
- set(lib_name ${D_LIB_PREFIX}qtd${package}${D_LIB_SUFFIX})
- set(lib lib/${lib_name})
- compile_d_files(${package}_dobjs objects ${d_sources})
- set(d_objs ${d_objs} ${objects})
- if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
- set_property(TARGET cpp_${package} PROPERTY RUNTIME_OUTPUT_DIRECTORY lib)
- set_property(TARGET cpp_${package} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles)
- target_link_libraries(cpp_${package} ${link_cpp} )
- set(cpp_lib ${CMAKE_BINARY_DIR}/lib/libcpp_${package}.dll)
- set(cpp_lib_native ${cpp_lib})
- make_native_path(cpp_lib_native)
- set(d_implib ${CMAKE_BINARY_DIR}/CMakeFiles/${package}.dir/cpp_${package}.lib)
- set(d_implib_native ${d_implib})
- make_native_path(d_implib_native)
- add_custom_command(
- OUTPUT "${d_implib}"
- COMMAND "${IMPLIB}"
- ARGS /system /PAGESIZE:32 ${d_implib_native} ${cpp_lib_native}
- DEPENDS "cpp_${package}"
- COMMENT "Creating implib ${lib_name}"
- )
- add_custom_command(
- OUTPUT "${lib}"
- COMMAND "${DC}"
- ARGS -lib ${d_objs} ${d_implib} -of${lib}
- DEPENDS ${d_objs} ${d_implib}
- COMMENT "Linking ${lib_name}"
- )
- install(FILES ${cpp_lib} DESTINATION lib)
- else(${CMAKE_SYSTEM_NAME} STREQUAL Linux)
- set_property(TARGET cpp_${package} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles)
- foreach(cpp_source ${cpp_sources})
- set(cpp_source ${cpp_source})
- obj_path(cpp_source)
- set(cpp_objs ${cpp_objs} CMakeFiles/cpp_${package}.dir/${cpp_source}${CMAKE_CXX_OUTPUT_EXTENSION})
- endforeach(cpp_source)
- add_custom_command(
- OUTPUT "${lib}"
- COMMAND "${CMAKE_AR}"
- ARGS rcs ${lib} ${d_objs} ${cpp_objs}
- DEPENDS ${d_objs} cpp_${package}
- COMMENT "Linking ${lib_name}"
- )
- endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
- install(FILES ${CMAKE_BINARY_DIR}/${lib} DESTINATION lib)
+ ## Link D library.
+ set(lib_name ${D_LIB_PREFIX}qtd${package}${D_LIB_SUFFIX})
+ set(lib lib/${lib_name})
+ compile_d_files(${package}_dobjs objects ${d_sources})
+ set(d_objs ${d_objs} ${objects})
+ if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
+ set_property(TARGET cpp_${package} PROPERTY RUNTIME_OUTPUT_DIRECTORY lib)
+ set_property(TARGET cpp_${package} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles)
+ foreach(req ${required})
+ set(is_found)
+ foreach(pack ${packages_big})
+ if("${pack}" STREQUAL "${req}")
+ set(is_found 1)
+ break(pack ${packages_big})
+ endif("${pack}" STREQUAL "${req}")
+ endforeach(pack ${packages_big})
+ if(NOT is_found)
+ message(FATAL_ERROR "Package ${package_big} required ${req}, but its not found")
+ endif(NOT is_found)
+ string(TOUPPER ${req} req_upper)
+ string(TOLOWER ${req} req_lower)
+ set(link_cpp ${link_cpp} cpp_${req_lower} ${QT_QT${req_upper}_LIBRARY})
+ endforeach(req ${require})
+ string(TOUPPER ${package} package_upper)
+ set(link_cpp ${link_cpp} ${QT_QT${package_upper}_LIBRARY})
+ target_link_libraries(cpp_${package} ${link_cpp} )
+ set(cpp_lib ${CMAKE_BINARY_DIR}/lib/libcpp_${package}.dll)
+ set(cpp_lib_native ${cpp_lib})
+ make_native_path(cpp_lib_native)
+ set(d_implib ${CMAKE_BINARY_DIR}/CMakeFiles/${package}.dir/cpp_${package}.lib)
+ set(d_implib_native ${d_implib})
+ make_native_path(d_implib_native)
+ add_custom_command(
+ OUTPUT "${d_implib}"
+ COMMAND "${IMPLIB}"
+ ARGS /system /PAGESIZE:32 ${d_implib_native} ${cpp_lib_native}
+ DEPENDS "cpp_${package}"
+ COMMENT "Creating implib ${lib_name}"
+ )
+ add_custom_command(
+ OUTPUT "${lib}"
+ COMMAND "${DC}"
+ ARGS -lib ${d_objs} ${d_implib} -of${lib}
+ DEPENDS ${d_objs} ${d_implib}
+ COMMENT "Linking ${lib_name}"
+ )
+ install(FILES ${cpp_lib} DESTINATION lib)
+ else(${CMAKE_SYSTEM_NAME} STREQUAL Linux)
+ set_property(TARGET cpp_${package} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles)
+ foreach(cpp_source ${cpp_sources})
+ set(cpp_source ${cpp_source})
+ obj_path(cpp_source)
+ set(cpp_objs ${cpp_objs} CMakeFiles/cpp_${package}.dir/${cpp_source}${CMAKE_CXX_OUTPUT_EXTENSION})
+ endforeach(cpp_source)
+ add_custom_command(
+ OUTPUT "${lib}"
+ COMMAND "${CMAKE_AR}"
+ ARGS rcs ${lib} ${d_objs} ${cpp_objs}
+ DEPENDS ${d_objs} cpp_${package}
+ COMMENT "Linking ${lib_name}"
+ )
+ endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
+ install(FILES ${CMAKE_BINARY_DIR}/${lib} DESTINATION lib)
- ## Dependences.
- add_dependencies(cpp_${package} dgen)
- add_custom_target(${package} DEPENDS ${lib})
- foreach(depend ${depends})
- add_dependencies(cpp_${package} cpp_${depend})
- add_dependencies(${package} ${depend})
- endforeach(depend ${depends})
- add_dependencies(allpackages ${package})
- set(depends ${depends} ${package})
-
- ## Paths for QtD libs. Needed by examples.
- if(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
- set(libs_path ${CMAKE_BINARY_DIR}/lib/qtd${package}.lib)
- make_native_path(libs_path)
- set(${package}_lib_param -L+${libs_path})
- foreach(link ${link_example})
- set(link ${CMAKE_SOURCE_DIR}/lib/${link}.lib)
- make_native_path(link)
- set(link -L+${link})
- set(${package}_lib_param ${${package}_lib_param} ${link})
- endforeach(link ${link_example})
- else (${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
- set(${package}_lib_param -L-lqtd${package} -L-lQt${package_big})
- foreach(link ${link_example})
- set(${package}_lib_param ${${package}_lib_param} ${link})
- endforeach(link ${link_example})
- endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
+ ## Paths for QtD libs. Needed by examples.
+ if(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
+ set(libs_path ${CMAKE_BINARY_DIR}/lib/qtd${package}.lib)
+ make_native_path(libs_path)
+ set(${package}_lib_param -L+${libs_path})
+ foreach(link ${link_example})
+ set(link ${CMAKE_SOURCE_DIR}/lib/${link}.lib)
+ make_native_path(link)
+ set(link -L+${link})
+ set(${package}_lib_param ${${package}_lib_param} ${link})
+ endforeach(link ${link_example})
+ else (${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
+ set(${package}_lib_param -L-lqtd${package} -L-lQt${package_big})
+ foreach(link ${link_example})
+ set(${package}_lib_param ${${package}_lib_param} ${link})
+ endforeach(link ${link_example})
+ endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
- if(GENERATE_DI_FILES)
- 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")
- foreach(source ${d_sources})
- # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
- # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
- string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}")
- string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}")
- set(interface_file_path ${CMAKE_BINARY_DIR}/d/${inc_path})
- set(interface_file "${interface_file_path}/${file_name}.di")
- if(NOT "${file_name}" STREQUAL "QGlobal")
- add_custom_command(OUTPUT "${interface_file}"
- COMMAND "${DC}"
- ARGS ${D_FLAGS} -o- -H -Hd${interface_file_path} ${source}
- COMMENT "Generating header for ${source}"
- DEPENDS ${source}
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- )
- else(NOT "${file_name}" STREQUAL "QGlobal") ## DMD frontend crash on this file.
- add_custom_command(OUTPUT "${interface_file}"
- COMMAND ${CMAKE_COMMAND} -E make_directory ${interface_file_path}
- COMMAND ${CMAKE_COMMAND} -E remove -f ${interface_file}
- COMMAND ${CMAKE_COMMAND} -E copy ${source} ${interface_file}
- COMMENT ""
- DEPENDS ${source}
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- )
- endif(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES)
- set(interfaces_list ${interfaces_list} ${interface_file_path}/${file_name}.di)
- install(FILES ${interface_file} DESTINATION include/d/${inc_path})
- endforeach(source)
- endif(GENERATE_DI_FILES)
+ if(GENERATE_DI_FILES)
+ 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")
+ foreach(source ${d_sources})
+ # find_file(source ${source} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
+ # ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
+ string(REGEX REPLACE ${regexp_str} "\\2" inc_path "${source}")
+ string(REGEX REPLACE ${regexp_str} "\\3" file_name "${source}")
+ set(interface_file_path ${CMAKE_BINARY_DIR}/d/${inc_path})
+ set(interface_file "${interface_file_path}/${file_name}.di")
+ if(NOT "${file_name}" STREQUAL "QGlobal")
+ add_custom_command(OUTPUT "${interface_file}"
+ COMMAND "${DC}"
+ ARGS ${D_FLAGS} -o- -H -Hd${interface_file_path} ${source}
+ COMMENT "Generating header for ${source}"
+ DEPENDS ${source}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+ else(NOT "${file_name}" STREQUAL "QGlobal") ## DMD frontend crash on this file.
+ add_custom_command(OUTPUT "${interface_file}"
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${interface_file_path}
+ COMMAND ${CMAKE_COMMAND} -E remove -f ${interface_file}
+ COMMAND ${CMAKE_COMMAND} -E copy ${source} ${interface_file}
+ COMMENT ""
+ DEPENDS ${source}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ )
+ endif(NOT "${file_name}" STREQUAL "QGlobal" AND GENERATE_DI_FILES)
+ set(interfaces_list ${interfaces_list} ${interface_file_path}/${file_name}.di)
+ install(FILES ${interface_file} DESTINATION include/d/${inc_path})
+ endforeach(source)
+ endif(GENERATE_DI_FILES)
+ endif("${all_req_found}" EQUAL 1)
endforeach(package_big ${packages_big})
if(GENERATE_DI_FILES)
add_custom_target(generate_headers ALL DEPENDS ${interfaces_list})
endif(GENERATE_DI_FILES)
+## Dependences.
+foreach(package ${packages})
+ add_dependencies(cpp_${package} dgen)
+ add_custom_target(${package} DEPENDS ${lib})
+ foreach(depend ${required})
+ string(TOLOWER ${depend} depend)
+ add_dependencies(cpp_${package} cpp_${depend})
+ add_dependencies(${package} ${depend})
+ endforeach(depend ${required})
+ add_dependencies(allpackages ${package})
+endforeach(package ${packages})
+
+add_subdirectory(generator)
+add_sources_for_generating(${files_for_gen})
+
##--------------------------------------------
## Build other parts of the QtD.
##--------------------------------------------
diff -r 6873e4b22c08 -r a9626891eca6 build/core.txt
--- a/build/core.txt Fri May 15 13:38:09 2009 +0000
+++ b/build/core.txt Fri May 15 16:42:02 2009 +0000
@@ -1,5 +1,3 @@
-## Libraries linked to the cpp part (is active only if CPP_SHARED == true).
-set (link_cpp ${QT_QTCORE_LIBRARY})
## Module specific cpp files.
set (cpp_files qt_qtd/qtd_core qt_qtd/ArrayOpsPrimitive_shell
qt_core/QPoint_shell qt_core/QPointF_shell
diff -r 6873e4b22c08 -r a9626891eca6 build/gui.txt
--- a/build/gui.txt Fri May 15 13:38:09 2009 +0000
+++ b/build/gui.txt Fri May 15 16:42:02 2009 +0000
@@ -1,4 +1,4 @@
-set(link_cpp cpp_core ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
+set(required Core)
set(classes
QPushButton
QFileIconProvider
diff -r 6873e4b22c08 -r a9626891eca6 build/opengl.txt
--- a/build/opengl.txt Fri May 15 13:38:09 2009 +0000
+++ b/build/opengl.txt Fri May 15 16:42:02 2009 +0000
@@ -1,4 +1,4 @@
-set(link_cpp cpp_core cpp_gui ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY})
+set(required Core Gui)
set(classes
QGLWidget
QGLContext
diff -r 6873e4b22c08 -r a9626891eca6 generator/CMakeLists.txt
--- a/generator/CMakeLists.txt Fri May 15 13:38:09 2009 +0000
+++ b/generator/CMakeLists.txt Fri May 15 16:42:02 2009 +0000
@@ -183,26 +183,84 @@
add_executable(generator ${all_srcs} )
target_link_libraries(generator ${libs})
-foreach(package ${packages})
- set(gen_sources ${gen_sources} ${CMAKE_SOURCE_DIR}/generator/typesystem_${package}.xml
- ${CMAKE_SOURCE_DIR}/generator/typesystem_${package}-java.java)
-endforeach(package ${packages})
+macro(add_dgen_target package)
+ string(TOLOWER ${package} package)
+ set(dgen_build_conf ${CMAKE_BINARY_DIR}/CMakeFiles/built_${package}.txt)
+ set(dgen_build_conf_req ${CMAKE_BINARY_DIR}/CMakeFiles/built_${package}_with_req.txt)
+ file(REMOVE ${dgen_build_conf})
+ file(REMOVE ${dgen_build_conf_req})
+ file(APPEND ${dgen_build_conf} "\n")
+ file(APPEND ${dgen_build_conf_req} "\n")
+ foreach(req ${ARGN})
+ string(TOLOWER ${req} req_lower)
+ file(APPEND ${dgen_build_conf} " \n")
+ file(APPEND ${dgen_build_conf_req} " \n")
+ endforeach(req ${ARGN})
+
+ if(${package} STREQUAL "all")
+ foreach(pack ${ARGN})
+ set(dgen_impl ${CMAKE_BINARY_DIR}/cpp/qt_${pack}/metainfo.cpp) ## Temporary
+ break(pack ${ARGN})
+ endforeach(pack ${ARGN})
+ else(${package} STREQUAL "all")
+ set(dgen_impl ${CMAKE_BINARY_DIR}/cpp/qt_${package}/qt_${package}.pri)
+ set(gen_sources ${gen_sources} ${CMAKE_SOURCE_DIR}/generator/typesystem_${package}.xml
+ ${CMAKE_SOURCE_DIR}/generator/typesystem_${package}-java.java)
+ file(APPEND ${dgen_build_conf} " \n")
+ file(APPEND ${dgen_build_conf_req} " \n")
+ endif(${package} STREQUAL "all")
+
+ file(APPEND ${dgen_build_conf} "\n")
+ file(APPEND ${dgen_build_conf_req} "\n")
-foreach(package ${packages})
- set(dgen_impl ${CMAKE_BINARY_DIR}/cpp/qt_${package}/qt_${package}.pri)
- break(package ${packages})
-endforeach(package ${packages})
+ foreach(pack ${ARGN})
+ string(TOLOWER ${pack} pack_lower)
+ set(gen_sources ${gen_sources} ${CMAKE_SOURCE_DIR}/generator/typesystem_${pack_lower}.xml
+ ${CMAKE_SOURCE_DIR}/generator/typesystem_${pack_lower}-java.java)
+ endforeach(pack ${ARGN})
+
+ add_custom_command(OUTPUT ${dgen_impl}
+ COMMAND ${CMAKE_COMMAND} -E remove -f ${dgen_impl}
+ COMMAND "generator"
+ ARGS ${GEN_OPT} --no-repreprocess --qt-include-directory=${QT_INCLUDE_DIR} --output-directory=./
+ --source-directory=${CMAKE_SOURCE_DIR}/generator
+ qtjambi_masterinclude.h
+ ${dgen_build_conf}
+ COMMENT "Generating binding..."
+ DEPENDS generator ${gen_sources}
+ )
+ add_custom_target(dgen_${package} DEPENDS ${dgen_impl} COMMENT "")
+endmacro(add_dgen_target target package required)
+
+foreach(pack ${packages})
+ set(dgen_impl ${CMAKE_BINARY_DIR}/cpp/qt_${pack}/qt_${pack}.pri)
+ break(pack ${packages})
+endforeach(pack ${packages})
+
+foreach(pack ${packages})
+ set(gen_typesystem ${gen_typesystem} ${CMAKE_SOURCE_DIR}/generator/typesystem_${pack}.xml)
+ set(gen_sources ${gen_sources} ${CMAKE_SOURCE_DIR}/generator/typesystem_${pack}-java.java)
+endforeach(pack ${packages})
+
+
+set(dgen_build_conf ${CMAKE_BINARY_DIR}/CMakeFiles/built.txt)
+file(REMOVE ${dgen_build_conf})
+file(APPEND ${dgen_build_conf} "\n")
+foreach(package ${packages})
+ file(APPEND ${dgen_build_conf} " \n")
+endforeach(package ${packages})
+file(APPEND ${dgen_build_conf} "\n")
add_custom_command(OUTPUT ${dgen_impl}
- COMMAND ${CMAKE_COMMAND} -E remove -f ${dgen_impl}
- COMMAND "generator"
- ARGS ${GEN_OPT} --qt-include-directory=${QT_INCLUDE_DIR} --output-directory=../
- --source-directory=${CMAKE_SOURCE_DIR}/generator
- qtjambi_masterinclude.h
- build_opengl.txt
- COMMENT "Generating binding..."
- DEPENDS generator ${gen_sources}
- )
+ COMMAND ${CMAKE_COMMAND} -E remove -f ${dgen_impl}
+ COMMAND "generator"
+ ARGS ${GEN_OPT} --qt-include-directory=${QT_INCLUDE_DIR} --output-directory=${CMAKE_BINARY_DIR}
+ --source-directory=${CMAKE_SOURCE_DIR}/generator
+ qtjambi_masterinclude.h
+ ${dgen_build_conf}
+ COMMENT "Generating binding..."
+ DEPENDS generator ${gen_typesystem} ${gen_sources}
+ )
add_custom_target(dgen DEPENDS ${dgen_impl} COMMENT "")
macro(add_sources_for_generating)
diff -r 6873e4b22c08 -r a9626891eca6 generator/typesystem.cpp
--- a/generator/typesystem.cpp Fri May 15 13:38:09 2009 +0000
+++ b/generator/typesystem.cpp Fri May 15 16:42:02 2009 +0000
@@ -1517,11 +1517,13 @@
bool TypeDatabase::parseFile(const QString &filename, const QString &source_dir, bool generate)
{
- QString name;
- if (source_dir.isEmpty())
- name = filename;
- else
+ QString name(filename);
+ QFileInfo info(name);
+ if(!info.exists())
+ {
+ Q_ASSERT(!source_dir.isEmpty());
name = source_dir + "/" + filename;
+ }
QFile file(name);
Q_ASSERT(file.exists());
QXmlInputSource source(&file);