mirror of
https://github.com/curl/curl.git
synced 2024-11-21 01:16:58 +08:00
a784ed6065
Kalle Vahlman's patch applied a while ago broke how the findtool function searches for tools, as it would always check if "$file" was present first, which thus made the bad assumption that a file in the current directory would be a match. I noticed when it found 'libtool' in the current directory but libtoolize is not there, which confused the script.
408 lines
12 KiB
Bash
Executable File
408 lines
12 KiB
Bash
Executable File
#!/bin/sh
|
|
#***************************************************************************
|
|
# _ _ ____ _
|
|
# Project ___| | | | _ \| |
|
|
# / __| | | | |_) | |
|
|
# | (__| |_| | _ <| |___
|
|
# \___|\___/|_| \_\_____|
|
|
#
|
|
# Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
#
|
|
# This software is licensed as described in the file COPYING, which
|
|
# you should have received as part of this distribution. The terms
|
|
# are also available at http://curl.haxx.se/docs/copyright.html.
|
|
#
|
|
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
# copies of the Software, and permit persons to whom the Software is
|
|
# furnished to do so, under the terms of the COPYING file.
|
|
#
|
|
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
# KIND, either express or implied.
|
|
#
|
|
###########################################################################
|
|
|
|
die(){
|
|
echo "$@"
|
|
exit
|
|
}
|
|
|
|
#--------------------------------------------------------------------------
|
|
# findtool works as 'which' but we use a different name to make it more
|
|
# obvious we aren't using 'which'! ;-)
|
|
#
|
|
findtool(){
|
|
file="$1"
|
|
|
|
if { echo $file | grep "/" >/dev/null 2>&1; } then
|
|
# we only check for the explicit file name if the file is given
|
|
# including a slash. Use ./ for current dir. Previously this would
|
|
# otherwise always cause findtool to search the local dir first, which
|
|
# is wrong.
|
|
if test -f "$file"; then
|
|
echo "$file"
|
|
return
|
|
fi
|
|
fi
|
|
|
|
old_IFS=$IFS; IFS=':'
|
|
for path in $PATH
|
|
do
|
|
IFS=$old_IFS
|
|
# echo "checks for $file in $path" >&2
|
|
if test -f "$path/$file"; then
|
|
echo "$path/$file"
|
|
return
|
|
fi
|
|
done
|
|
IFS=$old_IFS
|
|
}
|
|
|
|
#--------------------------------------------------------------------------
|
|
# removethis() removes all files and subdirectories with the given name,
|
|
# inside and below the current subdirectory at invocation time.
|
|
#
|
|
removethis(){
|
|
if test "$#" = "1"; then
|
|
find . -depth -name $1 -print > buildconf.tmp.$$
|
|
while read fdname
|
|
do
|
|
if test -f "$fdname"; then
|
|
rm -f "$fdname"
|
|
elif test -d "$fdname"; then
|
|
rm -f -r "$fdname"
|
|
fi
|
|
done < buildconf.tmp.$$
|
|
rm -f buildconf.tmp.$$
|
|
fi
|
|
}
|
|
|
|
#--------------------------------------------------------------------------
|
|
# Ensure that buildconf runs from the subdirectory where configure.ac lives
|
|
#
|
|
if test ! -f configure.ac ||
|
|
test ! -f src/main.c ||
|
|
test ! -f lib/urldata.h ||
|
|
test ! -f include/curl/curl.h; then
|
|
echo "Can not run buildconf from outside of curl's source subdirectory!"
|
|
echo "Change to the subdirectory where buildconf is found, and try again."
|
|
exit 1
|
|
fi
|
|
|
|
#--------------------------------------------------------------------------
|
|
# autoconf 2.57 or newer
|
|
#
|
|
need_autoconf="2.57"
|
|
ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|head -n 1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
|
if test -z "$ac_version"; then
|
|
echo "buildconf: autoconf not found."
|
|
echo " You need autoconf version $need_autoconf or newer installed."
|
|
exit 1
|
|
fi
|
|
old_IFS=$IFS; IFS='.'; set $ac_version; IFS=$old_IFS
|
|
if test "$1" = "2" -a "$2" -lt "57" || test "$1" -lt "2"; then
|
|
echo "buildconf: autoconf version $ac_version found."
|
|
echo " You need autoconf version $need_autoconf or newer installed."
|
|
echo " If you have a sufficient autoconf installed, but it"
|
|
echo " is not named 'autoconf', then try setting the"
|
|
echo " AUTOCONF environment variable."
|
|
exit 1
|
|
fi
|
|
|
|
echo "buildconf: autoconf version $ac_version (ok)"
|
|
|
|
am4te_version=`${AUTOM4TE:-autom4te} --version 2>/dev/null|head -n 1| sed -e 's/autom4te\(.*\)/\1/' -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
|
if test -z "$am4te_version"; then
|
|
echo "buildconf: autom4te not found. Weird autoconf installation!"
|
|
exit 1
|
|
fi
|
|
if test "$am4te_version" = "$ac_version"; then
|
|
echo "buildconf: autom4te version $am4te_version (ok)"
|
|
else
|
|
echo "buildconf: autom4te version $am4te_version (ERROR: does not match autoconf version)"
|
|
exit 1
|
|
fi
|
|
|
|
#--------------------------------------------------------------------------
|
|
# autoheader 2.50 or newer
|
|
#
|
|
ah_version=`${AUTOHEADER:-autoheader} --version 2>/dev/null|head -n 1| sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'`
|
|
if test -z "$ah_version"; then
|
|
echo "buildconf: autoheader not found."
|
|
echo " You need autoheader version 2.50 or newer installed."
|
|
exit 1
|
|
fi
|
|
old_IFS=$IFS; IFS='.'; set $ah_version; IFS=$old_IFS
|
|
if test "$1" = "2" -a "$2" -lt "50" || test "$1" -lt "2"; then
|
|
echo "buildconf: autoheader version $ah_version found."
|
|
echo " You need autoheader version 2.50 or newer installed."
|
|
echo " If you have a sufficient autoheader installed, but it"
|
|
echo " is not named 'autoheader', then try setting the"
|
|
echo " AUTOHEADER environment variable."
|
|
exit 1
|
|
fi
|
|
|
|
echo "buildconf: autoheader version $ah_version (ok)"
|
|
|
|
#--------------------------------------------------------------------------
|
|
# automake 1.7 or newer
|
|
#
|
|
need_automake="1.7"
|
|
am_version=`${AUTOMAKE:-automake} --version 2>/dev/null|head -n 1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'`
|
|
if test -z "$am_version"; then
|
|
echo "buildconf: automake not found."
|
|
echo " You need automake version $need_automake or newer installed."
|
|
exit 1
|
|
fi
|
|
old_IFS=$IFS; IFS='.'; set $am_version; IFS=$old_IFS
|
|
if test "$1" = "1" -a "$2" -lt "7" || test "$1" -lt "1"; then
|
|
echo "buildconf: automake version $am_version found."
|
|
echo " You need automake version $need_automake or newer installed."
|
|
echo " If you have a sufficient automake installed, but it"
|
|
echo " is not named 'automake', then try setting the"
|
|
echo " AUTOMAKE environment variable."
|
|
exit 1
|
|
fi
|
|
|
|
echo "buildconf: automake version $am_version (ok)"
|
|
|
|
acloc_version=`${ACLOCAL:-aclocal} --version 2>/dev/null|head -n 1| sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'`
|
|
if test -z "$acloc_version"; then
|
|
echo "buildconf: aclocal not found. Weird automake installation!"
|
|
exit 1
|
|
fi
|
|
if test "$acloc_version" = "$am_version"; then
|
|
echo "buildconf: aclocal version $acloc_version (ok)"
|
|
else
|
|
echo "buildconf: aclocal version $acloc_version (ERROR: does not match automake version)"
|
|
exit 1
|
|
fi
|
|
|
|
#--------------------------------------------------------------------------
|
|
# libtool check
|
|
#
|
|
LIBTOOL_WANTED_MAJOR=1
|
|
LIBTOOL_WANTED_MINOR=4
|
|
LIBTOOL_WANTED_PATCH=2
|
|
LIBTOOL_WANTED_VERSION=1.4.2
|
|
|
|
# this approach that tries 'glibtool' first is some kind of work-around for
|
|
# some BSD-systems I believe that use to provide the GNU libtool named
|
|
# glibtool, with 'libtool' being something completely different.
|
|
libtool=`findtool glibtool 2>/dev/null`
|
|
if test ! -x "$libtool"; then
|
|
libtool=`findtool ${LIBTOOL:-libtool}`
|
|
fi
|
|
|
|
if test -z "$LIBTOOLIZE"; then
|
|
# set the LIBTOOLIZE here so that glibtoolize is used if glibtool was found
|
|
# $libtool is already the full path
|
|
libtoolize="${libtool}ize"
|
|
else
|
|
libtoolize=`findtool $LIBTOOLIZE`
|
|
fi
|
|
|
|
lt_pver=`$libtool --version 2>/dev/null|head -n 1`
|
|
lt_qver=`echo $lt_pver|sed -e "s/([^)]*)//g" -e "s/^[^0-9]*//g"`
|
|
lt_version=`echo $lt_qver|sed -e "s/[- ].*//" -e "s/\([a-z]*\)$//"`
|
|
if test -z "$lt_version"; then
|
|
echo "buildconf: libtool not found."
|
|
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
|
|
exit 1
|
|
fi
|
|
old_IFS=$IFS; IFS='.'; set $lt_version; IFS=$old_IFS
|
|
lt_major=$1
|
|
lt_minor=$2
|
|
lt_patch=$3
|
|
lt_status="good"
|
|
|
|
if test "$lt_major" = "$LIBTOOL_WANTED_MAJOR"; then
|
|
if test "$lt_minor" -lt "$LIBTOOL_WANTED_MINOR"; then
|
|
lt_status="bad"
|
|
elif test -n "$LIBTOOL_WANTED_PATCH"; then
|
|
if test "$lt_minor" -gt "$LIBTOOL_WANTED_MINOR"; then
|
|
lt_status="good"
|
|
elif test -n "$lt_patch"; then
|
|
if test "$lt_patch" -lt "$LIBTOOL_WANTED_PATCH"; then
|
|
lt_status="bad"
|
|
fi
|
|
else
|
|
lt_status="bad"
|
|
fi
|
|
fi
|
|
fi
|
|
if test $lt_status != "good"; then
|
|
echo "buildconf: libtool version $lt_version found."
|
|
echo " You need libtool version $LIBTOOL_WANTED_VERSION or newer installed"
|
|
exit 1
|
|
fi
|
|
|
|
echo "buildconf: libtool version $lt_version (ok)"
|
|
|
|
if test -f "$libtoolize"; then
|
|
echo "buildconf: libtoolize found"
|
|
else
|
|
echo "buildconf: libtoolize not found. Weird libtool installation!"
|
|
exit 1
|
|
fi
|
|
|
|
#--------------------------------------------------------------------------
|
|
# m4 check
|
|
#
|
|
m4=`${M4:-m4} --version 2>/dev/null|head -n 1`;
|
|
m4_version=`echo $m4 | sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//'`
|
|
|
|
if { echo $m4 | grep "GNU" >/dev/null 2>&1; } then
|
|
echo "buildconf: GNU m4 version $m4_version (ok)"
|
|
else
|
|
echo "buildconf: m4 version $m4 found. You need a GNU m4 installed!"
|
|
exit 1
|
|
fi
|
|
|
|
#--------------------------------------------------------------------------
|
|
# perl check
|
|
#
|
|
PERL=`findtool ${PERL:-perl}`
|
|
|
|
#--------------------------------------------------------------------------
|
|
# Remove files generated on previous buildconf/configure run.
|
|
#
|
|
for fname in .deps \
|
|
.libs \
|
|
*.la \
|
|
*.lo \
|
|
*.a \
|
|
*.o \
|
|
Makefile \
|
|
Makefile.in \
|
|
aclocal.m4 \
|
|
aclocal.m4.bak \
|
|
ares_build.h \
|
|
ares_config.h \
|
|
ares_config.h.in \
|
|
autom4te.cache \
|
|
compile \
|
|
config.guess \
|
|
curl_config.h \
|
|
curl_config.h.in \
|
|
config.log \
|
|
config.lt \
|
|
config.status \
|
|
config.sub \
|
|
configure \
|
|
curl-config \
|
|
curlbuild.h \
|
|
depcomp \
|
|
libcares.pc \
|
|
libcurl.pc \
|
|
libtool \
|
|
libtool.m4 \
|
|
ltmain.sh \
|
|
ltoptions.m4 \
|
|
ltsugar.m4 \
|
|
ltversion.m4 \
|
|
lt~obsolete.m4 \
|
|
stamp-h1 \
|
|
stamp-h2 \
|
|
stamp-h3 ; do
|
|
removethis "$fname"
|
|
done
|
|
|
|
#--------------------------------------------------------------------------
|
|
# run the correct scripts now
|
|
#
|
|
|
|
echo "buildconf: running libtoolize"
|
|
$libtoolize --copy --automake --force || die "The libtoolize command failed"
|
|
|
|
if test ! -f m4/curl-functions.m4; then
|
|
echo "buildconf: cURL m4 macros not found"
|
|
exit 1
|
|
fi
|
|
|
|
echo "buildconf: running aclocal"
|
|
${ACLOCAL:-aclocal} -I m4 $ACLOCAL_FLAGS || die "The aclocal command line failed"
|
|
|
|
if test -n "$PERL"; then
|
|
echo "buildconf: running aclocal hack to convert all mv to mv -f"
|
|
$PERL -i.bak -pe 's/\bmv +([^-\s])/mv -f $1/g' aclocal.m4
|
|
else
|
|
echo "buildconf: perl not found"
|
|
exit 1
|
|
fi
|
|
|
|
echo "buildconf: running autoheader"
|
|
${AUTOHEADER:-autoheader} || die "The autoheader command failed"
|
|
|
|
echo "buildconf: cp lib/curl_config.h.in src/curl_config.h.in"
|
|
cp lib/curl_config.h.in src/curl_config.h.in
|
|
|
|
echo "buildconf: running autoconf"
|
|
${AUTOCONF:-autoconf} || die "The autoconf command failed"
|
|
|
|
if test -d ares; then
|
|
cd ares
|
|
echo "buildconf: running in ares"
|
|
./buildconf
|
|
cd ..
|
|
fi
|
|
|
|
echo "buildconf: running automake"
|
|
${AUTOMAKE:-automake} -a -c || die "The automake command failed"
|
|
|
|
#--------------------------------------------------------------------------
|
|
# Depending on the libtool and automake versions being used, config.guess
|
|
# might not be installed in the subdirectory until automake has finished.
|
|
# So we can not attempt to use it until this very last buildconf stage.
|
|
#
|
|
|
|
if test ! -f ./config.guess; then
|
|
echo "buildconf: config.guess not found"
|
|
else
|
|
buildhost=`./config.guess 2>/dev/null|head -n 1`
|
|
case $buildhost in
|
|
*-*-hpux*)
|
|
need_lt_major=1
|
|
need_lt_minor=5
|
|
need_lt_patch=24
|
|
need_lt_check="yes"
|
|
;;
|
|
esac
|
|
if test ! -z "$need_lt_check"; then
|
|
if test -z "$lt_major"; then
|
|
lt_status="bad"
|
|
elif test "$lt_major" -gt "$need_lt_major"; then
|
|
lt_status="good"
|
|
elif test "$lt_major" -lt "$need_lt_major"; then
|
|
lt_status="bad"
|
|
elif test -z "$lt_minor"; then
|
|
lt_status="bad"
|
|
elif test "$lt_minor" -gt "$need_lt_minor"; then
|
|
lt_status="good"
|
|
elif test "$lt_minor" -lt "$need_lt_minor"; then
|
|
lt_status="bad"
|
|
elif test -z "$lt_patch"; then
|
|
lt_status="bad"
|
|
elif test "$lt_patch" -gt "$need_lt_patch"; then
|
|
lt_status="good"
|
|
elif test "$lt_patch" -lt "$need_lt_patch"; then
|
|
lt_status="bad"
|
|
else
|
|
lt_status="good"
|
|
fi
|
|
if test "$lt_status" != "good"; then
|
|
need_lt_version="$need_lt_major.$need_lt_minor.$need_lt_patch"
|
|
echo "buildconf: libtool version $lt_version found."
|
|
echo " $buildhost requires libtool $need_lt_version or newer installed."
|
|
rm -f configure
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
#--------------------------------------------------------------------------
|
|
# Finished succesfully.
|
|
#
|
|
|
|
echo "buildconf: OK"
|
|
exit 0
|