CMakeLists.txt 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. # "Getting Started with CMake", a tutorial video by Eric Wing.
  2. # Part 1 of 6: http://www.youtube.com/watch?v=CLvZTyji_Uw
  3. # Part 2 of 6: http://www.youtube.com/watch?v=gUW-RrRQjEg
  4. # Part 3 of 6: http://www.youtube.com/watch?v=sz6cPhbuTk4
  5. # Part 4 of 6: http://www.youtube.com/watch?v=JICZOkyNXbg
  6. # Part 5 of 6: http://www.youtube.com/watch?v=lAiuLHy4dCk
  7. # Part 6 of 6: http://www.youtube.com/watch?v=fAtJNzDZdH8
  8. #
  9. # You can use notepad++ for syntax highlighting.
  10. # Naming conventions:
  11. # WITH_* : option to use an external package or not
  12. # ENABLE_* : option to use an internal feature/code or not
  13. # HAVE_* : internal variable indicating if we have and are using something
  14. cmake_minimum_required( VERSION 2.8.4 )
  15. project( eAthena )
  16. #
  17. # Prevent building in the source directory by default
  18. #
  19. if( ALLOW_SAME_DIRECTORY )
  20. elseif( "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}" )
  21. option( ALLOW_SAME_DIRECTORY "Allow CMake to build in the source directory." OFF )
  22. message( FATAL_ERROR "Do not use the source directory to build your files, instead create a separate folder and build there.\nExample:\n mkdir build\n cd build\n cmake -G\"Unix Makefiles\" ..\n make install\nTo skip this check, set ALLOW_SAME_DIRECTORY to 1 or ON" )
  23. endif()
  24. #
  25. # Global stuff
  26. #
  27. set( GLOBAL_LIBRARIES CACHE INTERNAL "" )
  28. set( GLOBAL_INCLUDE_DIRS CACHE INTERNAL "" )
  29. set( GLOBAL_DEFINITIONS CACHE INTERNAL "" )
  30. mark_as_advanced( GLOBAL_LIBRARIES GLOBAL_INCLUDE_DIRS GLOBAL_DEFINITIONS )
  31. if( WIN32 )
  32. list( APPEND GLOBAL_DEFINITIONS FD_SETSIZE=4096 )
  33. list( APPEND GLOBAL_LIBRARIES "oldnames.lib" "ws2_32.lib" )
  34. endif()
  35. if( MSVC )
  36. list( APPEND GLOBAL_DEFINITIONS _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE DB_MANUAL_CAST_TO_UNION )
  37. endif()
  38. #
  39. # Find svnversion
  40. #
  41. message( STATUS "Detecting svnversion" )
  42. find_program( SVNVERSION_EXECUTABLE svnversion )
  43. mark_as_advanced( SVNVERSION_EXECUTABLE )
  44. message( STATUS "Detecting svnversion - done" )
  45. #
  46. # Find Subversion
  47. #
  48. message( STATUS "Detecting Subversion" )
  49. find_package( Subversion )
  50. message( STATUS "Detecting Subversion - done" )
  51. #
  52. # PACKETVER
  53. #
  54. set( PACKETVER CACHE STRING "Sets the PACKETVER define of the servers. (see src/common/mmo.h)" )
  55. if( PACKETVER )
  56. list( APPEND GLOBAL_DEFINITIONS PACKETVER=${PACKETVER} )
  57. endif()
  58. #
  59. # SVNVERSION
  60. #
  61. if( SVNVERSION_EXECUTABLE )
  62. execute_process( COMMAND ${SVNVERSION_EXECUTABLE} ${PROJECT_SOURCE_DIR}
  63. OUTPUT_VARIABLE SVNVERSION
  64. OUTPUT_STRIP_TRAILING_WHITESPACE )
  65. string( REGEX REPLACE "[^1234567890MSexported]" "_" SVNVERSION ${SVNVERSION} )
  66. endif()
  67. if( Subversion_FOUND AND SVNVERSION )
  68. Subversion_WC_INFO( ${PROJECT_SOURCE_DIR} eAthena )
  69. if( eAthena_WC_URL )
  70. string( REGEX MATCH "[^/]+$" BRANCH ${eAthena_WC_URL} )
  71. set( SVNVERSION "${BRANCH}-${SVNVERSION}" )
  72. endif()
  73. endif()
  74. #####################################################################
  75. # package stuff
  76. #
  77. set( CPACK_PACKAGE_NAME "eAthena" )
  78. set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "MMORPG server package" )
  79. set( CPACK_PACKAGE_VERSION ${SVNVERSION} )
  80. set( CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE )
  81. #set( CPACK_MONOLITHIC_INSTALL ON )
  82. include( CPACK )
  83. set( Runtime "Runtime files" CACHE INTERNAL "" )
  84. set( Runtime_base "configurations, dbs, npcs, docs, ..." CACHE INTERNAL "" )
  85. set( Runtime_templates "conf/import and save (generated from conf/import-tmpl and save-tmpl)" CACHE INTERNAL "" )
  86. cpack_add_component_group( Runtime DESCRIPTION ${Runtime} DISPLAY_NAME "Runtime" )
  87. cpack_add_component( Runtime_base DESCRIPTION ${Runtime_base} DISPLAY_NAME "Base files" GROUP Runtime )
  88. cpack_add_component( Runtime_templates DESCRIPTION ${Runtime_templates} DISPLAY_NAME "Base templates" GROUP Runtime )
  89. set( Development "Development files" CACHE INTERNAL "" )
  90. set( Development_base "projects, 3rdparty, sources, templates" CACHE INTERNAL "" )
  91. cpack_add_component_group( Development DESCRIPTION ${Development} DISPLAY_NAME "Development" )
  92. cpack_add_component( Development_base DESCRIPTION ${Development_base} DISPLAY_NAME "Base files" GROUP Development )
  93. #
  94. # install stuff
  95. #
  96. option( WITH_COMPONENT_RUNTIME "install files needed to run the project" ON )
  97. option( WITH_COMPONENT_DEVELOPMENT "install files needed to build the project" OFF )
  98. option( INSTALL_TO_PATH "copy files to INSTALL_PATH" OFF )
  99. option( INSTALL_TO_SOURCE "copy files to source directory (${CMAKE_CURRENT_SOURCE_DIR})" OFF )
  100. option( INSTALL_TO_SUBDIR "copy files to subdirectory (${CMAKE_CURRENT_BINARY_DIR}/install)" OFF )
  101. set( INSTALL_PATH "${CMAKE_INSTALL_PREFIX}" CACHE STRING "install path (only used when INSTALL_TO_PATH is set)" )
  102. mark_as_advanced( CMAKE_INSTALL_PREFIX )
  103. if( INSTALL_TO_PATH AND NOT ("${INSTALL_TO}" STREQUAL "path") )# changed to path
  104. set_property( CACHE INSTALL_TO_SOURCE INSTALL_TO_SUBDIR PROPERTY VALUE OFF )
  105. elseif( INSTALL_TO_SOURCE AND NOT ("${INSTALL_TO}" STREQUAL "source") )# changed to source
  106. set_property( CACHE INSTALL_TO_PATH INSTALL_TO_SUBDIR PROPERTY VALUE OFF )
  107. elseif( INSTALL_TO_SUBDIR AND NOT ("${INSTALL_TO}" STREQUAL "subdir") )# changed to subdir
  108. set_property( CACHE INSTALL_TO_PATH INSTALL_TO_SOURCE PROPERTY VALUE OFF )
  109. elseif( NOT INSTALL_TO_PATH AND NOT INSTALL_TO_SOURCE AND NOT INSTALL_TO_SUBDIR )# default
  110. set_property( CACHE INSTALL_TO_SUBDIR PROPERTY VALUE ON )
  111. endif()
  112. if( INSTALL_TO_PATH )
  113. set( INSTALL_TO "path" CACHE INTERNAL "" )
  114. set_property( CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${INSTALL_PATH}" )
  115. elseif( INSTALL_TO_SOURCE )
  116. set( INSTALL_TO "source" CACHE INTERNAL "" )
  117. set_property( CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_CURRENT_SOURCE_DIR}" )
  118. elseif( INSTALL_TO_SUBDIR )
  119. set( INSTALL_TO "subdir" CACHE INTERNAL "" )
  120. set_property( CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_CURRENT_BINARY_DIR}/install" )
  121. endif()
  122. set( SVN_FOLDER_PATTERN "[\\.]svn" CACHE STRING "pattern of svn folder that we exclude from instalations" )
  123. mark_as_advanced( SVN_FOLDER_PATTERN )
  124. set( DEVELOPMENT_FILES
  125. "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt"
  126. "${CMAKE_CURRENT_SOURCE_DIR}/configure"
  127. "${CMAKE_CURRENT_SOURCE_DIR}/configure.in"
  128. "${CMAKE_CURRENT_SOURCE_DIR}/eAthena-6.dsw"
  129. "${CMAKE_CURRENT_SOURCE_DIR}/eAthena-7.1.sln"
  130. "${CMAKE_CURRENT_SOURCE_DIR}/eAthena-8.sln"
  131. "${CMAKE_CURRENT_SOURCE_DIR}/eAthena-9.sln"
  132. "${CMAKE_CURRENT_SOURCE_DIR}/eAthena-10.sln"
  133. )
  134. set( DEVELOPMENT_DIRECTORIES
  135. "3rdparty"
  136. "conf/import-tmpl"
  137. "save-tmpl"
  138. "src"
  139. "vcproj-6"
  140. "vcproj-7.1"
  141. "vcproj-8"
  142. "vcproj-9"
  143. "vcproj-10"
  144. )
  145. set( RUNTIME_FILES
  146. "${CMAKE_CURRENT_SOURCE_DIR}/athena-start"
  147. "${CMAKE_CURRENT_SOURCE_DIR}/Changelog-Trunk.txt"
  148. "${CMAKE_CURRENT_SOURCE_DIR}/char-server.sh"
  149. "${CMAKE_CURRENT_SOURCE_DIR}/charserv-sql.bat"
  150. "${CMAKE_CURRENT_SOURCE_DIR}/charserv.bat"
  151. "${CMAKE_CURRENT_SOURCE_DIR}/dbghelp.dll"
  152. "${CMAKE_CURRENT_SOURCE_DIR}/libmysql.dll"
  153. "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE"
  154. "${CMAKE_CURRENT_SOURCE_DIR}/login-server.sh"
  155. "${CMAKE_CURRENT_SOURCE_DIR}/logserv-sql.bat"
  156. "${CMAKE_CURRENT_SOURCE_DIR}/logserv.bat"
  157. "${CMAKE_CURRENT_SOURCE_DIR}/map-server.sh"
  158. "${CMAKE_CURRENT_SOURCE_DIR}/mapserv-sql.bat"
  159. "${CMAKE_CURRENT_SOURCE_DIR}/mapserv.bat"
  160. "${CMAKE_CURRENT_SOURCE_DIR}/notice.txt"
  161. "${CMAKE_CURRENT_SOURCE_DIR}/pcre3.dll"
  162. "${CMAKE_CURRENT_SOURCE_DIR}/readme.html"
  163. "${CMAKE_CURRENT_SOURCE_DIR}/runserver-sql.bat"
  164. "${CMAKE_CURRENT_SOURCE_DIR}/runserver.bat"
  165. "${CMAKE_CURRENT_SOURCE_DIR}/serv.bat"
  166. "${CMAKE_CURRENT_SOURCE_DIR}/start"
  167. "${CMAKE_CURRENT_SOURCE_DIR}/zlib1.dll"
  168. )
  169. set( RUNTIME_DIRECTORIES
  170. "conf"
  171. "db"
  172. "doc"
  173. "log"
  174. "npc"
  175. "plugins"
  176. "readme"
  177. "sql-files"
  178. "tools"
  179. )
  180. if( INSTALL_TO_SOURCE )# skip, already in the source dir
  181. else()
  182. if( WITH_COMPONENT_RUNTIME )
  183. install( FILES ${RUNTIME_FILES}
  184. DESTINATION "."
  185. COMPONENT Runtime_base )
  186. foreach( DIR IN ITEMS ${RUNTIME_DIRECTORIES} )
  187. install( DIRECTORY "${DIR}/"
  188. DESTINATION "${DIR}"
  189. COMPONENT Runtime_base
  190. PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE
  191. PATTERN "conf/import-tmpl" EXCLUDE )
  192. endforeach()
  193. endif()
  194. if( WITH_COMPONENT_DEVELOPMENT )
  195. install( FILES ${DEVELOPMENT_FILES}
  196. DESTINATION "."
  197. COMPONENT Development_base )
  198. foreach( DIR IN ITEMS ${DEVELOPMENT_DIRECTORIES} )
  199. install( DIRECTORY "${DIR}/"
  200. DESTINATION "${DIR}"
  201. COMPONENT Development_base
  202. PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE )
  203. endforeach()
  204. endif()
  205. endif()
  206. if( WITH_COMPONENT_RUNTIME )
  207. # templates
  208. install( DIRECTORY "save-tmpl/"
  209. DESTINATION "save"
  210. COMPONENT Runtime_templates
  211. PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE )
  212. install( DIRECTORY "conf/import-tmpl/"
  213. DESTINATION "conf/import"
  214. COMPONENT Runtime_templates
  215. PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE )
  216. endif()
  217. #
  218. # subdirectories
  219. #
  220. add_subdirectory( 3rdparty )
  221. add_subdirectory( src )