1251881Speter#!/bin/sh
2251881Speter#
3251881Speter#
4251881Speter# Licensed to the Apache Software Foundation (ASF) under one
5251881Speter# or more contributor license agreements.  See the NOTICE file
6251881Speter# distributed with this work for additional information
7251881Speter# regarding copyright ownership.  The ASF licenses this file
8251881Speter# to you under the Apache License, Version 2.0 (the
9251881Speter# "License"); you may not use this file except in compliance
10251881Speter# with the License.  You may obtain a copy of the License at
11251881Speter#
12251881Speter#   http://www.apache.org/licenses/LICENSE-2.0
13251881Speter#
14251881Speter# Unless required by applicable law or agreed to in writing,
15251881Speter# software distributed under the License is distributed on an
16251881Speter# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17251881Speter# KIND, either express or implied.  See the License for the
18251881Speter# specific language governing permissions and limitations
19251881Speter# under the License.
20251881Speter#
21251881Speter#
22251881Speter
23251881Speter### Run this to produce everything needed for configuration. ###
24251881Speter
25251881Speter
26286506Speter# Some shells can produce output when running 'cd' which interferes
27286506Speter# with the construct 'abs=`cd dir && pwd`'.
28286506Speter(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
29286506Speter
30251881Speter# Run tests to ensure that our build requirements are met
31251881SpeterRELEASE_MODE=""
32251881SpeterRELEASE_ARGS=""
33251881SpeterSKIP_DEPS=""
34251881Speterwhile test $# != 0; do
35251881Speter  case "$1" in
36251881Speter    --release)
37251881Speter      RELEASE_MODE="$1"
38251881Speter      RELEASE_ARGS="--release"
39251881Speter      shift
40251881Speter      ;;
41251881Speter    -s)
42251881Speter      SKIP_DEPS="yes"
43251881Speter      shift
44251881Speter      ;;
45251881Speter    --)         # end of option parsing
46251881Speter      break
47251881Speter      ;;
48251881Speter    *)
49251881Speter      echo "invalid parameter: '$1'"
50251881Speter      exit 1
51251881Speter      ;;
52251881Speter  esac
53251881Speterdone
54251881Speter# ### The order of parameters is important; buildcheck.sh depends on it and
55251881Speter# ### we don't want to copy the fancy option parsing loop there. For the
56251881Speter# ### same reason, all parameters should be quoted, so that buildcheck.sh
57251881Speter# ### sees an empty arg rather than missing one.
58251881Speter./build/buildcheck.sh "$RELEASE_MODE" || exit 1
59251881Speter
60251881Speter# Handle some libtool helper files
61251881Speter#
62251881Speter# ### eventually, we can/should toss this in favor of simply using
63251881Speter# ### APR's libtool. deferring to a second round of change...
64251881Speter#
65251881Speter
66289180Speter# Much like APR except we do not prefer libtool 1 over libtool 2.
67289180Speterlibtoolize="`./build/PrintPath glibtoolize libtoolize glibtoolize1 libtoolize15 libtoolize14`"
68251881Speterlt_major_version=`$libtoolize --version 2>/dev/null | sed -e 's/^[^0-9]*//' -e 's/\..*//' -e '/^$/d' -e 1q`
69251881Speter
70251881Speterif [ "x$libtoolize" = "x" ]; then
71251881Speter    echo "libtoolize not found in path"
72251881Speter    exit 1
73251881Speterfi
74251881Speter
75251881Speterrm -f build/config.guess build/config.sub
76251881Speter$libtoolize --copy --automake --force
77251881Speter
78251881Speterltpath="`dirname $libtoolize`"
79251881Speter
80286506Speterif [ "x$LIBTOOL_M4" = "x" ]; then
81286506Speter    ltm4_error='(try setting the LIBTOOL_M4 environment variable)'
82286506Speter    if [ -d "$ltpath/../share/aclocal/." ]; then
83286506Speter        ltm4=`cd "$ltpath/../share/aclocal" && pwd`
84286506Speter    else
85286506Speter        echo "Libtool helper path not found $ltm4_error"
86286506Speter        echo "  expected at: '$ltpath/../share/aclocal'"
87286506Speter        exit 1
88286506Speter    fi
89286506Speterelse
90286506Speter    ltm4_error="(the LIBTOOL_M4 environment variable is: $LIBTOOL_M4)"
91286506Speter    ltm4="$LIBTOOL_M4"
92286506Speterfi
93286506Speter
94286506Speterltfile="$ltm4/libtool.m4"
95286506Speterif [ ! -f "$ltfile" ]; then
96286506Speter    echo "$ltfile not found $ltm4_error"
97251881Speter    exit 1
98251881Speterfi
99251881Speter
100286506Speterecho "Copying libtool helper:  $ltfile"
101251881Speter# An ancient helper might already be present from previous builds,
102251881Speter# and it might be write-protected (e.g. mode 444, seen on FreeBSD).
103251881Speter# This would cause cp to fail and print an error message, but leave
104251881Speter# behind a potentially outdated libtool helper.  So, remove before
105251881Speter# copying:
106251881Speterrm -f build/libtool.m4
107286506Spetercp "$ltfile" build/libtool.m4
108251881Speter
109251881Speterfor file in ltoptions.m4 ltsugar.m4 ltversion.m4 lt~obsolete.m4; do
110251881Speter    rm -f build/$file
111251881Speter
112251881Speter    if [ $lt_major_version -ge 2 ]; then
113286506Speter        ltfile="$ltm4/$file"
114251881Speter
115286506Speter        if [ ! -f "$ltfile" ]; then
116286506Speter            echo "$ltfile not found $ltm4_error"
117251881Speter            exit 1
118251881Speter        fi
119251881Speter
120286506Speter        echo "Copying libtool helper:  $ltfile"
121286506Speter        cp "$ltfile" "build/$file"
122251881Speter    fi
123251881Speterdone
124251881Speter
125251881Speterif [ $lt_major_version -ge 2 ]; then
126286506Speter    if [ "x$LIBTOOL_CONFIG" = "x" ]; then
127286506Speter        ltconfig_error='(try setting the LIBTOOL_CONFIG environment variable)'
128286506Speter        if [ -d "$ltpath/../share/libtool/config/." ]; then
129286506Speter            ltconfig=`cd "$ltpath/../share/libtool/config" && pwd`
130286506Speter        elif [ -d "$ltpath/../share/libtool/build-aux/." ]; then
131286506Speter            ltconfig=`cd "$ltpath/../share/libtool/build-aux" && pwd`
132286506Speter        else
133286506Speter            echo "Autoconf helper path not found $ltconfig_error"
134286506Speter            echo "  expected at: '$ltpath/../share/libtool/config'"
135286506Speter            echo "           or: '$ltpath/../share/libtool/build-aux'"
136286506Speter            exit 1
137286506Speter        fi
138286506Speter    else
139286506Speter        ltconfig_error="(the LIBTOOL_CONFIG environment variable is: $LIBTOOL_CONFIG)"
140286506Speter        ltconfig="$LIBTOOL_CONFIG"
141286506Speter    fi
142286506Speter
143251881Speter    for file in config.guess config.sub; do
144286506Speter        configfile="$ltconfig/$file"
145251881Speter
146286506Speter        if [ ! -f "$configfile" ]; then
147286506Speter            echo "$configfile not found $ltconfig_error"
148251881Speter            exit 1
149251881Speter        fi
150251881Speter
151286506Speter        echo "Copying autoconf helper: $configfile"
152286506Speter	cp "$configfile" build/$file
153251881Speter    done
154251881Speterfi
155251881Speter
156251881Speter# Create the file detailing all of the build outputs for SVN.
157251881Speter#
158251881Speter# Note: this dependency on Python is fine: only SVN developers use autogen.sh
159251881Speter#       and we can state that dev people need Python on their machine. Note
160289180Speter#       that running gen-make.py requires Python 2.7 or newer.
161251881Speter
162251881SpeterPYTHON="`./build/find_python.sh`"
163251881Speterif test -z "$PYTHON"; then
164289180Speter  echo "Python 2.7 or later is required to run autogen.sh"
165251881Speter  echo "If you have a suitable Python installed, but not on the"
166251881Speter  echo "PATH, set the environment variable PYTHON to the full path"
167251881Speter  echo "to the Python executable, and re-run autogen.sh"
168251881Speter  exit 1
169251881Speterfi
170251881Speter
171251881Speter# Compile SWIG headers into standalone C files if we are in release mode
172251881Speterif test -n "$RELEASE_MODE"; then
173251881Speter  echo "Generating SWIG code..."
174251881Speter  # Generate build-outputs.mk in non-release-mode, so that we can
175251881Speter  # build the SWIG-related files
176251881Speter  "$PYTHON" ./gen-make.py build.conf || gen_failed=1
177251881Speter
178251881Speter  # Build the SWIG-related files
179362181Sdim  make -f autogen-standalone.mk autogen-swig || gen_failed=1
180251881Speter
181369302Sdim  # Remove the .swig_*checked files
182369302Sdim  rm -f .swig_checked .swig_pl_checked .swig_py_checked .swig_rb_checked
183251881Speterfi
184251881Speter
185251881Speterif test -n "$SKIP_DEPS"; then
186251881Speter  echo "Creating build-outputs.mk (no dependencies)..."
187251881Speter  "$PYTHON" ./gen-make.py $RELEASE_ARGS -s build.conf || gen_failed=1
188251881Speterelse
189251881Speter  echo "Creating build-outputs.mk..."
190251881Speter  "$PYTHON" ./gen-make.py $RELEASE_ARGS build.conf || gen_failed=1
191251881Speterfi
192251881Speter
193251881Speterif test -n "$RELEASE_MODE"; then
194251881Speter  find build/ -name '*.pyc' -exec rm {} \;
195251881Speterfi
196251881Speter
197251881Speterrm autogen-standalone.mk
198251881Speter
199251881Speterif test -n "$gen_failed"; then
200251881Speter  echo "ERROR: gen-make.py failed"
201251881Speter  exit 1
202251881Speterfi
203251881Speter
204251881Speter# Produce config.h.in
205251881Speterecho "Creating svn_private_config.h.in..."
206251881Speter${AUTOHEADER:-autoheader}
207251881Speter
208289180Speter# If there's a config.cache file, we may need to delete it.
209251881Speter# If we have an existing configure script, save a copy for comparison.
210251881Speterif [ -f config.cache ] && [ -f configure ]; then
211251881Speter  cp configure configure.$$.tmp
212251881Speterfi
213251881Speter
214251881Speter# Produce ./configure
215251881Speterecho "Creating configure..."
216251881Speter${AUTOCONF:-autoconf}
217251881Speter
218251881Speter# If we have a config.cache file, toss it if the configure script has
219251881Speter# changed, or if we just built it for the first time.
220251881Speterif [ -f config.cache ]; then
221251881Speter  (
222251881Speter    [ -f configure.$$.tmp ] && cmp configure configure.$$.tmp > /dev/null 2>&1
223251881Speter  ) || (
224251881Speter    echo "Tossing config.cache, since configure has changed."
225251881Speter    rm config.cache
226251881Speter  )
227251881Speter  rm -f configure.$$.tmp
228251881Speterfi
229251881Speter
230251881Speter# Remove autoconf 2.5x's cache directory
231251881Speterrm -rf autom4te*.cache
232251881Speter
233251881Speterecho ""
234251881Speterecho "You can run ./configure now."
235251881Speterecho ""
236251881Speterecho "Running autogen.sh implies you are a maintainer.  You may prefer"
237251881Speterecho "to run configure in one of the following ways:"
238251881Speterecho ""
239251881Speterecho "./configure --enable-maintainer-mode"
240251881Speterecho "./configure --disable-shared"
241251881Speterecho "./configure --enable-maintainer-mode --disable-shared"
242251881Speterecho "./configure --disable-optimize --enable-debug"
243289180Speterecho "./configure CFLAGS='--flags-for-C' CXXFLAGS='--flags-for-C++'"
244251881Speterecho ""
245251881Speterecho "Note:  If you wish to run a Subversion HTTP server, you will need"
246251881Speterecho "Apache 2.x.  See the INSTALL file for details."
247251881Speterecho ""
248