Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files
cmake: nsis + logo + sources + source_group + start-up
  • Loading branch information
madebr committed Jan 18, 2021
1 parent f24e2c8 commit 8d0f42a2152bed56f525ce281ff2037d5c29085f
@@ -101,16 +101,18 @@ jobs:
- name: "Build re3 (conan build)"
run: |
conan build ${{ github.workspace }} -if build -bf build -pf package
cmake build -DRE3_INSTALL_NSIS=ON
- name: "Package re3 (conan package)"
run: |
conan package ${{ github.workspace }} -if build -bf build -pf package
- name: "Create binary package (cpack)"
working-directory: ./build
run: |
cpack -C RelWithDebInfo
cmake -E rm -rf dist/_CPack_Packages
- name: "Archive binary package (github artifacts)"
uses: actions/upload-artifact@v2
with:
name: "${{ matrix.os }}-${{ matrix.platform }}"
path: build/*.tar.xz
path: build/dist/*
if-no-files-found: error
@@ -1,82 +1,151 @@
cmake_minimum_required(VERSION 3.8)

set(EXECUTABLE re3)
set(PROJECT RE3)

cmake_minimum_required(VERSION 3.8)
project(${EXECUTABLE} C CXX)
set(PROJECT_AUTHOR "GTAModding")
set(PROJECT_URL "https://github.com/gtamodding/re3")

list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")

if(WIN32)
set(${PROJECT}_AUDIOS "OAL" "MSS")
set(RE3_AUDIOS "OAL" "MSS")
else()
set(${PROJECT}_AUDIOS "OAL")
set(RE3_AUDIOS "OAL")
endif()

set(${PROJECT}_AUDIO "OAL" CACHE STRING "Audio")
set(RE3_AUDIO "OAL" CACHE STRING "Audio")

include(CMakeDependentOption)

option(RE3_INSTALL "Install ${EXECUTABLE}" OFF)
option(RE3_WITH_OPUS "Build ${EXECUTABLE} with opus support" OFF)
option(RE3_WITH_LIBSNDFILE "Build ${EXECUTABLE} with libsndfile (instead of internal decoder)" OFF)

cmake_dependent_option(RE3_INSTALL_NSIS "Create NSIS installer" ON "WIN32;RE3_INSTALL" OFF)
cmake_dependent_option(RE3_INSTALL_SRC "Create sources archive" OFF "RE3_INSTALL" OFF)

option(${PROJECT}_WITH_OPUS "Build ${EXECUTABLE} with opus support" OFF)
option(${PROJECT}_WITH_LIBSNDFILE "Build ${EXECUTABLE} with libsndfile (instead of internal decoder)" OFF)
if(RE3_INSTALL_NSIS)
find_program(MAKENSIS_BIN makensis)
if(NOT MAKENSIS_BIN)
message(FATAL_ERROR "Cannot find `makensis` for creating NSIS installer.")
endif()
endif()

set_property(CACHE ${PROJECT}_AUDIO PROPERTY STRINGS ${${PROJECT}_AUDIOS})
message(STATUS "${PROJECT}_AUDIO = ${${PROJECT}_AUDIO} (choices=${${PROJECT}_AUDIOS})")
set("${PROJECT}_AUDIO_${${PROJECT}_AUDIO}" ON)
if(NOT ${PROJECT}_AUDIO IN_LIST ${PROJECT}_AUDIOS)
message(FATAL_ERROR "Illegal ${PROJECT}_AUDIO=${${PROJECT}_AUDIO}")
set_property(CACHE RE3_AUDIO PROPERTY STRINGS ${RE3_AUDIOS})
message(STATUS "RE3_AUDIO = ${RE3_AUDIO} (choices=${RE3_AUDIOS})")
set("RE3_AUDIO_${RE3_AUDIO}" ON)
if(NOT RE3_AUDIO IN_LIST RE3_AUDIOS)
message(FATAL_ERROR "Illegal RE3_AUDIO=${RE3_AUDIO}")
endif()

option(${PROJECT}_VENDORED_LIBRW "Use vendored librw" ON)
if(${PROJECT}_VENDORED_LIBRW)
option(RE3_VENDORED_LIBRW "Use vendored librw" ON)
if(RE3_VENDORED_LIBRW)
add_subdirectory(vendor/librw)
else()
find_package(librw REQUIRED)
endif()
add_subdirectory(src)
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT ${EXECUTABLE})

if(${PROJECT}_INSTALL)
install(DIRECTORY gamefiles/ DESTINATION ".")
if(LIBRW_PLATFORM_NULL)
set(platform "-null")
elseif(LIBRW_PLATFORM_PS2)
set(platform "-ps2")
elseif(LIBRW_PLATFORM_GL3)
if(LIBRW_GL3_GFXLIB STREQUAL "GLFW")
set(platform "-gl3-glfw")
else()
set(platform "-gl3-sdl2")
endif()
elseif(LIBRW_PLATFORM_D3D9)
set(platform "-d3d9")
endif()
if(${PROJECT}_AUDIO_OAL)
set(audio "-oal")
elseif(${PROJECT}_AUDIO_MSS)
set(audio "-mss")
endif()
if(${PROJECT}_WITH_OPUS)
set(audio "${audio}-opus")
endif()
if(NOT LIBRW_PLATFORM_PS2)
if(WIN32)
set(os "-win")
elseif(APPLE)
set(os "-apple")
elseif(UNIX)
set(os "-linux")
else()
set(compiler "-UNK")
message(WARNING "Unknown os. Created cpack package will be wrong. (override using cpack -P)")
endif()
if(RE3_INSTALL)
install(DIRECTORY gamefiles/ DESTINATION "." COMPONENT comp2_gamedata)
configure_file(cmake/CPackProjectConfig.cmake.in CPackProjectConfig.cmake @ONLY)
#file(GENERATE OUTPUT CPackProjectConfig.cmake INPUT "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CPackProjectConfig.cmake.in" TARGET ${EXECUTABLE})
set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}/dist")

if(RE3_INSTALL_SRC)
install(
DIRECTORY cmake gamefiles resources src utils
DESTINATION .
COMPONENT compZ_sources
EXCLUDE_FROM_ALL
)
install(
FILES conanfile.py CMakeLists.txt premake5.lua README.md CODING_STYLE.md
DESTINATION .
COMPONENT compZ_sources
EXCLUDE_FROM_ALL
)
endif()

set(CPACK_PACKAGE_NAME "${PROJECT_NAME}${platform}${audio}${os}${compiler}")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}")
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "GTA III reversed")
set(CPACK_PACKAGE_VENDOR "GTAModding")
set(CPACK_PACKAGE_VENDOR "${PROJECT_AUTHOR}")
set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/CPackProjectConfig.cmake")
# FIXME: missing license (https://github.com/GTAmodding/re3/issues/794)
# set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/LICENSE")
# set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_NAME}")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}")
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}")
set(CPACK_GENERATOR "TXZ")
# FIXME: this is displayed in the GUI installer!!! Needs a disclaimer about trademarks etc.
# set(CPACK_RESOURCE_FILE_LICENSE)
set(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}\\\\resources\\\\logo.bmp")
set(CPACK_PACKAGE_CHECKSUM "SHA256")

list(REMOVE_ITEM CPACK_COMPONENTS_ALL "compZ_sources")

set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)

if(WIN32)
set(NEED_RUNTIME OFF)
if(MSVC)
if(NOT "-MT" MATCHES CMAKE_C_FLAGS)
# Install MSVC runtime when using dynamic runtime (-MD, -MDd)
if("-MDd" MATCHES CMAKE_C_FLAGS)
set(CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY ON)
endif()
set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION ".")
set(CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT comp3_runtime)
include(InstallRequiredSystemLibraries)
set(NEED_RUNTIME ON)
endif()
endif()
if(RE3_INSTALL_NSIS)
list(APPEND CPACK_GENERATOR "NSIS")
endif()

set(CPACK_NSIS_COMPONENT_INSTALL ON)
set(CPACK_NSIS_DEFINES "!RequestExecutionLevel user")
set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
set(CPACK_NSIS_DISPLAY_NAME "${PROJECT_NAME} (${PROJECT_AUTHOR})")
set(CPACK_NSIS_HELP_LINK "${PROJECT_URL}")
set(CPACK_NSIS_URL_INFO_ABOUT "${PROJECT_URL}")
set(CPACK_NSIS_MUI_ICON "${PROJECT_SOURCE_DIR}\\\\resources\\\\logo.ico")
set(CPACK_NSIS_MUI_UNIICON "${PROJECT_SOURCE_DIR}\\\\resources\\\\logo.ico")
set(CPACK_NSIS_EXECUTABLES_DIRECTORY ".")
set(CPACK_NSIS_MUI_FINISHPAGE_RUN "${EXECUTABLE}")
endif()

include(CPackComponent)

cpack_add_component(comp1_core
DISPLAY_NAME "Game executable(s)"
DESCRIPTION "Install the game executable(s)."
REQUIRED
)
cpack_add_component(comp2_gamedata
DISPLAY_NAME "Game data fixes"
DESCRIPTION "Install game data fixes."
REQUIRED
DEPENDS "comp1_core"
)
cpack_add_component(comp3_runtime
DISPLAY_NAME "System runtime"
DESCRIPTION "Install C runtime. Not required if a suitable MSVC runtime is already available."
DEPENDS "comp1_core"
)
cpack_add_component(comp4_debug
DISPLAY_NAME "Debug symbols"
DESCRIPTION "Enables debugging your problems. Hopefully not needed."
DEPENDS "comp1_core"
DISABLED
)
cpack_add_component(compZ_sources
DISPLAY_NAME "sources"
DESCRIPTION "The sources of ${PROJECT_NAME}."
DISABLED
HIDDEN
)

include(CPack)
endif()
@@ -0,0 +1,76 @@
set(PROJECT_NAME "@PROJECT_NAME@")
set(PROJECT_AUTHOR "@PROJECT_AUTHOR@")

set(LIBRW_PLATFORM "@LIBRW_PLATFORM@")
set(LIBRW_GL3_GFXLIB "@LIBRW_GL3_GFXLIB@")
set(RE3_AUDIO "@RE3_AUDIO@")
set(RE3_WITH_OPUS "@RE3_WITH_OPUS@")
set(WIN32 @WIN32@)
set(APPLE @APPLE@)
set(UNIZ @UNIX@)
set(CMAKE_SIZEOF_VOID_P @CMAKE_SIZEOF_VOID_P@)

if(LIBRW_PLATFORM STREQUAL "NULL")
set(platform "-null")
elseif(LIBRW_PLATFORM STREQUAL "PS2")
set(platform "-ps2")
elseif(LIBRW_PLATFORM STREQUAL "GL3")
if(LIBRW_GL3_GFXLIB STREQUAL "GLFW")
set(platform "-gl3-glfw")
else()
set(platform "-gl3-sdl2")
endif()
elseif(LIBRW_PLATFORM STREQUAL "D3D9")
set(platform "-d3d9")
endif()

if(RE3_AUDIO STREQUAL "OAL")
set(audio "-oal")
elseif(RE3_AUDIO STREQUAL "MSS")
set(audio "-mss")
endif()
if(RE3_WITH_OPUS)
set(audio "${audio}-opus")
endif()

if(WIN32)
set(os "-win")
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(os "${os}64")
else()
set(os "${os}32")
endif()
elseif(APPLE)
set(os "-apple")
elseif(UNIX)
set(os "-linux")
else()
set(os "-UNK")
message(WARNING "Unknown os. Created cpack package will be wrong. (override using cpack -P)")
endif()

set(name_osarch "${PROJECT_NAME}${platform}${audio}${os}${compiler}")

set(CPACK_PACKAGE_FILE_NAME "${name_osarch}")


if(CPACK_GENERATOR MATCHES "^(7Z|TBZ|TGZ|TXZ|TZ|TZST|ZIP)$")
set(CPACK_COMPONENTS_GROUPING "ONE_PER_GROUP")

set(CPACK_COMPONENT_COMP1_CORE_GROUP "BinaryGroup")
set(CPACK_COMPONENT_COMP2_GAMEDATA_GROUP "BinaryGroup")
set(CPACK_COMPONENT_COMP3_RUNTIME_GROUP "BinaryGroup")
set(CPACK_COMPONENT_COMP4_DEBUG_GROUP "BinaryGroup")
set(CPACK_COMPONENT_COMPZ_SOURCES_GROUP "SourceGroup")

set(CPACK_ARCHIVE_SOURCEGROUP_FILE_NAME "${PROJECT_NAME}-src")
set(CPACK_ARCHIVE_BINARYGROUP_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}")
elseif(CPACK_GENERATOR MATCHES "^NSIS(64)?$")
list(REMOVE_ITEM CPACK_COMPONENTS_ALL "compZ_sources")

set(CPACK_PACKAGE_FILE_NAME "${name_osarch}-setup")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME} (${PROJECT_AUTHOR})")

set(CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut \"$SMPROGRAMS\\$STARTMENU_FOLDER\\${PROJECT_NAME}.lnk\" \"$INSTDIR\\${PROJECT_NAME}.exe\"")
set(CPACK_NSIS_DELETE_ICONS_EXTRA "Delete \"$SMPROGRAMS\\$MUI_TEMP\${PROJECT_NAME}.lnk\"")
endif()

0 comments on commit 8d0f42a

Please sign in to comment.