From 467e965659612c3e3f6fb2e95d0d34c5242e965b Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Fri, 16 Jun 2023 01:16:02 -0400 Subject: [PATCH 1/5] general: Use a submodule of eggert/tz --- .gitmodules | 3 ++ CMakeLists.txt | 6 +-- externals/CMakeLists.txt | 1 + externals/tz/CMakeLists.txt | 34 ++++++++++++++ {src/tzdb => externals/tz}/find_tzif.sh | 0 externals/tz/tz | 1 + src/tzdb/CMakeLists.txt | 62 ++++--------------------- src/tzdb2nx/CMakeLists.txt | 3 ++ 8 files changed, 53 insertions(+), 57 deletions(-) create mode 100644 .gitmodules create mode 100644 externals/CMakeLists.txt create mode 100644 externals/tz/CMakeLists.txt rename {src/tzdb => externals/tz}/find_tzif.sh (100%) create mode 160000 externals/tz/tz diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..5322a25 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "externals/tz/tz"] + path = externals/tz/tz + url = https://github.com/eggert/tz.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c47574..87c8950 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,11 +2,7 @@ cmake_minimum_required(VERSION 3.10) project(tzdb2nx VERSION 1.0) -set(TZDB_VERSION "$ENV{TZDB_VERSION}") -if ("${TZDB_VERSION}" STREQUAL "") - set(TZDB_VERSION "2022c") -endif() - set(CMAKE_CXX_STANDARD 20) +add_subdirectory(externals) add_subdirectory(src) diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt new file mode 100644 index 0000000..33a9c7c --- /dev/null +++ b/externals/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(tz) diff --git a/externals/tz/CMakeLists.txt b/externals/tz/CMakeLists.txt new file mode 100644 index 0000000..eacd3be --- /dev/null +++ b/externals/tz/CMakeLists.txt @@ -0,0 +1,34 @@ +set(TZ_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tz") +set(TZ_DIR "${CMAKE_CURRENT_BINARY_DIR}/tz") +set(TZ_ZONEINFO_DIR "${TZ_DIR}/usr/share/zoneinfo" CACHE PATH "Time zone info data directory") +set(TZIF_LIST_FILE "${CMAKE_CURRENT_BINARY_DIR}/tzif_list.txt" CACHE PATH "List of zone info files") + +find_program(GNU_MAKE make) +if ("${GNU_MAKE}" STREQUAL "GNU_MAKE-NOTFOUND") + message(FATAL_ERROR "GNU make not found") +endif() + +if (NOT EXISTS "${TZ_DIR}" OR NOT EXISTS "${TZIF_LIST_FILE}") + execute_process( + COMMAND + ${GNU_MAKE} DESTDIR=${TZ_DIR} install + WORKING_DIRECTORY + ${TZ_SOURCE_DIR} + COMMAND_ERROR_IS_FATAL ANY + ) + + # Step taken by Arch Linux packaging, but Nintendo apparently skips it + # execute_process( + # COMMAND + # "${TZDB_LOCATION}/zic" -b fat -d ${TZDB_ZONEINFO} africa antarctica asia australasia europe northamerica southamerica etcetera backward factory + # WORKING_DIRECTORY + # "${TZDB_LOCATION}" + # COMMAND_ERROR_IS_FATAL ANY + # ) + + execute_process( + COMMAND + /bin/bash "${CMAKE_CURRENT_SOURCE_DIR}/find_tzif.sh" "${TZ_ZONEINFO_DIR}" "${TZIF_LIST_FILE}" + COMMAND_ERROR_IS_FATAL ANY + ) +endif() diff --git a/src/tzdb/find_tzif.sh b/externals/tz/find_tzif.sh similarity index 100% rename from src/tzdb/find_tzif.sh rename to externals/tz/find_tzif.sh diff --git a/externals/tz/tz b/externals/tz/tz new file mode 160000 index 0000000..ce4d776 --- /dev/null +++ b/externals/tz/tz @@ -0,0 +1 @@ +Subproject commit ce4d77644d2793027bb27f095dec7b530edcd947 diff --git a/src/tzdb/CMakeLists.txt b/src/tzdb/CMakeLists.txt index 3bd7688..b91ed63 100644 --- a/src/tzdb/CMakeLists.txt +++ b/src/tzdb/CMakeLists.txt @@ -1,21 +1,10 @@ -find_program(GNU_MAKE make) -if ("${GNU_MAKE}" STREQUAL "GNU_MAKE-NOTFOUND") - message(ERROR "make program not found") -endif() +set(NX_TZDB_DIR "${CMAKE_CURRENT_BINARY_DIR}/nx" CACHE PATH "Path to Switch-style time zone data") +set(NX_ZONEINFO_DIR "${NX_TZDB_DIR}/zoneinfo") -set(TZDB_ARCHIVE "tzdb-${TZDB_VERSION}.tar.lz") -set(TZDB_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/tzdb-${TZDB_VERSION}") -if (NOT (EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${TZDB_ARCHIVE}" AND EXISTS "${TZDB_LOCATION}")) - file(DOWNLOAD "https://data.iana.org/time-zones/releases/${TZDB_ARCHIVE}" "${CMAKE_CURRENT_BINARY_DIR}/${TZDB_ARCHIVE}") - file(ARCHIVE_EXTRACT INPUT "${CMAKE_CURRENT_BINARY_DIR}/${TZDB_ARCHIVE}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") -endif() - -set(TZDB_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/build") -set(TZDB_ZONEINFO "${TZDB_BUILD_DIR}/usr/share/zoneinfo") -set(TZIF_LIST_FILE "${CMAKE_CURRENT_BINARY_DIR}/tzif_list.txt") - -set(NX_BUILD_DIR "${PROJECT_BINARY_DIR}/nx") -set(NX_ZONEINFO_DIR "${NX_BUILD_DIR}/zoneinfo") +set(TZDB_VERSION_FILE ${TZDB_LOCATION}/version) +file(TIMESTAMP ${TZDB_VERSION_FILE} TZDB_VERSION "%y%m%d" UTC) +set(NX_VERSION_FILE ${NX_TZDB_DIR}/version.txt) +file(WRITE ${NX_VERSION_FILE} "${TZDB_VERSION}") add_custom_target(x80e ALL @@ -23,37 +12,7 @@ add_custom_target(x80e tzdb2nx ${NX_VERSION_FILE}) -if (NOT EXISTS "${TZDB_BUILD_DIR}" OR NOT EXISTS ${TZIF_LIST_FILE}) - execute_process( - COMMAND - "${GNU_MAKE}" DESTDIR=${TZDB_BUILD_DIR} install - WORKING_DIRECTORY - "${TZDB_LOCATION}" - COMMAND_ERROR_IS_FATAL ANY - ) - - # Step taken by Arch Linux packaging, but Nintendo apparently skips it - # execute_process( - # COMMAND - # "${TZDB_LOCATION}/zic" -b fat -d ${TZDB_ZONEINFO} africa antarctica asia australasia europe northamerica southamerica etcetera backward factory - # WORKING_DIRECTORY - # "${TZDB_LOCATION}" - # COMMAND_ERROR_IS_FATAL ANY - # ) - - execute_process( - COMMAND - /bin/bash "${CMAKE_CURRENT_SOURCE_DIR}/find_tzif.sh" "${TZDB_ZONEINFO}" "${TZIF_LIST_FILE}" - COMMAND_ERROR_IS_FATAL ANY - ) -endif() - -set(TZDB_VERSION_FILE ${TZDB_LOCATION}/version) -file(TIMESTAMP ${TZDB_VERSION_FILE} TZDB_VERSION "%y%m%d" UTC) -set(NX_VERSION_FILE ${NX_BUILD_DIR}/version.txt) -file(WRITE ${NX_VERSION_FILE} "${TZDB_VERSION}") - -set(BINARY_LIST_TXT ${NX_BUILD_DIR}/binaryList.txt) +set(BINARY_LIST_TXT ${NX_TZDB_DIR}/binaryList.txt) add_custom_target(binary_list bash ${CMAKE_CURRENT_SOURCE_DIR}/generate_binary_list_txt.sh ${BINARY_LIST_TXT} BYPRODUCTS @@ -64,7 +23,7 @@ add_dependencies(x80e binary_list) file(STRINGS "${TZIF_LIST_FILE}" TZ_FILES) foreach(FILE ${TZ_FILES}) - file(RELATIVE_PATH TARG "${TZDB_ZONEINFO}" "${FILE}") + file(RELATIVE_PATH TARG "${TZ_ZONEINFO_DIR}" "${FILE}") get_filename_component(TARG_PATH "${NX_ZONEINFO_DIR}/${TARG}" DIRECTORY) string(REGEX REPLACE "\/" "_" TARG_SANITIZED "${TARG}") add_custom_target(${TARG_SANITIZED} @@ -73,10 +32,9 @@ foreach(FILE ${TZ_FILES}) COMMAND mkdir -p ${TARG_PATH} COMMAND - "${PROJECT_BINARY_DIR}/src/tzdb2nx/tzdb2nx" ${FILE} ${NX_ZONEINFO_DIR}/${TARG} + ${TZDB2NX_PATH} ${FILE} ${NX_ZONEINFO_DIR}/${TARG} DEPENDS - tzdb2nx - ) + tzdb2nx) add_dependencies(x80e ${TARG_SANITIZED}) add_dependencies(binary_list ${TARG_SANITIZED}) diff --git a/src/tzdb2nx/CMakeLists.txt b/src/tzdb2nx/CMakeLists.txt index 9d2b034..ae5d614 100644 --- a/src/tzdb2nx/CMakeLists.txt +++ b/src/tzdb2nx/CMakeLists.txt @@ -2,3 +2,6 @@ add_executable(tzdb2nx main.cpp tzif.cpp tzif.h) + +set(TZDB2NX_PATH "${CMAKE_CURRENT_BINARY_DIR}/tzdb2nx" CACHE PATH "Path to tzdb2nx path") +set_target_properties(tzdb2nx PROPERTIES CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TZDB2NX_PATH}) From 8fc053bc57ad087db3cb1a7a5ddb54976a2b6986 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Fri, 16 Jun 2023 01:17:19 -0400 Subject: [PATCH 2/5] github/workflows: Update version dir --- .github/workflows/cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 9fe3bda..279a87d 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -36,7 +36,7 @@ jobs: - name: Version run: | - echo "nx_version=`cat ${{github.workspace}}/build/nx/version.txt`" > "$GITHUB_ENV" + echo "nx_version=$(cat $(grep NX_TZDB_DIR ${{github.workspace}}/build/CMakeCache.txt | sed 's/.*=//g')/version.txt)" > "$GITHUB_ENV" - name: Upload uses: actions/upload-artifact@v3 From 31063d18813d93ff4c9a6433d892c0b80acf14a4 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Fri, 16 Jun 2023 01:24:04 -0400 Subject: [PATCH 3/5] github/workflows: Enable submodules --- .github/workflows/cmake.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 279a87d..7741165 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -19,6 +19,8 @@ jobs: steps: - uses: actions/checkout@v3 + with: + submodules: 'true' - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. From 9a8dba8d766f7863b56fb3a70f6c0a27ad179ef6 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Fri, 16 Jun 2023 01:27:31 -0400 Subject: [PATCH 4/5] gh/workflow: Propagate dir across other uses --- .github/workflows/cmake.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 7741165..fcb0dda 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -25,7 +25,9 @@ jobs: - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + run: | + cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + echo "nx_tzdb_dir=$(grep NX_TZDB_DIR ${{github.workspace}}/build/CMakeCache.txt | sed 's/.*=//g')" > "$GITHUB_ENV" - name: Build # Build your program with the given configuration @@ -34,11 +36,11 @@ jobs: - name: Package run: | mkdir -p ${{github.workspace}}/artifacts - cp -rv ${{github.workspace}}/build/nx ${{github.workspace}}/artifacts/ + cp -rv ${{ env.nx_tzdb_dir }} ${{github.workspace}}/artifacts/ - name: Version run: | - echo "nx_version=$(cat $(grep NX_TZDB_DIR ${{github.workspace}}/build/CMakeCache.txt | sed 's/.*=//g')/version.txt)" > "$GITHUB_ENV" + echo "nx_version=$(cat ${{ env.nx_tzdb_dir }}/version.txt)" > "$GITHUB_ENV" - name: Upload uses: actions/upload-artifact@v3 From d394741906365b343a08c7fbb10f11ab8fa2abd9 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Fri, 16 Jun 2023 02:04:50 -0400 Subject: [PATCH 5/5] cmake: Get version info from git --- externals/tz/CMakeLists.txt | 2 +- src/tzdb/CMakeLists.txt | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/externals/tz/CMakeLists.txt b/externals/tz/CMakeLists.txt index eacd3be..a1503c3 100644 --- a/externals/tz/CMakeLists.txt +++ b/externals/tz/CMakeLists.txt @@ -1,4 +1,4 @@ -set(TZ_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tz") +set(TZ_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/tz" CACHE PATH "Time zone source directory") set(TZ_DIR "${CMAKE_CURRENT_BINARY_DIR}/tz") set(TZ_ZONEINFO_DIR "${TZ_DIR}/usr/share/zoneinfo" CACHE PATH "Time zone info data directory") set(TZIF_LIST_FILE "${CMAKE_CURRENT_BINARY_DIR}/tzif_list.txt" CACHE PATH "List of zone info files") diff --git a/src/tzdb/CMakeLists.txt b/src/tzdb/CMakeLists.txt index b91ed63..1b63da2 100644 --- a/src/tzdb/CMakeLists.txt +++ b/src/tzdb/CMakeLists.txt @@ -1,8 +1,36 @@ +find_program(GIT_PROGRAM git) +if ("${GIT_PROGRAM}" STREQUAL "GIT_PROGRAM-NOTFOUND") + message(FATAL_ERROR "git program not found") +endif() + +find_program(GNU_DATE date) +if ("${GNU_DATE}" STREQUAL "GNU_DATE-NOTFOUND") + message(FATAL_ERROR "date program not found") +endif() + set(NX_TZDB_DIR "${CMAKE_CURRENT_BINARY_DIR}/nx" CACHE PATH "Path to Switch-style time zone data") set(NX_ZONEINFO_DIR "${NX_TZDB_DIR}/zoneinfo") -set(TZDB_VERSION_FILE ${TZDB_LOCATION}/version) -file(TIMESTAMP ${TZDB_VERSION_FILE} TZDB_VERSION "%y%m%d" UTC) +set(TZDB_VERSION_FILE ${TZ_SOURCE_DIR}/NEWS) + +execute_process( + COMMAND + ${GIT_PROGRAM} log --pretty=%at -n1 NEWS + OUTPUT_VARIABLE + TZ_COMMIT_TIME + WORKING_DIRECTORY + ${TZ_SOURCE_DIR} + COMMAND_ERROR_IS_FATAL ANY) + +string(REPLACE "\n" "" TZ_COMMIT_TIME "${TZ_COMMIT_TIME}") + +execute_process( + COMMAND + ${GNU_DATE} +%y%m%d --date=@${TZ_COMMIT_TIME} + OUTPUT_VARIABLE + TZDB_VERSION + COMMAND_ERROR_IS_FATAL ANY) + set(NX_VERSION_FILE ${NX_TZDB_DIR}/version.txt) file(WRITE ${NX_VERSION_FILE} "${TZDB_VERSION}")