Annotation of micropolis/src/tcl/config, revision 1.1.1.1

1.1       root        1: #!/bin/csh -f
                      2: #
                      3: # This script should be executed to configure the Tcl source directory
                      4: # for a particular system.  It probes the system for various header
                      5: # files and library object files.  Where things needed by Tcl are missing,
                      6: # substitute versions are included from the "compat" subdirectory.
                      7: #
                      8: # $Header: /user6/ouster/tcl/RCS/config,v 1.30 92/05/13 09:27:18 ouster Exp $ SPRITE (Berkeley)
                      9: #
                     10: # Copyright 1991, 1992 Regents of the University of California
                     11: # Permission to use, copy, modify, and distribute this
                     12: # software and its documentation for any purpose and without
                     13: # fee is hereby granted, provided that this copyright
                     14: # notice appears in all copies.  The University of California
                     15: # makes no representations about the suitability of this
                     16: # software for any purpose.  It is provided "as is" without
                     17: # express or implied warranty.
                     18: 
                     19: #--------------------------------------------------------------
                     20: # The variable definitions below configure this script:  they
                     21: # tell where system-defined things are kept (so this program
                     22: # can tell whether the system contains certain features needed
                     23: # by Tcl), and they indicate which Tcl files to modify to
                     24: # reflect the configuration.
                     25: 
                     26: # Directory containing system include files:
                     27: 
                     28: set includeDir="/usr/include"
                     29: 
                     30: # Archive file containing object code for standard C library:
                     31: 
                     32: set libc="/usr/lib/libc.a"
                     33: 
                     34: # Makefile to modify:
                     35: 
                     36: set makefile="makefile"
                     37: 
                     38: # Header file to modify to hold #defines about system configuration:
                     39: 
                     40: set config="tclunix.h"
                     41: #--------------------------------------------------------------
                     42: 
                     43: set changes=0
                     44: unset time
                     45: 
                     46: # First make sure that the configuration variables have been
                     47: # set in a reasonable fashion.
                     48: 
                     49: if ( ! -r $includeDir/stdio.h ) then
                     50:     echo "- ERROR\!\! $includeDir doesn't seem to contain standard system"
                     51:     echo "  include files.  Please edit config to set the includeDir"
                     52:     echo "  variable."
                     53:     exit(1)
                     54: endif
                     55: if ( ! -r $libc ) then
                     56:     echo "- ERROR\!\! C library $libc doesn\'t exist.  Please edit config"
                     57:     echo "  to set the libc variable."
                     58:     exit(1)
                     59: endif
                     60: nm -p $libc > tmp.libc
                     61: if ( $status != 0 ) then
                     62:     echo "- ERROR\!\!  Nm failed to extract names of system-supplied library"
                     63:     echo "  procedures from $libc.  You'll have to modify config by hand to"
                     64:     echo "  fix the problem (whatever it is)."
                     65:     exit(1)
                     66: endif
                     67: 
                     68: # Since nm produces different output on different machines, the code
                     69: # below attempts to guess what pattern to grep for in the nm output.
                     70: 
                     71: set pattern="[ADIT]"
                     72: set x=`grep printf tmp.libc | grep -c CODE`
                     73: if ( $x ) then
                     74:     set pattern=CODE
                     75: endif
                     76: set x=`grep printf tmp.libc | grep -c extern`
                     77: if ( $x ) then
                     78:     set pattern="|extern|"
                     79: endif
                     80: 
                     81: # Check in the C library for particular library procedures and
                     82: # variables needed by Tcl.
                     83: 
                     84: set gettod=`grep gettimeofday tmp.libc | grep -c "$pattern"`
                     85: if ( $gettod > 1 ) set gettod=1
                     86: set getwd=`grep getwd tmp.libc | grep -c "$pattern"`
                     87: if ( $getwd > 1 ) set getwd=1
                     88: set opendir=`grep opendir tmp.libc | grep -c "$pattern"`
                     89: if ( $opendir > 1 ) set opendir=1
                     90: set strerror=`grep strerror tmp.libc | grep -c "$pattern"`
                     91: if ( $strerror > 1 ) set strerror=1
                     92: set strstr=`grep strstr tmp.libc | grep -c "$pattern"`
                     93: if ( $strstr > 1 ) set strstr=1
                     94: set strtod=`grep strtod tmp.libc | grep -c "$pattern"`
                     95: if ( $strtod > 1 ) set strtod=1
                     96: set strtol=`grep strtol tmp.libc | grep -c "$pattern"`
                     97: if ( $strtol > 1 ) set strtol=1
                     98: set strtoul=`grep strtoul tmp.libc | grep -c "$pattern"`
                     99: if ( $strtoul > 1 ) set strtoul=1
                    100: set sys_errlist=`grep sys_errlist tmp.libc | grep -c "$pattern"`
                    101: if ( $sys_errlist > 1 ) set sys_errlist=1
                    102: \rm tmp.libc
                    103: 
                    104: # Next, install header files that aren't present in /usr/include.
                    105: 
                    106: set extraHdrs=""
                    107: foreach i (dirent.h limits.h)
                    108:     \rm -f $i
                    109:     if ( ! -r $includeDir/$i ) then
                    110:        cp compat/$i .
                    111:        set extraHdrs="$extraHdrs $i"
                    112:     endif
                    113: end
                    114: set stdlibOK=0
                    115: \rm -f stdlib.h
                    116: if ( -r $includeDir/stdlib.h ) then
                    117:     # The check below is needed because SunOS has a stdlib that
                    118:     # doesn't declare strtod and other procedures, so we have to
                    119:     # use ours instead.
                    120: 
                    121:     set chk1=`grep -c strtol $includeDir/stdlib.h`
                    122:     set chk2=`grep -c strtoul $includeDir/stdlib.h`
                    123:     set chk3=`grep -c strtod $includeDir/stdlib.h`
                    124:     if ( $chk1 > 0 && $chk2 > 0 && $chk3 > 0 ) then
                    125:        set stdlibOK=1
                    126:     endif
                    127: endif
                    128: # XXX: Un-Kludge around sun acc, which doesn't need this...
                    129: set stdlibOK=1
                    130: if ( ! $stdlibOK ) then
                    131:     cp compat/stdlib.h .
                    132:     set extraHdrs="$extraHdrs stdlib.h"
                    133: endif
                    134: 
                    135: # Even if string.h exists it's not complete on all systems.  If
                    136: # some of the procedures we need are missing from the library, then
                    137: # also install a Tcl-specific string.h.
                    138: 
                    139: \rm -f string.h
                    140: if ( ! $strstr || ! $strtoul || ! -r $includeDir/string.h ) then
                    141:     cp compat/string.h .
                    142:     set extraHdrs="$extraHdrs string.h"
                    143: endif
                    144: if ( "$extraHdrs" != "" ) then
                    145:     echo "- Substitutes will be used for the following header files,"
                    146:     echo "  which aren't in ${includeDir} or aren't complete:"
                    147:     echo "     $extraHdrs"
                    148:     set changes=1
                    149: endif
                    150: 
                    151: # Even if strtoul exists, it is bogus on some AIX systems.  Detect
                    152: # this and pretend the system version doesn't exist if it's bogus.
                    153: 
                    154: if ( $strtoul ) then
                    155:     cp compat/teststrtoul.c test.c
                    156:     make configtest >& /dev/null
                    157:     if ( $status == 0 ) then
                    158:        ./a.out
                    159:        if ( $status != 0 ) then
                    160:            set strtoul=0
                    161:        endif
                    162:     endif
                    163:     \rm -f a.out test.c
                    164: endif
                    165: 
                    166: # Next, install C procedures for missing library functions.
                    167: 
                    168: set extraLibs=""
                    169: \rm -f strerror.c
                    170: if ( ! $strerror ) then
                    171:     set extraLibs="$extraLibs strerror"
                    172:     cp compat/strerror.c .
                    173: endif
                    174: \rm -f opendir.c
                    175: if ( ! $opendir ) then
                    176:     set extraLibs="$extraLibs opendir"
                    177:     cp compat/opendir.c .
                    178:     \rm -f dirent.h
                    179:     cp compat/dirent2.h dirent.h
                    180:     echo "- No opendir/readdir/closedir library exists in this system,"
                    181:     echo "  so substitutes will be provided.  This system better have"
                    182:     echo "  V7-style directories\!"
                    183: endif
                    184: \rm -f strstr.c
                    185: if ( ! $strstr ) then
                    186:     set extraLibs="$extraLibs strstr"
                    187:     cp compat/strstr.c .
                    188: endif
                    189: \rm -f strtod.c
                    190: if ( ! $strtod ) then
                    191:     set extraLibs="$extraLibs strtod"
                    192:     cp compat/strtod.c .
                    193: endif
                    194: \rm -f strtol.c
                    195: if ( ! $strtol ) then
                    196:     set extraLibs="$extraLibs strtol"
                    197:     cp compat/strtol.c .
                    198: endif
                    199: \rm -f strtoul.c
                    200: if ( ! $strtoul ) then
                    201:     set extraLibs="$extraLibs strtoul"
                    202:     cp compat/strtoul.c .
                    203: endif
                    204: if ( "$extraLibs" != "" ) then
                    205:     echo "- Substitutes will be used for the following library procedures,"
                    206:     echo "  which aren't in ${libc} or don't work correctly:"
                    207:     echo "     $extraLibs"
                    208:     set changes=1
                    209: endif
                    210: 
                    211: # The following statements determine whether ranlib should be used
                    212: # in the Makefile.  On System-V systems it shouldn't.  The only way
                    213: # to figure this out is to run ranlib and see if it complains (ranlib
                    214: # actually exists on some Sys-V systems, but it returns an error if
                    215: # you run it).
                    216: 
                    217: set ranlibOK=0
                    218: cat > ranlibtest.c << EOF
                    219: #include <stdio.h>
                    220: main (argc, argv)
                    221:     int    argc;
                    222:     char **argv;
                    223: {
                    224:     printf ("Hello, world.\n");
                    225: }
                    226: EOF
                    227: cc -c ranlibtest.c
                    228: ar cru ranlibtest.a ranlibtest.o
                    229: ranlib ranlibtest.a >& /dev/null
                    230: if ( $status == 0 ) then
                    231:     set ranlibOK=1
                    232: else
                    233:     echo "- This system appears to be a System V one where ranlib isn't"
                    234:     echo "  used.  The ranlib commands will be removed from Makefile."
                    235:     set changes=1
                    236: endif
                    237: \rm -f ranlibtest.*
                    238: 
                    239: # Modify the Makefile to include supplemental library sources, if needed.
                    240: 
                    241: set compatObjs=""
                    242: foreach i ($extraLibs)
                    243:     set compatObjs="$compatObjs $i.o"
                    244: end
                    245: #if ( ! -e $makefile.bak ) mv $makefile $makefile.bak
                    246: mv $makefile $makefile.bak
                    247: if ( $ranlibOK ) then
                    248:     sed -e "s/COMPAT_OBJS =/COMPAT_OBJS =$compatObjs/" $makefile.bak > $makefile
                    249: else
                    250:     sed -e "s/COMPAT_OBJS =/COMPAT_OBJS =$compatObjs/" \
                    251:        -e "/ranlib/d" $makefile.bak > $makefile
                    252: endif
                    253: 
                    254: # Set the #defines in tclUnix.h to provide various pieces of system
                    255: # configuration information at compile time (existence of header files,
                    256: # variables, type definitions, etc.)
                    257: 
                    258: if ( ! $gettod ) then
                    259:     echo "- There's no gettimeofday in ${libc} so Tcl will use"
                    260:     echo '  times for the "time" command.'
                    261:     set changes=1
                    262: endif
                    263: if ( ! $getwd ) then
                    264:     echo "- There's no getwd in ${libc} so Tcl will use"
                    265:     echo '  getcwd for the "pwd" command.'
                    266:     set changes=1
                    267: endif
                    268: set errlist=1
                    269: if ( ! $sys_errlist && ! $strerror ) then
                    270:     echo "- Neither strerror nor sys_errlist is defined in ${libc} so"
                    271:     echo "  Tcl will make a guess about errno-related messages."
                    272:     set errlist=0
                    273:     set changes=1
                    274: endif
                    275: set sysTime=0
                    276: if ( -r $includeDir/sys/time.h ) then
                    277:     set sysTime=1
                    278: endif
                    279: set sysWait=0
                    280: set unionWait=0
                    281: if ( -r $includeDir/sys/wait.h ) then
                    282:     set sysWait=1
                    283:     cp compat/testwait.c test.c
                    284:     make configtest >& /dev/null
                    285:     if ( $status == 0 ) then
                    286:        set unionWait=1
                    287:     endif
                    288:     \rm -f a.out test.c
                    289: endif
                    290: set pid_t=1
                    291: cp compat/testpid.c test.c
                    292: make configtest >& /dev/null
                    293: if ( $status != 0 ) then
                    294:     set pid_t=0
                    295:     echo "- The type pid_t isn't defined in <sys/types.h> so Tcl will"
                    296:     echo '  use "int" instead.'
                    297: endif
                    298: \rm -f a.out test.c
                    299: set uid_t=1
                    300: cp compat/testuid.c test.c
                    301: make configtest >& /dev/null
                    302: if ( $status != 0 ) then
                    303:     set uid_t=0
                    304:     echo "- The type uid_t isn't defined in <sys/types.h> so Tcl will"
                    305:     echo '  use "int" instead.'
                    306: endif
                    307: \rm -f a.out test.c
                    308: if ( ! -e $config.bak ) mv $config $config.bak
                    309: set x=\.\*\$
                    310: sed -e "s/define TCL_GETTOD 1/define TCL_GETTOD $gettod/" \
                    311:     -e "s/define TCL_GETWD 1/define TCL_GETWD $getwd/" \
                    312:     -e "s/define TCL_SYS_ERRLIST 1/define TCL_SYS_ERRLIST $errlist/" \
                    313:     -e "s/define TCL_SYS_TIME_H 1/define TCL_SYS_TIME_H $sysTime/" \
                    314:     -e "s/define TCL_SYS_WAIT_H 1/define TCL_SYS_WAIT_H $sysWait/" \
                    315:     -e "s/define TCL_UNION_WAIT 1/define TCL_UNION_WAIT $unionWait/" \
                    316:     -e "s/define TCL_PID_T 1/define TCL_PID_T $pid_t/" \
                    317:     -e "s/define TCL_UID_T 1/define TCL_UID_T $uid_t/" \
                    318: $config.bak > $config
                    319: 
                    320: if ( ! $changes ) then
                    321:     echo "- No special modifications were needed for this system."
                    322: endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.