Forced-removing of a non-existing directory breaks the build.
Noticed by "Andy Johnson" <ajohnson@aecno.com>, who provided a patch that I adapted.
/trunk/scripts/functions | 13 10 3 0 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
3 VERSION=$( cat .version )
6 # All absolutely required tools, one per line to ease diff.
7 # See function 'has_or_abort, below, for syntax
8 # - Hopefully, if gcc is present, then all associated tools will be
9 # - awk must be GNU awk
10 # - makeinfo for building docs, even if discarded later on
11 # - others obvious... :-/
13 # Format of a pattern to check for, one per line:
14 # pattern := var_name : tool_pattern OR tool_pattern
15 # tool_pattern := tool_test OR tool_pattern || tool_test
16 # tool_test := tool=regexp OR tool
17 # tool := basename of the tool OR absolute pathname to the tool
18 # regexp := valid grep(1) extended regular expression, $( tool --version)
19 # will be matched against this regexp.
21 # In case a pattern list is given (eg foo || bar || buz), then tests are performed
22 # from left to right, stopping at the first matching test (like the shell
23 # would parse 'foo || bar || buz' ).
26 # bash:bash=^GNU bash, version 3\.
27 # - if ${bash} is set and non-null, does nothing
28 # - else ensures that bash exists in the PATH, and that
29 # "$( "$( which bash )" --version |head -n 1 )"
30 # matches the regexp '^GNU bash, version 3\.'
31 # - if so, then sets bash="$( which bash )"
32 # autoconf=(GNU Autoconf) || autoconf2.50
33 # - does not look at an existing variable
35 # - 'autoconf' is to be found in the PATH, and that $( autoconf --version |head -n 1 )
36 # matches the regexp '(GNU Autoconf)' (which btw is the signature of
39 # - 'autoconf2.50' is to be found in the PATH
42 bash:bash=^GNU bash, version 3\.
45 install:install=GNU coreutils
48 awk:awk=^GNU Awk || gawk=^GNU Awk
52 automake=\(GNU automake\) (1\.[[:digit:]]{2,}\.|[2-9][[:digit:]]*\.)
53 libtool=\(GNU libtool\) (2[[:digit:]]*\.|1\.6[[:digit:]]*\.|1\.5\.[2-9][[:digit:]]+)
61 PREFIX_DEFAULT=/usr/local
71 # Simply print the error message, and exit. Obvious, he?
77 # A small function to test for existence of various tools
78 # Usage: has_or_abort test_pattern (see top of file, TOOLS_TO_CHECK, for
79 # complete pattern format)
87 var_name="$( echo "${1}" |"${sed}" -r -e 's/^((([^=:]+):.+|[^:=]+)=.+|[^:=]+)$/\3/;' )"
88 field="${var_name:+2}"
90 tool_pattern="$( echo "${1}" |cut -d : -f ${field}- |"${sed}" -r -e 's/ *\|\| */\n/g;' )"
96 for item in ${tool_pattern}; do
107 printf "Checking for '${tool}'... "
108 if [ -n "${var_name}" ]; then
109 eval var_value='"${'"${var_name}"'}"'
110 if [ -n "${var_value}" ]; then
111 echo "${var_value} (cached)"
115 where=$( which "${tool}" 2>/dev/null )
116 if [ -z "${where}" ]; then
120 elif [ -n "${regexp}" ]; then
121 tool_version=$( ${tool} --version 2>&1 )
122 str=$( echo "${tool_version}" |"${grep}" -E "${regexp}" |head -n 1 )
123 if [ -z "${str}" ]; then
131 if [ -z "${where}" ]; then
132 for item in ${tool_pattern}; do
142 echo " could not find '${tool}' matching regexp '${regexp}'"
144 echo "Either you are missing entirely the needed tool,"
145 echo "or the version you have is tool old."
146 # FORCE can be set in the environment
147 [ -z "${FORCE}" ] && do_error "Bailing out..."
150 if [ -n "${var_name}" ]; then
151 eval ${var_name}='"'"${where}"'"'
158 # Given an option string and the following argument,
159 # echoes the value of the option.
160 # If --var=val => echoes val and returns 0, meaning second arg was not consumed
161 # If --var val => echoes val and returns non null, meaning second arg was used
175 # The set_xxx functions will set the corresponding configuration variable
176 # They return 0 if second arg was not consumed, and non-zero if it was consumed.
178 PREFIX="$( get_optval "$1" "$2" )"
182 BINDIR="$( get_optval "$1" "$2" )"
186 LIBDIR="$( get_optval "$1" "$2" )"
190 DOCDIR="$( get_optval "$1" "$2" )"
194 MANDIR="$( get_optval "$1" "$2" )"
197 local var_name="${1%%=*}"
198 var_name="${var_name#--with-}"
199 eval ${var_name}="\$( get_optval "$1" "$2" )"
204 \`configure' configures crosstool-NG-${VERSION} to adapt to many kind of systems.
206 USAGE: ./configure [OPTION]...
208 Defaults for the options are specified in brackets.
211 -h, --help display this help and exit
213 Installation directories:
214 --prefix=PREFIX install files in PREFIX [${PREFIX_DEFAULT}]
215 --local don't install, and use current directory
217 By default, \`make install' will install all the files in
218 \`${PREFIX_DEFAULT}/bin', \`${PREFIX_DEFAULT}/lib' etc. You can specify
219 an installation prefix other than \`${PREFIX_DEFAULT}' using \`--prefix',
220 for instance \`--prefix=\${HOME}'.
222 For better control, use the options below.
224 Fine tuning of the installation directories:
225 --bindir=DIR user executables [PREFIX/bin]
226 --libdir=DIR object code libraries [PREFIX/lib]
227 --docdir=DIR info documentation [PREFIX/share/doc]
228 --mandir=DIR man documentation [PREFIX/share/man]
231 --with-install=PATH Specify the full PATH to GNU install
232 --with-make=PATH Specify the full PATH to GNU make
233 --with-grep=PATH Specify the full PATH to GNU grep
234 --with-sed=PATH Specify the full PATH to GNU sed
235 --with-awk=PATH Specify the full PATH to GNU awk
236 --with-bash=PATH Specify the full PATH to bash >= 3.0
240 #---------------------------------------------------------------------
243 while [ $# -ne 0 ]; do
245 --local) LOCAL_set=1; shift;;
246 --prefix*) set_prefix "$1" "$2" && shift || shift 2;;
247 --bindir*) set_bindir "$1" "$2" && shift || shift 2;;
248 --libdir*) set_libdir "$1" "$2" && shift || shift 2;;
249 --docdir*) set_docdir "$1" "$2" && shift || shift 2;;
250 --mandir*) set_mandir "$1" "$2" && shift || shift 2;;
251 --with-*) set_tool "$1" "$2" && shift || shift 2;;
252 --help|-h) do_help; exit 0;;
253 *) echo "Unrecognised option: '${1}'"; do_help; exit 1;;
258 [ -z "${PREFIX}" ] && set_prefix "" "${PREFIX_DEFAULT}"
260 # Special case when installing locally
261 if [ "${LOCAL_set}" = "1" ]; then
262 set_prefix "" "$( pwd )"
263 set_bindir "" "$( pwd )"
264 set_libdir "" "$( pwd )"
265 set_docdir "" "$( pwd )/docs"
266 set_mandir "" "$( pwd )/docs"
269 #---------------------------------------------------------------------
270 # Some sanity checks, now
272 # We check for grep and sed manually, because they are used in has_or_abort
273 printf "Checking for 'grep'... "
274 if [ -n "${grep}" ]; then
275 echo "${grep} (cached)"
277 grep="$( which grep 2>/dev/null )"
278 [ -z "${grep}" ] && do_error "not found"
281 printf "Checking whether '${grep}' supports -E... "
282 if echo 'foo' |"${grep}" -E 'foo' >/dev/null 2>&1; then
288 printf "Checking for 'sed'... "
289 if [ -n "${sed}" ]; then
290 echo "${sed} (cached)"
292 sed="$( which sed 2>/dev/null )"
293 [ -z "${sed}" ] && do_error "not found"
296 printf "Checking wether '${sed}' supports -i and -e... "
297 touch .ct-ng.sed.test
298 if "${sed}" -r -i -e 's/foo/bar/' .ct-ng.sed.test >/dev/null 2>&1; then
299 rm -f .ct-ng.sed.test
302 rm -f .ct-ng.sed.test
306 # Check the existence of absolutely required tools
310 for tool in ${TOOLS_TO_CHECK}; do
311 has_or_abort "${tool}"
315 #---------------------------------------------------------------------
316 # Compute the version string
318 # If this version is a svn snapshot, try to get the revision number
319 # If we can't get the revision number, use date
320 printf "Computing version string... "
323 REVISION="$( LC_ALL=C svnversion )"
324 case "${REVISION}" in
326 VERSION="${VERSION}_unknown@$( date +%Y%m%d.%H%M%S )";;
328 URL="$( LC_ALL=C svn info 2>/dev/null \
332 ROOT="$( LC_ALL=C svn info 2>/dev/null \
333 |"${grep}" '^Repository Root: ' \
336 VERSION="${VERSION}${URL#${ROOT}}@${REVISION}"
339 # Arrange to have no / in the directory name, no need to create an
340 # arbitrarily deep directory structure
341 VERSION="$( echo "${VERSION}" |"${sed}" -r -e 's|/+|_|g;' )"
346 #---------------------------------------------------------------------
347 # Compute and check install paths
349 # Now we have the version string, we can build up the paths
350 [ -z "${BINDIR_set}" ] && BINDIR="${PREFIX}/bin"
351 [ -z "${LIBDIR_set}" ] && LIBDIR="${PREFIX}/lib/ct-ng-${VERSION}"
352 [ -z "${DOCDIR_set}" ] && DOCDIR="${PREFIX}/share/doc/ct-ng-${VERSION}"
353 [ -z "${MANDIR_set}" ] && MANDIR="${PREFIX}/share/man/man1"
355 # Check that install PATHs are absolute
356 for p in BIN LIB DOC MAN; do
358 eval v='"${'"${var}"'}"'
361 *) do_error "'${var}' is not an absolute path: '${v}'"
365 #---------------------------------------------------------------------
368 printf "Building up Makefile... "
371 $( printf "${TOOLS_TO_CHECK}" \
372 |"${sed}" -r -e 's/^((([^=:]+):.+|[^:=]+)=.+|[^:=]+)$/\3/;'
374 var_sed="$( for var_name in ${var_list}; do
375 eval echo 's,@@${var_name}@@,${'"${var_name}"'},g'
378 "${sed}" -r -e "s,@@BINDIR@@,${BINDIR},g
379 s,@@LIBDIR@@,${LIBDIR},g
380 s,@@DOCDIR@@,${DOCDIR},g
381 s,@@MANDIR@@,${MANDIR},g
382 s,@@VERSION@@,${VERSION},g
385 s,@@LOCAL@@,${LOCAL_set},g" Makefile.in >Makefile
390 crosstool-NG configured as follows: