X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=CMakeLists.txt;h=928461deec0b3468815218cf8a50a72e00b1ad88;hp=dda42c76e15f5f3a1c6bd4a8b2d7bdb43495c161;hb=826fce3cdc0bce78d15c04a2eb0a373dc1b251a3;hpb=96a933aef38c52356b639fa0cc0903ba2f7ef041 diff --git a/CMakeLists.txt b/CMakeLists.txt index dda42c76..928461de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,13 @@ cmake_minimum_required(VERSION 2.8.11 FATAL_ERROR) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") -# Enable Debug by default, can be changed with -DCMAKE_BUILD_TYPE=Release -if (NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Debug) -endif () project(NetRadiant C CXX) option(BUILD_RADIANT "Build the gui" ON) +if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}/install" CACHE PATH "..." FORCE) +endif () + #----------------------------------------------------------------------- # Version #----------------------------------------------------------------------- @@ -20,6 +20,7 @@ set(NetRadiant_VERSION "${NetRadiant_VERSION_MAJOR}.${NetRadiant_VERSION_MINOR}. file(WRITE "${PROJECT_BINARY_DIR}/RADIANT_MAJOR" ${NetRadiant_VERSION_MAJOR}) file(WRITE "${PROJECT_BINARY_DIR}/RADIANT_MINOR" ${NetRadiant_VERSION_MINOR}) +file(WRITE "${PROJECT_BINARY_DIR}/RADIANT_PATCH" ${NetRadiant_VERSION_PATCH}) set(RADIANT_ABOUTMSG "Custom build" CACHE STRING "About message") @@ -60,9 +61,18 @@ endif () # Flags #----------------------------------------------------------------------- -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing -fno-exceptions -fno-rtti") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti") +macro(addflags args) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${args}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${args}") +endmacro() +addflags("-fno-strict-aliasing") +if (NOT WIN32) + addflags("-fvisibility=hidden") +endif () + set(CMAKE_POSITION_INDEPENDENT_CODE 1) +set(GTK_NS "GTK2" CACHE STRING "GTK variable prefix") #----------------------------------------------------------------------- # Defs @@ -71,10 +81,11 @@ set(CMAKE_POSITION_INDEPENDENT_CODE 1) add_definitions(-DRADIANT_VERSION="${NetRadiant_VERSION}") add_definitions(-DRADIANT_MAJOR_VERSION="${NetRadiant_VERSION_MAJOR}") add_definitions(-DRADIANT_MINOR_VERSION="${NetRadiant_VERSION_MINOR}") +add_definitions(-DRADIANT_PATCH_VERSION="${NetRadiant_VERSION_PATCH}") add_definitions(-DRADIANT_ABOUTMSG="${NetRadiant_ABOUT}") -if (CMAKE_BUILD_TYPE MATCHES Debug) +if (NOT CMAKE_BUILD_TYPE MATCHES Release) add_definitions(-D_DEBUG=1) endif () @@ -104,6 +115,23 @@ endif () include_directories("${PROJECT_SOURCE_DIR}/include") include_directories("${PROJECT_SOURCE_DIR}/libs") +if (WIN32 AND NOT CMAKE_CROSSCOMPILING) + set(BUNDLE_LIBRARIES_DEFAULT ON) +else () + set(BUNDLE_LIBRARIES_DEFAULT OFF) +endif () +option(BUNDLE_LIBRARIES "Bundle libraries" ${BUNDLE_LIBRARIES_DEFAULT}) + +macro(copy_dlls target) + if (BUNDLE_LIBRARIES) + add_custom_command(TARGET ${target} POST_BUILD + COMMAND bash + ARGS -c "ldd '$' | grep -v /c/Windows | awk '{ print $1 }' | while read dll; do cp \"$(which $dll)\" '${PROJECT_BINARY_DIR}'; done" + VERBATIM + ) + endif () +endmacro() + #----------------------------------------------------------------------- # Libraries #----------------------------------------------------------------------- @@ -131,12 +159,8 @@ endif () # Radiant #----------------------------------------------------------------------- -if (BUILD_RADIANT) - add_subdirectory(radiant build) -endif () - if (CMAKE_EXECUTABLE_SUFFIX) - set(RADIANT_EXECUTABLE ${CMAKE_EXECUTABLE_SUFFIX}) + string(REGEX REPLACE "^[.]" "" RADIANT_EXECUTABLE ${CMAKE_EXECUTABLE_SUFFIX}) else () execute_process( COMMAND uname -m @@ -145,7 +169,26 @@ else () ) endif () +macro(radiant_tool name) + add_executable(${name} ${ARGN}) + install( + TARGETS ${name} + RUNTIME DESTINATION . + ) + if (NOT (CMAKE_EXECUTABLE_SUFFIX STREQUAL ".${RADIANT_EXECUTABLE}")) + add_custom_command(TARGET ${name} POST_BUILD + COMMAND ln -f -s "$" "${PROJECT_BINARY_DIR}/${name}.${RADIANT_EXECUTABLE}" + VERBATIM + ) + install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink \ + ${name}${CMAKE_EXECUTABLE_SUFFIX} \ + ${CMAKE_INSTALL_PREFIX}/${name}.${RADIANT_EXECUTABLE} \ + )") + endif () +endmacro() + if (BUILD_RADIANT) + add_subdirectory(radiant build) set_target_properties(radiant PROPERTIES COMPILE_DEFINITIONS RADIANT_EXECUTABLE="${RADIANT_EXECUTABLE}" ) @@ -157,13 +200,12 @@ endif () add_subdirectory(tools) +file(GLOB DATA_FILES "${PROJECT_SOURCE_DIR}/setup/data/tools/*") + if (NOT (PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)) # Copy data files from sources to the build directory message(STATUS "Copying data files") - file(GLOB DATA_FILES "${PROJECT_SOURCE_DIR}/setup/data/tools/*") file(COPY ${DATA_FILES} DESTINATION "${PROJECT_BINARY_DIR}") - file(GLOB DATA_FILES "${PROJECT_SOURCE_DIR}/docs/*") - file(COPY ${DATA_FILES} DESTINATION "${PROJECT_BINARY_DIR}/docs") endif () #----------------------------------------------------------------------- @@ -179,3 +221,53 @@ add_custom_target(game_packs if (DOWNLOAD_GAMEPACKS) add_custom_target(game_packs_all ALL DEPENDS game_packs) endif () + +#----------------------------------------------------------------------- +# Install +#----------------------------------------------------------------------- + +install( + FILES + "${PROJECT_BINARY_DIR}/RADIANT_MAJOR" + "${PROJECT_BINARY_DIR}/RADIANT_MINOR" + "${PROJECT_BINARY_DIR}/RADIANT_PATCH" + DESTINATION ${CMAKE_INSTALL_PREFIX} +) + +install( + DIRECTORY + ${PROJECT_SOURCE_DIR}/setup/data/tools/ + ${PROJECT_SOURCE_DIR}/docs + DESTINATION ${CMAKE_INSTALL_PREFIX} +) + +set(GAME_FILES + DarkPlacesPack + NexuizPack + OpenArenaPack + OsirionPack + Q3Pack + Quake2Pack + QuakePack + QuetooPack + TremulousPack + UFOAIPack + UnvanquishedPack + WarsowPack + XonoticPack + ) +unset(_tmp) +foreach (it ${GAME_FILES}) + set(it "${PROJECT_BINARY_DIR}/games/${it}") + list(APPEND _tmp "${it}/games") + file(GLOB GAME_DIR "${it}/*.game") + list(APPEND _tmp "${GAME_DIR}") +endforeach () +set(GAME_FILES ${_tmp}) + +install( + DIRECTORY + ${GAME_FILES} + DESTINATION ${CMAKE_INSTALL_PREFIX} + OPTIONAL +)