Blame view

mu-aux/generr.awk 2.23 KB
1
# generr.awk -- Create error reporting sources for GNU Mailutils
2
# Copyright (C) 2005, 2006, 2007, 2010 Free Software Foundation, Inc.
3 4 5
#
# GNU Mailutils is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
6
# published by the Free Software Foundation; either version 3, or (at
7 8
# your option) any later version.
#
9
# GNU Mailutils is distributed in the hope that it will be useful, but
10 11 12 13 14
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
15
# along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>. 
16

17
# GNU Mailutils creates error reporting source files (muerrno.c and errno.h)
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
# for GNU Mailutils.
#
# Usage:
#      awk -f generr.awk errors muerrno.cin > muerrno.c
#      awk -f generr.awk errors muerrno.hin > errno.h

BEGIN {
  defno = 0
}

ARGIND == 1 && /^ *#/ { next }
ARGIND == 1 && NF == 0 { next }
ARGIND == 1 {
  def[defno] = $1
  match(substr($0,length($1)), "[ \\t]+")
  text[defno] = substr($0,length($1)+RLENGTH+1)
  defno++
}

ARGIND == 2 && /\$AUTOWARN/ {
  match($0,"\\$AUTOWARN");
39 40
  rest = (RSTART+RLENGTH < length($0)) ? substr($0,RSTART+RLENGTH) : "";
  print substr($0,1,RSTART-1) "This file is generated automatically. Please, do not edit." rest
41 42 43 44 45 46 47
  next
}

ARGIND == 2 && $1 == "$MESSAGE_STRINGS" {
  match($0, "[ \\t]+")
  for (i = 0; i < defno; i++) {
    printf "%*.*scase %s:\n", RLENGTH, RLENGTH, "", def[i]
48
    printf "%*.*sreturn %s;\n\n", RLENGTH+2,RLENGTH+2,"", text[i] 
49
  }
50
  total += defno;
51 52 53 54 55 56 57 58 59
  next
}

ARGIND == 2 && $1 == "$MESSAGE_CODES" {
  match($0, "[ \\t]+")
  for (i = 0; i < defno; i++) {
    printf "%*.*scase %s:\n", RLENGTH, RLENGTH, "", def[i]
    printf "%*.*sreturn \"%s\";\n\n", RLENGTH+2,RLENGTH+2,"", def[i] 
  }
60
  total += defno;
61 62 63 64 65 66 67
  next
}

ARGIND == 2 && $1 == "$MESSAGE_DEFS" {
  for (i = 0; i < defno; i++) {
    print "#define " def[i] " (MU_ERR_BASE+" i ")"
  }
68
  print "#define MU_ERR_LAST (MU_ERR_BASE+" defno ")"
69
  total += defno;
70 71 72 73 74 75 76
  next
}

ARGIND == 2 {
  print
}

77 78 79 80 81 82
END {
	if (total == 0) {
		print "Output file is empty" > "/dev/stderr"
		exit 1
	}
}
83
# End of generr.awk