aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Neundorf <neundorf@kde.org>2006-02-03 22:00:11 +0000
committerAlexander Neundorf <neundorf@kde.org>2006-02-03 22:00:11 +0000
commit0f0ed599605523734c61287f9e2f68061b068951 (patch)
tree60d11b8432a1bb13c6f1eb5a56f5a01c1b47fc77
parentec20af3748c658bd51630c39a4426950b9ca8270 (diff)
downloadextra-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.cmake63
-rw-r--r--modules/FindKDE4.cmake45
-rw-r--r--modules/KDE4Macros.cmake28
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)