FindKDE.cmake 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. # - Locate KDE include paths and libraries
  2. # KDE_INCLUDE_DIR
  3. # KDE_LIB_DIR
  4. # KDE_KDE_CONFIG
  5. # KDE_DCOP_IDL
  6. # KDE_VERSION
  7. # the macro ADD_DCOP_SOURCES(src_headers dest_srcs)
  8. #
  9. # usage:
  10. # SET(MY_APP_SOURCES main.cpp kfoo.cpp)
  11. # SET(MY_DCOP_SOURCES kfooiface.h)
  12. # ADD_DCOP_SOURCES(MY_DCOP_SOURCES MY_APP_SOURCES)
  13. # uses KDE_MIN_VERSION
  14. CMAKE_MINIMUM_REQUIRED(VERSION 2.0.0)
  15. FIND_PATH(KDE_INCLUDE_DIR kurl.h
  16. $ENV{KDEDIR}/include
  17. /opt/kde/include
  18. /opt/kde3/include
  19. /usr/local/include
  20. /usr/include/
  21. /usr/include/kde
  22. /usr/local/include/kde
  23. )
  24. IF(KDE_INCLUDE_DIR)
  25. MESSAGE(STATUS "Found KDE header files in ${KDE_INCLUDE_DIR}")
  26. ELSE(KDE_INCLUDE_DIR)
  27. MESSAGE(FATAL_ERROR "Didn't find KDE headers")
  28. ENDIF(KDE_INCLUDE_DIR)
  29. FIND_PROGRAM(KDE_CONFIG NAME kde-config PATHS
  30. $ENV{KDEDIR}/bin
  31. /opt/kde/bin
  32. /opt/kde3/bin)
  33. IF(NOT KDE_CONFIG)
  34. MESSAGE(FATAL_ERROR "Didn't find the kde-config utility")
  35. ENDIF(NOT KDE_CONFIG)
  36. FIND_PATH(KDE_LIB_DIR libkdecore.so
  37. $ENV{KDEDIR}/lib
  38. /opt/kde/lib
  39. /opt/kde3/lib
  40. )
  41. IF(KDE_LIB_DIR)
  42. MESSAGE(STATUS "Found KDE libraries in ${KDE_LIB_DIR}")
  43. ELSE(KDE_LIB_DIR)
  44. MESSAGE(FATAL_ERROR "Didn't find KDE core library")
  45. ENDIF(KDE_LIB_DIR)
  46. IF (KDE_MIN_VERSION)
  47. #extract the version from kdeversion.h
  48. FILE(READ ${KDE_INCLUDE_DIR}/kdeversion.h KDE_VERSION_H)
  49. STRING(REGEX REPLACE ".*#define[\\t\\ ]+KDE_VERSION_STRING[\\t\\ ]+\"([0-9]+\\.[0-9]+\\.[0-9]+)\".*" "\\1" KDE_VERSION "${KDE_VERSION_H}")
  50. STRING(REGEX REPLACE ".*#define[\\t\\ ]+KDE_VERSION_MAJOR[\\t\\ ]+([0-9]+).*" "\\1" kde_major_vers "${KDE_VERSION_H}")
  51. STRING(REGEX REPLACE ".*#define[\\t\\ ]+KDE_VERSION_MINOR[\\t\\ ]+([0-9]+).*" "\\1" kde_minor_vers "${KDE_VERSION_H}")
  52. STRING(REGEX REPLACE ".*#define[\\t\\ ]+KDE_VERSION_RELEASE[\\t\\ ]+([0-9]+).*" "\\1" kde_vers_release "${KDE_VERSION_H}")
  53. #now parse the parts of the user given version string into variables
  54. STRING(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+$" req_kde_major_vers "${KDE_MIN_VERSION}")
  55. IF (NOT req_kde_major_vers)
  56. MESSAGE( FATAL_ERROR "Invalid KDE version string given: \"${KDE_MIN_VERSION}\", expected e.g. \"3.1.5\"")
  57. ENDIF (NOT req_kde_major_vers)
  58. STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" req_kde_major_vers "${KDE_MIN_VERSION}")
  59. STRING(REGEX REPLACE "[0-9]+\\.([0-9])+\\.[0-9]+" "\\1" req_kde_minor_vers "${KDE_MIN_VERSION}")
  60. STRING(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" req_kde_patch_vers "${KDE_MIN_VERSION}")
  61. # req = "6.5.4", qt = "3.2.1"
  62. IF (req_kde_major_vers GREATER kde_major_vers) # (6 > 3) ?
  63. MESSAGE( FATAL_ERROR "KDE major version not matched (required: ${KDE_MIN_VERSION}, found: ${KDE_VERSION})") # yes
  64. ELSE (req_kde_major_vers GREATER kde_major_vers) # no
  65. IF (req_kde_major_vers LESS kde_major_vers) # (6 < 3) ?
  66. SET( QT_VERSION_BIG_ENOUGH "YES" ) # yes
  67. ELSE (req_kde_major_vers LESS kde_major_vers) # ( 6==3) ?
  68. IF (req_kde_minor_vers GREATER kde_minor_vers) # (5>2) ?
  69. MESSAGE( FATAL_ERROR "KDE minor version not matched (required: ${KDE_MIN_VERSION}, found: ${KDE_VERSION})") # yes
  70. ELSE (req_kde_minor_vers GREATER kde_minor_vers) # no
  71. IF (req_kde_minor_vers LESS kde_minor_vers) # (5<2) ?
  72. SET( QT_VERSION_BIG_ENOUGH "YES" ) # yes
  73. ELSE (req_kde_minor_vers LESS kde_minor_vers) # (5==2)
  74. IF (req_kde_patch_vers GREATER kde_vers_release) # (4>1) ?
  75. MESSAGE( FATAL_ERROR "KDE release version not matched (required: ${KDE_MIN_VERSION}, found: ${KDE_VERSION})") # yes
  76. ELSE (req_kde_patch_vers GREATER kde_patch_vers) # (4>1) ?
  77. SET( QT_VERSION_BIG_ENOUGH "YES" ) # yes
  78. ENDIF (req_kde_patch_vers GREATER kde_vers_release) # (4>1) ?
  79. ENDIF (req_kde_minor_vers LESS kde_minor_vers)
  80. ENDIF (req_kde_minor_vers GREATER kde_minor_vers)
  81. ENDIF (req_kde_major_vers LESS kde_major_vers)
  82. ENDIF (req_kde_major_vers GREATER kde_major_vers)
  83. MESSAGE(STATUS "KDE version ok (required: ${KDE_MIN_VERSION}, found: ${KDE_VERSION})")
  84. ENDIF (KDE_MIN_VERSION)
  85. #now search for the dcop utilities
  86. FIND_PROGRAM(KDE_DCOPIDL NAME dcopidl PATHS
  87. $ENV{KDEDIR}/bin
  88. /opt/kde/bin
  89. /opt/kde3/bin)
  90. IF(NOT KDE_DCOPIDL)
  91. MESSAGE(FATAL_ERROR "Didn't find the dcopidl preprocessor")
  92. ENDIF(NOT KDE_DCOPIDL)
  93. FIND_PROGRAM(KDE_DCOPIDL2CPP NAME dcopidl2cpp PATHS
  94. $ENV{KDEDIR}/bin
  95. /opt/kde/bin
  96. /opt/kde3/bin)
  97. IF(NOT KDE_DCOPIDL2CPP)
  98. MESSAGE(FATAL_ERROR "Didn't find the dcopidl2cpp preprocessor")
  99. ENDIF(NOT KDE_DCOPIDL2CPP)
  100. MACRO(DCOP_WRAP SKEL_SOURCES)
  101. FOREACH(dcop_source ${ARGN})
  102. GET_FILENAME_COMPONENT(dcop_source_basename ${dcop_source} NAME_WE)
  103. SET(idl_file ${CMAKE_BINARY_DIR}/${dcop_source_basename}.kidl)
  104. SET(skel_file ${CMAKE_BINARY_DIR}/${dcop_source_basename}_skel.cpp)
  105. ADD_CUSTOM_COMMAND(
  106. OUTPUT ${idl_file}
  107. COMMAND ${KDE_DCOPIDL}
  108. ARGS ${CMAKE_SOURCE_DIR}/${dcop_source} > ${idl_file}
  109. DEPENDS ${CMAKE_SOURCE_DIR}/${dcop_source})
  110. ADD_CUSTOM_COMMAND(
  111. OUTPUT ${skel_file}
  112. COMMAND ${KDE_DCOPIDL2CPP}
  113. ARGS --c++-suffix cpp --no-signals --no-stub ${idl_file}
  114. DEPENDS ${idl_file})
  115. SET( SKEL_SOURCES ${${SKEL_SOURCES}}
  116. ${skel_file})
  117. ENDFOREACH(dcop_source)
  118. ENDMACRO (DCOP_WRAP)
  119. MARK_AS_ADVANCED(
  120. KDE_INCLUDE_DIR
  121. KDE_LIB_DIR
  122. )