# Maintainer: Alexey Pavlov <alexpux@gmail.com>

pkgname=('openssl' 'libopenssl' 'openssl-devel' 'openssl-docs')
pkgver=3.5.7
pkgrel=1
pkgdesc='The Open Source toolkit for Secure Sockets Layer and Transport Layer Security'
arch=('i686' 'x86_64')
url='https://www.openssl.org'
license=('spdx:Apache-2.0')
makedepends=('gcc' 'tar' 'perl' 'diffutils' 'nasm')
noextract=(${pkgname}-${pkgver}.tar.gz)
source=("https://github.com/openssl/openssl/releases/download/openssl-${pkgver}/openssl-${pkgver}.tar.gz"{,.asc}
        '0001-Use-usr-ssl-as-ca-dir-instead-of-.-demoCA.patch'
        '0002-Support-MSYS2.patch'
        '0004-Override-engines-directory.patch')
sha256sums=('a8c0d28a529ca480f9f36cf5792e2cd21984552a3c8e4aa11a24aa31aeac98e8'
            'SKIP'
            'd9a26120b16ac9787e12a18c9d6005e241097773b38d8c86641e20b22e2e9252'
            '3ce4e76cbfbed03f7d5bd8812818e08f1eaa54ce8d26bedb006f549e62cb148b'
            '546586caf16682ca305545db1f656094a757ae0c14abb53ed3349654846193de')
# https://www.openssl.org/community/otc.html
validpgpkeys=(
  '8657ABB260F056B1E5190839D9C4D26D0E604491' # Matt Caswell <matt@openssl.org>
  '7953AC1FBC3DC8B3B292393ED5E9E43F7DF9EE8C' # Richard Levitte <richard@levitte.org>
  'A21FAB74B0088AA361152586B8EF1A6BA9DA2D5C' # Tomáš Mráz <tm@t8m.info>
  'B7C1C14360F353A36862E4D5231C84CDDCC69C45' # Paul Dale <pauli@openssl.org>
  'EFC0A467D613CB83C7ED6D30D894E2CE8B3D79F5' # OpenSSL Management Committee <openssl-omc@openssl.org>
  'BA5473A2B0587B07FB27CF2D216094DFD0CB81EF' # OpenSSL <openssl@openssl.org>
)

prepare() {
  [[ -d ${srcdir}/${pkgname}-${pkgver} ]] || tar -xzvf ${srcdir}/${pkgname}-${pkgver}.tar.gz -C ${srcdir}
  cd ${srcdir}/${pkgname}-${pkgver}

  patch -p1 -i ${srcdir}/0001-Use-usr-ssl-as-ca-dir-instead-of-.-demoCA.patch
  patch -p1 -i ${srcdir}/0002-Support-MSYS2.patch
  patch -p1 -i ${srcdir}/0004-Override-engines-directory.patch
}

build() {
  cd ${srcdir}/${pkgname}-${pkgver}

  if [ "${CARCH}" == 'x86_64' ]; then
    openssltarget='Msys-x86_64'
  elif [ "${CARCH}" == 'i686' ]; then
    openssltarget='Msys'
  fi

  ./Configure \
    --prefix=/usr \
    --openssldir=/usr/ssl \
    --libdir=lib \
    shared \
    "${openssltarget}"

  make depend
  make all
  make DESTDIR=${srcdir}/dest MANDIR=/usr/share/man MANSUFFIX=ssl install
}

check() {
  cd ${srcdir}/${pkgname}-${pkgver}

  if [ "${CARCH}" == 'x86_64' ]; then
    TESTS='-test_symbol_presence'
  elif [ "${CARCH}" == 'i686' ]; then
    TESTS='-test_symbol_presence -test_sanity'
  fi
  # the test would write test data into /usr/ssl, which we do not want
  patch -R -p1 -i ${srcdir}/0001-Use-usr-ssl-as-ca-dir-instead-of-.-demoCA.patch
  make HARNESS_JOBS="$(nproc)" TESTS='$TESTS' test
  patch -p1 -i ${srcdir}/0001-Use-usr-ssl-as-ca-dir-instead-of-.-demoCA.patch
  # re-run make to re-generate CA.pl from the patched .in file.
  make apps/CA.pl
}

package_openssl() {
  depends=('libopenssl')
  optdepends=('ca-certificates' 'perl')

  mkdir -p ${pkgdir}/usr/bin
  cp -f ${srcdir}/dest/usr/bin/*.exe ${pkgdir}/usr/bin/
  cp -f ${srcdir}/dest/usr/bin/c_rehash ${pkgdir}/usr/bin/
  mkdir -p ${pkgdir}/usr/share/man
  cp -rf ${srcdir}/dest/usr/share/man/man1 ${pkgdir}/usr/share/man
  cp -rf ${srcdir}/dest/usr/share/man/man5 ${pkgdir}/usr/share/man
  cp -rf ${srcdir}/dest/usr/ssl ${pkgdir}/usr/
}

package_openssl-docs() {
  mkdir -p ${pkgdir}/usr/share/man
  cp -rf ${srcdir}/dest/usr/share/man/man3 ${pkgdir}/usr/share/man
  cp -rf ${srcdir}/dest/usr/share/man/man7 ${pkgdir}/usr/share/man
  cp -rf ${srcdir}/dest/usr/share/doc ${pkgdir}/usr/share
}

package_libopenssl() {
  depends=()
  groups=('libraries')

  mkdir -p ${pkgdir}/usr/bin
  cp -f ${srcdir}/dest/usr/bin/*.dll ${pkgdir}/usr/bin/

  mkdir -p ${pkgdir}/usr/lib/openssl
  cp -rf ${srcdir}/dest/usr/lib/openssl/engines-3 ${pkgdir}/usr/lib/openssl/
  chmod -R 755 ${pkgdir}/usr/lib/openssl/engines-3

  install -D -m644 ${srcdir}/openssl-${pkgver}/LICENSE.txt ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE.txt
}

package_openssl-devel() {
  pkgdesc="Openssl headers and libraries"
  groups=('development')
  depends=("libopenssl=${pkgver}")

  mkdir -p ${pkgdir}/usr/lib
  cp -rf ${srcdir}/dest/usr/include ${pkgdir}/usr/
  cp -rf ${srcdir}/dest/usr/lib/pkgconfig ${pkgdir}/usr/lib/
  cp -f ${srcdir}/dest/usr/lib/*.a ${pkgdir}/usr/lib
}
