summaryrefslogtreecommitdiff
path: root/libre/icu-compat
diff options
context:
space:
mode:
Diffstat (limited to 'libre/icu-compat')
-rw-r--r--libre/icu-compat/PKGBUILD128
1 files changed, 128 insertions, 0 deletions
diff --git a/libre/icu-compat/PKGBUILD b/libre/icu-compat/PKGBUILD
new file mode 100644
index 000000000..48136c768
--- /dev/null
+++ b/libre/icu-compat/PKGBUILD
@@ -0,0 +1,128 @@
+# Maintainer (Arch): Andreas Radke <andyrtr@archlinux.org>
+# Contributor (Arch): Art Gramlich <art@gramlich-net.com>
+# Contributor: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
+# Contributor: 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 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=${_pkgname}-compat
+pkgver=67.1 # should always be one major version behind core/icu
+pkgrel=1
+pkgrel+=.parabola1
+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')
+depends+=("icu>$pkgver") # core/icu should always be one major version ahead
+conflicts=("icu<=$pkgver") # core/icu should always be one major version ahead
+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})
+# https://github.com/unicode-org/icu/releases/download/release-65-1/SHASUM512.txt - no checksum file for v67 release
+sha512sums=('4779f1ce1ca7976f6fad6768853ea8c540da54d11509e3b6cfd864a04b5f2db1c3d4b546387f91ad02fb90804525bc37d2543173f0d705d6ca11dc6f2b7640a8'
+ 'SKIP')
+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>"
+
+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
+}