changeset 237:62d0dce52dac

CMake: improvements && fixes
author SokoL_SD
date Mon, 20 Jul 2009 06:00:55 +0000
parents fcc0ada121e1
children 1349940724eb
files CMakeLists.txt cmake/FindD.cmake generator/CMakeLists.txt
diffstat 3 files changed, 40 insertions(+), 96 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Sun Jul 19 18:20:15 2009 +0000
+++ b/CMakeLists.txt	Mon Jul 20 06:00:55 2009 +0000
@@ -2,7 +2,7 @@
 PROJECT(qtd CXX C)
 
 ##########################################################
-## Building generator and settings.
+## Building generator && settings.
 ##########################################################
 if(NOT SECOND_RUN)
 
@@ -60,7 +60,7 @@
     #add_definitions(-UNO_DEBUG)
 endif(${CMAKE_BUILD_TYPE} MATCHES [rR][eE][lL][eE][aA][sS] )
 
-# System specifc settings.
+# System specific settings.
 if(CMAKE_HOST_WIN32)
     set(implib implib)
     find_program(IMPLIB ${implib})
@@ -102,7 +102,7 @@
 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
+	COMMAND cd  ARGS ${cd_path} && ${CMAKE_COMMAND} -G${CMAKE_GENERATOR} -DSECOND_RUN=1 ${CMAKE_SOURCE_DIR} && ${make_util}
 	COMMENT ""	
 	)  
 
@@ -182,7 +182,7 @@
 ##--------------------------------------------
 
 macro(load_generated_classes )
-    include(cpp/qt_${package}/qt_${package}.txt)
+    include(${CMAKE_BINARY_DIR}/cpp/qt_${package}/qt_${package}.txt)
 endmacro(load_generated_classes )
 
 macro(qtd_add_resource output)
@@ -303,7 +303,8 @@
     #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)
+    add_dependencies(examples ${name})
+    add_dependencies(${name} allpackages tools)
 endmacro(build_example sources)
 
 ##--------------------------------------------
@@ -529,19 +530,21 @@
     add_custom_target(generate_headers ALL DEPENDS ${interfaces_list})
 endif(GENERATE_DI_FILES)
 
-
 set(CPACK_COMPONENTS_ALL qtd qtd_tools)
 
 ##--------------------------------------------
 ## Build other parts of the QtD.
 ##--------------------------------------------
-add_custom_target(tools ALL)
+
 if(BUILD_TOOLS)
+    add_custom_target(tools ALL)
     add_subdirectory(tools)
     add_dependencies(tools drcc duic)
 endif(BUILD_TOOLS)
 
 if(BUILD_EXAMPLES)
+    add_custom_target(examples ALL)
+    add_dependencies(examples allpackages tools)
     add_subdirectory(demos)
     add_subdirectory(examples)
 endif(BUILD_EXAMPLES)
--- a/cmake/FindD.cmake	Sun Jul 19 18:20:15 2009 +0000
+++ b/cmake/FindD.cmake	Mon Jul 20 06:00:55 2009 +0000
@@ -488,7 +488,7 @@
 endmacro(add_d_shared_lib name)
 
 ## Add library target.
-## Library would shared if it supported.
+## Library will shared if it supported.
 macro(add_d_lib name)
     if(D_IS_MARS)
 	add_d_target(${name} TYPE STATIC ${ARGN})
@@ -498,19 +498,37 @@
 endmacro(add_d_lib name)
 
 ## 
-macro(get_imported_files imported)
+macro(get_imported_files_old imported)
     execute_process(COMMAND ${DC} -c -o- -v ${compile_flags_tmp} ${ARGN}
                   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                   OUTPUT_VARIABLE dc_output_tmp
 		  
     )
     string(REGEX MATCHALL "import[^\\(]*([^\\)]*)" dc_output_tmp "${dc_output_tmp}")
+    
+    ## Initial filter.
+    regex_safe_string(tmp ${CMAKE_CURRENT_SOURCE_DIR})
+    regex_safe_string(tmp2 ${CMAKE_CURRENT_BINARY_DIR})
+    set(regex_includes_tmp ${tmp}|${tmp2})
+
     set(${imported})
     foreach(import_tmp ${dc_output_tmp})
+	## Getting a next import.
 	string(REGEX REPLACE "import[^\\(]*\\(([^\\)]*)" "\\1" import_tmp ${import_tmp})
-	set(${imported} ${${imported}} ${import_tmp})
+	## Filtering.
+	file(TO_CMAKE_PATH import_tmp ${import_tmp})	
+	string(REGEX MATCH "(${regex_includes_tmp})[^/]*" found "${import_tmp}")	
+	string(SUBSTRING "${import_tmp}" 0 1 first_sym_tmp)
+	set(full_path_tmp)
+	if(${first_sym_tmp} STREQUAL "/")
+	    set(full_path_tmp 1)
+	endif(${first_sym_tmp} STREQUAL "/")
+	if(NOT found AND full_path_tmp)
+	else(NOT found AND full_path_tmp)
+	    set(${imported} ${${imported}} ${import_tmp})	    
+	endif(NOT found AND full_path_tmp)	
     endforeach(import_tmp ${dc_output_tmp})
