summaryrefslogtreecommitdiff
path: root/cpp/qpid-autotools-install
blob: dcd1c939027dc3883f6c92003f8e7aa6a3c879be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#!/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: