bootstrap 13.1 KB
Newer Older
1
2
#! /bin/sh

3
##  bootstrap file for the VLC media player
4
##  $Id: bootstrap,v 1.63 2003/07/04 13:53:06 sam Exp $
5
##
Sam Hocevar's avatar
Sam Hocevar committed
6
##  Authors: Sam Hocevar <sam@zoy.org>
7

Sam Hocevar's avatar
Sam Hocevar committed
8
9
10
11
if test "$#" != "0"; then
  echo "Usage: $0"
  echo "  Calls automake, autoconf, autoheader, autopoint and other auto* to generate"
  echo "  m4 macros and prepare Makefiles."
12
13
14
  exit 1
fi

15
###
16
###  Get a sane environment, just in case
17
###
18
19
LANG=C
export LANG
20
21
CYGWIN=binmode
export CYGWIN
22

23
##
24
## Naively assume our system doesn't suck. Unfortunately it seldom doesn't.
25
##
26
27
AUTOMAKESUCKS=no
INSTALLSUCKS=no
28

29
30
31
##
## Check that our tools don't suck
##
32

33
34
35
36
##
## Generate the modules makefile, by parsing modules/**/Modules.am
##

Sam Hocevar's avatar
Sam Hocevar committed
37
printf "generating modules/**/Makefile.am and m4/private.m4"
38

Sam Hocevar's avatar
Sam Hocevar committed
39
# Prepare m4/private.m4
Sam Hocevar's avatar
Sam Hocevar committed
40
rm -f m4/private.m4 && cat > m4/private.m4 << EOF
41
dnl  Private VLC macros - generated by bootstrap
42
43

