Subversion Repositories HomeAutomation

Rev

Rev 2107 | Rev 2252 | Go to most recent revision | 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. ###############################################################################
  25. # - Find mysqlclient
  26. # Find the native MySQL includes and library
  27. #
  28. #  MYSQL_INCLUDE_DIR - where to find mysql.h, etc.
  29. #  MYSQL_LIBRARIES   - List of libraries when using MySQL.
  30. #  MYSQL_FOUND       - True if MySQL found.
  31. ###############################################################################
  32.  
  33. IF (MYSQL_INCLUDE_DIR)
  34.   # Already in cache, be silent
  35.   SET(MYSQL_FIND_QUIETLY TRUE)
  36. ENDIF (MYSQL_INCLUDE_DIR)
  37.  
  38. FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
  39.   /usr/local/include/mysql
  40.   /usr/include/mysql
  41. )
  42.  
  43. SET(MYSQL_NAMES mysqlclient mysqlclient_r)
  44. FIND_LIBRARY(MYSQL_LIBRARY
  45.   NAMES ${MYSQL_NAMES}
  46.   PATHS /usr/lib /usr/local/lib
  47.   PATH_SUFFIXES mysql
  48. )
  49.  
  50. IF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
  51.   SET(MYSQL_FOUND TRUE)
  52.   SET( MYSQL_LIBRARIES ${MYSQL_LIBRARY} )
  53. ELSE (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
  54.   SET(MYSQL_FOUND FALSE)
  55.   SET( MYSQL_LIBRARIES )
  56. ENDIF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
  57.  
  58. IF (MYSQL_FOUND)
  59.   IF (NOT MYSQL_FIND_QUIETLY)
  60.     MESSAGE(STATUS "Found MySQL: ${MYSQL_LIBRARY}")
  61.   ENDIF (NOT MYSQL_FIND_QUIETLY)
  62. ELSE (MYSQL_FOUND)
  63.   IF (MYSQL_FIND_REQUIRED)
  64.     MESSAGE(STATUS "Looked for MySQL libraries named ${MYSQL_NAMES}.")
  65.     MESSAGE(FATAL_ERROR "Could NOT find MySQL library")
  66.   ENDIF (MYSQL_FIND_REQUIRED)
  67. ENDIF (MYSQL_FOUND)
  68.  
  69. MARK_AS_ADVANCED(
  70.   MYSQL_LIBRARY
  71.   MYSQL_INCLUDE_DIR
  72. )
  73.  
  74.  
  75.  
  76. ###############################################################################
  77. include_directories(${MYSQL_INCLUDE_DIR})
  78. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  79. include_directories(src)
  80. add_subdirectory(src)
  81.  
  82. set(CMAKE_BUILD_TYPE Release)
  83.  
  84. # Find Boost
  85. ###############################################################################
  86. set(BOOST_LIBS thread-mt system-mt signals-mt program_options-mt filesystem-mt date_time-mt)
  87. find_package(Boost COMPONENTS ${BOOST_LIBS} REQUIRED)
  88. find_package(Threads REQUIRED)
  89.  
  90.  
  91.  
  92. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/AtomSvnRev")
  93.     file(READ "${CMAKE_CURRENT_SOURCE_DIR}/AtomSvnRev" SUBVERSION_REVISION)
  94. else(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/AtomSvnRev")
  95.     GET_SVN_REVISION(${CMAKE_CURRENT_SOURCE_DIR} SUBVERSION_REVISION)
  96. endif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/AtomSvnRev")
  97.  
  98.  
  99. set(CMAKE_INSTALL_PREFIX / CACHE INTERNAL "")
  100. set(CPACK_PACKAGING_INSTALL_PREFIX "/")
  101. set(CPACK_PACKAGE_DESCRIPTION "Homeautomation Control Software")
  102. set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Contains atomd and atomic for controlling your can network. Works in unison with the hardware on project.auml.se.")
  103. set(CPACK_PACKAGE_NAME "atom")
  104. set(CPACK_PACKAGE_CONTACT "Mattias Runge")
  105. set(CPACK_PACKAGE_VENDOR "project.auml.se")
  106. set(CPACK_PACKAGE_VERSION_MAJOR "1")
  107. set(CPACK_PACKAGE_VERSION_MINOR "5")
  108. set(CPACK_PACKAGE_VERSION_PATCH "${SUBVERSION_REVISION}")
  109. set(CPACK_GENERATOR "DEB;")
  110. set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.6), libgcc1 (>= 1:4.1)")
  111. set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-${CMAKE_SYSTEM_PROCESSOR}")
  112.  
  113. set(VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
  114.  
  115. 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)
  116. set(ATOMD_LIBS ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} v8)
  117.  
  118. 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)
  119. set(ATOMIC_LIBS ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} readline)
  120.  
  121. if(${X11_FOUND})
  122.     message(STATUS "Building with Xorg support")
  123.     set(USE_PLUGIN_XORG ON)
  124.     set(ATOMD_FILES ${ATOMD_FILES} src/vm/plugin/Xorg.cpp)
  125.     set(ATOMD_LIBS ${ATOMD_LIBS} ${X11_LIBRARIES})
  126. endif(${X11_FOUND})
  127.  
  128. if(${MYSQL_FOUND})
  129.     message(STATUS "Building with MySql support")
  130.     set(USE_PLUGIN_MYSQL ON)
  131.     set(ATOMD_FILES ${ATOMD_FILES} src/vm/plugin/MySql.cpp)
  132.     set(ATOMD_LIBS ${ATOMD_LIBS} ${MYSQL_LIBRARIES})
  133. endif(${MYSQL_FOUND})
  134.  
  135. add_executable(atomd ${ATOMD_FILES})
  136. target_link_libraries(atomd ${ATOMD_LIBS})
  137.  
  138. add_executable(atomic ${ATOMIC_FILES})
  139. target_link_libraries(atomic ${ATOMIC_LIBS})
  140.  
  141. #NEEDED               libpthread.so.0
  142. #NEEDED               libboost_thread.so.1.42.0
  143. #NEEDED               libboost_system.so.1.42.0
  144. #NEEDED               libboost_signals.so.1.42.0
  145. #NEEDED               libboost_program_options.so.1.42.0
  146. #NEEDED               libboost_filesystem.so.1.42.0
  147. #NEEDED               libboost_date_time.so.1.42.0
  148. #NEEDED               libv8.so.2.2.18
  149. #NEEDED               libX11.so.6
  150. #NEEDED               libstdc++.so.6
  151. #NEEDED               libm.so.6
  152. #NEEDED               libgcc_s.so.1
  153. #NEEDED               libc.so.6
  154. #NEEDED               libreadline.so.6
  155. # objdump -p build/atomic | grep NEEDED
  156. # apt-file search libpthread | grep /usr/lib
  157.  
  158. # TODO: Fix dependencies
  159.  
  160. message(STATUS "SVN revision is ${SUBVERSION_REVISION}")
  161.  
  162. install(TARGETS atomd RUNTIME DESTINATION usr/bin)
  163. install(TARGETS atomic RUNTIME DESTINATION usr/bin)
  164. install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/script" DESTINATION usr/share/atom FILES_MATCHING PATTERN "*.js" PATTERN ".svn" EXCLUDE)
  165. 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)
  166. 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)
  167. install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/atom.conf.template" DESTINATION etc/atom)
  168. # install upstart file
  169. install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/debian/atom.conf" DESTINATION etc/init)
  170.  
  171. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../Configuration/data.xml")
  172. install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../../Configuration/data.xml" DESTINATION usr/share/atom/protocol)
  173. else(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../Configuration/data.xml")
  174. install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/Configuration/data.xml" DESTINATION usr/share/atom/protocol)
  175. endif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../Configuration/data.xml")
  176.  
  177. include(CPack)
  178.  
  179. configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
  180.