]> git.jsancho.org Git - lugaru.git/blobdiff - CMakeLists.txt
CMake: Default to RelWithDebInfo build type when not specified
[lugaru.git] / CMakeLists.txt
index 522b22f71f2bbe92ccf62c785b452d63baca94cf..837960aebc378b9370e087c380579bac3cd488ce 100644 (file)
@@ -3,27 +3,27 @@ project(lugaru)
 cmake_minimum_required(VERSION 3.5)
 cmake_policy(SET CMP0004 OLD)
 
-INCLUDE(FindPkgConfig)
+include(FindPkgConfig)
+include(GNUInstallDirs)
+
+
+### Helpers
 
 set(SRCDIR "${CMAKE_CURRENT_SOURCE_DIR}/Source")
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 --std=c++11")
-set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -Wno-parentheses -g -pg --std=c++11")
-set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Wno-parentheses -O2 -std=c++11")
+if(UNIX AND NOT APPLE)
+    set(LINUX TRUE)
+endif()
+
 
-if(NOT LUGARU_INSTALL_PREFIX)
-    if(WIN32)
-        set(LUGARU_INSTALL_PREFIX "C:/Lugaru" CACHE PATH
-        "LUGARU_INSTALL_PREFIX: Install path prefix, prepended onto install directories."
-        FORCE)
-    else(WIN32)
-        set(LUGARU_INSTALL_PREFIX "/usr/local/lugaru" CACHE PATH
-        "CMAKE_INSTALL_PREFIX: Install path prefix, prepended onto install directories."
-        FORCE)
-    endif(WIN32)
-endif(NOT LUGARU_INSTALL_PREFIX)
+### CMake config
 
-set(CMAKE_INSTALL_PREFIX "${LUGARU_INSTALL_PREFIX}" CACHE INTERNAL "Prefix prepended to install directories" FORCE)
+if(NOT CMAKE_BUILD_TYPE)
+    set(CMAKE_BUILD_TYPE RelWithDebInfo)
+endif(NOT CMAKE_BUILD_TYPE)
+message("CMake build type: ${CMAKE_BUILD_TYPE}")
+
+set(CMAKE_CXX_FLAGS "-Wall -Wno-parentheses -pedantic --std=c++11 ${CMAKE_CXX_FLAGS}")
 
 if(APPLE)
     set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "Build architectures for OSX")
@@ -33,11 +33,26 @@ if(APPLE)
         "The product will be built against the headers and libraries located inside the indicated SDK.")
 endif(APPLE)
 
+if(LINUX)
+    option(SYSTEM_INSTALL "Enable system-wide installation, with hardcoded data directory defined with CMAKE_INSTALL_DATADIR" OFF)
+endif(LINUX)
+
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
 
