##
##  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:         php
Summary:      PHP Scripting Language
URL:          http://www.php.net/
Vendor:       The PHP Project
Packager:     OpenPKG Project
Distribution: OpenPKG Community
Class:        BASE
Group:        Language
License:      PHP
Version:      8.4.11
Release:      20250801

#   package options
%option       with_cgi                  no
%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
%option       with_pcntl                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_mysql}" == "yes"
%undefine     with_mhash
%define       with_mhash         yes
%endif

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

#   build information
BuildPreReq:  OpenPKG, openpkg >= 20160101, gcc, flex, bison
PreReq:       OpenPKG, openpkg >= 20160101
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

%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 is the Command Line Interface (CLI) and Common Gateway
    Interface (CGI) version of PHP, intended for use in the "shebang"
    line ("#!%{l_prefix}/bin/php") of stand-alone PHP based programs
    and for use in the "shebang" line ("#!%{l_prefix}/cgi/php") of
    stand-alone webserver-independent CGI scripts.

%track
    prog 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/php \
        --with-config-file-path=%{l_prefix}/etc/php \
        --libdir=%{l_prefix}/lib/php \
        --mandir=%{l_prefix}/man \
        --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
%if "%{with_pcntl}" == "yes"
        --enable-pcntl \
%endif
%if "%{with_cgi}" == "yes"
        --enable-cgi \
%endif
        --enable-cli

    #   build package
    %{l_make} %{l_mflags}

%install
    #   install package
    %{l_make} %{l_mflags} install INSTALL_ROOT=$RPM_BUILD_ROOT

%if "%{with_cgi}" == "yes"
    #   move CGI executale
    %{l_shtool} mkdir -f -p -m 755 \
        $RPM_BUILD_ROOT%{l_prefix}/cgi
    mv  $RPM_BUILD_ROOT%{l_prefix}/bin/php-cgi \
        $RPM_BUILD_ROOT%{l_prefix}/cgi/php
%endif

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

    #   strip down installation
    rmdir $RPM_BUILD_ROOT%{l_prefix}/lib/php >/dev/null 2>&1 || true
    strip $RPM_BUILD_ROOT%{l_prefix}/bin/* >/dev/null 2>&1 || true

    #   determine installation files
    %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT %{l_files_std} \
        '%config %{l_prefix}/etc/php/*'

%files -f files

%clean

