KDE3Macros.cmake 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. #
  2. #=============================================================================
  3. # Copyright 2006-2009 Kitware, Inc.
  4. # Copyright 2006 Alexander Neundorf <[email protected]>
  5. #
  6. # Distributed under the OSI-approved BSD License (the "License");
  7. # see accompanying file Copyright.txt for details.
  8. #
  9. # This software is distributed WITHOUT ANY WARRANTY; without even the
  10. # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. # See the License for more information.
  12. #=============================================================================
  13. # (To distributed this file outside of CMake, substitute the full
  14. # License text for the above reference.)
  15. # See FindKDE3.cmake for documentation.
  16. #
  17. # this file contains the following macros:
  18. # KDE3_ADD_DCOP_SKELS
  19. # KDE3_ADD_DCOP_STUBS
  20. # KDE3_ADD_MOC_FILES
  21. # KDE3_ADD_UI_FILES
  22. # KDE3_ADD_KCFG_FILES
  23. # KDE3_AUTOMOC
  24. # KDE3_INSTALL_LIBTOOL_FILE
  25. # KDE3_CREATE_FINAL_FILE
  26. # KDE3_ADD_KPART
  27. # KDE3_ADD_KDEINIT_EXECUTABLE
  28. # KDE3_ADD_EXECUTABLE
  29. #[email protected]
  30. INCLUDE(AddFileDependencies)
  31. #create the kidl and skeletion file for dcop stuff
  32. #usage: KDE_ADD_COP_SKELS(foo_SRCS ${dcop_headers})
  33. MACRO(KDE3_ADD_DCOP_SKELS _sources)
  34. FOREACH (_current_FILE ${ARGN})
  35. GET_FILENAME_COMPONENT(_tmp_FILE ${_current_FILE} ABSOLUTE)
  36. GET_FILENAME_COMPONENT(_basename ${_tmp_FILE} NAME_WE)
  37. SET(_skel ${CMAKE_CURRENT_BINARY_DIR}/${_basename}_skel.cpp)
  38. SET(_kidl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.kidl)
  39. IF (NOT HAVE_${_basename}_KIDL_RULE)
  40. SET(HAVE_${_basename}_KIDL_RULE ON)
  41. ADD_CUSTOM_COMMAND(OUTPUT ${_kidl}
  42. COMMAND ${KDE3_DCOPIDL_EXECUTABLE}
  43. ARGS ${_tmp_FILE} > ${_kidl}
  44. DEPENDS ${_tmp_FILE}
  45. )
  46. ENDIF (NOT HAVE_${_basename}_KIDL_RULE)
  47. IF (NOT HAVE_${_basename}_SKEL_RULE)
  48. SET(HAVE_${_basename}_SKEL_RULE ON)
  49. ADD_CUSTOM_COMMAND(OUTPUT ${_skel}
  50. COMMAND ${KDE3_DCOPIDL2CPP_EXECUTABLE}
  51. ARGS --c++-suffix cpp --no-signals --no-stub ${_kidl}
  52. DEPENDS ${_kidl}
  53. )
  54. ENDIF (NOT HAVE_${_basename}_SKEL_RULE)
  55. SET(${_sources} ${${_sources}} ${_skel})
  56. ENDFOREACH (_current_FILE)
  57. ENDMACRO(KDE3_ADD_DCOP_SKELS)
  58. MACRO(KDE3_ADD_DCOP_STUBS _sources)
  59. FOREACH (_current_FILE ${ARGN})
  60. GET_FILENAME_COMPONENT(_tmp_FILE ${_current_FILE} ABSOLUTE)
  61. GET_FILENAME_COMPONENT(_basename ${_tmp_FILE} NAME_WE)
  62. SET(_stub_CPP ${CMAKE_CURRENT_BINARY_DIR}/${_basename}_stub.cpp)
  63. SET(_kidl ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.kidl)
  64. IF (NOT HAVE_${_basename}_KIDL_RULE)
  65. SET(HAVE_${_basename}_KIDL_RULE ON)
  66. ADD_CUSTOM_COMMAND(OUTPUT ${_kidl}
  67. COMMAND ${KDE3_DCOPIDL_EXECUTABLE}
  68. ARGS ${_tmp_FILE} > ${_kidl}
  69. DEPENDS ${_tmp_FILE}
  70. )
  71. ENDIF (NOT HAVE_${_basename}_KIDL_RULE)
  72. IF (NOT HAVE_${_basename}_STUB_RULE)
  73. SET(HAVE_${_basename}_STUB_RULE ON)
  74. ADD_CUSTOM_COMMAND(OUTPUT ${_stub_CPP}
  75. COMMAND ${KDE3_DCOPIDL2CPP_EXECUTABLE}
  76. ARGS --c++-suffix cpp --no-signals --no-skel ${_kidl}
  77. DEPENDS ${_kidl}
  78. )
  79. ENDIF (NOT HAVE_${_basename}_STUB_RULE)
  80. SET(${_sources} ${${_sources}} ${_stub_CPP})
  81. ENDFOREACH (_current_FILE)
  82. ENDMACRO(KDE3_ADD_DCOP_STUBS)
  83. MACRO(KDE3_ADD_KCFG_FILES _sources)
  84. FOREACH (_current_FILE ${ARGN})
  85. GET_FILENAME_COMPONENT(_tmp_FILE ${_current_FILE} ABSOLUTE)
  86. GET_FILENAME_COMPONENT(_basename ${_tmp_FILE} NAME_WE)
  87. FILE(READ ${_tmp_FILE} _contents)
  88. STRING(REGEX REPLACE "^(.*\n)?File=([^\n]+)\n.*$" "\\2" _kcfg_FILE "${_contents}")
  89. SET(_src_FILE ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp)
  90. SET(_header_FILE ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h)
  91. ADD_CUSTOM_COMMAND(OUTPUT ${_src_FILE}
  92. COMMAND ${KDE3_KCFGC_EXECUTABLE}
  93. ARGS ${CMAKE_CURRENT_SOURCE_DIR}/${_kcfg_FILE} ${_tmp_FILE}
  94. DEPENDS ${_tmp_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/${_kcfg_FILE} )
  95. SET(${_sources} ${${_sources}} ${_src_FILE})
  96. ENDFOREACH (_current_FILE)
  97. ENDMACRO(KDE3_ADD_KCFG_FILES)
  98. #create the moc files and add them to the list of sources
  99. #usage: KDE_ADD_MOC_FILES(foo_SRCS ${moc_headers})
  100. MACRO(KDE3_ADD_MOC_FILES _sources)
  101. FOREACH (_current_FILE ${ARGN})
  102. GET_FILENAME_COMPONENT(_tmp_FILE ${_current_FILE} ABSOLUTE)
  103. GET_FILENAME_COMPONENT(_basename ${_tmp_FILE} NAME_WE)
  104. SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc.cpp)
  105. ADD_CUSTOM_COMMAND(OUTPUT ${_moc}
  106. COMMAND ${QT_MOC_EXECUTABLE}
  107. ARGS ${_tmp_FILE} -o ${_moc}
  108. DEPENDS ${_tmp_FILE}
  109. )
  110. SET(${_sources} ${${_sources}} ${_moc})
  111. ENDFOREACH (_current_FILE)
  112. ENDMACRO(KDE3_ADD_MOC_FILES)
  113. GET_FILENAME_COMPONENT( KDE3_MODULE_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
  114. #create the implementation files from the ui files and add them to the list of sources
  115. #usage: KDE_ADD_UI_FILES(foo_SRCS ${ui_files})
  116. MACRO(KDE3_ADD_UI_FILES _sources )
  117. FOREACH (_current_FILE ${ARGN})
  118. GET_FILENAME_COMPONENT(_tmp_FILE ${_current_FILE} ABSOLUTE)
  119. GET_FILENAME_COMPONENT(_basename ${_tmp_FILE} NAME_WE)
  120. SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h)
  121. SET(_src ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp)
  122. SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc.cpp)
  123. ADD_CUSTOM_COMMAND(OUTPUT ${_header}
  124. COMMAND ${QT_UIC_EXECUTABLE}
  125. ARGS -L ${KDE3_LIB_DIR}/kde3/plugins/designer -nounload -o ${_header} ${CMAKE_CURRENT_SOURCE_DIR}/${_current_FILE}
  126. DEPENDS ${_tmp_FILE}
  127. )
  128. ADD_CUSTOM_COMMAND(OUTPUT ${_src}
  129. COMMAND ${CMAKE_COMMAND}
  130. ARGS
  131. -DKDE_UIC_PLUGIN_DIR:FILEPATH=${KDE3_LIB_DIR}/kde3/plugins/designer
  132. -DKDE_UIC_EXECUTABLE:FILEPATH=${QT_UIC_EXECUTABLE}
  133. -DKDE_UIC_FILE:FILEPATH=${_tmp_FILE}
  134. -DKDE_UIC_CPP_FILE:FILEPATH=${_src}
  135. -DKDE_UIC_H_FILE:FILEPATH=${_header}
  136. -P ${KDE3_MODULE_DIR}/kde3uic.cmake
  137. DEPENDS ${_header}
  138. )
  139. ADD_CUSTOM_COMMAND(OUTPUT ${_moc}
  140. COMMAND ${QT_MOC_EXECUTABLE}
  141. ARGS ${_header} -o ${_moc}
  142. DEPENDS ${_header}
  143. )
  144. SET(${_sources} ${${_sources}} ${_src} ${_moc} )
  145. ENDFOREACH (_current_FILE)
  146. ENDMACRO(KDE3_ADD_UI_FILES)
  147. MACRO(KDE3_AUTOMOC)
  148. SET(_matching_FILES )
  149. FOREACH (_current_FILE ${ARGN})
  150. GET_FILENAME_COMPONENT(_abs_FILE ${_current_FILE} ABSOLUTE)
  151. # if "SKIP_AUTOMOC" is set to true, we will not handle this file here.
  152. # here. this is required to make bouic work correctly:
  153. # we need to add generated .cpp files to the sources (to compile them),
  154. # but we cannot let automoc handle them, as the .cpp files don't exist yet when
  155. # cmake is run for the very first time on them -> however the .cpp files might
  156. # exist at a later run. at that time we need to skip them, so that we don't add two
  157. # different rules for the same moc file
  158. GET_SOURCE_FILE_PROPERTY(_skip ${_abs_FILE} SKIP_AUTOMOC)
  159. IF (EXISTS ${_abs_FILE} AND NOT _skip)
  160. FILE(READ ${_abs_FILE} _contents)
  161. GET_FILENAME_COMPONENT(_abs_PATH ${_abs_FILE} PATH)
  162. STRING(REGEX MATCHALL "#include +[^ ]+\\.moc[\">]" _match "${_contents}")
  163. IF(_match)
  164. FOREACH (_current_MOC_INC ${_match})
  165. STRING(REGEX MATCH "[^ <\"]+\\.moc" _current_MOC "${_current_MOC_INC}")
  166. GET_FILENAME_COMPONENT(_basename ${_current_MOC} NAME_WE)
  167. # SET(_header ${CMAKE_CURRENT_SOURCE_DIR}/${_basename}.h)
  168. SET(_header ${_abs_PATH}/${_basename}.h)
  169. SET(_moc ${CMAKE_CURRENT_BINARY_DIR}/${_current_MOC})
  170. ADD_CUSTOM_COMMAND(OUTPUT ${_moc}
  171. COMMAND ${QT_MOC_EXECUTABLE}
  172. ARGS ${_header} -o ${_moc}
  173. DEPENDS ${_header}
  174. )
  175. ADD_FILE_DEPENDENCIES(${_abs_FILE} ${_moc})
  176. ENDFOREACH (_current_MOC_INC)
  177. ENDIF(_match)
  178. ENDIF (EXISTS ${_abs_FILE} AND NOT _skip)
  179. ENDFOREACH (_current_FILE)
  180. ENDMACRO(KDE3_AUTOMOC)
  181. # only used internally by KDE3_INSTALL_ICONS
  182. MACRO (_KDE3_ADD_ICON_INSTALL_RULE _install_SCRIPT _install_PATH _group _orig_NAME _install_NAME)
  183. # if the string doesn't match the pattern, the result is the full string, so all three have the same content
  184. IF (NOT ${_group} STREQUAL ${_install_NAME} )
  185. SET(_icon_GROUP "actions")
  186. IF (${_group} STREQUAL "mime")
  187. SET(_icon_GROUP "mimetypes")
  188. ENDIF (${_group} STREQUAL "mime")
  189. IF (${_group} STREQUAL "filesys")
  190. SET(_icon_GROUP "filesystems")
  191. ENDIF (${_group} STREQUAL "filesys")
  192. IF (${_group} STREQUAL "device")
  193. SET(_icon_GROUP "devices")
  194. ENDIF (${_group} STREQUAL "device")
  195. IF (${_group} STREQUAL "app")
  196. SET(_icon_GROUP "apps")
  197. ENDIF (${_group} STREQUAL "app")
  198. IF (${_group} STREQUAL "action")
  199. SET(_icon_GROUP "actions")
  200. ENDIF (${_group} STREQUAL "action")
  201. # message(STATUS "icon: ${_current_ICON} size: ${_size} group: ${_group} name: ${_name}" )
  202. INSTALL(FILES ${_orig_NAME} DESTINATION ${_install_PATH}/${_icon_GROUP}/ RENAME ${_install_NAME} )
  203. ENDIF (NOT ${_group} STREQUAL ${_install_NAME} )
  204. ENDMACRO (_KDE3_ADD_ICON_INSTALL_RULE)
  205. MACRO (KDE3_INSTALL_ICONS _theme )
  206. SET(_defaultpath "${CMAKE_INSTALL_PREFIX}/share/icons")
  207. # first the png icons
  208. FILE(GLOB _icons *.png)
  209. FOREACH (_current_ICON ${_icons} )
  210. STRING(REGEX REPLACE "^.*/[a-zA-Z]+([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\1" _size "${_current_ICON}")
  211. STRING(REGEX REPLACE "^.*/[a-zA-Z]+([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\2" _group "${_current_ICON}")
  212. STRING(REGEX REPLACE "^.*/[a-zA-Z]+([0-9]+)\\-([a-z]+)\\-(.+\\.png)$" "\\3" _name "${_current_ICON}")
  213. _KDE3_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake
  214. ${_defaultpath}/${_theme}/${_size}x${_size}
  215. ${_group} ${_current_ICON} ${_name})
  216. ENDFOREACH (_current_ICON)
  217. # and now the svg icons
  218. FILE(GLOB _icons *.svgz)
  219. FOREACH (_current_ICON ${_icons} )
  220. STRING(REGEX REPLACE "^.*/crsc\\-([a-z]+)\\-(.+\\.svgz)$" "\\1" _group "${_current_ICON}")
  221. STRING(REGEX REPLACE "^.*/crsc\\-([a-z]+)\\-(.+\\.svgz)$" "\\2" _name "${_current_ICON}")
  222. _KDE3_ADD_ICON_INSTALL_RULE(${CMAKE_CURRENT_BINARY_DIR}/install_icons.cmake
  223. ${_defaultpath}/${_theme}/scalable
  224. ${_group} ${_current_ICON} ${_name})
  225. ENDFOREACH (_current_ICON)
  226. ENDMACRO (KDE3_INSTALL_ICONS)
  227. MACRO(KDE3_INSTALL_LIBTOOL_FILE _target)
  228. GET_TARGET_PROPERTY(_target_location ${_target} LOCATION)
  229. GET_FILENAME_COMPONENT(_laname ${_target_location} NAME_WE)
  230. GET_FILENAME_COMPONENT(_soname ${_target_location} NAME)
  231. SET(_laname ${CMAKE_CURRENT_BINARY_DIR}/${_laname}.la)
  232. FILE(WRITE ${_laname} "# ${_laname} - a libtool library file, generated by cmake \n")
  233. FILE(APPEND ${_laname} "# The name that we can dlopen(3).\n")
  234. FILE(APPEND ${_laname} "dlname='${_soname}'\n")
  235. FILE(APPEND ${_laname} "# Names of this library\n")
  236. FILE(APPEND ${_laname} "library_names='${_soname} ${_soname} ${_soname}'\n")
  237. FILE(APPEND ${_laname} "# The name of the static archive\n")
  238. FILE(APPEND ${_laname} "old_library=''\n")
  239. FILE(APPEND ${_laname} "# Libraries that this one depends upon.\n")
  240. FILE(APPEND ${_laname} "dependency_libs=''\n")
  241. # FILE(APPEND ${_laname} "dependency_libs='${${_target}_LIB_DEPENDS}'\n")
  242. FILE(APPEND ${_laname} "# Version information.\ncurrent=0\nage=0\nrevision=0\n")
  243. FILE(APPEND ${_laname} "# Is this an already installed library?\ninstalled=yes\n")
  244. FILE(APPEND ${_laname} "# Should we warn about portability when linking against -modules?\nshouldnotlink=yes\n")
  245. FILE(APPEND ${_laname} "# Files to dlopen/dlpreopen\ndlopen=''\ndlpreopen=''\n")
  246. FILE(APPEND ${_laname} "# Directory that this library needs to be installed in:\n")
  247. FILE(APPEND ${_laname} "libdir='${CMAKE_INSTALL_PREFIX}/lib/kde3'\n")
  248. INSTALL_FILES(${KDE3_LIBTOOL_DIR} FILES ${_laname})
  249. ENDMACRO(KDE3_INSTALL_LIBTOOL_FILE)
  250. MACRO(KDE3_CREATE_FINAL_FILE _filename)
  251. FILE(WRITE ${_filename} "//autogenerated file\n")
  252. FOREACH (_current_FILE ${ARGN})
  253. FILE(APPEND ${_filename} "#include \"${_current_FILE}\"\n")
  254. ENDFOREACH (_current_FILE)
  255. ENDMACRO(KDE3_CREATE_FINAL_FILE)
  256. # OPTION(KDE3_ENABLE_FINAL "Enable final all-in-one compilation")
  257. OPTION(KDE3_BUILD_TESTS "Build the tests")
  258. MACRO(KDE3_ADD_KPART _target_NAME _with_PREFIX)
  259. #is the first argument is "WITH_PREFIX" then keep the standard "lib" prefix, otherwise SET the prefix empty
  260. IF (${_with_PREFIX} STREQUAL "WITH_PREFIX")
  261. SET(_first_SRC)
  262. ELSE (${_with_PREFIX} STREQUAL "WITH_PREFIX")
  263. SET(_first_SRC ${_with_PREFIX})
  264. ENDIF (${_with_PREFIX} STREQUAL "WITH_PREFIX")
  265. # IF (KDE3_ENABLE_FINAL)
  266. # KDE3_CREATE_FINAL_FILE(${_target_NAME}_final.cpp ${_first_SRC} ${ARGN})
  267. # ADD_LIBRARY(${_target_NAME} MODULE ${_target_NAME}_final.cpp)
  268. # ELSE (KDE3_ENABLE_FINAL)
  269. ADD_LIBRARY(${_target_NAME} MODULE ${_first_SRC} ${ARGN})
  270. # ENDIF (KDE3_ENABLE_FINAL)
  271. IF(_first_SRC)
  272. SET_TARGET_PROPERTIES(${_target_NAME} PROPERTIES PREFIX "")
  273. ENDIF(_first_SRC)
  274. KDE3_INSTALL_LIBTOOL_FILE(${_target_NAME})
  275. ENDMACRO(KDE3_ADD_KPART)
  276. MACRO(KDE3_ADD_KDEINIT_EXECUTABLE _target_NAME )
  277. # IF (KDE3_ENABLE_FINAL)
  278. # KDE3_CREATE_FINAL_FILE(${_target_NAME}_final.cpp ${ARGN})
  279. # ADD_LIBRARY(kdeinit_${_target_NAME} SHARED ${_target_NAME}_final.cpp)
  280. # ELSE (KDE3_ENABLE_FINAL)
  281. ADD_LIBRARY(kdeinit_${_target_NAME} SHARED ${ARGN} )
  282. # ENDIF (KDE3_ENABLE_FINAL)
  283. CONFIGURE_FILE(${KDE3_MODULE_DIR}/kde3init_dummy.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp)
  284. ADD_EXECUTABLE( ${_target_NAME} ${CMAKE_CURRENT_BINARY_DIR}/${_target_NAME}_dummy.cpp )
  285. TARGET_LINK_LIBRARIES( ${_target_NAME} kdeinit_${_target_NAME} )
  286. ENDMACRO(KDE3_ADD_KDEINIT_EXECUTABLE)
  287. MACRO(KDE3_ADD_EXECUTABLE _target_NAME )
  288. # IF (KDE3_ENABLE_FINAL)
  289. # KDE3_CREATE_FINAL_FILE(${_target_NAME}_final.cpp ${ARGN})
  290. # ADD_EXECUTABLE(${_target_NAME} ${_target_NAME}_final.cpp)
  291. # ELSE (KDE3_ENABLE_FINAL)
  292. ADD_EXECUTABLE(${_target_NAME} ${ARGN} )
  293. # ENDIF (KDE3_ENABLE_FINAL)
  294. ENDMACRO(KDE3_ADD_EXECUTABLE)