mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 23:21:59 +00:00
Avoid dependency on system tzdata
This commit is contained in:
parent
0a9c49beee
commit
45b5afa131
@ -2,16 +2,19 @@
|
|||||||
|
|
||||||
#include <cctz/civil_time.h>
|
#include <cctz/civil_time.h>
|
||||||
#include <cctz/time_zone.h>
|
#include <cctz/time_zone.h>
|
||||||
|
#include <cctz/zone_info_source.h>
|
||||||
|
#include <common/unaligned.h>
|
||||||
#include <Poco/Exception.h>
|
#include <Poco/Exception.h>
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#define DATE_LUT_MIN 0
|
|
||||||
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
@ -47,7 +50,7 @@ DateLUTImpl::DateLUTImpl(const std::string & time_zone_)
|
|||||||
assert(inside_main);
|
assert(inside_main);
|
||||||
|
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
time_t start_of_day = DATE_LUT_MIN;
|
time_t start_of_day = 0;
|
||||||
|
|
||||||
cctz::time_zone cctz_time_zone;
|
cctz::time_zone cctz_time_zone;
|
||||||
if (!cctz::load_time_zone(time_zone, &cctz_time_zone))
|
if (!cctz::load_time_zone(time_zone, &cctz_time_zone))
|
||||||
@ -157,3 +160,70 @@ DateLUTImpl::DateLUTImpl(const std::string & time_zone_)
|
|||||||
years_months_lut[year_months_lut_index] = first_day_of_last_month;
|
years_months_lut[year_months_lut_index] = first_day_of_last_month;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Prefer to load timezones from blobs linked to the binary.
|
||||||
|
/// The blobs are provided by "tzdata" library.
|
||||||
|
/// This allows to avoid dependency on system tzdata.
|
||||||
|
namespace cctz_extension
|
||||||
|
{
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
class Source : public cctz::ZoneInfoSource
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Source(const char * data_, size_t size_) : data(data_), size(size_) {}
|
||||||
|
|
||||||
|
size_t Read(void * buf, size_t bytes) override
|
||||||
|
{
|
||||||
|
if (bytes > size)
|
||||||
|
bytes = size;
|
||||||
|
memcpy(buf, data, bytes);
|
||||||
|
data += bytes;
|
||||||
|
size -= bytes;
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Skip(size_t offset) override
|
||||||
|
{
|
||||||
|
if (offset <= size)
|
||||||
|
{
|
||||||
|
data += offset;
|
||||||
|
size -= offset;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
const char * data;
|
||||||
|
size_t size;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::unique_ptr<cctz::ZoneInfoSource> custom_factory(
|
||||||
|
const std::string & name,
|
||||||
|
const std::function<std::unique_ptr<cctz::ZoneInfoSource>(const std::string & name)> & fallback)
|
||||||
|
{
|
||||||
|
std::string name_replaced = name;
|
||||||
|
std::replace(name_replaced.begin(), name_replaced.end(), '/', '_');
|
||||||
|
std::replace(name_replaced.begin(), name_replaced.end(), '-', '_');
|
||||||
|
|
||||||
|
/// These are the names that are generated by "ld -r -b binary"
|
||||||
|
std::string symbol_name_data = "_binary_" + name_replaced + "_start";
|
||||||
|
std::string symbol_name_size = "_binary_" + name_replaced + "_size";
|
||||||
|
|
||||||
|
const void * sym_data = dlsym(RTLD_DEFAULT, symbol_name_data.c_str());
|
||||||
|
const void * sym_size = dlsym(RTLD_DEFAULT, symbol_name_size.c_str());
|
||||||
|
|
||||||
|
if (sym_data && sym_size)
|
||||||
|
return std::make_unique<Source>(static_cast<const char *>(sym_data), unalignedLoad<size_t>(&sym_size));
|
||||||
|
|
||||||
|
return fallback(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ZoneInfoSourceFactory zone_info_source_factory = custom_factory;
|
||||||
|
}
|
||||||
|
@ -23,6 +23,593 @@ if (USE_INTERNAL_CCTZ)
|
|||||||
# yes, need linux, because bsd check inside linux in time_zone_libc.cc:24
|
# yes, need linux, because bsd check inside linux in time_zone_libc.cc:24
|
||||||
target_compile_definitions (cctz PRIVATE __USE_BSD linux _XOPEN_SOURCE=600)
|
target_compile_definitions (cctz PRIVATE __USE_BSD linux _XOPEN_SOURCE=600)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
# Build a libray with embedded tzdata
|
||||||
|
|
||||||
|
set (TIMEZONES
|
||||||
|
Africa/Abidjan
|
||||||
|
Africa/Accra
|
||||||
|
Africa/Addis_Ababa
|
||||||
|
Africa/Algiers
|
||||||
|
Africa/Asmara
|
||||||
|
Africa/Asmera
|
||||||
|
Africa/Bamako
|
||||||
|
Africa/Bangui
|
||||||
|
Africa/Banjul
|
||||||
|
Africa/Bissau
|
||||||
|
Africa/Blantyre
|
||||||
|
Africa/Brazzaville
|
||||||
|
Africa/Bujumbura
|
||||||
|
Africa/Cairo
|
||||||
|
Africa/Casablanca
|
||||||
|
Africa/Ceuta
|
||||||
|
Africa/Conakry
|
||||||
|
Africa/Dakar
|
||||||
|
Africa/Dar_es_Salaam
|
||||||
|
Africa/Djibouti
|
||||||
|
Africa/Douala
|
||||||
|
Africa/El_Aaiun
|
||||||
|
Africa/Freetown
|
||||||
|
Africa/Gaborone
|
||||||
|
Africa/Harare
|
||||||
|
Africa/Johannesburg
|
||||||
|
Africa/Juba
|
||||||
|
Africa/Kampala
|
||||||
|
Africa/Khartoum
|
||||||
|
Africa/Kigali
|
||||||
|
Africa/Kinshasa
|
||||||
|
Africa/Lagos
|
||||||
|
Africa/Libreville
|
||||||
|
Africa/Lome
|
||||||
|
Africa/Luanda
|
||||||
|
Africa/Lubumbashi
|
||||||
|
Africa/Lusaka
|
||||||
|
Africa/Malabo
|
||||||
|
Africa/Maputo
|
||||||
|
Africa/Maseru
|
||||||
|
Africa/Mbabane
|
||||||
|
Africa/Mogadishu
|
||||||
|
Africa/Monrovia
|
||||||
|
Africa/Nairobi
|
||||||
|
Africa/Ndjamena
|
||||||
|
Africa/Niamey
|
||||||
|
Africa/Nouakchott
|
||||||
|
Africa/Ouagadougou
|
||||||
|
Africa/Porto-Novo
|
||||||
|
Africa/Sao_Tome
|
||||||
|
Africa/Timbuktu
|
||||||
|
Africa/Tripoli
|
||||||
|
Africa/Tunis
|
||||||
|
Africa/Windhoek
|
||||||
|
America/Adak
|
||||||
|
America/Anchorage
|
||||||
|
America/Anguilla
|
||||||
|
America/Antigua
|
||||||
|
America/Araguaina
|
||||||
|
America/Argentina/Buenos_Aires
|
||||||
|
America/Argentina/Catamarca
|
||||||
|
America/Argentina/ComodRivadavia
|
||||||
|
America/Argentina/Cordoba
|
||||||
|
America/Argentina/Jujuy
|
||||||
|
America/Argentina/La_Rioja
|
||||||
|
America/Argentina/Mendoza
|
||||||
|
America/Argentina/Rio_Gallegos
|
||||||
|
America/Argentina/Salta
|
||||||
|
America/Argentina/San_Juan
|
||||||
|
America/Argentina/San_Luis
|
||||||
|
America/Argentina/Tucuman
|
||||||
|
America/Argentina/Ushuaia
|
||||||
|
America/Aruba
|
||||||
|
America/Asuncion
|
||||||
|
America/Atikokan
|
||||||
|
America/Atka
|
||||||
|
America/Bahia
|
||||||
|
America/Bahia_Banderas
|
||||||
|
America/Barbados
|
||||||
|
America/Belem
|
||||||
|
America/Belize
|
||||||
|
America/Blanc-Sablon
|
||||||
|
America/Boa_Vista
|
||||||
|
America/Bogota
|
||||||
|
America/Boise
|
||||||
|
America/Buenos_Aires
|
||||||
|
America/Cambridge_Bay
|
||||||
|
America/Campo_Grande
|
||||||
|
America/Cancun
|
||||||
|
America/Caracas
|
||||||
|
America/Catamarca
|
||||||
|
America/Cayenne
|
||||||
|
America/Cayman
|
||||||
|
America/Chicago
|
||||||
|
America/Chihuahua
|
||||||
|
America/Coral_Harbour
|
||||||
|
America/Cordoba
|
||||||
|
America/Costa_Rica
|
||||||
|
America/Creston
|
||||||
|
America/Cuiaba
|
||||||
|
America/Curacao
|
||||||
|
America/Danmarkshavn
|
||||||
|
America/Dawson
|
||||||
|
America/Dawson_Creek
|
||||||
|
America/Denver
|
||||||
|
America/Detroit
|
||||||
|
America/Dominica
|
||||||
|
America/Edmonton
|
||||||
|
America/Eirunepe
|
||||||
|
America/El_Salvador
|
||||||
|
America/Ensenada
|
||||||
|
America/Fortaleza
|
||||||
|
America/Fort_Nelson
|
||||||
|
America/Fort_Wayne
|
||||||
|
America/Glace_Bay
|
||||||
|
America/Godthab
|
||||||
|
America/Goose_Bay
|
||||||
|
America/Grand_Turk
|
||||||
|
America/Grenada
|
||||||
|
America/Guadeloupe
|
||||||
|
America/Guatemala
|
||||||
|
America/Guayaquil
|
||||||
|
America/Guyana
|
||||||
|
America/Halifax
|
||||||
|
America/Havana
|
||||||
|
America/Hermosillo
|
||||||
|
America/Indiana/Indianapolis
|
||||||
|
America/Indiana/Knox
|
||||||
|
America/Indiana/Marengo
|
||||||
|
America/Indiana/Petersburg
|
||||||
|
America/Indianapolis
|
||||||
|
America/Indiana/Tell_City
|
||||||
|
America/Indiana/Vevay
|
||||||
|
America/Indiana/Vincennes
|
||||||
|
America/Indiana/Winamac
|
||||||
|
America/Inuvik
|
||||||
|
America/Iqaluit
|
||||||
|
America/Jamaica
|
||||||
|
America/Jujuy
|
||||||
|
America/Juneau
|
||||||
|
America/Kentucky/Louisville
|
||||||
|
America/Kentucky/Monticello
|
||||||
|
America/Knox_IN
|
||||||
|
America/Kralendijk
|
||||||
|
America/La_Paz
|
||||||
|
America/Lima
|
||||||
|
America/Los_Angeles
|
||||||
|
America/Louisville
|
||||||
|
America/Lower_Princes
|
||||||
|
America/Maceio
|
||||||
|
America/Managua
|
||||||
|
America/Manaus
|
||||||
|
America/Marigot
|
||||||
|
America/Martinique
|
||||||
|
America/Matamoros
|
||||||
|
America/Mazatlan
|
||||||
|
America/Mendoza
|
||||||
|
America/Menominee
|
||||||
|
America/Merida
|
||||||
|
America/Metlakatla
|
||||||
|
America/Mexico_City
|
||||||
|
America/Miquelon
|
||||||
|
America/Moncton
|
||||||
|
America/Monterrey
|
||||||
|
America/Montevideo
|
||||||
|
America/Montreal
|
||||||
|
America/Montserrat
|
||||||
|
America/Nassau
|
||||||
|
America/New_York
|
||||||
|
America/Nipigon
|
||||||
|
America/Nome
|
||||||
|
America/Noronha
|
||||||
|
America/North_Dakota/Beulah
|
||||||
|
America/North_Dakota/Center
|
||||||
|
America/North_Dakota/New_Salem
|
||||||
|
America/Ojinaga
|
||||||
|
America/Panama
|
||||||
|
America/Pangnirtung
|
||||||
|
America/Paramaribo
|
||||||
|
America/Phoenix
|
||||||
|
America/Port-au-Prince
|
||||||
|
America/Porto_Acre
|
||||||
|
America/Port_of_Spain
|
||||||
|
America/Porto_Velho
|
||||||
|
America/Puerto_Rico
|
||||||
|
America/Punta_Arenas
|
||||||
|
America/Rainy_River
|
||||||
|
America/Rankin_Inlet
|
||||||
|
America/Recife
|
||||||
|
America/Regina
|
||||||
|
America/Resolute
|
||||||
|
America/Rio_Branco
|
||||||
|
America/Rosario
|
||||||
|
America/Santa_Isabel
|
||||||
|
America/Santarem
|
||||||
|
America/Santiago
|
||||||
|
America/Santo_Domingo
|
||||||
|
America/Sao_Paulo
|
||||||
|
America/Scoresbysund
|
||||||
|
America/Shiprock
|
||||||
|
America/Sitka
|
||||||
|
America/St_Barthelemy
|
||||||
|
America/St_Johns
|
||||||
|
America/St_Kitts
|
||||||
|
America/St_Lucia
|
||||||
|
America/St_Thomas
|
||||||
|
America/St_Vincent
|
||||||
|
America/Swift_Current
|
||||||
|
America/Tegucigalpa
|
||||||
|
America/Thule
|
||||||
|
America/Thunder_Bay
|
||||||
|
America/Tijuana
|
||||||
|
America/Toronto
|
||||||
|
America/Tortola
|
||||||
|
America/Vancouver
|
||||||
|
America/Virgin
|
||||||
|
America/Whitehorse
|
||||||
|
America/Winnipeg
|
||||||
|
America/Yakutat
|
||||||
|
America/Yellowknife
|
||||||
|
Antarctica/Casey
|
||||||
|
Antarctica/Davis
|
||||||
|
Antarctica/DumontDUrville
|
||||||
|
Antarctica/Macquarie
|
||||||
|
Antarctica/Mawson
|
||||||
|
Antarctica/McMurdo
|
||||||
|
Antarctica/Palmer
|
||||||
|
Antarctica/Rothera
|
||||||
|
Antarctica/South_Pole
|
||||||
|
Antarctica/Syowa
|
||||||
|
Antarctica/Troll
|
||||||
|
Antarctica/Vostok
|
||||||
|
Arctic/Longyearbyen
|
||||||
|
Asia/Aden
|
||||||
|
Asia/Almaty
|
||||||
|
Asia/Amman
|
||||||
|
Asia/Anadyr
|
||||||
|
Asia/Aqtau
|
||||||
|
Asia/Aqtobe
|
||||||
|
Asia/Ashgabat
|
||||||
|
Asia/Ashkhabad
|
||||||
|
Asia/Atyrau
|
||||||
|
Asia/Baghdad
|
||||||
|
Asia/Bahrain
|
||||||
|
Asia/Baku
|
||||||
|
Asia/Bangkok
|
||||||
|
Asia/Barnaul
|
||||||
|
Asia/Beirut
|
||||||
|
Asia/Bishkek
|
||||||
|
Asia/Brunei
|
||||||
|
Asia/Calcutta
|
||||||
|
Asia/Chita
|
||||||
|
Asia/Choibalsan
|
||||||
|
Asia/Chongqing
|
||||||
|
Asia/Chungking
|
||||||
|
Asia/Colombo
|
||||||
|
Asia/Dacca
|
||||||
|
Asia/Damascus
|
||||||
|
Asia/Dhaka
|
||||||
|
Asia/Dili
|
||||||
|
Asia/Dubai
|
||||||
|
Asia/Dushanbe
|
||||||
|
Asia/Famagusta
|
||||||
|
Asia/Gaza
|
||||||
|
Asia/Harbin
|
||||||
|
Asia/Hebron
|
||||||
|
Asia/Ho_Chi_Minh
|
||||||
|
Asia/Hong_Kong
|
||||||
|
Asia/Hovd
|
||||||
|
Asia/Irkutsk
|
||||||
|
Asia/Istanbul
|
||||||
|
Asia/Jakarta
|
||||||
|
Asia/Jayapura
|
||||||
|
Asia/Jerusalem
|
||||||
|
Asia/Kabul
|
||||||
|
Asia/Kamchatka
|
||||||
|
Asia/Karachi
|
||||||
|
Asia/Kashgar
|
||||||
|
Asia/Kathmandu
|
||||||
|
Asia/Katmandu
|
||||||
|
Asia/Khandyga
|
||||||
|
Asia/Kolkata
|
||||||
|
Asia/Krasnoyarsk
|
||||||
|
Asia/Kuala_Lumpur
|
||||||
|
Asia/Kuching
|
||||||
|
Asia/Kuwait
|
||||||
|
Asia/Macao
|
||||||
|
Asia/Macau
|
||||||
|
Asia/Magadan
|
||||||
|
Asia/Makassar
|
||||||
|
Asia/Manila
|
||||||
|
Asia/Muscat
|
||||||
|
Asia/Nicosia
|
||||||
|
Asia/Novokuznetsk
|
||||||
|
Asia/Novosibirsk
|
||||||
|
Asia/Omsk
|
||||||
|
Asia/Oral
|
||||||
|
Asia/Phnom_Penh
|
||||||
|
Asia/Pontianak
|
||||||
|
Asia/Pyongyang
|
||||||
|
Asia/Qatar
|
||||||
|
Asia/Qostanay
|
||||||
|
Asia/Qyzylorda
|
||||||
|
Asia/Rangoon
|
||||||
|
Asia/Riyadh
|
||||||
|
Asia/Saigon
|
||||||
|
Asia/Sakhalin
|
||||||
|
Asia/Samarkand
|
||||||
|
Asia/Seoul
|
||||||
|
Asia/Shanghai
|
||||||
|
Asia/Singapore
|
||||||
|
Asia/Srednekolymsk
|
||||||
|
Asia/Taipei
|
||||||
|
Asia/Tashkent
|
||||||
|
Asia/Tbilisi
|
||||||
|
Asia/Tehran
|
||||||
|
Asia/Tel_Aviv
|
||||||
|
Asia/Thimbu
|
||||||
|
Asia/Thimphu
|
||||||
|
Asia/Tokyo
|
||||||
|
Asia/Tomsk
|
||||||
|
Asia/Ujung_Pandang
|
||||||
|
Asia/Ulaanbaatar
|
||||||
|
Asia/Ulan_Bator
|
||||||
|
Asia/Urumqi
|
||||||
|
Asia/Ust-Nera
|
||||||
|
Asia/Vientiane
|
||||||
|
Asia/Vladivostok
|
||||||
|
Asia/Yakutsk
|
||||||
|
Asia/Yangon
|
||||||
|
Asia/Yekaterinburg
|
||||||
|
Asia/Yerevan
|
||||||
|
Atlantic/Azores
|
||||||
|
Atlantic/Bermuda
|
||||||
|
Atlantic/Canary
|
||||||
|
Atlantic/Cape_Verde
|
||||||
|
Atlantic/Faeroe
|
||||||
|
Atlantic/Faroe
|
||||||
|
Atlantic/Jan_Mayen
|
||||||
|
Atlantic/Madeira
|
||||||
|
Atlantic/Reykjavik
|
||||||
|
Atlantic/South_Georgia
|
||||||
|
Atlantic/Stanley
|
||||||
|
Atlantic/St_Helena
|
||||||
|
Australia/ACT
|
||||||
|
Australia/Adelaide
|
||||||
|
Australia/Brisbane
|
||||||
|
Australia/Broken_Hill
|
||||||
|
Australia/Canberra
|
||||||
|
Australia/Currie
|
||||||
|
Australia/Darwin
|
||||||
|
Australia/Eucla
|
||||||
|
Australia/Hobart
|
||||||
|
Australia/LHI
|
||||||
|
Australia/Lindeman
|
||||||
|
Australia/Lord_Howe
|
||||||
|
Australia/Melbourne
|
||||||
|
Australia/North
|
||||||
|
Australia/NSW
|
||||||
|
Australia/Perth
|
||||||
|
Australia/Queensland
|
||||||
|
Australia/South
|
||||||
|
Australia/Sydney
|
||||||
|
Australia/Tasmania
|
||||||
|
Australia/Victoria
|
||||||
|
Australia/West
|
||||||
|
Australia/Yancowinna
|
||||||
|
Brazil/Acre
|
||||||
|
Brazil/DeNoronha
|
||||||
|
Brazil/East
|
||||||
|
Brazil/West
|
||||||
|
Canada/Atlantic
|
||||||
|
Canada/Central
|
||||||
|
Canada/Eastern
|
||||||
|
Canada/Mountain
|
||||||
|
Canada/Newfoundland
|
||||||
|
Canada/Pacific
|
||||||
|
Canada/Saskatchewan
|
||||||
|
Canada/Yukon
|
||||||
|
CET
|
||||||
|
Chile/Continental
|
||||||
|
Chile/EasterIsland
|
||||||
|
CST6CDT
|
||||||
|
Cuba
|
||||||
|
EET
|
||||||
|
Egypt
|
||||||
|
Eire
|
||||||
|
EST
|
||||||
|
EST5EDT
|
||||||
|
Etc/GMT
|
||||||
|
Etc/Greenwich
|
||||||
|
Etc/UCT
|
||||||
|
Etc/Universal
|
||||||
|
Etc/UTC
|
||||||
|
Etc/Zulu
|
||||||
|
Europe/Amsterdam
|
||||||
|
Europe/Andorra
|
||||||
|
Europe/Astrakhan
|
||||||
|
Europe/Athens
|
||||||
|
Europe/Belfast
|
||||||
|
Europe/Belgrade
|
||||||
|
Europe/Berlin
|
||||||
|
Europe/Bratislava
|
||||||
|
Europe/Brussels
|
||||||
|
Europe/Bucharest
|
||||||
|
Europe/Budapest
|
||||||
|
Europe/Busingen
|
||||||
|
Europe/Chisinau
|
||||||
|
Europe/Copenhagen
|
||||||
|
Europe/Dublin
|
||||||
|
Europe/Gibraltar
|
||||||
|
Europe/Guernsey
|
||||||
|
Europe/Helsinki
|
||||||
|
Europe/Isle_of_Man
|
||||||
|
Europe/Istanbul
|
||||||
|
Europe/Jersey
|
||||||
|
Europe/Kaliningrad
|
||||||
|
Europe/Kiev
|
||||||
|
Europe/Kirov
|
||||||
|
Europe/Lisbon
|
||||||
|
Europe/Ljubljana
|
||||||
|
Europe/London
|
||||||
|
Europe/Luxembourg
|
||||||
|
Europe/Madrid
|
||||||
|
Europe/Malta
|
||||||
|
Europe/Mariehamn
|
||||||
|
Europe/Minsk
|
||||||
|
Europe/Monaco
|
||||||
|
Europe/Moscow
|
||||||
|
Europe/Nicosia
|
||||||
|
Europe/Oslo
|
||||||
|
Europe/Paris
|
||||||
|
Europe/Podgorica
|
||||||
|
Europe/Prague
|
||||||
|
Europe/Riga
|
||||||
|
Europe/Rome
|
||||||
|
Europe/Samara
|
||||||
|
Europe/San_Marino
|
||||||
|
Europe/Sarajevo
|
||||||
|
Europe/Saratov
|
||||||
|
Europe/Simferopol
|
||||||
|
Europe/Skopje
|
||||||
|
Europe/Sofia
|
||||||
|
Europe/Stockholm
|
||||||
|
Europe/Tallinn
|
||||||
|
Europe/Tirane
|
||||||
|
Europe/Tiraspol
|
||||||
|
Europe/Ulyanovsk
|
||||||
|
Europe/Uzhgorod
|
||||||
|
Europe/Vaduz
|
||||||
|
Europe/Vatican
|
||||||
|
Europe/Vienna
|
||||||
|
Europe/Vilnius
|
||||||
|
Europe/Volgograd
|
||||||
|
Europe/Warsaw
|
||||||
|
Europe/Zagreb
|
||||||
|
Europe/Zaporozhye
|
||||||
|
Europe/Zurich
|
||||||
|
Factory
|
||||||
|
GB
|
||||||
|
GB-Eire
|
||||||
|
GMT
|
||||||
|
GMT0
|
||||||
|
Greenwich
|
||||||
|
Hongkong
|
||||||
|
HST
|
||||||
|
Iceland
|
||||||
|
Indian/Antananarivo
|
||||||
|
Indian/Chagos
|
||||||
|
Indian/Christmas
|
||||||
|
Indian/Cocos
|
||||||
|
Indian/Comoro
|
||||||
|
Indian/Kerguelen
|
||||||
|
Indian/Mahe
|
||||||
|
Indian/Maldives
|
||||||
|
Indian/Mauritius
|
||||||
|
Indian/Mayotte
|
||||||
|
Indian/Reunion
|
||||||
|
Iran
|
||||||
|
Israel
|
||||||
|
Jamaica
|
||||||
|
Japan
|
||||||
|
Kwajalein
|
||||||
|
Libya
|
||||||
|
MET
|
||||||
|
Mexico/BajaNorte
|
||||||
|
Mexico/BajaSur
|
||||||
|
Mexico/General
|
||||||
|
MST
|
||||||
|
MST7MDT
|
||||||
|
Navajo
|
||||||
|
NZ
|
||||||
|
NZ-CHAT
|
||||||
|
Pacific/Apia
|
||||||
|
Pacific/Auckland
|
||||||
|
Pacific/Bougainville
|
||||||
|
Pacific/Chatham
|
||||||
|
Pacific/Chuuk
|
||||||
|
Pacific/Easter
|
||||||
|
Pacific/Efate
|
||||||
|
Pacific/Enderbury
|
||||||
|
Pacific/Fakaofo
|
||||||
|
Pacific/Fiji
|
||||||
|
Pacific/Funafuti
|
||||||
|
Pacific/Galapagos
|
||||||
|
Pacific/Gambier
|
||||||
|
Pacific/Guadalcanal
|
||||||
|
Pacific/Guam
|
||||||
|
Pacific/Honolulu
|
||||||
|
Pacific/Johnston
|
||||||
|
Pacific/Kiritimati
|
||||||
|
Pacific/Kosrae
|
||||||
|
Pacific/Kwajalein
|
||||||
|
Pacific/Majuro
|
||||||
|
Pacific/Marquesas
|
||||||
|
Pacific/Midway
|
||||||
|
Pacific/Nauru
|
||||||
|
Pacific/Niue
|
||||||
|
Pacific/Norfolk
|
||||||
|
Pacific/Noumea
|
||||||
|
Pacific/Pago_Pago
|
||||||
|
Pacific/Palau
|
||||||
|
Pacific/Pitcairn
|
||||||
|
Pacific/Pohnpei
|
||||||
|
Pacific/Ponape
|
||||||
|
Pacific/Port_Moresby
|
||||||
|
Pacific/Rarotonga
|
||||||
|
Pacific/Saipan
|
||||||
|
Pacific/Samoa
|
||||||
|
Pacific/Tahiti
|
||||||
|
Pacific/Tarawa
|
||||||
|
Pacific/Tongatapu
|
||||||
|
Pacific/Truk
|
||||||
|
Pacific/Wake
|
||||||
|
Pacific/Wallis
|
||||||
|
Pacific/Yap
|
||||||
|
Poland
|
||||||
|
Portugal
|
||||||
|
PRC
|
||||||
|
PST8PDT
|
||||||
|
ROC
|
||||||
|
ROK
|
||||||
|
Singapore
|
||||||
|
Turkey
|
||||||
|
UCT
|
||||||
|
Universal
|
||||||
|
US/Alaska
|
||||||
|
US/Aleutian
|
||||||
|
US/Arizona
|
||||||
|
US/Central
|
||||||
|
US/Eastern
|
||||||
|
US/East-Indiana
|
||||||
|
US/Hawaii
|
||||||
|
US/Indiana-Starke
|
||||||
|
US/Michigan
|
||||||
|
US/Mountain
|
||||||
|
US/Pacific
|
||||||
|
US/Samoa
|
||||||
|
UTC
|
||||||
|
WET
|
||||||
|
W-SU
|
||||||
|
Zulu)
|
||||||
|
|
||||||
|
set(TZDIR ${LIBRARY_DIR}/testdata/zoneinfo)
|
||||||
|
set(TZ_OBJS)
|
||||||
|
|
||||||
|
foreach(TIMEZONE ${TIMEZONES})
|
||||||
|
string(REPLACE "/" "_" TIMEZONE_ID ${TIMEZONE})
|
||||||
|
set(TZ_OBJ ${TIMEZONE_ID}.o)
|
||||||
|
set(TZ_OBJS ${TZ_OBJS} ${TZ_OBJ})
|
||||||
|
|
||||||
|
# https://stackoverflow.com/questions/14776463/compile-and-add-an-object-file-from-a-binary-with-cmake
|
||||||
|
add_custom_command(OUTPUT ${TZ_OBJ}
|
||||||
|
COMMAND cd ${TZDIR} && ld -r -b binary -o ${CMAKE_CURRENT_BINARY_DIR}/${TZ_OBJ} ${TIMEZONE}
|
||||||
|
COMMAND objcopy --rename-section .data=.rodata,alloc,load,readonly,data,contents
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/${TZ_OBJ} ${CMAKE_CURRENT_BINARY_DIR}/${TZ_OBJ})
|
||||||
|
|
||||||
|
set_source_files_properties(${TZ_OBJ} PROPERTIES EXTERNAL_OBJECT true GENERATED true)
|
||||||
|
endforeach(TIMEZONE)
|
||||||
|
|
||||||
|
add_library(tzdata STATIC ${TZ_OBJS})
|
||||||
|
target_link_libraries(cctz -Wl,--whole-archive tzdata -Wl,--no-whole-archive) # whole-archive prevents symbols from being discarded
|
||||||
|
|
||||||
else ()
|
else ()
|
||||||
find_library (LIBRARY_CCTZ cctz)
|
find_library (LIBRARY_CCTZ cctz)
|
||||||
find_path (INCLUDE_CCTZ NAMES cctz/civil_time.h)
|
find_path (INCLUDE_CCTZ NAMES cctz/civil_time.h)
|
||||||
|
Loading…
Reference in New Issue
Block a user