summaryrefslogblamecommitdiff
path: root/CMakeLists.txt
blob: 59529c4423c0c9a91fc3b2a2755135ff09cbca0a (plain) (tree)
1
2
3
4
5
6
7






                                                              

















                                                                                                                                                                                                                                                                                      

























































































































                                                                                              







                                                                                                      


                                            


                                                                           
                                                                   










                                                                                                                    


                                                                
 



























                                                                      


               

                                                                                     


                                                                            
                                                                                















































































                                                                                                                   
                              
                              








                                                                     

                                







                                                                       


                      






                                                       







                            
# "Getting Started with CMake", a tutorial video by Eric Wing.
#   Part 1 of 6: http://www.youtube.com/watch?v=CLvZTyji_Uw
#   Part 2 of 6: http://www.youtube.com/watch?v=gUW-RrRQjEg
#   Part 3 of 6: http://www.youtube.com/watch?v=sz6cPhbuTk4
#   Part 4 of 6: http://www.youtube.com/watch?v=JICZOkyNXbg
#   Part 5 of 6: http://www.youtube.com/watch?v=lAiuLHy4dCk
#   Part 6 of 6: http://www.youtube.com/watch?v=fAtJNzDZdH8
cmake_minimum_required( VERSION 2.8.4 )
project( eAthena )


#
# Prevent building in the source directory by default
#
if( ALLOW_SAME_DIRECTORY )
elseif( "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}" )
	option( ALLOW_SAME_DIRECTORY "Allow CMake to build in the source directory." OFF )
	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" )
endif()


