# Maintainer: David Runge <dvzrv@archlinux.org>
# Maintainer: Levente Polyak <anthraxx[at]archlinux[dot]org>
# Maintainer: Lukas Fleischer <lfleischer@archlinux.org>
# Contributor: Gaetan Bisson <bisson@archlinux.org>
# Contributor: Tobias Powalowski <tpowa@archlinux.org>
# Contributor: Andreas Radke <andyrtr@archlinux.org>
# Contributor: Judd Vinet <jvinet@zeroflux.org>

pkgname=gnupg
pkgver=2.4.8
pkgrel=3
pkgdesc='Complete and free implementation of the OpenPGP standard'
arch=(x86_64 aarch64)
url='https://www.gnupg.org/'
license=(
  BSD-2-Clause
  BSD-3-Clause
  BSD-4-Clause
  CC0-1.0
  GPL-2.0-or-later
  GPL-3.0-or-later
  LGPL-2.1-or-later
  'LGPL-3.0-or-later OR GPL-2.0-or-later'
  MIT
  Unicode-TOU
)
depends=(
  glibc
  gnutls
  libgcrypt
  libgpg-error
  libksba
  libldap
  libusb
  pinentry
  sh
  sqlite
  tpm2-tss
  zlib
)
makedepends=(
  bzip2
  fig2dev
  git
  imagemagick
  libassuan
  librsvg
  npth
  pcsclite
  readline
)
checkdepends=(openssh)
optdepends=(
  'pcsclite: for using scdaemon not with the gnupg internal card driver'
)
install=$pkgname.install
source=(
  git+https://dev.gnupg.org/source/gnupg.git?signed#tag=${pkgname}-${pkgver}
  dirmngr{,@}.{service,socket}
  gpg-agent{,@}.{service,socket}
  gpg-agent-{browser,extra,ssh}{,@}.socket
  keyboxd{,@}.{service,socket}
  keyboxd.8
  $pkgname-2.4-avoid_beta_warning.patch  # do not emit beta warnings (due to misbehaving build system)
  # patches maintained by freepg project: https://gitlab.com/freepg/gnupg/-/commits/gnupg-2.4.8-freepg
  0001-gpg-accept-subkeys-with-a-good-revocation-but-no-sel.patch
  0002-gpg-allow-import-of-previously-known-keys-even-witho.patch
  0003-tests-add-test-cases-for-import-without-uid.patch
  0004-gpg-drop-import-clean-from-default-keyserver-import-.patch
  0005-avoid-systemd-deprecation-warning.patch
  0006-Add-systemd-support-for-keyboxd.patch
  0007-Ship-sample-systemd-unit-files.patch
  0008-gpg-default-El-Gamal-to-3072-bit-keys.patch
  0009-gpg-Always-support-and-default-to-using-SHA-512.patch
  0010-gpg-Prefer-SHA-512-and-SHA-384-in-personal-digest-pr.patch
  0011-Avoid-simple-memory-dumps-via-ptrace.patch
  0013-ssh-agent-emulation-under-systemd-inject-SSH_AUTH_SO.patch
  0014-gpg-Sync-compliance-mode-cleanup-with-master.patch
  0015-gpg-emit-RSA-pubkey-algorithm-when-in-compatibility-.patch
  0016-gpg-Reintroduce-openpgp-as-distinct-from-rfc4880.patch
  0017-gpg-Emit-LibrePGP-material-only-in-compliance-gnupg.patch
  0018-gpg-gpgconf-list-report-actual-compliance-mode.patch
  0019-gpg-Default-to-compliance-openpgp.patch
  0020-gpg-Fix-newlines-in-Cleartext-Signature-Framework-CS.patch
  0021-Add-keyboxd-systemd-support.patch
  0022-Support-large-RSA-keygen-in-non-batch-mode.patch
  0023-gpg-Verify-Text-mode-Signatures-over-binary-Literal-.patch
)
sha256sums=('45d7a37b15e8afc6361a4ca168f610e5d3a9dd28de66453b2a25607fa162dfc1'
            '80a3a80f9f1f337da555a6838483e1baca44cde8a8a3d8c4ba7743626304b981'
            '8374255ce93a3c343019ab425963bcbc41982ea89e669d1ad1df0aa7be810de1'
            'ca55048f992824a24ab7f61cbc44a713a153f70a1a60d1cbba7ab4440302a204'
            'd0d79d76bbf6c0d744ee262882fcdfbe52601c6d74cdc5dd99a15da1cdbb6ae1'
            '8ea489a57edb0db9394bf2d6c0ec62205f881bb54efb919e4870209c7db01aa7'
            '81e9dd05cbf3b8406367258eae6ef67ff97f270301bf50b52742647c515c8304'
            'f735119afa3c452728e899809aa1d87b6091a327934befde3aef70ea9259197f'
            '2af0824fdbb95c1c6b54a9ab0a22aeb92ac997e44112f93919d263efa81909ae'
            '1cf9821b3bf4efaf4da2fd52ceb70d254dc4f6c545603f9045de716ef6aabf2d'
            '402eb8f875daaa419f9fdef59ffa84a1e063cc79e04d885ab0768788a4620ac0'
            'f0094f67586cbcda17fd0d780e3e73d6dbaa479ac84715ba941531f83f6ecfe9'
            '6644d769f7919ad58d3caf955195047c521328d180ee2077b78b7f1459f3184b'
            'ffa0191fad52712732f8b24d7d570c1d19a7803e59d30088797b76e252f65858'
            'ddfeafd4b86ef4dd7bcc841115483bcda58c660547ebaeae47ee343741e571eb'
            'cba1aa10c072d982135d2367a7e957d6787037ab232fd148144eca39a92ec2e6'
            '2e3e6ce050737c3bc0e608f283bdfef5471def2ff12dee7ef007854033178694'
            '34144a8e43fbeac88f1ddaf1621e6a3b192efba4580d18a42254ad386819afea'
            '50a00213e44ff07b385e12bca455cd5eec35b271ca2fe500bfe7704ebd8ec73d'
            '38c66efbd3bffdfa9cb0f226a6db03ae4b226f705dc2d0266a555d8ace823b79'
            '243c3a79295519b3931f9d846cf2af5caa064a78de812ee336dc786c1567b4d0'
            'e07bd246e13d88df72506ef1f98aee416473c1c6674de6628ad79cc39fa999b8'
            '978a57dd8b73939f176f4eec5ca66c5f49ce639fd7aabd2a6890ec03b6a90d2b'
            '69d19d59d6b76ce454e0c3c0f297de153c9a644d6be89dbff8aefbd9b26529a2'
            '0123d0ebac003fc10f0ac5d2c26a1277966580e26b70cdd1c7233543d6b4f465'
            '2decf2d841e7e2b510de1782d2ecb9be3399c0dabed8e9a15e0c1d1d8d6e5a43'
            'c7608ba9c93cd8bab43fbee268b084beac9487a9ee487c99525cc7cf64da77a8'
            '6d64b9e872e30c33858573f07be8efa33f4c875c4b5c34fe31bf0957960022b0'
            '7c268e00d30214c8ab20c3e3e2629f17613d4470da545f8e76e2600ef80a51a4'
            'd63d6ed550628f7ad8d6e8487528aaab2093781fe9c22b077aac91580ddcae08'
            '992d8982b3d48a0549736ba52eef7651d91c569921d022fc448b38dbddb652c3'
            'd231aafd106f5443ac05a27518b7f837e3c4a22b299ae847127a87df82e139d3'
            '1670ce1d008f6dd7b5f6ffd04fba37be5a030d4113f60ff37e4dc22f28614a67'
            '6a64e9fc621b310bdd1401a8bc44aad05151a9d320b5e60143e6a813151a21bd'
            'a9990b88a2d3f36605191fee63ad713dbe21e4a2b685dbd4d170d086103e85dc'
            '5d4455cdce11a086e3bde813be7228eb34166a5e3875942bc8fb9946102ad48f'
            '52b527a0d752335902766473fa0085939e6a293cdadad8ba21586fbfe95a5524'
            'db6de8d5543e6b04578b01062b17715b796306b58bc91e471aaa001034c1dbb7'
            'd7e55304b5769fd210dbf4ac0b56f1d80090d0d5ce1f8695c670d28efd687344'
            'cc574dfdffa3c64241e56b819a2626ee80d2cd5b19c3b6794d55162c4e286e77'
            '5ad3252991b975080154971b235c493c91f21242ccd47aa8a43f57d62eac79e6'
            '9bb1ea61b1f2885e4e82cf743e065c67ee60ce8a8c135ae6b4a56536a49bcec6'
            'fe879074384037f818c5287c668d2e655bc3628299ce1ab33f8999967c88321d')
