3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
6 # (If you are trying to port this package to a machine without sh, I would
7 # suggest you cut out the prototypical config.h from the end of Configure
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
11 # $Header: Configure,v 1.0.1.2 88/01/24 03:51:55 root Exp $
13 # Yes, you may rip this off to use in other distribution packages.
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.)
18 PATH='.:/bin:/usr/bin:/usr/local/bin:/usr/ucb:/usr/local:/usr/lbin:/etc'
19 export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh $0; kill $$)
22 echo "Say 'sh Configure', not 'sh <Configure'"
26 (alias) >/dev/null 2>&1 && \
27 echo "(I see you are using the Korn shell. Some ksh's blow up on Configure," && \
28 echo "especially on exotic machines. If yours does, try the Bourne shell instead.)"
30 if test ! -d ../UU; then
108 echo "Beginning of configuration questions for $package kit."
109 : Eunice requires " " instead of "", can you believe it
114 libpth='/usr/lib /usr/local/lib /lib'
115 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
116 rmlist='kit[1-9]isdone kit[1-9][0-9]isdone'
117 trap 'echo " "; rm -f $rmlist; exit 1' 1 2 3
118 attrlist="mc68000 sun gcos unix ibm gimpel interdata tss os mert pyr"
119 attrlist="$attrlist vax pdp11 i8086 z8000 u3b2 u3b5 u3b20 u3b200"
120 attrlist="$attrlist ns32000 ns16000 iAPX286 mc300 mc500 mc700 sparc"
121 pth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /etc /usr/lib"
124 : some greps do not return status, grrr.
125 echo "grimblepritz" >grimble
126 if grep blurfldyick grimble >/dev/null 2>&1 ; then
128 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
134 : the following should work in any shell
138 echo "AGH! Grep doesn't return a status. Attempting remedial action."
139 cat >contains <<'EOSS'
140 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
145 : first determine how to suppress newline on echo command
146 echo "Checking echo to see how to suppress newlines..."
147 (echo "hi there\c" ; echo " ") >.echotmp
148 if $contains c .echotmp >/dev/null 2>&1 ; then
159 echo $n "Type carriage return to continue. Your cursor should be here-->$c"
163 : now set up to do reads with possible shell escape and default assignment
166 while expr "X\$ans" : "X!" >/dev/null; do
175 set \`expr "X\$ans" : "X!\(.*\)\$"\`
188 : general instructions
191 This installation shell script will examine your system and ask you questions
192 to determine how the $package package should be installed. If you get stuck
193 on a question, you may use a ! shell escape to start a subshell or execute
194 a command. Many of the questions will have default answers in square
195 brackets--typing carriage return will give you the default.
197 On some of the questions which ask for file or directory names you are
198 allowed to use the ~name construct to specify the login directory belonging
199 to "name", even if you don't have a shell which knows about that. Questions
200 where this is allowed will be marked "(~name ok)".
203 rp="[Type carriage return to continue]"
208 Much effort has been expended to ensure that this shell script will run
209 on any Unix system. If despite that it blows up on you, your best bet is
210 to edit Configure and run it again. Also, let me (lwall@jpl-devvax.jpl.nasa.gov)
211 know how I blew it. If you can't run Configure for some reason, you'll have
212 to generate a config.sh file by hand.
214 This installation script affects things in two ways: 1) it may do direct
215 variable substitutions on some of the files included in this kit, and
216 2) it builds a config.h file for inclusion in C programs. You may edit
217 any of these files as the need arises after running this script.
219 If you make a mistake on a question, there is no easy way to back up to it
220 currently. The easiest thing to do is to edit config.sh and rerun all the
221 SH files. Configure will offer to let you do this before it runs the SH files.
224 rp="[Type carriage return to continue]"
228 : get old answers, if there is a config file out there
229 if test -f ../config.sh; then
232 rp="I see a config.sh file. Did Configure make it on THIS system? [$dflt]"
236 n*) echo "OK, I'll ignore it.";;
237 *) echo "Fetching default answers from your old config.sh file..."
247 : find out where common programs are
249 echo "Locating common programs..."
262 if test -d \$dir/\$thing; then
268 if test -f \$dir/\$thing; then
299 for file in $loclist; do
300 xxx=`loc $file $file $pth`
305 echo $file is in $xxx.
308 echo "I don't know where $file is. I hope it's in everyone's PATH."
313 echo "Don't worry if any of the following aren't found..."
315 for file in $trylist; do
316 xxx=`loc $file $file $pth`
321 echo $file is in $xxx.
324 echo "I don't see $file out there, $ans."
331 echo "Substituting grep for egrep."
337 echo "Hopefully test is built into your sh."
342 rp="Is your "'"'"test"'"'" built into sh? [$dflt] (OK to guess)"
355 echo "Hopefully echo is built into your sh."
359 echo "Checking compatibility between /bin/echo and builtin echo (if any)..."
360 $echo $n "hi there$c" >foo1
361 echo $n "hi there$c" >foo2
362 if cmp foo1 foo2 >/dev/null 2>&1; then
363 echo "They are compatible. In fact, they may be identical."
366 '-n') n='' c='\c' ans='\c' ;;
367 *) n='-n' c='' ans='-n' ;;
370 They are not compatible! You are probably running ksh on a non-USG system.
371 I'll have to use /bin/echo instead of the builtin, since Bourne shell doesn't
372 have echo built in and we may have to run some Bourne shell scripts. That
373 means I'll have to use $ans to suppress newlines now. Life is ridiculous.
376 rp="Your cursor should be here-->"
389 : get list of predefined functions in a handy place
391 if test -f /lib/libc.a; then
392 echo "Your C library is in /lib/libc.a. You're normal."
395 ans=`loc libc.a blurfl/dyick $libpth`
396 if test -f $ans; then
397 echo "Your C library is in $ans, of all places."
400 if test -f "$libc"; then
401 echo "Your C library is in $libc, like you said before."
405 I can't seem to find your C library. I've looked in the following places:
409 None of these seems to contain your C library. What is the full name
412 $echo $n "of your C library? $c"
413 rp='C library full name?'
420 $echo $n "Extracting names from $libc for later perusal...$c"
421 if ar t $libc > libc.list; then
425 echo "The archiver doesn't think $libc is a reasonable library."
426 echo "Trying nm instead..."
427 if nm -g $libc > libc.list; then
428 echo "Done. Maybe this is Unicos, or an Apollo?"
430 echo "That didn't work either. Giving up."
434 rmlist="$rmlist libc.list"
436 : make some quick guesses about what we are up against
439 if $contains SIGTSTP /usr/include/signal.h >/dev/null 2>&1 ; then
440 echo "Looks kind of like a BSD system, but we'll see..."
444 elif $contains fcntl libc.list >/dev/null 2>&1 ; then
445 echo "Looks kind of like a USG system, but we'll see..."
450 echo "Looks kind of like a version 7 system, but we'll see..."
455 if $contains vmssystem libc.list >/dev/null 2>&1 ; then
457 There is, however, a strange, musty smell in the air that reminds me of
458 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
460 echo "exit 0" >eunice
463 : it so happens the Eunice I know will not run shell scripts in Unix format
466 echo "Congratulations. You aren't running Eunice."
469 echo "exit 1" >eunice
471 if test -f /xenix; then
472 echo "Actually, this looks more like a XENIX system..."
476 echo "It's not Xenix..."
480 if test -f /venix; then
481 echo "Actually, this looks more like a VENIX system..."
488 echo "Nor is it Venix..."
492 chmod 755 bsd usg v7 eunice venix xenix
493 $eunicefix bsd usg v7 eunice venix xenix
494 rmlist="$rmlist bsd usg v7 eunice venix xenix"
496 : see if sh knows # comments
498 echo "Checking your sh to see if it knows about # comments..."
499 if sh -c '#' >/dev/null 2>&1 ; then
500 echo "Your sh handles # comments correctly."
504 echo "Okay, let's see if #! works on this system..."
505 echo "#!/bin/echo hi" > try
509 if test -s today; then
513 echo "#! /bin/echo hi" > try
517 if test -s today; then
526 echo "Your sh doesn't grok # comments--I will strip them later on."
528 echo "exec grep -v '^#'" >spitshell
531 spitshell=`pwd`/spitshell
532 echo "I presume that if # doesn't work, #! won't work either!"
536 : figure out how to guarantee sh startup
538 echo "Checking out how to guarantee sh startup..."
539 startsh=$sharpbang'/bin/sh'
540 echo "Let's see if '$startsh' works..."
552 echo "Nope. You may have to fix up the shell scripts to make sure sh runs them."
556 : see how we invoke the C preprocessor
558 echo "Now, how can we feed standard input to your C preprocessor..."
559 cat <<'EOT' >testcpp.c
564 echo 'Maybe "/lib/cpp" will work...'
565 /lib/cpp <testcpp.c >testcpp.out 2>&1
566 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
571 echo 'Nope, maybe "/lib/cpp -" will work...'
572 /lib/cpp - <testcpp.c >testcpp.out 2>&1
573 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
578 echo 'No such luck...maybe "cc -E" will work...'
579 cc -E <testcpp.c >testcpp.out 2>&1
580 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
585 echo 'Nixed again...maybe "cc -E -" will work...'
586 cc -E - <testcpp.c >testcpp.out 2>&1
587 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
588 echo "Hooray, it works! I was beginning to wonder."
592 echo 'Nope...maybe "cc -P" will work...'
593 cc -P <testcpp.c >testcpp.out 2>&1
594 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
595 echo "Yup, that does."
599 echo 'Nope...maybe "cc -P -" will work...'
600 cc -P - <testcpp.c >testcpp.out 2>&1
601 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
602 echo "Yup, that does."
606 echo 'Hmm...perhaps you already told me...'
609 *) $cpp $cppminus <testcpp.c >testcpp.out 2>&1;;
611 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
612 echo "Hooray, you did! I was beginning to wonder."
614 echo 'Uh-uh. Time to get fancy...'
615 echo 'Trying (cat >/tmp/$$.c; cc -E /tmp/$$.c; rm /tmp/$$.c)'
616 cpp='(cat >/tmp/$$.c; cc -E /tmp/$$.c; rm /tmp/$$.c)'
618 $cpp <testcpp.c >testcpp.out 2>&1
619 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
623 $echo $n "No dice. I can't find a C preprocessor. Name one: $c"
624 rp='Name a C preprocessor:'
627 $cpp <testcpp.c >testcpp.out 2>&1
628 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
629 echo "OK, that will do."
631 echo "Sorry, I can't get that to work. Go find one."
642 rm -f testcpp.c testcpp.out
644 : see if bcopy exists
646 if $contains bcopy libc.list >/dev/null 2>&1; then
647 echo 'bcopy() found.'
650 echo 'bcopy() not found.'
654 : see if sprintf is declared as int or pointer to char
656 if $contains 'char.*sprintf' /usr/include/stdio.h >/dev/null 2>&1 ; then
657 echo "Your sprintf() returns (char*)."
660 echo "Your sprintf() returns (int)."
667 if $contains index libc.list >/dev/null 2>&1 ; then
668 echo "Your system appears to use index() and rindex() rather than strchr()"
669 $echo $n "and strrchr(). Is this correct? [$dflt] $c"
670 rp='index() rather than strchr()? [$dflt]'
673 n*|f*) d_index="$define" ;;
674 *) d_index="$undef" ;;
677 echo "Your system appears to use strchr() and strrchr() rather than index()"
678 $echo $n "and rindex(). Is this correct? [$dflt] $c"
679 rp='strchr() rather than index()? [$dflt]'
682 n*|f*) d_index="$undef" ;;
683 *) d_index="$define" ;;
687 : see if stat knows about block sizes
689 if $contains 'st_blocks;' /usr/include/sys/stat.h >/dev/null 2>&1 ; then
690 if $contains 'st_blksize;' /usr/include/sys/stat.h >/dev/null 2>&1 ; then
691 echo "Your stat knows about block sizes."
694 echo "Your stat doesn't know about block sizes."
698 echo "Your stat doesn't know about block sizes."
702 : see if stdio is really std
704 if $contains 'char.*_ptr;' /usr/include/stdio.h >/dev/null 2>&1 ; then
705 if $contains '_cnt;' /usr/include/stdio.h >/dev/null 2>&1 ; then
706 echo "Your stdio is pretty std."
709 echo "Your stdio isn't very std."
713 echo "Your stdio isn't very std."
717 : check for structure copying
719 echo "Checking to see if your C compiler can copy structs..."
730 if cc -c try.c >/dev/null 2>&1 ; then
735 echo "Nope, it can't."
739 : see if struct tm is defined in sys/time.h
741 if $contains 'struct tm' /usr/include/time.h >/dev/null 2>&1 ; then
742 echo "You have struct tm defined in <time.h> rather than <sys/time.h>."
745 echo "You have struct tm defined in <sys/time.h> rather than <time.h>."
749 : see if there is a vfork
751 if $contains vfork libc.list >/dev/null 2>&1 ; then
752 echo "vfork() found."
755 echo "No vfork() found--will use fork() instead."
759 : see if signal is declared as pointer to function returning int or void
761 if $contains 'void.*signal' /usr/include/signal.h >/dev/null 2>&1 ; then
762 echo "You have void (*signal())() instead of int."
765 echo "You have int (*signal())() instead of void."
769 : check for void type
772 Checking to see how well your C compiler groks the void type...
774 Support flag bits are:
775 1: basic void declarations.
776 2: arrays of pointers to functions returning void.
777 4: operations between pointers to and addresses of void functions.
802 if cc -S -DTRY=7 try.c >.out 2>&1 ; then
804 echo "It appears to support void fully."
805 if $contains warning .out >/dev/null 2>&1; then
806 echo "However, you might get some warnings that look like this:"
810 echo "Hmm, you compiler has some difficulty with void. Checking further..."
811 if cc -S -DTRY=1 try.c >/dev/null 2>&1 ; then
812 echo "It supports 1..."
813 if cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then
815 echo "And it supports 2 but not 4."
817 echo "It doesn't support 2..."
818 if cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then
820 echo "But it supports 4."
823 echo "And it doesn't support 4."
827 echo "There is no support at all for void."
833 rp="Your void support flags add up to what? [$dflt]"
839 : see what type of char stdio uses.
841 if $contains 'unsigned.*char.*_ptr;' /usr/include/stdio.h >/dev/null 2>&1 ; then
842 echo "Your stdio uses unsigned chars."
843 stdchar="unsigned char"
845 echo "Your stdio uses signed chars."
849 : preserve RCS keywords in files with variable substitution, grrr
853 : set up shell script to do ~ expansion
859 echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
862 if $test -f /bin/csh; then
863 /bin/csh -f -c "glob \$1"
866 name=\`$expr x\$1 : '..\([^/]*\)'\`
867 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
868 if $test ! -d "\$dir"; then
870 echo "\$me: can't locate home directory for: \$name" >&2
875 echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
891 : determine where public executables go
894 dflt=`loc . /bin /usr/local/bin /usr/lbin /usr/local /usr/bin`
900 while $test "$cont" ; do
902 rp="Where do you want to put the public executables? [$dflt]"
907 if test -d $bin; then
911 rp="Directory $bin doesn't exist. Use that name anyway? [$dflt]"
921 : determine where manual pages go
924 dflt=`loc . /usr/man/man1 /usr/man/mann /usr/man/local/man1 /usr/man/u_man/man1 /usr/man/man1`
930 while $test "$cont" ; do
932 rp="Where do the manual pages (source) go? [$dflt]"
935 mansrc=`filexp "$ans"`
936 if test -d $mansrc; then
940 rp="Directory $mansrc doesn't exist. Use that name anyway? [$dflt]"
961 : get C preprocessor symbols handy
963 echo $attrlist | $tr '[ - ]' '[\012-\012]' >Cppsym.know
975 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
977 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
980 unknown="\$unknown \$sym"
990 echo \$* | $tr '[ - ]' '[\012-\012]' | $sed -e 's/\(.*\)/\\
992 exit 0; _ _ _ _\1\\ \1\\
995 echo exit 1 >>/tmp/Cppsym\$\$
996 $cpp $cppminus </tmp/Cppsym\$\$ >/tmp/Cppsym2\$\$
998 true) awk '\$6 != "" {print substr(\$6,2,100)}' </tmp/Cppsym2\$\$ ;;
1004 $rm -f /tmp/Cppsym\$\$ /tmp/Cppsym2\$\$
1009 echo "Your C preprocessor defines the following symbols:"
1010 Cppsym -l $attrlist >Cppsym.true
1012 rmlist="$rmlist Cppsym Cppsym.know Cppsym.true"
1014 : see what memory models we can support
1017 if Cppsym pdp11; then
1018 dflt='unsplit split'
1020 ans=`loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
1023 *) if $test -d /lib/small || $test -d /usr/lib/small; then
1028 if $test -d /lib/medium || $test -d /usr/lib/medium; then
1031 if $test -d /lib/large || $test -d /usr/lib/large; then
1034 if $test -d /lib/huge || $test -d /usr/lib/huge; then
1040 *) dflt="$models" ;;
1044 Some systems have different model sizes. On most systems they are called
1045 small, medium, large, and huge. On the PDP11 they are called unsplit and
1046 split. If your system doesn't support different memory models, say "none".
1047 If you wish to force everything to one memory model, say "none" here and
1048 put the appropriate flags later when it asks you for other cc and ld flags.
1049 Venix systems may wish to put "none" and let the compiler figure things out.
1050 (In the following question multiple model names should be space separated.)
1053 rp="Which models are supported? [$dflt]"
1070 if $contains '-i' $mansrc/ld.1 >/dev/null 2>&1 || \
1071 $contains '-i' $mansrc/cc.1 >/dev/null 2>&1; then
1079 rp="What flag indicates separate I and D space? [$dflt]"
1088 *large*|*small*|*medium*|*huge*)
1095 rp="What flag indicates large model? [$dflt]"
1111 rp="What flag indicates huge model? [$dflt]"
1127 rp="What flag indicates medium model? [$dflt]"
1135 *) medium="$large";;
1143 rp="What flag indicates small model? [$dflt]"
1155 echo "Unrecognized memory models--you may have to edit Makefile.SH"
1161 *) dflt="$ccflags";;
1164 rp="Any additional cc flags? [$dflt]"
1179 *) dflt="$ldflags";;
1182 rp="Any additional ld flags? [$dflt]"
1190 : see if we need a special compiler
1204 if $contains '\-M' $mansrc/cc.1 >/dev/null 2>&1 ; then
1218 On some systems the default C compiler will not resolve multiple global
1219 references that happen to have the same name. On some such systems the
1220 "Mcc" command may be used to force these to be resolved. On other systems
1221 a "cc -M" command is required. (Note that the -M flag on other systems
1222 indicates a memory model to use!) What command will force resolution on
1224 $echo $n "this system? [$dflt] $c"
1225 rp="Command to resolve multiple refs? [$dflt]"
1229 echo "Not a USG system--assuming cc can resolve multiple definitions."
1233 : see if we should include -lnm
1235 if $test -r /usr/lib/libnm.a || $test -r /usr/local/lib/libnm.a ; then
1236 echo "New math library found."
1239 ans=`loc libnm.a x $libpth`
1242 echo "No nm library found--the normal math library will have to do."
1246 echo "New math library found in $ans."
1253 echo "End of configuration questions."
1256 : create config.sh file
1258 if test -d ../UU; then
1261 echo "Creating config.sh..."
1262 $spitshell <<EOT >config.sh
1265 # This file was produced by running the Configure script.
1267 d_eunice='$d_eunice'
1268 eunicefix='$eunicefix'
1298 contains='$contains'
1300 cppminus='$cppminus'
1302 d_charsprf='$d_charsprf'
1304 d_statblks='$d_statblks'
1305 d_stdstdio='$d_stdstdio'
1306 d_strctcpy='$d_strctcpy'
1307 d_tminsys='$d_tminsys'
1309 d_voidsig='$d_voidsig'
1325 spitshell='$spitshell'
1327 sharpbang='$sharpbang'
1330 voidflags='$voidflags'
1331 defvoidused='$defvoidused'
1339 echo "If you didn't make any mistakes, then just type a carriage return here."
1340 rp="If you need to edit config.sh, do it as a shell escape here:"
1345 *) : in case they cannot read
1350 echo "Doing variable substitutions on .SH files..."
1351 set x `$grep '\.SH' <MANIFEST | awk '{print $1}'`
1354 0) set x *.SH; shift;;
1356 if test ! -f $1; then
1362 dir=`$expr X$file : 'X\(.*\)/'`
1363 file=`$expr X$file : 'X.*/\(.*\)'`
1364 (cd $dir && . $file)
1371 if test -f config.h.SH; then
1372 if test ! -f config.h; then
1373 : oops, they left it out of MANIFEST, probably, so do it anyway.
1378 if $contains '^depend:' Makefile >/dev/null 2>&1; then
1382 Now you need to generate make dependencies by running "make depend".
1383 You might prefer to run it in background: "make depend > makedepend.out &"
1384 It can take a while, so you might not want to run it right now.
1387 rp="Run make depend now? [$dflt]"
1392 echo "Now you must run a make."
1394 *) echo "You must run 'make depend' then 'make'."
1397 elif test -f Makefile; then
1399 echo "Now you must run a make."
1405 cd UU && $rm -f $rmlist