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 License,
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 License; 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.
66 ?S: The whole thing is then lower-cased and slashes and single quotes are
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
112 : Try to determine whether config.sh was made on this system
115 ?X: indentation wrong on purpose--RAM
116 ?X: Leave a white space between first two '(' for ksh. The sub-shell is needed
117 ?X: on some machines to avoid the error message when uname is not found; e.g.
118 ?X: old SUN-OS 3.2 would not execute hostname in (uname -a || hostname). Sigh!
119 ?X: Now not using a subshell but instead $test.
120 myuname=`$uname -a 2>/dev/null`
121 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
122 # Downcase everything to avoid ambiguity.
123 # Remove slashes and single quotes so we can use parts of this in
124 # directory and file names.
125 # Remove newlines so myuname is sane to use elsewhere.
126 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
127 # because the A-Z/a-z are not consecutive.
128 myuname=`echo $myuname | $sed -e "s,['/],,g" | \
129 ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
130 ?X: Save the value we just computed to reset myuname after we get done here.
131 newmyuname="$myuname"
135 if test -f ../config.sh; then
136 if $contains myuname= ../config.sh >/dev/null 2>&1; then
137 eval "`grep myuname= ../config.sh`"
139 if test "X$myuname" = "X$newmyuname"; then
147 @if {test -d ../hints}
148 : Get old answers from old config file if Configure was run on the
149 : same system, otherwise use the hints.
152 ?X: Since we are now at the root of the source tree, we must use $src
153 ?X: to access the sources and not $rsrc. See src.U for details...
154 if test -f config.sh; then
156 rp="I see a config.sh file. Shall I use it to set the defaults?"
159 n*|N*) echo "OK, I'll ignore it."
160 mv config.sh config.sh.old
161 myuname="$newmyuname"
163 *) echo "Fetching default answers from your old config.sh file..." >&4
171 : Older versions did not always set $sh. Catch re-use of such
181 if test ! -f config.sh; then
184 First time through, eh? I have some defaults handy for some systems
185 that need some extra help getting the Configure answers right:
188 (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
190 : Half the following guesses are probably wrong... If you have better
191 : tests or hints, please send them to <MAINTLOC>
192 : The metaconfig authors would also appreciate a copy...
193 $test -f /irix && osname=irix
194 $test -f /xenix && osname=sco_xenix
195 $test -f /dynix && osname=dynix
196 $test -f /dnix && osname=dnix
197 $test -f /lynx.os && osname=lynxos
198 $test -f /unicos && osname=unicos && osvers=`$uname -r`
199 $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
200 $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
201 $test -f /bin/mips && /bin/mips && osname=mips
202 $test -d /usr/apollo/bin && osname=apollo
203 $test -f /etc/saf/_sactab && osname=svr4
204 $test -d /usr/include/minix && osname=minix && osvers=`$uname -r`
205 $test -f /system/gnu_library/bin/ar.pm && osname=vos
206 if $test -d /MachTen -o -d /MachTen_Folder; then
207 ?X: MachTen uname -a output looks like
208 ?X: xxx 4 0.0 Macintosh
209 ?X: MachTen /sbin/version output looks like
210 ?X: MachTen 4.0 Mon Aug 28 10:18:00 1995
211 ?X: MachTen 3.x had the 'version' command in /usr/etc/version.
213 if $test -x /sbin/version; then
214 osvers=`/sbin/version | $awk '{print $2}' |
215 $sed -e 's/[A-Za-z]$//'`
216 elif $test -x /usr/etc/version; then
217 osvers=`/usr/etc/version | $awk '{print $2}' |
218 $sed -e 's/[A-Za-z]$//'`
224 $test -f /sys/posix.dll &&
225 $test -f /usr/bin/what &&
226 set X `/usr/bin/what /sys/posix.dll` &&
231 ?X: If we have uname, we already computed a suitable uname -a output,
232 ?X: and it lies in $myuname.
233 if $test -f $uname; then
241 umips) osname=umips ;;
244 [23]100) osname=mips ;;
245 ?X: Interactive Unix.
247 tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
248 if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
251 elif $test -f /etc/kconfig; then
253 if test "$lns" = "$ln -s"; then
255 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
257 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
263 ?X: MS-DOS djgpp uname -a output looks like:
264 ?X: ms-dos xxx 6 22 pc
265 ?X: $1 is the "dos flavor" (need not be "ms-dos").
266 ?X: $2 is the node name
267 ?X: $3 and $4 are version/subversion
268 ?X: $5 is always "pc", but that might not be unique to DJGPP.
269 ?X: (e.g. Solaris_x86 has $5 = i86pc, which doesn't actually conflict,
270 ?X: but it's close enough that I can easily imagine other vendors also
271 ?X: using variants of pc* in $5.)
272 ?X: The "DJGPP" environment variable is always set when djgpp is active.
274 if test -n "$DJGPP"; then
283 ?X: aix 4.1 uname -a output looks like
284 ?X: AIX foo 1 4 000123456789
285 ?X: where $4 is the major release number and $3 is the (minor) version.
286 ?X: More detail on the version is available with the oslevel command.
287 ?X: in 3.2.x, it output a string (see case statements below). In 4.1,
288 ?X: it puts out something like 4.1.1.0
289 tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
291 # oslevel can fail with:
292 # oslevel: Unable to acquire lock.
293 *not\ found) osvers="$4"."$3" ;;
294 '<3240'|'<>3240') osvers=3.2.0 ;;
295 '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
296 '=3250'|'>3250') osvers=3.2.5 ;;
300 bitrig) osname=bitrig
303 bsd386) osname=bsd386
306 cygwin*) osname=cygwin
309 *dc.osx) osname=dcosx
315 domainos) osname=apollo
321 dragonfly) osname=dragonfly
325 ?X: DYNIX/ptx xxx 4.0 V4.1.2 i386
326 dynixptx*) osname=dynixptx
327 osvers=`echo "$4"|sed 's/^v//'`
329 freebsd) osname=freebsd
331 genix) osname=genix ;;
332 ?X: GNU/Hurd uname -a gives something like:
333 ?X: GNU foo 0.3 GNU-Mach 1.4/Hurd-0.3 i386-AT386 GNU
334 ?X: GNU gnu 0.3 GNUmach-1.2/Hurd-0.3 i386-AT386 GNU
335 ?X: Note the hostname on the second one, which will fool Configure
336 ?X: into using the SysV case!
339 ?X: HP-UX uname -a gives something like
340 ?X: HP-UX foobar B.10.20 A 9000/735 2016483812 two-user license
341 ?X: Preserve the full 10.20 string instead of the previous plain '10'.
342 ?X: Thanks to Graham Barr. --AD 6/30/1998
344 osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
357 $test -f /system/lib/libandroid.so && osname=linux-android
361 netbsd*) osname=netbsd
366 4*) osname=newsos4 ;;
370 nonstop-ux) osname=nonstopux ;;
371 openbsd) osname=openbsd
377 POSIX-BC | posix-bc ) osname=posix-bc
380 powerux | power_ux | powermax_os | powermaxos | \
381 powerunix | power_unix) osname=powerux
387 solaris) osname=solaris
389 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
396 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
400 titanos) osname=titanos
409 ultrix) osname=ultrix
412 osf1|mls+) case "$5" in
414 ?X: DEC OSF/1 myuname -a output looks like: osf1 xxxx t3.2 123.4 alpha
415 ?X: where the version number can be something like [xvt]n.n
417 ?X: sizer knows the minor minor version: the letter
418 osvers=`sizer -v | awk -FUNIX '{print $2}' | awk '{print $1}' | tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
421 *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
424 hp*) osname=hp_osf1 ;;
425 mips) osname=mips_osf1 ;;
426 ?X: hp and mips were unsupported Technology Releases -- ADO, 24/10/94
429 # UnixWare 7.1.2 is known as Open UNIX 8
430 openunix|unixware) osname=svr5
438 $2) case "$osname" in
442 : svr4.x or possibly later
452 if test -f /stand/boot ; then
453 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
454 if test -n "$INITPROG" -a -f "$INITPROG"; then
455 isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
456 if test -n "$isesix"; then
464 *) if test -f /etc/systemid; then
466 set `echo $3 | $sed 's/\./ /g'` $4
467 if $test -f $src/hints/sco_$1_$2_$3.sh; then
469 elif $test -f $src/hints/sco_$1_$2.sh; then
471 elif $test -f $src/hints/sco_$1.sh; then
476 '') : Still unknown. Probably a generic Sys V.
486 '') : Still unknown. Probably a generic BSD.
494 ?X: Try to identify sony's NEWS-OS (BSD unix)
495 if test -f /vmunix -a -f $src/hints/news_os.sh; then
496 (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
497 if $contains news-os UU/kernel.what >/dev/null 2>&1; then
500 $rm -f UU/kernel.what
501 ?X: Maybe it's OS/2 or DOS or something similar
502 elif test -d c:/. -o -n "$is_os2" ; then
509 case "$targetarch" in
512 case "$targetarch" in
514 # Will load qnx.sh, which should change osname to nto
519 # Catch arm-linux-androideabi, mipsel-linux-android,
520 # and i686-linux-android
525 # Something like arm-linux-gnueabihf is really just
532 # XXX perhaps we should just assume
533 # osvers to be 2, or maybe take the value
534 # from targetarch. Using $run before the
535 # hints are run is somewhat icky.
536 set X `$run $uname -a 2>/dev/null`
539 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
544 osname=`echo $targetarch|sed 's,^[^-]*-,,'`
551 : Now look for a hint file osname_osvers, unless one has been
555 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
556 : Also try without trailing minor version numbers.
557 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
558 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
559 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
560 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
566 *) if $test -f $src/hints/$file.sh ; then
568 elif $test -f $src/hints/$xfile.sh ; then
570 elif $test -f $src/hints/$xxfile.sh ; then
572 elif $test -f $src/hints/$xxxfile.sh ; then
574 elif $test -f $src/hints/$xxxxfile.sh ; then
576 elif $test -f "$src/hints/${osname}.sh" ; then
585 if $test -f Policy.sh ; then
588 none) dflt="Policy" ;;
589 *) dflt="Policy $dflt" ;;
594 dflt=`echo $hintfile | $sed 's/\.sh$//'`
598 if $test -f Policy.sh ; then
601 There's also a Policy hint file available, which should make the
602 site-specific (policy) questions easier to answer.
609 You may give one or more space-separated answers, or "none" if appropriate.
610 If you have a handcrafted Policy.sh file or a Policy.sh file generated by a
611 previous run of Configure, you may specify it as well as or instead of
612 OS-specific hints. If hints are provided for your OS, you should use them:
613 although Perl can probably be built without hints on many platforms, using
614 hints often improve performance and may enable features that Configure can't
615 set up on its own. If there are no hints that match your OS, specify "none";
616 DO NOT give a wrong version or a wrong OS.
620 rp="Which of these apply, if any?"
623 for file in $tans; do
624 if $test X$file = XPolicy -a -f Policy.sh; then
626 $cat Policy.sh >> UU/config.sh
627 elif $test -f $src/hints/$file.sh; then
628 . $src/hints/$file.sh
629 $cat $src/hints/$file.sh >> UU/config.sh
630 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
633 : Give one chance to correct a possible typo.
634 echo "$file.sh does not exist"
636 rp="hint to use instead?"
639 if $test -f "$src/hints/$file.sh"; then
640 . $src/hints/$file.sh
641 $cat $src/hints/$file.sh >> UU/config.sh
642 elif $test X$ans = X -o X$ans = Xnone ; then
645 echo "$file.sh does not exist -- ignored."
652 : Remember our hint file for later.
653 if $test -f "$src/hints/$file.sh" ; then
660 ?X: From here on, we must use $rsrc instead of $src
662 : Get old answers, if there is a config file out there
665 if test -f ../config.sh; then
667 rp="I see a config.sh file. Shall I use it to set the defaults?"
670 n*|N*) echo "OK, I'll ignore it.";;
671 *) echo "Fetching default answers from your old config.sh file..." >&4
683 ?X: remember, indentation is wrong--RAM
687 echo "Fetching default answers from $config_sh..." >&4
691 ?X: preserve symbolic links, if any
692 cp $config_sh config.sh 2>/dev/null
702 test "$override" && . ./optdef.sh
704 : Restore computed paths
705 for file in $loclist $trylist; do
706 eval $file="\$_$file"
712 Configure uses the operating system name and version to set some defaults.
713 The default value is probably right if the name rings a bell. Otherwise,
714 since spelling matters for me, either accept the default or answer "none"
723 ''|' '|none) dflt=none ;;
724 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
729 rp="Operating system name?"
733 *) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
743 ''|' '|none) dflt=none ;;
744 *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
745 dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
754 rp="Operating system version?"