From 4c0914fff13dc8e8a1ac232d3ff5c808d224d4f5 Mon Sep 17 00:00:00 2001 From: Jammyjamjamman Date: Sun, 7 Apr 2019 19:45:21 +0100 Subject: [PATCH] Make snapcraft build work. --- CMakeLists.txt | 90 ++++++++++--------- source/game/CMakeLists.txt | 23 ++--- source/game/global/config.cpp | 9 ++ source/shared_lib/sources/util/properties.cpp | 7 +- 4 files changed, 76 insertions(+), 53 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0171ef435..f042ea963 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ ENDIF() SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS None Debug Release RelWithDebInfo MinSizeRel) IF(NOT CMAKE_VERSION VERSION_LESS "3.1") - cmake_policy(SET CMP0054 NEW) + cmake_policy(SET CMP0054 NEW) ENDIF() # add additional CMake modules @@ -28,9 +28,9 @@ ENDIF() # using CC=`which egcc` CXX=`which eg++` IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - SET(CMAKE_COMPILER_IS_GNUCXX "YES") -# ADD_DEFINITIONS("-Qunused-arguments -Wno-switch") - ADD_DEFINITIONS("-Wno-switch") + SET(CMAKE_COMPILER_IS_GNUCXX "YES") +# ADD_DEFINITIONS("-Qunused-arguments -Wno-switch") + ADD_DEFINITIONS("-Wno-switch") ENDIF() OPTION(BUILD_GLEST "Build Glest" ON) @@ -60,15 +60,15 @@ ENDIF() IF(CMAKE_COMPILER_IS_GNUCXX OR MINGW) IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - MESSAGE(STATUS "Detected CLANG Compiler...") + MESSAGE(STATUS "Detected CLANG Compiler...") ELSEIF(CMAKE_COMPILER_IS_GNUCXX) MESSAGE(STATUS "Detected GNUC Compiler...") ELSEIF(MINGW) MESSAGE(STATUS "Detected MINGW Compiler...") ENDIF() - # Common generic GNU type compiler options that work with all generic GCC compatible compilers - ADD_DEFINITIONS("-Wuninitialized -Wsign-compare -Wunused-function -Wunused-variable -Wreturn-type -fno-strict-aliasing") + # Common generic GNU type compiler options that work with all generic GCC compatible compilers + ADD_DEFINITIONS("-Wuninitialized -Wsign-compare -Wunused-function -Wunused-variable -Wreturn-type -fno-strict-aliasing") # For gcc warning options see: http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html IF(NOT MINGW) @@ -78,32 +78,32 @@ IF(CMAKE_COMPILER_IS_GNUCXX OR MINGW) ELSE() # ADD_DEFINITIONS("-Wreturn-type -fno-strict-aliasing -frounding-math -fsignaling-nans -mfpmath=sse -msse -DUNICODE") # ADD_DEFINITIONS("-Wuninitialized -Wsign-compare -Wunused-function -Wunused-variable -Wreturn-type -fno-strict-aliasing -frounding-math -fsignaling-nans -DUNICODE") - ADD_DEFINITIONS("-DUNICODE") + ADD_DEFINITIONS("-DUNICODE") ENDIF() - # CLang specific Compiler Options - IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + # CLang specific Compiler Options + IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - # GCC specific Compiler Options - ELSE() - ADD_DEFINITIONS("-frounding-math -fsignaling-nans") + # GCC specific Compiler Options + ELSE() + ADD_DEFINITIONS("-frounding-math -fsignaling-nans") - IF((NOT CMAKE_GENERATOR STREQUAL Xcode) AND (NOT MINGW)) - # Debug compiler flags - SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -no-pie -fno-pie") + IF((NOT CMAKE_GENERATOR STREQUAL Xcode) AND (NOT MINGW)) + # Debug compiler flags + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -no-pie -fno-pie") - # Release compiler flags - SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -no-pie -fno-pie") + # Release compiler flags + SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -no-pie -fno-pie") - # Release with debug info compiler flags - SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -no-pie -fno-pie") + # Release with debug info compiler flags + SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -no-pie -fno-pie") -# IF(NOT MINGW) -# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -rdynamic") -# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -rdynamic") -# ENDIF() + # IF(NOT MINGW) + # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -rdynamic") + # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -rdynamic") + # ENDIF() + ENDIF() ENDIF() - ENDIF() IF(WANT_USE_STREFLOP) OPTION(FORCE_STREFLOP_SOFTWRAPPER "Set the streflop library to be forced to use the software emulator" OFF) @@ -142,25 +142,25 @@ IF(CMAKE_COMPILER_IS_GNUCXX OR MINGW) MESSAGE(STATUS "libstreflop disabled") ENDIF() - include(CheckCXXSourceRuns) + include(CheckCXXSourceRuns) - check_cxx_source_runs(" - #include - #include - int main() - { + check_cxx_source_runs(" + #include + #include + int main() + { const size_t max_depth = 6; void *stack_addrs[max_depth]; size_t stack_depth = backtrace(stack_addrs, max_depth); - }" - HAS_GCC_BACKTRACE) + }" + HAS_GCC_BACKTRACE) - IF(HAS_GCC_BACKTRACE) - message(STATUS "Found GCC backtrace lib, will support backtraces") - ADD_DEFINITIONS(-DHAS_GCC_BACKTRACE) - ELSE() - message(STATUS "**WARNING DID NOT Find GCC backtrace lib") - ENDIF() + IF(HAS_GCC_BACKTRACE) + message(STATUS "Found GCC backtrace lib, will support backtraces") + ADD_DEFINITIONS(-DHAS_GCC_BACKTRACE) + ELSE() + message(STATUS "**WARNING DID NOT Find GCC backtrace lib") + ENDIF() # Debug compiler flags SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g3") @@ -188,6 +188,12 @@ IF(CMAKE_COMPILER_IS_GNUCXX OR MINGW) SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} -pthread") ENDIF() + # Snapcraft build definition. + IF(DEFINED ENV{SNAPCRAFT_STAGE}) + MESSAGE(STATUS "Using snapcraft path...") + ADD_DEFINITIONS("-DSNAPCRAFT") + ENDIF() + IF(NOT INSTALL_DIR_BIN) SET(INSTALL_DIR_BIN "${CMAKE_INSTALL_PREFIX}/games/" CACHE PATH "The installation path for binaries") ENDIF() @@ -267,21 +273,21 @@ ENDIF() # where it is, and whether or not it has actually been installed # IF(EXISTS "${PROJECT_SOURCE_DIR}/../glest-data/CMakeLists.txt") - MESSAGE(STATUS "**Found game data.") + MESSAGE(STATUS "**Found game data.") # using CMAKE_BINARY_DIR as last parameter will output cmake files into the same # directory as the source build. ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/../glest-data ${CMAKE_BINARY_DIR}/data) ENDIF() IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - MESSAGE(WARNING ">> CLANG is NOT currently compatible as it does not support the following essential GCC compiler settings: -frounding-math -fsignaling-nans") + MESSAGE(WARNING ">> CLANG is NOT currently compatible as it does not support the following essential GCC compiler settings: -frounding-math -fsignaling-nans") ENDIF() # FIXME: This should output all defines. For example, DATADIR is defined in # the game source and sharedlib cmake file as well get_directory_property( DirDefs DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS ) foreach( d ${DirDefs} ) - message( STATUS "=====> Found Define: " ${d} ) + message( STATUS "=====> Found Define: " ${d} ) endforeach() MARK_AS_ADVANCED(${SDL_VERSION_NAME}MAIN_LIBRARY) diff --git a/source/game/CMakeLists.txt b/source/game/CMakeLists.txt index d177ac16b..3850bfca9 100644 --- a/source/game/CMakeLists.txt +++ b/source/game/CMakeLists.txt @@ -10,6 +10,9 @@ IF(BUILD_GLEST) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=gnu++11") add_definitions("-DDATADIR=${INSTALL_DIR_DATA}") + + # This is an environment var that pops up when building with snapcraft. + # Use this to activate snapcraft path... FIND_PACKAGE(${SDL_VERSION_NAME} REQUIRED) INCLUDE_DIRECTORIES(${${SDL_VERSION_NAME}_INCLUDE_DIR}) @@ -23,13 +26,13 @@ IF(BUILD_GLEST) SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${OPENGL_LIBRARY}) ENDIF() - IF(WANT_USE_XercesC) - FIND_PACKAGE(XercesC REQUIRED) - INCLUDE_DIRECTORIES(${XERCESC_INCLUDE}) - IF(UNIX) - SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${XERCESC_LIBRARY}) - ENDIF() - ENDIF() + IF(WANT_USE_XercesC) + FIND_PACKAGE(XercesC REQUIRED) + INCLUDE_DIRECTORIES(${XERCESC_INCLUDE}) + IF(UNIX) + SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${XERCESC_LIBRARY}) + ENDIF() + ENDIF() FIND_PACKAGE(OpenAL REQUIRED) INCLUDE_DIRECTORIES(${OPENAL_INCLUDE_DIR}) @@ -69,9 +72,9 @@ IF(BUILD_GLEST) set(OPENSSL_ROOT_DIR /usr/local/opt/openssl) include(FindOpenSSL) IF(OPENSSL_FOUND) - INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) + INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) ELSE() - MESSAGE(STATUS "**NOTE: OpenSSL is usually not required.") + MESSAGE(STATUS "**NOTE: OpenSSL is usually not required.") ENDIF() ENDIF() @@ -289,7 +292,7 @@ IF(BUILD_GLEST) INSTALL(FILES "${PROJECT_SOURCE_DIR}/mk/shared/glest.ini" DESTINATION ${INSTALL_DIR_INI}) - ELSEIF(UNIX AND NOT APPLE AND FLATPAK_INSTALL) + ELSEIF(UNIX AND NOT APPLE AND FLATPAK_INSTALL) INSTALL(FILES "${PROJECT_SOURCE_DIR}/mk/flatpak/glest.ini" DESTINATION ${INSTALL_DIR_INI}) diff --git a/source/game/global/config.cpp b/source/game/global/config.cpp index 00c5314f6..04c351352 100644 --- a/source/game/global/config.cpp +++ b/source/game/global/config.cpp @@ -233,10 +233,12 @@ namespace Game { foundPath = tryCustomPath(cfgType, fileName, custom_path); } +#ifndef SNAPCRAFT if (foundPath == false) { currentpath = extractDirectoryPathFromFile(Properties::getApplicationPath()); foundPath = tryCustomPath(cfgType, fileName, currentpath); } +#endif #ifdef _WIN32 if (foundPath == false) { @@ -263,6 +265,13 @@ namespace Game { } #endif +#ifdef SNAPCRAFT + if (foundPath == false) { + foundPath = tryCustomPath(cfgType, fileName, std::getenv("SNAP") + + endPathWithSlash(formatPath(TOSTRING(DATADIR)))); + } +#endif + #ifdef DATADIR if (foundPath == false) { foundPath = tryCustomPath(cfgType, fileName, endPathWithSlash(formatPath(TOSTRING(DATADIR)))); diff --git a/source/shared_lib/sources/util/properties.cpp b/source/shared_lib/sources/util/properties.cpp index e53f03e5e..bad34c5a2 100644 --- a/source/shared_lib/sources/util/properties.cpp +++ b/source/shared_lib/sources/util/properties.cpp @@ -53,8 +53,13 @@ namespace Shared { namespace Util { string Properties::applicationPath = ""; +#ifdef SNAPCRAFT + string Properties::applicationDataPath = std::getenv("SNAP") + formatPath(TOSTRING(DATADIR)); +#elif FLATPAK + string Properties::applicationDataPath = formatPath(TOSTRING(DATADIR)); +#else string Properties::applicationDataPath = ""; - +#endif string Properties::techtreePath = ""; string Properties::scenarioPath = ""; string Properties::tutorialPath = "";