Sim

ExternalLibraries.cmake

Sim
Sep 5th, 2011
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
CMake 9.26 KB | None | 0 0
  1. # ==================================================================================================
  2. # Macros
  3.  
  4. SET(PRINT_COMPILE_LENGTH "40")
  5. MACRO(FILL_WITH_DOTS VAR)
  6.     STRING(LENGTH ${${VAR}} NAME_LENGTH)
  7.     MATH(EXPR DOT_LENGTH "${PRINT_COMPILE_LENGTH} - ${NAME_LENGTH}")
  8.     IF(${DOT_LENGTH} LESS 0)
  9.         SET(DOT_LENGTH 0)
  10.     ENDIF(${DOT_LENGTH} LESS 0)
  11.     FOREACH(COUNT RANGE ${DOT_LENGTH})
  12.         SET(${VAR} "${${VAR}}.")
  13.     ENDFOREACH(COUNT)
  14. ENDMACRO(FILL_WITH_DOTS)
  15.  
  16. MACRO(PRINT_LIBRARY_STATUS NAME VERSIONHINT LOCATION)
  17.     SET(LIB_MESSAGE "${NAME} library found")
  18.     FILL_WITH_DOTS(LIB_MESSAGE)
  19.     IF(${ARGN})
  20.         MESSAGE(STATUS " ${LIB_MESSAGE} YES (${LOCATION})")
  21.     ELSE(${ARGN})
  22.         MESSAGE(STATUS " ${LIB_MESSAGE} NO")
  23.     ENDIF(${ARGN})
  24. ENDMACRO(PRINT_LIBRARY_STATUS)
  25.  
  26. # ==================================================================================================
  27. # Required dependencies
  28.  
  29. FIND_PACKAGE( SDL REQUIRED )
  30.  
  31. IF(NOT SDL_FOUND)
  32.   ## if SDL was not found regularly (e.g. by reading the SDLDIR environment variable)
  33.   ## ask user for the path to the local SDL installation
  34.   SET(SDL_PATH "" CACHE PATH "Provide path to SDL")
  35.   IF(NOT SDL_PATH)
  36.     message(FATAL_ERROR "Path to SDL was not provided")
  37.   ENDIF(NOT SDL_PATH)
  38.  
  39.   ## set given path as SDLDIR environment variable and search again
  40.   SET( ENV{SDLDIR} ${SDL_PATH} )
  41.   find_package( SDL REQUIRED )
  42. ENDIF(NOT SDL_FOUND)
  43.  
  44. ## setup variables
  45. set( SMP_INCLUDE_DIRS ${SMP_INCLUDE_DIRS} ${SDL_INCLUDE_DIR} )
  46. set( SMP_LIBRARY_DIRS ${SMP_LIBRARY_DIRS} ${SDL_LIB} )
  47. set( SMP_LIBRARIES    ${SMP_LIBRARIES}    ${SDL_LIBRARY} )
  48.  
  49. MARK_AS_ADVANCED(SDL_INCLUDE_DIR)
  50. MARK_AS_ADVANCED(SDL_LIBRARY)
  51. MARK_AS_ADVANCED(SDLMAIN_LIBRARY)
  52.  
  53. # ==================================================================================================
  54. # Optional dependencies
  55.  
  56. SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
  57.  
  58. FIND_PACKAGE( Lua51 )
  59. FIND_PACKAGE( EXPAT )
  60. FIND_PACKAGE( PNG )
  61. FIND_PACKAGE( Sqlite )
  62. #TODO: FIND_PACKAGE( bfVFS )
  63.  
  64. ## First check if the libraries are available in the system
  65. ## If not, use the SMP libraries
  66. IF(NOT LUA51_FOUND)
  67.   SET( MISSING_LIBS ${MISSING_LIBS} "lua")
  68. ENDIF(NOT LUA51_FOUND)
  69.  
  70. IF(NOT EXPAT_FOUND)
  71.   SET( MISSING_LIBS ${MISSING_LIBS} "expat")
  72. ENDIF(NOT EXPAT_FOUND)
  73.  
  74. IF(NOT PNG_FOUND)
  75.   SET( MISSING_LIBS ${MISSING_LIBS} "libpng")
  76. ENDIF(NOT PNG_FOUND)
  77.  
  78. IF(NOT SQLITE_FOUND)
  79.   SET( MISSING_LIBS ${MISSING_LIBS} "sqlite")
  80. ENDIF(NOT SQLITE_FOUND)
  81.  
  82. IF(NOT BFVFS_FOUND)
  83.   SET( MISSING_LIBS ${MISSING_LIBS} "bfvfs")
  84. ENDIF(NOT BFVFS_FOUND)
  85.  
  86. ## get Path to SMP libraries
  87. SET(SMP_LIBS_DIR "SMP_LIBS_DIR_NOT_FOUND" CACHE PATH "Path to the external SMP libraries")
  88. STRING(COMPARE NOTEQUAL ${SMP_LIBS_DIR} "SMP_LIBS_DIR_NOT_FOUND" SMP_LIBS_FOUND)
  89.  
  90. ## find bfVFS
  91. LIST(FIND MISSING_LIBS "bfvfs" BFVFS_MISSING)
  92. IF(NOT ${BFVFS_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  93.   FIND_FILE(BFVFS_CONFIG_FILE "BFVFSConfig.cmake" PATHS ${SMP_LIBS_DIR})
  94.   MARK_AS_ADVANCED(BFVFS_CONFIG_FILE)
  95.   IF(BFVFS_CONFIG_FILE)
  96.     INCLUDE( ${BFVFS_CONFIG_FILE} )
  97.     SET(BFVFS_LOC "inbuilt")
  98.   ELSE(BFVFS_CONFIG_FILE)
  99.     MESSAGE(SEND_ERROR "could not find bfVFS config file")
  100.   ENDIF(BFVFS_CONFIG_FILE)
  101. ELSEIF(NOT ${BFVFS_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  102.   SET(BFVFS_LOC "system")
  103. ENDIF(NOT ${BFVFS_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  104.  
  105. ## find Lua
  106. LIST(FIND MISSING_LIBS "lua" LUA_MISSING)
  107. IF(NOT ${LUA_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  108.   FIND_FILE(LUA_CONFIG_FILE "LuaConfig.cmake" PATHS ${SMP_LIBS_DIR})
  109.   MARK_AS_ADVANCED(LUA_CONFIG_FILE)
  110.   IF(LUA_CONFIG_FILE)
  111.     INCLUDE( ${LUA_CONFIG_FILE} )
  112.     SET(LUA_LOC "inbuilt")
  113.   ELSE(LUA_CONFIG_FILE)
  114.     MESSAGE(SEND_ERROR "could not find Lua config file")
  115.   ENDIF(LUA_CONFIG_FILE)
  116. ELSE(NOT ${LUA_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  117.   SET(LUA_LOC "system")
  118. ENDIF(NOT ${LUA_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  119.  
  120. ## find SQLite
  121. LIST(FIND MISSING_LIBS "sqlite" SQLITE_MISSING)
  122. IF(NOT ${SQLITE_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  123.   FIND_FILE(SQLITE_CONFIG_FILE "SQLiteConfig.cmake" PATHS ${SMP_LIBS_DIR})
  124.   MARK_AS_ADVANCED(SQLITE_CONFIG_FILE)
  125.   IF(SQLITE_CONFIG_FILE)
  126.     INCLUDE( ${SQLITE_CONFIG_FILE} )
  127.     SET(SQLITE_LOC "inbuilt")
  128.   ELSE(SQLITE_CONFIG_FILE)
  129.     MESSAGE(SEND_ERROR "could not find SQLITE config file")
  130.   ENDIF(SQLITE_CONFIG_FILE)
  131. ELSE(NOT ${SQLITE_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  132.   SET(SQLITE_LOC "system")
  133.   # TODO: move this
  134.   MARK_AS_ADVANCED(SQLITE_INCLUDE_DIR)
  135.   MARK_AS_ADVANCED(SQLITE_LIBRARY_DEBUG)
  136.   MARK_AS_ADVANCED(SQLITE_LIBRARY_RELEASE)
  137. ENDIF(NOT ${SQLITE_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  138.  
  139. ## find EXPAT
  140. LIST(FIND MISSING_LIBS "expat" EXPAT_MISSING)
  141. IF(NOT ${EXPAT_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  142.   FIND_FILE(EXPAT_CONFIG_FILE "ExpatConfig.cmake" PATHS ${SMP_LIBS_DIR})
  143.   MARK_AS_ADVANCED(EXPAT_CONFIG_FILE)
  144.   IF(EXPAT_CONFIG_FILE)
  145.     INCLUDE( ${EXPAT_CONFIG_FILE} )
  146.     SET(EXPAT_LOC "inbuilt")
  147.   ELSE(EXPAT_CONFIG_FILE)
  148.     MESSAGE(SEND_ERROR "could not find EXPAT config file")
  149.   ENDIF(EXPAT_CONFIG_FILE)
  150. ELSE(NOT ${EXPAT_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  151.   SET(EXPAT_LOC "system")
  152. ENDIF(NOT ${EXPAT_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  153.  
  154. ## find LIBPNG
  155. LIST(FIND MISSING_LIBS "libpng" LIBPNG_MISSING)
  156. IF(NOT ${LIBPNG_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  157.   FIND_FILE(LIBPNG_CONFIG_FILE "LibpngConfig.cmake" PATHS ${SMP_LIBS_DIR})
  158.   MARK_AS_ADVANCED(LIBPNG_CONFIG_FILE)
  159.   IF(LIBPNG_CONFIG_FILE)
  160.     INCLUDE( ${LIBPNG_CONFIG_FILE} )
  161.     SET(LIBPNG_LOC "inbuilt")
  162.   ELSE(LIBPNG_CONFIG_FILE)
  163.     MESSAGE(SEND_ERROR "could not find LIBPNG config file")
  164.   ENDIF(LIBPNG_CONFIG_FILE)
  165. ELSE(NOT ${LIBPNG_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  166.   SET(LIBPNG_LOC "system")
  167.   SET(LIBPNG_FOUND ${PNG_FOUND})
  168. ENDIF(NOT ${LIBPNG_MISSING} EQUAL -1 AND ${SMP_LIBS_FOUND})
  169.  
  170. ## options for other external libraries
  171. if(BFVFS_FOUND)
  172.   option(SMP_WITH_BFVFS "enable VFS support" ON)
  173. endif()
  174. ##
  175. if(EXPAT_FOUND)
  176.   option(SMP_WITH_XML "enable XML support" ON)
  177. endif()
  178. ##
  179. if(LUA51_FOUND)
  180.   option(SMP_WITH_LUA "enable Lua support" ON)
  181. endif()
  182. ##
  183. if(SQLITE_FOUND)
  184.   option(SMP_WITH_SQLITE "enable SQLite support" ON)
  185. endif()
  186. ##
  187. if(LIBPNG_FOUND)
  188.   option(SMP_WITH_LIBPNG "enable libpng support" ON)
  189. endif()
  190.  
  191. MESSAGE(STATUS "----------------------------------------------------------------------------")
  192. MESSAGE(STATUS "CHECKING FOR OPTIONAL DEPENDECIES")
  193. MESSAGE(STATUS "")
  194. PRINT_LIBRARY_STATUS("bfVFS"  "" "${BFVFS_LOC}" BFVFS_FOUND)
  195. PRINT_LIBRARY_STATUS("expat"  "" "${EXPAT_LOC}" EXPAT_FOUND)
  196. PRINT_LIBRARY_STATUS("lua"    "(version >= 5.1)" "${LUA_LOC}" LUA51_FOUND)
  197. PRINT_LIBRARY_STATUS("sqlite" "(version >= 3)" "${SQLITE_LOC}" SQLITE_FOUND)
  198. PRINT_LIBRARY_STATUS("libpng" "" "${LIBPNG_LOC}" LIBPNG_FOUND)
  199.  
  200. ## No of missing libs
  201. LIST(LENGTH MISSING_LIBS NUM_LIBS_MISSING)
  202.  
  203. IF(NOT ${SMP_LIBS_FOUND} AND ${NUM_LIBS_MISSING} GREATER 0)
  204.   MESSAGE(STATUS "")
  205.   MESSAGE(STATUS "**********")
  206.   MESSAGE(STATUS "* NOTICE *")
  207.   MESSAGE(STATUS "**********")
  208.   FOREACH(MISSING_LIB ${MISSING_LIBS})
  209.     MESSAGE(STATUS " - library ${MISSING_LIB} missing")
  210.   ENDFOREACH(MISSING_LIB ${MISSING_LIBS})
  211.   MESSAGE(STATUS "You can either install the missing libraries or build them and set ")
  212.   MESSAGE(STATUS "the SMP_LIBS_DIR variable using cmake-gui.")
  213.   #MESSAGE(SEND_ERROR "Please install the missing libraries")
  214. ENDIF(NOT ${SMP_LIBS_FOUND} AND ${NUM_LIBS_MISSING} GREATER 0)
  215.  
  216. MESSAGE(STATUS "")
  217. MESSAGE(STATUS "----------------------------------------------------------------------------")
  218. MESSAGE(STATUS "")
  219.  
  220. if(SMP_WITH_BFVFS)
  221.     ## setup variables
  222.     set( SMP_DEFINITIONS  ${SMP_DEFINITIONS}  -DWITH_VFS ${BFVFS_DEFINITIONS} )
  223.     set( SMP_INCLUDE_DIRS ${SMP_INCLUDE_DIRS} ${BFVFS_INCLUDE_DIR} )
  224.     set( SMP_LIBRARY_DIRS ${SMP_LIBRARY_DIRS} ${BFVFS_LIBRARY_DIR} )
  225.     set( SMP_LIBRARIES    ${SMP_LIBRARIES}    ${BFVFS_LIBRARIES} )
  226. endif()
  227.  
  228. if(SMP_WITH_LUA)
  229.     ## setup variables
  230.     set( SMP_DEFINITIONS  ${SMP_DEFINITIONS}  -DWITH_LUA ${LUA_DEFINITIONS} )
  231.     set( SMP_INCLUDE_DIRS ${SMP_INCLUDE_DIRS} ${LUA_INCLUDE_DIR} )
  232.     set( SMP_LIBRARY_DIRS ${SMP_LIBRARY_DIRS} ${LUA_LIBRARY_DIR} )
  233.     set( SMP_LIBRARIES    ${SMP_LIBRARIES}    ${LUA_LIBRARIES} )
  234. endif()
  235.  
  236. if(SMP_WITH_SQLITE)
  237.     ## setup variables
  238.     set( SMP_DEFINITIONS  ${SMP_DEFINITIONS}  -DWITH_SQLITE ${SQLITE_DEFINITIONS} )
  239.     set( SMP_INCLUDE_DIRS ${SMP_INCLUDE_DIRS} ${SQLITE_INCLUDE_DIR} )
  240.     set( SMP_LIBRARY_DIRS ${SMP_LIBRARY_DIRS} ${SQLITE_LIBRARY_DIR} )
  241.     set( SMP_LIBRARIES    ${SMP_LIBRARIES}    ${SQLITE_LIBRARIES} )
  242. endif()
  243.  
  244. if(SMP_WITH_XML)
  245.     ## setup variables
  246.     set( SMP_DEFINITIONS  ${SMP_DEFINITIONS}  -DWITH_XML ${EXPAT_DEFINITIONS} )
  247.     set( SMP_INCLUDE_DIRS ${SMP_INCLUDE_DIRS} ${EXPAT_INCLUDE_DIR} )
  248.     set( SMP_LIBRARY_DIRS ${SMP_LIBRARY_DIRS} ${EXPAT_LIBRARY_DIR} )
  249.     set( SMP_LIBRARIES    ${SMP_LIBRARIES}    ${EXPAT_LIBRARIES} )
  250. endif()
  251.  
  252. if(SMP_WITH_LIBPNG)
  253.     ## setup variables
  254.     set( SMP_DEFINITIONS  ${SMP_DEFINITIONS}  -DWITH_PNG ${LIBPNG_DEFINITIONS} )
  255.     set( SMP_INCLUDE_DIRS ${SMP_INCLUDE_DIRS} ${LIBPNG_INCLUDE_DIR} )
  256.     set( SMP_LIBRARY_DIRS ${SMP_LIBRARY_DIRS} ${LIBPNG_LIBRARY_DIR} )
  257.     set( SMP_LIBRARIES    ${SMP_LIBRARIES}    ${LIBPNG_LIBRARIES} )
  258. endif()
Advertisement
Add Comment
Please, Sign In to add comment