# Maintainer: Levente Polyak <anthraxx[at]archlinux[dot]org>
# Contributor: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Contributor: William Rea <sillywilly@gmail.com>

pkgname=maven
pkgver=3.9.11
pkgrel=1
pkgdesc='Java project management and project comprehension tool'
url='https://maven.apache.org'
arch=('any')
license=('Apache-2.0')
depends=('java-environment>=8' 'bash' 'procps-ng')
makedepends=('maven' 'java-environment=21')
backup=('usr/share/java/maven/conf/settings.xml')
source=(https://downloads.apache.org/maven/maven-3/${pkgver}/source/apache-maven-${pkgver}-src.tar.gz{,.asc}
        # both bin artifacts are only used for reproducible builds from source
        https://downloads.apache.org/maven/maven-3/${pkgver}/binaries/apache-maven-${pkgver}-bin.tar.gz{,.asc,.sha512}
        maven.sh)
noextract=(apache-maven-${pkgver}-bin.tar.gz)
# https://archive.apache.org/dist/maven/KEYS
validpgpkeys=(
  '042B29E928995B9DB963C636C7CA19B7B620D787' # StephenConnolly<stephenc@apache.org>
  'AE9E53FC28FF2AB1012273D0BF1518E0160788A2' # Karl Heinz Marbaise (ASF Key) <khmarbaise@apache.org>
  'BBE7232D7991050B54C8EA0ADC08637CA615D22C' # Enrico Olivelli <eolivelli@apache.org>
  'B02137D875D833D9B23392ECAE5A7FB608A0221C' # Robert Scholte <rfscholte@apache.org>
  '6A814B1F869C2BBEAB7CB7271A2A1C94BDE89688' # Michael Osipov (Java developer) <1983-01-06@gmx.net>
  '29BEA2A645F2D6CED7FB12E02B172E3E156466E8' # Tamas Cservenak (ASF) (Release key) <cstamas@apache.org>
  '88BE34F94BDB2B5357044E2E3A387D43964143E3' # Tamas Cservenak <tamas@cservenak.net>
  '84789D24DF77A32433CE1F079EB80E92EB2135B1' # Slawomir Jaranowski <sjaranowski@apache.org>
)
sha256sums=('f312bb9db25937f1fd7ca1d53a086a3cdde596086147a42a75af027058810b9e'
            'SKIP'
            '4b7195b6a4f5c81af4c0212677a32ee8143643401bc6e1e8412e6b06ea82beac'
            'SKIP'
            '75571bfc053ec9de74c3b752b033317499a193e124ec1c264603fdf6a822a0db'
            '6ec2fef2a5f179f873b180452c72915e639e7b881a6894e13c209816b3518908')

_buildnumber() {
  # use same build number as the binary dist but prove that our source build is
  # identical and therefor canonical in the build() step
  bsdtar xOf <(bsdtar xOf "${srcdir}/apache-maven-${pkgver}-bin.tar.gz" apache-maven-${pkgver}/lib/maven-core-${pkgver}.jar) \
    org/apache/maven/messages/build.properties | grep buildNumber | cut -d= -f2 | tr -cd '[:print:]'
}

build() {
  cd apache-maven-${pkgver}

  export JAVA_HOME="/usr/lib/jvm/java-21-openjdk"
  export PATH="/usr/lib/jvm/java-21-openjdk/bin:$PATH"
  # Consult the link for JDK and line separator of buildpec for reproducible
  # https://github.com/jvm-repo-rebuild/reproducible-central/blob/master/content/org/apache/maven/maven/README.md
  mvn package \
    -DbuildNumber="$(_buildnumber)" \
    -Dline.separator=$'\n' \
    -Dproject.build.sourceEncoding=UTF-8 -e \
    -Dmaven.repo.local="${srcdir}/repo" \
    -DskipTests

  # check reproducible builds result against upstream hashes. This way we can
  # prove that our source build is identical and therefor canonical so we are
  # technically free to use the static build number in our build env. On top we
  # ensure bit by bit identical upstream signed binary dist against our variant
  # via diff exiting non-successful on mismatch.
  sha512sum -c <(printf "$(cat ${srcdir}/apache-maven-${pkgver}-bin.tar.gz.sha512) apache-maven/target/apache-maven-${pkgver}-bin.tar.gz")
  diff "${srcdir}/apache-maven-${pkgver}-bin.tar.gz" apache-maven/target/apache-maven-${pkgver}-bin.tar.gz
}

check() {
  cd apache-maven-${pkgver}

  export JAVA_HOME="/usr/lib/jvm/java-21-openjdk"
  export PATH="/usr/lib/jvm/java-21-openjdk/bin:$PATH"
  mvn test \
    -Dmaven.repo.local="${srcdir}/repo"
}

package() {
  cd apache-maven-${pkgver}

  install -Dm 644 ../maven.sh -t "${pkgdir}/etc/profile.d"

  install -d "${pkgdir}/usr/share/java/${pkgname}"
  bsdtar xf apache-maven/target/apache-maven-${pkgver}-bin.tar.gz \
    --strip-components=1 \
    -C "${pkgdir}/usr/share/java/${pkgname}"

  install -d "${pkgdir}/usr/bin"
  ln -s "/usr/share/java/${pkgname}/bin/mvn" "${pkgdir}/usr/bin/mvn"
  ln -s "/usr/share/java/${pkgname}/bin/mvnDebug" "${pkgdir}/usr/bin/mvnDebug"
}

# vim: ts=2 sw=2 et:
