CMakeLists.txt 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #CMakeLists.txt
  2. CONFIGURE_FILE(
  3. "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
  4. "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  5. IMMEDIATE @ONLY)
  6. ADD_CUSTOM_TARGET(uninstall
  7. "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
  8. # Minimum version of CMake
  9. cmake_minimum_required(VERSION 2.6)
  10. if(COMMAND cmake_policy)
  11. cmake_policy(VERSION 2.6)
  12. endif()
  13. # Source dir
  14. set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
  15. set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR})
  16. # Other
  17. #set(CMAKE_BUILD_TYPE RELEASE)
  18. option(WITH_LOGOS "install wmfs logos")
  19. option(GENERATE_MANPAGES "generate manpages" ON)
  20. # Project name - wmfs
  21. set(PROJECT_NAME wmfs)
  22. project(${PROJECT_NAME} C)
  23. # Definition of the wmfs source
  24. set(wmfs_src
  25. wmfs.c
  26. config.c
  27. event.c
  28. util.c)
  29. # Set the executable from the wmfs_src
  30. add_executable(wmfs ${wmfs_src})
  31. # Set the version - NOT USED AT THE MOMENT
  32. set(VERSION wmfs-devel)
  33. # CFLAGS
  34. set(CFLAGS "-g -Wall")
  35. set(CMAKE_C_FLAGS ${CFLAGS})
  36. # Link Libraries
  37. set(LIBRARIES_TO_LINK
  38. X11
  39. confuse)
  40. target_link_libraries(wmfs ${LIBRARIES_TO_LINK})
  41. # Messages
  42. message("Project version : ${VERSION}")
  43. message("Using these CFLAGS : ${CFLAGS}")
  44. message("Linking with theses libraries : ${LIBRARIES_TO_LINK}")
  45. # Includes
  46. include(FindPkgConfig)
  47. #include(CPack) # need to configure it for packaging
  48. # Use pkgconfig to get required libraries
  49. pkg_check_modules(wmfs_required
  50. x11
  51. libconfuse)
  52. # Find exterbal programs
  53. macro(a_find_program var prg req)
  54. set(required ${req})
  55. find_program(${var} ${prg})
  56. if(NOT ${var})
  57. message(STATUS "${prg} not found.")
  58. if(required)
  59. message(FATAL_ERROR "${prg} is required to build wmfs")
  60. endif()
  61. else()
  62. message(STATUS "${prg} -> ${${var}}")
  63. endif()
  64. endmacro()
  65. find_program(GIT_EXECUTABLE git)
  66. # programs needed for man pages
  67. a_find_program(ASCIIDOC_EXECUTABLE asciidoc FALSE)
  68. a_find_program(XMLTO_EXECUTABLE xmlto FALSE)
  69. a_find_program(GZIP_EXECUTABLE gzip FALSE)
  70. a_find_program(CAT_EXECUTABLE cat TRUE)
  71. # Generating CHANGELOG
  72. if(EXISTS ${SOURCE_DIR}/.git/HEAD AND GIT_EXECUTABLE)
  73. # generate
  74. execute_process(
  75. COMMAND ${GIT_EXECUTABLE} log
  76. WORKING_DIRECTORY ${SOURCE_DIR}
  77. #COMMENT "Generating CHANGELOG"
  78. OUTPUT_VARIABLE WMFS_CHANGELOG
  79. )
  80. set(CHANGELOG_FILE ${SOURCE_DIR}/CHANGELOG)
  81. file(WRITE ${CHANGELOG_FILE} ${WMFS_CHANGELOG})
  82. endif()
  83. # {{{ Check if documentation can be build
  84. if(GENERATE_MANPAGES)
  85. if(NOT ASCIIDOC_EXECUTABLE OR NOT XMLTO_EXECUTABLE OR NOT GZIP_EXECUTABLE)
  86. if(NOT ASCIIDOC_EXECUTABLE)
  87. SET(missing "asciidoc")
  88. endif()
  89. if(NOT XMLTO_EXECUTABLE)
  90. SET(missing ${missing} " xmlto")
  91. endif()
  92. if(NOT GZIP_EXECUTABLE)
  93. SET(missing ${missing} " gzip")
  94. endif()
  95. message(STATUS "Not generating manpages. Missing: " ${missing})
  96. set(GENERATE_MANPAGES OFF)
  97. endif()
  98. endif()
  99. #If a sysconfdir is specified, use it instead
  100. #of the default configuration dir.
  101. if(DEFINED SYSCONFDIR)
  102. set(SYSCONFDIR ${SYSCONFDIR} CACHE PATH "config directory")
  103. else()
  104. set(SYSCONFDIR /etc CACHE PATH "config directory")
  105. endif()
  106. #If an XDG Config Dir is specificed, use it instead
  107. #of the default XDG configuration dir.
  108. if(DEFINED XDG_CONFIG_DIR)
  109. set(XDG_CONFIG_DIR ${XDG_CONFIG_SYS} CACHE PATH "xdg config directory")
  110. else()
  111. set(XDG_CONFIG_DIR ${SYSCONFDIR}/xdg CACHE PATH "xdg config directory")
  112. endif()
  113. # sets
  114. # {{{ Install path and configuration variables
  115. if(DEFINED PREFIX)
  116. set(PREFIX ${PREFIX} CACHE PATH "install prefix")
  117. set(CMAKE_INSTALL_PREFIX ${PREFIX})
  118. else()
  119. set(PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "install prefix")
  120. endif()
  121. # set man path
  122. set(WMFS_MAN_SRCS
  123. ${SOURCE_DIR}/wmfs.1.txt)
  124. if(DEFINED WMFS_MAN_PATH)
  125. set(WMFS_MAN_PATH ${WMFS_MAN_PATH} CACHE PATH "wmfs manpage directory")
  126. else()
  127. set(WMFS_MAN_PATH ${PREFIX}/share/man CACHE PATH "wmfs manpage directory")
  128. endif()
  129. # {{{ Manpages
  130. if(GENERATE_MANPAGES)
  131. foreach(txtfile ${WMFS_MAN_SRCS})
  132. string(REGEX REPLACE ".txt\$" ".xml" xmlfile ${txtfile})
  133. string(REPLACE ${SOURCE_DIR}
  134. ${BUILD_DIR} xmlfile ${xmlfile})
  135. string(REGEX REPLACE ".xml\$" ".gz" gzfile ${xmlfile})
  136. string(REGEX REPLACE ".gz\$" "" manfile ${gzfile})
  137. add_custom_command(
  138. COMMAND ${CAT_EXECUTABLE} ${txtfile}
  139. | ${ASCIIDOC_EXECUTABLE} -d manpage -b docbook -o ${xmlfile} -
  140. WORKING_DIRECTORY ${BUILD_DIR}
  141. OUTPUT ${xmlfile}
  142. DEPENDS ${txtfile}
  143. VERBATIM)
  144. add_custom_command(
  145. COMMAND ${XMLTO_EXECUTABLE} man ${xmlfile}
  146. OUTPUT ${manfile}
  147. DEPENDS ${xmlfile})
  148. add_custom_command(
  149. COMMAND ${CAT_EXECUTABLE} ${manfile}
  150. | ${GZIP_EXECUTABLE}
  151. > ${gzfile}
  152. OUTPUT ${gzfile}
  153. DEPENDS ${manfile}
  154. VERBATIM)
  155. set(MAN_FILES ${MAN_FILES} ${gzfile})
  156. # figure out in what section to install to from filename
  157. string(REGEX REPLACE "^.*\\.([0-9])\\.gz\$" "\\1" section ${gzfile})
  158. set(WMFS_MAN${section}_FILES ${WMFS_MAN${section}_FILES} ${gzfile})
  159. endforeach()
  160. add_custom_target(man ALL DEPENDS ${MAN_FILES})
  161. endif()
  162. # }}}
  163. # Remplace strings in configs
  164. set(WMFS_VERSION ${VERSION})
  165. set(WMFS_COMPILE_MACHINE ${CMAKE_SYSTEM_PROCESSOR})
  166. set(WMFS_COMPILE_BY $ENV{USER})
  167. set(WMFS_COMPILE_FLAGS ${CFLAGS})
  168. set(WMFS_LINKED_LIBS ${LIBRARIES_TO_LINK})
  169. set(WMFS_SYSCONFDIR ${XDG_CONFIG_DIR}/${PROJECT_NAME})
  170. # Configure files
  171. set(wmfs_configure_files
  172. config.h.in)
  173. macro(a_configure_file file)
  174. string(REGEX REPLACE ".in\$" "" outfile ${file})
  175. message(STATUS "Configuring ${outfile}")
  176. configure_file(${SOURCE_DIR}/${file}
  177. ${SOURCE_DIR}/${outfile}
  178. ESCAPE_QUOTE
  179. @ONLY)
  180. endmacro()
  181. foreach(file ${wmfs_configure_files})
  182. a_configure_file(${file})
  183. endforeach()
  184. set(PROJECT_DATA_PATH share/${PROJECT_NAME})
  185. set(PROJECT_TODO ${SOURCE_DIR}/TODO)
  186. set(PROJECT_README ${SOURCE_DIR}/README)
  187. set(PROJECT_CHANGELOG ${SOURCE_DIR}/CHANGELOG)
  188. set(PROJECT_DEFAULT_CONF ${SOURCE_DIR}/wmfsrc)
  189. # installs
  190. install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
  191. if(WITH_LOGOS)
  192. set(PROJECT_LOGOS ${PROJECT_DATA_PATH}/logos)
  193. set(PROJECT_LOGOS_DIR ${SOURCE_DIR}/logos)
  194. install(DIRECTORY ${PROJECT_LOGOS_DIR} DESTINATION ${PROJECT_DATA_PATH})
  195. message("Install With logos")
  196. endif()
  197. if(GENERATE_MANPAGES)
  198. install(FILES ${WMFS_MAN1_FILES} DESTINATION ${WMFS_MAN_PATH}/man1)
  199. endif()
  200. install(FILES ${PROJECT_TODO} ${PROJECT_README} ${PROJECT_CHANGELOG}
  201. ${PROJECT_DEFAULT_CONF} DESTINATION ${PROJECT_DATA_PATH})
  202. install(FILES ${PROJECT_DEFAULT_CONF} DESTINATION ${WMFS_SYSCONFDIR})