b2sums=('2b0b212f01e96ed04340437d71986473a088d6935e6ef0cde2ce983667037e18bcc519e316dce3789f952ca08cb7f1cbf6312d460619f686ec247a5403d85a57'
        '7a3af856305eb4b00929aaf029dd4e5c84376df4f30add76976b9b058addf6fc4d8c39335fc83d11493ea9d8a40f0510dbac8572b99a8c8b9b3a4eca8e585774'
        'ee51a4702715f5ec2629ff42eeba8630010da8a67545d1e53961e710de5faf197708e55d2d55796917a134ca2a76b1d6c88a8f7756d0706e0cbc33b605f52d86'
        '3f40de2bf73e84f099b542349257ef6c098b4e347fb218d21a2a785830aa335832229b24c74aadae73deff5460f8645e2d7e7c3c2faaeb91cc812eeb06ddca84'
        '10c6074d67addd5c244a2e83485ed0fd34847e16619e2ff4a5ab09011ed9daf199b7d7b5f109a1ea88a6ba3218e442c6c28575879b305686a13c8a93612937a3'
        'ad71d7fab2a92a8da454c34884b5724e94adc0925a7f97f062fb7b78ed3ec87e5babb6383e755c943afd16bf61789ba83455dc2baf82ce248c1c4622ff87e364'
        '129ecd9df3f00ed28f494f914483645e9aeaa1d6812c762ded60582c0a3f66b215731d4415ea5c017aa5ce97448faa5b93dbcb3793a82643d6ed160cc62f4ea4'
        '36f8709733fbd509f096675a10a240ec6862e6cbd59d32cf8b1fdc1ac04fb7137093690cd97db705e324f6d030344d1d72384504f3465cffccb855c2e29be678'
        '1da101e67ac09eebbb0682d465075a3657c614426c70907d36fd56fee27df082df6536ac47273f41cd7e145e9ab536a3887a9b118cd8b05887a384070294ceca'
        'bf5daa4a33daae716a1d7743470dae618151e14ab7bb5d99138f880a908fac57dbb517b78d92c81ecf4532c25366cd32f7acc0e33a711ccde830fbc208726e69'
        '8a4d1f57c3223c817f840ee989532a57760ad4f836950d18149f4827746f3e7cfb2a1ebdbb115be7c049b5971802eaed9e99125b39cac26b5186b18f9693da99'
        'ffc8ea3c7875b195720ad238742a726b4b7be0bb8f2f8927358d259202f22b5e32f9ad23a4c66da85e25f36544770c29725be6d99256b685427b94d814e29196'
        'c2d29d2adbff690099e537d294d08f9ade73f7a744038382f011b4c9f93c29e27629b740dae02361a4e663730459db6fa81bc2903595fe52e71407dab6590ca2'
        '9dd03f808af45752a01ccbcfec3f3cb39f1a720088e21aa8a19c2ceec3876b3a8b950c1c154203d0adc208fed8ae07a26c8cd59d783e32eb1294a3a340bedad4'
        '91b2a13fdd2c20c5950ec42c742e8be8ee2b6137a9e73e20cf269415fcc960e90049ab3ca6ec8ddc045a8fa03b16396849494b86ebb742adabb53e2703f2d290'
        'cd8578ae69d58d4818b0aecca95fa5080586dfaa9bc5050a7203b0f48e50ad64c5b7c1f71e71711ed120223eb2662e96f577855f729bdf10d2cd648a9e305bfe'
        '4f206967e3d8d1066f5bcb64c35a72bc5f6d69d484b2ab52fd239f4b92b398cdd08c9a016c5dc07fc5cbfdb05983969830983531fae70f67a6a5f61624336577'
        '61e262c714f0e2f9e2a595f16f203c41df93fbfd3aaf20c3ccdbc2bc6c0285a6591b21346f5f15b23f624e1f72470d5d6e1e805979858ea391c815bc1d2e7c67'
        'af13f78ff240c00d9e61bd470ace03bc6926e1cf946016c8c4fa27706ed278babc0ec8a04c79b930d9047f62bd7cfcfeba3e7fd493da7476a318fc49ff0e54fe'
        '5e4fed3c54785fc0140a1cfe970c6ed6a61c0041961999a9777dfcb0050d45e2b9231b3e5e97e025cefe1461614b599bc7129eea931d1996f4849cd83f546abc'
        '168855b598714abb27e01e52e0ed1e1a01ab14ffb2ee09d759308375359cd28c0a9f96c6b9dee0a2cc5713aec8ea831858d59f56a0a126bca3e1401b078fc7ab'
        '8d6937764aa47720245358ed2a20a5097808f4af2beb03479c0801d84ff5641a24bd92da909d5878c8115f1922772e883895a74c6aed1bdcc9a618766ab4b444'
        'a9ab35ff4d28e0aa700017f13bd0bb3cdb19a1b0d23b3a04a99315659d7e5b840ba3064486e5514465501fbf07a5a4cf9c665e1387e66735a811c058a8c12184'
        '02669f01546d33775cc3e9b91bddb4435dd4f5d88cca2226110a9f37f81eed6dcec0e11246c9f5d69abc12e211df9ffe26cedd7bc660844210d6ce94439b0c89'
        'd5eb083527b1382e780a3aee5927685f2ab53ac74e8afb2394840c96050e4aee292691bd405cf96c8431da694fe9a32656a4a563267e71e307d046ec53185221'
        'fa7422a6651dd91c1a3b2a7df275bacd7cb195f802731cf78c70078cb0aa0702e4f640f26c0b6a142023bbf90f56553c93e15d3f978ac1cd11809be0e0add62a'
        'de71c3ac18282bd7bec491cf5415f37ef2073fc42d9993a62a73516ec7ff25d94c98e4814ab879d868adad35a890d57417f44769b390454cd353db9fe8af1df0'
        'bc3cb3ab084514c13764bb1e59ab65975c4dbf2f26e2037363cf4c2410e1031d86fbaeabf3654fe022bed6e236172fcd492dcb035b169983b8dd70bd8e7781bc'
        'e00fce8262b826e0cc94f3c92fce0030af1f507303533f218d72d548fad7716bef786d04cf591ddafd93eb4f5fadd44a1d4f9a148b8019024e0597e46fd2a8d8'
        'ecfaef4695361a1c5980b12f530da43cb8ddbdd31b7ea377bafd4210fcc313cd443200c468174585d270967735a283124e750dba6be8589ff7660ab1d6b0bfb3'
        'e8dc6073ea575276c714f626286583243b74bac5ea21120fbd14e3c3c606c3ed8e56e255e8985131cb18b4cc384c66281760000f9ce93ccaf9a522ad681a061c'
        'bdf7fb285a3c38347cb22a323098596ba5d622fe85084d1e0d468200869dba9e292c61ac6955d224a17847c087cf9ccbc4dbcb3ff48596888b544baf3c450b07'
        'c57921315e83a3dc5c0a8863c3b08df20c20f1be607498e8317c1bd57bcd28252153204b0ba036875080a3bbe0ff31ba0629ba7debe57c179066faa3bde89ac1'
        '66581f512c723eb7ac8f7cf9acd757aebadfd56d3905ddf464b2c846bb0b9e1b3088bd9d6b9059c06048834acf57d548686365f0879919d3806a15998344895c'
        '08d3af977131be4c2f425f26d51b4cc2730d384d76796c3cb718378a4183209e3390b4d25b936d8853fc0e3cb9c4af2ef89ddf38e49a334bf0a2992c700b7bd0'
        'd8dd05c5271946af4f4dd5d431dbd0118b56c6e48737d8d80eadaca4e3b10bc828ae9000c925b4bd9760fd07cd91601f03dcab279211452a159b86c6a763f530'
        '505bf53669efa015724c513670fd20aa261404ef66612f242ac17ffea14e07a5997ef7e272840953b2f70a674e886047a0b4935da0607466afd05d90b7ef14c4'
        '9dcfa9a15edf9eb437e1581b02f289509a8620e197f528072e1f26c52060ed9a5ca024ef71905e917e51111ecdcbe113a5e0c05cda73744adbef188df5f61c7a'
        '321e892b2e542979561d97a0e09c8e4c6cbc1a7f7efc3cd2b0d75587f846cbbec220f458588d4a11db2e527a96b3fdc71a81d2a1cd266fa9a34572f9ffb9da89'
        '2fd9923815d72333ddca1151103f8557d5c724768b12cff552b94cea47e55d713a6319a79813515cb702b5151711ef67fdcfaabce62e6bd7116ca3572267f376'
        'd8c5b45c361b252b712ba931e1f64fb90eb1781f2a3204f673f268fda97e610253f3f584629e99353006ed8c8e1061693a02b6aa0088ff7bf47fd1a62a1aa627'
        'da8bf0888fd44e2beb23128adced17225ace1ff5e31bf04b2f99c24b4ffd0c8f05c4e0d63490b20983f237ffd96ca8681c1cf10de6bdd1ad4463c239ba680a30'
        '88d8d3bc31bb071b3b66a6276d5cb5ee0c0add168e26c7b89f62589b9290cfaaeef31ec60e376a1c027ec972bf1419653c1ffddd11a6a7f328e1533ae3f36810')
