##
##  apache-php.spec -- OpenPKG RPM Package Specification
##  Copyright (c) 2000-2025 OpenPKG Project <http://openpkg.org/>
##
##  Permission to use, copy, modify, and distribute this software for
##  any purpose with or without fee is hereby granted, provided that
##  the above copyright notice and this permission notice appear in all
##  copies.
##
##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
##  SUCH DAMAGE.
##

#   package information
Name:         apache-php
Summary:      Apache Extension: PHP Scripting Language
URL:          http://www.php.net/
Vendor:       The PHP Project
Packager:     OpenPKG Project
Distribution: OpenPKG Community
Class:        BASE
Group:        Web
License:      PHP
Version:      8.3.13
Release:      20241027

#   package options
%option       with_bc                   no
%option       with_bdb                  no
%option       with_bzip2                no
%option       with_calendar             no
%option       with_ctype                no
%option       with_curl                 no
%option       with_debug                no
%option       with_dom                  no
%option       with_exif                 no
%option       with_fileinfo             no
%option       with_freetype             no
%option       with_ftp                  no
%option       with_gd                   no
%option       with_gdbm                 no
%option       with_gettext              no
%option       with_gmp                  no
%option       with_iconv                no
%option       with_imap                 no
%option       with_intl                 no
%option       with_tokenizer            no
%option       with_mbregex              no
%option       with_mbstring             no
%option       with_mcrypt               no
%option       with_mhash                no
%option       with_mm                   no
%option       with_mysql                no
%option       with_oci8                 no
%option       with_odbc                 no
%option       with_opcache              no
%option       with_openldap             no
%option       with_openldapsasl         no
%option       with_pear                 no
%option       with_pgsql                no
%option       with_phar                 no
%option       with_posix                no
%option       with_sendmail             no
%option       with_session              no
%option       with_simplexml            no
%option       with_snmp                 no
%option       with_soap                 no
%option       with_sockets              no
%option       with_sqlite               no
%option       with_ssl                  no
%option       with_tidy                 no
%option       with_versioning           no
%option       with_wddx                 no
%option       with_xml                  no
%option       with_xslt                 no
%option       with_zlib                 no
%option       with_zip                  no

#   fixing implicit extension dependencies and correlations
%if "%{with_mm}" == "yes"
%undefine     with_session
%define       with_session       yes
%endif
%if "%{with_pear}" == "yes"
%undefine     with_xml
%define       with_xml           yes
%endif
%if "%{with_freetype}" == "yes"
%undefine     with_gd
%define       with_gd            yes
%endif
%if "%{with_gd}" == "yes" || "%{with_dom}" == "yes" || "%{with_zip}" == "yes"
%undefine     with_zlib
%define       with_zlib          yes
%endif
%if "%{with_xslt}" == "yes"
%undefine     with_dom
%define       with_dom           yes
%endif
%if "%{with_dom}" == "yes"
%undefine     with_xml
%define       with_xml           yes
%endif
%if "%{with_soap}" == "yes"
%undefine     with_xml
%define       with_xml           yes
%endif
%if "%{with_pgsql}" == "yes" || "%{with_mysql}" == "yes"
%undefine     with_ssl
%define       with_ssl           yes
%endif
%if "%{with_mbstring}" == "yes"
%undefine     with_mbregex
%define       with_mbregex       yes
%endif

#   list of sources
Source0:      https://www.php.net/distributions/php-%{version}.tar.xz
Source1:      apache-php.ini
Source2:      apache-php.conf
Patch0:       apache-php.patch

