mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 08:07:34 +00:00
LibTimeZone+Meta: Add plumbing for an IANA Time Zone Database generator
The IANA Time Zone Database contains data needed, at least, for various JavaScript objects. This adds plumbing for a parser and code generator for this data. The generated data will be made available by LibTimeZone, much like how UCD and CLDR data is available through LibUnicode.
This commit is contained in:
parent
9ba386a7bb
commit
8669b25cea
8 changed files with 184 additions and 6 deletions
88
Meta/CMake/time_zone_data.cmake
Normal file
88
Meta/CMake/time_zone_data.cmake
Normal file
|
@ -0,0 +1,88 @@
|
|||
include(${CMAKE_CURRENT_LIST_DIR}/utils.cmake)
|
||||
|
||||
set(TZDB_PATH "${CMAKE_BINARY_DIR}/TZDB" CACHE PATH "Download location for TZDB files")
|
||||
|
||||
set(TZDB_VERSION 2021e)
|
||||
set(TZDB_VERSION_FILE "${TZDB_PATH}/version.txt")
|
||||
|
||||
set(TZDB_ZIP_URL "https://data.iana.org/time-zones/releases/tzdata${TZDB_VERSION}.tar.gz")
|
||||
set(TZDB_ZIP_PATH "${TZDB_PATH}/tzdb.tar.gz")
|
||||
|
||||
set(TZDB_AFRICA_SOURCE africa)
|
||||
set(TZDB_AFRICA_PATH "${TZDB_PATH}/${TZDB_AFRICA_SOURCE}")
|
||||
|
||||
set(TZDB_ANTARCTICA_SOURCE antarctica)
|
||||
set(TZDB_ANTARCTICA_PATH "${TZDB_PATH}/${TZDB_ANTARCTICA_SOURCE}")
|
||||
|
||||
set(TZDB_ASIA_SOURCE asia)
|
||||
set(TZDB_ASIA_PATH "${TZDB_PATH}/${TZDB_ASIA_SOURCE}")
|
||||
|
||||
set(TZDB_AUSTRALASIA_SOURCE australasia)
|
||||
set(TZDB_AUSTRALASIA_PATH "${TZDB_PATH}/${TZDB_AUSTRALASIA_SOURCE}")
|
||||
|
||||
set(TZDB_ETCETERA_SOURCE etcetera)
|
||||
set(TZDB_ETCETERA_PATH "${TZDB_PATH}/${TZDB_ETCETERA_SOURCE}")
|
||||
|
||||
set(TZDB_EUROPE_SOURCE europe)
|
||||
set(TZDB_EUROPE_PATH "${TZDB_PATH}/${TZDB_EUROPE_SOURCE}")
|
||||
|
||||
set(TZDB_NORTH_AMERICA_SOURCE northamerica)
|
||||
set(TZDB_NORTH_AMERICA_PATH "${TZDB_PATH}/${TZDB_NORTH_AMERICA_SOURCE}")
|
||||
|
||||
set(TZDB_SOUTH_AMERICA_SOURCE southamerica)
|
||||
set(TZDB_SOUTH_AMERICA_PATH "${TZDB_PATH}/${TZDB_SOUTH_AMERICA_SOURCE}")
|
||||
|
||||
function(extract_tzdb_file source path)
|
||||
if(EXISTS "${TZDB_ZIP_PATH}" AND NOT EXISTS "${path}")
|
||||
message(STATUS "Extracting TZDB ${source} from ${TZDB_ZIP_PATH}...")
|
||||
execute_process(COMMAND tar -C "${TZDB_PATH}" -xf "${TZDB_ZIP_PATH}" "${source}" RESULT_VARIABLE tar_result)
|
||||
if (NOT tar_result EQUAL 0)
|
||||
message(FATAL_ERROR "Failed to unzip ${source} from ${TZDB_ZIP_PATH} with status ${tar_result}")
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
if (ENABLE_TIME_ZONE_DATABASE_DOWNLOAD)
|
||||
remove_path_if_version_changed("${TZDB_VERSION}" "${TZDB_VERSION_FILE}" "${TZDB_PATH}")
|
||||
|
||||
if (NOT EXISTS "${TZDB_ZIP_PATH}")
|
||||
message(STATUS "Downloading time zone database from ${TZDB_ZIP_URL}...")
|
||||
file(DOWNLOAD "${TZDB_ZIP_URL}" "${TZDB_ZIP_PATH}" INACTIVITY_TIMEOUT 10)
|
||||
endif()
|
||||
|
||||
extract_tzdb_file("${TZDB_AFRICA_SOURCE}" "${TZDB_AFRICA_PATH}")
|
||||
extract_tzdb_file("${TZDB_ANTARCTICA_SOURCE}" "${TZDB_ANTARCTICA_PATH}")
|
||||
extract_tzdb_file("${TZDB_ASIA_SOURCE}" "${TZDB_ASIA_PATH}")
|
||||
extract_tzdb_file("${TZDB_AUSTRALASIA_SOURCE}" "${TZDB_AUSTRALASIA_PATH}")
|
||||
extract_tzdb_file("${TZDB_ETCETERA_SOURCE}" "${TZDB_ETCETERA_PATH}")
|
||||
extract_tzdb_file("${TZDB_EUROPE_SOURCE}" "${TZDB_EUROPE_PATH}")
|
||||
extract_tzdb_file("${TZDB_NORTH_AMERICA_SOURCE}" "${TZDB_NORTH_AMERICA_PATH}")
|
||||
extract_tzdb_file("${TZDB_SOUTH_AMERICA_SOURCE}" "${TZDB_SOUTH_AMERICA_PATH}")
|
||||
|
||||
set(TIME_ZONE_DATA_HEADER LibTimeZone/TimeZoneData.h)
|
||||
set(TIME_ZONE_DATA_IMPLEMENTATION LibTimeZone/TimeZoneData.cpp)
|
||||
|
||||
set(TIME_ZONE_META_TARGET_PREFIX LibTimeZone_)
|
||||
|
||||
if (CMAKE_CURRENT_BINARY_DIR MATCHES ".*/LibTimeZone") # Serenity build.
|
||||
set(TIME_ZONE_DATA_HEADER TimeZoneData.h)
|
||||
set(TIME_ZONE_DATA_IMPLEMENTATION TimeZoneData.cpp)
|
||||
|
||||
set(TIME_ZONE_META_TARGET_PREFIX "")
|
||||
endif()
|
||||
|
||||
invoke_generator(
|
||||
"TimeZoneData"
|
||||
Lagom::GenerateTimeZoneData
|
||||
"${TZDB_VERSION_FILE}"
|
||||
"${TIME_ZONE_META_TARGET_PREFIX}"
|
||||
"${TIME_ZONE_DATA_HEADER}"
|
||||
"${TIME_ZONE_DATA_IMPLEMENTATION}"
|
||||
arguments "${TZDB_AFRICA_PATH}" "${TZDB_ANTARCTICA_PATH}" "${TZDB_ASIA_PATH}" "${TZDB_AUSTRALASIA_PATH}" "${TZDB_ETCETERA_PATH}" "${TZDB_EUROPE_PATH}" "${TZDB_NORTH_AMERICA_PATH}" "${TZDB_SOUTH_AMERICA_PATH}"
|
||||
)
|
||||
|
||||
set(TIME_ZONE_DATA_SOURCES
|
||||
${TIME_ZONE_DATA_HEADER}
|
||||
${TIME_ZONE_DATA_IMPLEMENTATION}
|
||||
)
|
||||
endif()
|
Loading…
Add table
Add a link
Reference in a new issue