[parted-devel] Problems in configure script.

Jim Meyering jim at meyering.net
Fri Mar 2 23:16:36 CET 2007


Otavio Salvador <otavio at debian.org> wrote:

> "Debarshi 'Rishi' Ray" <debarshi.ray at gmail.com> writes:
>
>> When I do:
>> $ ./configure --without-readline
>> ...
>> ...
>> ./configure: line 35341: syntax error near unexpected token `CHECK,'
>> ./configure: line 35341: `PKG_CHECK_MODULES(CHECK, check >= 0.9.3,
>> have_check=yes, have_check=no)'
>>
>> This is problem is not there when I use the system's M4 1.4.,
>> .Autoconf 2.59 and Automake 1.9.6 in /usr with the configure script
>> generated by an older snapshot Parted. The PKG_CHECK_MODULES code has
>> not changed from the older configure.ac, so the problem is elsewhere.
>> Is it because the PKG_CHECK_MODULES macro is missing in the vanilla M4
>> 1.4.8, Autoconf 2.61 and Automake 1.10 installed in my $HOME?
>>
>> Am I making a mistake?
>
> Yes I think it's due your handcompiled autoconf lacking the macro. Jim?

Yes.  If you also install pkg-config into your $HOME,
that should fix it:

  http://pkgconfig.freedesktop.org/releases/pkg-config-0.21.tar.gz

Yep, this is all a pain, but once it's set up, it just works.

Here's a script that should help:

    Usage: ./install-autotools [OPTION]...
    Download, build, and install some tools.

    Options:
     --prefix=PREFIX    install tools under specified directory
     --skip-check       do not run make check (this can save 50+ min)
     --help             display this help and exit

    For example, to install programs into $HOME/autotools/bin, run this command:

      install-autotools --prefix=$HOME/autotools

    If you've already verified that your system/environment can build working
    versions of these tools, you can make this script complete in just a
    minute or two (rather than about an hour if you let all make check
    tests run) by invoking it like this:

      install-autotools --prefix=$HOME/autotools --skip-check

-------------- next part --------------
#!/bin/sh
# Written by Jim Meyering

VERSION='2007-03-01 22:29' # UTC

prog_name=`basename $0`
die () { echo "$prog_name: $*" >&2; exit 1; }

tarballs='
  http://pkgconfig.freedesktop.org/releases/pkg-config-0.21.tar.gz
  ftp://ftp.gnu.org/gnu/m4/m4-1.4.8.tar.gz
  ftp://ftp.gnu.org/gnu/automake/automake-1.10.tar.gz
  ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.61.tar.gz
  ftp://ftp.gnu.org/gnu/libtool/libtool-1.5.22.tar.gz
'

usage() {
  echo >&2 "\
Usage: $0 [OPTION]...
Download, build, and install some tools.

Options:
 --prefix=PREFIX    install tools under specified directory
 --skip-check       do not run "make check" (this can save 50+ min)
 --help             display this help and exit

For example, to install programs into \$HOME/autotools/bin, run this command:

  $prog_name --prefix=\$HOME/autotools

If you've already verified that your system/environment can build working
versions of these tools, you can make this script complete in just a
minute or two (rather than about an hour if you let all "make check"
tests run) by invoking it like this:

  $prog_name --prefix=\$HOME/autotools --skip-check

"
}

# Get the listed tarballs into the current directory.
get_sources()
{
  case `wget --help` in
    *'--no-cache'*)
      WGET_COMMAND='wget -nv --no-cache';;
    *'--cache=on/off'*)
      WGET_COMMAND='wget -nv --cache=off';;
    *'--non-verbose'*)
      WGET_COMMAND='wget -nv';;
    *)
      die 'no wget program found; please install it and try again';;
  esac

  # Download the each tar-ball along with its signature, if there is one.
  pkgs=
  for t in $(echo $tarballs); do
    base=$(basename $t)
    pkgs="$pkgs $base"
    test -f $base     || $WGET_COMMAND $t

    # pkg-config has no .sig file.
    case $base in pkg-config*) continue;; esac

    test -f $base.sig || $WGET_COMMAND $t.sig
    # Verify each signature.
    gpg --quiet --verify --trust-model=always   \
        --trusted-key=32419B785D0CDCFC          \
        --trusted-key=3859C03B2E236E47          \
        --trusted-key=B93F60C6B5C4CE13          \
        --trusted-key=F382AE19F4850180          \
        $base.sig > /dev/null 2>&1              \
      || echo "info: not verifying GPG signature for $base" 1>&2
  done

  printf 'verifying package SHA1 checksums...' 1>&2
  sha1sum -c --warn --status <<EOF || die "checksum mismatch"