#   build information
BuildPreReq:  OpenPKG, openpkg >= 20160101, gcc, flex, bison
PreReq:       OpenPKG, openpkg >= 20160101
BuildPreReq:  apache
PreReq:       apache
BuildPreReq:  pcre2
PreReq:       pcre2
%if "%{with_sqlite}" == "yes"
BuildPreReq:  sqlite
PreReq:       sqlite
%endif
%if "%{with_pgsql}" == "yes"
BuildPreReq:  postgresql
PreReq:       postgresql
%endif
%if "%{with_gd}" == "yes"
BuildPreReq:  gd >= 2.0.20, jpeg, png
PreReq:       gd >= 2.0.20, jpeg, png
%endif
%if "%{with_bdb}" == "yes"
BuildPreReq:  db
PreReq:       db
%endif
%if "%{with_zlib}" == "yes"
BuildPreReq:  zlib
PreReq:       zlib
%endif
%if "%{with_zip}" == "yes"
BuildPreReq:  libzip, pkgconfig
PreReq:       libzip
%endif
%if "%{with_bzip2}" == "yes"
BuildPreReq:  bzip2
PreReq:       bzip2
%endif
%if "%{with_ssl}" == "yes"
BuildPreReq:  openssl
PreReq:       openssl
%endif
%if "%{with_openldap}" == "yes"
BuildPreReq:  openldap
PreReq:       openldap
%if "%{with_openldapsasl}" == "yes"
BuildPreReq:  openldap::with_sasl = yes
PreReq:       openldap::with_sasl = yes
%else
BuildPreReq:  openldap::with_sasl = no
PreReq:       openldap::with_sasl = no
%endif
%endif
%if "%{with_mm}" == "yes"
BuildPreReq:  mm
PreReq:       mm
%endif
%if "%{with_freetype}" == "yes"
BuildPreReq:  freetype, pkgconfig
PreReq:       freetype
%endif
%if "%{with_gettext}" == "yes"
BuildPreReq:  gettext, libiconv
PreReq:       gettext, libiconv
%endif
%if "%{with_iconv}" == "yes"
BuildPreReq:  libiconv
PreReq:       libiconv
%endif
%if "%{with_imap}" == "yes"
BuildPreReq:  imap, openssl
PreReq:       imap, openssl
%endif
%if "%{with_intl}" == "yes"
BuildPreReq:  icu
PreReq:       icu
%endif
%if "%{with_xml}" == "yes"
BuildPreReq:  libxml
PreReq:       libxml
%endif
%if "%{with_xslt}" == "yes"
BuildPreReq:  libxslt
PreReq:       libxslt
%endif
%if "%{with_dom}" == "yes"
BuildPreReq:  libxml, libxslt
PreReq:       libxml, libxslt
%endif
%if "%{with_curl}" == "yes"
BuildPreReq:  curl
PreReq:       curl
%endif
%if "%{with_mhash}" == "yes"
BuildPreReq:  mhash
PreReq:       mhash
%endif
%if "%{with_mcrypt}" == "yes"
BuildPreReq:  libmcrypt
PreReq:       libmcrypt
%endif
%if "%{with_gdbm}" == "yes"
BuildPreReq:  gdbm, gdbm::with_ndbm = yes
PreReq:       gdbm, gdbm::with_ndbm = yes
%endif
%if "%{with_oci8}" == "yes"
BuildPreReq:  oracle
PreReq:       oracle
%endif
%if "%{with_snmp}" == "yes"
BuildPreReq:  snmp
PreReq:       snmp
%endif
%if "%{with_odbc}" == "yes"
BuildPreReq:  unixodbc
PreReq:       unixodbc
%endif
%if "%{with_sendmail}" == "yes"
BuildPreReq:  MTA
PreReq:       MTA
%endif
%if "%{with_simplexml}" == "yes"
BuildPreReq:  libxml
PreReq:       libxml
%endif
%if "%{with_tidy}" == "yes"
BuildPreReq:  tidy
PreReq:       tidy
%endif
%if "%{with_gmp}" == "yes"
BuildPreReq:  gmp
PreReq:       gmp
%endif
%if "%{with_mbregex}" == "yes"
BuildPreReq:  onig
PreReq:       onig
%endif

%description
    PHP is an HTML-embedded scripting language. Much of its syntax is
    borrowed from C, Java and Perl with a couple of unique PHP-specific
    features thrown in. The goal of the language is to allow web
    developers to write dynamically generated pages quickly.

    This package provides a Dynamic Shared Object (DSO) for the Apache
    HTTP 2.2 web server. In general speaking, this module is also known
    as mod_php.

%track
    prog apache-php = {
        version   = %{version}
        url       = https://www.php.net/downloads.php
        regex     = php-(\d+\.\d+\.\d+)\.tar\.xz
    }

%prep
    %setup -q -n php-%{version}
    %patch -p0

%build
    #   configure package
    case "%{l_platform -t}" in
        *-sunos5.10 ) cflags="%{l_cflags}"    ;;
        *           ) cflags="%{l_cflags -O}" ;;
    esac
    cppflags="%{l_cppflags}"
    ldflags="%{l_ldflags}"
    libs=""
%if "%{with_freetype}" == "yes"
    cppflags="%{l_cppflags freetype .} $cppflags"
%endif
%if "%{with_gdbm}" == "yes"
    libs="$libs -lndbm -lgdbm"
%endif
%if "%{with_gd}" == "yes"
    libs="$libs -lpng -lz"
%endif
%if "%{with_gettext}" == "yes"
    libs="$libs -liconv"
%endif
%if "%{with_openldap}" == "yes" && "%{with_openldapsasl}" == "yes"
    libs="$libs -lsasl2"
%endif
%if "%{with_imap}" == "yes"
    libs="$libs -lssl -lcrypto"
%endif
%if "%{with_intl}" == "yes"
    cppflags="%{l_cppflags icu .} $cppflags"
%endif
%if "%{with_bdb}" == "yes"
    libs="$libs -ldb"
%endif
%if "%{with_pgsql}" == "yes"
    libs="$libs `pg_config --libs`"
%endif
%if "%{with_oci8}" == "yes"
    ORACLE_HOME="`%{l_rc} --query oracle_home`"
    export ORACLE_HOME
%endif
%if "%{with_zip}" == "yes"
    libs="$libs `pkg-config libzip --libs`"
%endif
    CC="%{l_cc}" \
    CFLAGS="$cflags" \
    CPPFLAGS="$cppflags" \
    LDFLAGS="$ldflags" \
    LIBS="$libs" \
%if "%{with_sendmail}" == "yes"
    PROG_SENDMAIL="%{l_prefix}/sbin/sendmail" \
%else
    PROG_SENDMAIL="`%{l_shtool} path false`" \
%endif
    ./configure \
        --prefix=%{l_prefix} \
        --sysconfdir=%{l_prefix}/etc/apache \
        --with-config-file-path=%{l_prefix}/etc/apache \
        --libdir=%{l_prefix}/lib/php \
        --disable-all \
        --enable-pdo \
        --enable-filter \
        --with-external-pcre \
%if "%{with_fileinfo}" == "yes"
        --enable-fileinfo \
%endif
%if "%{with_calendar}" == "yes"
        --enable-calendar \
%endif
%if "%{with_sqlite}" == "yes"
        --with-sqlite3=%{l_prefix} \
        --with-pdo-sqlite=%{l_prefix} \
%else
        --without-pdo-sqlite \
%endif
%if "%{with_mysql}" == "yes"
        --with-mysqli=mysqlnd \
        --with-pdo-mysql=mysqlnd \
        --with-mysql-sock=%{l_prefix}/var/mysql/run/mysqld.sock \
%else
        --without-mysqli \
        --without-pdo-mysql \
%endif
%if "%{with_pgsql}" == "yes"
        --with-pgsql=%{l_prefix} \
        --with-pdo-pgsql=%{l_prefix} \
%else
        --without-pgsql \
%endif
%if "%{with_posix}" == "yes"
        --enable-posix \
%endif
%if "%{with_gd}" == "yes"
        --with-gd=yes \
        --with-jpeg-dir=%{l_prefix} \
        --with-png-dir=%{l_prefix} \
%endif
%if "%{with_gmp}" == "yes"
        --with-gmp=%{l_prefix} \
%endif
%if "%{with_freetype}" == "yes"
        --with-freetype-dir=%{l_prefix} \
%endif
%if "%{with_bdb}" == "yes"
        --with-db4=%{l_prefix} \
%endif
%if "%{with_debug}" == "yes"
        --enable-debug \
%else
        --disable-debug \
%endif
%if "%{with_zlib}" == "yes"
        --with-zlib=%{l_prefix} \
        --with-zlib-dir=%{l_prefix} \
%endif
%if "%{with_bzip2}" == "yes"
        --with-bz2=%{l_prefix} \
%endif
%if "%{with_ssl}" == "yes" || "%{with_openldap}" == "yes"
        --with-openssl=%{l_prefix} \
%endif
%if "%{with_openldap}" == "yes"
        --with-ldap=%{l_prefix} \
%endif
%if "%{with_session}" == "yes"
        --enable-session \
%endif
%if "%{with_mm}" == "yes"
        --with-mm=%{l_prefix} \
%endif
%if "%{with_ftp}" == "yes"
        --enable-ftp \
%endif
%if "%{with_oci8}" == "yes"
        --with-oci8 \
%endif
%if "%{with_gettext}" == "yes"
        --with-gettext=%{l_prefix} \
%endif
%if "%{with_imap}" == "yes"
        --with-imap=%{l_prefix} \
        --with-imap-ssl=%{l_prefix} \
%endif
%if "%{with_intl}" == "yes"
        --enable-intl \
        --with-icu-dir=%{l_prefix} \
%endif
%if "%{with_tokenizer}" == "yes"
        --enable-tokenizer \
%else
        --disable-tokenizer \
%endif
%if "%{with_xml}" == "yes"
        --enable-xml \
        --enable-xmlreader \
        --enable-xmlwriter \
        --with-libxml \
%else
        --disable-xml \
%endif
%if "%{with_xslt}" == "yes"
        --with-xsl \
%else
        --without-xsl \
%endif
%if "%{with_dom}" == "yes"
        --enable-dom \
%else
        --disable-dom \
