summaryrefslogtreecommitdiff
path: root/libre/icu-compat-65/PKGBUILD
blob: 2182060872f60e742594bce154474beed15fd33b (plain)
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
# Maintainer (arch): Andreas Radke <andyrtr@archlinux.org>
# Contributor: Art Gramlich <art@gramlich-net.com>
# Contributor: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
# Contributor: Eli Schwartz <eschwartz@archlinux.org>
# Contributor: bill-auger <bill-auger@programmer.net>


# 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 exists for Parabola packages to link against
# at runtime. In this way, Parabola packages can depend only on the "sodeps" exposed
# by ICU, which is usually provided by the upstream distribution's ICU; but may be
# this ICU, if the Parabola package has yet to be rebuilt agianst the upgraded ICU.
#
# It is inspired by the admittedly awkward hack of versioned library
# dependencies more commonly seen (e.g. in the AUR as 'icu65') on which
# proprietary binaries built against Debian's ICU will depend. It is awkward,
# 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
pkgname=icu-compat-65
pkgver=65.1
pkgrel=3
pkgrel+=.parabola3
pkgdesc="International Components for Unicode library"
pkgdesc+=" (compatibility libraries for the previous release)"
arch=(x86_64)
arch+=(armv7h i686)
url="https://icu.unicode.org"
license=('custom:icu')
depends=('gcc-libs' 'sh')
depends+=("icu>${pkgver}")   # core/icu should always be ahead
conflicts=("icu<=${pkgver}") # core/icu should always be ahead
replaces+=('icu-65-compat')  # this rebuild (parabola3) is simply to rename the package
conflicts+=('icu-65-compat') # this rebuild (parabola3) is simply to rename the package
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
}