| #!/bin/sh |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| |
| # Written by Jim Meyering |
| |
| VERSION='2007-07-10 09:09' # 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.10.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.24.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 |
| b4c994f1bf4a76d2b0c1d0a6f54d16598c15f3db libtool-1.5.24.tar.gz |
| 26d47c893722d683308f5d9fc172a11d5b2ad8a9 m4-1.4.10.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: |