diff options
-rw-r--r-- | Modules/FindKDE.cmake | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/Modules/FindKDE.cmake b/Modules/FindKDE.cmake new file mode 100644 index 0000000..ba2ad25 --- /dev/null +++ b/Modules/FindKDE.cmake @@ -0,0 +1,151 @@ +# Locate KDE include paths and libraries + +# KDE_INCLUDE_DIR +# KDE_LIB_DIR +# KDE_KDE_CONFIG +# KDE_DCOP_IDL +# KDE_VERSION + +#the macro ADD_DCOP_SOURCES(src_headers dest_srcs) +# +#usage: +#SET(MY_APP_SOURCES main.cpp kfoo.cpp) +#SET(MY_DCOP_SOURCES kfooiface.h) +#ADD_DCOP_SOURCES(MY_DCOP_SOURCES MY_APP_SOURCES) +#and then it should work :-) + +#uses KDE_MIN_VERSION + +CMAKE_MINIMUM_REQUIRED(VERSION 2.0.0) + +FIND_PATH(KDE_INCLUDE_DIR kurl.h + $ENV{KDEDIR}/include + /opt/kde/include + /opt/kde3/include + /usr/local/include + /usr/include/ + /usr/include/kde + /usr/local/include/kde + ) + +IF(KDE_INCLUDE_DIR) + MESSAGE(STATUS "Found KDE header files in ${KDE_INCLUDE_DIR}") +ELSE(KDE_INCLUDE_DIR) + MESSAGE(FATAL_ERROR "Didn't find KDE headers") +ENDIF(KDE_INCLUDE_DIR) + +FIND_PROGRAM(KDE_CONFIG NAME kde-config PATHS + $ENV{KDEDIR}/bin + /opt/kde/bin + /opt/kde3/bin) + +IF(NOT KDE_CONFIG) + MESSAGE(FATAL_ERROR "Didn't find the kde-config utility") +ENDIF(NOT KDE_CONFIG) + +FIND_PATH(KDE_LIB_DIR libkdecore.so + $ENV{KDEDIR}/lib + /opt/kde/lib + /opt/kde3/lib + ) + +IF(KDE_LIB_DIR) + MESSAGE(STATUS "Found KDE libraries in ${KDE_LIB_DIR}") +ELSE(KDE_LIB_DIR) + MESSAGE(FATAL_ERROR "Didn't find KDE core library") +ENDIF(KDE_LIB_DIR) + +IF (KDE_MIN_VERSION) + #extract the version from kdeversion.h + + FILE(READ ${KDE_INCLUDE_DIR}/kdeversion.h KDE_VERSION_H) + + STRING(REGEX REPLACE ".*#define[\\t\\ ]+KDE_VERSION_STRING[\\t\\ ]+\"([0-9]+\\.[0-9]+\\.[0-9]+)\".*" "\\1" KDE_VERSION "${KDE_VERSION_H}") + STRING(REGEX REPLACE ".*#define[\\t\\ ]+KDE_VERSION_MAJOR[\\t\\ ]+([0-9]+).*" "\\1" kde_major_vers "${KDE_VERSION_H}") + STRING(REGEX REPLACE ".*#define[\\t\\ ]+KDE_VERSION_MINOR[\\t\\ ]+([0-9]+).*" "\\1" kde_minor_vers "${KDE_VERSION_H}") + STRING(REGEX REPLACE ".*#define[\\t\\ ]+KDE_VERSION_RELEASE[\\t\\ ]+([0-9]+).*" "\\1" kde_vers_release "${KDE_VERSION_H}") + +#now parse the parts of the user given version string into variables + STRING(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+$" req_kde_major_vers "${KDE_MIN_VERSION}") + IF (NOT req_kde_major_vers) + MESSAGE( FATAL_ERROR "Invalid KDE version string given: \"${KDE_MIN_VERSION}\", expected e.g. \"3.1.5\"") + ENDIF (NOT req_kde_major_vers) + + STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" req_kde_major_vers "${KDE_MIN_VERSION}") + STRING(REGEX REPLACE "[0-9]+\\.([0-9])+\\.[0-9]+" "\\1" req_kde_minor_vers "${KDE_MIN_VERSION}") + STRING(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" req_kde_patch_vers "${KDE_MIN_VERSION}") + +# req = "6.5.4", qt = "3.2.1" + + IF (req_kde_major_vers GREATER kde_major_vers) # (6 > 3) ? + MESSAGE( FATAL_ERROR "KDE major version not matched (required: ${KDE_MIN_VERSION}, found: ${KDE_VERSION})") # yes + ELSE (req_kde_major_vers GREATER kde_major_vers) # no + IF (req_kde_major_vers LESS kde_major_vers) # (6 < 3) ? + SET( QT_VERSION_BIG_ENOUGH "YES" ) # yes + ELSE (req_kde_major_vers LESS kde_major_vers) # ( 6==3) ? + IF (req_kde_minor_vers GREATER kde_minor_vers) # (5>2) ? + MESSAGE( FATAL_ERROR "KDE minor version not matched (required: ${KDE_MIN_VERSION}, found: ${KDE_VERSION})") # yes + ELSE (req_kde_minor_vers GREATER kde_minor_vers) # no + IF (req_kde_minor_vers LESS kde_minor_vers) # (5<2) ? + SET( QT_VERSION_BIG_ENOUGH "YES" ) # yes + ELSE (req_kde_minor_vers LESS kde_minor_vers) # (5==2) + IF (req_kde_patch_vers GREATER kde_vers_release) # (4>1) ? + MESSAGE( FATAL_ERROR "KDE release version not matched (required: ${KDE_MIN_VERSION}, found: ${KDE_VERSION})") # yes + ELSE (req_kde_patch_vers GREATER kde_patch_vers) # (4>1) ? + SET( QT_VERSION_BIG_ENOUGH "YES" ) # yes + ENDIF (req_kde_patch_vers GREATER kde_vers_release) # (4>1) ? + ENDIF (req_kde_minor_vers LESS kde_minor_vers) + ENDIF (req_kde_minor_vers GREATER kde_minor_vers) + ENDIF (req_kde_major_vers LESS kde_major_vers) + ENDIF (req_kde_major_vers GREATER kde_major_vers) + MESSAGE(STATUS "KDE version ok (required: ${KDE_MIN_VERSION}, found: ${KDE_VERSION})") +ENDIF (KDE_MIN_VERSION) + +#now search for the dcop utilities +FIND_PROGRAM(KDE_DCOPIDL NAME dcopidl PATHS + $ENV{KDEDIR}/bin + /opt/kde/bin + /opt/kde3/bin) + +IF(NOT KDE_DCOPIDL) + MESSAGE(FATAL_ERROR "Didn't find the dcopidl preprocessor") +ENDIF(NOT KDE_DCOPIDL) + +FIND_PROGRAM(KDE_DCOPIDL2CPP NAME dcopidl2cpp PATHS + $ENV{KDEDIR}/bin + /opt/kde/bin + /opt/kde3/bin) + +IF(NOT KDE_DCOPIDL2CPP) + MESSAGE(FATAL_ERROR "Didn't find the dcopidl2cpp preprocessor") +ENDIF(NOT KDE_DCOPIDL2CPP) + +MACRO(DCOP_WRAP SKEL_SOURCES) + FOREACH(dcop_source ${ARGN}) + + GET_FILENAME_COMPONENT(dcop_source_basename ${dcop_source} NAME_WE) + + SET(idl_file ${CMAKE_BINARY_DIR}/${dcop_source_basename}.kidl) + SET(skel_file ${CMAKE_BINARY_DIR}/${dcop_source_basename}_skel.cpp) + + ADD_CUSTOM_COMMAND( + OUTPUT ${idl_file} + COMMAND ${KDE_DCOPIDL} + ARGS ${CMAKE_SOURCE_DIR}/${dcop_source} > ${idl_file} + DEPENDS ${CMAKE_SOURCE_DIR}/${dcop_source}) + + ADD_CUSTOM_COMMAND( + OUTPUT ${skel_file} + COMMAND ${KDE_DCOPIDL2CPP} + ARGS --c++-suffix cpp --no-signals --no-stub ${idl_file} + DEPENDS ${idl_file}) + + SET( SKEL_SOURCES ${${SKEL_SOURCES}} + ${skel_file}) + ENDFOREACH(dcop_source) +ENDMACRO (DCOP_WRAP) + +MARK_AS_ADVANCED( + KDE_INCLUDE_DIR + KDE_LIB_DIR + ) |