#!/bin/sh

use_cflags="-g"
use_prefix=/opt/apache

apache_version=1.3.39
apache_dist=apache_${apache_version}.tar.gz
apache_url=http://www.apache.org/dist/httpd/${apache_dist}

mod_ssl_version=2.8.30-1.3.39
mod_ssl_dist=mod_ssl-${mod_ssl_version}.tar.gz
mod_ssl_url=http://www.modssl.org/source/${mod_ssl_dist}

mod_dav_version=1.0.3-1.3.6
mod_dav_dist=mod_dav-${mod_dav_version}.tar.gz
mod_dav_url=http://www.webdav.org/mod_dav/${mod_dav_dist}

privsep_version=0.4
privsep_apache_patch=privsep-apache-${apache_version}-${privsep_version}.patch
privsep_mod_dav_patch=privsep-mod_dav-${mod_dav_version}-${privsep_version}.patch

# Locate wget
wget=$(which wget)
if [ "${wget}" == "" ]; then echo "Can't find wget" && exit 1; fi

# Download apache, mod_ssl and mod_dav sources
if [ ! -f ${apache_dist} ] ; then ${wget} ${apache_url}; fi
if [ ! -f ${mod_ssl_dist} ] ; then ${wget} ${mod_ssl_url}; fi
if [ ! -f ${mod_dav_dist} ] ; then ${wget} ${mod_dav_url}; fi

# Make .orig dirs for generating patches
if [ ! -d apache_${apache_version}.orig ] ; then
    echo Extracting pristine apache srcs into apache_${apache_version}.orig
    mkdir -p tmp && tar -C tmp -xzf ${apache_dist} && \
	mv tmp/apache_${apache_version} apache_${apache_version}.orig && \
	rmdir tmp
fi
if [ ! -d mod_dav-${mod_dav_version}.orig ] ; then
    echo Extracting pristine mod_dav srcs into mod_dav-${mod_dav_version}.orig
    mkdir -p tmp && tar -C tmp -xzf ${mod_dav_dist} && \
	mv tmp/mod_dav-${mod_dav_version} mod_dav-${mod_dav_version}.orig && \
	rmdir tmp
fi

# Extract src dirs
if [ ! -d apache_${apache_version} ] ; then
    echo Extracting apache srcs into apache_${apache_version}
    tar xzf ${apache_dist}
fi
if [ ! -d mod_dav-${mod_dav_version} ] ; then
    echo Extracting mod_dav srcs into mod_dav-${mod_dav_version}
    tar xzf ${mod_dav_dist}
fi
if [ ! -d mod_ssl-${mod_ssl_version} ] ; then
    echo Extracting mod_ssl srcs into mod_ssl-${mod_ssl_version}
    tar xzf ${mod_ssl_dist}
fi

# Apply mod_ssl patch to pristine apache sources
if [ ! -f apache_${apache_version}.orig/INSTALL.SSL ]; then
    echo Configuring mod_ssl
    ( cd mod_ssl-${mod_ssl_version}
	./configure \
	    --with-apache=../apache_${apache_version}.orig \
	    --expert --force
    ) || exit $?
fi

# Apply mod_ssl patch to apache sources
if [ ! -f apache_${apache_version}/INSTALL.SSL ]; then
    echo Configuring mod_ssl
    ( cd mod_ssl-${mod_ssl_version}
	./configure \
	    --with-apache=../apache_${apache_version} \
	    --expert --force
    ) || exit $?
fi

# Apply privsep patch to apache
if [ ! -f apache_${apache_version}/.privsep-patched ]; then
    echo Applying privsep patch to apache
    cd apache_${apache_version}
    patch -p1 < ../${privsep_apache_patch} && touch .privsep-patched
    cd ..
fi

# Apply privsep patch to mod_dav
if [ ! -f mod_dav-${mod_dav_version}/.privsep-patched ]; then
    echo Applying privsep patch to mod_dav
    cd mod_dav-${mod_dav_version}
    patch -p1 < ../${privsep_mod_dav_patch} && touch .privsep-patched
    cd ..
fi

# preconfigure apache for mod_dav
( cd apache_${apache_version}
    CFLAGS="${use_cflags}" \
	LIBS="-lpam" \
	./configure \
	--enable-rule=EAPI \
	--target=apache \
	--with-layout=GNU \
	--prefix=${use_prefix}
) || exit $?

# prepare mod_dav
( cd mod_dav-${mod_dav_version}
    CFLAGS="${use_cflags} -DEAPI" \
	LDFLAGS="${use_cflags}" \
	./configure \
	--with-apache=../apache_${apache_version}
    make
    make install
) || exit $?

# configure, build and install Apache
( cd apache_${apache_version}
    CFLAGS="${use_cflags}" \
	LIBS="-lpam" \
	./configure \
	--target=apache \
	--with-layout=GNU \
	--prefix=${use_prefix} \
	--without-execstrip \
	--enable-module=most \
	--disable-module=auth_dbm \
	--with-perl=/usr/bin/perl \
	--enable-rule=EAPI \
	--enable-module=ssl \
	--activate-module=src/modules/dav/libdav.a \
	--activate-module=src/modules/experimental/mod_auth_privsep.o \
	--enable-module=so
    make build-quiet
) || exit $?