+
+### Sources
+
 set(LUGARU_SRCS
+    ${SRCDIR}/main.cpp
+    ${SRCDIR}/Animation/Animation.cpp
+    ${SRCDIR}/Animation/Joint.cpp
+    ${SRCDIR}/Animation/Muscle.cpp
+    ${SRCDIR}/Animation/Skeleton.cpp
     ${SRCDIR}/Frustum.cpp
     ${SRCDIR}/Account.cpp
+    ${SRCDIR}/ConsoleCmds.cpp
+    ${SRCDIR}/Dialog.cpp
+    ${SRCDIR}/Hotspot.cpp
     ${SRCDIR}/Game.cpp
     ${SRCDIR}/GameDraw.cpp
     ${SRCDIR}/GameInitDispose.cpp
@@ -51,28 +66,33 @@ set(LUGARU_SRCS
     ${SRCDIR}/Person.cpp
     ${SRCDIR}/private.c
     ${SRCDIR}/Quaternions.cpp
-    ${SRCDIR}/Skeleton.cpp
     ${SRCDIR}/Skybox.cpp
     ${SRCDIR}/Sprite.cpp
     ${SRCDIR}/Terrain.cpp
     ${SRCDIR}/Texture.cpp
     ${SRCDIR}/Text.cpp
-    ${SRCDIR}/TGALoader.cpp
+    ${SRCDIR}/ImageIO.cpp
     ${SRCDIR}/unpack.c
     ${SRCDIR}/Weapons.cpp
-    ${SRCDIR}/OpenGL_Windows.cpp
     ${SRCDIR}/openal_wrapper.cpp
     ${SRCDIR}/Input.cpp
     ${SRCDIR}/Settings.cpp
     ${SRCDIR}/Stereo.cpp
-    ${SRCDIR}/Animation.cpp
     ${SRCDIR}/Sounds.cpp
     ${SRCDIR}/Awards.cpp
+    ${SRCDIR}/Utils/Folders.cpp
 )
 
 set(LUGARU_H
+    ${SRCDIR}/Animation/Animation.h
+    ${SRCDIR}/Animation/Joint.h
+    ${SRCDIR}/Animation/Muscle.h
+    ${SRCDIR}/Animation/Skeleton.h
     ${SRCDIR}/Frustum.h
     ${SRCDIR}/Account.h
+    ${SRCDIR}/ConsoleCmds.h
+    ${SRCDIR}/Dialog.h
+    ${SRCDIR}/Hotspot.h
     ${SRCDIR}/Game.h
     ${SRCDIR}/Lights.h
     ${SRCDIR}/Menu.h
@@ -82,25 +102,23 @@ set(LUGARU_H
     ${SRCDIR}/PhysicsMath.h
     ${SRCDIR}/Quaternions.h
     ${SRCDIR}/Random.h
-    ${SRCDIR}/Skeleton.h
     ${SRCDIR}/Skybox.h
     ${SRCDIR}/Sprite.h
-    ${SRCDIR}/TGALoader.h
+    ${SRCDIR}/ImageIO.h
     ${SRCDIR}/Terrain.h
     ${SRCDIR}/Texture.h
     ${SRCDIR}/Text.h
     ${SRCDIR}/Weapons.h
     ${SRCDIR}/Input.h
-    ${SRCDIR}/alstubs.h
     ${SRCDIR}/binio.h
     ${SRCDIR}/openal_wrapper.h
+    ${SRCDIR}/optionparser.h
     ${SRCDIR}/gamegl.h
-    ${SRCDIR}/glstubs.h
     ${SRCDIR}/private.h
     ${SRCDIR}/Settings.h
     ${SRCDIR}/Stereo.h
-    ${SRCDIR}/Animation.h
     ${SRCDIR}/Sounds.h
+    ${SRCDIR}/Utils/Folders.h
 )
 
 if(UNIX)
@@ -115,15 +133,15 @@ if(UNIX)
 endif(UNIX)
 
 if(WIN32)
-    ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj
-                        COMMAND ${CMAKE_RC_COMPILER}
-                        -I${SRCDIR}/win-res
-                        -o ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj
-                        -i${SRCDIR}/win-res/Lugaru.rc
-                        DEPENDS ${SRCDIR}/win-res/Lugaru.rc
+    add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj
+                       COMMAND ${CMAKE_RC_COMPILER}
+                       -I${SRCDIR}/win-res
+                       -o ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj
+                       -i${SRCDIR}/win-res/Lugaru.rc
+                       DEPENDS ${SRCDIR}/win-res/Lugaru.rc
     )
 
-    # !!! FIXME: get rid of this.
+    # FIXME: get rid of this.
     set(LUGARU_SRCS
         ${LUGARU_SRCS}
         ${SRCDIR}/WinDefs.cpp)
@@ -134,21 +152,22 @@ if(WIN32)
         ${SRCDIR}/win-res/resource.h)
 endif(WIN32)
 
-if (APPLE)
+if(APPLE)
     set(PLATFORM_LIBS "-framework Carbon -framework Cocoa -framework OpenGL -framework OpenAL")
-endif (APPLE)
+endif(APPLE)
+
 
