Update CMakeLists

master
MoNTE48 2020-03-25 14:26:59 +01:00
parent 61fc60c562
commit 0a8c359d08
2 changed files with 133 additions and 98 deletions

View File

@ -210,6 +210,9 @@ set(CPACK_PACKAGE_VENDOR "MoNTE48")
set(CPACK_PACKAGE_CONTACT "MoNTE48@mail.ua") set(CPACK_PACKAGE_CONTACT "MoNTE48@mail.ua")
if(WIN32) if(WIN32)
# Include all dynamically linked runtime libaries such as MSVCRxxx.dll
include(InstallRequiredSystemLibraries)
if(CMAKE_SIZEOF_VOID_P EQUAL 8) if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-win64") set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION_STRING}-win64")
else() else()

View File

@ -57,7 +57,7 @@ if(NOT USE_CURL)
endif() endif()
option(ENABLE_GETTEXT "Use GetText for internationalization" FALSE) option(ENABLE_GETTEXT "Use GetText for internationalization" TRUE)
set(USE_GETTEXT FALSE) set(USE_GETTEXT FALSE)
if(ENABLE_GETTEXT) if(ENABLE_GETTEXT)
@ -115,10 +115,20 @@ if(USE_SOUND)
endif() endif()
option(ENABLE_GLES "Enable OpenGL ES support" FALSE) option(ENABLE_GLES "Use OpenGL ES instead of OpenGL" FALSE)
mark_as_advanced(ENABLE_GLES) mark_as_advanced(ENABLE_GLES)
if(ENABLE_GLES) if(BUILD_CLIENT)
find_package(OpenGLES2) if(ENABLE_GLES)
find_package(OpenGLES2 REQUIRED)
else()
if(NOT WIN32) # Unix probably
set(OPENGL_GL_PREFERENCE "LEGACY" CACHE STRING
"See CMake Policy CMP0072 for reference. GLVND is broken on some nvidia setups")
set(OpenGL_GL_PREFERENCE ${OPENGL_GL_PREFERENCE})
find_package(OpenGL REQUIRED)
endif()
endif()
endif() endif()
@ -174,27 +184,14 @@ option(ENABLE_POSTGRESQL "Enable PostgreSQL backend" TRUE)
set(USE_POSTGRESQL FALSE) set(USE_POSTGRESQL FALSE)
if(ENABLE_POSTGRESQL) if(ENABLE_POSTGRESQL)
find_program(POSTGRESQL_CONFIG_EXECUTABLE pg_config DOC "pg_config")
find_library(POSTGRESQL_LIBRARY pq)
if(POSTGRESQL_CONFIG_EXECUTABLE)
execute_process(COMMAND ${POSTGRESQL_CONFIG_EXECUTABLE} --includedir-server
OUTPUT_VARIABLE POSTGRESQL_SERVER_INCLUDE_DIRS
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${POSTGRESQL_CONFIG_EXECUTABLE}
OUTPUT_VARIABLE POSTGRESQL_CLIENT_INCLUDE_DIRS
OUTPUT_STRIP_TRAILING_WHITESPACE)
# This variable is case sensitive for the cmake PostgreSQL module
set(PostgreSQL_ADDITIONAL_SEARCH_PATHS ${POSTGRESQL_SERVER_INCLUDE_DIRS} ${POSTGRESQL_CLIENT_INCLUDE_DIRS})
endif()
find_package("PostgreSQL") find_package("PostgreSQL")
if(POSTGRESQL_FOUND) if(PostgreSQL_FOUND)
set(USE_POSTGRESQL TRUE) set(USE_POSTGRESQL TRUE)
message(STATUS "PostgreSQL backend enabled") message(STATUS "PostgreSQL backend enabled")
# This variable is case sensitive, don't try to change it to POSTGRESQL_INCLUDE_DIR # This variable is case sensitive, don't try to change it to POSTGRESQL_INCLUDE_DIR
message(STATUS "PostgreSQL includes: ${PostgreSQL_INCLUDE_DIR}") message(STATUS "PostgreSQL includes: ${PostgreSQL_INCLUDE_DIRS}")
include_directories(${PostgreSQL_INCLUDE_DIR}) include_directories(${PostgreSQL_INCLUDE_DIRS})
else() else()
message(STATUS "PostgreSQL not found!") message(STATUS "PostgreSQL not found!")
endif() endif()
@ -204,7 +201,7 @@ option(ENABLE_LEVELDB "Enable LevelDB backend" TRUE)
set(USE_LEVELDB FALSE) set(USE_LEVELDB FALSE)
if(ENABLE_LEVELDB) if(ENABLE_LEVELDB)
find_library(LEVELDB_LIBRARY leveldb) find_library(LEVELDB_LIBRARY NAMES leveldb libleveldb)
find_path(LEVELDB_INCLUDE_DIR db.h PATH_SUFFIXES leveldb) find_path(LEVELDB_INCLUDE_DIR db.h PATH_SUFFIXES leveldb)
if(LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR) if(LEVELDB_LIBRARY AND LEVELDB_INCLUDE_DIR)
set(USE_LEVELDB TRUE) set(USE_LEVELDB TRUE)
@ -271,34 +268,27 @@ if(WIN32)
set(PLATFORM_LIBS ws2_32.lib version.lib shlwapi.lib ${PLATFORM_LIBS}) set(PLATFORM_LIBS ws2_32.lib version.lib shlwapi.lib ${PLATFORM_LIBS})
# Zlib stuff # Zlib stuff
set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5" find_path(ZLIB_INCLUDE_DIR "zlib.h" DOC "Zlib include directory")
CACHE PATH "Zlib include directory") find_library(ZLIB_LIBRARIES "zlib" DOC "Path to zlib library")
set(ZLIB_LIBRARIES "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.lib"
CACHE FILEPATH "Path to zlib library (usually zlibwapi.lib)") # Dll's are automatically copied to the output directory by vcpkg when VCPKG_APPLOCAL_DEPS=ON
set(ZLIB_DLL "${PROJECT_SOURCE_DIR}/../../zlib125dll/dll32/zlibwapi.dll" if(NOT VCPKG_APPLOCAL_DEPS)
CACHE FILEPATH "Path to zlib DLL (for installation)") find_file(ZLIB_DLL NAMES "zlib.dll" "zlib1.dll" DOC "Path to zlib.dll for installation (optional)")
set(ZLIBWAPI_DLL "" CACHE FILEPATH "Path to zlibwapi DLL") if(ENABLE_SOUND)
set(IRRLICHT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../../irrlicht-1.7.2" set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)")
CACHE PATH "irrlicht dir") set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)")
if(USE_FREETYPE) set(VORBIS_DLL "" CACHE FILEPATH "Path to libvorbis.dll for installation (optional)")
set(FREETYPE_INCLUDE_DIR_ft2build "${PROJECT_SOURCE_DIR}/../../freetype2/include/" set(VORBISFILE_DLL "" CACHE FILEPATH "Path to libvorbisfile.dll for installation (optional)")
CACHE PATH "freetype include dir") endif()
set(FREETYPE_INCLUDE_DIR_freetype2 "${PROJECT_SOURCE_DIR}/../../freetype2/include/freetype" if(USE_LUAJIT)
CACHE PATH "freetype include dir") set(LUA_DLL "" CACHE FILEPATH "Path to lua51.dll for installation (optional)")
set(FREETYPE_LIBRARY "${PROJECT_SOURCE_DIR}/../../freetype2/objs/win32/vc2005/freetype247.lib" endif()
CACHE FILEPATH "Path to freetype247.lib")
endif()
if(ENABLE_SOUND)
set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)")
set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)")
set(VORBIS_DLL "" CACHE FILEPATH "Path to libvorbis.dll for installation (optional)")
set(VORBISFILE_DLL "" CACHE FILEPATH "Path to libvorbisfile.dll for installation (optional)")
endif() endif()
else() else()
# Unix probably # Unix probably
if(BUILD_CLIENT) if(BUILD_CLIENT)
find_package(X11 REQUIRED) find_package(X11 REQUIRED)
find_package(OpenGL REQUIRED)
find_package(JPEG REQUIRED) find_package(JPEG REQUIRED)
find_package(BZip2 REQUIRED) find_package(BZip2 REQUIRED)
find_package(PNG REQUIRED) find_package(PNG REQUIRED)
@ -556,7 +546,6 @@ include_directories(
${ZLIB_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR}
${CMAKE_BUILD_TYPE} ${CMAKE_BUILD_TYPE}
${PNG_INCLUDE_DIR} ${PNG_INCLUDE_DIR}
${GETTEXT_INCLUDE_DIR}
${SOUND_INCLUDE_DIRS} ${SOUND_INCLUDE_DIRS}
${LUA_INCLUDE_DIR} ${LUA_INCLUDE_DIR}
${GMP_INCLUDE_DIR} ${GMP_INCLUDE_DIR}
@ -565,6 +554,10 @@ include_directories(
${PROJECT_SOURCE_DIR}/script ${PROJECT_SOURCE_DIR}/script
) )
if(USE_GETTEXT)
include_directories(${GETTEXT_INCLUDE_DIR})
endif()
if(WIN32) if(WIN32)
include_directories(${SQLITE3_INCLUDE_DIR}) include_directories(${SQLITE3_INCLUDE_DIR})
endif() endif()
@ -588,24 +581,21 @@ if(BUILD_CLIENT)
${PROJECT_NAME} ${PROJECT_NAME}
${ZLIB_LIBRARIES} ${ZLIB_LIBRARIES}
${IRRLICHT_LIBRARY} ${IRRLICHT_LIBRARY}
${OPENGL_LIBRARIES}
${JPEG_LIBRARIES} ${JPEG_LIBRARIES}
${BZIP2_LIBRARIES} ${BZIP2_LIBRARIES}
${PNG_LIBRARIES} ${PNG_LIBRARIES}
${X11_LIBRARIES} ${X11_LIBRARIES}
${GETTEXT_LIBRARY}
${SOUND_LIBRARIES} ${SOUND_LIBRARIES}
${LUA_LIBRARY} ${LUA_LIBRARY}
${GMP_LIBRARY} ${GMP_LIBRARY}
${JSON_LIBRARY} ${JSON_LIBRARY}
${OPENGLES2_LIBRARIES}
${PLATFORM_LIBS} ${PLATFORM_LIBS}
${CLIENT_PLATFORM_LIBS} ${CLIENT_PLATFORM_LIBS}
) )
if(WIN32) if(WIN32)
target_link_libraries( target_link_libraries(
${client_LIBS} ${PROJECT_NAME}
${SQLITE3_LIBRARY} ${SQLITE3_LIBRARY}
) )
endif() endif()
if(APPLE) if(APPLE)
@ -618,6 +608,24 @@ if(BUILD_CLIENT)
${client_LIBS} ${client_LIBS}
) )
endif() endif()
if(ENABLE_GLES)
target_link_libraries(
${PROJECT_NAME}
${OPENGLES2_LIBRARIES}
${EGL_LIBRARIES}
)
else()
target_link_libraries(
${PROJECT_NAME}
${OPENGL_LIBRARIES}
)
endif()
if(USE_GETTEXT)
target_link_libraries(
${PROJECT_NAME}
${GETTEXT_LIBRARY}
)
endif()
if(USE_CURL) if(USE_CURL)
target_link_libraries( target_link_libraries(
${PROJECT_NAME} ${PROJECT_NAME}
@ -641,7 +649,7 @@ if(BUILD_CLIENT)
target_link_libraries(${PROJECT_NAME} ${CURSES_LIBRARIES}) target_link_libraries(${PROJECT_NAME} ${CURSES_LIBRARIES})
endif() endif()
if (USE_POSTGRESQL) if (USE_POSTGRESQL)
target_link_libraries(${PROJECT_NAME} ${POSTGRESQL_LIBRARY}) target_link_libraries(${PROJECT_NAME} ${PostgreSQL_LIBRARIES})
endif() endif()
if (USE_LEVELDB) if (USE_LEVELDB)
target_link_libraries(${PROJECT_NAME} ${LEVELDB_LIBRARY}) target_link_libraries(${PROJECT_NAME} ${LEVELDB_LIBRARY})
@ -662,18 +670,20 @@ if(BUILD_SERVER)
${PROJECT_NAME}server ${PROJECT_NAME}server
${ZLIB_LIBRARIES} ${ZLIB_LIBRARIES}
${JSON_LIBRARY} ${JSON_LIBRARY}
${GETTEXT_LIBRARY}
${LUA_LIBRARY} ${LUA_LIBRARY}
${GMP_LIBRARY} ${GMP_LIBRARY}
${PLATFORM_LIBS} ${PLATFORM_LIBS}
) )
set_target_properties(${PROJECT_NAME}server PROPERTIES set_target_properties(${PROJECT_NAME}server PROPERTIES
COMPILE_DEFINITIONS "SERVER") COMPILE_DEFINITIONS "SERVER")
if (USE_GETTEXT)
target_link_libraries(${PROJECT_NAME}server ${GETTEXT_LIBRARY})
endif()
if (USE_CURSES) if (USE_CURSES)
target_link_libraries(${PROJECT_NAME}server ${CURSES_LIBRARIES}) target_link_libraries(${PROJECT_NAME}server ${CURSES_LIBRARIES})
endif() endif()
if (USE_POSTGRESQL) if (USE_POSTGRESQL)
target_link_libraries(${PROJECT_NAME}server ${POSTGRESQL_LIBRARY}) target_link_libraries(${PROJECT_NAME}server ${PostgreSQL_LIBRARIES})
endif() endif()
if (USE_LEVELDB) if (USE_LEVELDB)
target_link_libraries(${PROJECT_NAME}server ${LEVELDB_LIBRARY}) target_link_libraries(${PROJECT_NAME}server ${LEVELDB_LIBRARY})
@ -721,7 +731,7 @@ include(CheckCXXCompilerFlag)
if(MSVC) if(MSVC)
# Visual Studio # Visual Studio
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D /MP") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
# EHa enables SEH exceptions (used for catching segfaults) # EHa enables SEH exceptions (used for catching segfaults)
set(CMAKE_CXX_FLAGS_RELEASE "/EHa /Ox /GL /FD /MT /GS- /Zi /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0 /TP") set(CMAKE_CXX_FLAGS_RELEASE "/EHa /Ox /GL /FD /MT /GS- /Zi /fp:fast /D NDEBUG /D _HAS_ITERATOR_DEBUGGING=0 /TP")
if(CMAKE_SIZEOF_VOID_P EQUAL 4) if(CMAKE_SIZEOF_VOID_P EQUAL 4)
@ -761,12 +771,6 @@ else()
set(OTHER_FLAGS "${OTHER_FLAGS} -Wsign-compare") set(OTHER_FLAGS "${OTHER_FLAGS} -Wsign-compare")
endif() endif()
if(WIN32 AND NOT ZLIBWAPI_DLL AND CMAKE_SIZEOF_VOID_P EQUAL 4)
set(OTHER_FLAGS "${OTHER_FLAGS} -DWIN32_NO_ZLIB_WINAPI")
message(WARNING "Defaulting to cdecl for zlib on win32 because ZLIBWAPI_DLL"
" isn't set, ensure that ZLIBWAPI_DLL is set if you want stdcall.")
endif()
if(MINGW) if(MINGW)
set(OTHER_FLAGS "${OTHER_FLAGS} -mthreads -fexceptions") set(OTHER_FLAGS "${OTHER_FLAGS} -mthreads -fexceptions")
endif() endif()
@ -793,40 +797,58 @@ endif()
# Installation # Installation
if(WIN32) if(WIN32)
if(USE_SOUND) if(VCPKG_APPLOCAL_DEPS)
if(OPENAL_DLL) # Collect the dll's from the output path
install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR}) install(DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/Release/
DESTINATION ${BINDIR}
CONFIGURATIONS Release
FILES_MATCHING PATTERN "*.dll")
install(DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/Debug/
DESTINATION ${BINDIR}
CONFIGURATIONS Debug
FILES_MATCHING PATTERN "*.dll")
install(DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/RelWithDebInfo/
DESTINATION ${BINDIR}
CONFIGURATIONS RelWithDebInfo
FILES_MATCHING PATTERN "*.dll")
install(DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/MinSizeRel/
DESTINATION ${BINDIR}
CONFIGURATIONS RelWithDebInfo
FILES_MATCHING PATTERN "*.dll")
else()
# Use the old-style way to install dll's
if(USE_SOUND)
if(OPENAL_DLL)
install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR})
endif()
if(OGG_DLL)
install(FILES ${OGG_DLL} DESTINATION ${BINDIR})
endif()
if(VORBIS_DLL)
install(FILES ${VORBIS_DLL} DESTINATION ${BINDIR})
endif()
if(VORBISFILE_DLL)
install(FILES ${VORBISFILE_DLL} DESTINATION ${BINDIR})
endif()
endif() endif()
if(OGG_DLL) if(CURL_DLL)
install(FILES ${OGG_DLL} DESTINATION ${BINDIR}) install(FILES ${CURL_DLL} DESTINATION ${BINDIR})
endif() endif()
if(VORBIS_DLL) if(ZLIB_DLL)
install(FILES ${VORBIS_DLL} DESTINATION ${BINDIR}) install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
endif() endif()
if(VORBISFILE_DLL) if(FREETYPE_DLL)
install(FILES ${VORBISFILE_DLL} DESTINATION ${BINDIR}) install(FILES ${FREETYPE_DLL} DESTINATION ${BINDIR})
endif()
if(SQLITE3_DLL)
install(FILES ${SQLITE3_DLL} DESTINATION ${BINDIR})
endif()
if(LEVELDB_DLL)
install(FILES ${LEVELDB_DLL} DESTINATION ${BINDIR})
endif()
if(LUA_DLL)
install(FILES ${LUA_DLL} DESTINATION ${BINDIR})
endif() endif()
endif()
if(CURL_DLL)
install(FILES ${CURL_DLL} DESTINATION ${BINDIR})
endif()
if(ZLIB_DLL)
install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
endif()
if(ZLIBWAPI_DLL)
install(FILES ${ZLIBWAPI_DLL} DESTINATION ${BINDIR})
endif()
if(FREETYPE_DLL)
install(FILES ${FREETYPE_DLL} DESTINATION ${BINDIR})
endif()
if(SQLITE3_DLL)
install(FILES ${SQLITE3_DLL} DESTINATION ${BINDIR})
endif()
if(LEVELDB_DLL)
install(FILES ${LEVELDB_DLL} DESTINATION ${BINDIR})
endif()
if(LUA_DLL)
install(FILES ${LUA_DLL} DESTINATION ${BINDIR})
endif() endif()
endif() endif()
@ -854,16 +876,26 @@ if(BUILD_CLIENT)
endforeach() endforeach()
endif() endif()
if(USE_FREETYPE)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}"
FILES_MATCHING PATTERN "*.ttf" PATTERN "*.txt")
else()
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}"
FILES_MATCHING PATTERN "*.png" PATTERN "*.xml")
endif()
if(WIN32) if(WIN32)
if(DEFINED IRRLICHT_DLL) if(NOT VCPKG_APPLOCAL_DEPS)
install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR}) if(DEFINED IRRLICHT_DLL)
endif() install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
if(USE_GETTEXT)
if(DEFINED GETTEXT_DLL)
install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
endif() endif()
if(DEFINED GETTEXT_ICONV_DLL) if(USE_GETTEXT)
install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR}) if(DEFINED GETTEXT_DLL)
install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
endif()
if(DEFINED GETTEXT_ICONV_DLL)
install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
endif()
endif() endif()
endif() endif()
endif() endif()