1
0

FindKDE.cmake 5.5 KB

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