File: build_nmh

package info (click to toggle)
nmh 1.6-2
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 6,204 kB
  • ctags: 3,851
  • sloc: ansic: 48,922; sh: 16,422; makefile: 559; perl: 509; lex: 402; awk: 74
file content (329 lines) | stat: -rwxr-xr-x 9,339 bytes parent folder | download | duplicates (2)
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
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
#! /bin/sh
#
# Configures and builds nmh.
# * This script must be invoked from an nmh source directory.
# * This script retrieves configuration from the first existing nmh
#   installation on your $PATH, if any.
# * Unless the -y option is provided, this script then interactively
#   walks you through confirmation of common configuration settings.
#
# Typical usage:
# The first time you invoke this script, use the -i option to install
# nmh in the specified location.  The script will walk you through the
# common nmh configuration settings.  The -v option will cause display
# of brief progress indicators.  Be sure to add the bin directory of
# the install location to your $PATH, if not already there.
# Subsequently, invoke this script with the -y option, to use the
# relevant configuration settings from the installed nmh without
# confirmation.
#
# Option summary:
#   First time use:
#     -i to install nmh
#     -v to display progress
#   Subsequent uses, assuming installed nmh bin directory is on $PATH:
#     -y to accept all configuration options without confirmation
#   Output control:
#     -l <logfile name>, default 'build_nmh.log'
#   Advanced/developer use:
#     -c to run 'make distcheck' instead of 'make check'
#     -d to build nmh with debug enabled
#     -s to use 'make superclean': requires recent autoconf and automake,
#        see docs/README.developers
#     -r to build rpm
#
# On Fedora, at least these rpms must be installed:
#   gdbm-devel
#   ncurses-devel
#   cyrus-sasl-devel, if using sasl
#   openssl-devel, if using TLS
#   autoconf and automake, with -s (see docs/README.developers for versions)
#   rpm-build, with -r


####
#### Interpret command arguments.
####
check=check
debug=0
install=0
logfile=build_nmh.log
build_rpm=0
superclean=0
verbose=0
yes=0
usage="usage: $0
  [-c to run 'make distcheck' instead of 'make check']
  [-d to build nmh with debug enabled]
  [-i to install nmh]
  [-l <logfile name>, default '$logfile']
  [-r to build rpm]
  [-s to use 'make superclean': requires recent autoconf and automake]
  [-v to display progress]
  [-y to accept all configuration options without confirmation]"

while getopts 'cdil:rsvy?' arg; do
  case $arg in
    c  ) check=distcheck ;;
    d  ) debug=1 ;;
    i  ) install=1 ;;
    l  ) logfile=$OPTARG ;;
    r  ) build_rpm=1 ;;
    s  ) superclean=1 ;;
    v  ) verbose=1 ;;
    y  ) yes=1 ;;
    '?') echo "$usage"; exit 0 ;;
  esac
done
shift `expr $OPTIND - 1`

#### No command line arguments are supported.
if [ $# -gt 0 ]; then
  echo "usage: $0"
  exit 1
fi

#### Check to see that we're in a nmh source directory.
if grep 'the authors of nmh' COPYRIGHT >/dev/null; then
  :
else
  echo "$0: not in nmh source directory"
  exit 1
fi

####
#### Set up configure options.  Handle options that can have embedded
#### spaces (currently just smtpservers) specially.
####

#### Here are the config options that we will try to detect, then
#### confirm, and finally set.
config_prefix=/usr/local/nmh
config_locking=
config_mts=smtp
config_smtpservers=localhost
config_sasl=n
config_tls=n
config_debug=n


#### Find location of a program.  Bourne shell just puts the name in
#### $0 if it's found from the PATH, so search that if necessary.
finddir() {
  case $1 in
    */*) dirname "$1" ;;
    *  ) IFS=:
         for d in $PATH; do
           [ -f "${d:=.}/$1"  -a  -x "$d/$1" ]  &&  printf %s "$d"  &&  break
         done ;;
  esac
}

#### Figure out whether or not to use -n with tail.
case `printf 'OK\n' | tail -n 1 2>&1` in
  OK) tail='tail -n ' ;;
  *)  tail='tail -' ;;
esac

if install-mh -check >/dev/null 2>&1; then
  # Determine config options from installed nmh.
  mhbin=`finddir install-mh`

  config_prefix=`cd $mhbin/.. && pwd`

  mtsconf=`dirname "$mhbin"`/etc/mts.conf
  if [ -f "$mtsconf" ]; then
    mts_entry=`grep '^mts:' "$mtsconf"`
    if [ "$mts_entry" ]; then
      mts=`echo "$mts_entry" | sed -e 's/^mts: *//'`
      if [ "$mts"  -a  "$mts" != smtp ]; then
        config_mts="$mts"
      fi
    fi

    mtsconfservers=`grep '^servers:' "$mtsconf"`
    if [ "$mtsconfservers" ]; then
      servers=`echo "$mtsconfservers" | \
               sed -e 's/^servers: *//' -e 's/ /\\\ /g'`
      [ "$servers" ]  &&  config_smtpservers="$servers"
    fi
  fi

  if test -x "$mhbin/mhparam"; then
    if mhparam sasl >/dev/null; then
      case `$mhbin/mhparam sasl` in
        *sasl*) config_sasl=y ;;
      esac

      case `$mhbin/mhparam tls` in
        *tls*) config_tls=y ;;
      esac
    else
      tput smso
      echo "$0: SASL and TLS detection not supported with current nmh"
      [ $yes -eq 1 ]  &&  echo "will not configure either one in"
      tput rmso
    fi
  fi
fi

[ $debug -ge 1 ]  &&  config_debug=y

