CMakeLists.txt 6.8 KB

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