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
|
# Maintainer (Arch): Andreas Radke <andyrtr@archlinux.org>
# Contributor (Arch): Art Gramlich <art@gramlich-net.com>
# Contributor (Parabola): Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
# Contributor (Parabola): Eli Schwartz <eschwartz@archlinux.org>
# parabola changes and rationale:
#
# Several Parabola packages depends on ICU, and the ICU soname changes often.
# This means that if we don't rebuild all the Parabola packages which depend
# on ICU, as soon as the new ArchLinux, ArchLinux32, and ArchLinuxARM ICU
# packages are synchronized into the Parabola repositories, we have a problem.
# The repo server synchronizes with the upstream repos un-attended; so this
# is a wonderful surprise each time; and we hustle frantucally to get the
# system sane again. We could watch the testing and staging repos of each
# upstream, and start re-building everything in a Parabola staging repo;
# but that could result in discarded work, if those exact versions are not the
# ones which are eventually released into [core].
#
# At first nothing was done to fix or workaround that issue. In practice,
# once a new ICU was synchronized, many users were upgrading before the
# Parabola packages had the time to be rebuilt. For such users, it
# broke all the installed Parabola packages that were depending on the old ICU.
# This means that users had to find a way to downgrade packages manually or wait
# until developers would finally have rebuilt all the packages that were broken.
#
# Then such packages were modified to make them depend on the exact version of
# the ICU packages they were built against. This way, once the new ICU package
# was synchronized, users could not upgrade if they had packages that were not
# rebuilt yet against the new ICU package. However this workaround also prevents
# installing packages that depends on the new ICU.
#
# The correct fix would probably be to automatically build all the Packages
# instead of relying on Arch Linux Packages. Still, a staging repo would be
# required to hold the new packages, until they all can be released together sanely.
# However we don't have the code, configuration and/or infrastructure to run
# an automatic builder for all packages yet even if there is work in this
# direction.
#
# In the meantime, this version of ICU is meant to enable Parabola packages to
# link against it at runtime. This enables all the Parabola packages to depend
# only on the ICU version, which is usually the upstream distribution's ICU but
# is occasionally this ICU if the Parabola package has not yet been rebuilt
# after an ICU update.
#
# It is inspired by the admittedly awkward hack of versioned library
# dependencies more commonly seen in e.g. the AUR as 'icu65' or somesuch which
# proprietary binaries built against Debian's ICU will depend on, but awkward
# is in the eyes of the beholder and this elegantly scales to Parabola's needs,
# without consuming increasing resources, which is the best definition of "not
# awkward".
#
# To use it, simply add the following dependency to any package which parabola
# has built or rebuilt:
#
# depends=('libicui18n.so')
#
# or whichever shared library is reported by readelf -d /path/to/compiled/ELF/file
# and, every time the upstream distribution upgrades ICU, update this package
# as well, to ensure it always stays exactly one version behind.
#
# This works well for ICU, even for packages which link to both the older and
# newer versions of libicu*.so, since ICU uses versioned symbols as reported by
#
# nm -D --demangle --with-symbol-versions /path/to/library
#
# However, caution must be taken before implementing the same idea for other
# libraries. So the idea is to only use it for libraries that often have this
# issue.
#
# Changes:
# - remove all files other than libicu*.so.*
# - depend on icu; this is needed because if the package is installed on its
# own, ldconfig will create untracked symlinks which were supposed to be
# installed by the icu package.
pkgname=icu-parabola
_pkgname=icu
pkgver=65.1
pkgrel=3
pkgrel+=.parabola2
pkgdesc="International Components for Unicode library"
pkgdesc+=" (compatibility libraries for the previous release)"
arch=(x86_64)
arch+=(armv7h i686)
url="http://site.icu-project.org/home"
license=('custom:icu')
depends=('gcc-libs' 'sh')
# require the main ICU version always be > this one
depends+=("icu>$pkgver")
conflicts=("icu<=$pkgver")
makedepends=('python')
provides=(libicu{data,i18n,io,test,tu,uc}.so)
source=(https://github.com/unicode-org/icu/releases/download/release-${pkgver//./-}/${_pkgname}4c-${pkgver//./_}-src.tgz{,.asc}
icu-65.1-initialized-buffer-uloc_getKeywordValue.patch::https://github.com/unicode-org/icu/commit/fab4c3c719.patch
icu-65.1-prevent-SEGV_MAPERR-in-append.patch::https://github.com/unicode-org/icu/commit/b7d08bc04a.patch)
# https://github.com/unicode-org/icu/releases/download/release-65-1/SHASUM512.txt - no checksum file for v67 release
sha512sums=('8f1ef33e1f4abc9a8ee870331c59f01b473d6da1251a19ce403f822f3e3871096f0791855d39c8f20c612fc49cda2c62c06864aa32ddab2dbd186d2b21ce9139'
'SKIP'
'8898fe0fa9805304cd2fc02c00ab1131861836f4d11887f82450c2378666cb03bce0c5038d3f0bdcdd1c1cdee2a00a61ef85602ed0e0c74ad2e58578b1940123'
'580283cdd95fb7b8410cb3a6c0f47a6c8e53e0fdc9c213b04cd133ba4120381533ff2aef89ddab968150754bd9ca3a536d5c592c6881e625eb8ee6de8723de1b')
validpgpkeys=('BA90283A60D67BA0DD910A893932080F4FB419E3') # "Steven R. Loomis (filfla-signing) <srloomis@us.ibm.com>"
validpgpkeys+=('9731166CD8E23A83BEE7C6D3ACA5DBE1FD8FABF1') # "Steven R. Loomis (ICU Project) <srl@icu-project.org>"
validpgpkeys+=('FFA9129A180D765B7A5BEA1C9B432B27D1BA20D7') # "Fredrik Roubert <fredrik@roubert.name>"
validpgpkeys+=('E4098B78AFC94394F3F49AA903996C7C83F12F11') # "keybase.io/srl295 <srl295@keybase.io>"
validpgpkeys+=('4569BBC09DA846FC91CBD21CE1BBA44593CF2AE0') # "Steven R. Loomis (codesign-qormi) <srloomis@us.ibm.com>"
prepare() {
cd icu
# https://unicode-org.atlassian.net/browse/ICU-20884
patch -Np2 -i ../icu-65.1-initialized-buffer-uloc_getKeywordValue.patch
# https://github.com/unicode-org/icu/pull/971
patch -Np2 -i ../icu-65.1-prevent-SEGV_MAPERR-in-append.patch
}
build() {
cd icu/source
./configure --prefix=/usr \
--sysconfdir=/etc \
--mandir=/usr/share/man \
--sbindir=/usr/bin
make
}
check() {
cd icu/source
make -k check
}
package() {
cd icu/source
make -j1 DESTDIR="${pkgdir}" install
# Install license
install -Dm644 "${srcdir}"/icu/LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
# to avoid conflicts against the preferred 'icu' package, we remove all files
# except the actual shared libraries
rm -r "${pkgdir}"/usr/{bin,include,lib/{icu,pkgconfig},share}
rm "${pkgdir}"/usr/lib/*.so
}
|