summaryrefslogtreecommitdiff
path: root/libre/icu-compat-70/PKGBUILD
diff options
context:
space:
mode:
Diffstat (limited to 'libre/icu-compat-70/PKGBUILD')
-rw-r--r--libre/icu-compat-70/PKGBUILD162
1 files changed, 162 insertions, 0 deletions
diff --git a/libre/icu-compat-70/PKGBUILD b/libre/icu-compat-70/PKGBUILD
new file mode 100644
index 000000000..5b10334e0
--- /dev/null
+++ b/libre/icu-compat-70/PKGBUILD
@@ -0,0 +1,162 @@
+# 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>
+# Maintainer: Parabola Hackers <dev@lists.parabola.nu>
+
+
+# parabola changes and rationale:
+#
+# Several Parabola packages depends on 'icu', and the 'icu' "sonames" change
+# frequently. If we don't rebuild all of 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 must hustle to get the system sane
+# again. We could watch the upstream 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 the main repos.
+#
+# 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
+# the package maintainers would finally have rebuilt all of the broken packages.
+#
+# 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 be to automatically build/re-build all Packages instead
+# of relying on ArchLinux. Still, a new staging repo would be required to hold
+# the new packages, until they all can be released together sanely. However we
+# don't have the tooling 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
+# shared-object dependencies (aka: "sodeps", eg: libicu*.so) exposed by 'icu',
+# which is usually provided by the upstream distribution's 'icu'; but may be
+# this package, if the dependent package has yet to be rebuilt against the
+# upgraded 'icu'.
+#
+# It is inspired by the awkward hack of versioned library dependencies, commonly
+# used temporarily, for extraordinary cases (e.g. in ArchLinux32 and the AUR as
+# 'icu65', in ArchLinux as 'electronNN', etc). The awkwardness is superficial
+# though. This scales elegantly to Parabola's needs, without consuming
+# increasing resources, which is the best definition of "not awkward".
+#
+# 'icu-compat' will usually be one major version behind core/icu. Dependent
+# PKGBUILDs of 'icu' can simply add the following "sodep" dependency:
+#
+# depends=('libicui18n.so')
+#
+# or whichever libicu*.so.* linkage is reported by:
+#
+# $ readelf -d /path/to/compiled/ELF/file | grep libicu
+#
+# Then, each time the upstream distribution upgrades 'icu', upgrade this package
+# as well, ensuring that it is always at the immediately preceding upstream
+# version. If some dependent is not yet re-built when it's 'icu' sodep becomes
+# more than one version behind upstream, this PKGBUILD could be renamed/re-built
+# as 'icu-compat-NN'. Of course, it would still be better to rebuild the
+# dependent(s) instead; but sometimes (especially for i686) the dependent may
+# have other problems, preventing rebuild.
+#
+# Though pacman will pull in the appropriate package automatically as needed,
+# the general recommendation is for all Parabola users to keep this package
+# installed always, as a catch-all for any dependent lacking the appropriate
+# sodep.
+#
+# 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 hack for other
+# libraries. Currently, 'icu' is the only one which changes so often, has so
+# many dependents, _and_ supports this hack robustly.
+
+
+# parabola changes and rationale:
+# - 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 un-tracked symlinks which were supposed to be
+# installed by the icu package.
+
+
+pkgname=icu-compat-70
+pkgver=70.1
+pkgrel=1
+pkgrel+=.parabola1
+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}")
+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//./-}/icu4c-${pkgver//./_}-src.tgz{,.asc})
+source_armv7h=(icudata-stdlibs.patch)
+# https://github.com/unicode-org/icu/releases/download/release-70-1/SHASUM512.txt
+sha512sums=('0b26ae7207155cb65a8fdb25f7b2fa4431e74b12bccbed0884a17feaae3c96833d12451064dd152197fd6ea5fd3adfd95594284a463e66c82e0d860f645880c9'
+ 'SKIP')
+sha512sums_armv7h=('8f13898c2b2d69ef516ee0831a73e5865676795716e7becac4457e208642bfdffb42f2a9280e99dcc10303ad721f5dc2e10ef83c633bd723044e98cc72c6bc7b')
+#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>"
+validpgpkeys=('0E51E7F06EF719FBD072782A5F56E5AFA63CCD33') #"Craig Cornelius (For use with ICU releases) <ccornelius@google.com>"
+
+
+prepare() {
+ case "${CARCH}" in
+ armv7h)
+ # ../../bin/genrb: error while loading shared libraries: ../../lib/libicudata.so.70: internal error
+ cd icu/source
+ patch -p2 -i ${srcdir}/icudata-stdlibs.patch
+ sed -r -i 's/(for ac_prog in )clang(\+\+)? /\1/g' configure
+ ;;
+ esac
+}
+
+build() {
+ cd icu/source
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --mandir=/usr/share/man \
+ --sbindir=/usr/bin
+ make
+}
+
+check() {
+ # one of the 'iotest' tests fails on armv7h
+ [[ "${CARCH}" != armv7h ]] || return 0
+
+ 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
+}