Annotation of XNU/bsd/conf/tools/doconf/doconf.csh, revision 1.1.1.1

1.1       root        1: #!/bin/csh -f
                      2: set path = ($path .)
                      3: ######################################################################
                      4: # HISTORY
                      5: #  1-Dec-87  Michael Young (mwyoung) at Carnegie-Mellon University
                      6: #      Added "-verbose" switch, so this script produces no output
                      7: #      in the normal case.
                      8: #
                      9: # 10-Oct-87  Mike Accetta (mja) at Carnegie-Mellon University
                     10: #      Flushed cmu_*.h and spin_locks.h
                     11: #      [ V5.1(XF18) ]
                     12: #
                     13: #  6-Apr-87  Avadis Tevanian (avie) at Carnegie-Mellon University
                     14: #      Use MASTER.local and MASTER.<machine>.local for generation of
                     15: #      configuration files in addition to MASTER and MASTER.<machine>.
                     16: #
                     17: # 25-Mar-87  Mike Accetta (mja) at Carnegie-Mellon University
                     18: #      Removed use of obsolete wb_*.h files when building the feature
                     19: #      list;  modified to save the previous configuration file and
                     20: #      display the differences between it and the new file.
                     21: #      [ V5.1(F8) ]
                     22: #
                     23: # 25-Mar-87  Avadis Tevanian (avie) at Carnegie-Mellon University
                     24: #      If there is no /etc/machine just print out a message telling
                     25: #      user to use the -cpu option.  I thought this script was supposed
                     26: #      to work even without a /etc/machine, but it doesn't... and this
                     27: #      is the easiest way out.
                     28: #
                     29: # 13-Mar-87  Mike Accetta (mja) at Carnegie-Mellon University
                     30: #      Added "romp_fpa.h" file to extra features for the RT.
                     31: #      [ V5.1(F7) ]
                     32: #
                     33: # 11-Mar-87  Mike Accetta (mja) at Carnegie-Mellon University
                     34: #      Updated to maintain the appropriate configuration features file
                     35: #      in the "machine" directory whenever the corresponding
                     36: #      configuration is generated.  This replaces the old mechanism of
                     37: #      storing this directly in the <sys/features.h> file since it was
                     38: #      machine dependent and also precluded building programs for more
                     39: #      than one configuration from the same set of sources.
                     40: #      [ V5.1(F6) ]
                     41: #
                     42: # 21-Feb-87  Mike Accetta (mja) at Carnegie-Mellon University
                     43: #      Fixed to require wired-in cpu type names for only those
                     44: #      machines where the kernel name differs from that provided by
                     45: #      /etc/machine (i.e. IBMRT => ca and SUN => sun3);  updated to
                     46: #      permit configuration descriptions in both machine indepedent
                     47: #      and dependent master configuration files so that attributes can
                     48: #      be grouped accordingly.
                     49: #      [ V5.1(F3) ]
                     50: #
                     51: # 17-Jan-87  Mike Accetta (mja) at Carnegie-Mellon University
                     52: #      Updated to work from any directory at the same level as
                     53: #      "conf"; generate configuration from both MASTER and
                     54: #      MASTER.<machine-type> files; added -cpu switch.
                     55: #      [ V5.1(F1) ]
                     56: #
                     57: # 18-Aug-86  Mike Accetta (mja) at Carnegie-Mellon University
                     58: #      Added -make switch and changed meaning of -config;  upgraded to
                     59: #      allow multiple attributes per configuration and to define
                     60: #      configurations in terms of these attributes within MASTER.
                     61: #
                     62: # 14-Apr-83  Mike Accetta (mja) at Carnegie-Mellon University
                     63: #      Added -config switch to only run /etc/config without 
                     64: #      "make depend" and "make".
                     65: #
                     66: ######################################################################
                     67: 
                     68: set prog=$0
                     69: set prog=$prog:t
                     70: set nonomatch
                     71: set OBJDIR=../BUILD
                     72: if ("`/usr/bin/uname`" == "Rhapsody" ) then
                     73: set CONFIG_DIR=/usr/local/bin
                     74: else
                     75: set CONFIG_DIR=/usr/bin
                     76: endif
                     77: 
                     78: unset domake
                     79: unset doconfig
                     80: unset beverbose
                     81: unset MACHINE
                     82: unset profile
                     83: 
                     84: while ($#argv >= 1)
                     85:     if ("$argv[1]" =~ -*) then
                     86:         switch ("$argv[1]")
                     87:        case "-c":
                     88:        case "-config":
                     89:            set doconfig
                     90:            breaksw
                     91:        case "-m":
                     92:        case "-make":
                     93:            set domake
                     94:            breaksw
                     95:        case "-cpu":
                     96:            if ($#argv < 2) then
                     97:                echo "${prog}: missing argument to ${argv[1]}"
                     98:                exit 1
                     99:            endif
                    100:            set MACHINE="$argv[2]"
                    101:            shift
                    102:            breaksw
                    103:        case "-d":
                    104:            if ($#argv < 2) then
                    105:                echo "${prog}: missing argument to ${argv[1]}"
                    106:                exit 1
                    107:            endif
                    108:            set OBJDIR="$argv[2]"
                    109:            shift
                    110:            breaksw
                    111:        case "-verbose":
                    112:            set beverbose
                    113:            breaksw
                    114:        case "-p":
                    115:        case "-profile":
                    116:            set profile
                    117:            breaksw
                    118:        default:
                    119:            echo "${prog}: ${argv[1]}: unknown switch"
                    120:            exit 1
                    121:            breaksw
                    122:        endsw
                    123:        shift
                    124:     else
                    125:        break
                    126:     endif
                    127: end
                    128: 
                    129: if ($#argv == 0) set argv=(GENERIC)
                    130: 
                    131: if (! $?MACHINE) then
                    132:     if (-d /NextApps) then
                    133:        set MACHINE=`hostinfo | awk '/MC680x0/ { printf("m68k") } /MC880x0/ { printf("m88k") }'`
                    134:     endif
                    135: endif
                    136: 
                    137: if (! $?MACHINE) then
                    138:     if (-f /etc/machine) then
                    139:            set MACHINE="`/etc/machine`"
                    140:     else
                    141:            echo "${prog}: no /etc/machine, specify machine type with -cpu"
                    142:            echo "${prog}: e.g. ${prog} -cpu VAX CONFIGURATION"
                    143:            exit 1
                    144:     endif
                    145: endif
                    146: 
                    147: set FEATURES_EXTRA=
                    148: 
                    149: switch ("$MACHINE")
                    150:     case IBMRT:
                    151:        set cpu=ca
                    152:        set ID=RT
                    153:        set FEATURES_EXTRA="romp_dualcall.h romp_fpa.h"
                    154:        breaksw
                    155:     case SUN:
                    156:        set cpu=sun3
                    157:        set ID=SUN3
                    158:        breaksw
                    159:     default:
                    160:        set cpu=`echo $MACHINE | tr A-Z a-z`
                    161:        set ID=`echo $MACHINE | tr a-z A-Z`
                    162:        breaksw
                    163: endsw
                    164: set FEATURES=../h/features.h
                    165: set FEATURES_H=(cs_*.h mach_*.h net_*.h\
                    166:                cputypes.h cpus.h vice.h\
                    167:                $FEATURES_EXTRA)
                    168: set MASTER_DIR=../conf
                    169: set MASTER =   ${MASTER_DIR}/MASTER
                    170: set MASTER_CPU=${MASTER}.${cpu}
                    171: 
                    172: set MASTER_LOCAL = ${MASTER}.local
                    173: set MASTER_CPU_LOCAL = ${MASTER_CPU}.local
                    174: if (! -f $MASTER_LOCAL) set MASTER_LOCAL = ""
                    175: if (! -f $MASTER_CPU_LOCAL) set MASTER_CPU_LOCAL = ""
                    176: 
                    177: if (! -d $OBJDIR) then
                    178:     echo "[ creating $OBJDIR ]"
                    179:     mkdir -p $OBJDIR
                    180: endif
                    181: 
                    182: foreach SYS ($argv)
                    183:     set SYSID=${SYS}_${ID}
                    184:     set SYSCONF=$OBJDIR/config.$SYSID
                    185:     set BLDDIR=$OBJDIR
                    186:     if ($?beverbose) then
                    187:        echo "[ generating $SYSID from $MASTER_DIR/MASTER{,.$cpu}{,.local} ]"
                    188:     endif
                    189:     echo +$SYS \
                    190:     | \
                    191:     cat $MASTER $MASTER_LOCAL $MASTER_CPU $MASTER_CPU_LOCAL - \
                    192:         $MASTER $MASTER_LOCAL $MASTER_CPU $MASTER_CPU_LOCAL \
                    193:     | \
                    194:     sed -n \
                    195:        -e "/^+/{" \
                    196:           -e "s;[-+];#&;gp" \
                    197:              -e 't loop' \
                    198:           -e ': loop' \
                    199:            -e 'n' \
                    200:           -e '/^#/b loop' \
                    201:           -e '/^$/b loop' \
                    202:           -e 's;^\([^#]*\).*#[         ]*<\(.*\)>[     ]*$;\2#\1;' \
                    203:              -e 't not' \
                    204:           -e 's;\([^#]*\).*;#\1;' \
                    205:              -e 't not' \
                    206:           -e ': not' \
                    207:           -e 's;[      ]*$;;' \
                    208:           -e 's;^\!\(.*\);\1#\!;' \
                    209:           -e 'p' \
                    210:              -e 't loop' \
                    211:            -e 'b loop' \
                    212:        -e '}' \
                    213:        -e "/^[^#]/d" \
                    214:        -e 's;  ; ;g' \
                    215:        -e "s;^# *\([^ ]*\)[ ]*=[ ]*\[\(.*\)\].*;\1#\2;p" \
                    216:     | \
                    217:     awk '-F#' '\
                    218: part == 0 && $1 != "" {\
                    219:        m[$1]=m[$1] " " $2;\
                    220:        next;\
                    221: }\
                    222: part == 0 && $1 == "" {\
                    223:        for (i=NF;i>1;i--){\
                    224:                s=substr($i,2);\
                    225:                c[++na]=substr($i,1,1);\
                    226:                a[na]=s;\
                    227:        }\
                    228:        while (na > 0){\
                    229:                s=a[na];\
                    230:                d=c[na--];\
                    231:                if (m[s] == "") {\
                    232:                        f[s]=d;\
                    233:                } else {\
                    234:                        nx=split(m[s],x," ");\
                    235:                        for (j=nx;j>0;j--) {\
                    236:                                z=x[j];\
                    237:                                a[++na]=z;\
                    238:                                c[na]=d;\
                    239:                        }\
                    240:                }\
                    241:        }\
                    242:        part=1;\
                    243:        next;\
                    244: }\
                    245: part != 0 {\
                    246:        if ($1 != "") {\
                    247:                n=split($1,x,",");\
                    248:                ok=0;\
                    249:                for (i=1;i<=n;i++) {\
                    250:                        if (f[x[i]] == "+") {\
                    251:                                ok=1;\
                    252:                        }\
                    253:                }\
                    254:                if (NF > 2 && ok == 0 || NF <= 2 && ok != 0) {\
                    255:                        print $2; \
                    256:                }\
                    257:        } else { \
                    258:                print $2; \
                    259:        }\
                    260: }\
                    261: ' >$SYSCONF.new
                    262:     if (-z $SYSCONF.new) then
                    263:        echo "${prog}: ${$SYSID}: no such configuration in $MASTER_DIR/MASTER{,.$cpu}"
                    264:        rm -f $SYSCONF.new
                    265:     endif
                    266:     if (! -d $BLDDIR) then
                    267:        echo "[ creating $BLDDIR ]"
                    268:        mkdir -p $BLDDIR
                    269:     endif
                    270: #
                    271: # These paths are used by config.
                    272: #
                    273: # "builddir" is the name of the directory where kernel binaries
                    274: # are put.  It is a single path element, never absolute, and is
                    275: # always relative to "objectdir".  "builddir" is used by config
                    276: # solely to determine where to put files created by "config" (e.g.
                    277: # the created Makefile and *.h's.)
                    278: #
                    279: # "objectdir" is the name of the directory which will hold "builddir".
                    280: # It is a path; if relative, it is relative to the current directory
                    281: # where config is run.  It's sole use is to be prepended to "builddir"
                    282: # to indicate where config-created files are to be placed (see above).
                    283: #
                    284: # "sourcedir" is the location of the sources used to build the kernel.
                    285: # It is a path; if relative, it is relative to the directory specified
                    286: # by the concatenation of "objectdir" and "builddir" (i.e. where the
                    287: # kernel binaries are put).
                    288: #
                    289:     echo 'builddir     "."'                    >> $SYSCONF.new
                    290:     set OBJRELDIR=`relpath $OBJROOT $OBJDIR`
                    291:     echo 'objectdir    "'$OBJROOT'/'$OBJRELDIR'"'              >> $SYSCONF.new
                    292:     set SRCDIR=`dirname $SOURCE`
                    293:     echo 'sourcedir    "'$SRCROOT'"'           >> $SYSCONF.new
                    294:     if (-f $SYSCONF) then
                    295:        diff $SYSCONF $SYSCONF.new
                    296:        rm -f $SYSCONF.old
                    297:        mv $SYSCONF $SYSCONF.old
                    298:     endif
                    299:     rm -f $SYSCONF
                    300:     mv $SYSCONF.new $SYSCONF
                    301:     if ($?doconfig) then
                    302:        echo "[ configuring $SYSID ]"
                    303:        if ($?profile) then
                    304:            $CONFIG_DIR/config -c $MASTER_DIR -p $SYSCONF
                    305:        else
                    306:            $CONFIG_DIR/config -c $MASTER_DIR $SYSCONF
                    307:        endif
                    308:     endif
                    309:     if ($?domake) then
                    310:         echo "[ making $SYSID ]"
                    311:         (cd $BLDDIR; make)
                    312:     endif
                    313: end

unix.superglobalmegacorp.com

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