changeset 7:b8a79f9fba5a

More fixes and cleanups in CMake build script.
author SokoL_SD
date Thu, 14 May 2009 08:36:04 +0000
parents 374a61671448
children c0c94c0066fa
files CMakeLists.txt build/core.txt build/gui.txt build/opengl.txt build/svg.txt generator/CMakeLists.txt
diffstat 6 files changed, 221 insertions(+), 220 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Wed May 13 23:40:31 2009 +0000
+++ b/CMakeLists.txt	Thu May 14 08:36:04 2009 +0000
@@ -2,27 +2,30 @@
 PROJECT(qtd CXX C)
 FIND_PACKAGE(Qt4 REQUIRED)
 
+##--------------------------------------------
+## Settings.
+##--------------------------------------------
+
 include_directories(${QT_INCLUDES} include ${CMAKE_CURRENT_BINARY_DIR}/include)
 
+## Options.
 option(BUILD_QT_OPENGL "Build QtOpenGL" "ON")
 option(BUILD_EXAMPLES "Build examples" "ON")
 
-set(PACKAGES Core Gui)
+## Packages list.
+set(packages_big Core Gui)
 if(BUILD_QT_OPENGL)
-    set(PACKAGES ${PACKAGES} OpenGL)
+    set(packages_big ${packages_big} OpenGL)
 endif(BUILD_QT_OPENGL)
 
-set(packages_big ${PACKAGES})
 set(packages)
 foreach(package ${packages_big})
     string(TOLOWER ${package} package)
     set(packages ${packages} ${package})
 endforeach(package ${packages_big})
 
-#set(CMAKE_LIBRARY_OUTPUT_DIRECTORY CMakeFiles)
-
+## Find D compiler and parsing its version.
 find_program(DC dmd ldc)
-## Parsing D compiler version.
 if (DC)   
     exec_program(${DC} ARGS "" OUTPUT_VARIABLE d_output)   
     string(REGEX MATCH "Digital Mars D Compiler v[0-9]\\.[0-9]+" dmd_version "${d_output}")
@@ -54,6 +57,12 @@
     message(FATAL_ERROR "D compliler not founded")
 endif (DC)
 
+if(D_IS_MARS)
+    option(COMBINED_OBJECT_FILE "Build all d sources to one object file" "ON")
+elseif(D_IS_LLVM)
+    option(COMBINED_OBJECT_FILE "Build all d sources to one object file" "OFF")
+endif(D_IS_MARS)
+
 # Check D compiler version
 if(D_VERSION EQUAL "1")
     if (D_FRONTEND LESS "041")
@@ -64,12 +73,6 @@
     set(D_TARGET ) ## TODO: hm... I don`t known this parameter for D2 ^(
 endif(D_VERSION EQUAL "1")
 
-if(D_IS_MARS)
-    set(SEPARETLY_D_OBJECTS true)
-elseif(D_IS_LLVM)
-    set(SEPARETLY_D_OBJECTS true)
-endif(D_IS_MARS)
-
 # Debug and release flags.
 if (${CMAKE_BUILD_TYPE} MATCHES [dD][eE][bB][uU][gG])
    #set(CMAKE_BUILD_TYPE Debug)
@@ -86,16 +89,10 @@
     endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows)   
 endif (${CMAKE_BUILD_TYPE} MATCHES [dD][eE][bB][uU][gG])  
 set(D_FLAGS ${D_FLAGS} -I${CMAKE_BINARY_DIR} -I${CMAKE_SOURCE_DIR})
+if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL Windows AND NOT D_IS_MARS)
+    set(D_FLAGS ${D_FLAGS} -L-L${CMAKE_BINARY_DIR}/lib)
+endif(NOT ${CMAKE_SYSTEM_NAME} STREQUAL Windows AND NOT D_IS_MARS)
 
-MACRO(MAKE_WINDOWS_PATH pathname)
-    if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
-	# An extra \\ escape is necessary to get a \ through CMake's processing.
-	STRING(REPLACE "/" "\\" ${pathname} "${${pathname}}")
-	# Enclose with UNESCAPED quotes.  This means we need to escape our
-	# quotes once here, i.e. with \"
-	SET(${pathname} \"${${pathname}}\")
-    endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 
-ENDMACRO(MAKE_WINDOWS_PATH)
 
 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
     set(implib implib)
@@ -113,6 +110,7 @@
     endif(D_IS_MARS)
     set(GEN_OPT ${GEN_OPT} --cpp_shared)
     add_definitions(-DCPP_SHARED)
+    string(REGEX REPLACE ".dll([A-Za-z\\.0-9]+)" "\\1" CMAKE_IMPORT_LIBRARY_SUFFIX "${CMAKE_IMPORT_LIBRARY_SUFFIX}")
 elseif(${CMAKE_SYSTEM_NAME} STREQUAL Linux) 
     set(D_LIB_SUFFIX .a)
     set(D_LIB_PREFIX lib)
@@ -122,8 +120,36 @@
 set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ./)
 set(GEN_OPT ${GEN_OPT} --d-target=${D_TARGET})
 
-add_subdirectory(generator)
+##--------------------------------------------
+## Macroses and functions.
+##--------------------------------------------
 
+## Make native path.
+## Usage:
+##	set(path c:/file_path/file_name.cpp)
+##	make_native_path(path)
+##	message(STATUS ${path})
+## Output:
+##	-- "c:\file_path\file_name.cpp"
+## Command "file(TO_NATIVE_PATH ...)" is wrong on Windows
+macro(MAKE_NATIVE_PATH pathname)
+    if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
+	# An extra \\ escape is necessary to get a \ through CMake's processing.
+	string(REPLACE "/" "\\" ${pathname} "${${pathname}}")
+	# Enclose with UNESCAPED quotes.  This means we need to escape our
+	# quotes once here, i.e. with \"
+	set(${pathname} \"${${pathname}}\")
+    endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 
+endmacro(MAKE_NATIVE_PATH)
+
+## Remove unnecessary travel to the object file.
+## path -- path to object file.
+## Example:
+##	set(path ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/target.dir/main.d.obj)
+##	obj_path(path)
+##	message(STATUS ${path})
+## Example output:
+##	-- CMakeFiles/target.dir/main.d.obj
 macro(OBJ_PATH path)
     unset(test)
     string(REGEX MATCH "${CMAKE_CURRENT_BINARY_DIR}/.*" test "${${path}}")    
@@ -145,36 +171,46 @@
     endif(NOT ${test} EQUAL "")
 endmacro(OBJ_PATH)
 
+
+## Compile d files.
+## target -- name of a new target.
+## objects_list -- created object files.
+## params -- sources files.
 macro(compile_d_files target objects_list)
     unset(${objects_list})
     set(tmp_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target}.dir)
     file(MAKE_DIRECTORY ${tmp_dir})
-    if(${SEPARETLY_D_OBJECTS})
-	foreach (d_source ${ARGN})
-	    OBJ_PATH(d_source)
+    if(NOT COMBINED_OBJECT_FILE)
+	foreach (d_source_p ${ARGN})
+	    ## TODO: why find_file command work wrong?
+	    find_file(d_source_p ${d_source_p} PATHS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
+		  ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR})
+	    set (d_source ${d_source_p})
+	    obj_path(d_source)
 	    set(d_obj ${tmp_dir}/${d_source}${D_OBJECT_SUFFIX})
-	    set(${objects_list} ${${objects_list} ${d_obj})
+	    set(${objects_list} ${${objects_list}} ${d_obj})
 	    get_filename_component(path ${d_obj} PATH)	    
 	    file(MAKE_DIRECTORY ${path})
 	    set(d_obj_out ${d_obj})
-	    OBJ_PATH(d_obj_out)
+	    obj_path(d_obj_out)
 	    add_custom_command(OUTPUT "${d_obj}"
 		    COMMAND "${DC}"
-		    ARGS ${D_FLAGS} -c ${d_source} -of${d_obj}
+		    ARGS ${D_FLAGS} -c ${d_source_p} -of${d_obj}
 		    COMMENT "Building ${d_obj_out}"
-		    DEPENDS ${d_source}
+		    DEPENDS ${d_source_p}
+		    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
 		    )
-	endforeach(d_source)
-    else(${SEPARETLY_D_OBJECTS})
+	endforeach(d_source_p)
+    else(NOT COMBINED_OBJECT_FILE)
 	set(${objects_list} ${tmp_dir}/${target}${D_OBJECT_SUFFIX})
 	set(d_obj_out ${${objects_list}})
-	OBJ_PATH(d_obj_out)
+	obj_path(d_obj_out)
 	set(parameters_list_file ${tmp_dir}/parameters)
-	SET (parameters ${D_FLAGS} -c ${ARGN} -of${${objects_list}})
-	FILE (REMOVE ${parameters_list_file})
-	FOREACH(arg ${parameters})
-	    FILE (APPEND ${parameters_list_file} "${arg}\n")
-	ENDFOREACH(arg)
+	set(parameters ${D_FLAGS} -c ${ARGN} -of${${objects_list}})
+	file(REMOVE ${parameters_list_file})
+	foreach(arg ${parameters})
+	    file(APPEND ${parameters_list_file} "${arg}\n")
+	endforeach(arg)
 	add_custom_command(OUTPUT "${${objects_list}}"
 		    COMMAND "${DC}"
 		    ARGS @${parameters_list_file}
@@ -182,138 +218,18 @@
 		    DEPENDS ${ARGN}
 		    COMMENT ""
 		    )
-    endif(${SEPARETLY_D_OBJECTS})
+    endif(NOT COMBINED_OBJECT_FILE)
+    add_custom_target(${target} DEPENDS "${${objects_list}}")
 endmacro(compile_d_files objects_list)
 
-file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
-add_custom_target(allpackages ALL)
-
-link_directories(${CMAKE_BINARY_DIR}/CMakeFiles)
-
-foreach(package ${packages})    
-    unset(d_objs)
-    unset(cpp_objs)
-    unset(d_sources)
-    unset(cpp_sources)
-    unset(lib_name)
-    unset(link_cpp)
-    unset(link_d)
-    unset(cpp_files)
-    unset(d_files)
-    unset(classes)
-    unset(d_generated_files)
-   
-    include (${CMAKE_SOURCE_DIR}/build/${package}.txt)    
-
-    set(${package}_link_example "${link_example}")
-    set(${link_example} "")
-
-    set(CUR_TMP_PATH CMakeFiles/${package}.dir)  
-    
-    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)	
-    endforeach(class)
-    add_sources_for_generating(${cpp_sources})
-    
-    foreach(d_source ${d_files})
-	set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d)
-    endforeach(d_source)
-    foreach(d_source ${d_generated_files})
-	set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d)
-    endforeach(d_source)
-    foreach (cpp_source ${cpp_files})
-	set(cpp_sources ${cpp_sources} ${CMAKE_SOURCE_DIR}/cpp/${cpp_source}.cpp)
-    endforeach(cpp_source)
-    
-    compile_d_files(${package}_dobjs objects  ${d_sources})
-    set(d_objs ${d_objs} ${objects}) 
-    
-    set(lib_name ${D_LIB_PREFIX}qtd${package}${D_LIB_SUFFIX})
-    
-    add_library(cpp_${package} SHARED ${cpp_sources})
-    add_dependencies(cpp_${package} dgen)
-    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)	
-	ADD_CUSTOM_COMMAND(
-	      TARGET cpp_${package}
-	      POST_BUILD
-	      COMMAND ${CMAKE_COMMAND} -E remove
-		      ${CMAKE_BINARY_DIR}/CMakeFiles/${CMAKE_IMPORT_LIBRARY_PREFIX}cpp${package}${CMAKE_IMPORT_LIBRARY_SUFFIX}
-	      COMMAND ${CMAKE_COMMAND} -E copy 
-		      ${CMAKE_BINARY_DIR}/CMakeFiles/${CMAKE_IMPORT_LIBRARY_PREFIX}cpp_${package}.dll${CMAKE_IMPORT_LIBRARY_SUFFIX}
-		      ${CMAKE_BINARY_DIR}/CMakeFiles/${CMAKE_IMPORT_LIBRARY_PREFIX}cpp${package}${CMAKE_IMPORT_LIBRARY_SUFFIX}
-	)
-
-	target_link_libraries(cpp_${package} ${link_cpp} )
-	set(cpp_lib ${CMAKE_BINARY_DIR}/lib/libcpp_${package}.dll)
-	set(cpp_lib_native ${cpp_lib})
-	MAKE_WINDOWS_PATH(cpp_lib_native)
-	set(d_implib ${CMAKE_BINARY_DIR}/CMakeFiles/${package}.dir/cpp_${package}.lib)
-	set(d_implib_native ${d_implib})
-	MAKE_WINDOWS_PATH(d_implib_native)	
-	set(cpp_${package}_implib cpp${package})
-	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_name}"
-			COMMAND "${DC}"
-			ARGS -lib ${d_objs} ${d_implib} -oflib/${lib_name}
-			DEPENDS ${d_objs} ${d_implib}
-			COMMENT "Linking ${lib_name}"
-		    )
-    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}.o)
-	endforeach(cpp_source)
-	
-	add_custom_command(
-			OUTPUT "${lib_name}"
-			COMMAND "${CMAKE_AR}"
-			ARGS rcs lib/${lib_name} ${d_objs} ${cpp_objs}
-			DEPENDS ${d_objs} cpp_${package}
-			COMMENT "Linking ${lib_name}"
-		    )
-    endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 
-    add_custom_target(${package} DEPENDS ${lib_name})
-    foreach(depend ${depends})
-	add_dependencies(cpp_${package} cpp_${depend})
-	add_dependencies(${package} ${depend})
-    endforeach(depend ${depends})
-    add_dependencies(allpackages ${package})
-    set(depends ${depends} ${package})
-endforeach(package)
-
-foreach(package_big ${packages_big})
-    string(TOLOWER ${package_big} package)  
-    if(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
-	set(libs_path ${CMAKE_BINARY_DIR}/lib/qtd${package}.lib)
-	MAKE_WINDOWS_PATH(libs_path)
-	set(${package}_lib_param -L+${libs_path})
-	foreach(link ${${package}_link_example})
-	    set(link ${CMAKE_SOURCE_DIR}/lib/${link}.lib)
-	    MAKE_WINDOWS_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)
-endforeach(package_big ${packages_big})
-
+## Build example macro.
+## name -- example name.
+## Options:
+##	PACKAGES -- list of packages to link to exaple (for example, QtCore QtGui QtOpenGL).
+##		Default value is "QtCore QtGui".
+## params -- sources d files.
+## Usage:
+##	build_example(ExampleName PACKAGES QtCore QtGui QtXml  main.d another_d_file.d)
 macro(build_example name)
     unset(is_sources)
     unset(is_libs)
@@ -354,15 +270,19 @@
 	  endif(is_sources)  
 	endif(NOT is_libs)
     endforeach(param ${ARGN})
-    if(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
-	set(libs_path )
-    else(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
-	set(libs_path -L-L${CMAKE_BINARY_DIR}/lib)
-    endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows AND D_IS_MARS)
     compile_d_files(${name}_dobjs objects ${sources} )
     set(output ${CMAKE_CURRENT_BINARY_DIR}/${name}${CMAKE_EXECUTABLE_SUFFIX})
     set(output_native ${output})
-    make_windows_path(output_native)
+    make_native_path(output_native)
+    ## Bug fix: Reverse libs for ldc.
+    if(D_IS_LLVM)
+      set(qtd_libs_tmp ${qtd_libs}) 
+      unset(qtd_libs)
+      foreach(libs ${qtd_libs_tmp})
+	  set(qtd_libs ${libs} ${qtd_libs})
+      endforeach(libs ${qtd_libs_tmp})
+    endif(D_IS_LLVM)
+
     add_custom_command(OUTPUT "${output}"
 		    COMMAND "${DC}"
 		    ARGS ${D_FLAGS} ${libs_path} ${qtd_libs} ${objects} 
@@ -375,7 +295,128 @@
     add_dependencies(example_${name} allpackages)
 endmacro(build_example sources)
 
-if(BUILD_QT_OPENGL)
+##--------------------------------------------
+## Build library.
+##--------------------------------------------
+add_subdirectory(generator)
+file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
+add_custom_target(allpackages ALL)
+link_directories(${CMAKE_BINARY_DIR}/CMakeFiles)
+
+foreach(package_big ${packages_big}) 
+    string(TOLOWER ${package_big} package) 
+    ## Loading settings for package.
+    unset(d_objs)
+    unset(cpp_objs)
+    unset(d_sources)
+    unset(cpp_sources)
+    unset(lib_name)
+    unset(link_cpp)
+    unset(link_d)
+    unset(cpp_files)
+    unset(d_files)
+    unset(classes)
+    unset(d_generated_files)
+    unset(link_example)
+    include (${CMAKE_SOURCE_DIR}/build/${package}.txt)    
+
+    ## Loading package sources list.
+    foreach(d_source ${d_files})
+	set(d_sources ${d_sources} ${CMAKE_SOURCE_DIR}/qt/${d_source}.d)
+    endforeach(d_source)
+    foreach(d_source ${d_generated_files})
+	set(d_sources ${d_sources} ${CMAKE_BINARY_DIR}/qt/${d_source}.d)
+    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)	
+    endforeach(class)
+    add_sources_for_generating(${cpp_sources})
+
+    ## Link CPP library.
+    set(lib_name ${D_LIB_PREFIX}qtd${package}${D_LIB_SUFFIX})    
+    add_library(cpp_${package} SHARED ${cpp_sources})
+
+    ## Link D library.
+    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_name}"
+			COMMAND "${DC}"
+			ARGS -lib ${d_objs} ${d_implib} -oflib/${lib_name}
+			DEPENDS ${d_objs} ${d_implib}
+			COMMENT "Linking ${lib_name}"
+		    )
+    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}.o)
+	endforeach(cpp_source)	
+	add_custom_command(
+			OUTPUT "${lib_name}"
+			COMMAND "${CMAKE_AR}"
+			ARGS rcs lib/${lib_name} ${d_objs} ${cpp_objs}
+			DEPENDS ${d_objs} cpp_${package}
+			COMMENT "Linking ${lib_name}"
+		    )
+    endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows) 
+
+    ## Dependences.
+    add_dependencies(cpp_${package} dgen)
+    add_custom_target(${package} DEPENDS ${lib_name})
+    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)
+endforeach(package_big ${packages_big}) 
+
+##--------------------------------------------
+## Build other parts of the QtD.
+##--------------------------------------------
+if(BUILD_EXAMPLES)
     add_subdirectory(demos)
     add_subdirectory(examples)
