blob: 499a11ce1d2a55718e891420c4ad65d1ec9bf559 [file] [log] [blame]
#!/bin/bash
#
# Copyright 2016 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Install mod_pagespeed testing version of Apache for use in checkin test.
# This also installs the dependencies for mod_h2 if you're building 2.4
#
# Usage
# install/build_development_apache.sh 2.2|2.4 worker|event|prefork|prefork-debug
set -e
set -u
this_dir="$(dirname "${BASH_SOURCE[0]}")"
src="$this_dir/.."
third_party="$(readlink -m "$src/third_party")"
"$src/install/install_required_packages.sh" --additional_dev_packages
if [ $# -ne 2 ]; then
echo Usage: $0 '2.2|2.4 worker|event|prefork|prefork-debug'
exit 1
fi
if [ x$1 == x2.4 ]; then
HTTPD_DIR="httpd24"
elif [ x$1 == x2.2 ]; then
HTTPD_DIR="httpd"
else
echo Usage: $0 '2.2|2.4 worker|event|prefork|prefork-debug'
exit 1
fi
TARGET=${TARGET:-$HOME/apache2}
# To facilitate switching between multiple Apache builds, a developer may make
# $TARGET be a sym-link. To avoid installing over the sym-link, it should be
# deleted before you compile a new system.
if [ -L $TARGET ]; then
echo Please remove symlink $TARGET before building over it.
exit 1
fi
MPM=$2
if [ x$MPM == xprefork-debug ]; then
CONFIGURE_ARGS=--enable-pool-debug
MPM=prefork
else
CONFIGURE_ARGS=--enable-debugger-mode
fi
# There does not appear to be a good reason to make different source directories
# for different MPMs -- the sources do not change so we can debug against any of
# them.
cd "$third_party/$HTTPD_DIR/src"
if [ -z "$(ls)" ]; then
echo "It looks like you haven't loaded submodules. Could you run:"
echo " git submodule update --init --recursive"
echo "and then try again?"
exit 1
fi
cd "$third_party/apr/src"
./buildconf --prefix=$TARGET
./configure --prefix=$TARGET
make
make install -j1
cd "$third_party/aprutil/src"
./buildconf --with-apr="$third_party/apr/src" --prefix=$TARGET
./configure --with-apr="$third_party/apr/src" --prefix=$TARGET
make
make install
if [ "$HTTPD_DIR" = "httpd24" ]; then
# nghttp2 depends on Apache 2.4+, so only build it for 2.4.
cd "$third_party/nghttp2"
echo "Configuring nghttp2"
./configure --prefix=$TARGET
echo "Building nghttp2"
make
make install
CONFIGURE_ARGS="$CONFIGURE_ARGS --enable-http2 --with-nghttp2=$TARGET"
fi
# Now actually configure, build, and install Apache.
cd "$third_party/$HTTPD_DIR/src"
./buildconf --prefix=$TARGET \
--with-apr="$third_party/apr/src" --with-apr-util="$third_party/aprutil/src"
./configure --enable-proxy --enable-proxy-http --enable-rewrite --enable-so \
--enable-deflate --enable-modules=all --with-mpm=$MPM \
--enable-ssl --with-port=8080 --with-sslport=8443 --prefix=$TARGET \
--with-apr="$third_party/apr/src" --with-apr-util="$third_party/aprutil/src" \
$CONFIGURE_ARGS
make -j4
echo Apache build done
echo Installing Apache in $TARGET ...
make install
echo Building mod_fcgid
cd "$third_party/mod_fcgid"
APXS=$TARGET/bin/apxs ./configure.apxs
make -j4
echo mod_fcgid build done
$TARGET/build-1/libtool --silent --mode=install cp modules/fcgid/mod_fcgid.la \
$TARGET/modules/
mv $TARGET/modules/mod_fcgid.so $TARGET/modules/mod_fcgid-src_build.so
exit 0