diff options
Diffstat (limited to 'libre/icu-compat-71/PKGBUILD')
-rw-r--r-- | libre/icu-compat-71/PKGBUILD | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/libre/icu-compat-71/PKGBUILD b/libre/icu-compat-71/PKGBUILD new file mode 100644 index 000000000..5b13eea6d --- /dev/null +++ b/libre/icu-compat-71/PKGBUILD @@ -0,0 +1,166 @@ +# Maintainer (arch:icu): 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> +# Maintainer (archarm:icu): Kevin Mihelich <kevin@archlinuxarm.org> + + +# 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. +# archarm changes and rationale: +# - patch to fix icudata library linking on ARM +# - remove check for clang in configure - picks up distcc + + +# NOTE: +# +# 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. We must hustle to make 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 is synchronized, the upgrade and the resulting breakage is suppressed, +# if packages needing rebuild against the new 'icu' package are installed. +# However this workaround also prevents installing packages that depends on the +# new 'icu'. +# +# An alternate fix would be to automatically build all packages, instead +# of relying on the upstreams. Still, new staging repos 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. +# +# 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's 'icu'; but may fall-back on this +# package, if the dependent package has yet to be rebuilt. +# +# It is inspired by the awkward hack of carrying multiple versions of 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 "rolling" fall-back scales +# elegantly to Parabola's needs, without consuming increasing resources. +# +# '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. + + +pkgname=icu-compat-71 +pkgver=71.1 +pkgrel=1 +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}") +makedepends=('python') +provides=(libicu{data,i18n,io,test,tu,uc}.so) +conflicts=("icu<=${pkgver}" icu${pkgver%%.*}) +options=('debug') +source=(https://github.com/unicode-org/icu/releases/download/release-${pkgver//./-}/icu4c-${pkgver//./_}-src.tgz{,.asc}) +source_armv7h=(icudata-stdlibs.patch) +sha512sums=('1fd2a20aef48369d1f06e2bb74584877b8ad0eb529320b976264ec2db87420bae242715795f372dbc513ea80047bc49077a064e78205cd5e8b33d746fd2a2912' + 'SKIP') +sha512sums_armv7h=('8f13898c2b2d69ef516ee0831a73e5865676795716e7becac4457e208642bfdffb42f2a9280e99dcc10303ad721f5dc2e10ef83c633bd723044e98cc72c6bc7b') +# checksums may be checked against upstream: +# $ curl -Ls https://github.com/unicode-org/icu/releases/download/release-${pkgver//./-}/SHASUM512.txt | grep '\-src.tgz' +#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() { + ## arch-specific patching ## + 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/icu/LICENSE + mv "${pkgdir}"/usr/share/licenses/{icu,${pkgname}} + + # 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 +} |