| #!/bin/sh |
| #*************************************************************************** |
| # _ _ ____ _ |
| # Project ___| | | | _ \| | |
| # / __| | | | |_) | | |
| # | (__| |_| | _ <| |___ |
| # \___|\___/|_| \_\_____| |
| # |
| # Copyright (C) 1998 - 2011, 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 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'! ;-) |
| # |
| 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 -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/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 libtool preliminary check |
| # |
| want_lt_major=1 |
| want_lt_minor=4 |
| want_lt_patch=2 |
| want_lt_version=1.4.2 |
| |
| # This approach that tries 'glibtool' first is intended for systems that |
| # have GNU libtool named as 'glibtool' and libtool not being GNU's. |
| |
| libtool=`findtool glibtool 2>/dev/null` |
| if test ! -x "$libtool"; then |
| libtool=`findtool ${LIBTOOL:-libtool}` |
| fi |
| if test -z "$libtool"; then |
| echo "buildconf: libtool not found." |
| echo " You need GNU libtool $want_lt_version or newer installed." |
| exit 1 |
| 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 GNU libtool $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: libtool version $lt_version found." |
| echo " You need GNU libtool $want_lt_version or newer installed." |
| exit 1 |
| fi |
| |
| echo "buildconf: libtool version $lt_version (ok)" |
| |
| #-------------------------------------------------------------------------- |
| # GNU libtoolize check |
| # |
| if test -z "$LIBTOOLIZE"; then |
| # use (g)libtoolize from same location as (g)libtool |
| libtoolize="${libtool}ize" |
| else |
| libtoolize=`findtool $LIBTOOLIZE` |
| fi |
| if test ! -f "$libtoolize"; then |
| echo "buildconf: libtoolize not found." |
| echo " You need GNU libtoolize $want_lt_version or newer installed." |
| exit 1 |
| fi |
| |
| #-------------------------------------------------------------------------- |
| # m4 check |
| # |
| m4=`(${M4:-m4} --version || ${M4:-gm4} --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 |
| 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 \ |
| 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 \ |
| configurehelp.pm \ |
| curl-config \ |
| curlbuild.h \ |
| depcomp \ |
| libcares.pc \ |
| libcurl.pc \ |
| libtool \ |
| libtool.m4 \ |
| libtool.m4.tmp \ |
| 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 "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" |
| ${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: 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 "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 |