#
# TODO:
-# - cannot find libexpat for XML module,
-# with --with-expat-dir=/usr finds, but xmlrpc is built as static
-# - libphp4.so is linked with -lnsl
-# - msession.so isn't linked with -lphoenix
-# - odbc.so isn't linked with -lodbc*
-# - wddx.so isn't linked with anything except libc
+# - fastcgi option in cgi SAPI? or separate fcgi SAPI?
#
# Automatic pear requirements finding:
%include /usr/lib/rpm/macros.php
# _without_openssl - without OpenSSL support and OpenSSL extension module
# _without_pcre - without PCRE extension module
# _without_pdf - without PDF extension module
-# _without_pspell - without pspell extension module
# _without_pgsql - without PostgreSQL extension module
-# _without_snmp - without SNMP extension module
+# _without_pspell - without pspell extension module
# _without_recode - without recode extension module
+# _without_snmp - without SNMP extension module
# _without_sybase_ct - without Sybase-CT extension module
# _without_wddx - without WDDX extension module
-# _without_xml - without XML extension module
# _without_xmlrpc - without XML-RPC extension module
+# _without_xml - without XML extension module
# _without_xslt - without XSLT extension module
+# _without_yaz - without YAZ extension module
Summary: The PHP HTML-embedded scripting language for use with Apache
Summary(fr): Le langage de script embarque-HTML PHP pour Apache
Summary(uk): PHP ÷ÅÒÓ¦§ 4 -- ÍÏ×Á ÐÒÅÐÒÏÃÅÓÕ×ÁÎÎÑ HTML-ÆÁÊ̦×, ×ÉËÏÎÕ×ÁÎÁ ÎÁ ÓÅÒ×ÅÒ¦
Name: php
Version: 4.3.0
-Release: 0.1
+Release: 0.7
Epoch: 3
Group: Libraries
License: PHP
Source5: %{name}-mod_%{name}.conf
Source6: %{name}-cgi.ini
Source7: %{name}-apache.ini
+Source8: %{name}-cli.ini
Patch0: %{name}-shared.patch
Patch1: %{name}-pldlogo.patch
-#Patch2: %{name}-mysql-socket.patch
+Patch2: %{name}-xml-expat-fix.patch
Patch3: %{name}-mail.patch
-#Patch4: %{name}-link-libs.patch
-#Patch5: %{name}-fastcgi.patch
-Patch6: %{name}-libpq_fs_h_path.patch
-Patch7: %{name}-wddx-fix.patch
-Patch8: %{name}-cpdf-fix.patch
-#Patch9: %{name}-session-fix-shared.patch
-Patch10: %{name}-hyperwave-fix.patch
-#Patch11: %{name}-openssl-for-ext-only.patch
-Patch12: %{name}-java-fix.patch
-Patch13: %{name}-mcal-shared-lib.patch
-Patch14: %{name}-msession-shared-lib.patch
-Patch15: %{name}-build_modules.patch
-#Patch16: %{name}-sapi-ini-file.patch
-#Patch17: %{name}-%{name}_iconv_string_declaration.patch
-#Patch18: %{name}-pear-cosmetic.patch
-#Patch19: %{name}-mnogosearch.patch
-Patch20: %{name}-ini.patch
-Patch21: %{name}-acam.patch
-Patch22: %{name}-xmlrpc-fix.patch
-#Patch23: %{name}-iconv-bug18039.patch
-Patch24: %{name}-db4.patch
+Patch4: %{name}-link-libs.patch
+Patch5: %{name}-libpq_fs_h_path.patch
+Patch6: %{name}-wddx-fix.patch
+Patch7: %{name}-cpdf-fix.patch
+Patch8: %{name}-hyperwave-fix.patch
+Patch9: %{name}-odbc-fix.patch
+Patch10: %{name}-java-norpath.patch
+Patch11: %{name}-mcal-shared-lib.patch
+Patch12: %{name}-msession-shared-lib.patch
+Patch13: %{name}-build_modules.patch
+Patch14: %{name}-sapi-ini-file.patch
+Patch15: %{name}-dl-zlib.patch
+Patch16: %{name}-dl-pcre.patch
+Patch17: %{name}-session-unregister.patch
+Patch18: %{name}-ini.patch
+Patch19: %{name}-acam.patch
+Patch20: %{name}-xmlrpc-fix.patch
+Patch21: %{name}-libtool.patch
+Patch22: %{name}-db4.patch
Icon: php4.gif
URL: http://www.php.net/
%{!?_without_interbase:%{!?_with_interbase_inst:BuildRequires: Firebird-devel}}
BuildRequires: bison
BuildRequires: bzip2-devel
BuildRequires: cracklib-devel >= 2.7-15
-%{!?_without_curl:BuildRequires: curl-devel}
+%{!?_without_curl:BuildRequires: curl-devel >= 7.9.8 }
BuildRequires: cyrus-sasl-devel
%{?_with_db3:BuildRequires: db3-devel}
%{!?_with_db3:BuildRequires: db-devel >= 4.0}
%{!?_without_pspell:BuildRequires: pspell-devel}
%{!?_without_recode:BuildRequires: recode-devel >= 3.5d-3}
BuildRequires: rpm-php-pearprov >= 4.0.2-100
-%{!?_without_xslt:BuildRequires: sablotron-devel}
+%{!?_without_xslt:BuildRequires: sablotron-devel >= 0.96}
BuildRequires: t1lib-devel
%{!?_without_snmp:BuildRequires: ucd-snmp-devel >= 4.2.6}
%{!?_without_odbc:BuildRequires: unixODBC-devel}
%{!?_without_xmlrpc:BuildRequires: xmlrpc-epi-devel}
-BuildRequires: yaz-devel >= 1.9
+%{!?_without_yaz:BuildRequires: yaz-devel >= 1.9}
BuildRequires: zip
BuildRequires: zlib-devel >= 1.0.9
BuildRequires: zziplib-devel
-#BuildRequires: fastcgi-devkit
+#BuildRequires: fcgi-devel
# apache 1.3 vs apache 2.0
%if %{_apache2}
PreReq: apache >= 2.0.40
%define _sysconfdir /etc/php
%define extensionsdir %{_libdir}/php
+%define httpdir /home/services/httpd
%description
PHP is an HTML-embedded scripting language. PHP attempts to make it
%package cgi
Summary: PHP as CGI program
Summary(pl): PHP jako program CGI
-Group: Libraries
+Group: Development/Languages/PHP
PreReq: %{name}-common = %{version}
+Provides: php-program = %{version}
%description cgi
PHP as CGI program.
%description cgi -l pl
PHP jako program CGI.
+%package cli
+Summary: PHP as CLI interpreter
+Summary(pl): PHP jako interpreter dzia³aj±cy z linii poleceñ
+Group: Development/Languages/PHP
+PreReq: %{name}-common = %{version}
+Provides: php-program = %{version}
+
+%description cli
+PHP as CLI interpreter.
+
+%description cli -l pl
+PHP jako interpreter dzia³aj±cy z linii poleceñ.
+
%package common
Summary: Common files nneded by both apache module and CGI
Summary(pl): Wspólne pliki dla modu³u apache'a i programu CGI
Summary(uk): ðÁËÅÔ ÒÏÚÒÏÂËÉ ÄÌÑ ÐÏÂÕÄÏ×É ÒÏÚÛÉÒÅÎØ PHP4
Group: Development/Languages/PHP
Requires: %{name}-common = %{version}
+Obsoletes: %{name}-pear-devel
%description devel
The php-devel package lets you compile dynamic extensions to PHP.
support to PHP. This extension provides a simple and effective means
for creating and invoking methods on Java objects from PHP.
+Note: it requires setting LD_LIBRARY_PATH to JRE directories
+containing JVM libraries (e.g. libjava.so, libverify.so and libjvm.so
+for Sun's JRE) before starting Apache or PHP interpreter.
+
%description java -l pl
Modu³ PHP dodaj±cy wsparcie dla Javy. Umo¿liwia odwo³ywanie siê do
obiektów Javy z poziomu PHP.
+Uwaga: modu³ wymaga ustawienia LD_LIBRARY_PATH na katalogi JRE
+zawieraj±ce biblioteki JVM (np. libjava.so, libverify.so i libjvm.so
+dla JRE Suna) przed uruchomieniem Apache'a lub interpretera PHP.
+
%package ldap
Summary: LDAP extension module for PHP
Summary(pl): Modu³ LDAP dla PHP
Summary: Process Control extension module for PHP
Summary(pl): Modu³ Process Control dla PHP
Group: Libraries
-Requires(post,preun):%{name}-cgi = %{version}
-Requires: %{name}-cgi = %{version}
+Requires(post,preun):%{name}-program = %{version}
+Requires: %{name}-program = %{version}
%description pcntl
This is a dynamic shared object (DSO) for Apache that will add process
Group: Libraries
Requires(post,preun):%{name}-common = %{version}
Requires: %{name}-common = %{version}
+Requires: yaz >= 1.9
%description yaz
This is a dynamic shared object (DSO) for Apache that will add yaz
Group: Development/Languages/PHP
Requires: %{name}-pcre = %{version}
Requires: %{name}-xml = %{version}
+Obsoletes: %{name}-pear-additional_classes
%description pear
PEAR - PHP Extension and Application Repository.
PEAR (PHP Extension and Application Repository) - Rozszerzenie PHP i
Repozytorium Aplikacji.
-%package pear-additional_classes
-Summary: PEAR - PHP Extension and Application Repository
-Summary(pl): PEAR - Rozszerzenie PHP i Repozytorium Aplikacji
-Group: Development/Languages/PHP
-Requires: %{name}-pcre = %{version}
-Requires: %{name}-pear
-
-%description pear-additional_classes
-PEAR - PHP Extension and Application Repository. Additional classes
-which can't be found in pear packages.
-
-%description pear-additional_classes -l pl
-PEAR (PHP Extension and Application Repository) - Rozszerzenie PHP i
-Repozytorium Aplikacji. Dodatkowe klasy, których nie ma w innych
-pakietach peara.
-
-%package pear-devel
-Summary: PEAR - PHP Extension and Application Repository
-Summary(pl): PEAR - Rozszerzenie PHP i Repozytorium Aplikacji
-Group: Development/Languages/PHP
-Requires: %{name}-cgi = %{version}
-Requires: %{name}-pcre = %{version}
-Requires: %{name}-xml = %{version}
-Requires: %{name}-pear
-Requires: %{name}-pear-PEAR-Command
-
-%description pear-devel
-PEAR - PHP Extension and Application Repository. This package contains
-aplications needed to use pear from cvs.
-
-%description pear-devel -l pl
-PEAR (PHP Extension and Application Repository) - Rozszerzenie PHP i
-Repozytorium Aplikacji. Ten pakiet zawiera aplikacje potrzebne do
%prep
%setup -q
-#%patch0 -p1 -- needs update!
+%patch0 -p1
%patch1 -p1
-#%patch2 -p1 -- obsolete
+%patch2 -p1
%patch3 -p1
-#%patch4 -p1 -- seems obsolete
-#%patch5 -p1 -- obsolete (fastcgi SAPI removed)
+%patch4 -p1
+%patch5 -p1
%patch6 -p1
-#%patch7 -p1 -- partially obsolete, the rest to check (too many changes)
+%patch7 -p1
%patch8 -p1
-#%patch9 -p1 -- obsolete
+%patch9 -p1
%patch10 -p1
-#%patch11 -p1 -- obsolete (openssl used also in common part)
-#%patch12 -p1 -- needs update? to check
+%patch11 -p1
+%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
-#%patch16 -p1 -- uhm... php allows _separate_ (not included) php-${SAPI}.ini files now
-#%patch17 -p1 -- obsolete
-#%patch18 -p1 -- obsolete? - no such file
-#%patch19 -p1 -- obsolete
+%patch16 -p1
+%patch17 -p1
cp php.ini-dist php.ini
-%patch20 -p1
+%patch18 -p1
# for ac2.53b/am1.6b - AC_LANG_CXX has AM_CONDITIONAL, so cannot be invoked
# conditionally...
+%patch19 -p1
+%patch20 -p1
%patch21 -p1
%patch22 -p1
-#%patch23 -p1 -- obsolete
-%patch24 -p1
install -d manual
bzip2 -dc %{SOURCE3} | tar -xf - -C manual
%{__libtoolize}
%{__aclocal}
autoconf
-#for i in cgi fastcgi apxs ; do
PROG_SENDMAIL="/usr/lib/sendmail"; export PROG_SENDMAIL
-for i in cgi apxs ; do
+for i in cgi cli apxs ; do
%configure \
`[ $i = cgi ] && echo --enable-discard-path` \
- `[ $i = fastcgi ] && echo --enable-discard-path --with-fastcgi=/usr` \
+ `[ $i = cli ] && echo --disable-cgi` \
+ `[ $i = fcgi ] && echo --enable-fastcgi --with-fastcgi=/usr` \
%if %{_apache2}
`[ $i = apxs ] && echo --with-apxs2=%{apxs}` \
%else
--%{!?debug:dis}%{?debug:en}able-debug \
--enable-bcmath=shared \
--enable-calendar=shared \
- --disable-cli \
--enable-ctype=shared \
--enable-dba=shared \
--enable-dbx=shared \
--with-filepro=shared \
--with-freetype-dir=shared \
--with-gettext=shared \
- --with-gd=shared \
+ --with-gd=shared,/usr \
--with-gdbm \
--with-gmp=shared \
--with-hyperwave=shared \
%{!?_without_odbc:--with-unixODBC=shared} \
%{?_without_xmlrpc:--without-xmlrpc}%{!?_without_xmlrpc:--with-xmlrpc=shared,/usr} \
%{!?_without_xslt:--with-xslt-sablot=shared} \
- --with-yaz=shared \
+ %{!?_without_yaz:--with-yaz=shared} \
--with-zip=shared \
--with-zlib=shared \
--with-zlib-dir=shared,/usr
-done
-# --with-sablot-js=shared,no
+cp -f Makefile Makefile.$i
+done
# for now session_mm doesn't work with shared session module...
# --enable-session=shared
# --with-qtdom=shared
%{__make}
-%{__make} CFLAGS="%{rpmcflags} -DDISCARD_PATH=1" -C sapi/cgi
-# Kill -rpath from php binary and libphp4.so
-perl -pi -e 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
-perl -pi -e 's|^runpath_var=.*|runpath_var=|g' libtool
-%{__make} CFLAGS="%{rpmcflags} -DDISCARD_PATH=1" php
+# fix install paths, avoid evil rpaths
+perl -pi -e "s|^libdir=.*|libdir='%{_libdir}'|" libphp_common.la
+perl -pi -e "s|^libdir=.*|libdir='%{_libdir}/apache'|" libphp4.la
+perl -pi -e "s|^(relink_command=.* -rpath )[^ ]*/libs |\1%{_libdir}/apache |" libphp4.la
+
+# notes:
+# -DENABLE_CHROOT_FUNC=1 (cgi,fcgi) is used in ext/standard/dir.c (libphp_common)
+# -DPHP_WRITE_STDOUT is used also for cli, but not set by its config.m4
-perl -pi -e 's|^hardcode_into_libs=.*|hardcode_into_libs=no|g' libtool
-rm libphp4.la ; %{__make} libphp4.la
+%{__make} sapi/cgi/php -f Makefile.cgi \
+ CFLAGS_CLEAN="%{rpmcflags} -DDISCARD_PATH=1 -DENABLE_PATHINFO_CHECK=1 -DFORCE_CGI_REDIRECT=0 -DPHP_WRITE_STDOUT=1"
+
+%{__make} sapi/cli/php -f Makefile.cli
+
+# for fcgi: -DDISCARD_PATH=0 -DENABLE_PATHINFO_CHECK=1 -DFORCE_CGI_REDIRECT=0
+# -DHAVE_FILENO_PROTO=1 -DHAVE_FPOS=1 -DHAVE_LIBNSL=1(die) -DHAVE_SYS_PARAM_H=1
+# -DPHP_FASTCGI=1 -DPHP_FCGI_STATIC=1 -DPHP_WRITE_STDOUT=1
%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT{%{_libdir}/{php,apache},%{_sysconfdir}/{apache,cgi}} \
- $RPM_BUILD_ROOT/home/services/httpd/icons \
+ $RPM_BUILD_ROOT%{httpdir}/icons \
$RPM_BUILD_ROOT{%{_sbindir},%{_bindir}} \
$RPM_BUILD_ROOT/var/run/php \
$RPM_BUILD_ROOT/etc/httpd/httpd.conf
-%{__make} install \
+%{__make} install install-build install-programs install-headers install-pear \
INSTALL_ROOT=$RPM_BUILD_ROOT \
- INSTALL_IT="install libs/libphp4.so $RPM_BUILD_ROOT%{_libdir}/apache/ ; install libs/libphp_common*.so.*.*.* $RPM_BUILD_ROOT%{_libdir}"
+ INSTALL_IT="\$(LIBTOOL) --mode=install install libphp_common.la $RPM_BUILD_ROOT%{_libdir} ; \$(LIBTOOL) --mode=install install libphp4.la $RPM_BUILD_ROOT%{_libdir}/apache ; \$(LIBTOOL) --mode=install install sapi/cgi/php $RPM_BUILD_ROOT%{_bindir}/php.cgi ; \$(LIBTOOL) --mode=install install sapi/cli/php $RPM_BUILD_ROOT%{_bindir}/php.cli"
-%{?_with_java:install ext/java/php_java.jar $RPM_BUILD_ROOT%{_libdir}}
+# compatibility (/usr/bin/php used to be CGI SAPI)
+ln -sf php.cgi $RPM_BUILD_ROOT%{_bindir}/php
-install .libs/php $RPM_BUILD_ROOT%{_bindir}/php
+%{?_with_java:install ext/java/php_java.jar $RPM_BUILD_ROOT%{extensionsdir}}
install php.ini $RPM_BUILD_ROOT%{_sysconfdir}/php.ini
-install %{SOURCE6} %{SOURCE7} $RPM_BUILD_ROOT%{_sysconfdir}
-install %{SOURCE2} php.gif $RPM_BUILD_ROOT/home/services/httpd/icons
+install %{SOURCE6} %{SOURCE7} %{SOURCE8} $RPM_BUILD_ROOT%{_sysconfdir}
+install %{SOURCE2} php.gif $RPM_BUILD_ROOT%{httpdir}/icons
install %{SOURCE4} $RPM_BUILD_ROOT%{_sbindir}
install %{SOURCE5} $RPM_BUILD_ROOT/etc/httpd/httpd.conf/70_mod_php.conf
install %{SOURCE1} .
-mv -f Zend/LICENSE{,.Zend}
+cp -f Zend/LICENSE{,.Zend}
-mkdir $RPM_BUILD_ROOT%{php_pear_dir}/{Auth,Science,HTML/Template}
+# Directories created for pear:
+install -d $RPM_BUILD_ROOT%{php_pear_dir}/{Archive,Console,Crypt,HTML/Template,Image,Net,Science,XML}
%clean
rm -rf $RPM_BUILD_ROOT
fi
%post pcntl
+if [ -f %{_sysconfdir}/php-cgi.ini ]; then
%{_sbindir}/php-module-install install pcntl %{_sysconfdir}/php-cgi.ini
+fi
+if [ -f %{_sysconfdir}/php-cli.ini ]; then
+%{_sbindir}/php-module-install install pcntl %{_sysconfdir}/php-cli.ini
+fi
%preun pcntl
if [ "$1" = "0" ]; then
+ if [ -f %{_sysconfdir}/php-cgi.ini ]; then
%{_sbindir}/php-module-install remove pcntl %{_sysconfdir}/php-cgi.ini
+ fi
+ if [ -f %{_sysconfdir}/php-cli.ini ]; then
+ %{_sbindir}/php-module-install remove pcntl %{_sysconfdir}/php-cli.ini
+ fi
fi
%post pcre
%files cgi
%defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/php.cgi
%attr(755,root,root) %{_bindir}/php
%config(noreplace) %verify(not size mtime md5) %{_sysconfdir}/php-cgi.ini
+%files cli
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/php.cli
+%config(noreplace) %verify(not size mtime md5) %{_sysconfdir}/php-cli.ini
+
%files common
%defattr(644,root,root,755)
%doc php.ini-*
%attr(644,root,root) %config(noreplace) %verify(not size mtime md5) %{_sysconfdir}/php.ini
%attr(730,root,http) %dir %verify(not group mode) /var/run/php
-/home/services/httpd/icons/*
+%{httpdir}/icons/*
%attr(755,root,root) %{_sbindir}/*
-%attr(755,root,root) %{_libdir}/libphp_common*.so.*.*.*
+%attr(755,root,root) %{_libdir}/libphp_common-*.so
%dir %{extensionsdir}
%files devel
%defattr(644,root,root,755)
-%{_includedir}/php
-%{_libdir}/php/build
%attr(755,root,root) %{_bindir}/phpextdist
%attr(755,root,root) %{_bindir}/phpize
%attr(755,root,root) %{_bindir}/php-config
+%attr(755,root,root) %{_libdir}/libphp_common.so
+%{_libdir}/libphp_common.la
+%{_includedir}/php
+%{_libdir}/php/build
%files doc
%defattr(644,root,root,755)
%files java
%defattr(644,root,root,755)
%attr(755,root,root) %{extensionsdir}/java.so
-%{_libdir}/php_java.jar
+%{extensionsdir}/php_java.jar
%endif
%if %{?_without_ldap:0}%{!?_without_ldap:1}
%defattr(644,root,root,755)
%dir %{php_pear_dir}
%dir %{php_pear_dir}/Archive
-%dir %{php_pear_dir}/Auth
%dir %{php_pear_dir}/Console
%dir %{php_pear_dir}/Crypt
-%dir %{php_pear_dir}/Date
-%dir %{php_pear_dir}/DB
-%dir %{php_pear_dir}/File
%dir %{php_pear_dir}/HTML
%dir %{php_pear_dir}/HTML/Template
-%dir %{php_pear_dir}/HTTP
%dir %{php_pear_dir}/Image
-%dir %{php_pear_dir}/Mail
%dir %{php_pear_dir}/Net
-%dir %{php_pear_dir}/PEAR
-%dir %{php_pear_dir}/Schedule
%dir %{php_pear_dir}/Science
%dir %{php_pear_dir}/XML
-
-%files pear-additional_classes
-%defattr(644,root,root,755)
-%attr(644,root,root) %{php_pear_dir}/Crypt/HCEMD5.php
-%attr(644,root,root) %{php_pear_dir}/File/Passwd.php
-%attr(644,root,root) %{php_pear_dir}/HTML/Form.php
-%attr(644,root,root) %{php_pear_dir}/HTML/IT*.php
-%attr(644,root,root) %{php_pear_dir}/HTML/Page.php
-%attr(644,root,root) %{php_pear_dir}/HTML/Processor.php
-%attr(644,root,root) %{php_pear_dir}/HTML/Select.php
-%attr(644,root,root) %{php_pear_dir}/HTTP/Compress.php
-%attr(644,root,root) %{php_pear_dir}/Schedule/At.php
-
-%files pear-devel
-%defattr(644,root,root,755)
-# in proper class now
-#%attr(755,root,root) %{_bindir}/pear
-%attr(755,root,root) %{_bindir}/pearize
-%attr(755,root,root) %{_bindir}/phptar