aboutsummaryrefslogtreecommitdiffhomepage
path: root/externals/nx_tzdb
diff options
context:
space:
mode:
Diffstat (limited to 'externals/nx_tzdb')
-rw-r--r--externals/nx_tzdb/CMakeLists.txt96
-rw-r--r--externals/nx_tzdb/NxTzdbCreateHeader.cmake8
-rw-r--r--externals/nx_tzdb/include/nx_tzdb.h2
m---------externals/nx_tzdb/tzdb_to_nx0
4 files changed, 71 insertions, 35 deletions
diff --git a/externals/nx_tzdb/CMakeLists.txt b/externals/nx_tzdb/CMakeLists.txt
index 2f625c108..d5a1c6317 100644
--- a/externals/nx_tzdb/CMakeLists.txt
+++ b/externals/nx_tzdb/CMakeLists.txt
@@ -1,24 +1,60 @@
# SPDX-FileCopyrightText: 2023 yuzu Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
-set(NX_TZDB_VERSION "220816")
-set(NX_TZDB_DOWNLOAD_URL "https://github.com/lat9nq/tzdb_to_nx/releases/download/${NX_TZDB_VERSION}/${NX_TZDB_VERSION}.zip")
+set(NX_TZDB_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include")
+
+add_library(nx_tzdb INTERFACE)
+
+find_program(GIT git)
+find_program(GNU_MAKE make)
+find_program(GNU_DATE date)
+set(CAN_BUILD_NX_TZDB true)
+
+if (NOT GIT)
+ set(CAN_BUILD_NX_TZDB false)
+endif()
+if (NOT GNU_MAKE)
+ set(CAN_BUILD_NX_TZDB false)
+endif()
+if (NOT GNU_DATE)
+ set(CAN_BUILD_NX_TZDB false)
+endif()
+if (CMAKE_SYSTEM_NAME STREQUAL "Windows" OR ANDROID)
+ # tzdb_to_nx currently requires a posix-compliant host
+ # MinGW and Android are handled here due to the executable format being different from the host system
+ # TODO (lat9nq): cross-compiling support
+ set(CAN_BUILD_NX_TZDB false)
+endif()
+
+set(NX_TZDB_VERSION "220816")
set(NX_TZDB_ARCHIVE "${CMAKE_CURRENT_BINARY_DIR}/${NX_TZDB_VERSION}.zip")
-set(NX_TZDB_DIR "${CMAKE_CURRENT_BINARY_DIR}/nx_tzdb")
-set(NX_TZDB_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include")
+set(NX_TZDB_ROMFS_DIR "${CMAKE_CURRENT_BINARY_DIR}/nx_tzdb")
+
+if ((NOT CAN_BUILD_NX_TZDB OR YUZU_DOWNLOAD_TIME_ZONE_DATA) AND NOT EXISTS ${NX_TZDB_ARCHIVE})
+ set(NX_TZDB_DOWNLOAD_URL "https://github.com/lat9nq/tzdb_to_nx/releases/download/${NX_TZDB_VERSION}/${NX_TZDB_VERSION}.zip")
+
+ message(STATUS "Downloading time zone data from ${NX_TZDB_DOWNLOAD_URL}...")
+ file(DOWNLOAD ${NX_TZDB_DOWNLOAD_URL} ${NX_TZDB_ARCHIVE}
+ STATUS NX_TZDB_DOWNLOAD_STATUS)
+ list(GET NX_TZDB_DOWNLOAD_STATUS 0 NX_TZDB_DOWNLOAD_STATUS_CODE)
+ if (NOT NX_TZDB_DOWNLOAD_STATUS_CODE EQUAL 0)
+ message(FATAL_ERROR "Time zone data download failed (status code ${NX_TZDB_DOWNLOAD_STATUS_CODE})")
+ endif()
-if (NOT EXISTS ${NX_TZDB_ARCHIVE})
- file(DOWNLOAD ${NX_TZDB_DOWNLOAD_URL} ${NX_TZDB_ARCHIVE})
file(ARCHIVE_EXTRACT
INPUT
${NX_TZDB_ARCHIVE}
DESTINATION
- ${NX_TZDB_DIR})
+ ${NX_TZDB_ROMFS_DIR})
+elseif (CAN_BUILD_NX_TZDB AND NOT YUZU_DOWNLOAD_TIME_ZONE_DATA)
+ add_subdirectory(tzdb_to_nx)
+ add_dependencies(nx_tzdb x80e)
+
+ set(NX_TZDB_ROMFS_DIR "${NX_TZDB_DIR}")
endif()
-add_library(nx_tzdb INTERFACE)
target_include_directories(nx_tzdb
INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include
INTERFACE ${NX_TZDB_INCLUDE_DIR})
@@ -41,25 +77,25 @@ function(CreateHeader ZONE_PATH HEADER_NAME)
target_sources(nx_tzdb PRIVATE ${HEADER_PATH})
endfunction()
-CreateHeader(${NX_TZDB_DIR} base)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo zoneinfo)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Africa africa)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/America america)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/America/Argentina america_argentina)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/America/Indiana america_indiana)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/America/Kentucky america_kentucky)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/America/North_Dakota america_north_dakota)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Antartica antartica)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Arctic arctic)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Asia asia)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Atlantic atlantic)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Australia australia)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Brazil brazil)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Canada canada)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Chile chile)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Etc etc)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Europe europe)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Indian indian)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Mexico mexico)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/Pacific pacific)
-CreateHeader(${NX_TZDB_DIR}/zoneinfo/US us)
+CreateHeader(${NX_TZDB_ROMFS_DIR} base)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo zoneinfo)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Africa africa)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America america)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/Argentina america_argentina)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/Indiana america_indiana)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/Kentucky america_kentucky)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/America/North_Dakota america_north_dakota)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Antarctica antarctica)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Arctic arctic)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Asia asia)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Atlantic atlantic)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Australia australia)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Brazil brazil)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Canada canada)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Chile chile)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Etc etc)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Europe europe)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Indian indian)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Mexico mexico)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/Pacific pacific)
+CreateHeader(${NX_TZDB_ROMFS_DIR}/zoneinfo/US us)
diff --git a/externals/nx_tzdb/NxTzdbCreateHeader.cmake b/externals/nx_tzdb/NxTzdbCreateHeader.cmake
index 69166aa5b..8c29e1167 100644
--- a/externals/nx_tzdb/NxTzdbCreateHeader.cmake
+++ b/externals/nx_tzdb/NxTzdbCreateHeader.cmake
@@ -15,7 +15,7 @@ set(DIRECTORY_NAME ${HEADER_NAME})
set(FILE_DATA "")
foreach(ZONE_FILE ${FILE_LIST})
- if ("${ZONE_FILE}" STREQUAL "\n")
+ if (ZONE_FILE STREQUAL "\n")
continue()
endif()
@@ -26,13 +26,13 @@ foreach(ZONE_FILE ${FILE_LIST})
foreach(I RANGE 0 ${ZONE_DATA_LEN} 2)
math(EXPR BREAK_LINE "(${I} + 2) % 38")
- string(SUBSTRING "${ZONE_DATA}" "${I}" "2" HEX_DATA)
- if ("${HEX_DATA}" STREQUAL "")
+ string(SUBSTRING "${ZONE_DATA}" "${I}" 2 HEX_DATA)
+ if (NOT HEX_DATA)
break()
endif()
string(APPEND FILE_DATA "0x${HEX_DATA},")
- if ("${BREAK_LINE}" STREQUAL "0")
+ if (BREAK_LINE EQUAL 0)
string(APPEND FILE_DATA "\n")
else()
string(APPEND FILE_DATA " ")
diff --git a/externals/nx_tzdb/include/nx_tzdb.h b/externals/nx_tzdb/include/nx_tzdb.h
index d7b1e4304..1f7c6069a 100644
--- a/externals/nx_tzdb/include/nx_tzdb.h
+++ b/externals/nx_tzdb/include/nx_tzdb.h
@@ -9,7 +9,7 @@
#include "nx_tzdb/america_indiana.h"
#include "nx_tzdb/america_kentucky.h"
#include "nx_tzdb/america_north_dakota.h"
-#include "nx_tzdb/antartica.h"
+#include "nx_tzdb/antarctica.h"
#include "nx_tzdb/arctic.h"
#include "nx_tzdb/asia.h"
#include "nx_tzdb/atlantic.h"
diff --git a/externals/nx_tzdb/tzdb_to_nx b/externals/nx_tzdb/tzdb_to_nx
new file mode 160000
+Subproject 34df65eff295c2bd9ee9e6a077d662486d5cabb