Subversion Repositories HomeAutomation

Rev

Rev 2310 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. cmake_minimum_required(VERSION 2.8)
  2.  
  3. project(atom)
  4.  
  5. set(CMAKE_CXX_FLAGS "-g -Wall -O0 -Wno-write-strings")
  6.  
  7.  
  8. ###############################################################################
  9. # Find Subversion client
  10. ###############################################################################
  11. find_program(SVN_EXECUTABLE svn DOC "subversion command line client")
  12. macro(GET_SVN_REVISION dir variable)
  13.     execute_process(COMMAND ${SVN_EXECUTABLE} info ${dir} OUTPUT_VARIABLE ${variable} OUTPUT_STRIP_TRAILING_WHITESPACE)
  14.     string(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*" "\\2" ${variable} "${${variable}}")
  15. endmacro(GET_SVN_REVISION)
  16.  
  17.  
  18. ###############################################################################
  19. # Find X11
  20. ###############################################################################
  21. include(FindX11)
  22.  
  23. ###############################################################################
  24. # - Find mosquitto
  25. # Finds and includes the library
  26. #
  27. #  MOSQUITTO_INCLUDE_DIR - where to find mosquitto.h, etc.
  28. #  MOSQUITTO_LIBRARIES   - List of libraries when using mosquitto or mosquittopp.
  29. #  MOSQUITTO_FOUND       - True if mosquitto found.
  30. ###############################################################################
  31.  
  32. IF (MOSQUITTO_INCLUDE_DIR)
  33.   # Already in cache, be silent
  34.   SET(MOSQUITTO_FIND_QUIETLY TRUE)
  35. ENDIF (MOSQUITTO_INCLUDE_DIR)
  36.  
  37. FIND_PATH(MOSQUITTO_INCLUDE_DIR mosquitto.h
  38.   /usr/include/
  39. )
  40.  
  41. SET(MOSQUITTO_NAMES mosquitto)
  42. FIND_LIBRARY(MOSQUITTO_LIBRARY
  43.   NAMES ${MOSQUITTO_NAMES}
  44.   PATHS /usr/lib /usr/local/lib
  45.   PATH_SUFFIXES
  46. )
  47.  
  48. SET(MOSQUITTOPP_NAMES mosquittopp)
  49. FIND_LIBRARY(MOSQUITTOPP_LIBRARY
  50.   NAMES ${MOSQUITTOPP_NAMES}
  51.   PATHS /usr/lib /usr/local/lib
  52.   PATH_SUFFIXES
  53. )
  54.  
  55. IF (MOSQUITTO_INCLUDE_DIR AND MOSQUITTO_LIBRARY)
  56.   SET(MOSQUITTO_FOUND TRUE)
  57.   SET( MOSQUITTO_LIBRARIES ${MOSQUITTO_LIBRARY} ${MOSQUITTOPP_LIBRARY} )
  58. ELSE (MOSQUITTO_INCLUDE_DIR AND MOSQUITTO_LIBRARY)
  59.   SET(MOSQUITTO_FOUND FALSE)
  60.   SET( MOSQUITTO_LIBRARIES )
  61. ENDIF (MOSQUITTO_INCLUDE_DIR AND MOSQUITTO_LIBRARY)
  62.  
  63. IF (MOSQUITTO_FOUND)
  64.   IF (NOT MOSQUITTO_FIND_QUIETLY)
  65.     MESSAGE(STATUS "Found Mosquitto: ${MOSQUITTO_LIBRARY}")
  66.   ENDIF (NOT MOSQUITTO_FIND_QUIETLY)
  67. ELSE (MOSQUITTO_FOUND)
  68.   IF (MOSQUITTO_FIND_REQUIRED)
  69.     MESSAGE(STATUS "Looked for Mosquitto libraries named ${MOSQUITTO_NAMES}.")
  70.     MESSAGE(FATAL_ERROR "Could NOT find Mosquitto library")
  71.   ENDIF (MOSQUITTO_FIND_REQUIRED)
  72. ENDIF (MOSQUITTO_FOUND)
  73.  
  74. MARK_AS_ADVANCED(
  75.   MOSQUITTO_LIBRARY
  76.   MOSQUITTO_INCLUDE_DIR
  77. )
  78.  
  79.  
  80.  
  81. ###############################################################################
  82. # - Find mysqlclient
  83. # Find the native MySQL includes and library
  84. #
  85. #  MYSQL_INCLUDE_DIR - where to find mysql.h, etc.
  86. #  MYSQL_LIBRARIES   - List of libraries when using MySQL.
  87. #  MYSQL_FOUND       - True if MySQL found.
  88. ###############################################################################
  89.  
  90. IF (MYSQL_INCLUDE_DIR)
  91.   # Already in cache, be silent
  92.   SET(MYSQL_FIND_QUIETLY TRUE)
  93. ENDIF (MYSQL_INCLUDE_DIR)
  94.  
  95. FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
  96.   /usr/local/include/mysql
  97.   /usr/include/mysql
  98. )
  99.  
  100. SET(MYSQL_NAMES mysqlclient mysqlclient_r mosquitto)
  101. FIND_LIBRARY(MYSQL_LIBRARY
  102.   NAMES ${MYSQL_NAMES}
  103.   PATHS /usr/lib /usr/local/lib
  104.   PATH_SUFFIXES mysql
  105. )
  106.  
  107. IF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
  108.   SET(MYSQL_FOUND TRUE)
  109.   SET( MYSQL_LIBRARIES ${MYSQL_LIBRARY} )
  110. ELSE (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
  111.   SET(MYSQL_FOUND FALSE)
  112.   SET( MYSQL_LIBRARIES )
  113. ENDIF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
  114.  
  115. IF (MYSQL_FOUND)
  116.   IF (NOT MYSQL_FIND_QUIETLY)
  117.     MESSAGE(STATUS "Found MySQL: ${MYSQL_LIBRARY}")
  118.   ENDIF (NOT MYSQL_FIND_QUIETLY)
  119. ELSE (MYSQL_FOUND)
  120.   IF (MYSQL_FIND_REQUIRED)
  121.     MESSAGE(STATUS "Looked for MySQL libraries named ${MYSQL_NAMES}.")
  122.     MESSAGE(FATAL_ERROR "Could NOT find MySQL library")
  123.   ENDIF (MYSQL_FIND_REQUIRED)
  124. ENDIF (MYSQL_FOUND)
  125.  
  126. MARK_AS_ADVANCED(
  127.   MYSQL_LIBRARY
  128.   MYSQL_INCLUDE_DIR
  129. )
  130.  
  131.  
  132.  
  133. ###############################################################################
  134. include_directories(${MYSQL_INCLUDE_DIR})
  135. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  136. include_directories(src)
  137. add_subdirectory(src)
  138.  
  139. set(CMAKE_BUILD_TYPE Release)
  140.  
  141. # Find Boost
  142. ###############################################################################
  143. set(BOOST_LIBS thread system signals program_options filesystem date_time)
  144. find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
  145. find_package(Threads REQUIRED)
  146.  
  147.  
  148.  
  149. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/AtomSvnRev")
  150.     file(READ "${CMAKE_CURRENT_SOURCE_DIR}/AtomSvnRev" SUBVERSION_REVISION)
  151. else(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/AtomSvnRev")
  152.     GET_SVN_REVISION(${CMAKE_CURRENT_SOURCE_DIR} SUBVERSION_REVISION)
  153. endif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/AtomSvnRev")
  154.  
  155.  
  156. set(CMAKE_INSTALL_PREFIX / CACHE INTERNAL "")
  157. set(CPACK_PACKAGING_INSTALL_PREFIX "/")
  158. set(CPACK_PACKAGE_DESCRIPTION "Homeautomation Control Software")
  159. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Contains atomd and atomic for controlling your can network. Works in unison with the hardware on projekt.auml.se.")
  160. set(CPACK_PACKAGE_NAME "atom")
  161. set(CPACK_PACKAGE_CONTACT "Mattias Runge")
  162. set(CPACK_PACKAGE_VENDOR "project.auml.se")
  163. set(CPACK_PACKAGE_VERSION_MAJOR "1")
  164. set(CPACK_PACKAGE_VERSION_MINOR "5")
  165. set(CPACK_PACKAGE_VERSION_PATCH "${SUBVERSION_REVISION}")
  166. set(CPACK_GENERATOR "DEB;")
  167. set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.6), libgcc1 (>= 1:4.1)")
  168. set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-${CMAKE_SYSTEM_PROCESSOR}")
  169.  
  170. set(VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
  171.  
  172. set(ATOMD_FILES src/can/Forward.cpp src/net/Url.cpp src/net/GetFile.cpp src/net/TcpServer.cpp src/common/log.cpp src/common/common.cpp src/control/Code.cpp src/vm/plugin/Storage.cpp src/storage/Store.cpp src/storage/Manager.cpp src/vm/plugin/Socket.cpp src/vm/plugin/Console.cpp src/vm/plugin/JsPipe.cpp src/vm/plugin/Module.cpp src/vm/plugin/Node.cpp src/vm/plugin/Timer.cpp src/vm/plugin/System.cpp src/vm/Plugin.cpp src/vm/Manager.cpp src/timer/Subscriber.cpp src/control/Module.cpp src/control/Node.cpp src/control/Manager.cpp src/common/IoService.cpp src/net/Subscriber.cpp src/can/Monitor.cpp src/can/CanDaemon.cpp src/can/Message.cpp src/xml/Node.cpp src/can/Protocol.cpp src/common/Bitset.cpp src/common/Byteset.cpp src/can/Network.cpp src/broker/Subscriber.cpp src/broker/Message.cpp src/broker/Manager.cpp src/config/Manager.cpp src/logging/Logger.cpp src/timer/Timer.cpp src/timer/Manager.cpp src/net/SerialClient.cpp src/net/UdpClient.cpp src/net/TcpClient.cpp src/net/Client.cpp src/net/Manager.cpp src/atomd.cpp)
  173. set(ATOMD_LIBS ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} v8)
  174.  
  175. set(ATOMIC_FILES src/common/common.cpp src/atomic.cpp src/logging/Logger.cpp src/common/log.cpp src/common/IoService.cpp src/net/Subscriber.cpp src/common/Byteset.cpp src/net/TcpServer.cpp src/net/SerialClient.cpp src/net/UdpClient.cpp src/net/TcpClient.cpp src/net/Client.cpp src/net/Manager.cpp)
  176. set(ATOMIC_LIBS ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} readline)
  177.  
  178. if(${X11_FOUND})
  179.     message(STATUS "Building with Xorg support")
  180.     set(USE_PLUGIN_XORG ON)
  181.     set(ATOMD_FILES ${ATOMD_FILES} src/vm/plugin/Xorg.cpp)
  182.     set(ATOMD_LIBS ${ATOMD_LIBS} ${X11_LIBRARIES})
  183. endif(${X11_FOUND})
  184.  
  185. if(${MYSQL_FOUND})
  186.     message(STATUS "Building with MySql support")
  187.     set(USE_PLUGIN_MYSQL ON)
  188.     set(ATOMD_FILES ${ATOMD_FILES} src/vm/plugin/MySql.cpp)
  189.     set(ATOMD_LIBS ${ATOMD_LIBS} ${MYSQL_LIBRARIES})
  190. endif(${MYSQL_FOUND})
  191.  
  192. if(${MOSQUITTO_FOUND})
  193.     message(STATUS "Building with Mqtt support")
  194.     set(USE_PLUGIN_MOSQUITTO ON)
  195.     include_directories(${MOSQUITTO_INCLUDE_DIR})
  196.     set(ATOMD_FILES ${ATOMD_FILES} src/vm/plugin/Mqtt.cpp)
  197.     set(ATOMD_LIBS ${ATOMD_LIBS} ${MOSQUITTO_LIBRARIES})
  198. endif(${MOSQUITTO_FOUND})
  199.  
  200. add_executable(atomd ${ATOMD_FILES})
  201. target_link_libraries(atomd ${ATOMD_LIBS})
  202.  
  203. add_executable(atomic ${ATOMIC_FILES})
  204. target_link_libraries(atomic ${ATOMIC_LIBS})
  205.  
  206. #NEEDED               libpthread.so.0
  207. #NEEDED               libboost_thread.so.1.42.0
  208. #NEEDED               libboost_system.so.1.42.0
  209. #NEEDED               libboost_signals.so.1.42.0
  210. #NEEDED               libboost_program_options.so.1.42.0
  211. #NEEDED               libboost_filesystem.so.1.42.0
  212. #NEEDED               libboost_date_time.so.1.42.0
  213. #NEEDED               libv8.so.2.2.18
  214. #NEEDED               libX11.so.6
  215. #NEEDED               libstdc++.so.6
  216. #NEEDED               libm.so.6
  217. #NEEDED               libgcc_s.so.1
  218. #NEEDED               libc.so.6
  219. #NEEDED               libreadline.so.6
  220. # objdump -p build/atomic | grep NEEDED
  221. # apt-file search libpthread | grep /usr/lib
  222.  
  223. # TODO: Fix dependencies
  224.  
  225. message(STATUS "SVN revision is ${SUBVERSION_REVISION}")
  226.  
  227. install(TARGETS atomd RUNTIME DESTINATION usr/bin)
  228. install(TARGETS atomic RUNTIME DESTINATION usr/bin)
  229. install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/script" DESTINATION usr/share/atom FILES_MATCHING PATTERN "*.js" PATTERN ".svn" EXCLUDE)
  230. install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/uscript" DESTINATION etc/atom DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_WRITE WORLD_EXECUTE FILE_PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ GROUP_WRITE WORLD_READ WORLD_WRITE FILES_MATCHING PATTERN "*" PATTERN ".svn" EXCLUDE)
  231. install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/storage" DESTINATION etc/atom DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_WRITE WORLD_EXECUTE FILE_PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ GROUP_WRITE WORLD_READ WORLD_WRITE FILES_MATCHING PATTERN "*" PATTERN ".svn" EXCLUDE)
  232. install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/atom.conf.template" DESTINATION etc/atom)
  233. # install upstart file
  234. install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/debian/atom.conf" DESTINATION etc/init)
  235.  
  236. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../Configuration/data.xml")
  237. install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../Configuration/data.xml" DESTINATION usr/share/atom/protocol)
  238. else(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../Configuration/data.xml")
  239. install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/Configuration/data.xml" DESTINATION usr/share/atom/protocol)
  240. endif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../Configuration/data.xml")
  241.  
  242. include(CPack)
  243.  
  244. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
  245.