/build/CMakeLists.txt

http://bdremote-ng.googlecode.com/ · CMake · 316 lines · 197 code · 92 blank · 27 comment · 0 complexity · 4451b6ecb7fcc9c5908e377b3477a5ac MD5 · raw file

  1. cmake_minimum_required (VERSION 2.6)
  2. project (bdremote-ng C)
  3. SET(CMAKE_INSTALL_PREFIX "")
  4. OPTION(USE_SPLINT "Run splint after compiling" OFF)
  5. OPTION(ENABLE_REPEAT "Enable key repeat." OFF)
  6. IF(ENABLE_REPEAT)
  7. message(STATUS "Repeat enabled.")
  8. ADD_DEFINITIONS("-DENABLE_REPEAT=1")
  9. ELSE(ENABLE_REPEAT)
  10. message(STATUS "Repeat disabled.")
  11. ADD_DEFINITIONS("-DENABLE_REPEAT=0")
  12. ENDIF(ENABLE_REPEAT)
  13. #
  14. # Version check.
  15. #
  16. IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/gen-release.sh)
  17. SET(BDREMOTENGHEADER "")
  18. file(READ ${CMAKE_CURRENT_SOURCE_DIR}/../src/bdremoteng.h BDREMOTENGHEADER)
  19. SET(BDREMOTENGHEADER_VERSION "")
  20. string(REGEX MATCH "#define VERSION \"(.+)\"" BDREMOTENGHEADER_VERSION ${BDREMOTENGHEADER})
  21. SET(BDREMOTENGHEADER_VERSION ${CMAKE_MATCH_1})
  22. SET(BDREMOTENGINSTALLSCRIPT "")
  23. file(READ ${CMAKE_CURRENT_SOURCE_DIR}/gen-release.sh BDREMOTENGINSTALLSCRIPT)
  24. SET(BDREMOTENGINSTALLSCRIPT_VERSION "")
  25. string(REGEX MATCH "VER=\"([0-9.]+)\"" BDREMOTENGINSTALLSCRIPT_VERSION ${BDREMOTENGINSTALLSCRIPT})
  26. SET(BDREMOTENGINSTALLSCRIPT_VERSION ${CMAKE_MATCH_1})
  27. string(COMPARE EQUAL ${BDREMOTENGHEADER_VERSION} ${BDREMOTENGINSTALLSCRIPT_VERSION} VERSION_EQ)
  28. IF(NOT ${VERSION_EQ})
  29. message(FATAL_ERROR "Version in gen-release.sh and src/bdremoteng.h differs! ('${BDREMOTENGHEADER_VERSION}' vs '${BDREMOTENGINSTALLSCRIPT_VERSION}'.)")
  30. ELSE(NOT ${VERSION_EQ})
  31. message(STATUS "Building software version: ${BDREMOTENGHEADER_VERSION}.")
  32. ENDIF(NOT ${VERSION_EQ})
  33. ELSE(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/gen-release.sh)
  34. message(STATUS "Building software version: check disabled ..")
  35. ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/gen-release.sh)
  36. #
  37. # Header file checks:
  38. #
  39. INCLUDE(CheckIncludeFiles)
  40. INCLUDE(CheckLibraryExists)
  41. CHECK_INCLUDE_FILES ("malloc.h" HAVE_MALLOC_H)
  42. IF(NOT HAVE_MALLOC_H)
  43. message(FATAL_ERROR "Required malloc header not found.")
  44. ENDIF(NOT HAVE_MALLOC_H)
  45. CHECK_INCLUDE_FILES ("bluetooth/bluetooth.h;bluetooth/hci.h;bluetooth/hci_lib.h;bluetooth/l2cap.h" HAVE_BLUETOOTH_H)
  46. IF(NOT HAVE_BLUETOOTH_H)
  47. message(FATAL_ERROR "Required bluetooth headers not found.")
  48. ENDIF(NOT HAVE_BLUETOOTH_H)
  49. CHECK_INCLUDE_FILES ("pthread.h" HAVE_PTHREAD_H)
  50. IF(NOT HAVE_PTHREAD_H)
  51. message(FATAL_ERROR "Required pthread header not found.")
  52. ENDIF(NOT HAVE_PTHREAD_H)
  53. CHECK_INCLUDE_FILES ("getopt.h" HAVE_GETOPT_H)
  54. IF(NOT HAVE_GETOPT_H)
  55. message(FATAL_ERROR "Required getopt(..) header not found.")
  56. ENDIF(NOT HAVE_GETOPT_H)
  57. #
  58. # Link checks:
  59. #
  60. CHECK_LIBRARY_EXISTS (bluetooth str2ba "" HAVE_BLUETOOTH_LIB)
  61. IF(NOT HAVE_BLUETOOTH_LIB)
  62. message(FATAL_ERROR "Required bluetooth library not found.")
  63. ENDIF(NOT HAVE_BLUETOOTH_LIB)
  64. CHECK_LIBRARY_EXISTS (pthread pthread_create "" HAVE_PTHREAD_LIB)
  65. IF(NOT HAVE_PTHREAD_LIB)
  66. message(FATAL_ERROR "Required pthread library not found.")
  67. ENDIF(NOT HAVE_PTHREAD_LIB)
  68. include(splint.cmake)
  69. # Prefix used for all files.
  70. SET(PREFIX "../src/")
  71. SET(GENERIC_HEADERS
  72. ${PREFIX}/bdrcfg.h
  73. ${PREFIX}/captureif.h
  74. ${PREFIX}/globaldefs.h
  75. ${PREFIX}/keydef.h
  76. ${PREFIX}/lirc_srv.h
  77. ${PREFIX}/q.h
  78. ${PREFIX}/l.h
  79. ${PREFIX}/event_out.h
  80. )
  81. SET(GENERIC_SOURCES
  82. ${PREFIX}/bdrcfg.c
  83. ${PREFIX}/captureif.c
  84. ${PREFIX}/globaldefs.c
  85. ${PREFIX}/lirc_callback.c
  86. ${PREFIX}/lirc_srv.c
  87. ${PREFIX}/lirc_thr.c
  88. ${PREFIX}/lirc_util.c
  89. ${PREFIX}/q.c
  90. ${PREFIX}/l.c
  91. ${PREFIX}/event_out.c
  92. )
  93. include_directories (${PREFIX})
  94. add_library (bdremoteng_generic ${GENERIC_HEADERS} ${GENERIC_SOURCES} )
  95. IF(USE_SPLINT)
  96. FOREACH(F ${GENERIC_HEADERS})
  97. add_splint ("bdremoteng_generic" ${F})
  98. ENDFOREACH(F)
  99. FOREACH(F ${GENERIC_SOURCES})
  100. add_splint ("bdremoteng_generic" ${F})
  101. ENDFOREACH(F)
  102. ENDIF(USE_SPLINT)
  103. install(FILES ${GENERIC_SOURCES} ${GENERIC_HEADERS} DESTINATION src)
  104. SET(BLUEZCAP_HEADERS
  105. ${PREFIX}/capture/capture_bluez.h
  106. )
  107. SET(BLUEZCAP_SOURCES
  108. ${PREFIX}/capture/capture_bluez.c
  109. )
  110. add_library (bdremoteng_bluezcap ${BLUEZCAP_HEADERS} ${BLUEZCAP_SOURCES})
  111. IF(USE_SPLINT)
  112. FOREACH(F ${BLUEZCAP_HEADERS})
  113. add_splint ("bdremoteng_bluezcap" ${F})
  114. ENDFOREACH(F)
  115. FOREACH(F ${BLUEZCAP_SOURCES})
  116. add_splint ("bdremoteng_bluezcap" ${F})
  117. ENDFOREACH(F)
  118. ENDIF(USE_SPLINT)
  119. install(FILES ${BLUEZCAP_SOURCES} ${BLUEZCAP_HEADERS} DESTINATION src/capture)
  120. #
  121. # Application.
  122. #
  123. SET(APP_HEADERS
  124. ${PREFIX}/bdremoteng.h
  125. ${PREFIX}/ug.h
  126. )
  127. SET(APP_SOURCES
  128. ${PREFIX}/bdremoteng.c
  129. ${PREFIX}/ug.c
  130. )
  131. add_executable (bdremoteng ${APP_HEADERS} ${APP_SOURCES})
  132. IF(USE_SPLINT)
  133. FOREACH(F ${APP_HEADERS})
  134. add_splint ("bdremoteng" ${F})
  135. ENDFOREACH(F)
  136. FOREACH(F ${APP_SOURCES})
  137. add_splint ("bdremoteng" ${F})
  138. ENDFOREACH(F)
  139. ENDIF(USE_SPLINT)
  140. install(FILES ${APP_HEADERS} ${APP_SOURCES} DESTINATION src)
  141. target_link_libraries(bdremoteng bdremoteng_bluezcap bdremoteng_generic)
  142. target_link_libraries(bdremoteng -lbluetooth)
  143. target_link_libraries(bdremoteng -lpthread)
  144. #
  145. # Capture test.
  146. #
  147. SET(PREFIX "../test")
  148. SET(TEST_HEADERS
  149. )
  150. SET(TEST_SOURCES
  151. ${PREFIX}/capture_test.c
  152. )
  153. add_executable (capturetest ${TEST_HEADERS} ${TEST_SOURCES})
  154. install(FILES ${TEST_HEADERS} ${TEST_SOURCES} DESTINATION test)
  155. target_link_libraries(capturetest bdremoteng_bluezcap bdremoteng_generic)
  156. target_link_libraries(capturetest -lbluetooth)
  157. target_link_libraries(capturetest -lpthread)
  158. #
  159. # Queue test.
  160. #
  161. SET(PREFIX "../test")
  162. SET(Q_TEST_HEADERS
  163. )
  164. SET(Q_TEST_SOURCES
  165. ${PREFIX}/qtest.c
  166. )
  167. add_executable (qtest ${Q_TEST_HEADERS} ${Q_TEST_SOURCES})
  168. install(FILES ${Q_TEST_HEADERS} ${Q_TEST_SOURCES} DESTINATION test)
  169. target_link_libraries(qtest bdremoteng_generic)
  170. #target_link_libraries(capturetest -lbluetooth)
  171. target_link_libraries(qtest -lpthread)
  172. SET(T_TEST_HEADERS
  173. )
  174. SET(T_TEST_SOURCES
  175. ${PREFIX}/ttest.c
  176. )
  177. add_executable (ttest ${T_TEST_HEADERS} ${T_TEST_SOURCES})
  178. install(FILES ${T_TEST_HEADERS} ${T_TEST_SOURCES} DESTINATION test)
  179. target_link_libraries(ttest bdremoteng_generic)
  180. target_link_libraries(ttest -lpthread)
  181. # Extra build files.
  182. SET(PREFIX ".")
  183. SET(BUILD_FILES
  184. ${PREFIX}/CMakeLists.txt
  185. ${PREFIX}/splint.cmake
  186. )
  187. install(FILES ${BUILD_FILES} DESTINATION build)
  188. # Make the script used to run cmake executable.
  189. SET(BUILD_FILES
  190. ${PREFIX}/gen.sh
  191. )
  192. install(FILES ${BUILD_FILES}
  193. DESTINATION build
  194. PERMISSIONS OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE
  195. )
  196. SET(PREFIX "../doc")
  197. SET(DOCS_FILES
  198. ${PREFIX}/keys.txt
  199. ${PREFIX}/README
  200. ${PREFIX}/TODO
  201. )
  202. install(FILES ${DOCS_FILES} DESTINATION doc)
  203. SET(PREFIX "../")
  204. SET(MISC_FILES
  205. ${PREFIX}/ChangeLog
  206. ${PREFIX}/COPYING
  207. ${PREFIX}/AUTHORS
  208. )
  209. install(FILES ${MISC_FILES} DESTINATION .)
  210. #
  211. # Stuff needed to create a source installation.
  212. #
  213. # This does not seem to work, and CPack is very badly documented.'
  214. # And it does not get any better with time.
  215. set(CPACK_PACKAGE_VERSION_MAJOR "0")
  216. set(CPACK_PACKAGE_VERSION_MINOR "1")
  217. set(CPACK_PACKAGE_VERSION_PATCH "0")
  218. set(CPACK_SOURCE_GENERATOR "TBZ2")
  219. set(CPACK_SOURCE_PACKAGE_FILE_NAME
  220. "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
  221. set(CPACK_SOURCE_IGNORE_FILES
  222. "/build/linux;/.svn/;/.bzr/;~$;${CPACK_SOURCE_IGNORE_FILES}")
  223. SET(CPACK_PACKAGE_EXECUTABLES "bdremoteng;bdremoteng")
  224. include(CPack)