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 23:05:52 UTC
one more version of qpid-autotools-install
I've addressed the remaining FIXME comments.
Now, if the two envvars it cares about are already set properly,
this script will print the following:
...
building/installing libtool-1.5.22.tar.gz...
done at 2006-12-14.23:00:32
Good! your PKG_CONFIG_PATH envvar is already set
Good! your PATH is fine
Otherwise, it tells you how to set them.
Another change: now, it puts everything in a directory named
.build-auto-tools, in the current working directory.
That makes it easier to clean up once you're done.
Before, you'd end up with two files and a directory for
each package.
#######################################
#!/bin/sh
# Written by Jim Meyering
VERSION='2006-12-14 22:01' # 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/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';;
*)
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
## 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: one more version of qpid-autotools-install
Posted by Alan Conway <ac...@redhat.com>.
We most definitely do! Kim can you do it? Make sure to credit Jim on the
commit comment.
On Fri, 2006-12-15 at 10:24 -0500, Kim van der Riet wrote:
> Do you want this checked in at some point?
>
> Kim
> On Fri, 2006-12-15 at 15:34 +0100, Jim Meyering wrote:
> > Kim van der Riet <ki...@redhat.com> wrote:
> > > Works perfectly - thanks Jim!
> >
> > Thanks for letting me (and others!) know.
>
>
Re: one more version of qpid-autotools-install
Posted by Kim van der Riet <ki...@redhat.com>.
Do you want this checked in at some point?
Kim
On Fri, 2006-12-15 at 15:34 +0100, Jim Meyering wrote:
> Kim van der Riet <ki...@redhat.com> wrote:
> > Works perfectly - thanks Jim!
>
> Thanks for letting me (and others!) know.
Re: one more version of qpid-autotools-install
Posted by Jim Meyering <ji...@meyering.net>.
Kim van der Riet <ki...@redhat.com> wrote:
> Works perfectly - thanks Jim!
Thanks for letting me (and others!) know.
> On Thu, 2006-12-14 at 23:05 +0100, Jim Meyering wrote:
>> I've addressed the remaining FIXME comments.
>> Now, if the two envvars it cares about are already set properly,
>> this script will print the following:
>>
>> ...
>> building/installing libtool-1.5.22.tar.gz...
>> done at 2006-12-14.23:00:32
>> Good! your PKG_CONFIG_PATH envvar is already set
>> Good! your PATH is fine
>>
>> Otherwise, it tells you how to set them.
> My path is $HOME/bin:$HOME/qpid-tools/bin:$PATH, but I still got the
> PATH message - (a minor nit).
Yes, it skips the PATH suggestion only when "$prefix/bin" is
at the front of your $PATH. It can't know whether you have
installed autoconf, automake, etc. in your $HOME/bin.
Well, it _could_ figure it out, but it's not worth the trouble
just to skip a friendly suggestion :-)
>> Another change: now, it puts everything in a directory named
>> .build-auto-tools, in the current working directory.
>> That makes it easier to clean up once you're done.
>> Before, you'd end up with two files and a directory for
>> each package.
>
> Perhaps a parting message to the unsuspecting that if they want to clean
> up, that they can delete the hidden directory .build-auto-tools?
Sure.
Re: one more version of qpid-autotools-install
Posted by Kim van der Riet <ki...@redhat.com>.
Works perfectly - thanks Jim!
On Thu, 2006-12-14 at 23:05 +0100, Jim Meyering wrote:
> I've addressed the remaining FIXME comments.
> Now, if the two envvars it cares about are already set properly,
> this script will print the following:
>
> ...
> building/installing libtool-1.5.22.tar.gz...
> done at 2006-12-14.23:00:32
> Good! your PKG_CONFIG_PATH envvar is already set
> Good! your PATH is fine
>
> Otherwise, it tells you how to set them.
My path is $HOME/bin:$HOME/qpid-tools/bin:$PATH, but I still got the
PATH message - (a minor nit).
> Another change: now, it puts everything in a directory named
> .build-auto-tools, in the current working directory.
> That makes it easier to clean up once you're done.
> Before, you'd end up with two files and a directory for
> each package.
Perhaps a parting message to the unsuspecting that if they want to clean
up, that they can delete the hidden directory .build-auto-tools?
Kim