mirror of
https://github.com/wesnoth/wesnoth
synced 2025-04-25 10:39:29 +00:00
280 lines
9.3 KiB
CMake
280 lines
9.3 KiB
CMake
# most stuff should be implemented so far, mgoe should know the details (he has done all the work...)
|
|
# what is not working so far:
|
|
# * The fribidi check doesn't distinguish between version 1 and version 2
|
|
# Wesnoth only works with version 1 currently, so if version 2 is installed,
|
|
# it should be treated the same as if it wasn't present. (This should be fixed, please test)
|
|
# The fribidi test for fribidi_utf8_to_unicode succeeds when it shouldn't.
|
|
# I looked through the header files for that string and didn't find it,
|
|
# so I don't know why the test is succeeding.
|
|
# * some other smaller stuff
|
|
# * nice INSTALL howto
|
|
# * check for poll(2) and select(2) as in SConstruct line 183 and if found, define same
|
|
# symbols as autoconf would.
|
|
|
|
# set minimum version and make sure that things work with cmake 2.6, too
|
|
cmake_minimum_required(VERSION 2.4.6)
|
|
|
|
if(COMMAND cmake_policy)
|
|
cmake_policy(SET CMP0003 NEW)
|
|
cmake_policy(SET CMP0005 OLD)
|
|
endif(COMMAND cmake_policy)
|
|
|
|
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
|
|
|
|
# use our own version of FindBoost.cmake and other Find* scripts
|
|
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
|
|
|
|
# find all deps needed, pkgconfig is needed to find pangocairo
|
|
find_package( SDL 1.2.7 REQUIRED )
|
|
find_package( Boost 1.33 REQUIRED COMPONENTS iostreams regex )
|
|
find_package( PkgConfig REQUIRED )
|
|
# yes, gettext is *required* even when NLS is deactivated (this is to compile
|
|
# src/gettext.cpp since it includes libintl.h)
|
|
find_package( Gettext REQUIRED )
|
|
find_package( FriBiDi )
|
|
find_package( PythonInterp 2.4 )
|
|
find_package( PythonCustom )
|
|
find_package( X11 )
|
|
|
|
#use pkg-config to find pangocairo:
|
|
pkg_check_modules( PANGOCAIRO REQUIRED pangocairo>=1.14.8 )
|
|
|
|
#use pkg-config to find fontconfig:
|
|
pkg_check_modules( FONTCONFIG REQUIRED fontconfig>=2.4.2 )
|
|
|
|
#
|
|
# Options
|
|
#
|
|
|
|
#Path options
|
|
set(BINDIR "bin" CACHE STRING "Where to install binaries")
|
|
set(MANDIR "man" CACHE STRING "Where to install manpages")
|
|
set(DATAROOTDIR "${CMAKE_INSTALL_PREFIX}/share" CACHE STRING "Sets the root of data directories to a non-default location")
|
|
set(DOCDIR "${DATAROOTDIR}/doc/wesnoth" CACHE STRING "Sets the doc directory to a non-default location.")
|
|
set(DATADIRNAME "wesnoth" CACHE STRING "change the name of the directory for the read-only architecture-independent game data")
|
|
set(LOCALEDIR "translations" CACHE STRING "change the name of the locale data directory to a non-default name")
|
|
set(PREFERENCES_DIR "" CACHE STRING "Use a non-default preferences directory (.wesnoth on unix)")
|
|
|
|
#Game options
|
|
option(ENABLE_PYTHON "Enable in-game python extensions" ON)
|
|
option(ENABLE_FRIBIDI "Enable FriBIDi support" ON)
|
|
option(ENABLE_DUMMY_LOCALES "Create dummy locales")
|
|
set(GUI "normal" CACHE STRING "Set for GUI reductions for resolutions down to 320x240 (PDAs) (normal|tiny)")
|
|
|
|
#server options
|
|
set(SERVER_UID "" CACHE STRING "User id of the user who runs wesnothd")
|
|
set(SERVER_GID "" CACHE STRING "Group id of the user who runs wesnothd")
|
|
set(FIFO_DIR "/var/run/wesnothd" CACHE STRING "Directory for the wesnothd fifo socket file")
|
|
|
|
#build options
|
|
option(ENABLE_GAME "Enable compilation of the game" ON)
|
|
option(ENABLE_CAMPAIGN_SERVER "Enable compilation of campaign server")
|
|
option(ENABLE_SERVER "Enable compilation of server" ON)
|
|
option(ENABLE_EDITOR "Enable compilation of the new map editor into the game executable" ON)
|
|
option(ENABLE_TOOLS "Enable building and installation of tools for artists and WML maintainers")
|
|
option(ENABLE_TESTS "Build unit tests")
|
|
option(ENABLE_NLS "Enable building of tranlations" ON)
|
|
|
|
set(BINARY_SUFFIX "" CACHE STRING "Suffix behind all binaries")
|
|
set(BINARY_PREFIX "" CACHE STRING "Prefix in front of all binaries")
|
|
|
|
#
|
|
# Handle options (set paths/definitions/etc...)
|
|
#
|
|
|
|
# Set our own default debug flags at first run
|
|
if(NOT CONFIGURED)
|
|
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -DDEBUG -ggdb3 -W -Wall -ansi" CACHE STRING "Flags used by the compiler during debug builds." FORCE)
|
|
endif(NOT CONFIGURED)
|
|
|
|
#Add build-type: DEBUGSTRICT
|
|
set(CMAKE_CXX_FLAGS_DEBUGSTRICT "-O0 -DDEBUG -ggdb3 -W -Wall -ansi -Werror -Wno-unused -Wno-sign-compare" CACHE STRING "Flags used by the compiler during strict debug builds.")
|
|
set(CMAKE_EXE_LINKER_FLAGS_DEBUGSTRICT "${CMAKE_EXE_LINKER_FLAGS_DEBUG}" CACHE STRING "Flags used for linking binaries during strict debug builds.")
|
|
mark_as_advanced(CMAKE_CXX_FLAGS_DEBUGSTRICT CMAKE_EXE_LINKER_FLAGS_DEBUGSTRICT)
|
|
|
|
# compose datadir path of datarootdir and datadirname
|
|
set(DATADIR ${DATAROOTDIR}/${DATADIRNAME})
|
|
|
|
if(NOT WIN32)
|
|
add_definitions(-DWESNOTH_PATH='\"${DATADIR}\"')
|
|
endif(NOT WIN32)
|
|
|
|
if(NOT ENABLE_EDITOR)
|
|
add_definitions(-DDISABLE_EDITOR2)
|
|
endif(NOT ENABLE_EDITOR)
|
|
|
|
if(X11_FOUND)
|
|
add_definitions(-D_X11)
|
|
endif(X11_FOUND)
|
|
|
|
add_definitions(-DHAS_RELATIVE_LOCALEDIR)
|
|
add_definitions(-DLOCALEDIR='\"${LOCALEDIR}\"')
|
|
set(LOCALE_INSTALL ${DATADIR}/${LOCALEDIR})
|
|
|
|
add_definitions(-DFIFODIR='\"${FIFO_DIR}\"')
|
|
|
|
if(PREFERENCES_DIR)
|
|
add_definitions(-DPREFERENCES_DIR='\"${PREFERENCES_DIR}\"')
|
|
endif(PREFERENCES_DIR)
|
|
|
|
if(GUI STREQUAL "tiny")
|
|
add_definitions(-DUSE_TINY_GUI)
|
|
endif(GUI STREQUAL "tiny")
|
|
|
|
if(ENABLE_PYTHON AND PYTHON_LIBRARIES)
|
|
add_definitions(-DHAVE_PYTHON)
|
|
elseif(ENABLE_PYTHON AND NOT PYTHON_LIBRARIES)
|
|
message("Could not find Python. Disabling Python support.")
|
|
endif()
|
|
|
|
if(ENABLE_FRIBIDI AND FRIBIDI_LIBRARIES)
|
|
add_definitions(-DHAVE_FRIBIDI)
|
|
elseif(ENABLE_FRIBIDI AND NOT FRIBIDI_LIBRARIES)
|
|
message("Could not find FriBiDi. Disabling FriBiDi support.")
|
|
endif()
|
|
|
|
#
|
|
# Libraries that are only required by some targets
|
|
#
|
|
|
|
if(ENABLE_TOOLS OR ENABLE_GAME OR ENABLE_TESTS)
|
|
find_package( SDL_image 1.2 REQUIRED )
|
|
endif()
|
|
if(ENABLE_GAME OR ENABLE_TESTS)
|
|
find_package( SDL_mixer 1.2 REQUIRED )
|
|
find_package( SDL_ttf 2.0.8 REQUIRED )
|
|
endif()
|
|
if(ENABLE_GAME OR ENABLE_SERVER OR ENABLE_CAMPAIGN_SERVER OR ENABLE_TESTS)
|
|
find_package( SDL_net REQUIRED )
|
|
endif()
|
|
if(ENABLE_TOOLS)
|
|
find_package( ZLIB REQUIRED )
|
|
find_package( PNG REQUIRED )
|
|
endif()
|
|
if(ENABLE_TESTS)
|
|
find_package( Boost 1.33 REQUIRED COMPONENTS unit_test_framework )
|
|
endif()
|
|
|
|
# get languages
|
|
file(READ po/LINGUAS LINGUAS)
|
|
string(REPLACE "\n" "" LINGUAS ${LINGUAS})
|
|
separate_arguments(LINGUAS)
|
|
|
|
#
|
|
# Include subdirectories
|
|
#
|
|
|
|
add_subdirectory(doc)
|
|
if (GETTEXT_FOUND AND ENABLE_NLS)
|
|
add_subdirectory(po)
|
|
endif (GETTEXT_FOUND AND ENABLE_NLS)
|
|
add_subdirectory(src)
|
|
|
|
#
|
|
#create dummy-locales
|
|
#
|
|
|
|
if(ENABLE_DUMMY_LOCALES)
|
|
add_definitions(-DUSE_DUMMYLOCALES)
|
|
endif()
|
|
|
|
set(DUMMY_LOCALE_C_DIR ${CMAKE_SOURCE_DIR}/locales/C)
|
|
|
|
add_custom_command(OUTPUT ${DUMMY_LOCALE_C_DIR}
|
|
COMMAND mkdir -p ${DUMMY_LOCALE_C_DIR}
|
|
&& echo | localedef -c ${DUMMY_LOCALE_C_DIR} 2> /dev/null || true)
|
|
|
|
file(GLOB_RECURSE LANGS RELATIVE ${CMAKE_SOURCE_DIR}/data/languages data/languages/*.cfg)
|
|
|
|
set(DUMMY_LOCALES)
|
|
foreach(LANGFILE ${LANGS})
|
|
string(REGEX REPLACE "(.*)\\.cfg" "\\1" LANG ${LANGFILE})
|
|
if(NOT LANG STREQUAL "C")
|
|
set(DUMMY_LOCALE_DIR ${CMAKE_SOURCE_DIR}/locales/${LANG})
|
|
add_custom_command(OUTPUT ${DUMMY_LOCALE_DIR}
|
|
COMMAND ln -s
|
|
ARGS ${DUMMY_LOCALE_C_DIR} ${DUMMY_LOCALE_DIR}
|
|
DEPENDS ${DUMMY_LOCALE_C_DIR})
|
|
|
|
set(DUMMY_LOCALES ${DUMMY_LOCALES} ${DUMMY_LOCALE_DIR})
|
|
endif()
|
|
|
|
endforeach()
|
|
add_custom_target(dummy-locales ALL DEPENDS ${DUMMY_LOCALES})
|
|
|
|
# this is a workaround for a bug in 2.4-7
|
|
file(MAKE_DIRECTORY locales)
|
|
install(DIRECTORY locales DESTINATION ${DATADIR} )
|
|
|
|
|
|
#
|
|
# shrink images for tinygui
|
|
#
|
|
|
|
if(GUI STREQUAL "tiny")
|
|
FIND_PACKAGE( ImageMagick REQUIRED )
|
|
|
|
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
|
|
set(IMAGE_BUILD_DIR ${CMAKE_SOURCE_DIR}/tiny_images)
|
|
else()
|
|
set(IMAGE_BUILD_DIR ${CMAKE_BINARY_DIR})
|
|
endif()
|
|
|
|
set(IMAGE_FILES data/*.jpg data/*.png images/*.jpg images/*.png)
|
|
|
|
add_custom_target(shrink-images ALL
|
|
COMMAND ${CMAKE_COMMAND}
|
|
ARGS -DIMAGE_FILES="${IMAGE_FILES}" -DIMAGE_BUILD_DIR="${IMAGE_BUILD_DIR}" -DIMAGEMAGICK_IDENTIFY_EXECUTABLE="${IMAGEMAGICK_IDENTIFY_EXECUTABLE}" -DIMAGEMAGICK_CONVERT_EXECUTABLE="${IMAGEMAGICK_CONVERT_EXECUTABLE}" -P "${CMAKE_MODULE_PATH}/ShrinkImages.cmake"
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
COMMENT "Creating resized images for tinygui.")
|
|
|
|
#
|
|
# Install files (exclude images from data-dir, we install them from our build dir)
|
|
#
|
|
|
|
# this is a workaround for a bug in 2.4-7
|
|
file(MAKE_DIRECTORY ${IMAGE_BUILD_DIR}/data ${IMAGE_BUILD_DIR}/images)
|
|
install(DIRECTORY ${IMAGE_BUILD_DIR}/data ${IMAGE_BUILD_DIR}/images DESTINATION ${DATADIR})
|
|
install(DIRECTORY data fonts sounds DESTINATION ${DATADIR}
|
|
PATTERN "*.png" EXCLUDE
|
|
PATTERN "*.jpg" EXCLUDE
|
|
PATTERN ".svn" EXCLUDE )
|
|
else()
|
|
|
|
#
|
|
# Install files
|
|
#
|
|
install(DIRECTORY data fonts images sounds DESTINATION ${DATADIR} PATTERN ".svn" EXCLUDE )
|
|
|
|
endif()
|
|
|
|
|
|
if(ENABLE_SERVER AND FIFO_DIR)
|
|
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory \$ENV{DESTDIR}/${FIFO_DIR})")
|
|
if(SERVER_UID AND SERVER_GID)
|
|
install(CODE "execute_process(COMMAND chown ${SERVER_UID}:${SERVER_GID} \$ENV{DESTDIR}/${FIFO_DIR})")
|
|
endif()
|
|
endif()
|
|
|
|
#
|
|
# uninstall
|
|
#
|
|
|
|
configure_file(
|
|
"${CMAKE_MODULE_PATH}/uninstall.cmake.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake"
|
|
IMMEDIATE @ONLY)
|
|
|
|
add_custom_target(uninstall
|
|
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake")
|
|
|
|
#
|
|
# Packaging stuff
|
|
#
|
|
|
|
include(CPack)
|
|
set(CPACK_GENERATOR "TGZ")
|
|
set(CPACK_SOURCE_GENERATOR "TGZ")
|
|
|
|
set(CONFIGURED ON CACHE INTERNAL "")
|