EOF
Sam Hocevar's avatar
Sam Hocevar committed
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
rm -f m4/private.m4-tmp1 && cat > m4/private.m4-tmp1 << EOF
dnl  The required AM_CONDITIONAL calls
dnl  XXX: too many conditionals make the build very slow, disabled them
AC_DEFUN([AX_VLC_CONDITIONALS], [
EOF
rm -f m4/private.m4-tmp2 && cat > m4/private.m4-tmp2 << EOF
dnl  The required AC_SUBST calls
AC_DEFUN([AX_VLC_SUBSTS], [
EOF
rm -f m4/private.m4-tmp3 && cat > m4/private.m4-tmp3 << EOF
dnl  The required AC_OUTPUT calls
dnl  XXX: this feature is only supported starting from automake-1.7
AC_DEFUN([AX_VLC_MAKEFILES], [AC_OUTPUT([
EOF
rm -f m4/private.m4-tmp4 && cat > m4/private.m4-tmp4 << EOF
dnl  Helper macro for vlc-config generation
AC_DEFUN([AX_VLC_CONFIG_HELPER], [
  cat >> vlc-config.in << BLAH
EOF
63
64

modules=""
Sam Hocevar's avatar
Sam Hocevar committed
65
count=0
66

Sam Hocevar's avatar
Sam Hocevar committed
67
68
69
rm -f modules/Makefile.am && cat > modules/Makefile.am << EOF
# Autogenerated by bootstrap - DO NOT EDIT
EXTRA_DIST = LIST
Sam Hocevar's avatar
Sam Hocevar committed
70
71
SUBDIRS = `sed -ne 's,modules/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`
#DIST_SUBDIRS = \$(SUBDIRS)
Sam Hocevar's avatar
Sam Hocevar committed
72
EOF
73

Sam Hocevar's avatar
Sam Hocevar committed
74
for dir in `sed -ne 's,modules/\(.*\)/Makefile,\1,p' configure.ac`
Sam Hocevar's avatar
Sam Hocevar committed
75
76
do
  printf "."
Sam Hocevar's avatar
Sam Hocevar committed
77
78
  mf="modules/${dir}/Modules.am"
  basedir="`echo ${dir} | cut -f1 -d/`"
Sam Hocevar's avatar
Sam Hocevar committed
79
  # automake will not recurse for make dist if we don't define SUBDIRS = .
Sam Hocevar's avatar
Sam Hocevar committed
80
  subdirs="`sed -ne 's,'modules/${dir}'/\([^/]*\)/Makefile,\1,p' configure.ac | xargs`"
Sam Hocevar's avatar
Sam Hocevar committed
81
  #parent=`echo ${dir} | sed -e 's@[^/]*@..@g'`
Sam Hocevar's avatar
Sam Hocevar committed
82
83
  #echo "  modules/${dir}/Makefile" >> m4/private.m4-tmp3
  rm -f modules/${dir}/Makefile.am && cat > modules/${dir}/Makefile.am << EOF
Sam Hocevar's avatar
Sam Hocevar committed
84
85
86
87
88
89
90
91
92

# Autogenerated by bootstrap - DO NOT EDIT - edit Modules.am instead

NULL =
libvlc_LIBRARIES =
noinst_LIBRARIES =
noinst_HEADERS =
EXTRA_DIST = Modules.am
BUILT_SOURCES =
Sam Hocevar's avatar
Sam Hocevar committed
93
94
SUBDIRS = ${subdirs}
#DIST_SUBDIRS = \$(SUBDIRS)
Sam Hocevar's avatar
Sam Hocevar committed
95
96
libvlcdir = \$(libdir)/vlc/${basedir}
include Modules.am
Sam Hocevar's avatar
Sam Hocevar committed
97
98
99
100

clean:
	rm -f *.a *.so *.dll *.sl *.dylib

101
EOF
Sam Hocevar's avatar
Sam Hocevar committed
102
  for mod in `sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf}`
103
  do
Sam Hocevar's avatar
Sam Hocevar committed
104
    count="`expr ${count} + 1`"
105
106
107
108
109
110
    if grep '^SOURCES_'${mod}'.*=.*PRIVATE' < ${mf} >/dev/null 2>&1; then
        PRIVATE='#'; else
        PRIVATE=''; fi
    if grep '^nodist_SOURCES_'${mod}'' < ${mf} >/dev/null 2>&1; then
        NODIST=''; else
        NODIST='#'; fi
Sam Hocevar's avatar
Sam Hocevar committed
111
112
113
114
115
116
#    cat >> m4/private.m4-tmp1 << EOF
#dnl  AM_CONDITIONAL(${mod}_p, test x\$${mod}_p = xyes)
#dnl  AM_CONDITIONAL(${mod}_b, test x\$${mod}_b = xyes)
#EOF
    cat >> m4/private.m4-tmp4 << EOF
    ${mod}) list="\\\${list} ${dir}/lib${mod}" ;;
117
EOF
Sam Hocevar's avatar
Sam Hocevar committed
118
119
# Generation of modules/**/Makefile.am
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
120
121
122
# - L_ is for LIBRARIES_, D_ for DATA_, B_ for BUILT_SOURCES_, F_ for LDFLAGS_,
#   S_ for SOURCES_, _p is for _plugin, _b is for _builtin. This is to reduce
#   the resulting file size.
Sam Hocevar's avatar
Sam Hocevar committed
123
124
# - *_CFLAGS, *_CXXFLAGS etc. because per-object CPPFLAGS does not seem to
#   work properly with any automake version I tested.
Sam Hocevar's avatar
Sam Hocevar committed
125
    cat >> modules/${dir}/Makefile.am << EOF
126
127
# The ${mod} plugin

Sam Hocevar's avatar
Sam Hocevar committed
128
129
130
all: all-${mod}

all-${mod}:
131
if BUILD_MOZILLA
132
133
134
135
136
137
138
139
140
141
142
143
144
145
	@set fnord \$\$MAKEFLAGS; amf=\$\$2; \\
	if test "\$(plugin)" != "no" \\
	    && \$(VLC_CONFIG) --target plugin | grep "${dir}/lib${mod}_plugin" >/dev/null 2>&1; then \\
	  \$(MAKE) \$(AM_MAKEFLAGS) lib${mod}_plugin\$(LIBEXT) || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \\
	fi; \\
	if test "\$(builtin)" != "no" \\
	    && \$(VLC_CONFIG) --target builtin | grep "${dir}/lib${mod}\\.a" >/dev/null 2>&1; then \\
	  \$(MAKE) \$(AM_MAKEFLAGS) lib${mod}.a || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \\
	fi; \\
	if test "\$(pic)" != "no" \\
	    && \$(VLC_CONFIG) --target builtin pic | grep "${dir}/lib${mod}_pic\\.a" >/dev/null 2>&1; then \\
	  \$(MAKE) \$(AM_MAKEFLAGS) lib${mod}_pic.a || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \\
	fi; \\
	test -z "\$\$fail"
146
else
147
148
149
150
151
152
153
154
155
156
	@set fnord \$\$MAKEFLAGS; amf=\$\$2; \\
	if test "\$(plugin)" != "no" \\
	    && \$(VLC_CONFIG) --target plugin | grep "${dir}/lib${mod}_plugin" >/dev/null 2>&1; then \\
	  \$(MAKE) \$(AM_MAKEFLAGS) lib${mod}_plugin\$(LIBEXT) || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \\
	fi; \\
	if test "\$(builtin)" != "no" \\
	    && \$(VLC_CONFIG) --target builtin | grep "${dir}/lib${mod}\\.a" >/dev/null 2>&1; then \\
	  \$(MAKE) \$(AM_MAKEFLAGS) lib${mod}.a || case "\$\$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \\
	fi; \\
	test -z "\$\$fail"
Sam Hocevar's avatar
Sam Hocevar committed
157
158
endif

159
if UNTRUE
Sam Hocevar's avatar
Sam Hocevar committed
160
161
162
163
164
L${count}p = lib${mod}_plugin.a
D${count}p = lib${mod}_plugin\$(LIBEXT)
L${count}b = lib${mod}.a
L${count}pic = lib${mod}_pic.a
EOF
Sam Hocevar's avatar
Sam Hocevar committed
165
    if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
Sam Hocevar's avatar
Sam Hocevar committed
166
167
168
169
B${count}p = \$(nodist_SOURCES_${mod})
B${count}b = \$(nodist_SOURCES_${mod})
EOF
    fi
Sam Hocevar's avatar
Sam Hocevar committed
170
    cat >> modules/${dir}/Makefile.am << EOF
171
172
endif

Sam Hocevar's avatar
Sam Hocevar committed
173
EOF
Sam Hocevar's avatar
Sam Hocevar committed
174
    if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
Sam Hocevar's avatar
Sam Hocevar committed
175
176
177
${PRIVATE}BUILT_SOURCES += \$(B${count}p) \$(B${count}b)
EOF
    fi
Sam Hocevar's avatar
Sam Hocevar committed
178
    cat >> modules/${dir}/Makefile.am << EOF
Sam Hocevar's avatar
Sam Hocevar committed
179
180
${PRIVATE}lib${mod}_plugin_a_SOURCES = \$(SOURCES_${mod})
EOF
Sam Hocevar's avatar
Sam Hocevar committed
181
    if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
Sam Hocevar's avatar
Sam Hocevar committed
182
183
184
${PRIVATE}nodist_lib${mod}_plugin_a_SOURCES = \$(nodist_SOURCES_${mod})
EOF
    fi
Sam Hocevar's avatar
Sam Hocevar committed
185
    cat >> modules/${dir}/Makefile.am << EOF
Sam Hocevar's avatar
Sam Hocevar committed
186
187
188
189
190
191
lib${mod}_plugin_a_CFLAGS = \`\$(VLC_CONFIG) --cflags plugin ${mod}\`
lib${mod}_plugin_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags plugin ${mod}\`
lib${mod}_plugin_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags plugin ${mod}\`

lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
EOF
Sam Hocevar's avatar
Sam Hocevar committed
192
    if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
Sam Hocevar's avatar
Sam Hocevar committed
193
194
195
nodist_lib${mod}_pic_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
EOF
    fi
Sam Hocevar's avatar
Sam Hocevar committed
196
    cat >> modules/${dir}/Makefile.am << EOF
Sam Hocevar's avatar
Sam Hocevar committed
197
198
199
200
201
202
lib${mod}_pic_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin pic ${mod}\`
lib${mod}_pic_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin pic ${mod}\`
lib${mod}_pic_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin pic ${mod}\`

lib${mod}_a_SOURCES = ${PRIVATE}\$(SOURCES_${mod})
EOF
Sam Hocevar's avatar
Sam Hocevar committed
203
    if [ "${NODIST}" != "#" ]; then cat >> modules/${dir}/Makefile.am << EOF
Sam Hocevar's avatar
Sam Hocevar committed
204
205
206
nodist_lib${mod}_a_SOURCES = ${PRIVATE}\$(nodist_SOURCES_${mod})
EOF
    fi
Sam Hocevar's avatar
Sam Hocevar committed
207
    cat >> modules/${dir}/Makefile.am << EOF
Sam Hocevar's avatar
Sam Hocevar committed
208
209
210
211
212
213
lib${mod}_a_CFLAGS = \`\$(VLC_CONFIG) --cflags builtin ${mod}\`
lib${mod}_a_CXXFLAGS = \`\$(VLC_CONFIG) --cxxflags builtin ${mod}\`
lib${mod}_a_OBJCFLAGS = \`\$(VLC_CONFIG) --objcflags builtin ${mod}\`

libvlc_LIBRARIES += \$(L${count}b) \$(L${count}pic)
lib${mod}_DATA = \$(D${count}p)
214
215

lib${mod}dir = \$(libdir)/vlc/${topdir}
Sam Hocevar's avatar
Sam Hocevar committed
216
217
${PRIVATE}noinst_LIBRARIES += \$(L${count}p)
${PRIVATE}lib${mod}_plugin\$(LIBEXT): \$(lib${mod}_plugin_a_OBJECTS)
218
219
220
221
${PRIVATE}	@case \`\$(VLC_CONFIG) --linkage ${mod}\` in \\
${PRIVATE}	  c++) echo \$(CXXLINK) \$(lib${mod}_plugin_a_OBJECTS) \\\`\$(VLC_CONFIG) --libs plugin ${mod}\\\` ; \$(CXXLINK) \$(lib${mod}_plugin_a_OBJECTS) \`\$(VLC_CONFIG) --libs plugin ${mod}\` ;; \\
${PRIVATE}	  objc) echo \$(OBJCLINK) \$(lib${mod}_plugin_a_OBJECTS) \\\`\$(VLC_CONFIG) --libs plugin ${mod}\\\` ; \$(OBJCLINK) \$(lib${mod}_plugin_a_OBJECTS) \`\$(VLC_CONFIG) --libs plugin ${mod}\` ;; \\
${PRIVATE}	  c|*) echo \$(LINK) \$(lib${mod}_plugin_a_OBJECTS) \\\`\$(VLC_CONFIG) --libs plugin ${mod}\\\` ; \$(LINK) \$(lib${mod}_plugin_a_OBJECTS) \`\$(VLC_CONFIG) --libs plugin ${mod}\` ;; \\
Sam Hocevar's avatar
Sam Hocevar committed
222
${PRIVATE}	esac
223
224
225
226
227
228


EOF
  done
done

Sam Hocevar's avatar
Sam Hocevar committed
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
cat >> m4/private.m4-tmp1 << EOF
  AM_CONDITIONAL(UNTRUE, false)
])
EOF
cat m4/private.m4-tmp1 >> m4/private.m4 && rm -f m4/private.m4-tmp1
cat >> m4/private.m4-tmp2 << EOF
])
EOF
cat m4/private.m4-tmp2 >> m4/private.m4 && rm -f m4/private.m4-tmp2
cat >> m4/private.m4-tmp3 << EOF
])])
EOF
cat m4/private.m4-tmp3 >> m4/private.m4 && rm -f m4/private.m4-tmp3
cat >> m4/private.m4-tmp4 << EOF
BLAH
244
245
])
EOF
Sam Hocevar's avatar
Sam Hocevar committed
246
cat m4/private.m4-tmp4 >> m4/private.m4 && rm -f m4/private.m4-tmp4
247
248
249

echo "done."

250
###
251
###  classic bootstrap stuff
252
###
253
set -x
254
255

# remove autotools cruft
Sam Hocevar's avatar
Sam Hocevar committed
256
rm -f aclocal.m4 configure configure.ac.in config.log Modules.am
257
258
259
260
261
262
263
264
# remove old autotools extra cruft
rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh
# remove new autotools extra cruft
(cd autotools && rm -f config.guess config.sub missing mkinstalldirs compile depcomp install-sh)
# remove libtool cruft
rm -f ltmain.sh libtool ltconfig
# remove gettext cruft
rm -f m4/oldgettext.m4 ABOUT-NLS
265
rm -Rf intl
266

267
# Check for gettext
Sam Hocevar's avatar
Sam Hocevar committed
268
if gettextize --version >/dev/null 2>&1; then
269
# Autopoint is available from 0.11.3, but we need 0.11.5
270
if expr `gettextize --version | sed -e '1s/[^0-9]*//' -e q` \
Sam Hocevar's avatar
Sam Hocevar committed
271
        '>=' 0.11.5 >/dev/null 2>&1; then
272
  # We have gettext, and a recent version! Everything is cool.
273
  autopoint || exit 1
274
  GETTEXT=yes
275
else
276
  # User's gettext is too old. try to continue anyway.
277
  echo > ABOUT-NLS
278
  mkdir -p intl
279
  echo > intl/Makefile.am
Sam Hocevar's avatar
Sam Hocevar committed
280
  cat >> m4/private.m4 << EOF
281
282
283
284
dnl  User's gettext is too old, so this is a no-op
AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])

EOF
285
286
287
  GETTEXT=old
fi;else
  # we don't have gettext. grmbl. try to continue anyway.
288
  echo > ABOUT-NLS
289
290
  mkdir -p intl
  echo > intl/Makefile.am
Sam Hocevar's avatar
Sam Hocevar committed
291
  cat >> m4/private.m4 << EOF
292
293
294
295
dnl  User does not have gettext, so this is a no-op
AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])

EOF
296
  GETTEXT=no
297
fi
298

299
# Check for pkg-config
Sam Hocevar's avatar
Sam Hocevar committed
300
if pkg-config --version >/dev/null 2>&1; then
301
302
303
304
  # We have pkg-config, everything is cool.
  PKGCONFIG=yes
else
  # Not present, use a workaround.
Sam Hocevar's avatar
Sam Hocevar committed
305
  cat >> m4/private.m4 << EOF
306
307
308
309
dnl  User does not have pkg-config, so this is a no-op
AC_DEFUN([PKG_CHECK_MODULES], [])

EOF
310
311
312
  PKGCONFIG=no
fi

313
# Check for automake
314
amvers="none"
Sam Hocevar's avatar
Sam Hocevar committed
315
if automake-1.7 --version >/dev/null 2>&1; then
316
  amvers="-1.7"
Sam Hocevar's avatar
Sam Hocevar committed
317
318
319
320
  # If we also have 1.6, use it instead because it is faster
  if automake-1.6 --version >/dev/null 2>&1; then
    if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" ">" "1.6.1" > /dev/null 2>&1
    then amvers="-1.6"
321
322
    fi
  fi
Sam Hocevar's avatar
Sam Hocevar committed
323
324
325
326
327
328
329
330
331
332
333
elif automake-1.6 --version >/dev/null 2>&1; then
  amvers="-1.6"
  if expr "`automake-1.6 --version | sed -e '1s/[^0-9]*//' -e q`" "<=" "1.6.1" > /dev/null 2>&1
  then AUTOMAKESUCKS=yes
  fi
elif automake-1.5 --version >/dev/null 2>&1; then
  INSTALLSUCKS=yes
  amvers="-1.5"
elif automake --version > /dev/null 2>&1; then
  amvers=""
  case "`automake --version | sed -e '1s/[^0-9]*//' -e q`" in
334
    0|0.*|1|1.[01234]|1.[01234][-.]*)
Sam Hocevar's avatar
Sam Hocevar committed
335
336
337
338
339
340
      amvers="none" ;;
    1.5|1.5.*)
      INSTALLSUCKS=yes ;;
    1.6|1.6.0|1.6.1)
      AUTOMAKESUCKS=yes ;;
  esac
341
342
fi

Sam Hocevar's avatar
Sam Hocevar committed
343
if test "${amvers}" = "none"; then
344
345
  set +x
  echo "you need automake version 1.5 or later"
346
  exit 1
347
fi
348

Sam Hocevar's avatar
Sam Hocevar committed
349
350
351
# Automake complains if this is not present
rm -f vlc-config.in && printf "" > vlc-config.in

352
# Do the rest
353
354
355
aclocal${amvers} -I m4 || exit 1
autoheader || exit 1

Sam Hocevar's avatar
Sam Hocevar committed
356
automake${amvers} --add-missing --copy
357

358
autoconf || exit 1
359
360

##
Sam Hocevar's avatar
Sam Hocevar committed
361
##  files which need to be regenerated
362
##
Sam Hocevar's avatar
Sam Hocevar committed
363
rm -f vlc-config.in vlc-config
364
365
366
rm -f src/misc/modules_builtin.h src/misc/modules_plugin.h
rm -f include/vlc_symbols.h
rm -f mozilla/vlcintf.h
367

368
##
369
##  Shut up
370
##
371
set +x
372

373
##
374
##  Tell the user about gettext, pkg-config and sed
375
##
Sam Hocevar's avatar
Sam Hocevar committed
376
case "${GETTEXT}" in
377
378
379
  yes)
  ;;
  no)
380
381
382
383
384
385
386
    cat << EOF

===========================================================
IMPORTANT NOTE: you do not have gettext installed on your
system. The vlc build will work, but you will not have
internationalization support. We suggest installing gettext.
EOF
387
388
  ;;
  old)
389
390
391
392
    cat << EOF

==========================================================
NOTE: you have an old version of gettext installed on your
393
394
system. The vlc build will work, but if your system does not
have libintl you will not have internationalization support.
395
We suggest upgrading to gettext 0.11.5 or later.
396
EOF
397
398
399
  ;;
esac

400
401
402
403
404
405
406
407
408
409
410
411
412
413
case "$PKGCONFIG" in
  yes)
  ;;
  no)
    cat << EOF

==============================================================
NOTE: you do not have the "pkg-config" utility on your system;
detection of the Gtk-2.0 and GNOME 2.0 libraries will not be
reliable.
EOF
  ;;
esac

414
415
416
417
case "$AUTOMAKESUCKS" in
  no)
  ;;
  yes)
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
    cat << EOF

=============================================================
IMPORTANT NOTE: your version of automake has a bug which will
prevent proper plugin compilation. Either compile VLC with
the --disable-plugins flag, or use a version of automake newer
than 1.6.1 (1.6.2 is OK, and so are the 1.5 series).
EOF
  ;;
esac

case "$INSTALLSUCKS" in
  no)
  ;;
  yes)
    cat << EOF

=============================================================
IMPORTANT NOTE: your version of automake has a bug which will
prevent proper installation. Do not use "make install" with this
version of automake, or use a version of automake newer than 1.5
(such as 1.6 or 1.7).
EOF
441
442
443
  ;;
esac