Sync from SUSE:SLFO:Main icu revision e1a65922e1cf4edfcec59924a3a644c3

This commit is contained in:
Adrian Schröter 2024-05-03 13:40:42 +02:00
commit 83ed356db7
15 changed files with 3070 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

4
baselibs.conf Normal file
View File

@ -0,0 +1,4 @@
libicu73
libicu-devel
requires -libicu-<targettype>
requires "libicu73-<targettype> = <version>"

View File

@ -0,0 +1,33 @@
From: rguenther@suse.com
References: http://bugzilla.opensuse.org/1030253
Avoid FixedPrecision::initVisibleDigits failure on i586 with GCC 7.
---
source/test/intltest/dcfmapts.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
Index: icu/source/test/intltest/dcfmapts.cpp
===================================================================
--- icu.orig/source/test/intltest/dcfmapts.cpp
+++ icu/source/test/intltest/dcfmapts.cpp
@@ -875,7 +875,8 @@ void IntlTestDecimalFormatAPI::TestFixed
ASSERT_EQUAL(22, fd.getPluralOperand(PLURAL_OPERAND_V));
ASSERT_EQUAL(1234567890123456789LL, fd.getPluralOperand(PLURAL_OPERAND_F));
ASSERT_EQUAL(1234567890123456789LL, fd.getPluralOperand(PLURAL_OPERAND_T));
- ASSERT_EQUAL(345678901234567890LL, fd.getPluralOperand(PLURAL_OPERAND_I));
+ volatile double xxa = fd.getPluralOperand(PLURAL_OPERAND_I);
+ ASSERT_EQUAL(345678901234567890LL, xxa);
ASSERT_EQUAL(false, fd.hasIntegerValue());
ASSERT_EQUAL(false, fd.isNegative());
@@ -970,7 +971,8 @@ void IntlTestDecimalFormatAPI::TestFixed
ASSERT_EQUAL(0, fd.getPluralOperand(PLURAL_OPERAND_T));
// note: going through DigitList path to FixedDecimal, which is trimming
// int64_t fields to 18 digits. See ticket Ticket #10374
- ASSERT_EQUAL(223372036854775807LL, fd.getPluralOperand(PLURAL_OPERAND_I));
+ volatile double xxb = fd.getPluralOperand(PLURAL_OPERAND_I);
+ ASSERT_EQUAL(223372036854775807LL, xxb);
ASSERT_EQUAL(true, fd.hasIntegerValue());
ASSERT_EQUAL(false, fd.isNegative());

64
icu-error-reporting.diff Normal file
View File

@ -0,0 +1,64 @@
Date: 2014-08-13 15:39:48.523887951 +0200
From: Jan Engelhardt <jengelh@inai.de>
Error messages are totally useless without the actual error cause!
---
source/tools/toolutil/package.cpp | 5 +++--
source/tools/toolutil/writesrc.cpp | 6 ++++--
2 files changed, 7 insertions(+), 4 deletions(-)
Index: icu/source/tools/toolutil/package.cpp
===================================================================
--- icu.orig/source/tools/toolutil/package.cpp
+++ icu/source/tools/toolutil/package.cpp
@@ -35,6 +35,7 @@
#include "package.h"
#include "cmemory.h"
+#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -748,7 +749,7 @@ Package::writePackage(const char *filena
// create the file and write its contents
file=fopen(filename, "wb");
if(file==nullptr) {
- fprintf(stderr, "icupkg: unable to create file \"%s\"\n", filename);
+ fprintf(stderr, "icupkg: unable to create file \"%s\": %s\n", filename, strerror(errno));
exit(U_FILE_ACCESS_ERROR);
}
@@ -1169,7 +1170,7 @@ Package::extractItem(const char *filesPa
makeFullFilenameAndDirs(filesPath, outName, filename, (int32_t)sizeof(filename));
file=fopen(filename, "wb");
if(file==nullptr) {
- fprintf(stderr, "icupkg: unable to create file \"%s\"\n", filename);
+ fprintf(stderr, "icupkg: unable to create file \"%s\": %s\n", filename, strerror(errno));
exit(U_FILE_ACCESS_ERROR);
}
fileLength=(int32_t)fwrite(pItem->data, 1, pItem->length, file);
Index: icu/source/tools/toolutil/writesrc.cpp
===================================================================
--- icu.orig/source/tools/toolutil/writesrc.cpp
+++ icu/source/tools/toolutil/writesrc.cpp
@@ -18,7 +18,9 @@
* Helper functions for writing source code for data.
*/
+#include <errno.h>
#include <stdio.h>
+#include <string.h>
#include <time.h>
// The C99 standard suggested that C++ implementations not define PRId64 etc. constants
@@ -75,8 +77,8 @@ usrc_createWithoutHeader(const char *pat
if (f==nullptr) {
fprintf(
stderr,
- "usrc_create(%s, %s): unable to create file\n",
- path!=nullptr ? path : "", filename);
+ "usrc_create(%s, %s): unable to create file: %s\n",
+ path!=nullptr ? path : "", filename, strerror(errno));
}
return f;
}

