Annotation of src/etc/MAKEDEV.mansub, Revision 1.1
1.1 ! miod 1: dnl $OpenBSD$
! 2: dnl
! 3: dnl Copyright (c) 2004, Miodrag Vallat
! 4: dnl Copyright (c) 2001-2004 Todd T. Fries <todd@OpenBSD.org>
! 5: dnl
! 6: dnl Permission to use, copy, modify, and distribute this software for any
! 7: dnl purpose with or without fee is hereby granted, provided that the above
! 8: dnl copyright notice and this permission notice appear in all copies.
! 9: dnl
! 10: dnl THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 11: dnl WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 12: dnl MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 13: dnl ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 14: dnl WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 15: dnl ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 16: dnl OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 17: dnl
! 18: dnl This file is an m4 file, really. It's a clone of MAKEDEV.sub, then
! 19: dnl adapted to mdoc output. This means, mostly removed from any non-trivial
! 20: dnl content...
! 21: dnl
! 22: dnl o First, a change of quote to make shell statements like: `command`
! 23: dnl possible
! 24: dnl
! 25: changequote(`{-', `-}')dnl
! 26: dnl
! 27: dnl o version info must be stripped of $ so we can say 'generated from' below
! 28: dnl
! 29: dnl If we just use the version string how are we going to know what arch
! 30: dnl 'MAKEDEV.md,v' came from?
! 31: dnl
! 32: dnl Thus, I have used the below to create a version string looking like
! 33: dnl 'OpenBSD: etc.sparc/MAKEDEV.inc,v...' which works, although requires
! 34: dnl some attention if ported to another Id string setup.
! 35: dnl
! 36: dnl
! 37: dnl Initialize the stacks stored in _m4_*
! 38: dnl
! 39: undefine({-_m4_cvs_ver-})dnl
! 40: pushdef({-_m4_cvs_ver-}, {-done-})dnl
! 41: dnl
! 42: undefine({-_m4_devs-})dnl
! 43: pushdef({-_m4_devs-}, {-done-})dnl
! 44: dnl
! 45: undefine({-_m4_disks-})dnl
! 46: undefine({-_m4_disks2-})dnl
! 47: pushdef({-_m4_disks-}, {-done-})dnl
! 48: pushdef({-_m4_disks2-}, {-done-})dnl
! 49: dnl
! 50: dnl define stack 'add to' functions, only unique names queued
! 51: dnl
! 52: define({-ver_q-}, {-ifelse(index($1_ver, y), 0, ,
! 53: {-pushdef({-_m4_cvs_ver-}, {-$2-})define({-$1_ver-}, {-y-})-})-})dnl ver_q
! 54: dnl
! 55: define({-dev_q-}, {-ifelse(index(_q_$1_dev, :), 0,
! 56: {-errprint({-duplicated dev id: $1 at -}__file__{-:-}__line__ originally at _q_$1_dev)-},
! 57: {-pushdef({-_m4_devs-}, {-$1-})dnl
! 58: define({-_q_$1_dev-}, {-:-}__file__{-:-}__line__)-})-})dnl dev_q
! 59: dnl
! 60: define({-disk_q-}, {-ifelse(index(_q_$1_disk, :), 0,
! 61: {-errprint({-duplicated disk id: $1 at -}__file__{-:-}__line__ originally at _q_$1_disk)-}, {-pushdef({-_m4_disks-}, {-$1-})dnl
! 62: pushdef({-_m4_disks2-}, {-$1-})dnl
! 63: define({-_q_$1_disks-}, {-:-}__file__{-:-}__line__)-})-})dnl disk_q
! 64: dnl
! 65: dnl store a version string for 'this' file
! 66: dnl
! 67: dnl vers ( uniqueidstring, versionstring, subdir )
! 68: dnl
! 69: dnl example1: vers(__file__, {-$OpenBSD$-})
! 70: dnl example2: vers(__file__, {-$OpenBSD$-}, etc.MACHINE)
! 71: dnl
! 72: dnl if subdir is defined, prepend it to the filename in the version string
! 73: dnl
! 74: define({-vers-},
! 75: {-ifelse({-$3-}, {--},
! 76: {-ver_q(hstcl({-$1-}), {-translit({-{-$2-}-}, {-$-}, {--})-})-},
! 77: {-ver_q(hstcl({-$1-}), {-_addsubdir({-{-$2-}-}, $3)-})-})-})dnl
! 78: dnl
! 79: dnl Version info for this file:
! 80: dnl
! 81: vers(__file__, {-$OpenBSD$-})dnl
! 82: dnl
! 83: dnl
! 84: define({-_addsubdir-},
! 85: {-patsubst({-$1-}, {-\$(OpenBSD:) ([^\$]*)\$-}, {-\1 $2/\2-})-})dnl
! 86: dnl
! 87: dnl do the 'showing' of the version info
! 88: dnl
! 89: define({-do_vers-}, {-COMM $1-})dnl
! 90: dnl
! 91: dnl show version function, to be called at the place when all versions are
! 92: dnl queued, and it is time to show all of them
! 93: dnl
! 94: define({-show_vers-},
! 95: {-ifelse(_m4_cvs_ver, {-done-}, {--},
! 96: {-do_vers(_m4_cvs_ver)
! 97: popdef({-_m4_cvs_ver-})dnl
! 98: show_vers()dnl
! 99: -})-})dnl
! 100: dnl
! 101: dnl
! 102: dnl _devitem(pattern, description)
! 103: dnl
! 104: define({-_devitem-},{-.It Ar $1
! 105: $2.-})dnl
! 106: dnl
! 107: dnl _devtitle(name,description)
! 108: dnl
! 109: define({-_devtitle-},{-ifelse($1,make,,{-.El
! 110: -}).Pp
! 111: .Sy $2
! 112: .Bl -tag -width tenletters -compact-})dnl
! 113: dnl
! 114: dnl _DEV(name, [character major], [block major])
! 115: dnl
! 116: define({-_DEV-}, {-$1_dev{--}dnl
! 117: define({-$1__DEV-}, {-Y-})-})dnl
! 118: dnl
! 119: define({-_MKDEV-}, {-$1_mkdev-})dnl
! 120: define({-_TITLE-}, {-$1_title-})dnl
! 121: define({-__devitem-}, {-define($1_dev, {-_devitem($2,$3)-})$4-})dnl
! 122: define({-__devtitle-}, {-define($1_title, {-_devtitle($1,$2)-})-})dnl
! 123: define({-_mkdev-})dnl
! 124: define({-_mcdev-})dnl
! 125: define({-_cdev-})dnl
! 126: define({-__mkdev-})dnl
! 127: define({-target-})dnl
! 128: define({-twrget-})dnl