diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a7788ddca..d532e73433 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,10 +42,12 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}") -set(TITLE_SEQUENCE_URL "https://github.com/OpenRCT2/title-sequences/releases/download/v0.1.2c/title-sequences.zip") +set(TITLE_SEQUENCE_VERSION "0.1.2c") +set(TITLE_SEQUENCE_URL "https://github.com/OpenRCT2/title-sequences/releases/download/v${TITLE_SEQUENCE_VERSION}/title-sequences.zip") set(TITLE_SEQUENCE_SHA1 "304d13a126c15bf2c86ff13b81a2f2cc1856ac8d") -set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v1.0.21/objects.zip") +set(OBJECTS_VERSION "1.0.21") +set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v${OBJECTS_VERSION}/objects.zip") set(OBJECTS_SHA1 "c38af45d51a6e440386180feacf76c64720b6ac5") set(REPLAYS_URL "https://github.com/OpenRCT2/replays/releases/download/v0.0.37/replays.zip") @@ -105,34 +107,20 @@ endif () if (APPLE AND MACOS_USE_DEPENDENCIES) # if we're building on macOS, then we need the dependencies # update dylibs + include(cmake/download.cmake) + set(MACOS_DYLIBS_VERSION "28") set(MACOS_DYLIBS_ZIPFILE "openrct2-libs-v${MACOS_DYLIBS_VERSION}-x64-macos-dylibs.zip") + set(MACOS_DYLIBS_SHA1 "29e5480376cf4ac5943f114387e32685204c8b78") set(MACOS_DYLIBS_DIR "${ROOT_DIR}/lib/macos") set(MACOS_DYLIBS_URL "https://github.com/OpenRCT2/Dependencies/releases/download/v${MACOS_DYLIBS_VERSION}/${MACOS_DYLIBS_ZIPFILE}") - if (NOT EXISTS ${MACOS_DYLIBS_DIR}) - set(DOWNLOAD_DYLIBS 1) - else () - file(READ "${MACOS_DYLIBS_DIR}/libversion" MACOS_DYLIBS_CACHED_VERSION) - if (NOT ${MACOS_DYLIBS_CACHED_VERSION} STREQUAL ${MACOS_DYLIBS_VERSION}) - message("Cached macOS dylibs out of date") - set(DOWNLOAD_DYLIBS 1) - endif () - endif () - if (DOWNLOAD_DYLIBS) - message("Downloading macOS dylibs") - file(DOWNLOAD "${MACOS_DYLIBS_URL}" "${MACOS_DYLIBS_DIR}/${MACOS_DYLIBS_ZIPFILE}") - file(ARCHIVE_EXTRACT - INPUT "${MACOS_DYLIBS_DIR}/${MACOS_DYLIBS_ZIPFILE}" - DESTINATION "${MACOS_DYLIBS_DIR}" - ) - file(WRITE - "${MACOS_DYLIBS_DIR}/libversion" - "${MACOS_DYLIBS_VERSION}" - ) - file(REMOVE "${MACOS_DYLIBS_DIR}/${MACOS_DYLIBS_ZIPFILE}") - endif () - # TODO: make the above routine a function, use it for objects, title sequences, and languages + download_openrct2_zip( + ZIP_VERSION ${MACOS_DYLIBS_VERSION} + DOWNLOAD_DIR ${MACOS_DYLIBS_DIR} + ZIP_URL ${MACOS_DYLIBS_URL} + SHA1 ${MACOS_DYLIBS_SHA1} + ) set(CMAKE_MACOSX_RPATH 1) list(APPEND CMAKE_PREFIX_PATH "${MACOS_DYLIBS_DIR}") diff --git a/cmake/download.cmake b/cmake/download.cmake new file mode 100644 index 0000000000..f4936d200a --- /dev/null +++ b/cmake/download.cmake @@ -0,0 +1,37 @@ +function(download_openrct2_zip) + set(oneValueArgs ZIP_VERSION DOWNLOAD_DIR ZIP_URL SHA1) + cmake_parse_arguments(DOWNLOAD_OPENRCT2 "${options}" "${oneValueArgs}" + "${multiValueArgs}" ${ARGN} ) + + get_filename_component(ZIP_FILE_NAME ${DOWNLOAD_OPENRCT2_ZIP_URL} NAME) + + if (NOT EXISTS ${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}) + set(DOWNLOAD_ZIP 1) + else () + if (EXISTS "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}/zipversion") + file(READ "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}/zipversion" DOWNLOAD_OPENRCT2_CACHED_VERSION) + if (NOT ${DOWNLOAD_OPENRCT2_CACHED_VERSION} STREQUAL ${DOWNLOAD_OPENRCT2_ZIP_VERSION}) + message("Cache ${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR} not up to date") + set(DOWNLOAD_ZIP 1) + endif () + else () + set(DOWNLOAD_ZIP 1) + endif () + endif () + if (DOWNLOAD_ZIP) + message("Downloading ${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}") + file(DOWNLOAD + "${DOWNLOAD_OPENRCT2_ZIP_URL}" "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}/${ZIP_FILE_NAME}" + EXPECTED_HASH SHA1=${DOWNLOAD_OPENRCT2_SHA1} SHOW_PROGRESS) + file(ARCHIVE_EXTRACT + INPUT "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}/${ZIP_FILE_NAME}" + DESTINATION "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}" + ) + file(WRITE + "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}/zipversion" + "${DOWNLOAD_OPENRCT2_ZIP_VERSION}" + ) + file(REMOVE "${DOWNLOAD_OPENRCT2_DOWNLOAD_DIR}/${ZIP_FILE_NAME}") + endif () + +endfunction () diff --git a/src/openrct2-ui/CMakeLists.txt b/src/openrct2-ui/CMakeLists.txt index 054a9f91de..cc53186ba3 100644 --- a/src/openrct2-ui/CMakeLists.txt +++ b/src/openrct2-ui/CMakeLists.txt @@ -139,24 +139,18 @@ if(MACOS_BUNDLE) # Add distribution sources target_sources(${PROJECT_NAME} - PUBLIC distribution/readme.txt - PUBLIC distribution/changelog.txt - PUBLIC g2.dat - PUBLIC resources/mac/openrct2.icns - PUBLIC ${SOURCE_DATA_DIR}/language - PUBLIC ${SOURCE_DATA_DIR}/object - PUBLIC ${SOURCE_DATA_DIR}/sequence + PUBLIC ${ROOT_DIR}/distribution/readme.txt + PUBLIC ${ROOT_DIR}/distribution/changelog.txt + PUBLIC ${CMAKE_BINARY_DIR}/g2.dat + PUBLIC ${ROOT_DIR}/resources/mac/openrct2.icns ) # Specify the resources to move to the bundle set(BUNDLE_RESOURCES - distribution/readme.txt - distribution/changelog.txt - g2.dat - resources/mac/openrct2.icns - ${SOURCE_DATA_DIR}/language - ${SOURCE_DATA_DIR}/object - ${SOURCE_DATA_DIR}/sequence + ${ROOT_DIR}/distribution/readme.txt + ${ROOT_DIR}/distribution/changelog.txt + ${CMAKE_BINARY_DIR}/g2.dat + ${ROOT_DIR}/resources/mac/openrct2.icns ) @@ -174,8 +168,26 @@ if(MACOS_BUNDLE) # copy data file(COPY ${SOURCE_DATA_DIR}/language DESTINATION "${BUNDLE_RESOURCE_DIR}") - file(COPY ${SOURCE_DATA_DIR}/object DESTINATION "${BUNDLE_RESOURCE_DIR}") - file(COPY ${SOURCE_DATA_DIR}/sequence DESTINATION "${BUNDLE_RESOURCE_DIR}") + + # download objects and sequences + set(OBJECTS_DIR ${CMAKE_BINARY_DIR}/object) + set(TITLE_SEQUENCE_DIR ${CMAKE_BINARY_DIR}/sequence) + download_openrct2_zip( + ZIP_VERSION ${OBJECTS_VERSION} + DOWNLOAD_DIR ${OBJECTS_DIR} + ZIP_URL ${OBJECTS_URL} + SHA1 ${OBJECTS_SHA1} + ) + + download_openrct2_zip( + ZIP_VERSION ${TITLE_SEQUENCE_VERSION} + DOWNLOAD_DIR ${TITLE_SEQUENCE_DIR} + ZIP_URL ${TITLE_SEQUENCE_URL} + SHA1 ${TITLE_SEQUENCE_SHA1} + ) + + file(COPY ${OBJECTS_DIR} DESTINATION "${BUNDLE_RESOURCE_DIR}") + file(COPY ${TITLE_SEQUENCE_DIR} DESTINATION "${BUNDLE_RESOURCE_DIR}") # Create as a bundle set_target_properties(${PROJECT_NAME} PROPERTIES @@ -191,5 +203,4 @@ if(MACOS_BUNDLE) verify_app(${CMAKE_BINARY_DIR}/${MACOS_APP_NAME}) " BUNDLE DESTINATION ${CMAKE_BINARY_DIR} ) - endif ()