|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.