mirror of
https://github.com/worldforge/cyphesis
synced 2026-08-13 12:26:04 -04:00
274 lines
8.9 KiB
CMake
274 lines
8.9 KiB
CMake
cmake_minimum_required(VERSION 3.2)
|
|
|
|
project(Cyphesis)
|
|
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
|
|
set(CMAKE_CXX_STANDARD 14)
|
|
|
|
include(GNUInstallDirs)
|
|
include(FindPkgConfig)
|
|
include(CheckFunctionExists)
|
|
include(CheckIncludeFiles)
|
|
include(GetGitRevisionDescription)
|
|
|
|
# Version setup
|
|
|
|
set(CYPHESIS_VERSION_MAJOR 0)
|
|
set(CYPHESIS_VERSION_MINOR 7)
|
|
set(CYPHESIS_VERSION_PATCH 0)
|
|
|
|
set(VERSION ${CYPHESIS_VERSION_MAJOR}.${CYPHESIS_VERSION_MINOR}.${CYPHESIS_VERSION_PATCH})
|
|
|
|
# Set compiler flags
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
|
|
|
add_definitions(-DHAVE_CONFIG_H)
|
|
|
|
include_directories("${PROJECT_SOURCE_DIR};${PROJECT_BINARY_DIR}")
|
|
|
|
enable_testing()
|
|
|
|
# Meta data
|
|
get_git_head_revision(GIT_REFSPEC GIT_SHA1)
|
|
set(DESCRIPTION "A complete server for the Worldforge system.")
|
|
set(SOCKET_DIR ${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/tmp)
|
|
set(PACKAGE_BUGREPORT "erik@ogenvik.org")
|
|
|
|
check_function_exists(getuid HAVE_GETUID)
|
|
check_function_exists(nice HAVE_NICE)
|
|
check_function_exists(sigaction HAVE_SIGACTION)
|
|
check_function_exists(fork HAVE_FORK)
|
|
check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
|
|
check_function_exists(uname HAVE_UNAME)
|
|
check_function_exists(localtime_r HAVE_LOCALTIME_R)
|
|
check_function_exists(syslog HAVE_SYSLOG)
|
|
check_function_exists(usleep HAVE_USLEEP)
|
|
|
|
check_include_files(syslog.h HAVE_SYSLOG_H)
|
|
check_include_files(sys/utsname.h HAVE_SYS_UTSNAME_H)
|
|
check_include_files(sys/un.h HAVE_SYS_UN_H)
|
|
check_include_files(sys/wait.h HAVE_SYS_WAIT_H)
|
|
check_include_files(io.h HAVE_IO_H)
|
|
check_include_files(getopt.h HAVE_GETOPT_H)
|
|
check_include_files(dirent.h HAVE_DIRENT_H)
|
|
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
find_package(Threads REQUIRED)
|
|
link_libraries(Threads::Threads)
|
|
|
|
pkg_check_modules(WF REQUIRED varconf-1.0>=0.6.7 mercator-0.4>=0.4.0 atlascpp-0.7>=0.7.0 wfmath-1.0>=1.0.3)
|
|
link_directories(${WF_LIBRARY_DIRS})
|
|
include_directories(${WF_INCLUDE_DIRS})
|
|
link_libraries(${WF_LIBRARIES})
|
|
|
|
pkg_check_modules(SIGCPP REQUIRED sigc++-2.0>=2.0.0)
|
|
link_directories(${SIGCPP_LIBRARY_DIRS})
|
|
include_directories(${SIGCPP_INCLUDE_DIRS})
|
|
link_libraries(${SIGCPP_LIBRARIES})
|
|
|
|
find_package(PythonLibs 3 REQUIRED)
|
|
link_directories(${PYTHON_LIBRARY_DIRS})
|
|
include_directories(${PYTHON_INCLUDE_DIRS})
|
|
|
|
find_package(PythonInterp 3 REQUIRED)
|
|
|
|
find_package(GCrypt 1.2 REQUIRED)
|
|
link_directories(${GCRYPT_LIBRARY_DIRS})
|
|
include_directories(${GCRYPT_INCLUDE_DIRS})
|
|
|
|
#The default FindBullet.cmake macro doesn't look in pkg-config first, so we'll do that ourselves.
|
|
pkg_check_modules(BULLET bullet>=2.81)
|
|
if (NOT BULLET_FOUND)
|
|
find_package(Bullet 2.81 REQUIRED)
|
|
endif (NOT BULLET_FOUND)
|
|
|
|
link_directories(${BULLET_LIBRARY_DIRS})
|
|
include_directories(${BULLET_INCLUDE_DIRS})
|
|
|
|
find_package(Avahi)
|
|
if (AVAHI_FOUND)
|
|
link_directories(${AVAHI_LIBRARY_DIRS})
|
|
include_directories(${AVAHI_INCLUDE_DIR})
|
|
set(HAVE_AVAHI 1)
|
|
endif (AVAHI_FOUND)
|
|
|
|
|
|
find_package(PostgreSQL 7.1 REQUIRED)
|
|
link_directories(${PostgreSQL_LIBRARY_DIRS})
|
|
include_directories(${PostgreSQL_INCLUDE_DIRS})
|
|
|
|
find_package(Readline REQUIRED)
|
|
link_directories(${READLINE_LIBRARY_DIRS})
|
|
include_directories(${READLINE_INCLUDE_DIRS})
|
|
|
|
find_package(Boost
|
|
1.46.0
|
|
REQUIRED
|
|
COMPONENTS filesystem system)
|
|
|
|
link_directories(${Boost_LIBRARY_DIRS})
|
|
link_libraries(${Boost_LIBRARIES})
|
|
include_directories(${Boost_INCLUDE_DIRS})
|
|
|
|
set(ASSETS_DIR assets-${VERSION})
|
|
set(ASSETSREPO_DIR ${PROJECT_SOURCE_DIR}/assetsrepo)
|
|
|
|
find_program(SUBVERSION_CMD NAMES svn)
|
|
find_program(PYTHON_CMD NAMES python)
|
|
find_program(RSYNC_CMD NAMES rsync)
|
|
|
|
add_custom_target(assets-download)
|
|
if (RSYNC_CMD)
|
|
add_custom_command(
|
|
TARGET assets-download
|
|
COMMAND ${CMAKE_COMMAND} -E echo "I will now use rsync to install the assets from amber.worldforge.org into ${ASSETS_DIR}."
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${ASSETS_DIR}
|
|
#We'll for now only copy ".mesh" files.
|
|
COMMAND rsync -rtvzu --include='*.mesh' --include='*/' --exclude='*' amber.worldforge.org::ember-media/ember-media-0.8.0/media/assets ${ASSETS_DIR}
|
|
COMMAND ${CMAKE_COMMAND} -E echo "Copying ${ASSETS_DIR} to ${CMAKE_INSTALL_FULL_DATADIR}/cyphesis/assets."
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${ASSETS_DIR} ${CMAKE_INSTALL_FULL_DATADIR}/cyphesis/
|
|
COMMAND ${CMAKE_COMMAND} -E echo "Done."
|
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
|
)
|
|
else(RSYNC_CMD)
|
|
add_custom_command(
|
|
TARGET assets-download
|
|
COMMAND ${CMAKE_COMMAND} -E echo "Could not find the Rsync command. The target 'assets-download' is disabled."
|
|
)
|
|
endif(RSYNC_CMD)
|
|
|
|
|
|
|
|
|
|
add_custom_target(assetsrepo-checkout)
|
|
if (SUBVERSION_CMD)
|
|
add_custom_command(
|
|
TARGET assetsrepo-checkout
|
|
COMMAND ${CMAKE_COMMAND} -E echo "Using Subversion to checkout https://svn.worldforge.org:886/svn/media/trunk/assets to ${ASSETSREPO_DIR}/assets."
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${ASSETSREPO_DIR}
|
|
COMMAND ${SUBVERSION_CMD} co https://svn.worldforge.org:886/svn/media/trunk/assets ${ASSETSREPO_DIR}/assets
|
|
)
|
|
else(SUBVERSION_CMD)
|
|
add_custom_command(
|
|
TARGET assetsrepo-checkout
|
|
COMMAND ${CMAKE_COMMAND} -E echo "Could not find the Subversion command 'svn'. The target 'assetsrepo-checkout' is disabled."
|
|
)
|
|
endif(SUBVERSION_CMD)
|
|
|
|
##TODO: check for binreloc?
|
|
|
|
#We'll use xmllint for validating schemas of some of our xml files.
|
|
find_program(XMLLINT xmllint)
|
|
|
|
configure_file(config.h.in config.h)
|
|
|
|
set(STUB_HEADERS "")
|
|
|
|
macro(wf_generate_stubs DIRECTORY)
|
|
|
|
file(GLOB_RECURSE H_FILES RELATIVE "${CMAKE_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/${DIRECTORY}/*.h")
|
|
|
|
set(STUB_DIRECTORY ${CMAKE_SOURCE_DIR}/tests/stubs)
|
|
|
|
foreach(FILE ${H_FILES})
|
|
set(STUB_FILE ${STUB_DIRECTORY}/stub${FILE}.h)
|
|
set(STUB_CUSTOM_FILE ${STUB_DIRECTORY}/stub${FILE}.h)
|
|
set(SOURCE_FILE "${CMAKE_SOURCE_DIR}/${FILE}")
|
|
|
|
add_custom_command(TARGET stubs
|
|
COMMAND ${CMAKE_COMMAND} -E echo "Generating stubs for ${FILE}\n"
|
|
COMMAND ${PROJECT_SOURCE_DIR}/scripts/generator/generate_stub.py ${FILE} ${STUB_DIRECTORY}
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
)
|
|
|
|
list(APPEND STUB_HEADERS ${STUB_FILE})
|
|
endforeach(FILE)
|
|
|
|
endmacro()
|
|
|
|
add_custom_target(stubs)
|
|
wf_generate_stubs(common)
|
|
wf_generate_stubs(modules)
|
|
wf_generate_stubs(navigation)
|
|
wf_generate_stubs(physics)
|
|
wf_generate_stubs(rulesets)
|
|
wf_generate_stubs(server)
|
|
|
|
|
|
# Add a "check" target, which builds and runs the tests.
|
|
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} -E Benchmark)
|
|
|
|
# Add a "benchmark" target, which builds and runs the benchmarks.
|
|
add_custom_target(benchmark COMMAND ${CMAKE_CTEST_COMMAND} -R Benchmark)
|
|
|
|
add_subdirectory(physics)
|
|
add_subdirectory(common)
|
|
add_subdirectory(modules)
|
|
add_subdirectory(rulesets)
|
|
add_subdirectory(navigation)
|
|
add_subdirectory(metaserverapi)
|
|
add_subdirectory(server)
|
|
add_subdirectory(client)
|
|
add_subdirectory(aiclient)
|
|
add_subdirectory(data)
|
|
add_subdirectory(tools)
|
|
add_subdirectory(man)
|
|
#Only build tests if the "check" target is used.
|
|
add_subdirectory(tests EXCLUDE_FROM_ALL)
|
|
|
|
configure_file(Doxyfile.in Doxyfile @ONLY)
|
|
configure_file(Doxyfile-python.in Doxyfile-python @ONLY)
|
|
|
|
install(FILES README.md COPYING AUTHORS THANKS NEWS FIXME DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/cyphesis)
|
|
install(DIRECTORY DESTINATION ${SOCKET_DIR})
|
|
|
|
## Doxygen support, exports a "docs" target.
|
|
|
|
find_package(Doxygen)
|
|
|
|
if (DOXYGEN_FOUND)
|
|
|
|
set(DOXYGEN_OUTPUT doc)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${DOXYGEN_OUTPUT}
|
|
COMMAND ${CMAKE_COMMAND} -E echo_append "Building API Documentation..."
|
|
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
|
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile-python
|
|
COMMAND ${CMAKE_COMMAND} -E echo "Done."
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile-python
|
|
)
|
|
|
|
add_custom_target(docs DEPENDS ${DOXYGEN_OUTPUT})
|
|
|
|
endif (DOXYGEN_FOUND)
|
|
|
|
#add_custom_command(
|
|
# OUTPUT ChangeLog
|
|
# COMMAND ${CMAKE_SOURCE_DIR}/scripts/generate-ChangeLog.sh ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR} f12012e7616c191a8926432faf866c8e43854062
|
|
#)
|
|
#add_custom_target(changelog DEPENDS ChangeLog)
|
|
|
|
|
|
# Packaging
|
|
|
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${DESCRIPTION})
|
|
set(CPACK_PACKAGE_VENDOR "Worldforge")
|
|
set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/README.md")
|
|
set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/COPYING")
|
|
set(CPACK_PACKAGE_VERSION_MAJOR "${CYPHESIS_VERSION_MAJOR}")
|
|
set(CPACK_PACKAGE_VERSION_MINOR "${CYPHESIS_VERSION_MINOR}")
|
|
set(CPACK_PACKAGE_VERSION_PATCH "${CYPHESIS_VERSION_PATCH}")
|
|
#set(CPACK_INSTALL_SCRIPT "sh ${CMAKE_SOURCE_DIR}/support/generate-ChangeLog.sh ${CMAKE_SOURCE_DIR} ${CPACK_PACKAGE_INSTALL_DIRECTORY} 8bd480b053190ffde2afe33af66f484953036f5a")
|
|
|
|
set(CPACK_SOURCE_GENERATOR TBZ2 ZIP)
|
|
|
|
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VERSION}" CACHE INTERNAL "tarball basename")
|
|
|
|
set(CPACK_SOURCE_IGNORE_FILES
|
|
# no hidden files
|
|
"/\\\\..+$"
|
|
"~$"
|
|
)
|
|
|
|
include(CPack)
|