-# Deal with dependencies...
+### Dependencies
 
 find_package(OpenGL REQUIRED)
 
 # Windows is funky about OpenAL detection
-if (WIN32)
+if(WIN32)
     pkg_check_modules(OPENAL openal REQUIRED)
     set(OPENAL_LIBRARY ${OPENAL_LIBRARIES})
-else (WIN32)
+else(WIN32)
     find_package(OpenAL REQUIRED)
-endif()
+endif(WIN32)
 
 find_package(sdl2 REQUIRED)
 find_package(PNG REQUIRED)
@@ -171,6 +190,8 @@ include_directories(
 set(LUGARU_LIBS ${OPENAL_LIBRARY} ${PNG_LIBRARY} ${JPEG_LIBRARY} ${ZLIB_LIBRARIES} ${SDL2_LIBRARIES} ${OPENGL_LIBRARIES} ${VORBISFILE_LIBRARY} ${OGG_LIBRARY} ${PLATFORM_LIBS})
 
 
+### Definitions
+
 if(WIN32)
     add_executable(lugaru ${LUGARU_SRCS} ${LUGARU_H} lugaru_resource.obj)
 else(WIN32)
@@ -180,24 +201,41 @@ endif(WIN32)
 target_link_libraries(lugaru ${LUGARU_LIBS})
 
 if(WIN32)
-    add_definitions(-DUSE_OPENAL=1 -DUSE_SDL=1 -DBinIO_STDINT_HEADER=<stdint.h>)
+    add_definitions(-DBinIO_STDINT_HEADER=<stdint.h>)
     if(MINGW)
+        # An alternative would be to use _WIN32 consistently instead of WIN32
         add_definitions(-DWIN32)
     endif(MINGW)
 else(WIN32)
-    add_definitions(-DPLATFORM_LINUX=1 -DPLATFORM_UNIX=1 -DUSE_OPENAL=1 -DUSE_SDL=1 -DBinIO_STDINT_HEADER=<stdint.h>)
+    add_definitions(-DPLATFORM_LINUX=1 -DPLATFORM_UNIX=1 -DBinIO_STDINT_HEADER=<stdint.h>)
 endif(WIN32)
 
-# Install target
+
+### Installation
+
+if(NOT CMAKE_INSTALL_PREFIX AND WIN32)
+    set(CMAKE_INSTALL_PREFIX "C:/Lugaru")
+endif(NOT CMAKE_INSTALL_PREFIX AND WIN32)
+
+# OS-specific installation paths
+
+set(LUGARU_DOCDIR ${CMAKE_INSTALL_PREFIX})
+if(LINUX)
+endif(LINUX)
+
 if(APPLE)
-    set(APPS_ROOT "${CMAKE_INSTALL_PREFIX}/Lugaru.app")
-    set(APPS_BIN "${APPS_ROOT}/Contents/MacOS")
-    set(APPS_DATA "${APPS_ROOT}/Contents/Resources")
+    set(LUGARU_APP_ROOT ${CMAKE_INSTALL_PREFIX}/Lugaru.app)
+    set(LUGARU_BINDIR ${LUGARU_APP_ROOT}/Contents/MacOS)
+    set(LUGARU_RESDIR ${LUGARU_APP_ROOT}/Resources)
 endif(APPLE)
 
+# Actual installation instructions
+
 if(WIN32)
     install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/lugaru.exe DESTINATION ${CMAKE_INSTALL_PREFIX})
+    install(DIRECTORY ${CMAKE_SOURCE_DIR}/Data DESTINATION ${CMAKE_INSTALL_PREFIX})
     if(MINGW)
+        # Based off Mageia/Fedora MinGW toolchain, might not work on other distros or Windows
         set(LIBGCC_S libgcc_s_sjlj-1.dll)
         if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") # MinGW64
             set(LIBGCC_S libgcc_s_seh-1.dll)
@@ -217,23 +255,38 @@ if(WIN32)
                       ${DLL_ROOT}/zlib1.dll
                 DESTINATION ${CMAKE_INSTALL_PREFIX})
     endif(MINGW)
-else(WIN32)
-    if(APPLE)
-        set(CMAKE_INSTALL_PREFIX "${APPS_BIN}")
-        install(FILES ${SRCDIR}/mac-res/lugaru.icns DESTINATION ${APPS_DATA})
-        install(FILES ${SRCDIR}/mac-res/Info.plist DESTINATION ${APPS_ROOT}/Contents)
-    endif(APPLE)
-    install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/lugaru DESTINATION ${CMAKE_INSTALL_PREFIX})
 endif(WIN32)
 
-if(NOT APPLE)
-    install(DIRECTORY ${CMAKE_SOURCE_DIR}/Data DESTINATION ${CMAKE_INSTALL_PREFIX})
-    install(FILES ${CMAKE_SOURCE_DIR}/README.md
-                  ${CMAKE_SOURCE_DIR}/COPYING.txt
-                  ${CMAKE_SOURCE_DIR}/CONTENT-LICENSE.txt
-            DESTINATION ${CMAKE_INSTALL_PREFIX})
-endif(NOT APPLE)
+if(LINUX)
+    if(SYSTEM_INSTALL)
+        add_definitions(-DDATA_DIR="${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}")
+        set(LUGARU_DOCDIR ${CMAKE_INSTALL_DOCDIR})
+        install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/lugaru DESTINATION ${CMAKE_INSTALL_BINDIR})
+        # Trailing '/' is significant, it installs and _renames_ Data/ as the destination folder
+        install(DIRECTORY ${CMAKE_SOURCE_DIR}/Data/ DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME})
+        install(FILES ${CMAKE_SOURCE_DIR}/Dist/lugaru.appdata.xml DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/appdata)
+        install(FILES ${CMAKE_SOURCE_DIR}/Dist/lugaru.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
+        install(FILES ${CMAKE_SOURCE_DIR}/Dist/lugaru.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/128x128/apps)
+        install(FILES ${CMAKE_SOURCE_DIR}/Dist/lugaru.6 DESTINATION ${CMAKE_INSTALL_MANDIR}/man6)
+    else(SYSTEM_INSTALL)
+        message("You are building Lugaru without having enabled the SYSTEM_INSTALL option. It will default to looking for the data in the 'Data' directory next to the binary.")
+        install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/lugaru DESTINATION ${CMAKE_INSTALL_PREFIX})
+        install(DIRECTORY ${CMAKE_SOURCE_DIR}/Data DESTINATION ${CMAKE_INSTALL_PREFIX})
+    endif(SYSTEM_INSTALL)
+endif(LINUX)
 
 if(APPLE)
-    install(DIRECTORY ${CMAKE_SOURCE_DIR}/Data DESTINATION ${APPS_ROOT})
+    install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/lugaru DESTINATION ${LUGARU_BINDIR})
+    install(DIRECTORY ${CMAKE_SOURCE_DIR}/Data DESTINATION ${LUGARU_APP_ROOT})
+    install(FILES ${CMAKE_SOURCE_DIR}/Dist/OSX/lugaru.icns DESTINATION ${LUGARU_RESDIR})
+    install(FILES ${CMAKE_SOURCE_DIR}/Dist/OSX/Info.plist DESTINATION ${LUGARU_APP_ROOT}/Contents)
 endif(APPLE)
+
+# Documentation
+
+install(FILES ${CMAKE_SOURCE_DIR}/AUTHORS
+              ${CMAKE_SOURCE_DIR}/CONTENT-LICENSE.txt
+              ${CMAKE_SOURCE_DIR}/COPYING.txt
+              ${CMAKE_SOURCE_DIR}/DEBUG-OPTIONS.txt
+              ${CMAKE_SOURCE_DIR}/README.md
+        DESTINATION ${LUGARU_DOCDIR})