changeset 59:17165763b300

CMake: build QtD tools.
author SokoL_SD
date Tue, 19 May 2009 08:30:31 +0000
parents 423e4afb245c
children fbf7881c8b0f
files CMakeLists.txt demos/interview/CMakeLists.txt examples/opengl/hellogl/CMakeLists.txt tools/duic/CMakeLists.txt
diffstat 4 files changed, 71 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Tue May 19 02:53:25 2009 +0000
+++ b/CMakeLists.txt	Tue May 19 08:30:31 2009 +0000
@@ -10,6 +10,7 @@
 
 ## Options.
 option(BUILD_EXAMPLES "Build examples" "ON")
+option(BUILD_TOOLS "Build tools" "ON")
 option(GENERATE_DI_FILES "Generate *.di files with DC -H command" "OFF")
 
 set(all_packages Core Gui OpenGL Xml Svg Network WebKit) ## TODO: Loading.
@@ -157,6 +158,9 @@
 set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ./)
 set(GEN_OPT ${GEN_OPT} --d-target=${D_TARGET})
 
+## Bootstrap settings for tools.
+set(DRCC ${CMAKE_BINARY_DIR}/tools/drcc/drcc)
+
 ##--------------------------------------------
 ## Macroses and functions.
 ##--------------------------------------------
@@ -266,6 +270,28 @@
     add_custom_target(${target} DEPENDS "${${objects_list}}")
 endmacro(compile_d_files objects_list)
 
+macro(qtd_add_resource name output)
+    set(${output})
+    foreach(res "${ARGN}")
+	## Test input file exists.
+	get_filename_component(res_path ${res} PATH)
+	get_filename_component(res_name ${res} NAME_WE)
+	get_filename_component(res_ext ${res} EXT)
+	#if(NOT ${req_ext} STREQUAL "qrc")	
+	#    get_filename_component(res_name ${res} NAME_WE)
+	#endif(NOT ${req_ext} STREQUAL "qrc")
+	set(out ${CMAKE_CURRENT_BINARY_DIR}/${res_path}qrc_${res_name}.d)
+	add_custom_command(OUTPUT "${out}"
+		    COMMAND "${DRCC}"
+		    ARGS  -name ${name} ${res} -o ${out} 
+		    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+		    DEPENDS ${res}
+		    COMMENT "Compile QtD resource ${res}"
+		    )
+	set(${output} ${${output}} ${out})
+    endforeach(res "${ARGN}") 
+endmacro(qtd_add_resource output)
+
 ## Build example macro.
 ## name -- example name.
 ## Options:
@@ -275,39 +301,43 @@
 ## Usage:
 ##	build_example(ExampleName PACKAGES QtCore QtGui QtXml  main.d another_d_file.d)
 macro(build_example name)
-    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}")	
-	    if(${param_package} STREQUAL ${param})
-		set(is_libs)
-		set(is_sources 1)
-	    else(${param_package} STREQUAL ${param})
-		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(reqs)
-	      else(${param} STREQUAL PACKAGES)
-		  set(is_sources 1)
-	      endif(${param} STREQUAL PACKAGES)	      
-	  endif(NOT is_sources)	
-	  if(is_sources)
-	      set(sources ${sources} ${param})
-	  endif(is_sources)  
-	endif(NOT is_libs)
-    endforeach(param ${ARGN})
-    compile_d_files(${name}_dobjs objects ${sources} )
+    set(type_dat SOURCES)
+    set(RESOURCES)
+    set(SOURCES)
+    set(PACKAGES)
+    ## Parse parameters list.
+    set(params_dat RESOURCES SOURCES PACKAGES)
+    foreach(arg_dat ${ARGN})
+	set(founded_type_dat)
+	foreach(param_dat ${params_dat})
+	    if(${arg_dat} STREQUAL ${param_dat})		
+		set(type_dat ${param_dat})
+		set(founded_type_dat 1)
+		break(${arg_dat} STREQUAL ${param_dat})
+	    endif(${arg_dat} STREQUAL ${param_dat})
+	endforeach(param_dat ${params_dat})	
+	if(NOT founded_type_dat)
+	    set(${type_dat} ${${type_dat}} ${arg_dat})
+	endif(NOT founded_type_dat)
+    endforeach(arg_dat ${ARGN})
+    if(NOT PACKAGES)
+	set(PACKAGES QtCore QtGui)
+    endif(NOT PACKAGES)
+    ## TODO: Tools building is acitve???    
+    if(RESOURCES)
+	if(NOT BUILD_TOOLS)
+	    message(STATUS "Example '${name}' required drcc. Example will not build")
+	    return(build_example name)
+	endif(NOT BUILD_TOOLS)
+	qtd_add_resource(${name} res_sources ${RESOURCES})
+    endif(RESOURCES)
+    compile_d_files(${name}_dobjs objects ${SOURCES} ${res_sources})
     set(output ${CMAKE_CURRENT_BINARY_DIR}/${name}${CMAKE_EXECUTABLE_SUFFIX})
     set(output_native ${output})
     make_native_path(output_native)
-    foreach(req ${reqs})
+    foreach(package ${PACKAGES})
+	string(REGEX REPLACE "Qt([A-Za-z0-9])" "\\1" req "${package}")
 	set(is_founded)
 	foreach(package_big ${packages_big})
 	    string(TOLOWER ${package_big} package)  		
@@ -322,7 +352,7 @@
 	else(NOT is_founded)
 	      set(qtd_libs ${${package}_lib_param} ${qtd_libs})
 	endif(NOT is_founded)	
-    endforeach(req ${reqs})
+    endforeach(package ${PACKAGES})
     add_custom_command(OUTPUT "${output}"
 		    COMMAND "${DC}"
 		    ARGS ${D_FLAGS} ${libs_path} ${qtd_libs} ${objects} 
@@ -344,7 +374,7 @@
 ##--------------------------------------------
 
 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
-add_custom_target(allpackages ALL)
+add_custom_target(allpackages)
 link_directories(${CMAKE_BINARY_DIR}/CMakeFiles)
 
 foreach(package_big ${all_packages})
@@ -589,6 +619,12 @@
 ##--------------------------------------------
 ## Build other parts of the QtD.
 ##--------------------------------------------
+add_custom_target(tools ALL)
+if(BUILD_TOOLS)
+    add_subdirectory(tools)
+    add_dependencies(tools drcc duic)
+endif(BUILD_TOOLS)
+
 if(BUILD_EXAMPLES)
     add_subdirectory(demos)
     add_subdirectory(examples)
--- a/demos/interview/CMakeLists.txt	Tue May 19 02:53:25 2009 +0000
+++ b/demos/interview/CMakeLists.txt	Tue May 19 08:30:31 2009 +0000
@@ -1,1 +1,1 @@
- build_example(interview main.d model.d)
+ build_example(interview main.d model.d RESOURCES interview.qrc)
--- a/examples/opengl/hellogl/CMakeLists.txt	Tue May 19 02:53:25 2009 +0000
+++ b/examples/opengl/hellogl/CMakeLists.txt	Tue May 19 08:30:31 2009 +0000
@@ -1,2 +1,2 @@
 build_example(hellogl PACKAGES QtCore QtGui QtOpenGL 
-  main.d window.d glwidget.d)
\ No newline at end of file
+  SOURCES main.d window.d glwidget.d)
\ No newline at end of file
--- a/tools/duic/CMakeLists.txt	Tue May 19 02:53:25 2009 +0000
+++ b/tools/duic/CMakeLists.txt	Tue May 19 08:30:31 2009 +0000
@@ -28,7 +28,7 @@
 set_target_properties(duic PROPERTIES OUTPUT_NAME duic)
 set_target_properties(duic PROPERTIES COMPILE_FLAGS -DQT_UIC_D_GENERATOR)
 
-target_link_libraries(duic  ${QT_QTCORE_LIBRARY} ${QT_QTXML_LIBRARY} )
+target_link_libraries(duic  ${QT_QTCORE_LIBRARY} ${QT_QTXML_LIBRARY})
 
-install(TARGETS duic DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
+install(TARGETS duic DESTINATION ${CMAKE_INSTALL_PREFIX}/bin  COMPONENT qtd_tools)