#!/bin/sh
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2014, 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 -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 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 || ${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 \
    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"
${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
