# Maintainer (aur): lantw44 (at) gmail (dot) com # Modified from guix-git 20130119 PKGBUILD # Maintainer: Parabola Hackers # parabola changes and rationale: # - Kept sysvinit service files as Parabola also supports OpenRC # - Disable tests as they fail: # | make check-TESTS check-local # [...] # | FAIL: tests/build-utils.scm # [...] # | FAIL: tests/challenge.scm # [...] # | FAIL: tests/containers.scm # In order to verify the PGP signature of the source archive, you may need to # use this command to download the needed public key: # gpg --recv-keys 3CE464558A84FDC69DB40CFB090B11993D9AEBB5 pkgname=guix pkgver=1.4.0 pkgrel=1 pkgdesc='A purely functional package manager for the GNU system' arch=('x86_64' 'i686' 'armv7h') url='https://guix.gnu.org' license=('GPL3') options=('!strip') makedepends=( 'guile-ssh>=0.13.0' 'guile-zstd' 'guile-semver' 'guile-lib' 'bash-completion' 'fish' 'help2man' 'po4a') depends=( 'guile>=3.0.3' 'guile-gcrypt>=0.1.0' 'guile-gnutls' 'guile-sqlite3>=0.1.0' 'guile-zlib>=0.1.0' 'guile-lzlib' 'guile-avahi' 'guile-git-lib>=0.5.0' 'guile-json>=4.3.0' 'guile-lzma' 'sqlite>=3.6.19' 'bzip2' 'disarchive' 'gnutls' 'libgcrypt') optdepends=( 'bash-completion: to enable bash programmable completion' 'guile-ssh: to offload builds to other machines' 'guile-zstd: to use and publish zstd substitutes' 'guile-semver: to use the crate importer' 'guile-lib: to use the go importer') source=( "https://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz"{,.sig} 'guix-1.4.0-tests-guix-home.patch' 'guix-1.4.0-guile-3.0.9.patch') install="${pkgname}.install" sha256sums=( '43c769cbf632ef05449ac1fa48c1ba152c33494c6abc7e47137bba7b2149f8a4' 'b30c7e63048c3fe4e72d6146f107e55e27d1ea1eb5bc7fd8818f20a1a32c8e10' '930b94fae51eb84f8fd1ad5b6be373dc2a8c8887cf71d100d404159c079ddece' 'c4b746b0e90981b5efde1fde093632899950d1724df9182bc9a45b4773be1f43') validpgpkeys=('3CE464558A84FDC69DB40CFB090B11993D9AEBB5') prepare() { cd "${srcdir}/${pkgname}-${pkgver}" local source_file for source_file in "${source[@]}"; do case "${source_file}" in *.patch) patch -p1 < "${srcdir}/${source_file}" ;; esac done } build() { local bash_completion_dir="$(pkg-config --variable=completionsdir bash-completion)" local fish_completion_dir="$(pkg-config --variable=completionsdir fish)" cd "${srcdir}/${pkgname}-${pkgver}" ./configure --prefix=/usr --sbindir=/usr/bin --sysconfdir=/etc \ --libexecdir=/usr/lib --localstatedir=/var \ --with-bash-completion-dir="${bash_completion_dir}" \ --with-fish-completion-dir="${fish_completion_dir}" \ --disable-rpath \ ac_cv_guix_test_root="$(pwd)/t" make } check() { cd "${srcdir}/${pkgname}-${pkgver}" # # Check whether the current working directory is too long # local cwd_str="$(pwd)" # local cwd_len="${#cwd_str}" # # The test tests/gexp.scm fails when the path is longer than 29 bytes # # because of the length limit on the shebang line. Since we have increased # # the limit by 7 by renaming test-tmp to t with ac_cv_guix_test_root cache # # variable, the limit we use here is 36 bytes. # if [ "${cwd_len}" -gt 36 ]; then # error "${cwd_str} is too long." # error "The working directory cannot be longer than 36 bytes." # false # fi # # Make sure we have a valid shell accepting -c option. We cannot run tests # # in parallel because it can cause permission denied error when copying # # gnu/packages/bootstrap/i686-linux/bash. # SHELL=/bin/sh make check -j1 } package() { cd "${srcdir}/${pkgname}-${pkgver}" make DESTDIR="${pkgdir}" install # Rename systemd service files provided by upstream because they are not # usable without previous guix installation local system_unit_dir="${pkgdir}/usr/lib/systemd/system" local guix_daemon_default="${system_unit_dir}/guix-daemon.service" local guix_daemon_upstream="${system_unit_dir}/guix-daemon-latest.service" local guix_gc_default="${system_unit_dir}/guix-gc.service" local guix_gc_upstream="${system_unit_dir}/guix-gc-latest.service" local guix_publish_default="${system_unit_dir}/guix-publish.service" local guix_publish_upstream="${system_unit_dir}/guix-publish-latest.service" mv "${guix_daemon_default}" "${guix_daemon_upstream}" mv "${guix_gc_default}" "${guix_gc_upstream}" mv "${guix_publish_default}" "${guix_publish_upstream}" # Generate default systemd service files from upstream ones by fixing paths local guix_profile_root="/var/guix/profiles/per-user/root/current-guix" sed -e "s|^ExecStart=${guix_profile_root}/bin|ExecStart=/usr/bin|" \ -e "s|^Description=\(.*\)|Description=\1 (default)|" \ -e "/^Environment=/d" "${guix_daemon_upstream}" \ > "${guix_daemon_default}" sed -e "s|^ExecStart=${guix_profile_root}/bin|ExecStart=/usr/bin|" \ -e "s|^Description=\(.*\)|Description=\1 (default)|" \ -e "/^Environment=/d" "${guix_gc_upstream}" \ > "${guix_gc_default}" sed -e "s|^ExecStart=${guix_profile_root}/bin|ExecStart=/usr/bin|" \ -e "s|^Description=\(.*\)|Description=\1 (default)|" \ -e "/^Environment=/d" "${guix_publish_upstream}" \ > "${guix_publish_default}" # Make sure the above sed commands really work ! cmp "${guix_daemon_default}" "${guix_daemon_upstream}" ! cmp "${guix_gc_default}" "${guix_gc_upstream}" ! cmp "${guix_publish_default}" "${guix_publish_upstream}" # Edit the description of upstream systemd service files sed -i "s|^Description=\(.*\)|Description=\1 (upstream)|" \ "${guix_daemon_upstream}" \ "${guix_gc_upstream}" \ "${guix_publish_upstream}" # The default makepkg strip option cannot be used here because binaries # installed in /usr/share must not be stripped. # To keep user-defined 'strip' and 'debug' options useful, we still # depend on 'tidy_strip' function provided by makepkg to do the stripping # work. To make the function useful, we have to temporarily remove the # '!strip' option from 'options' array. However, assignments to 'options' # cause mksrcinfo to insert wrong lines to .SRCINFO, so they have to be # put in eval. eval 'options=()' cd "${pkgdir}/usr/bin" # tidy_strip may exit with a non-zero return value even if all operations # are successful. Therefore, we have to ignore its return value to prevent # makepkg from reporting it as an error. tidy_strip || true eval 'options=("!strip")' }