#
# Debug stuff
#
if( NOT SKIP_DEBUG )
message( "DEBUG: # Variables That Change Behavior" )
message( "DEBUG: BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}" )
message( "DEBUG: CMAKE_BACKWARDS_COMPATIBILITY=${CMAKE_BACKWARDS_COMPATIBILITY}" )
message( "DEBUG: CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" )
message( "DEBUG: CMAKE_COLOR_MAKEFILE=${CMAKE_COLOR_MAKEFILE}" )
message( "DEBUG: CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}" )
message( "DEBUG: CMAKE_FIND_LIBRARY_PREFIXES=${CMAKE_FIND_LIBRARY_PREFIXES}" )
message( "DEBUG: CMAKE_FIND_LIBRARY_SUFFIXES=${CMAKE_FIND_LIBRARY_SUFFIXES}" )
message( "DEBUG: CMAKE_IGNORE_PATH=${CMAKE_IGNORE_PATH}" )
message( "DEBUG: CMAKE_INCLUDE_PATH=${CMAKE_INCLUDE_PATH}" )
message( "DEBUG: CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}" )
message( "DEBUG: CMAKE_LIBRARY_PATH=${CMAKE_LIBRARY_PATH}" )
message( "DEBUG: CMAKE_MFC_FLAG=${CMAKE_MFC_FLAG}" )
message( "DEBUG: CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}" )
message( "DEBUG: CMAKE_NOT_USING_CONFIG_FLAGS=${CMAKE_NOT_USING_CONFIG_FLAGS}" )
message( "DEBUG: CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}" )
message( "DEBUG: CMAKE_PROGRAM_PATH=${CMAKE_PROGRAM_PATH}" )
message( "DEBUG: CMAKE_SKIP_INSTALL_ALL_DEPENDENCY=${CMAKE_SKIP_INSTALL_ALL_DEPENDENCY}" )
message( "DEBUG: CMAKE_SYSTEM_IGNORE_PATH=${CMAKE_SYSTEM_IGNORE_PATH}" )
message( "DEBUG: CMAKE_SYSTEM_INCLUDE_PATH=${CMAKE_SYSTEM_INCLUDE_PATH}" )
message( "DEBUG: CMAKE_SYSTEM_LIBRARY_PATH=${CMAKE_SYSTEM_LIBRARY_PATH}" )
message( "DEBUG: CMAKE_SYSTEM_PREFIX_PATH=${CMAKE_SYSTEM_PREFIX_PATH}" )
message( "DEBUG: CMAKE_SYSTEM_PROGRAM_PATH=${CMAKE_SYSTEM_PROGRAM_PATH}" )
message( "DEBUG: CMAKE_USER_MAKE_RULES_OVERRIDE=${CMAKE_USER_MAKE_RULES_OVERRIDE}" )
message( "DEBUG: # Variables That Describe the System" )
message( "DEBUG: APPLE=${APPLE}" )
message( "DEBUG: BORLAND=${BORLAND}" )
message( "DEBUG: CMAKE_CL_64=${CMAKE_CL_64}" )
message( "DEBUG: CMAKE_COMPILER_2005=${CMAKE_COMPILER_2005}" )
message( "DEBUG: CMAKE_HOST_APPLE=${CMAKE_HOST_APPLE}" )
message( "DEBUG: CMAKE_HOST_SYSTEM=${CMAKE_HOST_SYSTEM}" )
message( "DEBUG: CMAKE_HOST_SYSTEM_NAME=${CMAKE_HOST_SYSTEM_NAME}" )
message( "DEBUG: CMAKE_HOST_SYSTEM_PROCESSOR=${CMAKE_HOST_SYSTEM_PROCESSOR}" )
message( "DEBUG: CMAKE_HOST_SYSTEM_VERSION=${CMAKE_HOST_SYSTEM_VERSION}" )
message( "DEBUG: CMAKE_HOST_UNIX=${CMAKE_HOST_UNIX}" )
message( "DEBUG: CMAKE_HOST_WIN32=${CMAKE_HOST_WIN32}" )
message( "DEBUG: CMAKE_OBJECT_PATH_MAX=${CMAKE_OBJECT_PATH_MAX}" )
message( "DEBUG: CMAKE_SYSTEM=${CMAKE_SYSTEM}" )
message( "DEBUG: CMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}" )
message( "DEBUG: CMAKE_SYSTEM_PROCESSOR=${CMAKE_SYSTEM_PROCESSOR}" )
message( "DEBUG: CMAKE_SYSTEM_VERSION=${CMAKE_SYSTEM_VERSION}" )
message( "DEBUG: CYGWIN=${CYGWIN}" )
message( "DEBUG: MSVC=${MSVC}" )
message( "DEBUG: MSVC80=${MSVC80}" )
message( "DEBUG: MSVC_IDE=${MSVC_IDE}" )
message( "DEBUG: MSVC_VERSION=${MSVC_VERSION}" )
message( "DEBUG: UNIX=${UNIX}" )
message( "DEBUG: WIN32=${WIN32}" )
message( "DEBUG: XCODE_VERSION=${XCODE_VERSION}" )
message( "DEBUG: # Variables that Control the Build" )
message( "DEBUG: CMAKE_ARCHIVE_OUTPUT_DIRECTORY=${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}" )
message( "DEBUG: CMAKE_BUILD_WITH_INSTALL_RPATH=${CMAKE_BUILD_WITH_INSTALL_RPATH}" )
message( "DEBUG: CMAKE_DEBUG_POSTFIX=${CMAKE_DEBUG_POSTFIX}" )
message( "DEBUG: CMAKE_EXE_LINKER_FLAGS=${CMAKE_EXE_LINKER_FLAGS}" )
message( "DEBUG: CMAKE_INCLUDE_CURRENT_DIR=${CMAKE_INCLUDE_CURRENT_DIR}" )
message( "DEBUG: CMAKE_INSTALL_NAME_DIR=${CMAKE_INSTALL_NAME_DIR}" )
message( "DEBUG: CMAKE_INSTALL_RPATH=${CMAKE_INSTALL_RPATH}" )
message( "DEBUG: CMAKE_INSTALL_RPATH_USE_LINK_PATH=${CMAKE_INSTALL_RPATH_USE_LINK_PATH}" )
message( "DEBUG: CMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" )
message( "DEBUG: CMAKE_LIBRARY_PATH_FLAG=${CMAKE_LIBRARY_PATH_FLAG}" )
message( "DEBUG: CMAKE_LINK_DEF_FILE_FLAG=${CMAKE_LINK_DEF_FILE_FLAG}" )
message( "DEBUG: CMAKE_LINK_LIBRARY_FILE_FLAG=${CMAKE_LINK_LIBRARY_FILE_FLAG}" )
message( "DEBUG: CMAKE_LINK_LIBRARY_FLAG=${CMAKE_LINK_LIBRARY_FLAG}" )
message( "DEBUG: CMAKE_NO_BUILTIN_CHRPATH=${CMAKE_NO_BUILTIN_CHRPATH}" )
message( "DEBUG: CMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" )
message( "DEBUG: CMAKE_SKIP_BUILD_RPATH=${CMAKE_SKIP_BUILD_RPATH}" )
message( "DEBUG: CMAKE_TRY_COMPILE_CONFIGURATION=${CMAKE_TRY_COMPILE_CONFIGURATION}" )
message( "DEBUG: CMAKE_USE_RELATIVE_PATHS=${CMAKE_USE_RELATIVE_PATHS}" )
message( "DEBUG: EXECUTABLE_OUTPUT_PATH=${EXECUTABLE_OUTPUT_PATH}" )
message( "DEBUG: LIBRARY_OUTPUT_PATH=${LIBRARY_OUTPUT_PATH}" )
message( "DEBUG: # Variables that Provide Information" )
message( "DEBUG: CMAKE_AR=${CMAKE_AR}" )
message( "DEBUG: CMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}" )
message( "DEBUG: CMAKE_BUILD_TOOL=${CMAKE_BUILD_TOOL}" )
message( "DEBUG: CMAKE_CACHEFILE_DIR=${CMAKE_CACHEFILE_DIR}" )
message( "DEBUG: CMAKE_CACHE_MAJOR_VERSION=${CMAKE_CACHE_MAJOR_VERSION}" )
message( "DEBUG: CMAKE_CACHE_MINOR_VERSION=${CMAKE_CACHE_MINOR_VERSION}" )
message( "DEBUG: CMAKE_CACHE_PATCH_VERSION=${CMAKE_CACHE_PATCH_VERSION}" )
message( "DEBUG: CMAKE_CFG_INTDIR=${CMAKE_CFG_INTDIR}" )
message( "DEBUG: CMAKE_COMMAND=${CMAKE_COMMAND}" )
message( "DEBUG: CMAKE_CROSSCOMPILING=${CMAKE_CROSSCOMPILING}" )
message( "DEBUG: CMAKE_CTEST_COMMAND=${CMAKE_CTEST_COMMAND}" )
message( "DEBUG: CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}" )
message( "DEBUG: CMAKE_CURRENT_LIST_DIR=${CMAKE_CURRENT_LIST_DIR}" )
message( "DEBUG: CMAKE_CURRENT_LIST_FILE=${CMAKE_CURRENT_LIST_FILE}" )
message( "DEBUG: CMAKE_CURRENT_LIST_LINE=${CMAKE_CURRENT_LIST_LINE}" )
message( "DEBUG: CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}" )
message( "DEBUG: CMAKE_DL_LIBS=${CMAKE_DL_LIBS}" )
message( "DEBUG: CMAKE_EDIT_COMMAND=${CMAKE_EDIT_COMMAND}" )
message( "DEBUG: CMAKE_EXECUTABLE_SUFFIX=${CMAKE_EXECUTABLE_SUFFIX}" )
message( "DEBUG: CMAKE_EXTRA_GENERATOR=${CMAKE_EXTRA_GENERATOR}" )
message( "DEBUG: CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES=${CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES}" )
message( "DEBUG: CMAKE_GENERATOR=${CMAKE_GENERATOR}" )
message( "DEBUG: CMAKE_HOME_DIRECTORY=${CMAKE_HOME_DIRECTORY}" )
message( "DEBUG: CMAKE_IMPORT_LIBRARY_PREFIX=${CMAKE_IMPORT_LIBRARY_PREFIX}" )
message( "DEBUG: CMAKE_IMPORT_LIBRARY_SUFFIX=${CMAKE_IMPORT_LIBRARY_SUFFIX}" )
message( "DEBUG: CMAKE_LINK_LIBRARY_SUFFIX=${CMAKE_LINK_LIBRARY_SUFFIX}" )
message( "DEBUG: CMAKE_MAJOR_VERSION=${CMAKE_MAJOR_VERSION}" )
message( "DEBUG: CMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}" )
message( "DEBUG: CMAKE_MINOR_VERSION=${CMAKE_MINOR_VERSION}" )
message( "DEBUG: CMAKE_PARENT_LIST_FILE=${CMAKE_PARENT_LIST_FILE}" )
message( "DEBUG: CMAKE_PATCH_VERSION=${CMAKE_PATCH_VERSION}" )
message( "DEBUG: CMAKE_PROJECT_NAME=${CMAKE_PROJECT_NAME}" )
message( "DEBUG: CMAKE_RANLIB=${CMAKE_RANLIB}" )
message( "DEBUG: CMAKE_ROOT=${CMAKE_ROOT}" )
message( "DEBUG: CMAKE_SHARED_LIBRARY_PREFIX=${CMAKE_SHARED_LIBRARY_PREFIX}" )
message( "DEBUG: CMAKE_SHARED_LIBRARY_SUFFIX=${CMAKE_SHARED_LIBRARY_SUFFIX}" )
message( "DEBUG: CMAKE_SHARED_MODULE_PREFIX=${CMAKE_SHARED_MODULE_PREFIX}" )
message( "DEBUG: CMAKE_SHARED_MODULE_SUFFIX=${CMAKE_SHARED_MODULE_SUFFIX}" )
message( "DEBUG: CMAKE_SIZEOF_VOID_P=${CMAKE_SIZEOF_VOID_P}" )
message( "DEBUG: CMAKE_SKIP_RPATH=${CMAKE_SKIP_RPATH}" )
message( "DEBUG: CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}" )
message( "DEBUG: CMAKE_STANDARD_LIBRARIES=${CMAKE_STANDARD_LIBRARIES}" )
message( "DEBUG: CMAKE_STATIC_LIBRARY_PREFIX=${CMAKE_STATIC_LIBRARY_PREFIX}" )
message( "DEBUG: CMAKE_STATIC_LIBRARY_SUFFIX=${CMAKE_STATIC_LIBRARY_SUFFIX}" )
message( "DEBUG: CMAKE_TWEAK_VERSION=${CMAKE_TWEAK_VERSION}" )
message( "DEBUG: CMAKE_USING_VC_FREE_TOOLS=${CMAKE_USING_VC_FREE_TOOLS}" )
message( "DEBUG: CMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE_MAKEFILE}" )
message( "DEBUG: CMAKE_VERSION=${CMAKE_VERSION}" )
message( "DEBUG: PROJECT_BINARY_DIR=${PROJECT_BINARY_DIR}" )
message( "DEBUG: PROJECT_NAME=${PROJECT_NAME}" )
message( "DEBUG: PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}" )
set( CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/install CACHE PATH "test install to dir" FORCE )
#set( CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH "test install to source dir" FORCE )
endif( NOT SKIP_DEBUG )


