mas01mj@584: #!/bin/sh mas01mj@584: # mas01mj@584: # autogen.sh - Generates initial makefiles from a pristine CVS tree mas01mj@584: # mas01mj@584: # USAGE: mas01mj@584: # autogen.sh [configure options] mas01mj@584: # mas01mj@584: # Configuration is affected by environment variables as follows: mas01mj@584: # mas01mj@584: # DRYRUN mas01mj@584: # If set to any value it will do no configuring but will emit the mas01mj@584: # programs that would be run. mas01mj@584: # e.g. DRYRUN=1 ./autogen.sh mas01mj@584: # mas01mj@584: # AUTOMAKE ACLOCAL AUTOCONF AUTOHEADER LIBTOOLIZE GTKDOCIZE mas01mj@584: # If set (named after program) then this overrides any searching for mas01mj@584: # the programs on the current PATH. mas01mj@584: # e.g. AUTOMAKE=automake-1.7 ACLOCAL=aclocal-1.7 ./autogen.sh mas01mj@584: # mas01mj@584: # CONFIG_DIR (default ../config) mas01mj@584: # The directory where fresh GNU config.guess and config.sub can be mas01mj@584: # found for automatic copying in-place. mas01mj@584: # mas01mj@584: # PATH mas01mj@584: # Where the programs are searched for mas01mj@584: # mas01mj@584: # SRCDIR (default .) mas01mj@584: # Source directory mas01mj@584: # mas01mj@584: # This script is based on similar scripts used in various tools mas01mj@584: # commonly made available via CVS and used with GNU automake. mas01mj@584: # Try 'locate autogen.sh' on your system and see what you get. mas01mj@584: # mas01mj@584: # This script is in the public domain mas01mj@584: # mas01mj@584: mas01mj@584: # Directory for the sources mas01mj@584: SRCDIR=${SRCDIR-.} mas01mj@584: mas01mj@584: # Where the GNU config.sub, config.guess might be found mas01mj@584: CONFIG_DIR=${CONFIG_DIR-../config} mas01mj@584: mas01mj@584: # The programs required for configuring which will be searched for mas01mj@584: # in the current PATH. mas01mj@584: # Set an envariable of the same name in uppercase, to override scan mas01mj@584: # mas01mj@584: programs="automake aclocal autoconf autoheader libtoolize" mas01mj@584: confs=`find . -name configure.ac -print` mas01mj@584: if grep "^GTK_DOC_CHECK" $confs >/dev/null; then mas01mj@584: programs="$programs gtkdocize" mas01mj@584: fi mas01mj@584: if grep "^AC_CHECK_PROGS.SWIG" $confs >/dev/null; then mas01mj@584: programs="$programs swig" mas01mj@584: fi mas01mj@584: ltdl= mas01mj@584: if grep "^LTDL_INIT" $confs >/dev/null; then mas01mj@584: ltdl="--ltdl" mas01mj@584: fi mas01mj@584: mas01mj@584: # Some dependencies for autotools: mas01mj@584: # automake 1.10 requires autoconf 2.60 mas01mj@584: # automake 1.9 requires autoconf 2.58 mas01mj@584: # automake 1.8 requires autoconf 2.58 mas01mj@584: # automake 1.7 requires autoconf 2.54 mas01mj@584: automake_min_vers=010700 mas01mj@584: aclocal_min_vers=$automake_min_vers mas01mj@584: autoconf_min_vers=025400 mas01mj@584: autoheader_min_vers=$autoconf_min_vers mas01mj@584: libtoolize_min_vers=020200 mas01mj@584: gtkdocize_min_vers=010300 mas01mj@584: swig_min_vers=010324 mas01mj@584: mas01mj@584: # Default program arguments mas01mj@584: automake_args="--add-missing" mas01mj@584: autoconf_args= mas01mj@584: libtoolize_args="$ltdl --force --copy --automake" mas01mj@584: gtkdocize_args="--copy" mas01mj@584: aclocal_args= mas01mj@584: automake_args="--gnu --add-missing --force --copy" mas01mj@584: # --enable-gtk-doc does no harm if it's not available mas01mj@584: configure_args="--enable-maintainer-mode --enable-gtk-doc" mas01mj@584: mas01mj@584: mas01mj@584: # You should not need to edit below here mas01mj@584: ###################################################################### mas01mj@584: mas01mj@584: mas01mj@584: # number comparisons may need a C locale mas01mj@584: LANG=C mas01mj@584: LC_NUMERIC=C mas01mj@584: mas01mj@584: mas01mj@584: program=`basename $0` mas01mj@584: mas01mj@584: if test "X$DRYRUN" != X; then mas01mj@584: DRYRUN=echo mas01mj@584: fi mas01mj@584: mas01mj@584: cat > autogen-get-version.pl <&1 |") || next; mas01mj@584: while() { mas01mj@584: chomp; mas01mj@584: next if @vnums; # drain pipe if we got a vnums mas01mj@584: next unless /^\$mname/i; mas01mj@584: my(\$v)=/(\S+)\$/i; \$v =~ s/-.*\$//; mas01mj@584: @vnums=grep { defined \$_ && !/^\s*\$/} map { s/\D//g; \$_; } split(/\./, \$v); mas01mj@584: } mas01mj@584: close(PIPE); mas01mj@584: last if @vnums; mas01mj@584: } mas01mj@584: mas01mj@584: @vnums=(@vnums, 0, 0, 0)[0..2]; mas01mj@584: \$vn=join('', map { sprintf('%02d', \$_) } @vnums); mas01mj@584: print "\$vn\n"; mas01mj@584: exit 0; mas01mj@584: EOF mas01mj@584: mas01mj@584: autogen_get_version="`pwd`/autogen-get-version.pl" mas01mj@584: mas01mj@584: trap "rm -f $autogen_get_version" 0 1 9 15 mas01mj@584: mas01mj@584: mas01mj@584: update_prog_version() { mas01mj@584: dir=$1 mas01mj@584: prog=$2 mas01mj@584: mas01mj@584: # If there exists an envariable PROG in uppercase, use that and do not scan mas01mj@584: ucprog=`echo $prog | tr 'a-z' 'A-Z' ` mas01mj@584: eval env=\$${ucprog} mas01mj@584: if test X$env != X; then mas01mj@584: prog_name=$env mas01mj@584: prog_vers=`perl $autogen_get_version $prog_name $prog` mas01mj@584: mas01mj@584: if test X$prog_vers = X; then mas01mj@584: prog_vers=0 mas01mj@584: fi mas01mj@584: eval ${prog}_name=${prog_name} mas01mj@584: eval ${prog}_vers=${prog_vers} mas01mj@584: eval ${prog}_dir=environment mas01mj@584: return mas01mj@584: fi mas01mj@584: mas01mj@584: eval prog_name=\$${prog}_name mas01mj@584: eval prog_vers=\$${prog}_vers mas01mj@584: eval prog_dir=\$${prog}_dir mas01mj@584: if test X$prog_vers = X; then mas01mj@584: prog_vers=0 mas01mj@584: fi mas01mj@584: mas01mj@584: save_PATH="$PATH" mas01mj@584: mas01mj@584: cd "$dir" mas01mj@584: PATH=".:$PATH" mas01mj@584: mas01mj@584: names=`ls $prog* 2>/dev/null` mas01mj@584: if [ "X$names" != "X" ]; then mas01mj@584: for name in $names; do mas01mj@584: vers=`perl $autogen_get_version $dir/$name $prog` mas01mj@584: if [ "X$vers" = "X" ]; then mas01mj@584: continue mas01mj@584: fi mas01mj@584: mas01mj@584: if expr $vers '>' $prog_vers >/dev/null; then mas01mj@584: prog_name=$name mas01mj@584: prog_vers=$vers mas01mj@584: prog_dir="$dir" mas01mj@584: fi mas01mj@584: done mas01mj@584: fi mas01mj@584: mas01mj@584: eval ${prog}_name=${prog_name} mas01mj@584: eval ${prog}_vers=${prog_vers} mas01mj@584: eval ${prog}_dir=${prog_dir} mas01mj@584: mas01mj@584: PATH="$save_PATH" mas01mj@584: } mas01mj@584: mas01mj@584: mas01mj@584: check_prog_version() { mas01mj@584: prog=$1 mas01mj@584: mas01mj@584: eval min=\$${prog}_min_vers mas01mj@584: mas01mj@584: eval prog_name=\$${prog}_name mas01mj@584: eval prog_vers=\$${prog}_vers mas01mj@584: eval prog_dir=\$${prog}_dir mas01mj@584: mas01mj@584: echo "$program: $prog program '$prog_name' V $prog_vers (min $min) in $prog_dir" 1>&2 mas01mj@584: mas01mj@584: rc=1 mas01mj@584: if test $prog_vers != 0; then mas01mj@584: if expr $prog_vers '<' $min >/dev/null; then mas01mj@584: echo "$program: ERROR: \`$prog' version $prog_vers in $prog_dir is too old." mas01mj@584: echo " (version $min or newer is required)" mas01mj@584: rc=0 mas01mj@584: else mas01mj@584: # Things are ok, so set the ${prog} name mas01mj@584: eval ${prog}=${prog_name} mas01mj@584: fi mas01mj@584: else mas01mj@584: echo "$program: ERROR: You must have \`$prog' installed to compile this package." mas01mj@584: echo " (version $min or newer is required)" mas01mj@584: rc=0 mas01mj@584: fi mas01mj@584: mas01mj@584: return $rc mas01mj@584: } mas01mj@584: mas01mj@584: mas01mj@584: # Find newest version of programs in the current PATH mas01mj@584: save_args=${1+"$*"} mas01mj@584: save_ifs="$IFS" mas01mj@584: IFS=":" mas01mj@584: set - $PATH mas01mj@584: IFS="$save_ifs" mas01mj@584: mas01mj@584: echo "$program: Looking for programs: $programs" mas01mj@584: mas01mj@584: here=`pwd` mas01mj@584: while [ $# -ne 0 ] ; do mas01mj@584: dir=$1 mas01mj@584: shift mas01mj@584: if [ ! -d "$dir" ]; then mas01mj@584: continue mas01mj@584: fi mas01mj@584: mas01mj@584: for prog in $programs; do mas01mj@584: update_prog_version "$dir" $prog mas01mj@584: done mas01mj@584: done mas01mj@584: cd $here mas01mj@584: mas01mj@584: set - $save_args mas01mj@584: # END Find programs mas01mj@584: mas01mj@584: mas01mj@584: # Check the versions meet the requirements mas01mj@584: for prog in $programs; do mas01mj@584: if check_prog_version $prog; then mas01mj@584: exit 1 mas01mj@584: fi mas01mj@584: done mas01mj@584: mas01mj@584: echo "$program: Dependencies satisfied" mas01mj@584: mas01mj@584: # Delete this libtoolize- generated directory now so that it is never mas01mj@584: # considered by autogen.sh mas01mj@584: $DRURUN rm -rf libltdl mas01mj@584: mas01mj@584: config_dir= mas01mj@584: if test -d $CONFIG_DIR; then mas01mj@584: config_dir=`cd $CONFIG_DIR; pwd` mas01mj@584: fi mas01mj@584: mas01mj@584: mas01mj@584: for coin in `find $SRCDIR -name configure.ac -print` mas01mj@584: do mas01mj@584: dir=`dirname $coin` mas01mj@584: if test -f "$dir/NO-AUTO-GEN"; then mas01mj@584: echo $program: Skipping $dir -- flagged as no auto-gen mas01mj@584: else mas01mj@584: echo " " mas01mj@584: echo $program: Processing directory $dir mas01mj@584: ( cd "$dir" mas01mj@584: mas01mj@584: # Ensure that these are created by the versions on this system mas01mj@584: # (indirectly via automake) mas01mj@584: $DRYRUN rm -f ltconfig ltmain.sh libtool stamp-h* mas01mj@584: # Made by automake mas01mj@584: $DRYRUN rm -f missing depcomp mas01mj@584: # automake junk mas01mj@584: $DRYRUN rm -rf autom4te*.cache mas01mj@584: mas01mj@584: if test "X$config_dir" != X; then mas01mj@584: echo "$program: Updating config.guess and config.sub" mas01mj@584: for file in config.guess config.sub; do mas01mj@584: cfile=$config_dir/$file mas01mj@584: if test -f $cfile; then mas01mj@584: $DRYRUN rm -f $file mas01mj@584: $DRYRUN cp -p $cfile $file mas01mj@584: fi mas01mj@584: done mas01mj@584: fi mas01mj@584: mas01mj@584: echo "$program: Running $libtoolize $libtoolize_args" mas01mj@584: $DRYRUN rm -f ltmain.sh libtool mas01mj@584: eval $DRYRUN $libtoolize $libtoolize_args mas01mj@584: mas01mj@584: if grep "^GTK_DOC_CHECK" configure.ac >/dev/null; then mas01mj@584: # gtkdocize junk mas01mj@584: $DRYRUN rm -rf gtk-doc.make mas01mj@584: echo "$program: Running $gtkdocize $gtkdocize_args" mas01mj@584: $DRYRUN $gtkdocize $gtkdocize_args mas01mj@584: fi mas01mj@584: mas01mj@584: echo "$program: Running $aclocal $aclocal_args" mas01mj@584: $DRYRUN $aclocal $aclocal_args mas01mj@584: if grep "^AM_CONFIG_HEADER" configure.ac >/dev/null; then mas01mj@584: echo "$program: Running $autoheader" mas01mj@584: $DRYRUN $autoheader mas01mj@584: fi mas01mj@584: echo "$program: Running $automake $automake_args" mas01mj@584: $DRYRUN $automake $automake_args $automake_args mas01mj@584: echo "$program: Running $autoconf" mas01mj@584: $DRYRUN $autoconf $autoconf_args mas01mj@584: ) mas01mj@584: fi mas01mj@584: done mas01mj@584: mas01mj@584: mas01mj@584: rm -f config.cache mas01mj@584: mas01mj@584: AUTOMAKE=$automake mas01mj@584: AUTOCONF=$autoconf mas01mj@584: ACLOCAL=$aclocal mas01mj@584: export AUTOMAKE AUTOCONF ACLOCAL mas01mj@584: mas01mj@584: echo " " mas01mj@584: if test -z "$*"; then mas01mj@584: echo "$program: WARNING: Running \`configure' with arguments:" mas01mj@584: echo "$configure_args" mas01mj@584: echo "If you wish to pass others to it, please specify them on the" mas01mj@584: echo "\`$program' command line." mas01mj@584: fi mas01mj@584: mas01mj@584: echo "$program: Running ./configure $configure_args $@" mas01mj@584: if test "X$DRYRUN" = X; then mas01mj@584: $DRYRUN ./configure $configure_args "$@" \ mas01mj@584: && echo "$program: Now type \`make' to compile this package" || exit 1 mas01mj@584: else mas01mj@584: $DRYRUN ./configure $configure_args "$@" mas01mj@584: fi