CMakeLists.txt 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. # -*- mode: cmake -*-
  2. #Cmakelists.txt
  3. # Minimum version of CMake
  4. cmake_minimum_required(VERSION 2.6)
  5. if(COMMAND cmake_policy)
  6. cmake_policy(VERSION 2.6)
  7. endif()
  8. CONFIGURE_FILE(
  9. "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
  10. "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  11. IMMEDIATE @ONLY)
  12. ADD_CUSTOM_TARGET(uninstall
  13. "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
  14. # Source and build dirs
  15. set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
  16. set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR})
  17. # Project name - wmfs
  18. set(PROJECT_NAME wmfs)
  19. project(${PROJECT_NAME} C)
  20. # Definition of the wmfs source
  21. set(wmfs_src
  22. src/barwin.c
  23. src/client.c
  24. src/config.c
  25. src/draw.c
  26. src/event.c
  27. src/ewmh.c
  28. src/frame.c
  29. src/getinfo.c
  30. src/infobar.c
  31. src/init.c
  32. src/launcher.c
  33. src/layout.c
  34. src/menu.c
  35. src/mouse.c
  36. src/screen.c
  37. src/tag.c
  38. src/util.c
  39. src/wmfs.c)
  40. # Set the executable from the wmfs_src
  41. add_executable(wmfs ${wmfs_src})
  42. # Set the version
  43. set(VERSION "WMFS-200907")
  44. # FLAGS
  45. set(CFLAGS "-g -Wall -ansi")
  46. set(CMAKE_C_FLAGS ${CFLAGS})
  47. set(LDFLAGS "-L /usr/local/lib")
  48. set_target_properties(wmfs PROPERTIES LINK_FLAGS ${LDFLAGS})
  49. # Includes dir for libs in build_dir
  50. include_directories(
  51. ${BUILD_DIR}/src
  52. )
  53. # Package find
  54. find_package(Freetype)
  55. if(FREETYPE_FOUND)
  56. include_directories(${FREETYPE_INCLUDE_DIRS})
  57. else (FREETYPE_FOUND)
  58. message(FATAL_ERROR "Could not find Freetype")
  59. endif (FREETYPE_FOUND)
  60. find_package(X11)
  61. if(X11_FOUND)
  62. include_directories(${X11_INCLUDE_DIR})
  63. else (X11_FOUND)
  64. message(FATAL_ERROR "Could not find X11")
  65. endif (X11_FOUND)
  66. # Link Libraries
  67. set(LIBRARIES_TO_LINK
  68. ${FREETYPE_LIBRARIES}
  69. ${X11_LIBRARIES}
  70. confuse
  71. Xft)
  72. # Includes
  73. include(FindDoxygen)
  74. include(FindPkgConfig)
  75. # Use pkgconfig to get required libraries
  76. pkg_check_modules(WMFS_REQUIRED REQUIRED
  77. x11
  78. libconfuse
  79. freetype2
  80. xft)
  81. # Check for xinerama
  82. pkg_check_modules(HAVE_XINERAMA xinerama)
  83. if(HAVE_XINERAMA_FOUND)
  84. set(WMFS_HAVE_XINERAMA "#define HAVE_XINERAMA")
  85. set(LIBRARIES_TO_LINK ${LIBRARIES_TO_LINK} Xinerama)
  86. else()
  87. set(WMFS_HAVE_XINERAMA "")
  88. endif()
  89. # Check for xrandr
  90. pkg_check_modules(HAVE_XRANDR xrandr)
  91. if(HAVE_XRANDR_FOUND)
  92. set(WMFS_HAVE_XRANDR "#define HAVE_XRANDR")
  93. set(LIBRARIES_TO_LINK ${LIBRARIES_TO_LINK} Xrandr)
  94. else()
  95. set(WMFS_HAVE_XRANDR "")
  96. endif()
  97. target_link_libraries(wmfs ${LIBRARIES_TO_LINK})
  98. # Messages
  99. message("Project version: ${VERSION}")
  100. message("Using these CFLAGS: ${CFLAGS}")
  101. message("Using these LDFLAGS: ${LDFLAGS}")
  102. message("Linking with theses libraries : ${LIBRARIES_TO_LINK}")
  103. # Generating man page
  104. find_program(GZIP_EXECUTABLE gzip)
  105. if(NOT GZIP_EXECUTABLE)
  106. message(STATUS "Looking for gzip -- not found")
  107. message(STATUS "Could not generating man page")
  108. else()
  109. message(STATUS "Looking for gzip -- ${GZIP_EXECUTABLE}")
  110. message(STATUS "Generating man page")
  111. set(WMFS_MAN1_FILES ${BUILD_DIR}/wmfs.1.gz)
  112. execute_process(
  113. COMMAND ${GZIP_EXECUTABLE} -c wmfs.1
  114. WORKING_DIRECTORY ${SOURCE_DIR}
  115. OUTPUT_FILE ${WMFS_MAN1_FILES})
  116. endif()
  117. # Generating CHANGELOG
  118. find_program(GIT_EXECUTABLE git)
  119. if(EXISTS ${SOURCE_DIR}/.git/HEAD AND GIT_EXECUTABLE)
  120. message(STATUS "Looking for git -- ${GIT_EXECUTABLE}")
  121. message(STATUS "Git dir -- Generating changelog...")
  122. set(PROJECT_CHANGELOG ${SOURCE_DIR}/changelog)
  123. execute_process(
  124. COMMAND ${GIT_EXECUTABLE} log
  125. WORKING_DIRECTORY ${SOURCE_DIR}
  126. OUTPUT_FILE ${PROJECT_CHANGELOG})
  127. else()
  128. message(STATUS "Looking for git -- not found")
  129. message(STATUS "Could not generating changelog")
  130. endif()
  131. # sets
  132. # {{{ Install path and configuration variables
  133. if(DEFINED PREFIX)
  134. set(PREFIX ${PREFIX} CACHE PATH "install prefix")
  135. set(CMAKE_INSTALL_PREFIX ${PREFIX})
  136. else()
  137. set(PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "install prefix")
  138. endif()
  139. #If a sysconfdir is specified, use it instead
  140. #of the default configuration dir.
  141. if(DEFINED SYSCONFDIR)
  142. set(SYSCONFDIR ${SYSCONFDIR} CACHE PATH "config directory")
  143. else()
  144. set(SYSCONFDIR /etc CACHE PATH "config directory")
  145. endif()
  146. #If an XDG Config Dir is specificed, use it instead
  147. #of the default XDG configuration dir.
  148. if(DEFINED XDG_CONFIG_DIR)
  149. set(XDG_CONFIG_DIR ${XDG_CONFIG_SYS} CACHE PATH "xdg config directory")
  150. else()
  151. set(XDG_CONFIG_DIR ${SYSCONFDIR}/xdg CACHE PATH "xdg config directory")
  152. endif()
  153. # setting WMFS_XSESSION_PATH
  154. if(DEFINED WMFS_XSESSION_PATH)
  155. set(WMFS_XSESSION_PATH ${WMFS_XSESSION_PATH} CACHE PATH "wmfs xsessions directory")
  156. else()
  157. set(WMFS_XSESSION_PATH ${PREFIX}/share/xsessions CACHE PATH "wmfs xsessions directory")
  158. endif()
  159. if(DEFINED WMFS_MAN_PATH)
  160. set(WMFS_MAN_PATH ${WMFS_MAN_PATH} CACHE PATH "wmfs manpage directory")
  161. else()
  162. set(WMFS_MAN_PATH ${PREFIX}/share/man CACHE PATH "wmfs manpage directory")
  163. endif()
  164. if(DOXYGEN_EXECUTABLE)
  165. add_custom_target(doc
  166. COMMAND ${DOXYGEN_EXECUTABLE} ${SOURCE_DIR}/wmfs.doxygen
  167. WORKING_DIRECTORY ${BUILD_DIR})
  168. endif()
  169. find_program(URXVT_EXECUTABLE urxvt)
  170. if(URXVT_EXECUTABLE)
  171. set(WMFS_TERM urxvt)
  172. else()
  173. set(WMFS_TERM xterm)
  174. endif()
  175. # Remplace strings in configs
  176. set(WMFS_VERSION ${VERSION})
  177. set(WMFS_COMPILE_MACHINE ${CMAKE_SYSTEM_PROCESSOR})
  178. set(WMFS_COMPILE_BY $ENV{USER})
  179. set(WMFS_COMPILE_FLAGS ${CFLAGS})
  180. set(WMFS_LINKED_LIBS ${LIBRARIES_TO_LINK})
  181. set(WMFS_SYSCONFDIR ${XDG_CONFIG_DIR}/${PROJECT_NAME})
  182. set(WMFS_SOURCE_DIR ${SOURCE_DIR})
  183. # Configure files
  184. set(wmfs_configure_files
  185. src/config.h.in
  186. wmfs.doxygen.in
  187. wmfsrc.in)
  188. macro(a_configure_file file)
  189. string(REGEX REPLACE ".in\$" "" outfile ${file})
  190. message(STATUS "Configuring ${outfile}")
  191. configure_file(${SOURCE_DIR}/${file}
  192. ${SOURCE_DIR}/${outfile}
  193. ESCAPE_QUOTE
  194. @ONLY)
  195. endmacro()
  196. foreach(file ${wmfs_configure_files})
  197. a_configure_file(${file})
  198. endforeach()
  199. set(PROJECT_DATA_PATH share/${PROJECT_NAME})
  200. set(PROJECT_TODO ${SOURCE_DIR}/TODO)
  201. set(PROJECT_README ${SOURCE_DIR}/README)
  202. set(PROJECT_DEFAULT_CONF ${SOURCE_DIR}/wmfsrc)
  203. # installs
  204. install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)
  205. if(WMFS_MAN1_FILES)
  206. install(FILES ${WMFS_MAN1_FILES} DESTINATION ${WMFS_MAN_PATH}/man1)
  207. endif()
  208. if(PROJECT_CHANGELOG)
  209. install(FILES ${PROJECT_CHANGELOG} DESTINATION ${PROJECT_DATA_PATH})
  210. endif()
  211. install(FILES ${PROJECT_TODO} ${PROJECT_README}
  212. ${PROJECT_DEFAULT_CONF} DESTINATION ${PROJECT_DATA_PATH})
  213. install(FILES ${PROJECT_DEFAULT_CONF} DESTINATION ${WMFS_SYSCONFDIR})
  214. install(FILES "wmfs.desktop" DESTINATION ${WMFS_XSESSION_PATH})