[BACK]Return to MAKEDEV.awk CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / etc

Annotation of src/etc/MAKEDEV.awk, Revision 1.2

1.1       jdolecek    1: #!/usr/bin/awk -
                      2: #
1.2     ! jdolecek    3: #      $NetBSD: MAKEDEV.awk,v 1.1 2003/10/13 09:37:45 jdolecek Exp $
1.1       jdolecek    4: #
                      5: # Copyright (c) 2003 The NetBSD Foundation, Inc.
                      6: # All rights reserved.
                      7: #
                      8: # This code is derived from software contributed to The NetBSD Foundation
                      9: # by Jaromir Dolecek.
                     10: #
                     11: # Redistribution and use in source and binary forms, with or without
                     12: # modification, are permitted provided that the following conditions
                     13: # are met:
                     14: # 1. Redistributions of source code must retain the above copyright
                     15: #    notice, this list of conditions and the following disclaimer.
                     16: # 2. Redistributions in binary form must reproduce the above copyright
                     17: #    notice, this list of conditions and the following disclaimer in the
                     18: #    documentation and/or other materials provided with the distribution.
                     19: # 3. All advertising materials mentioning features or use of this software
                     20: #    must display the following acknowledgement:
                     21: #        This product includes software developed by the NetBSD
                     22: #        Foundation, Inc. and its contributors.
                     23: # 4. Neither the name of The NetBSD Foundation nor the names of its
                     24: #    contributors may be used to endorse or promote products derived
                     25: #    from this software without specific prior written permission.
                     26: #
                     27: # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
                     28: # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     29: # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     30: # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
                     31: # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     32: # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     33: # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     34: # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     35: # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     36: # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     37: # POSSIBILITY OF SUCH DAMAGE.
                     38: #
                     39:
1.2     ! jdolecek   40: # Script to generate platform MAKEDEV script from MI template, MD
        !            41: # MAKEDEV.conf and MD/MI major lists
        !            42: #
        !            43: # Uses environment variables MACHINE/MACHINE_ARCH to select
        !            44: # appropriate files, and NETBSDSRCDIR to get root of source tree.
        !            45:
1.1       jdolecek   46: BEGIN {
                     47:        # top of source tree, used to find major number list in kernel
                     48:        # sources
                     49:        top = ENVIRON["NETBSDSRCDIR"]
                     50:        if (!top)
                     51:                top = ".."
                     52:        top = top "/sys/"
                     53:        if (system("test -d '" top "'") != 0) {
                     54:                print "ERROR: didn't find top of kernel tree ('" top "' not a directory)" > "/dev/stderr"
                     55:                exit 1
                     56:        }
                     57:
                     58:        machine = ENVIRON["MACHINE"]
                     59:        if (!machine)
                     60:                machine = "i386"        # XXX for testing
                     61:        maarch = ENVIRON["MACHINE_ARCH"]
                     62:
                     63:        # file with major definitions
                     64:        majors[0] = "conf/majors"
                     65:        if (maarch == "arm32")
                     66:                majors[1] = "arch/arm/conf/majors.arm32";
                     67:        else if (machine == "evbsh5") {
                     68:                majors[1] = "arch/evbsh5/conf/majors.evbsh5";
                     69:                majors[2] = "arch/sh5/conf/majors.sh5";
                     70:        } else
                     71:                majors[1] = "arch/" machine "/conf/majors." machine;
                     72:
                     73:        # process all files with majors and fill the chr[] and blk[]
                     74:        # arrays, used in template processing
                     75:        for(m in majors) {
                     76:                file = top majors[m]
                     77:                while (getline < file) {
                     78:                        if ($1 == "device-major") {
                     79:                                if ($3 == "char") {
                     80:                                        chr[$2] = $4
                     81:                                        if ($5 == "block")
                     82:                                                blk[$2] = $6
                     83:                                } else if ($3 == "block")
                     84:                                        blk[$2] = $4
                     85:                        }
                     86:                }
                     87:        }
                     88:
1.2     ! jdolecek   89:        # read MD config file, and determine disk partitions
        !            90:        # and MD device list
        !            91:        cfgfile = "etc." machine "/MAKEDEV.conf"
        !            92:        MDDEV = 0               # MD device targets
        !            93:        MKDISK = ""             # routine to create disk devices
        !            94:        while (getline < cfgfile) {
        !            95:                if ($1 ~ "^DISKPARTITIONS=") {
        !            96:                        sub(".*=[ \t]*", "")
        !            97:                        MKDISK = "makedisk_p" $0
        !            98:                } else if (MDDEV) {
        !            99:                        if (MDDEV == 1)
        !           100:                                MDDEV = $0
        !           101:                        else
        !           102:                                MDDEV = MDDEV "\n" $0
        !           103:                } else if ($1 ~ "^MD_DEVICES=")
        !           104:                        MDDEV = 1
        !           105:        }
        !           106:
1.1       jdolecek  107:        # initially no substitutions
                    108:        devsubst = 0
                    109:        deventry = ""
                    110: }
                    111:
                    112: /%MI_DEVICES_BEGIN%/ {
                    113:        devsubst = 1;
                    114:        next
                    115: }
                    116:
                    117: /%MI_DEVICES_END%/ {
                    118:        devsubst = 0;
                    119:        next
                    120: }
                    121:
                    122: {
1.2     ! jdolecek  123:        sub("^%MD_DEVICES%", MDDEV)
        !           124:        sub("%MKDISK%", MKDISK)
        !           125:
1.1       jdolecek  126:        # if device substitutions are not active, do nothing more
                    127:        if (!devsubst) {
                    128:                print
                    129:                next
                    130:        }
                    131: }
                    132:
                    133: # first line of device entry
                    134: /^[a-z].*\)$/ {
                    135:        if (length(deventry) > 0) {
                    136:                # We have a previous entry to print. Replace all known
                    137:                # character and block devices. If no unknown character
                    138:                # or block device definition remains within the entry,
                    139:                # print it to output, otherwise scrap it.
                    140:                for(c in chr)
                    141:                        gsub("%" c "_chr%", chr[c], deventry)
                    142:                for(b in blk)
                    143:                        gsub("%" b "_blk%", blk[b], deventry)
                    144:
                    145:                if (deventry !~ "%[a-z]*_chr%" && deventry !~ "%[a-z]*_blk%")
                    146:                        print deventry
                    147:        }
                    148:        deventry = $0
                    149:        next
                    150: }
                    151:
                    152: # template line within device substitution section - just keep appending
                    153: # to the current entry
                    154: {
                    155:        deventry = deventry "\n" $0
                    156: }

CVSweb <webmaster@jp.NetBSD.org>