-cmake_minimum_required (VERSION 2.6)
-project (TINNS C CXX)
+CMAKE_MINIMUM_REQUIRED (VERSION 3.0)
+PROJECT (TinNS)
-set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules")
+# needed packages
+SET (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules")
+FIND_PACKAGE (RT REQUIRED)
+FIND_PACKAGE (PTHREAD REQUIRED)
+FIND_PACKAGE (MYSQL REQUIRED)
+FIND_PACKAGE (SQLITE3 REQUIRED)
+FIND_PACKAGE (PCRE REQUIRED)
+FIND_PACKAGE (ZLIB REQUIRED)
+FIND_PACKAGE (Lua53 REQUIRED) # the lua distributions are a nightmare, here is my finder for 5.3
+FIND_PACKAGE (Boost REQUIRED)
-set (USE_SQLITE3 false CACHE BOOL "Use SQLITE3 instead of MySQL")
-set (USE_MYSQL_INCLUDE_DIR false CACHE BOOL "MySQL includes in ../include/mysql/")
+# includes and outputs
+SET (CMAKE_INCLUDE_CURRENT_DIR on)
+INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR})
+SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
+SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/plugin)
+SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
-add_definitions (-std=c++0x -W -Wall -march=native -mtune=native -O2 -D_THREAD_SAFE -D_REENTRANT)
+# default configs
+SET (USE_SQLITE3 false CACHE BOOL "Use SQLITE3 instead of MySQL")
+SET (USE_MYSQL_INCLUDE_DIR true CACHE BOOL "MySQL includes in system path")
-if (USE_SQLITE3)
-add_definitions (-DSQLITE3)
-endif (USE_SQLITE3)
+IF (USE_SQLITE3)
+ADD_DEFINITIONS (-DSQLITE3)
+ENDIF (USE_SQLITE3)
-if (USE_MYSQL_INCLUDE_DIR)
-add_definitions (-DMYSQL_INC_DIR)
-endif (USE_MYSQL_INCLUDE_DIR)
+IF (USE_MYSQL_INCLUDE_DIR)
+ADD_DEFINITIONS (-DMYSQL_INC_DIR)
+ENDIF (USE_MYSQL_INCLUDE_DIR)
-find_package (RT REQUIRED)
-find_package (PTHREAD REQUIRED)
-find_package (MYSQL REQUIRED)
-find_package (SQLITE3 REQUIRED)
-find_package (PCRE REQUIRED)
-find_package (ZLIB REQUIRED)
-find_package (Lua51 REQUIRED)
-find_package (Boost REQUIRED)
+# compiler settings
+IF (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
+MESSAGE ("Unix-like system: ${CMAKE_SYSTEM_NAME}")
+SET (CMAKE_CXX_FLAGS "-std=c++1z -pthread -fdiagnostics-color=always -W -Wall -Wextra -Os")
+SET (CMAKE_C_FLAGS "-std=c11 -pthread -fdiagnostics-color=always -W -Wall -Wextra -Os")
+ELSEIF (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
+MESSAGE ("Windows-like system: ${CMAKE_SYSTEM_NAME}")
+SET (CMAKE_CXX_FLAGS "-std=c++1z -pthread -W -Wall -Wextra -Os")
+SET (CMAKE_C_FLAGS "-std=c11 -pthread -W -Wall -Wextra -Os")
+ELSE ()
+MESSAGE (FATAL_ERROR "unsupported system: ${CMAKE_SYSTEM_NAME}")
+ENDIF ()
-add_subdirectory (server)
-add_subdirectory (tools)
+#add_definitions (-std=c++0x -W -Wall -march=native -mtune=native -O2 -D_THREAD_SAFE -D_REENTRANT)
+
+# source code stuff starts here
+ADD_SUBDIRECTORY (server)
+ADD_SUBDIRECTORY (tools)
--- /dev/null
+#.rst:
+# FindLua51
+# ---------
+#
+#
+#
+# Locate Lua library This module defines
+#
+# ::
+#
+# LUA53_FOUND, if false, do not try to link to Lua
+# LUA53_LIBRARIES
+# LUA53_INCLUDE_DIR, where to find lua.h
+# LUA53_VERSION_STRING, the version of Lua found (since CMake 2.8.8)
+#
+#
+#
+# Note that the expected include convention is
+#
+# ::
+#
+# #include <lua.h>
+# or
+# #include <lua.hpp> for C++
+#
+# and not
+#
+# ::
+#
+# #include <lua/lua.h>
+#
+# This is because, the lua location is not standardized and may exist in
+# locations other than lua/
+
+#=============================================================================
+# Copyright 2007-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+find_path(LUA53_INCLUDE_DIR lua.h lua.hpp
+ HINTS
+ ENV LUA_DIR
+ PATH_SUFFIXES include/lua53 include/lua5.3 include/lua-5.3 include/lua include
+ PATHS
+ ~/Library/Frameworks
+ /Library/Frameworks
+ /sw # Fink
+ /opt/local # DarwinPorts
+ /opt/csw # Blastwave
+ /opt
+)
+
+find_library(LUA53_LIBRARY
+ NAMES lua53 lua5.3 lua-5.3 lua
+ HINTS
+ ENV LUA_DIR
+ PATH_SUFFIXES lib
+ PATHS
+ ~/Library/Frameworks
+ /Library/Frameworks
+ /sw
+ /opt/local
+ /opt/csw
+ /opt
+)
+
+if(LUA53_LIBRARY)
+ # include the math library for Unix
+ if(UNIX AND NOT APPLE AND NOT BEOS AND NOT HAIKU)
+ find_library(LUA53_MATH_LIBRARY m)
+ set( LUA53_LIBRARIES "${LUA53_LIBRARY};${LUA53_MATH_LIBRARY}" CACHE STRING "Lua 5.3 Libraries")
+ # For Windows and Mac, don't need to explicitly include the math library
+ else()
+ set( LUA53_LIBRARIES "${LUA53_LIBRARY}" CACHE STRING "Lua 5.3 Libraries")
+ endif()
+endif()
+
+if(LUA53_INCLUDE_DIR AND EXISTS "${LUA53_INCLUDE_DIR}/lua.h")
+ file(STRINGS "${LUA53_INCLUDE_DIR}/lua.h" lua_version_str REGEX "^#define[ \t]+LUA_RELEASE[ \t]+\"Lua .+\"")
+
+ string(REGEX REPLACE "^#define[ \t]+LUA_RELEASE[ \t]+\"Lua ([^\"]+)\".*" "\\1" LUA53_VERSION_STRING "${lua_version_str}")
+ unset(lua_version_str)
+endif()
+
+include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
+# handle the QUIETLY and REQUIRED arguments and set LUA_FOUND to TRUE if
+# all listed variables are TRUE
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lua53
+ REQUIRED_VARS LUA53_LIBRARIES LUA53_INCLUDE_DIR
+ VERSION_VAR LUA53_VERSION_STRING)
+
+mark_as_advanced(LUA53_INCLUDE_DIR LUA53_LIBRARIES LUA53_LIBRARY LUA53_MATH_LIBRARY)
-find_path (MYSQL_INCLUDE_DIR mysql.h /usr/include)
+find_path (MYSQL_INCLUDE_DIR mysql.h /usr/include /usr/include/mysql)
find_library (MYSQL_LIBRARY NAMES mysqlclient PATHS /usr/lib64 /usr/lib)
-add_subdirectory (src)
+ADD_SUBDIRECTORY (src)
# move base dir to src
-include_directories (${TINNS_SOURCE_DIR}/server/src)
+INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR}/server/src)
-add_subdirectory (common)
-add_subdirectory (dev-tools)
-add_subdirectory (game)
-add_subdirectory (info)
-add_subdirectory (patch)
+ADD_SUBDIRECTORY (common)
+ADD_SUBDIRECTORY (dev-tools)
+ADD_SUBDIRECTORY (game)
+ADD_SUBDIRECTORY (info)
+ADD_SUBDIRECTORY (patch)
-add_library (common config.cpp console.cpp filesystem.cpp misc.cpp message.cpp netcode.cpp
- regex++.cpp)
+ADD_LIBRARY (common config.cpp console.cpp filesystem.cpp misc.cpp message.cpp netcode.cpp regex++.cpp)
-add_executable (getsvnrev getsvnrev.cpp)
-add_executable (cleandepfile cleandepfile.c)
+ADD_EXECUTABLE (getsvnrev getsvnrev.cpp)
+ADD_EXECUTABLE (cleandepfile cleandepfile.c)
-include_directories (${TINNS_SOURCE_DIR}/server/src/game ${LUA_INCLUDE_DIR})
+INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR}/server/src/game ${LUA53_INCLUDE_DIR})
-add_executable (gameserver
- # decoder stuff
- decoder/msgdecoder.cpp decoder/udp_0x13.cpp decoder/udp_0x1f.cpp decoder/udp_0x22.cpp
- decoder/udp_0x2b.cpp decoder/udpanalyser.cpp decoder/udp_appartment.cpp decoder/udp_charmove.cpp
- decoder/udp_chat.cpp decoder/udp_deathrespawn.cpp decoder/udp_entityposreq.cpp
- decoder/udp_hack.cpp decoder/udp_helditemaction.cpp decoder/udp_0x08.cpp decoder/udp_OOO.cpp
- decoder/udp_itemmanualreload.cpp decoder/udp_itemmove.cpp decoder/udp_itemuse.cpp
- decoder/udp_killself.cpp decoder/udp_outfitter.cpp decoder/udp_packet0.cpp decoder/udp_ping.cpp
- decoder/udp_popupresponse.cpp decoder/udp_quickaccessbelt.cpp decoder/udp_reqinfo.cpp
- decoder/udp_subskill.cpp decoder/udp_sync.cpp decoder/udp_terminal.cpp decoder/udp_useobject.cpp
- decoder/udp_vhc.cpp decoder/udp_zoning.cpp decoder/udp_worldIDinfo.cpp decoder/udp_multipart.cpp
- decoder/udp_pvptrade.cpp decoder/udp_npcdialog.cpp
- # def file stuff
- def/def_actionmod.cpp def/def_ammo.cpp def/def_appartements.cpp def/def_appplaces.cpp
- def/def_blueprintpieces.cpp def/def_characters.cpp def/def_charaction.cpp def/def_charkinds.cpp
- def/def_damage.cpp def/def_drugs.cpp def/def_factions.cpp def/def_hack.cpp def/def_implants.cpp
- def/def_itemcontainer.cpp def/def_itemmod.cpp def/def_itemres.cpp def/def_items.cpp
- def/def_mission.cpp def/def_npcarmor.cpp def/def_npc.cpp def/def_npcgroupspawn.cpp
- def/def_outposts.cpp def/defparser.cpp def/def_recycles.cpp def/def_respawn.cpp
- def/def_shots.cpp def/def_skills.cpp def/def_subskills.cpp def/def_trader.cpp
- def/def_vehicles.cpp def/def_vehiclesits.cpp def/def_weapons.cpp def/def_weather.cpp
- def/def_worldfile.cpp def/def_worldmodels.cpp def/def_worlds.cpp def/gamedefs.cpp
- def/world_datparser.cpp def/def_scripts.cpp
- # gamecommands stuff
- gamecommands/ban.cpp gamecommands/brightness.cpp gamecommands/broadcast.cpp gamecommands/color.cpp
- gamecommands/debug.cpp gamecommands/effect.cpp gamecommands/givemoney.cpp gamecommands/h.cpp
- gamecommands/info.cpp gamecommands/npc_shop.cpp gamecommands/jail.cpp gamecommands/kick.cpp
- gamecommands/listbans.cpp gamecommands/online.cpp gamecommands/rawf.cpp gamecommands/recall.cpp
- gamecommands/remove.cpp gamecommands/setlevel.cpp gamecommands/settime.cpp
- gamecommands/setsubskill.cpp gamecommands/shun.cpp gamecommands/setmainskill.cpp
- gamecommands/skin.cpp gamecommands/spawnactor.cpp gamecommands/speed.cpp gamecommands/takemoney.cpp
- gamecommands/t.cpp gamecommands/teleport.cpp gamecommands/test.cpp gamecommands/unban.cpp
- gamecommands/unjail.cpp gamecommands/unshun.cpp gamecommands/uptime.cpp gamecommands/v.cpp
- gamecommands/version.cpp gamecommands/warp.cpp gamecommands/warpto.cpp gamecommands/weather.cpp
- gamecommands/npc.cpp
- # gameserver stuff
- globals.cpp terminal_querydb.cpp multipart.cpp accounts.cpp appartements.cpp buddylist.cpp
- chars.cpp chat.cpp client.cpp clientmanager.cpp commands.cpp container.cpp doortemplate.cpp
- furnituretemplate.cpp gameserver.cpp genreplist.cpp inventory.cpp isc.cpp item.cpp main.cpp
- lua_engine.cpp msgbuilder.cpp npc.cpp server.cpp skill.cpp sql.cpp subway.cpp terminal.cpp
- terminal_receivedb.cpp terminal_tryaccess.cpp npc_conversation.cpp terminal_updatedb.cpp
- vehicle.cpp vhcaccessrequest.cpp worldactors.cpp worlddatatemplate.cpp worlds.cpp zoning.cpp
- outpost.cpp npc_ai.cpp npctemplate.cpp)
+ADD_EXECUTABLE (gameserver
+ # decoder stuff
+ decoder/msgdecoder.cpp decoder/udp_0x13.cpp decoder/udp_0x1f.cpp decoder/udp_0x22.cpp
+ decoder/udp_0x2b.cpp decoder/udpanalyser.cpp decoder/udp_appartment.cpp
+ decoder/udp_charmove.cpp decoder/udp_chat.cpp decoder/udp_deathrespawn.cpp
+ decoder/udp_entityposreq.cpp decoder/udp_hack.cpp decoder/udp_helditemaction.cpp
+ decoder/udp_0x08.cpp decoder/udp_OOO.cpp decoder/udp_itemmanualreload.cpp
+ decoder/udp_itemmove.cpp decoder/udp_itemuse.cpp decoder/udp_killself.cpp
+ decoder/udp_outfitter.cpp decoder/udp_packet0.cpp decoder/udp_ping.cpp
+ decoder/udp_popupresponse.cpp decoder/udp_quickaccessbelt.cpp decoder/udp_reqinfo.cpp
+ decoder/udp_subskill.cpp decoder/udp_sync.cpp decoder/udp_terminal.cpp
+ decoder/udp_useobject.cpp decoder/udp_vhc.cpp decoder/udp_zoning.cpp
+ decoder/udp_worldIDinfo.cpp decoder/udp_multipart.cpp decoder/udp_pvptrade.cpp
+ decoder/udp_npcdialog.cpp
+ # def file stuff
+ def/def_actionmod.cpp def/def_ammo.cpp def/def_appartements.cpp def/def_appplaces.cpp
+ def/def_blueprintpieces.cpp def/def_characters.cpp def/def_charaction.cpp def/def_charkinds.cpp
+ def/def_damage.cpp def/def_drugs.cpp def/def_factions.cpp def/def_hack.cpp def/def_implants.cpp
+ def/def_itemcontainer.cpp def/def_itemmod.cpp def/def_itemres.cpp def/def_items.cpp
+ def/def_mission.cpp def/def_npcarmor.cpp def/def_npc.cpp def/def_npcgroupspawn.cpp
+ def/def_outposts.cpp def/defparser.cpp def/def_recycles.cpp def/def_respawn.cpp
+ def/def_shots.cpp def/def_skills.cpp def/def_subskills.cpp def/def_trader.cpp
+ def/def_vehicles.cpp def/def_vehiclesits.cpp def/def_weapons.cpp def/def_weather.cpp
+ def/def_worldfile.cpp def/def_worldmodels.cpp def/def_worlds.cpp def/gamedefs.cpp
+ def/world_datparser.cpp def/def_scripts.cpp
+ # gamecommands stuff
+ gamecommands/ban.cpp gamecommands/brightness.cpp gamecommands/broadcast.cpp
+ gamecommands/color.cpp gamecommands/debug.cpp gamecommands/effect.cpp
+ gamecommands/givemoney.cpp gamecommands/h.cpp gamecommands/info.cpp gamecommands/npc_shop.cpp
+ gamecommands/jail.cpp gamecommands/kick.cpp gamecommands/listbans.cpp gamecommands/online.cpp
+ gamecommands/rawf.cpp gamecommands/recall.cpp gamecommands/remove.cpp gamecommands/setlevel.cpp
+ gamecommands/settime.cpp gamecommands/setsubskill.cpp gamecommands/shun.cpp
+ gamecommands/setmainskill.cpp gamecommands/skin.cpp gamecommands/spawnactor.cpp
+ gamecommands/speed.cpp gamecommands/takemoney.cpp gamecommands/t.cpp gamecommands/teleport.cpp
+ gamecommands/test.cpp gamecommands/unban.cpp gamecommands/unjail.cpp gamecommands/unshun.cpp
+ gamecommands/uptime.cpp gamecommands/v.cpp gamecommands/version.cpp gamecommands/warp.cpp
+ gamecommands/warpto.cpp gamecommands/weather.cpp gamecommands/npc.cpp
+ # gameserver stuff
+ globals.cpp terminal_querydb.cpp multipart.cpp accounts.cpp appartements.cpp buddylist.cpp
+ chars.cpp chat.cpp client.cpp clientmanager.cpp commands.cpp container.cpp doortemplate.cpp
+ furnituretemplate.cpp gameserver.cpp genreplist.cpp inventory.cpp isc.cpp item.cpp main.cpp
+ lua_engine.cpp msgbuilder.cpp npc.cpp server.cpp skill.cpp sql.cpp subway.cpp terminal.cpp
+ terminal_receivedb.cpp terminal_tryaccess.cpp npc_conversation.cpp terminal_updatedb.cpp
+ vehicle.cpp vhcaccessrequest.cpp worldactors.cpp worlddatatemplate.cpp worlds.cpp zoning.cpp
+ outpost.cpp npc_ai.cpp npctemplate.cpp)
-target_link_libraries (gameserver common ${MYSQL_LIBRARY} ${PCRE_LIBRARY} ${ZLIB_LIBRARY} ${RT_LIBRARY} ${LUA_LIBRARY})
+TARGET_LINK_LIBRARIES (gameserver common ${MYSQL_LIBRARY} ${PCRE_LIBRARY} ${ZLIB_LIBRARY} ${RT_LIBRARY}
+ ${LUA53_LIBRARY})
-add_executable (infoserver accounts.cpp client.cpp globals.cpp infoserver.cpp main.cpp server.cpp sql.cpp)
-
-target_link_libraries (infoserver common ${MYSQL_LIBRARY} ${PCRE_LIBRARY})
+ADD_EXECUTABLE (infoserver accounts.cpp client.cpp globals.cpp infoserver.cpp main.cpp server.cpp sql.cpp)
+TARGET_LINK_LIBRARIES (infoserver common ${MYSQL_LIBRARY} ${PCRE_LIBRARY})
-add_executable (patchserver client.cpp globals.cpp patchserver.cpp main.cpp server.cpp)
-
-target_link_libraries (patchserver common ${PCRE_LIBRARY} ${ZLIB_LIBRARY})
+ADD_EXECUTABLE (patchserver client.cpp globals.cpp patchserver.cpp main.cpp server.cpp)
+TARGET_LINK_LIBRARIES (patchserver common ${PCRE_LIBRARY} ${ZLIB_LIBRARY})
-add_subdirectory (pak_decompress)
-add_subdirectory (vfs_viewer)
+ADD_SUBDIRECTORY (pak_decompress)
+ADD_SUBDIRECTORY (vfs_viewer)
-add_executable (pak_decompress pak_decompress.cpp)
-
-target_link_libraries (pak_decompress ${ZLIB_LIBRARY})
+ADD_EXECUTABLE (pak_decompress pak_decompress.cpp)
+TARGET_LINK_LIBRARIES (pak_decompress ${ZLIB_LIBRARY})
-add_executable (vfs_viewer vfs_viewer.c)
-
-target_link_libraries (vfs_viewer ${ZLIB_LIBRARY})
+ADD_EXECUTABLE (vfs_viewer vfs_viewer.c)
+TARGET_LINK_LIBRARIES (vfs_viewer ${ZLIB_LIBRARY})