#
# Global stuff
#
set( GLOBAL_LIBRARIES CACHE INTERNAL "" )
set( GLOBAL_INCLUDE_DIRS CACHE INTERNAL "" )
set( GLOBAL_DEFINITIONS CACHE INTERNAL "" )
mark_as_advanced( GLOBAL_LIBRARIES GLOBAL_INCLUDE_DIRS GLOBAL_DEFINITIONS )
if( WIN32 )
	list( APPEND GLOBAL_DEFINITIONS FD_SETSIZE=4096 )
	list( APPEND GLOBAL_LIBRARIES "oldnames.lib" "ws2_32.lib" )
endif()
if( MSVC )
	list( APPEND GLOBAL_DEFINITIONS _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE DB_MANUAL_CAST_TO_UNION )
endif()


#
# packetver
#
set( PACKETVER ""
	CACHE STRING "Sets the PACKETVER define of the servers. (see src/common/mmo.h)" )
if( PACKETVER )
	list( APPEND GLOBAL_DEFINITIONS PACKETVER=${PACKETVER} )
endif()


#####################################################################
# package stuff
#
if( OFF )
set( CPACK_PACKAGE_NAME "eAthena" )
set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "MMORPG server package" )
set( CPACK_PACKAGE_FILE_NAME )
set( CPACK_PACKAGE_INSTALL_DIRECTORY  )
set( CPACK_PROJECT_CONFIG_FILE )
set( CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE )
set( CPACK_RESOURCE_FILE_README )
set( CPACK_RESOURCE_FILE_WELCOME )
set( CPACK_MONOLITHIC_INSTALL ON )
set( CPACK_GENERATOR "ZIP" )
set( CPACK_OUTPUT_CONFIG_FILE )
set( CPACK_PACKAGE_EXECUTABLES )
set( CPACK_STRIP_FILES )
#source
set( CPACK_SOURCE_PACKAGE_FILE_NAME )
set( CPACK_SOURCE_STRIP_FILES )
set( CPACK_SOURCE_GENERATOR "ZIP" )
set( CPACK_SOURCE_OUTPUT_CONFIG_FILE )
set( CPACK_SOURCE_IGNORE_FILES )
include(CPACK)
endif()


#
# install stuff
#
set( COMPONENT_SOURCE "Source code, librarires and project files" CACHE INTERNAL "" )
set( COMPONENT_BASE "Base files" CACHE INTERNAL "" )
option( INSTALL_RUN_DATA "install files needed to run the project" ON )
option( INSTALL_BUILD_DATA "install files needed to build the project" OFF )
set( SVN_FOLDER_PATTERN "[\\.]svn"
	CACHE STRING "pattern of svn folder that we exclude from instalations" )
mark_as_advanced( SVN_FOLDER_PATTERN )
if( "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_INSTALL_PREFIX}" )
	set( INSTALLING_TO_SOURCE ON
		CACHE INTERNAL "we are installing to the source folder, skip uneeded stuff" )
else()
	unset( INSTALLING_TO_SOURCE CACHE )
endif()
set( LOCAL_BUILD_FILES
	"CMakeLists.txt"
	"configure"
	"configure.in"
	"eAthena-6.dsw"
	"eAthena-7.1.sln"
	"eAthena-8.sln"
	"eAthena-9.sln"
	"eAthena-10.sln"
	)
set( LOCAL_BUILD_DIRECTORIES
	"3rdparty"
	"src"
	"vcproj-6"
	"vcproj-7.1"
	"vcproj-8"
	"vcproj-9"
	"vcproj-10"
	)
set( LOCAL_RUN_FILES
	"athena-start"
	"Changelog-Trunk.txt"
	"char-server.sh"
	"charserv-sql.bat"
	"charserv.bat"
	"dbghelp.dll"
	"LICENSE"
	"login-server.sh"
	"logserv-sql.bat"
	"logserv.bat"
	"map-server.sh"
	"mapserv-sql.bat"
	"mapserv.bat"
	"notice.txt"
	"readme.html"
	"runserver-sql.bat"
	"runserver.bat"
	"serv.bat"
	"start"
	)
set( LOCAL_RUN_DIRECTORIES
	"conf"
	"db"
	"doc"
	"log"
	"npc"
	"plugins"
	"readme"
	"sql-files"
	"tools"
	)
if( USE_LOCAL_MYSQL )
	list( APPEND LOCAL_RUN_FILES "libmysql.dll" )
endif()
if( USE_LOCAL_PCRE )
	list( APPEND LOCAL_RUN_FILES "pcre3.dll" )
endif()
if( USE_LOCAL_ZLIB )
	list( APPEND LOCAL_RUN_FILES "zlib1.dll" )
endif()
function( INSTALL_DIRECTORY DIR DEST EXCLUDE_PATTERN )
	# warning: that slash(/) is important here, otherwise the whole directory (not its content) will be copied!
	install( DIRECTORY ${DIR}/
		DESTINATION ${DEST}
		PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE
		PATTERN "${EXCLUDE_PATTERN}" EXCLUDE )
endfunction()
function( INSTALL_DIRECTORIES DIRS EXCLUDE_PATTERN )
	foreach( DIR IN ITEMS ${DIRS} )
		INSTALL_DIRECTORY( ${DIR} ${DIR} "${EXCLUDE_PATTERN}" )
	endforeach()
endfunction()
if( NOT INSTALLING_TO_SOURCE )
	# skipped if in-source
	if( INSTALL_RUN_DATA )
		# base
		install( FILES ${LOCAL_RUN_FILES}
			DESTINATION ${CMAKE_INSTALL_PREFIX} )
		foreach( DIR IN ITEMS ${LOCAL_RUN_DIRECTORIES} )
			install( DIRECTORY "${DIR}/"
				DESTINATION "${DIR}"
				PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE
				PATTERN "conf/import-tmpl" EXCLUDE )
		endforeach()
	endif()
	if( INSTALL_BUILD_DATA )
		# source
		install( FILES ${LOCAL_BUILD_FILES}
			DESTINATION ${CMAKE_INSTALL_PREFIX} )
		foreach( DIR IN ITEMS ${LOCAL_BUILD_DIRECTORIES} )
			install( DIRECTORY "${DIR}/"
				DESTINATION "${DIR}"
				PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE )
		endforeach()
	endif()
endif()
if( INSTALL_RUN_DATA )
	# base templates
	install( DIRECTORY "save-tmpl/"
		DESTINATION "save"
		PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE )
	install( DIRECTORY "conf/import-tmpl/"
		DESTINATION "conf/import"
		PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE )
endif()


#
# subdirectories
#
add_subdirectory( 3rdparty )
add_subdirectory( src )