View File

@ -0,0 +1,53 @@
From: Jan Engelhardt <jengelh@inai.de>
Date: 2013-06-28 12:54:31.002040372 +0200
build: fix abort of install procedure with packaging=files
When ./configure --with-data-packaging=files, make install aborts
because the previous developer did not test it with a normal
user account/DESTDIR install.
make[1]: Entering directory `/home/abuild/rpmbuild/BUILD/icu/source/data'
LD_LIBRARY_PATH=../stubdata:../tools/ctestfw:../lib:$LD_LIBRARY_PATH ../bin/pkgdata -O ../data/icupkg.inc -q -c -s /home/abuild/rpmbuild/BUILD/icu/source/data/out/build/icudt51l -d ./out -e icudt51 -T ./out/tmp -p icudt51l -m files -r 51.2 ./out/tmp/icudata.lst
/bin/sh ../mkinstalldirs /home/abuild/rpmbuild/BUILDROOT/icu-51.2-0.x86_64/usr/share/icu/51.2
mkdir /home/abuild/rpmbuild/BUILDROOT/icu-51.2-0.x86_64/usr/share/icu
mkdir /home/abuild/rpmbuild/BUILDROOT/icu-51.2-0.x86_64/usr/share/icu/51.2
/bin/sh ../mkinstalldirs /usr/share/icu/51.2/icudt51l
mkdir /usr/share/icu
mkdir: cannot create directory '/usr/share/icu': Permission denied
---
source/data/Makefile.in | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
Index: icu/source/data/Makefile.in
===================================================================
--- icu.orig/source/data/Makefile.in
+++ icu/source/data/Makefile.in
@@ -178,16 +178,16 @@ endif
install-local: $(PKGDATA_LIST) ./icupkg.inc packagedata $(OS390INSTALL)
$(MKINSTALLDIRS) $(TMPDATADIR) $(DESTDIR)$(ICUPKGDATA_DIR)
ifeq ($(PKGDATA_MODE),files)
- $(MKINSTALLDIRS) $(ICUPKGDATA_DIR)/$(ICUDATA_NAME)
- $(MKINSTALLDIRS) $(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(CURR_TREE)
- $(MKINSTALLDIRS) $(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(LANG_TREE)
- $(MKINSTALLDIRS) $(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(REGION_TREE)
- $(MKINSTALLDIRS) $(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(ZONE_TREE)
- $(MKINSTALLDIRS) $(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(UNIT_TREE)
- $(MKINSTALLDIRS) $(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(BREAK_TREE)
- $(MKINSTALLDIRS) $(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(COLLATION_TREE)
- $(MKINSTALLDIRS) $(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(RBNF_TREE)
- $(MKINSTALLDIRS) $(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(TRANSLIT_TREE)
+ $(MKINSTALLDIRS) $(DESTDIR)$(ICUPKGDATA_DIR)/$(ICUDATA_NAME)
+ $(MKINSTALLDIRS) $(DESTDIR)$(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(CURR_TREE)
+ $(MKINSTALLDIRS) $(DESTDIR)$(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(LANG_TREE)
+ $(MKINSTALLDIRS) $(DESTDIR)$(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(REGION_TREE)
+ $(MKINSTALLDIRS) $(DESTDIR)$(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(ZONE_TREE)
+ $(MKINSTALLDIRS) $(DESTDIR)$(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(UNIT_TREE)
+ $(MKINSTALLDIRS) $(DESTDIR)$(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(BREAK_TREE)
+ $(MKINSTALLDIRS) $(DESTDIR)$(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(COLLATION_TREE)
+ $(MKINSTALLDIRS) $(DESTDIR)$(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(RBNF_TREE)
+ $(MKINSTALLDIRS) $(DESTDIR)$(ICUPKGDATA_DIR)/$(ICUDATA_NAME)/$(TRANSLIT_TREE)
endif
ifneq ($(ENABLE_STATIC),)
ifeq ($(PKGDATA_MODE),dll)

1205
icu.changes Normal file

File diff suppressed because it is too large Load Diff

1314
icu.keyring Normal file

File diff suppressed because it is too large Load Diff

265
icu.spec Normal file
View File

@ -0,0 +1,265 @@
#
# spec file for package icu
#
# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%define lname libicu73
%define amajor 73
%define aversion 73
%ifarch %armb hppa mips mips64 ppc ppc64 %sparc s390 s390x m68k
%define be_platform 1
%else
%define be_platform 0
%endif
# icu-versioning.diff needs update for new Version too
Name: icu
Version: 73.2
Release: 0
Summary: International Components for Unicode
License: ICU
Group: Development/Libraries/C and C++
URL: https://icu.unicode.org/
Source: https://github.com/unicode-org/icu/releases/download/release-73-2/icu4c-73_2-src.tgz
Source2: https://github.com/unicode-org/icu/releases/download/release-73-2/icu4c-73_2-src.tgz.asc
Source3: https://github.com/unicode-org/icu/releases/download/release-73-2/icu4c-73_2-docs.zip
Source4: https://github.com/unicode-org/icu/releases/download/release-73-2/icu4c-73_2-docs.zip.asc
Source5: %name.keyring
Source100: baselibs.conf
Patch4: icu-fix-install-mode-files.diff
Patch6: icu-error-reporting.diff
Patch7: icu-avoid-x87-excess-precision.diff
Patch8: locale.diff
Patch9: nan-undefined-conversion.patch
Patch10: icu4c-73_c-ICU-22512-Fix-broken-TestHebrewCalendarInTemporalLeapYear.patch
BuildRequires: fdupes
BuildRequires: gcc-c++
BuildRequires: pkg-config
BuildRequires: python3-base
BuildRequires: unzip
Provides: bundled(timezone) = 2022e
%description
ICU is a set of C and C++ libraries that provide extensive Unicode and locale
support, such as calendar, conversions for many character sets, language
sensitive collation, date and time formatting, support for many locales,
message catalogs and resources, message formatting, normalization, number and
currency formatting, time zone support, transliteration, and word, line, and
sentence breaking.
This subpackage contains the runtime programs for interacting with ICU.
%package -n %lname
Summary: International Components for Unicode
Group: System/Libraries
Requires: timezone
Provides: libicu = %version
%if %be_platform
Requires: libicu%aversion-bedata = %version
%else
Requires: libicu%aversion-ledata = %version
%endif
%description -n %lname
ICU is a set of C and C++ libraries that provide extensive Unicode
and locale support.
This package contains the runtime libraries for ICU.
%package -n libicu%aversion-bedata
Summary: Rule databases and tables for ICU
Group: System/Libraries
BuildArch: noarch
%description -n libicu%aversion-bedata
ICU is a set of C and C++ libraries that provide extensive Unicode
and locale support.
ICU makes use of a wide variety of data tables to provide many of its
services: converter mapping tables, collation rules, transliteration
rules, break iterator rules and dictionaries.
This subpackage contains these data tables, in big-endian format.
%package -n libicu%aversion-ledata
Summary: Rule databases and tables for ICU
Group: System/Libraries
BuildArch: noarch
%description -n libicu%aversion-ledata
ICU is a set of C and C++ libraries that provide extensive Unicode
and locale support.
ICU makes use of a wide variety of data tables to provide many of its
services: converter mapping tables, collation rules, transliteration
rules, break iterator rules and dictionaries.
This subpackage contains these data tables, in little-endian format.
%package -n libicu-devel
Summary: Development files for the ICU library
Group: Development/Libraries/C and C++
Requires: %lname = %version
%description -n libicu-devel
ICU is a set of C and C++ libraries that provide extensive Unicode
and locale support.
This package contains the headers for ICU.
%package -n libicu-doc
Summary: Documentation for the ICU library
Group: Documentation/HTML
%description -n libicu-doc
ICU is a set of C and C++ libraries that provide extensive Unicode
and locale support.
This package contains the HTML documentation.
%prep
%autosetup -p1 -n icu
# docs are special
mkdir html
pushd html/
unzip %SOURCE3
popd
%build
cd source
mkdir -p data/out/tmp # build procedure forgets to do this on its own
export CXXFLAGS="%optflags -DICU_DATA_DIR=\\\"%_datadir/icu/%version/\\\" -fexcess-precision=fast"
export CFLAGS="$CXXFLAGS"
%configure \
--disable-static \
--enable-shared \
--disable-samples \
--with-data-packaging=archive
%make_build VERBOSE=1
# Build the other endianess, too.
pushd data/
%if %be_platform
cp in/icudt%{amajor}l.dat out/
%else
LD_LIBRARY_PATH="../lib:../stubdata:../tools/ctestfw:$LD_LIBRARY_PATH" \
../bin/icupkg -tb in/icudt%{amajor}l.dat out/icudt%{amajor}b.dat
! cmp in/icudt%{amajor}l.dat out/icudt%{amajor}b.dat
%endif
popd
%install
mkdir -p "%buildroot/%_docdir/%name"
cp -a html "%buildroot/%_docdir/%name/"
cp -a license.html readme.html "%buildroot/%_docdir/%name/"
find . -name CVS -type d -exec rm -Rf "{}" "+"
cd source
%make_install
cp data/out/icudt*.dat "%buildroot/%_datadir/icu/%version/"
#
# ICU's "pkgdata" utility is really fragile, so icu-versioning.diff
# does as few actions as possible, but that means we need some additional
# cleanup in the spec file now.
#
pushd "%buildroot/%_libdir/"
for i in *.so.[0-9]*; do
echo "Looking at $i"
if [ "${i##*.so.}" != "%version" ]; then
rm -fv "$i"
continue
fi
# Because U_ICU_VERSION_SHORT is "51_2" and not "51.2",
# create some symlinks.
ln -s "$i" "${i%%%version}%aversion"
done
popd
# /usr/lib/rpm/elfdeps requires +x bit and not all files had it at one point.
# - OpenBSD for example is known to have patched their libtool program
# to kill the x bit on install :(
chmod a+rx "%buildroot/%_libdir"/lib*.so.*
# install uncompiled source data:
mkdir -p "%buildroot/%_datadir/icu/%version/unidata"
install -m 644 data/unidata/*.txt "%buildroot/%_datadir/icu/%version/unidata"
ln -s unidata/UnicodeData.txt "%buildroot/%_datadir/icu/%version/"
rm "%buildroot/%_datadir/icu/%version/install-sh"
# Seems unused
rm -Rf "%buildroot/%_datadir/icu/%version/unidata/" \
"%buildroot/%_datadir/icu/%version/UnicodeData.txt" \
"%buildroot/%_libdir/icu/current" \
"%buildroot/%_libdir/icu/Makefile.inc" \
"%buildroot/%_libdir/icu/pkgdata.inc"
%fdupes %buildroot/%_prefix
%check
# s390x see: https://ssl.icu-project.org/trac/ticket/13095
cd source
ICU_DATA="%buildroot/%_datadir/icu/%version" make check %{?_smp_mflags} VERBOSE=1
%post -n %lname -p /sbin/ldconfig
%postun -n %lname -p /sbin/ldconfig
%files
%_bindir/derb
%_bindir/gen*
%_bindir/icuinfo
%_bindir/makeconv
%_bindir/pkgdata
%_bindir/uconv
%_bindir/icuexportdata
%_sbindir/*
%_mandir/man*/*
%dir %_datadir/icu
%dir %_datadir/icu/%version
%_datadir/icu/%version/LICENSE
%dir %_docdir/%name/
%_docdir/%name/license.html
%_docdir/%name/readme.html
%files -n %lname
%_libdir/libicu*.so.*
%files -n libicu%aversion-bedata
%dir %_datadir/icu
%dir %_datadir/icu/%version
%_datadir/icu/%version/icudt%{amajor}b.dat
%files -n libicu%aversion-ledata
%dir %_datadir/icu
%dir %_datadir/icu/%version
%_datadir/icu/%version/icudt%{amajor}l.dat
%files -n libicu-devel
%_libdir/libicu*.so
%_includedir/unicode/
%dir %_libdir/icu/
%dir %_libdir/icu/%version/
%_libdir/icu/%version/Makefile.inc
%_libdir/icu/%version/pkgdata.inc
%_libdir/pkgconfig/icu-*.pc
%_bindir/icu-config
%dir %_datadir/icu/
%dir %_datadir/icu/%version/
%_datadir/icu/%version/mkinstalldirs
%_datadir/icu/%version/config/
%files -n libicu-doc
%dir %_docdir/%name/
%_docdir/%name/html/
%changelog

BIN
icu4c-73_2-docs.zip (Stored with Git LFS) Normal file

Binary file not shown.

14
icu4c-73_2-docs.zip.asc Normal file
View File

@ -0,0 +1,14 @@
-----BEGIN PGP SIGNATURE-----
iQGzBAABCgAdFiEEPaNTAafDMCV7h1V1QFj2dAbqpqsFAmSI4zYACgkQQFj2dAbq
pqvNbAwA1VRn+rZ7mqeLtCIcz/3FPbjvwcxaEZQwOzPD2MkCsn7E063sWnODTHz9
KAhTz513AQUgXr4xU+FFHD55SJq7JBu+gWjB+h6gi/ZmJCHJmZaWzkDzitARlYXP
7QVn7GYyimdZgMCZ1enrwrjLUumqILwK8GkKdp8KudbP+h9xq3pMOzcBi8Q7zLnM
PAt1vQFcqTcwmKCUlutyO0KUcsqBYqywVf29qP+zspKdK+sUJAIHG6n38yQb4Vif
/UoECKj3isI/8pOXUuAT9SLkBv9E0u4ATGoCLHczMA+MBvxCjnXXXWhSqz23L5cu
8XKBT/UJzxtWjqEmIv5irENkxHwnxzUApdrqTy9ftZ2ljWVVxbf06aaMabttzd2Q
GmtHHMUzTDz68ca20s+mCflJTAQxvwTEdlx3tAxzn7LQumd3cQyHyzSeKUv8RDTS
MNZZTybLw24aIqfgTtQANNkK0Ne/mf7QlOjiPaRmcx4id55ubbCLd06nbLZ4l6K3
5tja3wWM
=wUBf
-----END PGP SIGNATURE-----

BIN
icu4c-73_2-src.tgz (Stored with Git LFS) Normal file

Binary file not shown.

14
icu4c-73_2-src.tgz.asc Normal file
View File

@ -0,0 +1,14 @@
-----BEGIN PGP SIGNATURE-----
iQGzBAABCgAdFiEEPaNTAafDMCV7h1V1QFj2dAbqpqsFAmSI4zsACgkQQFj2dAbq
pqsKGwwAxpfoDLHqOZu6yRiEJhj5wZAA155ejz0Al3q5JlS8fCaMs/93OyGSwntJ
GG0BdntqfrXdQPXk1I4XW0fevVTIC7yUXA0SOnBL42s3KrteDWCNd/bfInIgpAq8
JjphOVYWxt5vG2dzSTs66dHEU4cBUHtzpb4xrcC8K4zKR+dOkxr0abrpSJOISZrP
56PJduW4Tk+SFklFrn2WkP3IIu9d92ajjJnj2bbRDsHvaW+AN7zWG0tzIKs+zkwM
GmvtDzyMSPDeKy1MDF6Pa6wStGuQpznsS9UyADjW00ozpzB7mhdDcWUSPfeItyaL
uDofHfEjk6jP4jfDXyvo0gHPPvtJQ9RQPb/+3ZlMqEGv/UVxfOyhrJdYhBmZ4a8a
A8g59sWB8O/bN23rwlJGvPmpqHHuB0H+spmrXhg77WkMdUFn9FthAmndlsVnuRK3
rWPNuQTvXLLK8UlNvcy0qU3IXE865XsH99S4zLJy9k3rHjrU0zvF8dRMVotLX0aS
PLV6lKmB
=LkuT
-----END PGP SIGNATURE-----

View File

@ -0,0 +1,33 @@
From b6b3e89231a623441940889b5badd90f74bdce2b Mon Sep 17 00:00:00 2001
From: Frank Tang <ftang@chromium.org>
Date: Mon, 18 Sep 2023 20:20:42 -0700
Subject: [PATCH] ICU-22512 Fix broken TestHebrewCalendarInTemporalLeapYear
Fix broken test mistakenly landed in
https://github.com/unicode-org/icu/pull/2274
Some important steps were missed in the last landing.
---
icu4c/source/test/intltest/caltest.cpp | 2 ++
1 file changed, 2 insertions(+)
Index: icu/source/test/intltest/caltest.cpp
===================================================================
--- icu.orig/source/test/intltest/caltest.cpp
+++ icu/source/test/intltest/caltest.cpp
@@ -3998,6 +3998,7 @@ void CalendarTest::TestHebrewCalendarInT
for (gc.set(startYear, UCAL_JANUARY, 1);
gc.get(UCAL_YEAR, status) <= stopYear;
gc.add(UCAL_DATE, incrementDays, status)) {
+ cal->setTime(gc.getTime(status), status);
if (failure(status, "add/get/set/getTime/setTime incorrect")) return;
int32_t cal_year = cal->get(UCAL_EXTENDED_YEAR, status);
@@ -4006,6 +4007,7 @@ void CalendarTest::TestHebrewCalendarInT
leapTest->set(UCAL_MONTH, 0);
leapTest->set(UCAL_DATE, 1);
// If 10 months after TISHRI is TAMUZ, then it is a leap year.
+ leapTest->add(UCAL_MONTH, 10, status);
hasLeapMonth = leapTest->get(UCAL_MONTH, status) == icu::HebrewCalendar::TAMUZ;
yearForHasLeapMonth = cal_year;
}

20
locale.diff Normal file
View File

@ -0,0 +1,20 @@
Execute POSIX behavior not just on Solaris but all POSIX platforms.
References: https://bugzilla.opensuse.org/1162882
---
source/common/putil.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: icu/source/common/putil.cpp
===================================================================
--- icu.orig/source/common/putil.cpp
+++ icu/source/common/putil.cpp
@@ -1616,7 +1616,7 @@ static const char *uprv_getPOSIXIDForCat
/* Solaris speaks POSIX - See IEEE Std 1003.1-2008
* This is needed to properly handle empty env. variables
*/
-#if U_PLATFORM == U_PF_SOLARIS
+#if U_PLATFORM_IMPLEMENTS_POSIX
if ((posixID == 0) || (posixID[0] == '\0')) {
posixID = getenv(category == LC_MESSAGES ? "LC_MESSAGES" : "LC_CTYPE");
if ((posixID == 0) || (posixID[0] == '\0')) {

View File

@ -0,0 +1,22 @@
From 29f1188d191a7a75ac7ffa4bfa390f625da39c53 Mon Sep 17 00:00:00 2001
From: Andreas Schwab <schwab@suse.de>
Date: Tue, 11 May 2021 19:04:24 +0200
Subject: [PATCH] ICU-21613 Fix undefined behaviour in
ComplexUnitsConverter::applyRounder
Index: icu/source/i18n/units_complexconverter.cpp
===================================================================
--- icu.orig/source/i18n/units_complexconverter.cpp
+++ icu/source/i18n/units_complexconverter.cpp
@@ -242,6 +242,11 @@ void ComplexUnitsConverter::applyRounder
}
quantity = decimalQuantity.toDouble();
+ if (uprv_isNaN(quantity) || uprv_isInfinite(quantity)) {
+ // Do nothing for non-finite values, since conversion to int64_t is undefined
+ return;
+ }
+
int32_t lastIndex = unitsConverters_.length() - 1;
if (lastIndex == 0) {
// Only one element, no need to bubble up the carry