if [ $yes -eq 0 ]; then
  #### Confirm each config setting with user.
  printf 'Install prefix [%s]: ' $config_prefix
  read prefix
  [ "$prefix" ]  &&  config_prefix="$prefix"

  printf 'Locking type (dot|fcntl|flock|lockf) [determined by configure]: '
  read locking
  [ "$locking" ]  &&  config_locking="$locking"

  printf 'MTS (smtp|sendmail/smtp|sendmail/pipe) [%s]: ' $config_mts
  read mts
  [ "$mts" ]  &&  config_mts="$mts"

  if [ "$config_mts" = smtp ]; then
    printf 'SMTP server(s), space separated [%s]: ' $config_smtpservers
    read response
    servers=`echo $response | sed -e 's/ /\\\ /g'`
    [ "$servers" ]  &&  config_smtpservers="$servers"
  fi

  printf 'Cyrus SASL support [%s]: ' $config_sasl
  read response
  if [ "$response" = y  -o  "$response" = Y ]; then
    config_sasl=y
  elif [ "$response" = n  -o  "$response" = N ]; then
    config_sasl=n
  fi

  printf 'TLS support [%s]: ' $config_tls
  read response
  if [ "$response" = y  -o  "$response" = Y ]; then
    config_tls=y
  elif [ "$response" = n  -o  "$response" = N ]; then
    config_tls=n
  fi

  #### Don't confirm debug here:  obey the -d option to this script.
fi

smtpservers=
config_opts="--prefix=$config_prefix"

[ "$config_locking" ]  &&  \
  config_opts="$config_opts --with-locking=$config_locking"
[ "$config_mts"  -a  "$config_mts" != smtp ]  &&  \
  config_opts="$config_opts --with-mts=$config_mts"
[ "$config_smtpservers"  -a  "$config_smtpservers" != localhost ]  &&  \
  smtpservers="--with-smtpservers=$config_smtpservers"
[ "$config_sasl" = y ]  &&  \
  config_opts="$config_opts --with-cyrus-sasl"
[ "$config_tls" = y ]  &&  \
  config_opts="$config_opts --with-tls"
[ $config_debug = y ]  &&  \
  config_opts="$config_opts --enable-debug --enable-assert"


#### dotlocking, the usual default, requires chgrp and chmod of inc.
installpriv=
if [ $install -ge 1  -a  `id -u` -ne 0 ]; then
  if [ "$config_locking" = dot ]; then
    echo "$0: "'install requires chgrp and chmod 2755'
    echo 'so will sudo to install.  Terminate with Ctrl-C if unacceptable.'
    installpriv=sudo
  fi
fi


####
#### Clean up, and set up with autoconfig if necessary.
####
if [ -f Makefile ]; then
  [ $verbose -ge 1 ]  &&  echo cleaning . . .
  if [ $superclean -ge 1 ]; then
    make superclean >/dev/null
  else
    make distclean >/dev/null
  fi
fi

/bin/rm -f "$logfile"
if [ -f configure  -a  -f Makefile.in ]; then
  :
else
  [ $verbose -ge 1 ]  &&  echo autoconfiguring . . .
  ./autogen.sh >>"$logfile" 2>&1
fi


####
#### Build.
####
[ $verbose -ge 1 ]  &&  echo configuring . . .
echo ./configure $config_opts ${smtpservers:+"$smtpservers"} >>"$logfile" 2>&1
./configure $config_opts ${smtpservers:+"$smtpservers"} >>"$logfile" 2>&1
status=$?

if [ $status -eq 0 ]; then
  [ $verbose -ge 1 ]  &&  echo building . . .
  make >>"$logfile" 2>&1
  status=$?

  if [ $status -eq 0 ]; then
    if [ "$TESTS_SHELL"x = x ]; then
      #### Bonus:  use heirloom shell to test, if available, and if
      #### TESTS_SHELL hadn't already been set.
      heirloom_shell=/usr/lib/heirloom/5bin/sh
      if [ -x "$heirloom_shell" ]; then
        TESTS_SHELL="$heirloom_shell"; export TESTS_SHELL
      fi
   fi

    [ $verbose -ge 1 ]  &&  echo testing . . .
    checkoutput=`make $check AM_COLOR_TESTS=always 2>>"$logfile"`
    status=$?

    tests_summary=`echo "$checkoutput" | grep tests`
    #### If multiple tests not run, that line will be caught by the
    #### "grep tests" above.
    test_not_run=`echo "$checkoutput" | grep 'test was not run'`
    fails=`echo "$checkoutput" | grep FAIL`
    if [ "$tests_summary" ]; then
      echo '===================' >>"$logfile"
      [ "$test_not_run" ]  &&  echo "$test_not_run" >>"$logfile"
      [ "$fails" ]  &&  echo "$fails" >>"$logfile"
      echo "$tests_summary" >>"$logfile"
      echo '===================' >>"$logfile"
      [ "$check" = distcheck ]  &&  \
        echo "$checkoutput" | ${tail}4 >>"$logfile"
    fi

    if [ $status -eq 0 ]; then
      if [ $install -ge 1 ]; then
        [ $verbose -ge 1 ]  &&  echo installing . . .
        ($installpriv make install) >/dev/null 2>>"$logfile"
        status=$?
      fi

      if [ $status -eq 0  -a  $build_rpm -ge 1 ]; then
        [ $verbose -ge 1 ]  &&  echo building rpm . . .
        make rpm >/dev/null 2>>"$logfile"
        status=$?
      fi
    fi
  fi
fi

grep Error "$logfile"
grep warn "$logfile"

if [ $status -eq 0 ]; then
  [ $verbose -ge 1 ]  &&  echo build completed successfully
else
  echo build failed!
  echo build log is in "$logfile"
fi

exit $status