-cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
project(NetRadiant C CXX)
+if (EXISTS "${PROJECT_SOURCE_DIR}/libs/crunch/inc/crn_decomp.h")
+ set(DEFAULT_BUILD_CRUNCH ON CACHE INTERNAL "...")
+else ()
+ set(DEFAULT_BUILD_CRUNCH OFF CACHE INTERNAL "...")
+endif ()
+
+if (EXISTS "${PROJECT_SOURCE_DIR}/tools/unvanquished/daemonmap/tools/quake3/q3map2/main.c")
+ set(DEFAULT_BUILD_DAEMONMAP ON CACHE INTERNAL "...")
+else ()
+ set(DEFAULT_BUILD_DAEMONMAP OFF CACHE INTERNAL "...")
+endif ()
+
option(BUILD_RADIANT "Build the GUI" ON)
option(BUILD_TOOLS "Build the tools" ON)
-option(BUILD_CRUNCH "Build Crunch image support" OFF)
+option(BUILD_CRUNCH "Build Crunch image support" ${DEFAULT_BUILD_CRUNCH})
+option(BUILD_DAEMONMAP "Build daemonmap navigation mesh generator" ${DEFAULT_BUILD_DAEMONMAP})
option(DOWNLOAD_GAMEPACKS "Download game packs" ON)
option(USE_WERROR "Build with -Werror -pedantic-errors" OFF)
option(FHS_INSTALL "Install according to Filesystem Hierarchy Standard" OFF)
set(RADIANT_BIN_DIR ${CMAKE_INSTALL_PREFIX} CACHE INTERNAL "...")
set(RADIANT_DATA_DIR ${CMAKE_INSTALL_PREFIX} CACHE INTERNAL "...")
-if (FHS_INSTALL)
+if (FHS_INSTALL AND NOT BUNDLE_LIBRARIES)
set(RADIANT_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib/${RADIANT_BASENAME})
set(RADIANT_BIN_DIR ${CMAKE_INSTALL_PREFIX}/bin)
set(RADIANT_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/${RADIANT_BASENAME})
endif ()
+set(GAMEPACKS_DOWNLOAD_DIR ${PROJECT_BINARY_DIR}/download CACHE PATH "Where to store downloaded game packs")
+
#-----------------------------------------------------------------------
# Version
#-----------------------------------------------------------------------
if (BUILD_RADIANT)
set(GTK_TARGET 2 CACHE STRING "GTK target")
add_definitions(-DGTK_TARGET=${GTK_TARGET})
+
+ if (WIN32)
+ add_definitions(-DWORKAROUND_WINDOWS_FLOATING_WINDOW=1)
+
+ if (GTK_TARGET EQUAL 2)
+ add_definitions(-DWORKAROUND_WINDOWS_GTK2_GLWIDGET=1)
+ endif ()
+ endif ()
+endif ()
+
+option(BUILTIN_GTKGLEXT "Builtin GtkGLExt" OFF)
+if (BUILTIN_GTKGLEXT)
+ include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)
+
+ execute_process(COMMAND pkg-config --libs gdk-2.0 gtk+-2.0 glib-2.0 gl
+ OUTPUT_VARIABLE GTKGLEXT_LDFLAGS
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ set(GTKGLEXT_LDFLAGS "-lm ${GTKGLEXT_LDFLAGS}")
+
+ ExternalProject_Add(gtkglext
+ GIT_REPOSITORY https://gitlab.gnome.org/illwieckz/gtkglext.git
+ GIT_TAG fixes
+ BUILD_IN_SOURCE ON
+ CONFIGURE_COMMAND NOCONFIGURE=1 ./autogen.sh
+ CONFIGURE_COMMAND && ./configure --prefix "${CMAKE_BINARY_DIR}/external"
+ BUILD_COMMAND $(MAKE) LDFLAGS=${GTKGLEXT_LDFLAGS}
+ INSTALL_COMMAND $(MAKE) install
+ )
endif ()
#-----------------------------------------------------------------------
endif ()
if (BUILD_BINARIES)
+ add_custom_target(binaries ALL)
+
if(APPLE OR ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
link_directories(
/usr/local/lib
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})
+ if (WIN32 OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
+ set(BUNDLING_SUPPORTED ON)
+ endif()
- macro (copy_dlls target)
- if (BUNDLE_LIBRARIES AND WIN32)
- add_custom_command(TARGET ${target} POST_BUILD
- COMMAND bash
- ARGS -c "ldd '$<TARGET_FILE:${target}>' | egrep -i '\\.dll ' | grep -iv '/c/Windows' | awk '{ print $1 }' | while read dll; do dllbasename=\"$(which \"$dll\")\"; [ -f \"${PROJECT_BINARY_DIR}/$dllbasename\" ] || cp --preserve=timestamps \"$dllbasename\" '${PROJECT_BINARY_DIR}'; done"
- VERBATIM
- )
+ if (BUNDLING_SUPPORTED)
+ if(WIN32 AND NOT CMAKE_CROSSCOMPILING)
+ set(BUNDLE_LIBRARIES_DEFAULT ON)
+ else ()
+ set(BUNDLE_LIBRARIES_DEFAULT OFF)
endif ()
- endmacro ()
- macro (bundle_stuff target)
- if (BUNDLE_LIBRARIES AND WIN32)
- add_custom_command(TARGET ${target} POST_BUILD
- COMMAND bash
- ARGS -c "mkdir -p '${PROJECT_BINARY_DIR}/share/themes'; mkdir -p '${PROJECT_BINARY_DIR}/lib'; mingw=\"$(echo '${CMAKE_C_COMPILER}' | sed -e 's|/bin/.*||')\"; [ -d '${PROJECT_BINARY_DIR}/share/themes/MS-Windows' ] || cp -r --preserve=timestamps \"$mingw/share/themes/MS-Windows\" '${PROJECT_BINARY_DIR}/share/themes/'; [ -d '${PROJECT_BINARY_DIR}/lib/gdk-pixbuf-2.0' ] || cp -r --preserve=timestamps \"$mingw/lib/gdk-pixbuf-2.0\" '${PROJECT_BINARY_DIR}/lib/'; [ -d '${PROJECT_BINARY_DIR}/lib/gtk-2.0' ] || cp -r --preserve=timestamps \"$mingw/lib/gtk-2.0\" '${PROJECT_BINARY_DIR}/lib/'"
- VERBATIM
- )
+ option(BUNDLE_LIBRARIES "Bundle libraries" ${BUNDLE_LIBRARIES_DEFAULT})
+ endif ()
- file(GLOB DLL_FILES ${PROJECT_BINARY_DIR}/*.dll)
+ if (BUNDLE_LIBRARIES AND BUNDLING_SUPPORTED)
+ add_subdirectory(bundle)
- install(FILES
- ${DLL_FILES}
- DESTINATION ${CMAKE_INSTALL_PREFIX}
- )
+ set(FHS_INSTALL OFF CACHE PATH "Disabled because of BUNDLE_LIBRARIES" FORCE)
+ endif ()
- install(DIRECTORY
- ${PROJECT_BINARY_DIR}/lib
- ${PROJECT_BINARY_DIR}/share
- DESTINATION ${CMAKE_INSTALL_PREFIX}
- )
+ macro (copy_dlls target)
+ if (BUNDLE_LIBRARIES AND BUNDLING_SUPPORTED)
+ add_custom_command(TARGET ${target} POST_BUILD
+ COMMAND "${PROJECT_SOURCE_DIR}/library-bundler"
+ "register" "${PROJECT_BINARY_DIR}" "$<TARGET_FILE:${target}>"
+ VERBATIM
+ )
+ add_dependencies(bundle ${target})
endif ()
endmacro ()
endif ()
#-----------------------------------------------------------------------
if (BUILD_BINARIES)
- if (CMAKE_EXECUTABLE_SUFFIX)
- string(REGEX REPLACE "^[.]" "" RADIANT_EXECUTABLE ${CMAKE_EXECUTABLE_SUFFIX})
- endif ()
-
macro (radiant_tool name)
- add_executable(${name} ${ARGN})
+ add_dependencies(binaries ${name})
+
+ if (WIN32)
+ add_executable(${name} ${ARGN} ${PROJECT_SOURCE_DIR}/include/lib.rc)
+ else ()
+ add_executable(${name} ${ARGN})
+ endif()
copy_dlls(${name})
if (BUILD_RADIANT)
add_subdirectory(radiant)
- set_target_properties(${RADIANT_BASENAME} PROPERTIES
- COMPILE_DEFINITIONS RADIANT_EXECUTABLE="${RADIANT_EXECUTABLE}"
- )
endif ()
endif ()
set(GAMEPACKS_NAME_LIST none CACHE STRING "Download game packs by name")
if (DOWNLOAD_GAMEPACKS)
- add_custom_target(game_packs ALL
- COMMAND "${PROJECT_SOURCE_DIR}/gamepack-manager" --license ${GAMEPACKS_LICENSE_LIST} --name ${GAMEPACKS_NAME_LIST} --download-dir "${PROJECT_BINARY_DIR}/download" --install-dir "${PROJECT_BINARY_DIR}" --download --install
+ add_custom_target(gamepacks ALL
+ COMMAND "${PROJECT_SOURCE_DIR}/gamepack-manager" --license ${GAMEPACKS_LICENSE_LIST} --name ${GAMEPACKS_NAME_LIST} --download-dir "${GAMEPACKS_DOWNLOAD_DIR}" --install-dir "${PROJECT_BINARY_DIR}/gamepacks" --download --install
COMMENT "Downloading game packs"
)
endif ()
docs
DESTINATION ${RADIANT_DATA_DIR}
)
+
+ install(FILES
+ setup/data/tools/global.xlink
+ DESTINATION ${RADIANT_DATA_DIR}
+ )
endif ()
if (DOWNLOAD_GAMEPACKS)
set(GAME_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
endif ()
- file(GLOB GAME_DIRS ${PROJECT_BINARY_DIR}/*.game)
-
install(DIRECTORY
- ${PROJECT_BINARY_DIR}/games
- ${GAME_DIRS}
+ ${PROJECT_BINARY_DIR}/gamepacks
DESTINATION ${RADIANT_DATA_DIR}
)
endif ()