# vim: set ts=2 sw=2 et:
# Maintainer (Arch): Dan McGee <dan@archlinux.org>
# Maintainer (Arch): Dave Reisner <dreisner@archlinux.org>
# Contributor (Hyperbola): André Silva <emulatorman@hyperbola.info>
# Contributor (Hyperbola): Márcio Silva <coadde@hyperbola.info>
# Maintainer: Luke Shumaker <lukeshu@parabola.nu>
# Contributor: Omar Vega Ramos <ovruni@gnu.org.pe>
# Contributor: Nicolás Reynolds <fauno@kiwwwi.com.ar>
# Contributor: Daniel Milewski <niitotantei@riseup.net>

pkgname=pacman
pkgver=5.1.3
pkgrel=1
pkgrel+=.parabola1
pkgdesc="A library-based package manager with dependency support"
arch=('x86_64')
arch+=('i686' 'armv7h')
url="https://www.archlinux.org/pacman/"
license=('GPL')
groups=('base' 'base-devel')
groups+=('base-openrc')
depends=('bash' 'glibc' 'libarchive' 'curl'
         'gpgme' 'pacman-mirrorlist' 'archlinux-keyring')
depends+=('parabola-keyring' 'archlinuxarm-keyring' 'archlinux32-keyring')
makedepends=('asciidoc')
checkdepends=('python2' 'fakechroot')
optdepends=('perl-locale-gettext: translation support in makepkg-template'
            'xdelta3: delta support in repo-add')
backup=(etc/pacman.conf
        etc/makepkg.conf)
provides=('pacman-parabola')
conflicts=('pacman-parabola')
replaces=('pacman-parabola')
backup=(etc/pacman.conf etc/makepkg.conf)
options=('strip' 'debug')
validpgpkeys=('6645B0A8C7005E78DB1D7864F99FFE0FEAE999BD'  # Allan McRae <allan@archlinux.org>
              'B8151B117037781095514CA7BBDFFC92306B1121') # Andrew Gregory (pacman) <andrew@archlinux.org>
source=(https://sources.archlinux.org/other/pacman/$pkgname-$pkgver.tar.gz{,.sig}
        "${arch[@]/#/pacman.conf.}"
        makepkg.conf.in
        pacman-keyring.service
        pacman-keyring.timer
        0001-makepkg-Better-error-messages-for-versions-in-check-.patch
        0002-makepkg-check_pkgrel-Don-t-say-decimal-in-the-error-.patch
        0003-makepkg-check_pkgver-Report-what-the-bad-pkgver-is.patch
        0004-makepkg-Treat-pkgrel-more-similarly-to-pkgver.patch
        0001-Revert-makepkg-add-whirlpool-to-the-list-of-hashing-.patch)
source_armv7h=(0001-Sychronize-filesystem.patch
               0002-Revert-close-stdin-before-running-install-scripts.patch
               0003-Revert-alpm_run_chroot-always-connect-parent2child-p.patch)
sha256sums=('10db61a0928d619871340c3f93a677d1541d6c52353c516aec4f8d96e830d4eb'
            'SKIP'
            '418a2c7675f3b350beebf8fbfd267744724e8437f1ad61c86a2f5fcdca44409b'
            'fa4c0d2db22583c962f34e3e2fb7666dd30c68bfd5b298c76da1a09227bc6cf8'
            'ae034a05c4373aa30419c541e121e5d6dac33dd6fa8d4cc494d3c98cedd95a2e'
            'c0cbdc0df96f13a73d241c1eb85a969098bd414f12ecd7c045922b154537e00a'
            '220f1b25a64727041dc6fa3fd486b0a043f735a3f6cecedc4e2f7c47ec6ce66d'
            '2a857061f032ff5485f5c75ab74e6f6532621e08963ef48640a792cca16cacd6'
            '075ac1f8d782ac9868f5e7f3043f684a00da33915eba9ec7e4a8940992ddc269'
            '8065c468706be669bc6718a6634e5e58507cba9b8121bf5cfe1703daacab1c3e'
            'd01100d19b9868da8c689a7a14b6340574ecca0105a8d8ef866b281ad3d7e637'
            'cc2c82ca0c3a45dd4e200fa2219da52912a8718ab7e16091ad2938ada657f033'
            '1f6a0a8518dc912bc5d9df335b6da220bd3cc51630b6b47c09ec9d4cd47ae432')
sha256sums_armv7h=('8d70fb5094f58aad98b601bbc42be354c2014b9fe734a1ee0b1e14bb041cc9cc'
                   '0e771370da68c855bfb4eaad4c2ae137883a474886a049b934dac2e775574cb9'
                   '2f586f72c34150330389854575a21be1d3ef3637c4f94bec2e948c2717a5aecb')

