1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
|
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit toolchain-funcs flag-o-matic
MY_CODE_VER=${PV}
MY_DATA_VER=${PV}
DESCRIPTION="Timezone data (/usr/share/zoneinfo) and utilities (tzselect/zic/zdump)"
HOMEPAGE="https://www.iana.org/time-zones"
SRC_URI="https://www.iana.org/time-zones/repository/releases/tzdata${MY_DATA_VER}.tar.gz
https://www.iana.org/time-zones/repository/releases/tzcode${MY_CODE_VER}.tar.gz"
LICENSE="BSD public-domain"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
IUSE="nls leaps-timezone zic-slim"
DEPEND="nls? ( virtual/libintl )"
RDEPEND="
${DEPEND}
!sys-libs/glibc[vanilla(+)]
"
src_unpack() {
mkdir -p "${S}" && cd "${S}" || die
default
}
src_prepare() {
default
# check_web contacts validator.w3.org
sed -i -e 's/check_tables check_web/check_tables/g' \
Makefile || die "Failed to disable check_web"
tc-is-cross-compiler && cp -pR "${S}" "${S}"-native
}
src_configure() {
tc-export CC
# bug #471102
append-lfs-flags
if use elibc_Darwin ; then
# bug #138251
append-cppflags -DSTD_INSPIRED
fi
append-cppflags -DHAVE_GETTEXT=$(usex nls 1 0) -DTZ_DOMAIN='\"libc\"'
# Upstream default is 'slim', but it breaks quite a few programs
# that parse /etc/localtime directly: bug #747538.
append-cppflags -DZIC_BLOAT_DEFAULT='\"'$(usex zic-slim slim fat)'\"'
LDLIBS=""
if use nls ; then
# See if an external libintl is available. bug #154181, bug #578424
local c="${T}/test"
echo 'main(){}' > "${c}.c" || die
if $(tc-getCC) ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} "${c}.c" -o "${c}" -lintl 2>/dev/null ; then
LDLIBS+=" -lintl"
fi
fi
}
_emake() {
emake \
REDO=$(usex leaps-timezone posix_right posix_only) \
TOPDIR="${EPREFIX}" \
ZICDIR='$(TOPDIR)/usr/bin' \
"$@"
}
src_compile() {
_emake \
AR="$(tc-getAR)" \
cc="$(tc-getCC)" \
RANLIB="$(tc-getRANLIB)" \
CFLAGS="${CFLAGS} -std=gnu99 ${CPPFLAGS}" \
LDFLAGS="${LDFLAGS}" \
LDLIBS="${LDLIBS}"
if tc-is-cross-compiler ; then
_emake -C "${S}"-native \
AR="$(tc-getBUILD_AR)" \
cc="$(tc-getBUILD_CC)" \
RANLIB="$(tc-getBUILD_RANLIB)" \
CFLAGS="${BUILD_CFLAGS} ${BUILD_CPPFLAGS}" \
LDFLAGS="${BUILD_LDFLAGS}" \
LDLIBS="${LDLIBS}" \
zic
fi
}
src_test() {
# VALIDATE_ENV is used for extended/web based tests. Punt on them.
emake check VALIDATE_ENV=true
}
src_install() {
local zic=""
tc-is-cross-compiler && zic="zic=${S}-native/zic"
_emake install ${zic} DESTDIR="${D}" LIBDIR="/nukeit"
rm -rf "${D}/nukeit" "${ED}/etc" || die
insinto /usr/share/zoneinfo
doins "${S}"/leap-seconds.list
# Delete man pages installed by man-pages package.
rm "${ED}"/usr/share/man/man5/tzfile.5* "${ED}"/usr/share/man/man8/{tzselect,zdump,zic}.8 || die
dodoc CONTRIBUTING README NEWS *.html
}
get_TIMEZONE() {
local tz src="${EROOT}/etc/timezone"
if [[ -e ${src} ]] ; then
tz=$(sed -e 's:#.*::' -e 's:[[:space:]]*::g' -e '/^$/d' "${src}")
else
tz="FOOKABLOIE"
fi
[[ -z ${tz} ]] && return 1 || echo "${tz}"
}
pkg_preinst() {
local tz=$(get_TIMEZONE)
if [[ ${tz} == right/* || ${tz} == posix/* ]] ; then
eerror "The right & posix subdirs are no longer installed as subdirs -- they have been"
eerror "relocated to match upstream paths as sibling paths. Further, posix/xxx is the"
eerror "same as xxx, so you should simply drop the posix/ prefix. You also should not"
eerror "be using right/xxx for the system timezone as it breaks programs."
die "Please fix your timezone setting"
fi
# Trim the symlink by hand to avoid portage's automatic protection checks.
rm -f "${EROOT}"/usr/share/zoneinfo/posix
if has_version "<=${CATEGORY}/${PN}-2015c" ; then
elog "Support for accessing posix/ and right/ directly has been dropped to match"
elog "upstream. There is no need to set TZ=posix/xxx as it is the same as TZ=xxx."
elog "For TZ=right/, you can use TZ=../zoneinfo-leaps/xxx instead. See this post"
elog "for details: https://mm.icann.org/pipermail/tz/2015-February/022024.html"
fi
}
configure_tz_data() {
# Make sure the /etc/localtime file does not get stale, bug #127899
local tz src="${EROOT}/etc/timezone" etc_lt="${EROOT}/etc/localtime"
# If it's a symlink, assume the user knows what they're doing and
# they're managing it themselves, bug #511474
if [[ -L "${etc_lt}" ]] ; then
einfo "Assuming your ${etc_lt} symlink is what you want; skipping update."
return 0
fi
if ! tz=$(get_TIMEZONE) ; then
einfo "Assuming your empty ${src} file is what you want; skipping update."
return 0
fi
if [[ "${tz}" == "FOOKABLOIE" ]] ; then
einfo "You do not have a timezone set in ${src}; skipping update."
return 0
fi
local tzpath="${EROOT}/usr/share/zoneinfo/${tz}"
if [[ ! -e ${tzpath} ]]; then
ewarn "The timezone specified in ${src} is not valid."
return 1
fi
if [[ -f ${etc_lt} ]]; then
# If a regular file already exists, copy over it.
ewarn "Found a regular file at ${etc_lt}."
ewarn "Some software may expect a symlink instead."
ewarn "You may convert it to a symlink by removing the file and running:"
ewarn " emerge --config sys-libs/timezone-data"
einfo "Copying ${tzpath} to ${etc_lt}."
cp -f "${tzpath}" "${etc_lt}"
else
# Otherwise, create a symlink and remove the timezone file.
tzpath="../usr/share/zoneinfo/${tz}"
einfo "Linking ${tzpath} at ${etc_lt}."
if ln -snf "${tzpath}" "${etc_lt}"; then
einfo "Removing ${src}."
rm -f "${src}"
fi
fi
}
pkg_config() {
configure_tz_data
}
pkg_postinst() {
configure_tz_data
}
|