validpgpkeys=(
  '5B80C5754298F0CB55D8ED6ABCEF7E294B092E28' # Andre Heinecke (Release Signing Key)
  '6DAA6E64A76D2840571B4902528897B826403ADA' # Werner Koch (dist signing 2020)
  'AC8E115BF73E2D8D47FA9908E98E9B2D19C6C8BD' # Niibe Yutaka (GnuPG Release Key)
  '02F38DFF731FF97CB039A1DA549E695E905BA208' # GnuPG.com (Release Signing Key 2021)
)

prepare() {
  cd $pkgname

  local src
  for src in "${source[@]}"; do
    src="${src%%::*}"
    src="${src##*/}"
    [[ $src = *.patch ]] || continue
    msg2 "Applying patch $src..."
    patch -Np1 < "../$src"
  done

  sed -n '5, 28 p' COPYING.other > MIT.txt
  sed -n '30, 60 p' COPYING.other > BSD-4-Clause.txt
  sed -n '62, 92 p' COPYING.other > BSD-3-Clause.txt
  sed -n '95, 125 p' COPYING.other > BSD-2-Clause.txt
  sed -n '128, 160 p' COPYING.other > Unicode-TOU.txt

  ./autogen.sh
}

build() {
  local configure_options=(
    --enable-g13
    --enable-large-secmem  # prerequisite for large RSA keys
    --enable-maintainer-mode
    --libexecdir=/usr/lib/gnupg
    --prefix=/usr
    --sbindir=/usr/bin
    --sysconfdir=/etc
  )

  cd $pkgname
  ./configure "${configure_options[@]}"
  make
}

check() {
  cd $pkgname
  make check
}

package() {
  depends+=(
    bzip2 libbz2.so
    libassuan libassuan.so
    npth libnpth.so
    readline libreadline.so
  )

  cd $pkgname
  make DESTDIR="$pkgdir" install
  ln -s gpg "$pkgdir"/usr/bin/gpg2
  ln -s gpgv "$pkgdir"/usr/bin/gpgv2

  install -vDm 644 ../keyboxd.8 -t "$pkgdir/usr/share/man/man8/"
  install -vDm 644 {BSD-{2,3,4}-Clause,MIT,Unicode-TOU}.txt -t "$pkgdir/usr/share/licenses/$pkgname/"

  local systemdir="$pkgdir/usr/lib/systemd/"
  local wantsdir="${systemdir}user/sockets.target.wants/"
  install -vdm 755 "$wantsdir"

  local unit
  for unit in ../*.{service,socket}; do
    case $unit in
      *@.*) install -vDm 644 "$unit" -t "${systemdir}system/" ;;
      *.socket) ln -sv "../${unit##*/}" -t "$wantsdir" ;&
      *) install -vDm 644 "$unit" -t "${systemdir}user/" ;;
    esac
  done
}

# vim: ts=2 sw=2 et:
