Revision 593cc5bc9fd0908b5fedf4e4195e648c237b758c authored by roystgnr on 28 November 2023, 14:06:32 UTC, committed by GitHub on 28 November 2023, 14:06:32 UTC
2 parent s c24d791 + f9b7dcd
Raw File
bootstrap
#! /bin/bash
# $Id$
#
# bootstrap: Utility to easy autoconf/automake toolchain setup on
#            checkout from revision control.
#
# Copyright (c) 2002  Daniel Elstner  <daniel.elstner@gmx.net>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License VERSION 2 as
# published by the Free Software Foundation.  You are not allowed to
# use any other version of the license; unless you got the explicit
# permission from the author to do so.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

dir=`echo "$0" | sed 's,[^/]*$,,'`
test "x${dir}" = "x" && dir='.'

if (test "x`cd "${dir}" 2>/dev/null && pwd`" != "x`pwd`"); then
    echo "This script must be executed directly from the source directory."
    exit 1
fi


#########################################################################################
function check_autotool_prerequisites ()
{
    # prerequisite versions
    automake_major=1
    automake_minor=16
    automake_subminor=5

    autoconf_major=2
    autoconf_minor=71

    build_autotools=0


    autoreconf=`which autoreconf 2>/dev/null`
    if (test "x$autoreconf" != "x"); then
	if (test -x $autoreconf); then
	    autoconf_version=`$autoreconf --version | grep " $autoconf_major\." | cut -d"." -f2`
	    if (test $autoconf_version -lt $autoconf_minor); then
		echo "Autoconf Version $autoconf_major.$autoconf_version too old, building a new one..."
		build_autotools=1
	    else
		version_id=`$autoreconf --version 2>&1 | grep "(GNU Autoconf)"`
		echo "Using autoconf ($version_id)"
	    fi
	else
	    build_autotools=1
	fi
    else
	build_autotools=1
    fi


    libtool=`which glibtool 2>/dev/null`
    if (test "x$libtool" = "x"); then
	libtool=`which libtool 2>/dev/null`
    fi
    if (test "x$libtool" != "x"); then
	if (test -x $libtool); then
	    libtool_version=`$libtool --version 2>&1 | grep "(GNU libtool)"`

	    case "$libtool_version" in
		*2.4* | *2.2*)
		    echo "Using libtool ($libtool_version)"
		    ;;
		*)
	            echo "Indaequate Libtool ($libtool_version), building a new one..."
		    build_autotools=1
	    esac
	else
	    build_autotools=1
	fi
    else
	build_autotools=1
    fi


    automake=`which automake 2>/dev/null`
    if (test "x$automake" != "x"); then
	if (test -x $automake); then
	    automake_minor_version=`$automake --version | grep " $automake_major\." | cut -d"." -f2`
	    if (test $automake_minor_version -lt $automake_minor); then
		echo "Automake Version $automake_major.$automake_minor_version too old, building a new one..."
		build_autotools=1
	    else
	        automake_subminor_version=`$automake --version | grep " $automake_major\." | cut -d"." -f3`
		version_id=`$automake --version 2>&1 | grep "(GNU automake)"`
	        if (test $automake_subminor_version -lt $automake_subminor); then
		    echo "Automake Version $version_id too old, building a new one..."
		    build_autotools=1
	        else
		    echo "Using automake ($version_id)"
	        fi
	    fi
	else
	    build_autotools=1
	fi
    else
	build_autotools=1
    fi


    return $build_autotools
}
#########################################################################################



check_autotool_prerequisites
build_autotools=$?

#########################################################################################
for arg in $@; do
    if (test "x$arg" = "x--build-autotools"); then
	echo "building autotools at user request"
	build_autotools=1
    fi
done


#########################################################################################
if (test "x$build_autotools" = "x1"); then
    # when there is no autoreconf try to actually build one.
    echo "Inadequate autotools in your path, I'll build new ones..."

    top_srcdir=`pwd`
    autotools_distdir=$top_srcdir/contrib/autotools


    if (test -d $autotools_distdir); then
    # set the path to use the new tools as they are installed.
    # for example, the new autoconf is needed to build automake.
	PATH=$autotools_distdir/bin:$PATH
	for tool in autoconf-2.71 automake-1.16.5 libtool-2.4.7 ; do
	    cd $autotools_distdir
	    echo "  building $tool in $autotools_distdir"
	    tar zxf $tool.tar.gz
	    cd $tool && ./configure --prefix=$autotools_distdir >/dev/null && make install >/dev/null
	    cd .. && rm -rf $tool
	done

	cd $top_srcdir

	if (test -x $autotools_distdir/bin/autoreconf -a -x $autotools_distdir/bin/automake -a -x $autotools_distdir/bin/libtool); then
	    echo " "
	    echo " --> successfully installed autoreconf in $autotools_distdir/bin - please update your PATH and try again!"
	    echo " "
	    PATH=$autotools_distdir/bin:$PATH ./$0
	    exit 0
	fi
    fi
fi
#########################################################################################



autoreconf=`which autoreconf 2>/dev/null`
# prefer autoreconf when it is available
if (test "x$autoreconf" != "x"); then
    if (test -x $autoreconf); then
	$autoreconf -iv --force
	patch -p1 <build-aux/compile.patch
	exit 0
    fi
fi




# # now recursively call bootstrap with the autotools in our path
# export PATH=$autotools_distdir/bin:$PATH
# which autoreconf
# $0
back to top