mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
sys-libs/timezone-data: fix musl issues
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
181
sys-libs/timezone-data/files/timezone-data-2022f-musl.patch
Normal file
181
sys-libs/timezone-data/files/timezone-data-2022f-musl.patch
Normal file
@@ -0,0 +1,181 @@
|
||||
https://github.com/eggert/tz/commit/a91830b783db3bb481930c67914d3c16b821f717
|
||||
https://github.com/eggert/tz/commit/dbe87fe421f76a3d1ac31082868ce60dfcbdefc4
|
||||
https://github.com/eggert/tz/commit/b037132599996358fe4774912b7405db0f5b0ee1
|
||||
https://github.com/eggert/tz/commit/317cc2c05a0acd02597e9db2b97af078630c1dde
|
||||
https://github.com/eggert/tz/commit/f4808ee8fa61b0df82337e8f0fa02ca3db598cb8
|
||||
|
||||
From a91830b783db3bb481930c67914d3c16b821f717 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Fri, 28 Oct 2022 22:55:10 -0700
|
||||
Subject: [PATCH] Fix tzalloc bug on platforms lacking tm_zone
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Problem reported by Đoàn Trần Công Danh in:
|
||||
https://mm.icann.org/pipermail/tz/2022-October/032153.html
|
||||
* zdump.c (tzalloc) [!USE_LOCALTIME_RZ && HAVE_SETENV]:
|
||||
Return a nonnull pointer.
|
||||
--- a/zdump.c
|
||||
+++ b/zdump.c
|
||||
@@ -234,7 +234,7 @@ tzalloc(char const *val)
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
tzset();
|
||||
- return NULL;
|
||||
+ return &progname; /* Any valid non-null char ** will do. */
|
||||
# else
|
||||
enum { TZeqlen = 3 };
|
||||
static char const TZeq[TZeqlen] = "TZ=";
|
||||
|
||||
From dbe87fe421f76a3d1ac31082868ce60dfcbdefc4 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Fri, 28 Oct 2022 23:22:26 -0700
|
||||
Subject: [PATCH] Port struct tm guessing to musl
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Prompted by report from Đoàn Trần Công Danh in:
|
||||
https://mm.icann.org/pipermail/tz/2022-October/032153.html
|
||||
* private.h (TM_GMTOFF, TM_ZONE): By default, assume they
|
||||
work on musl, which #defines __tm_zone.
|
||||
--- a/private.h
|
||||
+++ b/private.h
|
||||
@@ -613,6 +613,7 @@ time_t posix2time(time_t);
|
||||
/* Infer TM_ZONE on systems where this information is known, but suppress
|
||||
guessing if NO_TM_ZONE is defined. Similarly for TM_GMTOFF. */
|
||||
#if (defined __GLIBC__ \
|
||||
+ || defined __tm_zone /* musl */ \
|
||||
|| defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ \
|
||||
|| (defined __APPLE__ && defined __MACH__))
|
||||
# if !defined TM_GMTOFF && !defined NO_TM_GMTOFF
|
||||
|
||||
From b037132599996358fe4774912b7405db0f5b0ee1 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Fri, 28 Oct 2022 23:52:59 -0700
|
||||
Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20assume=20nonempty=20argv?=
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Don’t dump core if argv[0] is NULL, which is allowed on
|
||||
GNU/Linux if the invoker is sufficiently perverse.
|
||||
* zdump.c (progname): Now char const *, so that it can be given
|
||||
the address of a string constant.
|
||||
(tzalloc): Use optarg, not progname, since progname’s type is no
|
||||
longer correct.
|
||||
* zdump.c, zic.c (main): Initialize progname to non-null.
|
||||
--- a/zdump.c
|
||||
+++ b/zdump.c
|
||||
@@ -84,7 +84,7 @@ static time_t const absolute_max_time =
|
||||
? (((time_t) 1 << atime_shift) - 1 + ((time_t) 1 << atime_shift))
|
||||
: -1);
|
||||
static int longest;
|
||||
-static char * progname;
|
||||
+static char const *progname;
|
||||
static bool warned;
|
||||
static bool errout;
|
||||
|
||||
@@ -234,7 +234,7 @@ tzalloc(char const *val)
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
tzset();
|
||||
- return &progname; /* Any valid non-null char ** will do. */
|
||||
+ return &optarg; /* Any valid non-null char ** will do. */
|
||||
# else
|
||||
enum { TZeqlen = 3 };
|
||||
static char const TZeq[TZeqlen] = "TZ=";
|
||||
@@ -463,7 +463,7 @@ main(int argc, char *argv[])
|
||||
# endif /* defined TEXTDOMAINDIR */
|
||||
textdomain(TZ_DOMAIN);
|
||||
#endif /* HAVE_GETTEXT */
|
||||
- progname = argv[0];
|
||||
+ progname = argv[0] ? argv[0] : "zdump";
|
||||
for (i = 1; i < argc; ++i)
|
||||
if (strcmp(argv[i], "--version") == 0) {
|
||||
printf("zdump %s%s\n", PKGVERSION, TZVERSION);
|
||||
--- a/zic.c
|
||||
+++ b/zic.c
|
||||
@@ -943,7 +943,7 @@ main(int argc, char **argv)
|
||||
textdomain(TZ_DOMAIN);
|
||||
#endif /* HAVE_GETTEXT */
|
||||
main_argv = argv;
|
||||
- progname = argv[0];
|
||||
+ progname = argv[0] ? argv[0] : "zic";
|
||||
if (TYPE_BIT(zic_t) < 64) {
|
||||
fprintf(stderr, "%s: %s\n", progname,
|
||||
_("wild compilation-time specification of zic_t"));
|
||||
|
||||
From 317cc2c05a0acd02597e9db2b97af078630c1dde Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Mon, 31 Oct 2022 12:41:48 -0700
|
||||
Subject: [PATCH] Port better to old Linux kernels
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Problem reported by Igor Ivanov in:
|
||||
https://mm.icann.org/pipermail/tz/2022-October/032192.html
|
||||
* zic.c (get_rand_u64): Don’t use clock_gettime; it’s too much of
|
||||
a configuration hassle.
|
||||
---
|
||||
zic.c | 15 +++------------
|
||||
2 files changed, 5 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/zic.c b/zic.c
|
||||
index a85f2a4c..14393a3d 100644
|
||||
--- a/zic.c
|
||||
+++ b/zic.c
|
||||
@@ -1210,21 +1210,12 @@ get_rand_u64(void)
|
||||
#endif
|
||||
|
||||
/* getrandom didn't work, so fall back on portable code that is
|
||||
- not the best because the seed doesn't necessarily have enough bits,
|
||||
- the seed isn't cryptographically random on platforms lacking
|
||||
- getrandom, and 'rand' might not be cryptographically secure. */
|
||||
+ not the best because the seed isn't cryptographically random and
|
||||
+ 'rand' might not be cryptographically secure. */
|
||||
{
|
||||
static bool initialized;
|
||||
if (!initialized) {
|
||||
- unsigned seed;
|
||||
-#ifdef CLOCK_REALTIME
|
||||
- struct timespec now;
|
||||
- clock_gettime (CLOCK_REALTIME, &now);
|
||||
- seed = now.tv_sec ^ now.tv_nsec;
|
||||
-#else
|
||||
- seed = time(NULL);
|
||||
-#endif
|
||||
- srand(seed);
|
||||
+ srand(time(NULL));
|
||||
initialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
From f4808ee8fa61b0df82337e8f0fa02ca3db598cb8 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Eggert <eggert@cs.ucla.edu>
|
||||
Date: Fri, 4 Nov 2022 19:57:00 -0700
|
||||
Subject: [PATCH] Fix unlikely conversion bug in zic
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
* zic.c (puttzcode): Arg is zic_t, not int_fast32_t. This fixes a
|
||||
portability bug on platforms where int_fast32_t is a 32-bit ones’
|
||||
complement or signed-magnitude integer, and where the argument is
|
||||
-2**31 before conversion to int_fast32_t. Although I don’t know
|
||||
of any such platforms, the C standard allows them.
|
||||
--- a/zic.c
|
||||
+++ b/zic.c
|
||||
@@ -2216,7 +2216,7 @@ convert64(uint_fast64_t val, char *buf)
|
||||
}
|
||||
|
||||
static void
|
||||
-puttzcode(const int_fast32_t val, FILE *const fp)
|
||||
+puttzcode(zic_t val, FILE *fp)
|
||||
{
|
||||
char buf[4];
|
||||
|
||||
|
||||
201
sys-libs/timezone-data/timezone-data-2022f-r1.ebuild
Normal file
201
sys-libs/timezone-data/timezone-data-2022f-r1.ebuild
Normal file
@@ -0,0 +1,201 @@
|
||||
# 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(+)]
|
||||
"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/${P}-musl.patch
|
||||
)
|
||||
|
||||
src_unpack() {
|
||||
mkdir "${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"
|
||||
|
||||
if tc-is-cross-compiler ; then
|
||||
cp -pR "${S}" "${S}"-native || die
|
||||
fi
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user