CMakeLists.txt 7.0 KB

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