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.6 88/02/02 11:20:07 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
113 echo "Beginning of configuration questions for $package kit."
114 : Eunice requires " " instead of "", can you believe it
119 libpth='/usr/lib /usr/local/lib /lib'
120 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
121 rmlist='kit[1-9]isdone kit[1-9][0-9]isdone'
122 trap 'echo " "; rm -f $rmlist; exit 1' 1 2 3
123 attrlist="mc68000 sun gcos unix ibm gimpel interdata tss os mert pyr"
124 attrlist="$attrlist vax pdp11 i8086 z8000 u3b2 u3b5 u3b20 u3b200"
125 attrlist="$attrlist ns32000 ns16000 iAPX286 mc300 mc500 mc700 sparc"
126 pth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /etc /usr/lib"
129 : some greps do not return status, grrr.
130 echo "grimblepritz" >grimble
131 if grep blurfldyick grimble >/dev/null 2>&1 ; then
133 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
139 : the following should work in any shell
143 echo "AGH! Grep doesn't return a status. Attempting remedial action."
144 cat >contains <<'EOSS'
145 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
150 : first determine how to suppress newline on echo command
151 echo "Checking echo to see how to suppress newlines..."
152 (echo "hi there\c" ; echo " ") >.echotmp
153 if $contains c .echotmp >/dev/null 2>&1 ; then
164 echo $n "Type carriage return to continue. Your cursor should be here-->$c"
168 : now set up to do reads with possible shell escape and default assignment
171 while expr "X\$ans" : "X!" >/dev/null; do
180 set \`expr "X\$ans" : "X!\(.*\)\$"\`
193 : general instructions
196 This installation shell script will examine your system and ask you questions
197 to determine how the $package package should be installed. If you get stuck
198 on a question, you may use a ! shell escape to start a subshell or execute
199 a command. Many of the questions will have default answers in square
200 brackets--typing carriage return will give you the default.
202 On some of the questions which ask for file or directory names you are
203 allowed to use the ~name construct to specify the login directory belonging
204 to "name", even if you don't have a shell which knows about that. Questions
205 where this is allowed will be marked "(~name ok)".
208 rp="[Type carriage return to continue]"
213 Much effort has been expended to ensure that this shell script will run
214 on any Unix system. If despite that it blows up on you, your best bet is
215 to edit Configure and run it again. Also, let me (lwall@jpl-devvax.jpl.nasa.gov)
216 know how I blew it. If you can't run Configure for some reason, you'll have
217 to generate a config.sh file by hand.
219 This installation script affects things in two ways: 1) it may do direct
220 variable substitutions on some of the files included in this kit, and
221 2) it builds a config.h file for inclusion in C programs. You may edit
222 any of these files as the need arises after running this script.
224 If you make a mistake on a question, there is no easy way to back up to it
225 currently. The easiest thing to do is to edit config.sh and rerun all the
226 SH files. Configure will offer to let you do this before it runs the SH files.
229 rp="[Type carriage return to continue]"
233 : get old answers, if there is a config file out there
234 if test -f ../config.sh; then
237 rp="I see a config.sh file. Did Configure make it on THIS system? [$dflt]"
241 n*) echo "OK, I'll ignore it.";;
242 *) echo "Fetching default answers from your old config.sh file..."
252 : find out where common programs are
254 echo "Locating common programs..."
267 if test -d \$dir/\$thing; then
273 if test -f \$dir/\$thing; then
304 for file in $loclist; do
305 xxx=`loc $file $file $pth`
310 echo $file is in $xxx.
313 echo "I don't know where $file is. I hope it's in everyone's PATH."
318 echo "Don't worry if any of the following aren't found..."
320 for file in $trylist; do
321 xxx=`loc $file $file $pth`
326 echo $file is in $xxx.
329 echo "I don't see $file out there, $ans."
336 echo "Substituting grep for egrep."
342 echo "Hopefully test is built into your sh."
347 rp="Is your "'"'"test"'"'" built into sh? [$dflt] (OK to guess)"
360 echo "Hopefully echo is built into your sh."
364 echo "Checking compatibility between /bin/echo and builtin echo (if any)..."
365 $echo $n "hi there$c" >foo1
366 echo $n "hi there$c" >foo2
367 if cmp foo1 foo2 >/dev/null 2>&1; then
368 echo "They are compatible. In fact, they may be identical."
371 '-n') n='' c='\c' ans='\c' ;;
372 *) n='-n' c='' ans='-n' ;;
375 They are not compatible! You are probably running ksh on a non-USG system.
376 I'll have to use /bin/echo instead of the builtin, since Bourne shell doesn't
377 have echo built in and we may have to run some Bourne shell scripts. That
378 means I'll have to use $ans to suppress newlines now. Life is ridiculous.
381 rp="Your cursor should be here-->"
394 : get list of predefined functions in a handy place
396 if test -f /lib/libc.a; then
397 echo "Your C library is in /lib/libc.a. You're normal."
400 ans=`loc libc.a blurfl/dyick $libpth`
401 if test -f $ans; then
402 echo "Your C library is in $ans, of all places."
405 if test -f "$libc"; then
406 echo "Your C library is in $libc, like you said before."
410 I can't seem to find your C library. I've looked in the following places:
414 None of these seems to contain your C library. What is the full name
417 $echo $n "of your C library? $c"
418 rp='C library full name?'
425 $echo $n "Extracting names from $libc for later perusal...$c"
426 if ar t $libc > libc.list; then
430 echo "The archiver doesn't think $libc is a reasonable library."
431 echo "Trying nm instead..."
432 if nm -g $libc > libc.list; then
433 echo "Done. Maybe this is Unicos, or an Apollo?"
435 echo "That didn't work either. Giving up."
439 rmlist="$rmlist libc.list"
441 : make some quick guesses about what we are up against
444 if $contains SIGTSTP /usr/include/signal.h >/dev/null 2>&1 ; then
445 echo "Looks kind of like a BSD system, but we'll see..."
449 elif $contains fcntl libc.list >/dev/null 2>&1 ; then
450 echo "Looks kind of like a USG system, but we'll see..."
455 echo "Looks kind of like a version 7 system, but we'll see..."
460 if $contains vmssystem libc.list >/dev/null 2>&1 ; then
462 There is, however, a strange, musty smell in the air that reminds me of
463 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
465 echo "exit 0" >eunice
468 : it so happens the Eunice I know will not run shell scripts in Unix format
471 echo "Congratulations. You aren't running Eunice."
474 echo "exit 1" >eunice
476 if test -f /xenix; then
477 echo "Actually, this looks more like a XENIX system..."
481 echo "It's not Xenix..."
485 if test -f /venix; then
486 echo "Actually, this looks more like a VENIX system..."
493 echo "Nor is it Venix..."
497 chmod 755 bsd usg v7 eunice venix xenix
498 $eunicefix bsd usg v7 eunice venix xenix
499 rmlist="$rmlist bsd usg v7 eunice venix xenix"
501 : see if sh knows # comments
503 echo "Checking your sh to see if it knows about # comments..."
504 if sh -c '#' >/dev/null 2>&1 ; then
505 echo "Your sh handles # comments correctly."
509 echo "Okay, let's see if #! works on this system..."
510 echo "#!/bin/echo hi" > try
514 if test -s today; then
518 echo "#! /bin/echo hi" > try
522 if test -s today; then
531 echo "Your sh doesn't grok # comments--I will strip them later on."
533 echo "exec grep -v '^#'" >spitshell
536 spitshell=`pwd`/spitshell
537 echo "I presume that if # doesn't work, #! won't work either!"
541 : figure out how to guarantee sh startup
543 echo "Checking out how to guarantee sh startup..."
544 startsh=$sharpbang'/bin/sh'
545 echo "Let's see if '$startsh' works..."
557 echo "Nope. You may have to fix up the shell scripts to make sure sh runs them."
561 : see how we invoke the C preprocessor
563 echo "Now, how can we feed standard input to your C preprocessor..."
564 cat <<'EOT' >testcpp.c
569 echo 'Maybe "/lib/cpp" will work...'
570 /lib/cpp <testcpp.c >testcpp.out 2>&1
571 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
576 echo 'Nope, maybe "/lib/cpp -" will work...'
577 /lib/cpp - <testcpp.c >testcpp.out 2>&1
578 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
583 echo 'No such luck...maybe "cc -E" will work...'
584 cc -E <testcpp.c >testcpp.out 2>&1
585 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
590 echo 'Nixed again...maybe "cc -E -" will work...'
591 cc -E - <testcpp.c >testcpp.out 2>&1
592 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
593 echo "Hooray, it works! I was beginning to wonder."
597 echo 'Nope...maybe "cc -P" will work...'
598 cc -P <testcpp.c >testcpp.out 2>&1
599 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
600 echo "Yup, that does."
604 echo 'Nope...maybe "cc -P -" will work...'
605 cc -P - <testcpp.c >testcpp.out 2>&1
606 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
607 echo "Yup, that does."
611 echo 'Hmm...perhaps you already told me...'
614 *) $cpp $cppminus <testcpp.c >testcpp.out 2>&1;;
616 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
617 echo "Hooray, you did! I was beginning to wonder."
619 echo 'Uh-uh. Time to get fancy...'
620 echo 'Trying (cat >/tmp/$$.c; cc -E /tmp/$$.c; rm /tmp/$$.c)'
621 cpp='(cat >/tmp/$$.c; cc -E /tmp/$$.c; rm /tmp/$$.c)'
623 $cpp <testcpp.c >testcpp.out 2>&1
624 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
628 $echo $n "No dice. I can't find a C preprocessor. Name one: $c"
629 rp='Name a C preprocessor:'
632 $cpp <testcpp.c >testcpp.out 2>&1
633 if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
634 echo "OK, that will do."
636 echo "Sorry, I can't get that to work. Go find one."
647 rm -f testcpp.c testcpp.out
649 : see if bcopy exists
651 if $contains bcopy libc.list >/dev/null 2>&1; then
652 echo 'bcopy() found.'
655 echo 'bcopy() not found.'
659 : see if sprintf is declared as int or pointer to char
661 if $contains 'char.*sprintf' /usr/include/stdio.h >/dev/null 2>&1 ; then
662 echo "Your sprintf() returns (char*)."
665 echo "Your sprintf() returns (int)."
669 : see if crypt exists
671 if $contains crypt libc.list >/dev/null 2>&1; then
672 echo 'crypt() found.'
675 echo 'crypt() not found.'
682 if $contains index libc.list >/dev/null 2>&1 ; then
683 echo "Your system appears to use index() and rindex() rather than strchr()"
684 $echo $n "and strrchr(). Is this correct? [$dflt] $c"
685 rp='index() rather than strchr()? [$dflt]'
688 n*|f*) d_index="$define" ;;
689 *) d_index="$undef" ;;
692 echo "Your system appears to use strchr() and strrchr() rather than index()"
693 $echo $n "and rindex(). Is this correct? [$dflt] $c"
694 rp='strchr() rather than index()? [$dflt]'
697 n*|f*) d_index="$undef" ;;
698 *) d_index="$define" ;;
702 : see if stat knows about block sizes
704 if $contains 'st_blocks;' /usr/include/sys/stat.h >/dev/null 2>&1 ; then
705 if $contains 'st_blksize;' /usr/include/sys/stat.h >/dev/null 2>&1 ; then
706 echo "Your stat knows about block sizes."
709 echo "Your stat doesn't know about block sizes."
713 echo "Your stat doesn't know about block sizes."
717 : see if stdio is really std
719 if $contains 'char.*_ptr;' /usr/include/stdio.h >/dev/null 2>&1 ; then
720 if $contains '_cnt;' /usr/include/stdio.h >/dev/null 2>&1 ; then
721 echo "Your stdio is pretty std."
724 echo "Your stdio isn't very std."
728 echo "Your stdio isn't very std."
732 : check for structure copying
734 echo "Checking to see if your C compiler can copy structs..."
745 if cc -c try.c >/dev/null 2>&1 ; then
750 echo "Nope, it can't."
754 : see if struct tm is defined in sys/time.h
756 if $contains 'struct tm' /usr/include/time.h >/dev/null 2>&1 ; then
757 echo "You have struct tm defined in <time.h> rather than <sys/time.h>."
760 echo "You have struct tm defined in <sys/time.h> rather than <time.h>."
764 : see if there is a vfork
766 if $contains vfork libc.list >/dev/null 2>&1 ; then
767 echo "vfork() found."
770 echo "No vfork() found--will use fork() instead."
774 : see if signal is declared as pointer to function returning int or void
776 if $contains 'void.*signal' /usr/include/signal.h >/dev/null 2>&1 ; then
777 echo "You have void (*signal())() instead of int."
780 echo "You have int (*signal())() instead of void."
784 : check for void type
787 Checking to see how well your C compiler groks the void type...
789 Support flag bits are:
790 1: basic void declarations.
791 2: arrays of pointers to functions returning void.
792 4: operations between pointers to and addresses of void functions.
817 if cc -S -DTRY=7 try.c >.out 2>&1 ; then
819 echo "It appears to support void fully."
820 if $contains warning .out >/dev/null 2>&1; then
821 echo "However, you might get some warnings that look like this:"
825 echo "Hmm, you compiler has some difficulty with void. Checking further..."
826 if cc -S -DTRY=1 try.c >/dev/null 2>&1 ; then
827 echo "It supports 1..."
828 if cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then
830 echo "And it supports 2 but not 4."
832 echo "It doesn't support 2..."
833 if cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then
835 echo "But it supports 4."
838 echo "And it doesn't support 4."
842 echo "There is no support at all for void."
848 rp="Your void support flags add up to what? [$dflt]"
854 : see what type of char stdio uses.
856 if $contains 'unsigned.*char.*_ptr;' /usr/include/stdio.h >/dev/null 2>&1 ; then
857 echo "Your stdio uses unsigned chars."
858 stdchar="unsigned char"
860 echo "Your stdio uses signed chars."
864 : preserve RCS keywords in files with variable substitution, grrr
868 : set up shell script to do ~ expansion
874 echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
877 if $test -f /bin/csh; then
878 /bin/csh -f -c "glob \$1"
881 name=\`$expr x\$1 : '..\([^/]*\)'\`
882 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
883 if $test ! -d "\$dir"; then
885 echo "\$me: can't locate home directory for: \$name" >&2
890 echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
906 : determine where public executables go
909 dflt=`loc . /bin /usr/local/bin /usr/lbin /usr/local /usr/bin`
915 while $test "$cont" ; do
917 rp="Where do you want to put the public executables? [$dflt]"
922 if test -d $bin; then
926 rp="Directory $bin doesn't exist. Use that name anyway? [$dflt]"
936 : determine where manual pages go
939 dflt=`loc . /usr/man/man1 /usr/man/mann /usr/man/local/man1 /usr/man/u_man/man1 /usr/man/man1`
945 while $test "$cont" ; do
947 rp="Where do the manual pages (source) go? [$dflt]"
950 mansrc=`filexp "$ans"`
951 if test -d $mansrc; then
955 rp="Directory $mansrc doesn't exist. Use that name anyway? [$dflt]"
976 : get C preprocessor symbols handy
978 echo $attrlist | $tr '[ - ]' '[\012-\012]' >Cppsym.know
990 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
992 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
995 unknown="\$unknown \$sym"
1005 echo \$* | $tr '[ - ]' '[\012-\012]' | $sed -e 's/\(.*\)/\\
1007 exit 0; _ _ _ _\1\\ \1\\
1010 echo exit 1 >>/tmp/Cppsym\$\$
1011 $cpp $cppminus </tmp/Cppsym\$\$ >/tmp/Cppsym2\$\$
1013 true) awk 'NF > 5 {print substr(\$6,2,100)}' </tmp/Cppsym2\$\$ ;;
1019 $rm -f /tmp/Cppsym\$\$ /tmp/Cppsym2\$\$
1024 echo "Your C preprocessor defines the following symbols:"
1025 Cppsym -l $attrlist >Cppsym.true
1027 rmlist="$rmlist Cppsym Cppsym.know Cppsym.true"
1029 : see what memory models we can support
1032 if Cppsym pdp11; then
1033 dflt='unsplit split'
1035 ans=`loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
1038 *) if $test -d /lib/small || $test -d /usr/lib/small; then
1043 if $test -d /lib/medium || $test -d /usr/lib/medium; then
1046 if $test -d /lib/large || $test -d /usr/lib/large; then
1049 if $test -d /lib/huge || $test -d /usr/lib/huge; then
1055 *) dflt="$models" ;;
1059 Some systems have different model sizes. On most systems they are called
1060 small, medium, large, and huge. On the PDP11 they are called unsplit and
1061 split. If your system doesn't support different memory models, say "none".
1062 If you wish to force everything to one memory model, say "none" here and
1063 put the appropriate flags later when it asks you for other cc and ld flags.
1064 Venix systems may wish to put "none" and let the compiler figure things out.
1065 (In the following question multiple model names should be space separated.)
1068 rp="Which models are supported? [$dflt]"
1085 if $contains '-i' $mansrc/ld.1 >/dev/null 2>&1 || \
1086 $contains '-i' $mansrc/cc.1 >/dev/null 2>&1; then
1094 rp="What flag indicates separate I and D space? [$dflt]"
1103 *large*|*small*|*medium*|*huge*)
1110 rp="What flag indicates large model? [$dflt]"
1126 rp="What flag indicates huge model? [$dflt]"
1142 rp="What flag indicates medium model? [$dflt]"
1150 *) medium="$large";;
1158 rp="What flag indicates small model? [$dflt]"
1170 echo "Unrecognized memory models--you may have to edit Makefile.SH"
1176 *) dflt="$ccflags";;
1179 rp="Any additional cc flags? [$dflt]"
1194 *) dflt="$ldflags";;
1197 rp="Any additional ld flags? [$dflt]"
1205 : see if we need a special compiler
1219 if $contains '\-M' $mansrc/cc.1 >/dev/null 2>&1 ; then
1233 On some systems the default C compiler will not resolve multiple global
1234 references that happen to have the same name. On some such systems the
1235 "Mcc" command may be used to force these to be resolved. On other systems
1236 a "cc -M" command is required. (Note that the -M flag on other systems
1237 indicates a memory model to use!) What command will force resolution on
1239 $echo $n "this system? [$dflt] $c"
1240 rp="Command to resolve multiple refs? [$dflt]"
1244 echo "Not a USG system--assuming cc can resolve multiple definitions."
1248 : see if symlink exists
1250 if $contains symlink libc.list >/dev/null 2>&1; then
1251 echo 'symlink() found.'
1254 echo 'symlink() not found.'
1258 : see if we should include -lnm
1260 if $test -r /usr/lib/libnm.a || $test -r /usr/local/lib/libnm.a ; then
1261 echo "New math library found."
1264 ans=`loc libnm.a x $libpth`
1267 echo "No nm library found--the normal math library will have to do."
1271 echo "New math library found in $ans."
1277 : determine which malloc to compile in
1279 case "$usemymalloc" in
1287 *) dflt="$usemymalloc"
1290 rp="Do you wish to attempt to use the malloc that comes with $package? [$dflt]"
1298 y*) mallocsrc='malloc.c'; mallocobj='malloc.o';;
1299 *) mallocsrc=''; mallocobj='';;
1303 echo "End of configuration questions."
1306 : create config.sh file
1308 if test -d ../UU; then
1311 echo "Creating config.sh..."
1312 $spitshell <<EOT >config.sh
1315 # This file was produced by running the Configure script.
1317 d_eunice='$d_eunice'
1318 eunicefix='$eunicefix'
1348 contains='$contains'
1350 cppminus='$cppminus'
1352 d_charsprf='$d_charsprf'
1355 d_statblks='$d_statblks'
1356 d_stdstdio='$d_stdstdio'
1357 d_strctcpy='$d_strctcpy'
1358 d_symlink='$d_symlink'
1359 d_tminsys='$d_tminsys'
1361 d_voidsig='$d_voidsig'
1364 mallocsrc='$mallocsrc'
1365 mallocobj='$mallocobj'
1366 usemymalloc='$usemymalloc'
1380 spitshell='$spitshell'
1382 sharpbang='$sharpbang'
1385 voidflags='$voidflags'
1386 defvoidused='$defvoidused'
1394 echo "If you didn't make any mistakes, then just type a carriage return here."
1395 rp="If you need to edit config.sh, do it as a shell escape here:"
1400 *) : in case they cannot read
1405 echo "Doing variable substitutions on .SH files..."
1406 set x `awk '{print $1}' <MANIFEST | $grep '\.SH'`
1409 0) set x *.SH; shift;;
1411 if test ! -f $1; then
1417 dir=`$expr X$file : 'X\(.*\)/'`
1418 file=`$expr X$file : 'X.*/\(.*\)'`
1419 (cd $dir && . $file)
1426 if test -f config.h.SH; then
1427 if test ! -f config.h; then
1428 : oops, they left it out of MANIFEST, probably, so do it anyway.
1433 if $contains '^depend:' Makefile >/dev/null 2>&1; then
1437 Now you need to generate make dependencies by running "make depend".
1438 You might prefer to run it in background: "make depend > makedepend.out &"
1439 It can take a while, so you might not want to run it right now.
1442 rp="Run make depend now? [$dflt]"
1447 echo "Now you must run a make."
1449 *) echo "You must run 'make depend' then 'make'."
1452 elif test -f Makefile; then
1454 echo "Now you must run a make."
1460 cd UU && $rm -f $rmlist