%endif
%if "%{with_wddx}" == "yes"
        --enable-wddx \
%endif
%if "%{with_soap}" == "yes"
        --enable-soap \
%endif
%if "%{with_bc}" == "yes"
        --enable-bcmath \
%endif
%if "%{with_mhash}" == "yes"
        --with-mhash=%{l_prefix} \
%endif
%if "%{with_mcrypt}" == "yes"
        --with-mcrypt=%{l_prefix} \
%endif
%if "%{with_ctype}" == "yes"
        --enable-ctype \
%endif
%if "%{with_curl}" == "yes"
        --with-curl=%{l_prefix} \
%endif
%if "%{with_gdbm}" == "yes"
        --with-gdbm=%{l_prefix} \
%endif
%if "%{with_versioning}" == "yes"
        --enable-versioning \
%endif
%if "%{with_pear}" == "yes"
        --with-pear=%{l_prefix}/lib/php \
%else
        --without-pear \
%endif
%if "%{with_phar}" == "yes"
        --enable-phar \
%else
        --disable-phar \
%endif
%if "%{with_sockets}" == "yes"
        --enable-sockets \
%endif
%if "%{with_simplexml}" == "yes"
        --enable-simplexml \
        --with-libxml \
%else
        --disable-simplexml \
%endif
%if "%{with_snmp}" == "yes"
        --with-snmp=%{l_prefix} \
        --with-openssl-dir=%{l_prefix} \
%endif
%if "%{with_odbc}" == "yes"
        --with-unixODBC=%{l_prefix} \
        --with-pdo-odbc=unixODBC,%{l_prefix} \
%endif
%if "%{with_mbregex}" == "yes"
        --enable-mbregex \
%endif
%if "%{with_mbstring}" == "yes"
        --enable-mbstring \
%endif
%if "%{with_exif}" == "yes"
        --enable-exif \
%endif
%if "%{with_iconv}" == "yes"
        --with-iconv=%{l_prefix} \
%endif
%if "%{with_tidy}" == "yes"
        --with-tidy=%{l_prefix} \
%else
        --without-tidy \
%endif
%if "%{with_zip}" == "yes"
        --with-zip \
%else
        --without-zip \
%endif
%if "%{with_opcache}" == "yes"
        --enable-opcache \
%endif
        --with-apxs2=%{l_prefix}/sbin/apxs \
        --disable-cli \
        --disable-cgi

    #   build package
    %{l_make} %{l_mflags}

%install
    #   install package
    %{l_shtool} mkdir -f -p -m 755 \
        $RPM_BUILD_ROOT%{l_prefix}/etc/apache
    ( echo "#"
      echo "LoadModule dummy_module modules/dummy.so"
      echo "#"
    ) >$RPM_BUILD_ROOT%{l_prefix}/etc/apache/apache.conf
    %{l_make} %{l_mflags} install-sapi INSTALL_ROOT=$RPM_BUILD_ROOT
    mv  $RPM_BUILD_ROOT%{l_prefix}/libexec/apache/libphp.so \
        $RPM_BUILD_ROOT%{l_prefix}/libexec/apache/mod_php.so
    rm -f $RPM_BUILD_ROOT%{l_prefix}/etc/apache/apache.conf*

    #   install default configuration file
    %{l_shtool} mkdir -f -p -m 755 \
        $RPM_BUILD_ROOT%{l_prefix}/etc/apache/apache.d
    %{l_shtool} install -c -m 644 %{l_value -s -a} \
        %{SOURCE apache-php.ini} \
        $RPM_BUILD_ROOT%{l_prefix}/etc/apache/
    %{l_shtool} install -c -m 644 %{l_value -s -a} \
        %{SOURCE apache-php.conf} \
        $RPM_BUILD_ROOT%{l_prefix}/etc/apache/apache.d/

    #   create session storage directory
%if "%{with_session}" == "yes"
    %{l_shtool} mkdir -f -p -m 755 \
        $RPM_BUILD_ROOT%{l_prefix}/var/apache/run/apache-php.session
%endif

    #   determine installation files
    %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT %{l_files_std} \
%if "%{with_session}" == "yes"
        '%attr(0750,%{l_nusr},%{l_ngrp}) %{l_prefix}/var/apache/run/apache-php.session' \
%endif
        '%config %{l_prefix}/etc/apache/apache-php.ini' \
        '%config %{l_prefix}/etc/apache/apache.d/apache-php.conf'

%files -f files

%clean

%post
    #   after upgrade, restart service
    [ $1 -eq 2 ] || exit 0
    eval `%{l_rc} apache status 2>/dev/null`
    [ ".$apache_active" = .yes ] && %{l_rc} apache restart
    exit 0

