#!/bin/bash

# httpd.SlackBuild
# Heavily based on the original Slackware build scripts,
# Modified by Stuart Winter <stuart@armedslack.org>
#
# Copyright 2006, 2007  Patrick J. 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.
# This script was written using the one from slackbuilds.org as a reference,
# so thanks to Adis Nezirovic ( adis _at_ linux.org.ba ) for the original work.

# Record toolchain & other info for the build log:
slackbuildinfo

# Paths to skeleton port's source & real Slackware source tree:
export CWD=$SLACKSOURCE/$PKGSERIES/$PKGNAM
export PORTCWD=$PWD

# Temporary build locations:
export TMPBUILD=$TMP/build-$PKGNAM
export PKG=$TMP/package-$PKGNAM
mkpkgdirs # Delete & re-create temporary directories then cd into $TMPBUILD

# Determine the CFLAGS for the known architectures:
case $ARCH in
   arm)     export SLKCFLAGS="-O2 -march=armv4 -mtune=xscale" ;;
   powerpc) export SLKCFLAGS="-O2" ;;
   sparc)   export SLKCFLAGS="-O2" ;;
   hppa)    export SLKCFLAGS="-O2" ;;
   *)       export SLKCFLAGS="-O2" ;;
esac

# Extract source:
tar xvvf $CWD/$PKGNAM-$VERSION.tar.bz2
cd $PKGNAM-$VERSION
slackhousekeeping

# "prefork" is the default, safe, mpm type.  If you *are not* using PHP, and you
# like to live on the bleeding edge, you may wish to change the --with-mpm option
# to "worker", which is the new way of doing things, but is multithreaded and
# many scripts (especially PHP ones) are not multithread safe.
#
# I'd leave this option the way is it on any production box that's keeping up
# with HTTP requests.  No reason to chance it, IMHO.

zcat $CWD/config.layout.diff.gz | patch --verbose -p1 || exit 1

# Configure:
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
   --enable-layout=Slackware-FHS \
   --with-mpm=prefork \
   --with-apr=/usr \
   --with-apr-util=/usr \
   --enable-mods-shared=all \
   --enable-so \
   --enable-pie \
   --enable-cgi \
   --with-pcre \
   --enable-ssl \
   --enable-rewrite \
   --enable-vhost-alias \
   --enable-proxy \
   --enable-proxy-http \
   --enable-proxy-ftp \
   --enable-proxy-balancer \
   --enable-cache \
   --enable-mem-cache \
   --enable-file-cache \
   --enable-disk-cache \
   --disable-speling \
   --enable-dav \
   --enable-ldap \
   --enable-authnz-ldap \
   --enable-authn-anon \
   --enable-authn-alias \
   --build=$ARCH-slackware-linux || failconfig

# Build:
make $NUMJOBS || failmake

# Install into package:
make install DESTDIR=$PKG || failinstall
rmdir $PKG/usr/bin

# Tweak default apache configuration
( cd $PKG
  zcat $CWD/httpd.nossldefault.diff.gz | patch -p1 --verbose || exit 1
  zcat $CWD/httpd.runasapache.diff.gz | patch -p1 --verbose || exit 1
  rm -f $PKG/etc/httpd/httpd.conf~
) || exit 1
# Change config files to .new:
( cd $PKG/etc/httpd
  mv httpd.conf httpd.conf.new
  for file in extra/*; do
    mv $file "${file}.new"
  done
)

cat << EOF >> $PKG/etc/httpd/httpd.conf.new

# Uncomment the following line to enable PHP:
#
#Include /etc/httpd/mod_php.conf

# Uncomment the following lines to enable svn support:
#
#LoadModule dav_svn_module lib/httpd/modules/mod_dav_svn.so
#LoadModule authz_svn_module lib/httpd/modules/mod_authz_svn.so

EOF

rmdir $PKG/var/log/httpd

mkdir -p $PKG/etc/rc.d
cat $CWD/rc.httpd > $PKG/etc/rc.d/rc.httpd.new

mkdir -p $PKG/etc/logrotate.d
cat $CWD/logrotate.httpd > $PKG/etc/logrotate.d/httpd.new

mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION/
cp -a \
  ABOUT_APACHE Apache.dsw BuildBin.dsp CHANGES INSTALL InstallBin.dsp LAYOUT LICENSE NOTICE NWGNUmakefile README* ROADMAP VERSIONING \
  $PKG/usr/doc/$PKGNAM-$VERSION

# Other distributions also strip the manual down to just English.
# If this isn't your language of choice, mea culpa.
( cd $PKG/srv/httpd/htdocs/manual
  for file in $(find . -type f -name "*.html") ; do
    if [ -f ${file}.en ]; then
      cp ${file}.en ${file}
      rm -f ${file}.*
    fi
  done
)

# On Slackware, the traditional location for the Apache document root has always
# been "/var/www/htdocs/".  We can avoid an unpleasant surprise for people by
# leaving things where they've always been, and comply with the FHS by providing
# symlinks allowing access through the FHS-approved pathnames.  KDE, for example,
# will look for htdig's htsearch here:  /var/www/cgi-bin/htsearch
mv $PKG/srv/httpd $PKG/var/www
( cd $PKG/srv
  ln -vsf /var/www .
  ln -vsf /var/www httpd
)

# OK, it's just not generally good form to put your web site in /var/www/htdocs,
# but people do it every day.  Like all new .new files, this won't save them this
# time, but if they don't learn their lesson now then it will the next time:
mv $PKG/var/www/htdocs/index.html $PKG/var/www/htdocs/index.html.new

# If necessary, start the fakeroot server so we can set file/dir ownerships:
start_fakeroot

# Apply generic Slackware packaging policies:
cd $PKG
slackstripall   # strip all .a archives and all ELFs
slackgzpages -i # compress man & info pages and delete usr/info/dir
slackslack      # chown -R root:root, chmod -R og-w, slackchown, slack644docs
slackdesc       # install slack-desc and doinst.sh
slackmp         # run makepkg -l y -c n

# Perform any final checks on the package:
cd $PKG
slackhlinks     # search for any hard links