prepare() {
  cd "$pkgname-$pkgver"

  # From Arch ARM
  if [ "${CARCH}" = "armv7h" ]; then
    patch -p1 -i ../0001-Sychronize-filesystem.patch
    patch -p1 -i ../0002-Revert-close-stdin-before-running-install-scripts.patch
    patch -p1 -i ../0003-Revert-alpm_run_chroot-always-connect-parent2child-p.patch
  fi

  # From Parabola
  patch -p1 -i ../0001-makepkg-Better-error-messages-for-versions-in-check-.patch
  patch -p1 -i ../0002-makepkg-check_pkgrel-Don-t-say-decimal-in-the-error-.patch
  patch -p1 -i ../0003-makepkg-check_pkgver-Report-what-the-bad-pkgver-is.patch
  patch -p1 -i ../0004-makepkg-Treat-pkgrel-more-similarly-to-pkgver.patch

  # From pacman-dev mailing list
  # Properly drop whirlpoolsums support (instead of mysteriously
  # failing).  Backported because some Parabola packages actually use
  # whirlpoolsums.
  patch -p1 -i ../0001-Revert-makepkg-add-whirlpool-to-the-list-of-hashing-.patch
}

build() {
  cd "$pkgname-$pkgver"

  ./configure --prefix=/usr --sysconfdir=/etc \
    --localstatedir=/var --enable-doc \
    --with-scriptlet-shell=/usr/bin/bash \
    --with-ldconfig=/usr/bin/ldconfig
  make V=1

  # Generate the architecture-specific makepkg.conf files
  local carch mycarch mychost myflags myldflags
  for carch in "${arch[@]}"; do
    case $carch in
      i686)
        mycarch="i686"
        mychost="i686-pc-linux-gnu"
        myflags="-march=i686 -mtune=generic -O2 -pipe -fno-plt"
        ;;
      x86_64)
        mycarch="x86_64"
        mychost="x86_64-pc-linux-gnu"
        myflags="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt"
        ;;
      armv7h)
        mycarch="armv7h"
        mychost="armv7l-unknown-linux-gnueabihf"
        myflags="-march=armv7-a -mfloat-abi=hard -mfpu=vfpv3-d16 -O2 -pipe -fno-plt"
        ;;
    esac
    myldflags="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"

    # set things correctly in the default conf file
    sed < "$srcdir/makepkg.conf.in" > "$srcdir/makepkg.conf.$carch" \
        -e "s|@CARCH[@]|$mycarch|g" \
        -e "s|@CHOST[@]|$mychost|g" \
        -e "s|@LDFLAGS[@]|$myldflags|g" \
        -e "s|@CARCHFLAGS[@]|$myflags|g"
  done
}

check() {
  make -C "$pkgname-$pkgver" check
}

package() {
  cd "$pkgname-$pkgver"

  make DESTDIR="$pkgdir" install

  # install distro-specific stuff
  install -dm755 "$pkgdir"/etc/{makepkg,pacman}.d
  install -m644 "$srcdir/pacman.conf.$CARCH" "$pkgdir/etc/pacman.conf"
  install -m644 "$srcdir/makepkg.conf.$CARCH" "$pkgdir/etc/makepkg.conf"
  echo '# There must be at least 1 file matching /etc/pacman.d/*.conf' > "$pkgdir/etc/pacman.d/empty.conf"

  install -dm755 "$pkgdir/usr/share/pacman/defaults"
  local carch
  for carch in "${arch[@]}"; do
    install -m644 "$srcdir/pacman.conf.$carch" "$pkgdir/usr/share/pacman/defaults/"
    install -m644 "$srcdir/makepkg.conf.$carch" "$pkgdir/usr/share/pacman/defaults/"
  done

  # put bash_completion in the right location
  install -dm755 "$pkgdir/usr/share/bash-completion/completions"
  mv "$pkgdir/etc/bash_completion.d/pacman" "$pkgdir/usr/share/bash-completion/completions"
  rmdir "$pkgdir/etc/bash_completion.d"

  for f in makepkg pacman-key; do
    ln -s pacman "$pkgdir/usr/share/bash-completion/completions/$f"
  done

  # Parabola's pacman began shipping a weekly job for this back in
  # 2014.  Why is it nescessary for Parabola installs, but it
  # seemingly isn't for Arch installs?
  install -Dm644 "$srcdir/pacman-keyring.service" "$pkgdir/usr/lib/systemd/system/pacman-keyring.service"
  install -Dm644 "$srcdir/pacman-keyring.timer" "$pkgdir/usr/lib/systemd/system/pacman-keyring.timer"
  install -Dm644 /dev/stdin "$pkgdir/usr/lib/systemd/system-preset/90-pacman.preset" <<<"enable pacman-keyring.timer"
}