-endmacro(get_imported_files imported)
+endmacro(get_imported_files_old imported)
 
 macro(filter_paths result)
     set(${result})
@@ -561,7 +579,7 @@
 endmacro(filter_paths )
 
 macro(get_files_depends out)
-    get_imported_files(${out} ${ARGN})
-    filter_paths(${out} ${${out}} INCLUDE_CURRENT_DIR INCLUDE_PATHS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
+    get_imported_files_old(${out} ${ARGN})
+    #filter_paths(${out} ${${out}} INCLUDE_CURRENT_DIR INCLUDE_PATHS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
     set(${out} ${ARGN} ${${out}})
 endmacro(get_files_depends out)
\ No newline at end of file
--- a/generator/CMakeLists.txt	Sun Jul 19 18:20:15 2009 +0000
+++ b/generator/CMakeLists.txt	Mon Jul 20 06:00:55 2009 +0000
@@ -207,93 +207,16 @@
 #    add_precompiled_header(generator ${CMAKE_CURRENT_SOURCE_DIR}/generator_pch.h)
 #ENDIF(NOT USEPCH)
 
-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)
+if(NOT "${packages_in_build_txt}" STREQUAL "${packages}")
+    set(dgen_build_conf ${CMAKE_BINARY_DIR}/CMakeFiles/build.txt)
     file(REMOVE ${dgen_build_conf})
-    file(REMOVE ${dgen_build_conf_req})
     file(APPEND ${dgen_build_conf} "<typesystem>\n")
-    file(APPEND ${dgen_build_conf_req} "<typesystem>\n")
-    foreach(req ${ARGN})
-	string(TOLOWER ${req} req_lower)
-	file(APPEND ${dgen_build_conf} "	<load-typesystem name=\"typesystem_${req_lower}.xml\" generate=\"no\" />\n")
-	file(APPEND ${dgen_build_conf_req} "	<load-typesystem name=\"typesystem_${req_lower}.xml\" generate=\"yes\" />\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)
+    foreach(package ${packages})
 	file(APPEND ${dgen_build_conf} "	<load-typesystem name=\"typesystem_${package}.xml\" generate=\"yes\" />\n")
-	file(APPEND ${dgen_build_conf_req} "	<load-typesystem name=\"typesystem_${package}.xml\" generate=\"yes\" />\n")
-    endif(${package} STREQUAL "all")
-
+    endforeach(package ${packages})
     file(APPEND ${dgen_build_conf} "</typesystem>\n")
-    file(APPEND ${dgen_build_conf_req} "</typesystem>\n")
-
-    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(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/build.txt)
-file(REMOVE ${dgen_build_conf})
-file(APPEND ${dgen_build_conf} "<typesystem>\n")
-foreach(package ${packages})
-    file(APPEND ${dgen_build_conf} "	<load-typesystem name=\"typesystem_${package}.xml\" generate=\"yes\" />\n")
-endforeach(package ${packages})
-file(APPEND ${dgen_build_conf} "</typesystem>\n")
-
-# macro(add_sources_for_generating)	
-#     set(parameters_list_file ${CMAKE_BINARY_DIR}/CMakeFiles/dgen_parameters)
-#     if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)	
-# 	file(REMOVE ${parameters_list_file})
-# 	foreach(arg ${ARGN})
-# 	    file(APPEND ${parameters_list_file} "${arg}\n")
-# 	endforeach(arg)
-# 	set(param @${parameters_list_file})
-#     elseif(${CMAKE_SYSTEM_NAME} STREQUAL Linux)
-# 	set(param ${parameters})
-#     endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
-#     foreach(dgen_impl ${ARGN})
-# 	add_custom_command(OUTPUT ${dgen_impl}
-# 			    COMMAND ${CMAKE_COMMAND} -E remove -f ${param}
-# 			    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  
-# 							${CMAKE_BINARY_DIR}/CMakeFiles/build.txt
-# 			    COMMENT "Generating binding..."
-# 			    DEPENDS  generator ${gen_typesystem} ${gen_sources} 
-# 			)
-#     endforeach(dgen_impl ${ARGN})
-#     add_custom_target(dgen DEPENDS ${ARGN})
-# endmacro(add_sources_for_generating)
+    set(packages_in_build_txt ${packages} CACHE INTERNAL "")
+endif(NOT "${packages_in_build_txt}" STREQUAL "${packages}")
 
 set(gen_sources)
 foreach(package ${packages})