#!/bin/sh # Build and package mod_php on Slackware. # by: David Cantrell # Modified for PHP 4-5 by volkerdi@slackware.com # Copyright 2007 Patrick Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-php VERSION=5.2.5 PINE=4.64 ARCH=${ARCH:-i486} BUILD=${BUILD:-1} # we need to compile Pine to get c-client.a for IMAP support: IMAPLIBDIR=/usr/local/lib/c-client if [ -r $IMAPLIBDIR/lib/c-client.a ]; then echo "Using IMAP library:" ls -l $IMAPLIBDIR/lib/c-client.a sleep 5 else ( cd $CWD/../pine ; ./pine.SlackBuild ) ( cd $TMP/pine${PINE}/imap/c-client strip -g c-client.a mkdir -p $IMAPLIBDIR/lib cp c-client.a $IMAPLIBDIR/lib mkdir -p $IMAPLIBDIR/include cp *.h $IMAPLIBDIR/include ) fi rm -rf $PKG mkdir -p $PKG/etc/httpd mkdir -p $PKG/etc/php # A trick from DaMouse to enable building php into $PKG. # We'll remove this later on. cat /etc/httpd/original/httpd.conf > $PKG/etc/httpd/httpd.conf if [ ! -e /etc/httpd/original/httpd.conf ]; then echo "FATAL: no /etc/httpd/original/httpd.conf found." exit 1 fi ( cd $TMP rm -rf php-$VERSION tar xjf $CWD/php-$VERSION.tar.bz2 cd php-$VERSION # Add missing(?) PEAR modules back: if [ -d php-$VERSION/pear/packages ]; then ( cd php-$VERSION/pear/packages cp -a $CWD/pear/*.bz2 . 2> /dev/null bzip2 -d *.bz2 2> /dev/null ) fi # Fixup perms/owners: chown -R root:root . find . -perm 666 -exec chmod 644 {} \; find . -perm 664 -exec chmod 644 {} \; find . -perm 600 -exec chmod 644 {} \; find . -perm 444 -exec chmod 644 {} \; find . -perm 400 -exec chmod 644 {} \; find . -perm 440 -exec chmod 644 {} \; find . -perm 777 -exec chmod 755 {} \; find . -perm 775 -exec chmod 755 {} \; find . -perm 511 -exec chmod 755 {} \; find . -perm 711 -exec chmod 755 {} \; find . -perm 555 -exec chmod 755 {} \; find . -name "*.h" -exec chmod 644 {} \; # Sometimes they ship a few of these: find . -name "*.orig" -exec rm {} \; # Patch ini files: zcat $CWD/php.ini.diff.gz | patch -p1 --verbose || exit 1 zcat $CWD/php.recommended.ini.diff.gz | patch -p1 --verbose || exit 1 # Generic "kitchen sink" configure function, with as many things as possible (and # maybe then some ;-) compiled as shared extensions: php_configure() { EXTENSION_DIR=/usr/lib/php/extensions \ ./configure \ --prefix=/usr \ --sysconfdir=/etc \ --disable-safe-mode \ --enable-apc \ --enable-apc-mmap \ --enable-memory-limit \ --enable-suhosin \ --disable-magic-quotes \ --enable-zend-multibyte \ --enable-mbregex \ --enable-tokenizer=shared \ --with-config-file-scan-dir=/etc/php \ --with-config-file-path=/etc/httpd \ --with-mod_charset \ --with-layout=PHP \ --enable-sigchild \ --enable-xml \ --with-libxml-dir=/usr \ --enable-simplexml \ --enable-spl \ --enable-filter \ --disable-debug \ --with-openssl=shared \ --with-pcre-regex=/usr \ --with-zlib=shared,/usr \ --enable-bcmath=shared \ --with-bz2=shared,/usr \ --enable-calendar=shared \ --enable-ctype=shared \ --with-curl=shared \ --with-curlwrappers \ --enable-dba=shared \ --with-gdbm=/usr \ --with-db4=/usr \ --enable-dbase=shared \ --enable-exif=shared \ --enable-ftp=shared \ --with-gd=shared \ --with-jpeg-dir=/usr \ --with-png-dir=/usr \ --with-zlib-dir=/usr \ --with-xpm-dir=/usr \ --with-freetype-dir=/usr \ --with-t1lib=/usr \ --enable-gd-native-ttf \ --enable-gd-jis-conv \ --with-gettext=shared,/usr \ --with-gmp=shared,/usr \ --with-iconv=shared \ --with-imap-ssl=/usr \ --with-imap=$IMAPLIBDIR \ --with-ldap=shared \ --enable-mbstring=shared \ --with-hash \ --with-mhash=shared,/usr \ --with-mysql=shared,/usr \ --with-mysqli=shared,/usr/bin/mysql_config \ --enable-pdo=shared \ --with-pdo-mysql=shared,/usr \ --with-pdo-sqlite=shared \ --with-pspell=shared,/usr \ --with-mm=/usr \ --enable-shmop=shared \ --with-snmp=shared,/usr \ --enable-soap=shared \ --enable-sockets \ --with-sqlite=shared \ --enable-sqlite-utf8 \ --with-regex=php \ --enable-sysvmsg \ --enable-sysvsem \ --enable-sysvshm \ --enable-wddx=shared \ --with-xsl=shared,/usr \ --enable-zip=shared \ --with-tsrm-pthreads \ --enable-shared=yes \ --enable-static=no \ --with-gnu-ld \ --with-pic \ --build=alpha-alphaslack-linux } # I am told this option is worse than nothing. :-) # --enable-safe-mode # # I would recommend *against* and will take no responbility for turning on "safe" mode. # Make the Apache2 module version of PHP: php_configure \ --with-apxs2=/usr/sbin/apxs make -j2 || exit 1 make install INSTALL_ROOT=$PKG || exit 1 # Make the CLI version of PHP: make distclean php_configure \ --enable-force-cgi-redirect \ --enable-fastcgi \ --enable-pcntl \ --enable-readline \ --enable-sigchild make -j2 || exit 1 mkdir -p $PKG/usr/bin cat ./sapi/cli/php > $PKG/usr/bin/php chmod 755 $PKG/usr/bin/php # Make the FastCGI interpreter: make distclean php_configure \ --enable-force-cgi-redirect \ --enable-fastcgi \ --enable-pcntl \ --enable-readline \ --enable-sigchild make -j2 || exit 1 mkdir -p $PKG/usr/bin cat sapi/cgi/php-cgi > $PKG/usr/bin/php-cgi chmod 755 $PKG/usr/bin/php-cgi # PHP (used to) install Pear with some strange permissions. chmod 755 $PKG/usr/bin/pear # PHP sometimes puts junk in the root directory: ( cd $PKG rm -rf .channels .depdb .depdblock .filemap .lock .registry ) # Fix $PKG/usr/lib/php perms: ( cd $PKG/usr/lib/php find . -perm 666 -exec chmod 644 {} \; find . -perm 664 -exec chmod 644 {} \; find . -perm 600 -exec chmod 644 {} \; find . -perm 444 -exec chmod 644 {} \; find . -perm 400 -exec chmod 644 {} \; find . -perm 440 -exec chmod 644 {} \; find . -perm 777 -exec chmod 755 {} \; find . -perm 775 -exec chmod 755 {} \; find . -perm 511 -exec chmod 755 {} \; find . -perm 711 -exec chmod 755 {} \; find . -perm 555 -exec chmod 755 {} \; ) mkdir -p $PKG/usr/doc/php-$VERSION cp -a CODING_STANDARDS CREDITS EXTENSIONS INSTALL LICENSE NEWS README* TODO* \ sapi/cgi/README.FastCGI $PKG/usr/doc/php-$VERSION chown -R root:root $PKG/usr/doc/php-$VERSION mkdir -p $PKG/etc/httpd cp -a php.ini-dist php.ini-recommended $PKG/etc/httpd cp -a $CWD/mod_php.conf.example $PKG/etc/httpd chmod 644 $PKG/etc/httpd/* chown root:root $PKG/etc/httpd/* # This can go now. rm -f $PKG/etc/httpd/httpd* # Session directory for PHP: mkdir -p $PKG/var/lib/php chmod 770 $PKG/var/lib/php chown root:apache $PKG/var/lib/php # Strip ELF objects. ( cd $PKG find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) gzip -9 $PKG/usr/man/man?/*.? mkdir -p $PKG/install zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh cat $CWD/slack-desc > $PKG/install/slack-desc #if [ -d "$IMAPLIBDIR" ]; then # ( cd $IMAPLIBDIR && rm -rf * ) # rmdir $IMAPLIBDIR #fi cd $PKG makepkg -l y -c n $TMP/php-$VERSION-$ARCH-$BUILD.tgz ) 2>&1 | tee $TMP/php.build.log