mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
Merge remote-tracking branch 'origin/topic/dnthayer/ticket1440'
* origin/topic/dnthayer/ticket1440: Remove build dependency on perl
This commit is contained in:
parent
67d529585c
commit
9efd54a08a
10 changed files with 141 additions and 159 deletions
114
src/make_dbg_constants.py
Normal file
114
src/make_dbg_constants.py
Normal file
|
@ -0,0 +1,114 @@
|
|||
# Build the DebugCmdConstants.h and DebugCmdInfoConstants.cc files from the
|
||||
# DebugCmdInfoConstants.in file.
|
||||
#
|
||||
# We do this via a script rather than maintaining them directly because
|
||||
# the struct is a little complicated, so has to be initialized from code,
|
||||
# plus we want to make adding new constants somewhat less painful.
|
||||
#
|
||||
# The input filename should be supplied as an argument.
|
||||
#
|
||||
# DebugCmds are printed to DebugCmdConstants.h
|
||||
# DebugCmdInfos are printed to DebugCmdInfoConstants.cc
|
||||
#
|
||||
# The input format is:
|
||||
#
|
||||
# cmd: [DebugCmd]
|
||||
# names: [space delimited names of cmd]
|
||||
# resume: ['true' or 'false': should execution resume after this command?]
|
||||
# help: [some help text]
|
||||
#
|
||||
# Blank lines are skipped.
|
||||
# Comments should start with // and should be on a line by themselves.
|
||||
|
||||
import sys
|
||||
|
||||
inputfile = sys.argv[1]
|
||||
|
||||
init_tmpl = '''
|
||||
{
|
||||
DebugCmdInfo* info;
|
||||
%(name_init)s
|
||||
info = new DebugCmdInfo (%(cmd)s, names, %(num_names)s, %(resume)s, "%(help)s",
|
||||
%(repeatable)s);
|
||||
g_DebugCmdInfos.push_back(info);
|
||||
}
|
||||
'''
|
||||
|
||||
enum_str = '''
|
||||
//
|
||||
// This file was automatically generated from %s
|
||||
// DO NOT EDIT.
|
||||
//
|
||||
enum DebugCmd {
|
||||
''' % inputfile
|
||||
|
||||
init_str = '''
|
||||
//
|
||||
// This file was automatically generated from %s
|
||||
// DO NOT EDIT.
|
||||
//
|
||||
|
||||
#include "util.h"
|
||||
void init_global_dbg_constants () {
|
||||
''' % inputfile
|
||||
|
||||
def outputrecord():
|
||||
global init_str, enum_str
|
||||
|
||||
dbginfo["name_init"] = "const char * const names[] = {\n\t%s\n };\n" % ",\n\t".join(dbginfo["names"])
|
||||
|
||||
dbginfo["num_names"] = len(dbginfo["names"])
|
||||
|
||||
# substitute into template
|
||||
init_str += init_tmpl % dbginfo
|
||||
|
||||
enum_str += "\t%s,\n" % dbginfo["cmd"]
|
||||
|
||||
def initdbginfo():
|
||||
return {"cmd": "", "name_init": "", "num_names": 0, "names": [],
|
||||
"resume": "false", "help": "", "repeatable": "false"}
|
||||
|
||||
dbginfo = initdbginfo()
|
||||
|
||||
inputf = open(inputfile, "r")
|
||||
for line in inputf:
|
||||
line = line.strip()
|
||||
if not line or line.startswith("//"): # skip empty lines and comments
|
||||
continue
|
||||
|
||||
fields = line.split(":", 1)
|
||||
if len(fields) != 2:
|
||||
raise RuntimeError("Error in debug constant file on line: %s" % line)
|
||||
|
||||
f1, f2 = fields
|
||||
f2 = f2.strip()
|
||||
|
||||
if f1 == "cmd":
|
||||
if dbginfo[f1]: # output the previous record
|
||||
outputrecord()
|
||||
dbginfo = initdbginfo()
|
||||
|
||||
dbginfo[f1] = f2
|
||||
elif f1 == "names":
|
||||
# put quotes around the strings
|
||||
dbginfo[f1] = [ '"%s"' % n for n in f2.split() ]
|
||||
elif f1 == "help":
|
||||
dbginfo[f1] = f2.replace('"', '\\"') # escape quotation marks
|
||||
elif f1 in ("resume", "repeatable"):
|
||||
dbginfo[f1] = f2
|
||||
else:
|
||||
raise RuntimeError("Unknown command: %s" % line)
|
||||
|
||||
# output the last record
|
||||
outputrecord()
|
||||
|
||||
init_str += " \n}\n"
|
||||
enum_str += " dcLast\n};\n"
|
||||
|
||||
debugcmds = open("DebugCmdConstants.h", "w")
|
||||
debugcmds.write(enum_str)
|
||||
debugcmds.close()
|
||||
|
||||
debugcmdinfos = open("DebugCmdInfoConstants.cc", "w")
|
||||
debugcmdinfos.write(init_str)
|
||||
debugcmdinfos.close()
|
Loading…
Add table
Add a link
Reference in a new issue