#!/bin/bash # # Build and package mod_php on Slackware. # by: David Cantrell # Modified for PHP 4+ by volkerdi@slackware.com # # Small changes by rhatto # if [ -s "slack-required" ]; then echo Recomended and required packages for building cairo are: cat slack-required | sed -e 's/^/\t/' if [ "$INTERACT" != "no" ]; then echo If you dont have those installed, press Ctrl-C. Otherwise, hit ENTER. read crap else echo Sleeping 3 seconds... sleep 3 fi fi CWD="`pwd`" if [ -f "/etc/slackbuildrc" ]; then source /etc/slackbuildrc fi if [ -f "~/.slackbuildrc" ]; then source ~/.slackbuildrc fi PACKAGE="php" VERSION=${VERSION:=4.4.4} PINE=${PINE:=4.64} ARCH=${ARCH:=i486} BUILD=${BUILD:=2rha} TMP=${TMP:=/tmp} SRC_DIR=${SRC:=$CWD} REPOS=${REPOS:=$TMP} # ------- error codes for createpkg -------------- ERROR_WGET=31; ERROR_MAKE=32; ERROR_INSTALL=33 ERROR_MD5=34; ERROR_CONF=35; ERROR_HELP=36 ERROR_TAR=37; ERROR_MKPKG=38; ERROR_GPG=39 ERROR_PATCH=40 RTOOL="wget" SRC="$PACKAGE-$VERSION.tar.bz2" URL="http://mirror.pacific.net.au/linux/slackware/slackware-10.2/patches/source/php/$SRC" #URL="http://br.php.net/get/$SRC/from/this/mirror" # pear modules DB="DB-1.7.6.tgz" HTTP="HTTP-1.4.0.tgz" MAIL="Mail-1.1.9.tgz" SMTP="Net_SMTP-1.2.8.tgz" SOCKET="Net_Socket-1.0.6.tgz" PARSER="XML_Parser-1.2.7.tgz" RPC="XML_RPC-1.4.5.tgz" TAR="Archive_Tar-1.3.1.tgz" GETOPT="Console_Getopt-1.2.tgz" TEMPLATE="HTML_Template_IT-1.1.3.tgz" PEAR="http://pear.php.net/get" SRC_DIR="$SRC_DIR/$PACKAGE" mkdir -p $SRC_DIR if [ "$RTOOL" == "wget" ]; then if [ ! -f "$SRC_DIR/$SRC" ]; then wget "$URL" -O "$SRC_DIR/$SRC" fi # rm -rf $SRC_DIR/pear* mkdir -p $SRC_DIR/pear if [ $VERSION = 4.4.2 ]; then pearlist="$DB $HTTP $MAIL $SMTP $SOCKET $PARSER $RPC" mkdir -p $SRC_DIR/pear-4.4.2-bad-md5sums for pear in $TAR $GETOPT $TEMPLATE; do if [ ! -f "$SRC_DIR/pear-4.4.2-bad-md5sums/$pear" ]; then wget "$PEAR/$pear" -O "$SRC_DIR/pear-4.4.2-bad-md5sums/$pear" || exit $ERROR_WGET fi done else pearlist="$DB $HTTP $MAIL $SMTP $SOCKET $PARSER $RPC $TAR $GETOPT $TEMPLATE" fi for pear in $pearlist; do if [ ! -f "$SRC_DIR/pear/$pear" ]; then wget "$PEAR/$pear" -O "$SRC_DIR/pear/$pear" || exit $ERROR_WGET fi done fi if [ "$ARCH" = "i386" ]; then SLKCFLAGS="-O2 -march=i386 -mcpu=i686" elif [ "$ARCH" = "i486" ]; then SLKCFLAGS="-O2 -march=i486 -mcpu=i686" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" elif [ "$ARCH" = "x86_64" ]; then SLKCFLAGS="-O2 -fPIC" fi # we need to compile Pine to get c-client.a for IMAP support: if [ "$ARCH" == "x86_64" ]; then IMAPLIBDIR=/usr/local/lib64/c-client LIBDIR="/usr/lib64" LIB="lib64" else IMAPLIBDIR=/usr/local/lib/c-client LIBDIR="/usr/lib" LIB="lib" ADD_FLAGS="--with-db3 --enable-yp" fi 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${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 TMP="$TMP/$PACKAGE" PKG="$TMP/package-php" rm -rf $TMP mkdir -p $TMP cd $TMP php_configure() { EXTENSION_DIR=/usr/$LIB/php/extensions \ CFLAGS="$SLKCFLAGS" \ ./configure --prefix=/usr \ $* \ --with-_lib=$LIB \ --libdir=$LIBDIR \ --sysconfdir=/etc \ --enable-discard-path \ --with-config-file-path=/etc/apache \ --enable-safe-mode \ --with-openssl \ --with-mhash \ --enable-bcmath \ --with-bz2 \ --with-pic \ --enable-calendar \ --enable-ctype \ --with-gdbm \ --with-imap-ssl=$IMAPLIBDIR \ --with-imap=$IMAPLIBDIR \ --enable-dbase \ --enable-ftp \ --with-iconv \ --with-dom \ --with-exif \ --enable-exif \ --with-gd \ --enable-gd-native-ttf \ --with-jpeg-dir=/usr \ --with-png \ --with-gmp \ --enable-mbstring \ --with-curl=/usr \ --with-pcre-regex=/usr \ --with-mysql=shared,/usr \ --with-gettext=shared,/usr \ --with-expat-dir=/usr \ --with-xml \ --enable-wddx \ --with-mm=/usr \ --enable-trans-sid \ --enable-shmop \ --enable-sockets \ --with-regex=php \ --enable-sysvsem \ --enable-sysvshm \ --enable-memory-limit \ --with-tsrm-pthreads \ --enable-shared \ --disable-debug \ --with-zlib=/usr $ADD_FLAGS || exit $ERROR_CONF # --with-mod_charset # only for Russian patched Apache # --with-readline=/usr # this is only for the CGI version # --with-ttf # this links with the shlib, need X for that # --with-java # no thanks # strange bug, http://bugs.php.net/bug.php?id=31193 sed -e 's/^EXTRA_LIBS\(.*\)/EXTRA_LIBS\1 -liconv/' Makefile > Makefile.new mv Makefile.new Makefile } # compile php rm -rf $PKG mkdir -p $PKG/etc/apache # A trick from DaMouse to enable building php into $PKG. # We'll remove this later on. cat /etc/apache/httpd.conf.default > $PKG/etc/apache/httpd.conf cd $TMP rm -rf php-$VERSION tar xjvf $SRC_DIR/$SRC || exit $ERROR_TAR # Add missing(?) PEAR modules back: ( cd php-$VERSION/pear/packages cp -a $SRC_DIR/pear/* . bzip2 -d *.bz2 &> /dev/null gunzip -d -f *.tgz &> /dev/null ) # Replace PEAR packages for which the 4.4.2 release contained incorrect md5sums: if [ $VERSION = 4.4.2 ]; then ( cd php-$VERSION/pear/packages rm -f HTML_Template_IT-1.1.tar cp -a $SRC_DIR/pear-4.4.2-bad-md5sums/* . bzip2 -d --force *.bz2 &> /dev/null gunzip -d -f *.tgz &> /dev/null ) fi cd php-$VERSION if [ "$ARCH" == "x86_64" ]; then # Fix lib64 - thanks SuSE echo patching with $CWD/php-with-_lib-$VERSION.diff.gz... zcat $CWD/php-with-_lib-$VERSION.diff.gz | patch -p1 --verbose || exit $ERROR_PATCH autoconf fi # Fixup perms/owners: chown -R root.root . find . -perm 777 -exec chmod 755 {} \; find . -perm 775 -exec chmod 755 {} \; find . -perm 666 -exec chmod 644 {} \; find . -perm 664 -exec chmod 644 {} \; find . -name "*.h" -exec chmod 644 {} \; # Sometimes they ship a few of these: find . -name "*.orig" -exec rm {} \; # Fix a UTF-8 parsing overflow: zcat $CWD/php4.utf8.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit $ERROR_PATCH # Patch ini files: if [ "$ARCH" == "x86_64" ]; then zcat $CWD/php.ini-x86_64.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit $ERROR_PATCH # Fix an issue introduced in PHP 4.4.1 that breaks SquirrelMail and # probably some other PHP applications: #zcat $CWD/php.squirrel.diff.gz | patch -p1 --verbose || exit else zcat $CWD/php.ini.diff.gz | patch -p1 --verbose --backup --suffix=.orig || exit $ERROR_PATCH fi # Make the Apache module version of PHP: echo "***START APACHE MODULE***" php_configure --disable-static --with-apxs=/usr/sbin/apxs || exit $ERROR_CONF make -j3 || exit $ERROR_MAKE make install INSTALL_ROOT=$PKG || exit $ERROR_INSTALL make distclean echo "***END APACHE MODULE***" # PHP likes to install Pear with some strange permissions. chmod 755 $PKG/usr/bin/pear # Make the standalone interpreter: php_configure --enable-force-cgi-redirect --enable-fastcgi --enable-pcntl --enable-sigchild || exit $ERROR_CONF make -j3 || exit $ERROR_MAKE make install-cli INSTALL_ROOT=$PKG || exit $ERROR_INSTALL chmod 755 $PKG/usr/bin/php chown root.bin $PKG/usr/bin/php # PHP 4.4.2 seems to be throwing some junk in the root directory: ( cd $PKG rm -rf .channels .depdb .depdblock .filemap .lock .registry ) if [ "$ARCH" == "x86_64" ]; then # Fix $PKG/usr/lib64/php perms: ( cd $PKG/usr/lib64/php find . -perm 666 -exec chmod 644 {} \; ) else # Fix $PKG/usr/lib/php perms: ( cd $PKG/usr/lib/php find . -perm 666 -exec chmod 644 {} \; ) fi 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/apache cp -a php.ini-dist php.ini-recommended $PKG/etc/apache cp -a $CWD/mod_php.conf.example $PKG/etc/apache chmod 644 $PKG/etc/apache/* chown root.root $PKG/etc/apache/* rm -f $PKG/etc/apache/httpd* chown -R root:bin $PKG/usr/bin ( 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 $REPOS/php-$VERSION-$ARCH-$BUILD.tgz || exit $ERROR_MKPKG if [ "$CLEANUP" == "yes" ]; then rm -rf $TMP fi