From 76de8f411590519de6b17115453149ef040b6969 Mon Sep 17 00:00:00 2001 From: lat9nq <22451773+lat9nq@users.noreply.github.com> Date: Wed, 17 Jan 2024 16:16:04 -0500 Subject: [PATCH] cmake: Add option to specify custom zoneinfo Enables developers to use a different zoneinfo source than the included submodule. --- CMakeLists.txt | 2 + externals/tz/CMakeLists.txt | 73 +++++++++++++++++++++---------------- 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9986f6d..e15cb29 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.10) project(tzdb2nx VERSION 1.0) +option(TZDB2NX_ZONEINFO_DIR "Specify a custom zoneinfo directory containing time zone data you wish to use" "") + set(CMAKE_CXX_STANDARD 20) if (APPLE) diff --git a/externals/tz/CMakeLists.txt b/externals/tz/CMakeLists.txt index 48bc9c0..c3ceeda 100644 --- a/externals/tz/CMakeLists.txt +++ b/externals/tz/CMakeLists.txt @@ -1,48 +1,59 @@ 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_TMP_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/tmpsrc") -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") +if (TZDB2NX_ZONEINFO_DIR) + set(TZ_ZONEINFO_DIR "${TZDB2NX_ZONEINFO_DIR}" CACHE PATH "Time zone info data directory") +else() + set(TZ_ZONEINFO_DIR "${TZ_DIR}/usr/share/zoneinfo" CACHE PATH "Time zone info data directory") +endif() find_program(GNU_MAKE make) if (NOT GNU_MAKE) message(FATAL_ERROR "GNU make not found") endif() +find_program(GIT_PROGRAM git) +if (NOT GIT_PROGRAM) + message(FATAL_ERROR "git program not found") +endif() + if (NOT EXISTS "${TZ_DIR}" OR NOT EXISTS "${TZIF_LIST_FILE}") - # tz's makefile can only build in-tree, so copy the whole source tree to a - # separate directory before building. - execute_process( - COMMAND - ${GIT_PROGRAM} clone --depth 1 "file://${TZ_SOURCE_DIR}" "${TZ_TMP_SOURCE_DIR}" - COMMAND_ERROR_IS_FATAL ANY - ) + if (NOT TZDB2NX_ZONEINFO_DIR) + # tz's makefile can only build in-tree, so copy the whole source tree to a + # separate directory before building. + execute_process( + COMMAND + ${GIT_PROGRAM} clone --depth 1 "file://${TZ_SOURCE_DIR}" "${TZ_TMP_SOURCE_DIR}" + COMMAND_ERROR_IS_FATAL ANY + ) - if (APPLE) - set(TZ_MAKEFLAGS "LDLIBS=${Intl_LIBRARY}") - else() - set(TZ_MAKEFLAGS) + if (APPLE) + set(TZ_MAKEFLAGS "LDLIBS=${Intl_LIBRARY}") + else() + set(TZ_MAKEFLAGS) + endif() + + execute_process( + COMMAND + ${GNU_MAKE} DESTDIR=${TZ_DIR} ${TZ_MAKEFLAGS} install + WORKING_DIRECTORY + ${TZ_TMP_SOURCE_DIR} + COMMAND_ERROR_IS_FATAL ANY + ) + + unset(TZ_MAKEFLAGS) + + # 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 + # ) endif() - execute_process( - COMMAND - ${GNU_MAKE} DESTDIR=${TZ_DIR} ${TZ_MAKEFLAGS} install - WORKING_DIRECTORY - ${TZ_TMP_SOURCE_DIR} - COMMAND_ERROR_IS_FATAL ANY - ) - - unset(TZ_MAKEFLAGS) - - # 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 ${CMAKE_COMMAND} -P ${PROJECT_SOURCE_DIR}/CMakeModules/list_directory.cmake false ON