You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by Jim Meyering <ji...@meyering.net> on 2006/12/14 18:25:53 UTC

a new version of qpid-autotools-install

In case anyone is still having trouble with auto*tools,
here's one more iteration on the script to build/install them.

The latest change is to work around the failing "make check" for pkg-config.

###############################################################
#!/bin/sh
# Written by Jim Meyering

VERSION='2006-12-14 17:22' # UTC

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

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/qpid-tools/bin, run this command:

  $prog_name --prefix=$HOME/qpid-tools

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/qpid-tools --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';;
    *)
      WGET_COMMAND='';;
  esac

  # FIXME handle case of no WGET

  # Download the following, each along with its signature.
  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
  '
  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"

# 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

# Verify $prefix, e.g., to ensure that $prefix/bin is earlier in PATH than
# /bin, /usr/bin, /usr/local/bin.
# FIXME

# FIXME: create temp directory, named e.g., .build-auto-tools
# then cd into it for the rest....

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);;
  *) 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

cat <<EOF
**************************************************************************
Be sure that "$prefix/bin" is earlier in your PATH than /bin, /usr/bin, etc.
**************************************************************************
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:

Re: a new version of qpid-autotools-install

Posted by Jim Meyering <ji...@meyering.net>.
Kim van der Riet <ki...@redhat.com> wrote:
> I was helping carl. This time it was the lack of an absolute path for
> --prefix. (we had used ~/qpid-tools). Sorted out now.

Thanks.  I've changed the script so now it fails if $prefix is
not an absolute name.

Re: a new version of qpid-autotools-install

Posted by Kim van der Riet <ki...@redhat.com>.
I was helping carl. This time it was the lack of an absolute path for
--prefix. (we had used ~/qpid-tools). Sorted out now.

Kim
On Thu, 2006-12-14 at 22:09 +0100, Jim Meyering wrote:
> Carl Trieloff <cc...@redhat.com> wrote:
> > This fails with make check on FC5
> 
> Thanks for the feedback.
> Which one?   pkg-config again?
> 
> I'm about to give up on pkg-config and remove it altogether.
> It's given us nothing but pain.
> But it's ironic that the worst part of the config-etc tool chain
> is used solely to check for the APR libraries, which are supposed
> to be on the way out.  Sigh.
> 
> I was hesitant to spend more time on apr-related stuff, but
> now I'm afraid it's required.
> 
> > Jim Meyering wrote:
> >> In case anyone is still having trouble with auto*tools,
> >> here's one more iteration on the script to build/install them.
> >>
> >> The latest change is to work around the failing "make check" for pkg-config.


Re: a new version of qpid-autotools-install

Posted by Jim Meyering <ji...@meyering.net>.
Carl Trieloff <cc...@redhat.com> wrote:
> This fails with make check on FC5

Thanks for the feedback.
Which one?   pkg-config again?

I'm about to give up on pkg-config and remove it altogether.
It's given us nothing but pain.
But it's ironic that the worst part of the config-etc tool chain
is used solely to check for the APR libraries, which are supposed
to be on the way out.  Sigh.

I was hesitant to spend more time on apr-related stuff, but
now I'm afraid it's required.

> Jim Meyering wrote:
>> In case anyone is still having trouble with auto*tools,
>> here's one more iteration on the script to build/install them.
>>
>> The latest change is to work around the failing "make check" for pkg-config.

Re: a new version of qpid-autotools-install

Posted by Carl Trieloff <cc...@redhat.com>.
This fails with make check on FC5

Carl.


Jim Meyering wrote:
> In case anyone is still having trouble with auto*tools,
> here's one more iteration on the script to build/install them.
>
> The latest change is to work around the failing "make check" for pkg-config.
>
> ###############################################################
> #!/bin/sh
> # Written by Jim Meyering
>
> VERSION='2006-12-14 17:22' # UTC
>
> prog_name=`basename $0`
> die () { echo "$prog_name: $*" >&2; exit 1; }
>
> 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/qpid-tools/bin, run this command:
>
>   $prog_name --prefix=$HOME/qpid-tools
>
> 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/qpid-tools --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';;
>     *)
>       WGET_COMMAND='';;
>   esac
>
>   # FIXME handle case of no WGET
>
>   # Download the following, each along with its signature.
>   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
>   '
>   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"
>
> # 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
>
> # Verify $prefix, e.g., to ensure that $prefix/bin is earlier in PATH than
> # /bin, /usr/bin, /usr/local/bin.
> # FIXME
>
> # FIXME: create temp directory, named e.g., .build-auto-tools
> # then cd into it for the rest....
>
> 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);;
>   *) 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
>
> cat <<EOF
> **************************************************************************
> Be sure that "$prefix/bin" is earlier in your PATH than /bin, /usr/bin, etc.
> **************************************************************************
> 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:
>