# Maintainer (arch): Andreas Radke # Contributor: Art Gramlich # Contributor: Denis 'GNUtoo' Carikli # Contributor: Eli Schwartz # Contributor: bill-auger # 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 # 'pkgver' should always be one major version behind core/icu pkgname=${_pkgname}-compat pkgver=69.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}") # 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-69-1/SHASUM512.txt sha512sums=('d4aeb781715144ea6e3c6b98df5bbe0490bfa3175221a1d667f3e6851b7bd4a638fa4a37d4a921ccb31f02b5d15a6dded9464d98051964a86f7b1cde0ff0aab7' 'SKIP') validpgpkeys=('BA90283A60D67BA0DD910A893932080F4FB419E3') # "Steven R. Loomis (filfla-signing) " validpgpkeys+=('9731166CD8E23A83BEE7C6D3ACA5DBE1FD8FABF1') # "Steven R. Loomis (ICU Project) " validpgpkeys+=('FFA9129A180D765B7A5BEA1C9B432B27D1BA20D7') # "Fredrik Roubert " validpgpkeys+=('E4098B78AFC94394F3F49AA903996C7C83F12F11') # "keybase.io/srl295 " validpgpkeys+=('4569BBC09DA846FC91CBD21CE1BBA44593CF2AE0') # "Steven R. Loomis (codesign-qormi) " validpgpkeys+=('0E51E7F06EF719FBD072782A5F56E5AFA63CCD33') # "Craig Cornelius (For use with ICU releases) " 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 }