69f37c509a4757d747b6f4c091d209ab3984d62f  autoconf-2.61.tar.gz
69dc02b083b9a609b28fc4db129fef6a83ed2339  automake-1.10.tar.gz
17353e66aeaac80ae188ea0a3a90609550ce3254  libtool-1.5.22.tar.gz
32b5bb526de9315d1a319c2ca8eb881d9b835506  m4-1.4.8.tar.gz
b2508ba8404cad46ec42f6f58cbca43ae59d715f  pkg-config-0.21.tar.gz
EOF
  printf 'ok\n' 1>&2
  echo $pkgs
}

#################################################################
set -e

# Parse options.

make_check=yes
prefix=

for option
do
  case $option in
    --help) usage; exit;;
    --skip-check) make_check=no;;
    --prefix=*) prefix=`expr "$option" : '--prefix=\(.*\)'`;;
    *) die "$option: unknown option";;
  esac
done

test -n "$prefix" \
  || die "you must specify a --prefix"

case $prefix in
  /*) ;;
  *) die 'invalid prefix: '"$prefix"': it must be an absolute name';;
esac

# Don't run as root.
# Make sure id -u succeeds.
my_uid=`id -u`
test $? = 0 || {
  echo "$0: cannot run \`id -u'" 1>&2
  (exit 1); exit 1
}
test $my_uid = 0 && die "please don't run this program as root"

# Ensure that prefix is not /usr/bin or /bin, /sbin, etc.
case $prefix in
  /bin|/sbin|/usr/bin|/usr/sbin)
    die "don't set PREFIX to a system directory";;
  *) ;;
esac

# Create a build directory, then cd into it for the rest....
tmpdir=.build-auto-tools
mkdir -p $tmpdir
cd $tmpdir

pkgs=$(get_sources)

for pkg in $pkgs; do
  echo building/installing $pkg...
  dir=$(basename $pkg .tar.gz)
  rm -rf dir
  gzip -dc $pkg|tar xf -
  cd $dir
  ./configure CFLAGS=-O2 LDFLAGS=-s --prefix=$prefix    > makerr-config  2>&1
  make -j1                                              > makerr-build   2>&1
  if test "$make_check" = yes; then
    case $pkg in
      automake*) expected_duration_minutes=40;;
      autoconf*) expected_duration_minutes=15;;
      # libtool*) expected_duration_minutes=3;;
      *);;
    esac
    test -n "$expected_duration_minutes" \
      && echo "running 'make check' for $pkg; NB: this can take over" \
              "$expected_duration_minutes minutes"
    case $pkg in
      # In this package, the check-requires-private test fails.
      # Change the Makefile so it skips that test.
      pkg-config-0.21.tar.gz)
        perl -pi.bak -e 's/check-requires-private //' check/Makefile;;

    esac
    make -j1 check                                      > makerr-check   2>&1
  fi
  make -j1 install                                      > makerr-install 2>&1
  echo done at $(date +%Y-%m-%d.%T)
  cd ..
done

# Without checks (and with existing tarballs), it takes just one minute.
# Including all checks, it takes nearly an hour on an AMD64/3400+

case $PKG_CONFIG_PATH in
  $prefix/lib/pkgconfig:/usr/lib/pkgconfig)
    echo 'Good! your PKG_CONFIG_PATH envvar is already set';;
  *) cat <<EOF;;
**************************************************************************
Be sure that PKG_CONFIG_PATH is set in your environment, e.g.,
PKG_CONFIG_PATH=$prefix/lib/pkgconfig:/usr/lib/pkgconfig
**************************************************************************
EOF
esac

case $PATH in
  "$prefix/bin:"*) echo 'Good! your PATH is fine';;
  *) cat <<EOF;;
**************************************************************************
Be sure that "$prefix/bin" is earlier in your PATH than /bin, /usr/bin, etc.
**************************************************************************
EOF
esac

cat <<EOF
**************************************************************************
You may want to remove the tool build directory:
rm -rf $tmpdir
**************************************************************************
EOF

## Local Variables:
## eval: (add-hook 'write-file-hooks 'time-stamp)
## time-stamp-start: "VERSION='"
## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
## time-stamp-time-zone: "UTC"
## time-stamp-end: "' # UTC"
## End:


More information about the parted-devel mailing list