mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 16:18:48 -05:00
afa0a12018
retired with 09f278121e
but kept around as
the name is generic enough that it might be in use and relied upon from
the environment.
438 lines
14 KiB
Bash
Executable File
438 lines
14 KiB
Bash
Executable File
#!/bin/sh
|
|
#***************************************************************************
|
|
# _ _ ____ _
|
|
# Project ___| | | | _ \| |
|
|
# / __| | | | |_) | |
|
|
# | (__| |_| | _ <| |___
|
|
# \___|\___/|_| \_\_____|
|
|
#
|
|
# Copyright (C) 1998 - 2020, 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 https://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 prints argument string to stdout and exits this shell script.
|
|
#
|
|
die(){
|
|
echo "buildconf: $*"
|
|
exit 1
|
|
}
|
|
|
|
#--------------------------------------------------------------------------
|
|
# findtool works as 'which' but we use a different name to make it more
|
|
# obvious we aren't using 'which'! ;-)
|
|
# Unlike 'which' does, the current directory is ignored.
|
|
#
|
|
findtool(){
|
|
file="$1"
|
|
|
|
if { echo "$file" | grep "/" >/dev/null 2>&1; } then
|
|
# when file is given with a path check it first
|
|
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 "$path" -a "$path" != '.' -a -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 -exec rm -rf {} \;
|
|
fi
|
|
}
|
|
|
|
#--------------------------------------------------------------------------
|
|
# Ensure that buildconf runs from the subdirectory where configure.ac lives
|
|
#
|
|
if test ! -f configure.ac ||
|
|
test ! -f src/tool_main.c ||
|
|
test ! -f lib/urldata.h ||
|
|
test ! -f include/curl/curl.h ||
|
|
test ! -f m4/curl-functions.m4; 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. Unpatched version 2.67 does not generate proper
|
|
# configure script. Unpatched version 2.68 is simply unusable, we should
|
|
# disallow 2.68 usage.
|
|
#
|
|
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
|
|
|
|
if test "$1" = "2" -a "$2" -eq "67"; then
|
|
echo "buildconf: autoconf version $ac_version (BAD)"
|
|
echo " Unpatched version generates broken configure script."
|
|
elif test "$1" = "2" -a "$2" -eq "68"; then
|
|
echo "buildconf: autoconf version $ac_version (BAD)"
|
|
echo " Unpatched version generates unusable configure script."
|
|
else
|
|
echo "buildconf: autoconf version $ac_version (ok)"
|
|
fi
|
|
|
|
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
|
|
|
|
#--------------------------------------------------------------------------
|
|
# GNU libtoolize preliminary check
|
|
#
|
|
want_lt_major=1
|
|
want_lt_minor=4
|
|
want_lt_patch=2
|
|
want_lt_version=1.4.2
|
|
|
|
# This approach that tries 'glibtoolize' first is intended for systems that
|
|
# have GNU libtool named as 'glibtoolize' and libtoolize not being GNU's.
|
|
|
|
libtoolize=`findtool glibtoolize 2>/dev/null`
|
|
if test ! -x "$libtoolize"; then
|
|
libtoolize=`findtool ${LIBTOOLIZE:-libtoolize}`
|
|
fi
|
|
if test -z "$libtoolize"; then
|
|
echo "buildconf: libtoolize not found."
|
|
echo " You need GNU libtoolize $want_lt_version or newer installed."
|
|
exit 1
|
|
fi
|
|
|
|
lt_pver=`$libtoolize --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: libtoolize not found."
|
|
echo " You need GNU libtoolize $want_lt_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
|
|
|
|
if test -z "$lt_major"; then
|
|
lt_status="bad"
|
|
elif test "$lt_major" -gt "$want_lt_major"; then
|
|
lt_status="good"
|
|
elif test "$lt_major" -lt "$want_lt_major"; then
|
|
lt_status="bad"
|
|
elif test -z "$lt_minor"; then
|
|
lt_status="bad"
|
|
elif test "$lt_minor" -gt "$want_lt_minor"; then
|
|
lt_status="good"
|
|
elif test "$lt_minor" -lt "$want_lt_minor"; then
|
|
lt_status="bad"
|
|
elif test -z "$lt_patch"; then
|
|
lt_status="bad"
|
|
elif test "$lt_patch" -gt "$want_lt_patch"; then
|
|
lt_status="good"
|
|
elif test "$lt_patch" -lt "$want_lt_patch"; then
|
|
lt_status="bad"
|
|
else
|
|
lt_status="good"
|
|
fi
|
|
if test "$lt_status" != "good"; then
|
|
echo "buildconf: libtoolize version $lt_version found."
|
|
echo " You need GNU libtoolize $want_lt_version or newer installed."
|
|
exit 1
|
|
fi
|
|
|
|
echo "buildconf: libtoolize version $lt_version (ok)"
|
|
|
|
#--------------------------------------------------------------------------
|
|
# m4 check
|
|
#
|
|
m4=`(${M4:-m4} --version 0<&- || ${M4:-gm4} --version) 2>/dev/null 0<&- | 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
|
|
if test -z "$m4"; then
|
|
echo "buildconf: m4 version not recognized. You need a GNU m4 installed!"
|
|
else
|
|
echo "buildconf: m4 version $m4 found. You need a GNU m4 installed!"
|
|
fi
|
|
exit 1
|
|
fi
|
|
|
|
#--------------------------------------------------------------------------
|
|
# perl check
|
|
#
|
|
PERL=`findtool ${PERL:-perl}`
|
|
if test -z "$PERL"; then
|
|
echo "buildconf: perl not found"
|
|
exit 1
|
|
fi
|
|
|
|
#--------------------------------------------------------------------------
|
|
# 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 \
|
|
autom4te.cache \
|
|
compile \
|
|
config.guess \
|
|
curl_config.h \
|
|
curl_config.h.in \
|
|
config.log \
|
|
config.lt \
|
|
config.status \
|
|
config.sub \
|
|
configure \
|
|
configurehelp.pm \
|
|
curl-config \
|
|
depcomp \
|
|
libcares.pc \
|
|
libcurl.pc \
|
|
libtool \
|
|
libtool.m4 \
|
|
libtool.m4.tmp \
|
|
ltmain.sh \
|
|
ltoptions.m4 \
|
|
ltsugar.m4 \
|
|
ltversion.m4 \
|
|
lt~obsolete.m4 \
|
|
missing \
|
|
install-sh \
|
|
stamp-h1 \
|
|
stamp-h2 \
|
|
stamp-h3 ; do
|
|
removethis "$fname"
|
|
done
|
|
|
|
#--------------------------------------------------------------------------
|
|
# run the correct scripts now
|
|
#
|
|
|
|
echo "buildconf: running libtoolize"
|
|
${libtoolize} --copy --force || die "libtoolize command failed"
|
|
|
|
# When using libtool 1.5.X (X < 26) we copy libtool.m4 to our local m4
|
|
# subdirectory and this local copy is patched to fix some warnings that
|
|
# are triggered when running aclocal and using autoconf 2.62 or later.
|
|
|
|
if test "$lt_major" = "1" && test "$lt_minor" = "5"; then
|
|
if test -z "$lt_patch" || test "$lt_patch" -lt "26"; then
|
|
echo "buildconf: copying libtool.m4 to local m4 subdir"
|
|
ac_dir=`${ACLOCAL:-aclocal} --print-ac-dir`
|
|
if test -f $ac_dir/libtool.m4; then
|
|
cp -f $ac_dir/libtool.m4 m4/libtool.m4
|
|
else
|
|
echo "buildconf: $ac_dir/libtool.m4 not found"
|
|
fi
|
|
if test -f m4/libtool.m4; then
|
|
echo "buildconf: renaming some variables in local m4/libtool.m4"
|
|
$PERL -i.tmp -pe \
|
|
's/lt_prog_compiler_pic_works/lt_cv_prog_compiler_pic_works/g; \
|
|
s/lt_prog_compiler_static_works/lt_cv_prog_compiler_static_works/g;' \
|
|
m4/libtool.m4
|
|
rm -f m4/libtool.m4.tmp
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if test -f m4/libtool.m4; then
|
|
echo "buildconf: converting all mv to mv -f in local m4/libtool.m4"
|
|
$PERL -i.tmp -pe 's/\bmv +([^-\s])/mv -f $1/g' m4/libtool.m4
|
|
rm -f m4/libtool.m4.tmp
|
|
fi
|
|
|
|
echo "buildconf: running aclocal"
|
|
#shellcheck disable=SC2154
|
|
${ACLOCAL:-aclocal} -I m4 $ACLOCAL_FLAGS || die "aclocal command failed"
|
|
|
|
echo "buildconf: converting all mv to mv -f in local aclocal.m4"
|
|
$PERL -i.bak -pe 's/\bmv +([^-\s])/mv -f $1/g' aclocal.m4
|
|
|
|
echo "buildconf: running autoheader"
|
|
${AUTOHEADER:-autoheader} || die "autoheader command failed"
|
|
|
|
echo "buildconf: running autoconf"
|
|
${AUTOCONF:-autoconf} || die "autoconf command failed"
|
|
|
|
if test -d ares; then
|
|
cd ares
|
|
echo "buildconf: running in ares"
|
|
./buildconf
|
|
cd ..
|
|
fi
|
|
|
|
echo "buildconf: running automake"
|
|
${AUTOMAKE:-automake} --add-missing --copy || die "automake command failed"
|
|
|
|
#--------------------------------------------------------------------------
|
|
# GNU libtool complementary check
|
|
#
|
|
# 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
|
|
*-*-darwin*)
|
|
need_lt_major=1
|
|
need_lt_minor=5
|
|
need_lt_patch=26
|
|
need_lt_check="yes"
|
|
;;
|
|
*-*-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 GNU libtool $need_lt_version or newer installed."
|
|
rm -f configure
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
#--------------------------------------------------------------------------
|
|
# Finished successfully.
|
|
#
|
|
echo "buildconf: OK"
|
|
exit 0
|