diff options
-rw-r--r-- | modules/FindKDE4Internal.cmake | 60 | ||||
-rw-r--r-- | modules/MacroEnsureVersion.cmake | 8 | ||||
-rwxr-xr-x | modules/kde4_exec_via_sh.cmake | 13 |
3 files changed, 56 insertions, 25 deletions
diff --git a/modules/FindKDE4Internal.cmake b/modules/FindKDE4Internal.cmake index e9b67faa..6250674c 100644 --- a/modules/FindKDE4Internal.cmake +++ b/modules/FindKDE4Internal.cmake @@ -192,8 +192,8 @@ include (CheckCXXCompilerFlag) # set(BIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin" CACHE PATH "The kde info install dir (default prefix/info)") # set(SBIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/sbin" CACHE PATH "The kde info install dir (default prefix/info)") # set(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/lib" CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is /lib)") -# set(LIBEXEC_INSTALL_DIR "${LIB_INSTALL_DIR}/lib" CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is /lib)") -# set(PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/kde4" CACHE PATH "The subdirectory relative to the install prefix where plugins will be installed (default is ${KDE4_LIB_INSTALL_DIR}/kde4)") +# set(LIBEXEC_INSTALL_DIR "${LIB_INSTALL_DIR}/kde4/libexec" CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is /lib)") +# set(PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/kde4/modules" CACHE PATH "The subdirectory relative to the install prefix where plugins will be installed (default is ${KDE4_LIB_INSTALL_DIR}/kde4)") # # set(CONFIG_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/config" CACHE PATH "The config file install dir") # set(DATA_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/apps" CACHE PATH "The parent directory where applications can install their data") @@ -294,6 +294,8 @@ if(EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) set( _KDE4_KCONFIG_COMPILER_DEP kconfig_compiler) set( _KDE4_MAKEKDEWIDGETS_DEP makekdewidgets) + set(KDE4_INSTALLED_VERSION_OK TRUE) + else(EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) # ... but NOT otherwise @@ -316,21 +318,20 @@ else(EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) endif (NOT KDE4_IGNORE_DONTPORT) - - STRING(REGEX REPLACE "^KDE: " "" KDEVERSION "${KDEVERSION}") + string(REGEX REPLACE "^KDE: " "" KDEVERSION "${KDEVERSION}") # we need at least this version: - IF (NOT KDE_MIN_VERSION) - SET(KDE_MIN_VERSION "3.9.0") - ENDIF (NOT KDE_MIN_VERSION) + if (NOT KDE_MIN_VERSION) + set(KDE_MIN_VERSION "3.9.0") + endif (NOT KDE_MIN_VERSION) #message(STATUS "KDE_MIN_VERSION=${KDE_MIN_VERSION} found ${KDEVERSION}") - MACRO_ENSURE_VERSION( ${KDE_MIN_VERSION} ${KDEVERSION} KDE4_INSTALLED_VERSION_TOO_OLD ) + macro_ensure_version( ${KDE_MIN_VERSION} ${KDEVERSION} KDE4_INSTALLED_VERSION_OK ) - ELSE (KDEVERSION) + else (KDEVERSION) message(FATAL_ERROR "Couldn't parse KDE version string from the kde-config output:\n${kdeconfig_output}") - ENDIF (KDEVERSION) + endif (KDEVERSION) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib ) @@ -373,8 +374,8 @@ else(EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) set(KDE4_KSPELL2_LIBS ${kspell2_LIB_DEPENDS} ${KDE4_KSPELL2_LIBRARY} ) if (UNIX) - find_library(KDE4_KDESU_LIBRARY NAMES kdesu PATHS ${KDE4_LIB_INSTALL_DIR} NO_DEFAULT_PATH ) - set(KDE4_KDESU_LIBS ${kdesu_LIB_DEPENDS} ${KDE4_KDESU_LIBRARY} ) + find_library(KDE4_KDESU_LIBRARY NAMES kdesu PATHS ${KDE4_LIB_INSTALL_DIR} NO_DEFAULT_PATH ) + set(KDE4_KDESU_LIBS ${kdesu_LIB_DEPENDS} ${KDE4_KDESU_LIBRARY} ) endif (UNIX) find_library(KDE4_KDNSSD_LIBRARY NAMES kdnssd PATHS ${KDE4_LIB_INSTALL_DIR} NO_DEFAULT_PATH ) @@ -496,9 +497,9 @@ if (UNIX) # the rest is RPATH handling if (APPLE) - set(CMAKE_INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}${LIB_INSTALL_DIR}) + set(CMAKE_INSTALL_NAME_DIR ${LIB_INSTALL_DIR}) else (APPLE) - set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}${LIB_INSTALL_DIR} ${QT_LIBRARY_DIR} ) + set(CMAKE_INSTALL_RPATH ${LIB_INSTALL_DIR} ${QT_LIBRARY_DIR} ) # building something else than kdelibs/ ? # then add the dir where the kde libraries are installed if (NOT EXISTS ${CMAKE_SOURCE_DIR}/kdecore/kglobal.h) @@ -590,9 +591,24 @@ if (CMAKE_COMPILER_IS_GNUCXX) # visibility support check_cxx_compiler_flag(-fvisibility=hidden __KDE_HAVE_GCC_VISIBILITY) - if (__KDE_HAVE_GCC_VISIBILITY) + +# get information about gcc + exec_program(${CMAKE_C_COMPILER} ARGS -v OUTPUT_VARIABLE _gcc_info) + + string (REGEX MATCH " [34]\\.[0-9]\\.[0-9] " _gcc_version "${_gcc_info}") + macro_ensure_version("4.1.0" "${_gcc_version}" GCC_IS_NEWER_THAN_4_1) + + if (GCC_IS_NEWER_THAN_4_1) + string(REGEX MATCH "(--enable-libstdcxx-allocator=mt)" _GCC_COMPILED_WITH_BAD_ALLOCATOR "${_gcc_info}") + else (GCC_IS_NEWER_THAN_4_1) + set(_GCC_COMPILED_WITH_BAD_ALLOCATOR FALSE) + endif (GCC_IS_NEWER_THAN_4_1) + + if (__KDE_HAVE_GCC_VISIBILITY AND GCC_IS_AT_LEAST_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") - endif (__KDE_HAVE_GCC_VISIBILITY) + endif (__KDE_HAVE_GCC_VISIBILITY AND GCC_IS_AT_LEAST_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR) + + message(STATUS "have_visibility: ${__KDE_HAVE_GCC_VISIBILITY} version>=4.1: ${GCC_IS_NEWER_THAN_4_1} bad alloctor: ${_GCC_COMPILED_WITH_BAD_ALLOCATOR}") endif (CMAKE_COMPILER_IS_GNUCXX) @@ -632,9 +648,9 @@ include(KDE4Macros) # decide whether KDE4 has been found set(KDE4_FOUND FALSE) -if (KDE4_INCLUDE_DIR AND KDE4_LIB_DIR AND KDE4_KCFGC_EXECUTABLE AND NOT KDE4_INSTALLED_VERSION_TOO_OLD) +if (KDE4_INCLUDE_DIR AND KDE4_LIB_DIR AND KDE4_KCFGC_EXECUTABLE AND KDE4_INSTALLED_VERSION_OK) set(KDE4_FOUND TRUE) -endif (KDE4_INCLUDE_DIR AND KDE4_LIB_DIR AND KDE4_KCFGC_EXECUTABLE AND NOT KDE4_INSTALLED_VERSION_TOO_OLD) +endif (KDE4_INCLUDE_DIR AND KDE4_LIB_DIR AND KDE4_KCFGC_EXECUTABLE AND KDE4_INSTALLED_VERSION_OK) macro (KDE4_PRINT_RESULTS) @@ -665,11 +681,11 @@ endmacro (KDE4_PRINT_RESULTS) if (KDE4Internal_FIND_REQUIRED AND NOT KDE4_FOUND) #bail out if something wasn't found kde4_print_results() - if (KDE4_INSTALLED_VERSION_TOO_OLD) + if (NOT KDE4_INSTALLED_VERSION_OK) message(FATAL_ERROR "ERROR: the installed kdelibs version ${KDEVERSION} is too old, at least version ${KDE_MIN_VERSION} is required") - else (KDE4_INSTALLED_VERSION_TOO_OLD) + else (NOT KDE4_INSTALLED_VERSION_OK) message(FATAL_ERROR "ERROR: could NOT find everything required for compiling KDE 4 programs") - endif (KDE4_INSTALLED_VERSION_TOO_OLD) + endif (NOT KDE4_INSTALLED_VERSION_OK) endif (KDE4Internal_FIND_REQUIRED AND NOT KDE4_FOUND) @@ -684,5 +700,5 @@ set(KDE4_INCLUDES ${QT_INCLUDES} ${KDE4_INCLUDE_DIR} ${_KDE4_PLATFORM_INCLUDE_DI set(KDE4_DEFINITIONS ${_KDE4_PLATFORM_DEFINITIONS} -DQT3_SUPPORT -DQT_NO_STL -DQT_NO_CAST_TO_ASCII -D_REENTRANT -DQT3_SUPPORT_WARNINGS -DKDE_DEPRECATED_WARNINGS ) string(REGEX REPLACE "/lib" "" KDELIBSUFF ${LIB_INSTALL_DIR} ) -MESSAGE(STATUS "KDELIBSUFF :<${KDELIBSUFF}>") +message(STATUS "KDELIBSUFF :<${KDELIBSUFF}>") diff --git a/modules/MacroEnsureVersion.cmake b/modules/MacroEnsureVersion.cmake index 89047307..091152d4 100644 --- a/modules/MacroEnsureVersion.cmake +++ b/modules/MacroEnsureVersion.cmake @@ -1,12 +1,12 @@ # LGPL-v2, David Faure # # This macro compares version numbers of the form "x.y.z" -# MACRO_ENSURE_VERSION( ${FOO_MIN_VERSION} ${FOO_VERSION_FOUND} FOO_TOO_OLD) -# will set FOO_TOO_OLD to true if FOO_VERSION_FOUND < FOO_MIN_VERSION +# MACRO_ENSURE_VERSION( ${FOO_MIN_VERSION} ${FOO_VERSION_FOUND} FOO_VERSION_OK) +# will set FOO_VERSIN_OK to true if FOO_VERSION_FOUND >= FOO_MIN_VERSION # MACRO(MACRO_ENSURE_VERSION requested_version found_version var_too_old) - # parse the parts of the version strings + # parse the parts of the version string STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" req_major_vers "${requested_version}") STRING(REGEX REPLACE "[0-9]+\\.([0-9])+\\.[0-9]+" "\\1" req_minor_vers "${requested_version}") STRING(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" req_patch_vers "${requested_version}") @@ -20,6 +20,8 @@ MACRO(MACRO_ENSURE_VERSION requested_version found_version var_too_old) MATH(EXPR found_vers_num "${found_major_vers}*10000 + ${found_minor_vers}*100 + ${found_patch_vers}") if (found_vers_num LESS req_vers_num) + set( ${var_too_old} FALSE ) + else (found_vers_num LESS req_vers_num) set( ${var_too_old} TRUE ) endif (found_vers_num LESS req_vers_num) diff --git a/modules/kde4_exec_via_sh.cmake b/modules/kde4_exec_via_sh.cmake index b105eb60..86e8fd06 100755 --- a/modules/kde4_exec_via_sh.cmake +++ b/modules/kde4_exec_via_sh.cmake @@ -1,4 +1,6 @@ +if (UNIX) + file(WRITE "${_filename}" "#!/bin/sh # created by cmake, don't edit, changes will be lost @@ -9,3 +11,14 @@ ${_library_path_variable}=${_ld_library_path}\${${_library_path_variable}+:\$${_ # make it executable # since this is only executed on UNIX, it is safe to call chmod exec_program(chmod ARGS ug+x \"${_filename}\" OUTPUT_VARIABLE _dummy ) + +else (UNIX) + +file(TO_NATIVE_PATH ${_ld_library_path} win_path) +file(WRITE "${_filename}" +" +set PATH=${win_path};${PATH} +\"${_executable}\" %* +") + +endif (UNIX) |