# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4

PortSystem          1.0
PortGroup           java 1.0
PortGroup           select 1.0

name                apache-spark
categories          java parallel devel lang databases
maintainers         nomaintainer
license             Apache-2
homepage            https://spark.apache.org/
supported_archs     noarch
use_xcode           no

description         Engine for large-scale data processing
long_description \
    Apache Spark is a lightning-fast unified analytics engine for big data and machine \
    learning. It was originally developed at UC Berkeley in 2009. Apache Spark is a fast \
    and general-purpose cluster computing system. It provides high-level APIs in Java, \
    Scala and Python, and an optimized engine that supports general execution graphs. \
    It also supports a rich set of higher-level tools including Spark SQL for SQL and \
    structured data processing, MLlib for machine learning, GraphX for graph processing, and Spark Streaming.

# *NOTE* Remember to update latestVersion on a version upgrade.
set latestVersion   apache-spark-4.2

subport apache-spark-2.4 {
    version         2.4.8
    revision        0
    set archiveOnly 1
    distname        spark-${version}-bin-hadoop2.7
    checksums       rmd160  aeea8553404c726951cc9b28fc449a63f741089b \
                    sha256  feedb945ab4906d098d9d71050a4dab1972de489423008489708ecf496ce91cd \
                    size    235899716
    java.version    8+
    java.fallback   openjdk8
    depends_run     port:sbt port:scala2.12 port:python37
}

subport apache-spark-3.0 {
    version         3.0.3
    revision        0
    set archiveOnly 1
    distname        spark-${version}-bin-hadoop3.2
    checksums       rmd160  52d6aaaae488bd6111929a5af49c94b7c1481179 \
                    sha256  65dbff958be6ac5f22e850d0652544d75f8d8a81ce77b5517060a3606eb848a2 \
                    size    224762914
    java.version    11+
    java.fallback   openjdk11
    depends_run     port:sbt port:scala2.13 port:python38
}

subport apache-spark-3.1 {
    version         3.1.3
    revision        0
    set archiveOnly 1
    distname        spark-${version}-bin-hadoop3.2
    checksums       rmd160  5cd49b89fa30f7975f89e9dd815bc38606d8e94d \
                    sha256  2411de04bec186b8651b27a5f16e4b511103c3c1e3f20fbb98b1f8804e61b77f \
                    size    231842529
    java.version    11+
    java.fallback   openjdk11
    depends_run     port:sbt port:scala2.12 port:python38
}

subport apache-spark-3.2 {
    version         3.2.4
    revision        0
    set archiveOnly 1
    distname        spark-${version}-bin-hadoop3.2-scala2.13
    checksums       rmd160  88dcf4a869826b7a70223dcc7ac7cea7e79feab9 \
                    sha256  f863a7095339c5fdc62a4a0dec3c733b882629866c21a190bfe71429487cca01 \
                    size    307404268
    java.version    11+
    java.fallback   openjdk11
    depends_run     port:sbt port:scala2.13 port:python310
}

subport apache-spark-3.3 {
    version         3.3.4
    revision        0
    set archiveOnly 1
    distname        spark-${version}-bin-hadoop3-scala2.13
    checksums       rmd160  923366083abedc683ffa2c2724a4094b09c4836f \
                    sha256  daba49050e3f2c89fa53f99d9ad1ee1391f3b329e8aa1b49318f2a22a8ad66fc \
                    size    306488887
    java.version    17+
    java.fallback   openjdk17
    depends_run     port:sbt port:scala2.13 port:python311
}

subport apache-spark-3.4 {
    version         3.4.4
    revision        0
    set archiveOnly 1
    distname        spark-${version}-bin-hadoop3-scala2.13
    checksums       rmd160  d086c38031fc3c597a08b1a394fe2f5716bdd062 \
                    sha256  fcee9644d932b55872657d47f8cf812098da243790e9ceb0c16c32333afe8146 \
                    size    397953108
    java.version    17+
    java.fallback   openjdk17
    depends_run     port:sbt port:scala2.13 port:python311
}

subport apache-spark-3.5 {
    version         3.5.9
    revision        0
    distname        spark-${version}-bin-hadoop3
    checksums       rmd160  8f3ac3807fde64a81c05f036ab3ae605c635cc43 \
                    sha256  31620af875b4b7fbc58422930ada27940c1417fdee3707a029680643b943150f \
                    size    401379923
    java.version    17+
    java.fallback   openjdk17
    depends_run     port:sbt port:scala2.12 port:python311
}

subport apache-spark-4.0 {
    version         4.0.4
    revision        0
    distname        spark-${version}-bin-hadoop3
    checksums       rmd160  bb1666d82e9b8628022debd81cf001a1b85fd9c8 \
                    sha256  1fe7536a45b440802ffe33217db5ba7d4169ec35ce63ca0faa92ec01c5f4b2f6 \
                    size    549019730
    java.version    17+
    java.fallback   openjdk17
    depends_run     port:sbt port:scala2.13 port:python311
}

subport apache-spark-4.1 {
    version         4.1.3
    revision        0
    distname        spark-${version}-bin-hadoop3
    checksums       rmd160  e0cae9fcce94298a45ec38466156043e8053e7a0 \
                    sha256  1e73b723f16421512b4bcfbaa4f6b33fd4eb4a874f4d3e041e9b5d385e28f47a \
                    size    572874252
    java.version    17+
    java.fallback   openjdk17
    depends_run     port:sbt port:scala2.13 port:python311
}

subport apache-spark-4.2 {
    epoch           1
    version         4.2.0
    revision        0
    distname        spark-${version}-bin-hadoop3
    checksums       rmd160  541156c1febcdb866d62e85d3fc3f0d023a2dbc6 \
                    sha256  cc1232a4a23858300ba9c887b7ac5a9128b4a1819cea2fa8ee2bc6ce98ced72b \
                    size    555409690
    java.version    21+
    java.fallback   openjdk21
    depends_run     port:sbt port:scala2.13 port:python311
}

subport apache-spark_select {}

if {${subport} eq ${name}} {
    PortGroup       obsolete 1.0

    replaced_by     ${latestVersion}
    epoch           1
    version         4.2.0
    revision        0

} elseif {${subport} eq "apache-spark_select"} {
    version         0.1
    revision        0
    supported_archs noarch
    platforms       any

    description     common files for selecting the default apache-spark version
    long_description \
        apache-spark_select installs files that allow 'port select' to switch the \
        default version of apache-spark based on the version of Apache Spark requested. \
        It creates unsuffixed symlinks in the MacPorts prefix that point to the selected version.
    homepage        https://www.macports.org/

    distfiles
    use_configure   no
    build {}

    destroot {
        select::install apache-spark ${filespath}/base
        select::install apache-spark ${filespath}/none
    }

    livecheck.type  none

} else {
    # Current releases are served by the Apache CDN (dlcdn); once a release
    # ages out of the supported set it is removed from the CDN and remains
    # only on archive.apache.org. Archived versions are tagged with
    # 'archiveOnly' in their subport block. The archive fallback is always
    # kept so live versions stay installable after they later age off the CDN.
    if {[info exists archiveOnly]} {
        master_sites    https://archive.apache.org/dist/spark/spark-${version}/
    } else {
        master_sites    https://dlcdn.apache.org/spark/spark-${version}/ \
                        https://archive.apache.org/dist/spark/spark-${version}/
    }

    extract.suffix  .tgz
    extract.mkdir   yes
    use_configure   no

    depends_run-append  port:apache-spark_select

    select.group    apache-spark
    select.file     ${filespath}/${subport}

    build {}

    destroot {
        set sparkdir ${prefix}/share/${subport}

        xinstall -m 755 -d ${destroot}${prefix}/share

        file copy ${worksrcpath}/${distname} ${destroot}${sparkdir}

        foreach sparkcmd {
            beeline
            docker-image-tool.sh
            find-spark-home
            load-spark-env.sh
            pyspark
            run-example
            spark-class
            spark-connect-shell
            spark-pipelines
            spark-shell
            spark-sql
            spark-submit
            sparkR
        } {
            set sparkcmdpath ${worksrcpath}/${distname}/bin/${sparkcmd}
            if {[file exists ${sparkcmdpath}]} {
                xinstall -m 755 ${sparkcmdpath} ${destroot}${sparkdir}/bin
            }
        }
    }

    notes "
The Spark Home environment variable requires the environment variables to be exported and
set as well as the PySpark Python version. Please add the following lines to your .profile
or export in your shell session to make ${subport} work:

    export SPARK_HOME=${prefix}/share/${subport}
    export PYSPARK_PYTHON=${prefix}/bin/python3
"
}