-endif(BUILD_QT_OPENGL)
\ No newline at end of file
+endif(BUILD_EXAMPLES)
\ No newline at end of file
--- a/build/core.txt	Wed May 13 23:40:31 2009 +0000
+++ b/build/core.txt	Thu May 14 08:36:04 2009 +0000
@@ -1,14 +1,11 @@
-## Qt Lib name.
-set (lib_name QtCore)
 ## Libraries linked to the cpp part (is active only if CPP_SHARED == true).
 set (link_cpp  ${QT_QTCORE_LIBRARY})
-## Libraries linked to the d part (is active only if CPP_SHARED == true)..
-set (link_d )
 ## Module specific cpp files.
 set (cpp_files qt_qtd/qtd_core qt_qtd/ArrayOpsPrimitive_shell
     qt_core/QPoint_shell qt_core/QPointF_shell
     qt_core/QSize_shell qt_core/QSizeF_shell
     qt_core/QLine_shell qt_core/QLineF_shell
+    qt_core/QRect_shell qt_core/QRectF_shell
     qt_core/QString_shell qt_core/QVariant_shell
     qt_core/QModelIndex_shell)
 ## Module specific d files.
@@ -16,6 +13,7 @@
     core/QPoint core/QPointF
     core/QSize core/QSizeF
     core/QLine core/QLineF
+    core/QRect core/QRectF
     core/QString core/QVariant
     core/QModelIndex)
 set (d_generated_files core/Qt)
@@ -28,13 +26,11 @@
 	QObject
 	QTimerEvent
 	QTranslator
-	QRect	
 	QByteArray
 	QLocale
 	QDataStream
 	QMimeData
 	QIODevice
-	QRectF
 	QDateTime
 	QDate
 	QTime
--- a/build/gui.txt	Wed May 13 23:40:31 2009 +0000
+++ b/build/gui.txt	Thu May 14 08:36:04 2009 +0000
@@ -1,20 +1,4 @@
- 
-## Qt Lib name.
-set(lib_name QtGui)
-
-## Libraries linked to the cpp part (is active only if CPP_SHARED == true).
-set(link_cpp ${cpp_core_implib} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
-
-## Libraries linked to the d part (is active only if CPP_SHARED == true)..
-set(link_d libqtdcore.a)
-
-## Module specific cpp files.
-set(cpp_files)
-
-## Module specific d files.
-set(d_files)
-
-## Classes.
+set(link_cpp cpp_core ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
 set(classes
 	QPushButton
 	QFileIconProvider
--- a/build/opengl.txt	Wed May 13 23:40:31 2009 +0000
+++ b/build/opengl.txt	Thu May 14 08:36:04 2009 +0000
@@ -1,19 +1,10 @@
-##QTD_OPENGL += opengl/QGL opengl/gl opengl/glu opengl/glfuncs opengl/gltypes
-
-## Qt Lib name.
-set(lib_name QtOpenGL)
-
-set(link_cpp ${cpp_core_implib} ${cpp_gui_implib} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY})
-
-set(link_d qtdcore)
-
+set(link_cpp cpp_core cpp_gui ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY})
 set(classes 
 	QGLWidget
 	QGLContext
 	QGLFormat
 	QGLColormap
     )
-
 if(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
   set(link_example opengl32 glu32)
 endif(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
--- a/build/svg.txt	Wed May 13 23:40:31 2009 +0000
+++ b/build/svg.txt	Thu May 14 08:36:04 2009 +0000
@@ -1,7 +1,4 @@
-set(lib_name QtSvg)
-
-set(link_cpp qtdcore_cpp ${qt_core_lib_name} ${qt_gui_lib_name})
-set(link_d qtdcore)
+set(link_cpp cpp_core ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} )
 
 set(classes
 	QSvgWidget
--- a/generator/CMakeLists.txt	Wed May 13 23:40:31 2009 +0000
+++ b/generator/CMakeLists.txt	Thu May 14 08:36:04 2009 +0000
@@ -187,14 +187,6 @@
     set(gen_sources ${gen_sources} ${CMAKE_SOURCE_DIR}/generator/typesystem_${package}.xml)
 endforeach(package ${packages})
 
-MACRO(MAKE_WINDOWS_PATH pathname)
-    # An extra \\ escape is necessary to get a \ through CMake's processing.
-    STRING(REPLACE "/" "\\" ${pathname} "${${pathname}}")
-    # Enclose with UNESCAPED quotes.  This means we need to escape our
-    # quotes once here, i.e. with \"
-    SET(${pathname} \"${${pathname}}\")
-ENDMACRO(MAKE_WINDOWS_PATH)
-    
 foreach(package ${packages})   
     set(dgen_impl ${CMAKE_BINARY_DIR}/cpp/qt_${package}/qt_${package}.pri)       
     break(package ${packages})