1 ?RCS: $Id: Oldconfig.U,v 3.0.1.10 1997/02/28 15:06:39 ram Exp $
3 ?RCS: Copyright (c) 1991-1993, Raphael Manfredi
5 ?RCS: You may redistribute only under the terms of the Artistic Licence,
6 ?RCS: as specified in the README file that comes with the distribution.
7 ?RCS: You may reuse parts of this distribution only within the terms of
8 ?RCS: that same Artistic Licence; a copy of which may be found at the root
9 ?RCS: of the source tree for dist 3.0.
11 ?RCS: $Log: Oldconfig.U,v $
12 ?RCS: Revision 3.0.1.10 1997/02/28 15:06:39 ram
13 ?RCS: patch61: added support for src.U
14 ?RCS: patch61: new OSNAME define
15 ?RCS: patch61: can now sense new OSes
17 ?RCS: Revision 3.0.1.9 1995/07/25 13:40:51 ram
18 ?RCS: patch56: now knows about OS/2 platforms
20 ?RCS: Revision 3.0.1.8 1995/05/12 12:04:18 ram
21 ?RCS: patch54: config.sh reload logic now knows about new -K switch
22 ?RCS: patch54: cleaned up and extended osvers for DEC OSF/1 (ADO)
23 ?RCS: patch54: added MachTen detection (ADO)
25 ?RCS: Revision 3.0.1.7 1995/02/15 14:13:41 ram
26 ?RCS: patch51: adapted osvers computation for AIX (ADO)
28 ?RCS: Revision 3.0.1.6 1995/01/30 14:27:15 ram
29 ?RCS: patch49: unit Options.U now exports file optdef.sh, not a variable
30 ?RCS: patch49: update code for myuname changed (WED)
32 ?RCS: Revision 3.0.1.5 1995/01/11 15:15:36 ram
33 ?RCS: patch45: added quotes around the INITPROG variable (ADO)
34 ?RCS: patch45: allows variable overriding after config file loading
36 ?RCS: Revision 3.0.1.4 1994/10/29 15:57:05 ram
37 ?RCS: patch36: added ?F: line for metalint file checking
38 ?RCS: patch36: merged with the version used for perl5's Configure (ADO)
40 ?RCS: Revision 3.0.1.3 1994/05/06 14:24:17 ram
41 ?RCS: patch23: added support for osf1 hints
42 ?RCS: patch23: new support for solaris and i386 systems (ADO)
44 ?RCS: Revision 3.0.1.2 1994/01/24 14:05:02 ram
45 ?RCS: patch16: added post-processing on myuname for Xenix targets
46 ?RCS: patch16: message proposing config.sh defaults made consistent
48 ?RCS: Revision 3.0.1.1 1993/09/13 15:56:32 ram
49 ?RCS: patch10: force use of config.sh when -d option is used (WAD)
50 ?RCS: patch10: complain about non-existent hint files (WAD)
51 ?RCS: patch10: added Options dependency for fastread variable
53 ?RCS: Revision 3.0 1993/08/18 12:05:12 ram
54 ?RCS: Baseline for dist 3.0 netwide release.
57 ?X: This unit tries to remember what we did last time we ran Configure, mostly
58 ?X: for the sake of setting defaults.
60 ?MAKE:Oldconfig hint myuname osname osvers: Instruct Myread uname \
61 Checkcc Mksymlinks run \
62 sh awk sed test cat rm lns tr n c contains Loc Options Tr src trnl ln
63 ?MAKE: -pick wipe $@ %<
65 ?S: The output of 'uname -a' if available, otherwise the hostname. On Xenix,
66 ?S: pseudo variables assignments in the output are stripped, thank you. The
67 ?S: whole thing is then lower-cased.
70 ?S: Gives the type of hints used for previous answers. May be one of
71 ?S: "default", "recommended" or "previous".
74 ?S: This variable contains the operating system name (e.g. sunos,
75 ?S: solaris, hpux, etc.). It can be useful later on for setting
76 ?S: defaults. Any spaces are replaced with underscores. It is set
77 ?S: to a null string if we can't figure it out.
80 ?S: This variable contains the operating system version (e.g.
81 ?S: 4.1.3, 5.2, etc.). It is primarily used for helping select
82 ?S: an appropriate hints file, but might be useful elsewhere for
83 ?S: setting defaults. It is set to '' if we can't figure it out.
84 ?S: We try to be flexible about how much of the version number
85 ?S: to keep, e.g. if 4.1.1, 4.1.2, and 4.1.3 are essentially the
86 ?S: same for this package, hints files might just be os_4.0 or
87 ?S: os_4.1, etc., not keeping separate files for each little release.
90 ?C: This symbol contains the name of the operating system, as determined
91 ?C: by Configure. You shouldn't rely on it too much; the specific
92 ?C: feature tests from Configure are generally more reliable.
95 ?C: This symbol contains the version of the operating system, as determined
96 ?C: by Configure. You shouldn't rely on it too much; the specific
97 ?C: feature tests from Configure are generally more reliable.
99 ?H:#define OSNAME "$osname" /**/
100 ?H:#define OSVERS "$osvers" /**/
103 ?T:tmp tmp_n tmp_c tmp_sh file
104 ?T:xxxxfile xxxfile xxfile xfile hintfile newmyuname
105 ?T:tans _ isesix INITPROG DJGPP
108 ?LINT:extern targetarch
109 ?LINT:extern hostarch
110 ?LINT:change hostarch
113 : Try to determine whether config.sh was made on this system
116 ?X: indentation wrong on purpose--RAM
117 ?X: Leave a white space between first two '(' for ksh. The sub-shell is needed
118 ?X: on some machines to avoid the error message when uname is not found; e.g.
119 ?X: old SUN-OS 3.2 would not execute hostname in (uname -a || hostname). Sigh!
120 ?X: Now not using a subshell but instead $test.
121 myuname=`$uname -a 2>/dev/null`
122 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
123 ?X: Special mention for Xenix, whose 'uname -a' gives us output like this:
125 ?X: nodename=whatever
126 ?X: release=2.3.2 .. etc...
127 ?X: Therefore, we strip all this variable assignment junk and remove all the
128 ?X: new lines to keep the myuname variable sane... --RAM
129 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
130 # because the A-Z/a-z are not consecutive.
131 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's,['/],,g' | \
132 ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
133 ?X: Save the value we just computed to reset myuname after we get done here.
134 newmyuname="$myuname"
138 if test -f ../config.sh; then
139 if $contains myuname= ../config.sh >/dev/null 2>&1; then
140 eval "`grep myuname= ../config.sh`"
142 if test "X$myuname" = "X$newmyuname"; then
150 @if {test -d ../hints}
151 : Get old answers from old config file if Configure was run on the
152 : same system, otherwise use the hints.
155 ?X: Since we are now at the root of the source tree, we must use $src
156 ?X: to access the sources and not $rsrc. See src.U for details...
157 if test -f config.sh; then
159 rp="I see a config.sh file. Shall I use it to set the defaults?"
162 n*|N*) echo "OK, I'll ignore it."
163 mv config.sh config.sh.old
164 myuname="$newmyuname"
166 *) echo "Fetching default answers from your old config.sh file..." >&4
174 : Older versions did not always set $sh. Catch re-use of such
184 if test ! -f config.sh; then
187 First time through, eh? I have some defaults handy for some systems
188 that need some extra help getting the Configure answers right:
191 (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
193 : Half the following guesses are probably wrong... If you have better
194 : tests or hints, please send them to <MAINTLOC>
195 : The metaconfig authors would also appreciate a copy...
196 $test -f /irix && osname=irix
197 $test -f /xenix && osname=sco_xenix
198 $test -f /dynix && osname=dynix
199 $test -f /dnix && osname=dnix
200 $test -f /lynx.os && osname=lynxos
201 $test -f /unicos && osname=unicos && osvers=`$uname -r`
202 $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
203 $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
204 $test -f /bin/mips && /bin/mips && osname=mips
205 $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
206 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
207 $test -d /usr/apollo/bin && osname=apollo
208 $test -f /etc/saf/_sactab && osname=svr4
209 $test -d /usr/include/minix && osname=minix
210 $test -f /system/gnu_library/bin/ar.pm && osname=vos
211 if $test -d /MachTen -o -d /MachTen_Folder; then
212 ?X: MachTen uname -a output looks like
213 ?X: xxx 4 0.0 Macintosh
214 ?X: MachTen /sbin/version output looks like
215 ?X: MachTen 4.0 Mon Aug 28 10:18:00 1995
216 ?X: MachTen 3.x had the 'version' command in /usr/etc/version.
218 if $test -x /sbin/version; then
219 osvers=`/sbin/version | $awk '{print $2}' |
220 $sed -e 's/[A-Za-z]$//'`
221 elif $test -x /usr/etc/version; then
222 osvers=`/usr/etc/version | $awk '{print $2}' |
223 $sed -e 's/[A-Za-z]$//'`
229 $test -f /sys/posix.dll &&
230 $test -f /usr/bin/what &&
231 set X `/usr/bin/what /sys/posix.dll` &&
236 ?X: If we have uname, we already computed a suitable uname -a output, correctly
237 ?X: formatted for Xenix, and it lies in $myuname.
238 if $test -f $uname; then
246 umips) osname=umips ;;
249 [23]100) osname=mips ;;
250 next*) osname=next ;;
251 ?X: Interactive Unix.
253 tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
254 if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
257 elif $test -f /etc/kconfig; then
259 if test "$lns" = "$ln -s"; then
261 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
263 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
269 ?X: MS-DOS djgpp uname -a output looks like:
270 ?X: ms-dos xxx 6 22 pc
271 ?X: $1 is the "dos flavor" (need not be "ms-dos").
272 ?X: $2 is the node name
273 ?X: $3 and $4 are version/subversion
274 ?X: $5 is always "pc", but that might not be unique to DJGPP.
275 ?X: (e.g. Solaris_x86 has $5 = i86pc, which doesn't actually conflict,
276 ?X: but it's close enought that I can easily imagine other vendors also
277 ?X: using variants of pc* in $5.)
278 ?X: The "DJGPP" environment variable is always set when djgpp is active.
280 if test -n "$DJGPP"; then
289 ?X: aix 4.1 uname -a output looks like
290 ?X: AIX foo 1 4 000123456789
291 ?X: where $4 is the major release number and $3 is the (minor) version.
292 ?X: More detail on the version is available with the oslevel command.
293 ?X: in 3.2.x, it output a string (see case statements below). In 4.1,
294 ?X: it puts out something like 4.1.1.0
295 tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
297 # oslevel can fail with:
298 # oslevel: Unable to acquire lock.
299 *not\ found) osvers="$4"."$3" ;;
300 '<3240'|'<>3240') osvers=3.2.0 ;;
301 '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
302 '=3250'|'>3250') osvers=3.2.5 ;;
306 bsd386) osname=bsd386
309 cygwin*) osname=cygwin
312 *dc.osx) osname=dcosx
318 domainos) osname=apollo
324 dragonfly) osname=dragonfly
328 ?X: DYNIX/ptx xxx 4.0 V4.1.2 i386
329 dynixptx*) osname=dynixptx
330 osvers=`echo "$4"|sed 's/^v//'`
332 freebsd) osname=freebsd
334 genix) osname=genix ;;
335 ?X: GNU/Hurd uname -a gives something like:
336 ?X: GNU foo 0.3 GNU-Mach 1.4/Hurd-0.3 i386-AT386 GNU
337 ?X: GNU gnu 0.3 GNUmach-1.2/Hurd-0.3 i386-AT386 GNU
338 ?X: Note the hostname on the second one, which will fool Configure
339 ?X: into using the SysV case!
342 ?X: HP-UX uname -a gives something like
343 ?X: HP-UX foobar B.10.20 A 9000/735 2016483812 two-user license
344 ?X: Preserve the full 10.20 string instead of the previous plain '10'.
345 ?X: Thanks to Graham Barr. --AD 6/30/1998
347 osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
363 netbsd*) osname=netbsd
368 4*) osname=newsos4 ;;
372 next*) osname=next ;;
373 nonstop-ux) osname=nonstopux ;;
374 openbsd) osname=openbsd
380 POSIX-BC | posix-bc ) osname=posix-bc
383 powerux | power_ux | powermax_os | powermaxos | \
384 powerunix | power_unix) osname=powerux
390 solaris) osname=solaris
392 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
399 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
403 titanos) osname=titanos
412 ultrix) osname=ultrix
415 osf1|mls+) case "$5" in
417 ?X: DEC OSF/1 myuname -a output looks like: osf1 xxxx t3.2 123.4 alpha
418 ?X: where the version number can be something like [xvt]n.n
420 ?X: sizer knows the minor minor version: the letter
421 osvers=`sizer -v | awk -FUNIX '{print $2}' | awk '{print $1}' | tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
424 *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
427 hp*) osname=hp_osf1 ;;
428 mips) osname=mips_osf1 ;;
429 ?X: hp and mips were unsupported Technology Releases -- ADO, 24/10/94
432 # UnixWare 7.1.2 is known as Open UNIX 8
433 openunix|unixware) osname=svr5
441 $2) case "$osname" in
445 : svr4.x or possibly later
455 if test -f /stand/boot ; then
456 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
457 if test -n "$INITPROG" -a -f "$INITPROG"; then
458 isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
459 if test -n "$isesix"; then
467 *) if test -f /etc/systemid; then
469 set `echo $3 | $sed 's/\./ /g'` $4
470 if $test -f $src/hints/sco_$1_$2_$3.sh; then
472 elif $test -f $src/hints/sco_$1_$2.sh; then
474 elif $test -f $src/hints/sco_$1.sh; then
479 '') : Still unknown. Probably a generic Sys V.
489 '') : Still unknown. Probably a generic BSD.
497 ?X: Try to identify sony's NEWS-OS (BSD unix)
498 if test -f /vmunix -a -f $src/hints/news_os.sh; then
499 (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
500 if $contains news-os UU/kernel.what >/dev/null 2>&1; then
503 $rm -f UU/kernel.what
504 ?X: Maybe it's OS/2 or DOS or something similar
505 elif test -d c:/. -o -n "$is_os2" ; then
512 case "$targetarch" in
515 osname=`echo $targetarch|sed 's,^[^-]*-,,'`
520 : Now look for a hint file osname_osvers, unless one has been
524 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
525 : Also try without trailing minor version numbers.
526 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
527 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
528 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
529 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
535 *) if $test -f $src/hints/$file.sh ; then
537 elif $test -f $src/hints/$xfile.sh ; then
539 elif $test -f $src/hints/$xxfile.sh ; then
541 elif $test -f $src/hints/$xxxfile.sh ; then
543 elif $test -f $src/hints/$xxxxfile.sh ; then
545 elif $test -f "$src/hints/${osname}.sh" ; then
554 if $test -f Policy.sh ; then
557 none) dflt="Policy" ;;
558 *) dflt="Policy $dflt" ;;
563 dflt=`echo $hintfile | $sed 's/\.sh$//'`
567 if $test -f Policy.sh ; then
570 There's also a Policy hint file available, which should make the
571 site-specific (policy) questions easier to answer.
578 You may give one or more space-separated answers, or "none" if appropriate.
579 If you have a handcrafted Policy.sh file or a Policy.sh file generated by a
580 previous run of Configure, you may specify it as well as or instead of
581 OS-specific hints. If hints are provided for your OS, you should use them:
582 although Perl can probably be built without hints on many platforms, using
583 hints often improve performance and may enable features that Configure can't
584 set up on its own. If there are no hints that match your OS, specify "none";
585 DO NOT give a wrong version or a wrong OS.
589 rp="Which of these apply, if any?"
592 for file in $tans; do
593 if $test X$file = XPolicy -a -f Policy.sh; then
595 $cat Policy.sh >> UU/config.sh
596 elif $test -f $src/hints/$file.sh; then
597 . $src/hints/$file.sh
598 $cat $src/hints/$file.sh >> UU/config.sh
599 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
602 : Give one chance to correct a possible typo.
603 echo "$file.sh does not exist"
605 rp="hint to use instead?"
608 if $test -f "$src/hints/$file.sh"; then
609 . $src/hints/$file.sh
610 $cat $src/hints/$file.sh >> UU/config.sh
611 elif $test X$ans = X -o X$ans = Xnone ; then
614 echo "$file.sh does not exist -- ignored."
621 : Remember our hint file for later.
622 if $test -f "$src/hints/$file.sh" ; then
629 ?X: From here on, we must use $rsrc instead of $src
631 : Get old answers, if there is a config file out there
634 if test -f ../config.sh; then
636 rp="I see a config.sh file. Shall I use it to set the defaults?"
639 n*|N*) echo "OK, I'll ignore it.";;
640 *) echo "Fetching default answers from your old config.sh file..." >&4
652 ?X: remember, indentation is wrong--RAM
656 echo "Fetching default answers from $config_sh..." >&4
660 ?X: preserve symbolic links, if any
661 cp $config_sh config.sh 2>/dev/null
671 test "$override" && . ./optdef.sh
673 : Restore computed paths
674 for file in $loclist $trylist; do
675 eval $file="\$_$file"
681 Configure uses the operating system name and version to set some defaults.
682 The default value is probably right if the name rings a bell. Otherwise,
683 since spelling matters for me, either accept the default or answer "none"
692 ''|' '|none) dflt=none ;;
693 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
698 rp="Operating system name?"
702 *) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
712 ''|' '|none) dflt=none ;;
713 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
714 dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
723 rp="Operating system version?"