diff options
author | Alexander Neundorf <neundorf@kde.org> | 2006-02-03 22:00:11 +0000 |
---|---|---|
committer | Alexander Neundorf <neundorf@kde.org> | 2006-02-03 22:00:11 +0000 |
commit | 0f0ed599605523734c61287f9e2f68061b068951 (patch) | |
tree | 60d11b8432a1bb13c6f1eb5a56f5a01c1b47fc77 | |
parent | ec20af3748c658bd51630c39a4426950b9ca8270 (diff) | |
download | extra-cmake-modules-0f0ed599605523734c61287f9e2f68061b068951.tar.gz extra-cmake-modules-0f0ed599605523734c61287f9e2f68061b068951.tar.bz2 |
-major overhaul of the windows stuff: kdelibs/win/ is now built as a regular part of the build process
-an improved version of CheckIncludeFiles.cmake has been added, which takes additional include directories as argument
-the check for the KDE4_LIB_DIR was wrong, it returned libkxmlcore.so instead of the directory
-fix the header install commands for the win/include/ stuff
Alex
svn path=/trunk/KDE/kdelibs/; revision=505455
-rw-r--r-- | modules/CheckIncludeFiles.cmake | 63 | ||||
-rw-r--r-- | modules/FindKDE4.cmake | 45 | ||||
-rw-r--r-- | modules/KDE4Macros.cmake | 28 |
3 files changed, 110 insertions, 26 deletions
diff --git a/modules/CheckIncludeFiles.cmake b/modules/CheckIncludeFiles.cmake new file mode 100644 index 00000000..8d1b0fb3 --- /dev/null +++ b/modules/CheckIncludeFiles.cmake @@ -0,0 +1,63 @@ +# - Check if the files can be included +# +# CHECK_INCLUDE_FILES(INCLUDE VARIABLE) +# +# INCLUDE - list of files to include +# VARIABLE - variable to return result +# +# If CMAKE_REQUIRED_FLAGS is set then those flags will be passed into the +# compile of the program +# additionally to the original cmake module this one uses CMAKE_REQUIRED_INCLUDES +# where you can specify a directory which will be added to the include path + +MACRO(CHECK_INCLUDE_FILES INCLUDE VARIABLE) + IF("${VARIABLE}" MATCHES "^${VARIABLE}$") + SET(CHECK_INCLUDE_FILES_INCLUDE_DIRS ) +# IF(CMAKE_REQUIRED_INCLUDES) +# SET(CHECK_INCLUDE_FILES_INCLUDE_DIRS +# "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") +# ENDIF(CMAKE_REQUIRED_INCLUDES) + + SET(CHECK_INCLUDE_FILES_INCLUDE_DIRS -DINCLUDE_DIRECTORIES=) + FOREACH(_inc_DIR ${CMAKE_REQUIRED_INCLUDES}) + SET(CHECK_INCLUDE_FILES_INCLUDE_DIRS "${CHECK_INCLUDE_FILES_INCLUDE_DIRS}${_inc_DIR}\;") + ENDFOREACH(_inc_DIR ${CMAKE_REQUIRED_INCLUDES}) + SET(CHECK_INCLUDE_FILES_INCLUDE_DIRS "${CHECK_INCLUDE_FILES_INCLUDE_DIRS} ") + + SET(CHECK_INCLUDE_FILES_CONTENT "/* */\n") + SET(MACRO_CHECK_INCLUDE_FILES_FLAGS ${CMAKE_REQUIRED_FLAGS}) + FOREACH(FILE ${INCLUDE}) + SET(CHECK_INCLUDE_FILES_CONTENT + "${CHECK_INCLUDE_FILES_CONTENT}#include <${FILE}>\n") + ENDFOREACH(FILE) + SET(CHECK_INCLUDE_FILES_CONTENT + "${CHECK_INCLUDE_FILES_CONTENT}\n\nint main(){return 0;}\n") + FILE(WRITE ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/CheckIncludeFiles.c + "${CHECK_INCLUDE_FILES_CONTENT}") + + MESSAGE(STATUS "Looking for include files ${VARIABLE}") + TRY_COMPILE(${VARIABLE} + ${CMAKE_BINARY_DIR} + ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeTmp/CheckIncludeFiles.c + CMAKE_FLAGS +# -DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDE_DIR} + -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILES_FLAGS} + ${CHECK_INCLUDE_FILES_INCLUDE_DIRS} + OUTPUT_VARIABLE OUTPUT) + IF(${VARIABLE}) + MESSAGE(STATUS "Looking for include files ${VARIABLE} - found") + SET(${VARIABLE} 1 CACHE INTERNAL "Have include ${VARIABLE}") + FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeFiles/CMakeOutput.log + "Determining if files ${INCLUDE} " + "exist passed with the following output:\n" + "${OUTPUT}\n\n") + ELSE(${VARIABLE}) + MESSAGE(STATUS "Looking for include files ${VARIABLE} - not found.") + SET(${VARIABLE} "" CACHE INTERNAL "Have includes ${VARIABLE}") + FILE(APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log + "Determining if files ${INCLUDE} " + "exist failed with the following output:\n" + "${OUTPUT}\nSource:\n${CHECK_INCLUDE_FILES_CONTENT}\n") + ENDIF(${VARIABLE}) + ENDIF("${VARIABLE}" MATCHES "^${VARIABLE}$") +ENDMACRO(CHECK_INCLUDE_FILES) diff --git a/modules/FindKDE4.cmake b/modules/FindKDE4.cmake index 321a665e..f713e4e7 100644 --- a/modules/FindKDE4.cmake +++ b/modules/FindKDE4.cmake @@ -39,10 +39,6 @@ SET(QT_AND_KDECORE_LIBS ${QT_QTCORE_LIBRARY} kdecore) SET(KDE4_DIR ${CMAKE_INSTALL_PREFIX}) -#SET(KDE4_SYSCONF_INSTALL_DIR "/etc" CACHE STRING "The kde sysconfig install dir (default /etc)") -SET(KDE4_MAN_INSTALL_DIR "/man" CACHE STRING "The kde man install dir (default prefix/man/)") -SET(KDE4_INFO_INSTALL_DIR "/info" CACHE STRING "The kde info install dir (default prefix/info)") -SET(KDE4_LIB_INSTALL_DIR "/lib" CACHE STRING "The subdirectory relative to the install prefix where libraries will be installed (default is /lib)") SET(KDE4_APPS_DIR /share/applnk) SET(KDE4_CONFIG_DIR /share/config) SET(KDE4_DATA_DIR /share/apps) @@ -53,7 +49,7 @@ SET(KDE4_LIBS_HTML_DIR /share/doc/HTML) SET(KDE4_LOCALE_DIR /share/locale) SET(KDE4_MIME_DIR /share/mimelnk) SET(KDE4_SERVICES_DIR /share/services) -SET(KDE4_SERVICETYPES_DIR /share/servicetypes) +SET(KDE4_SERVICETYPES_DIR /share/servicetypes) SET(KDE4_SOUND_DIR /share/sounds) SET(KDE4_TEMPLATES_DIR /share/templates) SET(KDE4_WALLPAPER_DIR /share/wallpapers) @@ -62,6 +58,14 @@ SET(XDG_APPS_DIR /share/applications/kde) SET(XDG_DIRECTORY_DIR /share/desktop-directories) +# the following are directories where stuff will be installed to +#SET(KDE4_SYSCONF_INSTALL_DIR "/etc" CACHE STRING "The kde sysconfig install dir (default /etc)") +SET(KDE4_MAN_INSTALL_DIR "/man" CACHE STRING "The kde man install dir (default prefix/man/)") +SET(KDE4_INFO_INSTALL_DIR "/info" CACHE STRING "The kde info install dir (default prefix/info)") +SET(KDE4_LIB_INSTALL_DIR "/lib" CACHE STRING "The subdirectory relative to the install prefix where libraries will be installed (default is /lib)") + + + #now try to find some kde stuff @@ -96,7 +100,7 @@ ELSE(EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) ) # now the KDE library directory, kxmlcore is new with KDE4 - FIND_LIBRARY(KDE4_LIB_DIR NAMES kxmlcore + FIND_LIBRARY(KDE4_XMLCORE_LIBRARY NAMES kxmlcore PATHS $ENV{KDEDIR}/lib /opt/kde/lib @@ -105,6 +109,8 @@ ELSE(EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) /usr/local/lib ) + GET_FILENAME_COMPONENT(KDE4_LIB_DIR ${KDE4_XMLCORE_LIBRARY} PATH ) + #now search for the dcop utilities FIND_PROGRAM(KDE4_DCOPIDL_EXECUTABLE NAME dcopidl PATHS $ENV{KDEDIR}/bin @@ -140,34 +146,36 @@ ENDIF(WIN32 AND CMAKE_C_COMPILER MATCHES "cl\\.exe") ##################### and now the platform specific stuff ############################ + IF(UNIX AND NOT APPLE) FIND_PACKAGE(X11 REQUIRED) SET(_KDE4_PLATFORM_INCLUDE_DIRS ${X11_INCLUDE_DIR} ) ENDIF(UNIX AND NOT APPLE) + IF(CYGWIN) MESSAGE(FATAL_ERROR "Support for Cygwin not yet implemented, please edit FindKDE4.cmake to enable it") ENDIF(CYGWIN) + +# windows, mingw IF(MINGW) - MESSAGE(FATAL_ERROR "Support for MinGW not yet implemented, please edit FindKDE4.cmake to enable it") + SET( QT_AND_KDECORE_LIBS ${QT_AND_KDECORE_LIBS} kdewin32 ) SET(_KDE4_PLATFORM_INCLUDE_DIRS ${KDE4_INCLUDE_DIR}/win/include ${KDE4_INCLUDE_DIR}/include/mingw ) SET( CMAKE_INCLUDE_PATH ${${KDE4_INCLUDE_DIR}/win/include ${KDE4_INCLUDE_DIR}/win/include/mingw ) ENDIF(MINGW) + +# windows, microsoft compiler IF(MSVC) - FIND_LIBRARY( KDE4_KDEWIN32_LIBRARY NAMES kdewin32 ) - IF ( NOT KDE4_KDEWIN32_LIBRARY ) - MESSAGE( FATAL_ERROR "Could not find kdewin32 library, make sure to build and install kdelibs/win/ first" ) - ENDIF ( NOT KDE4_KDEWIN32_LIBRARY ) - - SET( QT_AND_KDECORE_LIBS ${QT_AND_KDECORE_LIBS} ${KDE4_KDEWIN32_LIBRARY}) + SET( QT_AND_KDECORE_LIBS ${QT_AND_KDECORE_LIBS} kdewin32 ) SET( _KDE4_PLATFORM_INCLUDE_DIRS ${KDE4_INCLUDE_DIR}/win/include ${KDE4_INCLUDE_DIR}/win/include/msvc ) SET( _KDE4_PLATFORM_DEFINITIONS -D_WINSOCKAPI_ -DWIN32_LEAN_AND_MEAN -DMAKE_KDEWIN32_LIB -DUNICODE ) SET( CMAKE_INCLUDE_PATH ${KDE4_INCLUDE_DIR}/win/include ${KDE4_INCLUDE_DIR}/win/include/msvc ) ENDIF(MSVC) -#only on linux, but not e.g. on FreeBSD: + +# only on linux, but not e.g. on FreeBSD: IF(CMAKE_SYSTEM_NAME MATCHES Linux) SET ( _KDE4_PLATFORM_DEFINITIONS -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_GNU_SOURCE) SET ( CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings -avoid-version -Wl,--no-undefined -lc") @@ -176,6 +184,7 @@ IF(CMAKE_SYSTEM_NAME MATCHES Linux) SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -O2 -Wformat-security -fno-exceptions -fno-check-new -fno-common") ENDIF(CMAKE_SYSTEM_NAME MATCHES Linux) + # works on FreeBSD, not tested on NetBSD and OpenBSD IF(CMAKE_SYSTEM_NAME MATCHES BSD) SET ( _KDE4_PLATFORM_DEFINITIONS -D_GNU_SOURCE ) @@ -185,6 +194,7 @@ IF(CMAKE_SYSTEM_NAME MATCHES BSD) SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wno-long-long -Wundef -Wcast-align -Wconversion -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -O2 -Wformat-security -Wmissing-format-attribute -fno-exceptions -fno-check-new -fno-common") ENDIF(CMAKE_SYSTEM_NAME MATCHES BSD) + # This will need to be modified later to support either Qt/X11 or Qt/Mac builds IF(APPLE) @@ -214,7 +224,8 @@ ENDIF(APPLE) # KDE4Macros.cmake contains all the KDE specific macros INCLUDE(KDE4Macros) -#set KDE4_FOUND + +# decide whether KDE4 has been found IF (KDE4_INCLUDE_DIR AND KDE4_LIB_DIR AND KDE4_SERVICETYPES_DIR AND KDE4_DCOPIDL_EXECUTABLE AND KDE4_DCOPIDL2CPP_EXECUTABLE AND KDE4_KCFGC_EXECUTABLE) SET(KDE4_FOUND TRUE) ELSE (KDE4_INCLUDE_DIR AND KDE4_LIB_DIR AND KDE4_SERVICETYPES_DIR AND KDE4_DCOPIDL_EXECUTABLE AND KDE4_DCOPIDL2CPP_EXECUTABLE AND KDE4_KCFGC_EXECUTABLE) @@ -252,16 +263,16 @@ MACRO (KDE4_PRINT_RESULTS) ELSE(KDE4_KCFGC_EXECUTABLE) MESSAGE(STATUS "Didn't find the KDE4 kconfig_compiler preprocessor") ENDIF(KDE4_KCFGC_EXECUTABLE) - ENDMACRO (KDE4_PRINT_RESULTS) + IF (KDE4_FIND_REQUIRED AND NOT KDE4_FOUND) #bail out if something wasn't found KDE4_PRINT_RESULTS() MESSAGE(FATAL_ERROR "Could not find everything required for compiling KDE 4 programs") - ENDIF (KDE4_FIND_REQUIRED AND NOT KDE4_FOUND) + IF (NOT KDE4_FIND_QUIETLY) KDE4_PRINT_RESULTS() ENDIF (NOT KDE4_FIND_QUIETLY) diff --git a/modules/KDE4Macros.cmake b/modules/KDE4Macros.cmake index 91ded6d4..682eae4c 100644 --- a/modules/KDE4Macros.cmake +++ b/modules/KDE4Macros.cmake @@ -431,24 +431,34 @@ MACRO(KDE4_ADD_PLUGIN _target_NAME _with_PREFIX) SET_TARGET_PROPERTIES(${_target_NAME} PROPERTIES PREFIX "") ENDIF(_first_SRC) +# IF (UNIX) + # I guess under windows the libtool file are not required KDE4_CREATE_LIBTOOL_FILE(${_target_NAME}) +# ENDIF (UNIX) ENDMACRO(KDE4_ADD_PLUGIN _target_NAME _with_PREFIX) MACRO(KDE4_ADD_KLM _target_NAME ) - IF (KDE4_ENABLE_FINAL) - KDE4_CREATE_FINAL_FILES(${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c ${ARGN}) - ADD_LIBRARY(kdeinit_${_target_NAME} SHARED ${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c) - ELSE (KDE4_ENABLE_FINAL) - ADD_LIBRARY(kdeinit_${_target_NAME} SHARED ${ARGN} ) + CONFIGURE_FILE(${KDE4_MODULE_DIR}/kde4init_dummy.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp) + + IF (WIN32) + # under windows, just build a normal executable + KDE4_ADD_EXECUTABLE(${_target_NAME} ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp ${ARGN} ) + ELSE (WIN32) + # under UNIX, create a shared library and a small executable, which links to this library + IF (KDE4_ENABLE_FINAL) + KDE4_CREATE_FINAL_FILES(${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c ${ARGN}) + ADD_LIBRARY(kdeinit_${_target_NAME} SHARED ${_target_NAME}_final_cpp.cpp ${_target_NAME}_final_c.c) + ELSE (KDE4_ENABLE_FINAL) + ADD_LIBRARY(kdeinit_${_target_NAME} SHARED ${ARGN} ) # MESSAGE(STATUS "klm: kdeinit_${_target_NAME}") - ENDIF (KDE4_ENABLE_FINAL) + ENDIF (KDE4_ENABLE_FINAL) - CONFIGURE_FILE(${KDE4_MODULE_DIR}/kde4init_dummy.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp) - ADD_EXECUTABLE( ${_target_NAME} ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp ) - TARGET_LINK_LIBRARIES( ${_target_NAME} kdeinit_${_target_NAME} ) + ADD_EXECUTABLE( ${_target_NAME} ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp ) + TARGET_LINK_LIBRARIES( ${_target_NAME} kdeinit_${_target_NAME} ) + ENDIF (WIN32) ENDMACRO(KDE4_ADD_KLM _target_NAME) |