Project (meandmyshadow) CMake_Minimum_Required (VERSION 3.1) Set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") #Path options Set (BINDIR "bin" CACHE STRING "Where to install binaries") Set (DATAROOTDIR "${CMAKE_INSTALL_PREFIX}/share" CACHE STRING "Sets the root of data directories to a non-default location") Set (ICONDIR "${DATAROOTDIR}/icons" CACHE STRING "Sets the icon directory for desktop entry to a non-default location.") Set (DESKTOPDIR "${DATAROOTDIR}/applications" CACHE STRING "Sets the desktop file directory for desktop entry to a non-default location.") #Options Option (DEBUG_MODE "Compile the game with debug mode enabled" OFF) Option (DISABLED_DEBUG_STUFF "Enable this you'll see a lot of annoying script debug messages which will lag the game." OFF) #Find the required libraries. Find_Package (SDL2 REQUIRED) Find_Package (SDL2_image REQUIRED) Find_Package (SDL2_ttf REQUIRED) Find_Package (SDL2_mixer REQUIRED) Find_Package (CURL REQUIRED) Find_Package (LibArchive REQUIRED) Find_Package (Lua REQUIRED) if (NOT SDL2_FOUND) message (FATAL_ERROR "SDL2 library could not be found!") endif (NOT SDL2_FOUND) if (NOT SDL2_IMAGE_FOUND) message (FATAL_ERROR "SDL2_image library could not be found!") endif (NOT SDL2_IMAGE_FOUND) if (NOT SDL2_TTF_FOUND) message (FATAL_ERROR "SDL2_ttf library could not be found!") endif (NOT SDL2_TTF_FOUND) if (NOT SDL2_MIXER_FOUND) message (FATAL_ERROR "SDL2_mixer library could not be found!") endif (NOT SDL2_MIXER_FOUND) if (NOT CURL_FOUND) message(FATAL_ERROR "CURL library could not be found!") endif (NOT CURL_FOUND) if (NOT LibArchive_FOUND) message (FATAL_ERROR "LibArchive library could not be found!") endif (NOT LibArchive_FOUND) if (NOT LUA_FOUND) message (FATAL_ERROR "Lua library could not be found!") endif (NOT LUA_FOUND) if (LUA_VERSION_STRING VERSION_LESS "5.2") message (FATAL_ERROR "Lua version too old ${LUA_VERSION_STRING}, expected at least 5.2!") endif () # check version from Globals.h file(READ "${PROJECT_SOURCE_DIR}/src/Globals.h" GLOBALS_H) string(REGEX MATCH "version[ ]*=[ ]*\"[^\"]*\"" MNMS_VERSION_STR ${GLOBALS_H}) string(REGEX REPLACE "^[^\"]*\"([^\"]*)\".*$" "\\1" MNMS_VERSION_STR ${MNMS_VERSION_STR}) message(STATUS "The version read from Globals.h is: ${MNMS_VERSION_STR}") string(REGEX REPLACE "^V([0-9.]+).*$" "\\1" MNMS_VERSION_NUM ${MNMS_VERSION_STR}) set(MNMS_VERSION_NUM "${MNMS_VERSION_NUM}.0.0.0.0") string(REGEX REPLACE "^([0-9]+)[.]([0-9]+)[.]([0-9]+)[.]([0-9]+).*$" "\\1,\\2,\\3,\\4" MNMS_VERSION_NUM ${MNMS_VERSION_NUM}) message(STATUS "which is: ${MNMS_VERSION_NUM}") # check version from git find_package(Git) if(GIT_FOUND) exec_program(${GIT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} ARGS "describe" OUTPUT_VARIABLE MNMS_GIT_VERSION RETURN_VALUE GIT_RETURN_VALUE) if(GIT_RETURN_VALUE STREQUAL "0") set(MNMS_VERSION_STR "${MNMS_VERSION_STR} (${MNMS_GIT_VERSION})") message(STATUS "The version read from git is: ${MNMS_GIT_VERSION}") else() # possibly there are no any tags exec_program(${GIT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} ARGS "rev-parse --short HEAD" OUTPUT_VARIABLE MNMS_GIT_VERSION RETURN_VALUE GIT_RETURN_VALUE) if(GIT_RETURN_VALUE STREQUAL "0") set(MNMS_VERSION_STR "${MNMS_VERSION_STR} (git ${MNMS_GIT_VERSION})") message(STATUS "The version read from git is: ${MNMS_GIT_VERSION}") endif() endif() endif() # show version information on Windows Set(WIN32_RESOURCES ) if(WIN32) Configure_File ( "${PROJECT_SOURCE_DIR}/icons/windows-icon/res.rc.in" "${PROJECT_BINARY_DIR}/res.rc" ) Set(WIN32_RESOURCES ${PROJECT_BINARY_DIR}/res.rc) Include_Directories(${PROJECT_SOURCE_DIR}/icons/windows-icon/) SOURCE_GROUP("Source Files\\Resources" FILES ${WIN32_RESOURCES}) endif() #Parse the configure file. Configure_File ( "${PROJECT_SOURCE_DIR}/src/config.h.in" "${PROJECT_BINARY_DIR}/config.h" ) #Add some missing libraries to Windows. if(WIN32) include_directories(${PROJECT_SOURCE_DIR}/src/libs/dirent) endif(WIN32) #Disable some annoying warnings. if(MSVC) # warning C4996: '***': This function or variable may be unsafe add_definitions(/wd4996) else() # Assume it's gcc or clang # warning: '***' overrides a member function but is not marked 'override' add_definitions(-Wno-inconsistent-missing-override) endif() #Define some debug stuff. if(DEBUG_MODE) add_definitions(-DDEBUG) add_definitions(-D_DEBUG) endif(DEBUG_MODE) if(DISABLED_DEBUG_STUFF) add_definitions(-DDISABLED_DEBUG_STUFF) endif(DISABLED_DEBUG_STUFF) #Add the include directories of the (found) libraries. Include_Directories( ${PROJECT_BINARY_DIR} ${SDL2_INCLUDE_DIR} ${SDL2_IMAGE_INCLUDE_DIR} ${SDL2_TTF_INCLUDE_DIR} ${SDL2_MIXER_INCLUDE_DIR} ${CURL_INCLUDE_DIR} ${LibArchive_INCLUDE_DIR} ${LUA_INCLUDE_DIR} ${PROJECT_SOURCE_DIR}/src/libs ) #Set the output path and the source path. Set (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}) Set (SRC_DIR ${PROJECT_SOURCE_DIR}/src) #List the source files. File (GLOB SOURCES ${SRC_DIR}/*.cpp) File (GLOB TINYFORMAT ${SRC_DIR}/libs/tinyformat/*.cpp) File (GLOB TINYGETTEXT ${SRC_DIR}/libs/tinygettext/*.cpp) File (GLOB FINDLOCALE ${SRC_DIR}/libs/findlocale/*.cpp) #Always use SDL_iconv in tinygettext add_definitions(-DHAVE_SDL) SOURCE_GROUP("Source Files\\tinyformat" FILES ${TINYFORMAT}) SOURCE_GROUP("Source Files\\tinygettext" FILES ${TINYGETTEXT}) SOURCE_GROUP("Source Files\\findlocale" FILES ${FINDLOCALE}) Add_Executable (meandmyshadow ${SOURCES} ${TINYFORMAT} ${TINYGETTEXT} ${FINDLOCALE} ${WIN32_RESOURCES}) set_property(TARGET meandmyshadow PROPERTY CXX_STANDARD 11) Target_Link_Libraries ( meandmyshadow ${SDL2_LIBRARY} ${SDL2_IMAGE_LIBRARY} ${SDL2_TTF_LIBRARY} ${SDL2_MIXER_LIBRARY} ${SDL2MAIN_LIBRARY} ${CURL_LIBRARY} ${LibArchive_LIBRARY} ${LUA_LIBRARIES} ) #Install locations Install (DIRECTORY ${PROJECT_SOURCE_DIR}/data DESTINATION ${DATAROOTDIR}/meandmyshadow/) Install (FILES AUTHORS DESTINATION ${DATAROOTDIR}/meandmyshadow/) Install (TARGETS meandmyshadow RUNTIME DESTINATION ${BINDIR}) if ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") Install (FILES meandmyshadow.desktop DESTINATION ${DESKTOPDIR}) Install (FILES icons/16x16/meandmyshadow.png DESTINATION ${ICONDIR}/hicolor/16x16/apps/) Install (FILES icons/32x32/meandmyshadow.png DESTINATION ${ICONDIR}/hicolor/32x32/apps/) Install (FILES icons/48x48/meandmyshadow.png DESTINATION ${ICONDIR}/hicolor/48x48/apps/) Install (FILES icons/64x64/meandmyshadow.png DESTINATION ${ICONDIR}/hicolor/64x64/apps/) endif ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")