diff options
Diffstat (limited to 'cpp/config/makeprops.py')
-rw-r--r-- | cpp/config/makeprops.py | 372 |
1 files changed, 186 insertions, 186 deletions
diff --git a/cpp/config/makeprops.py b/cpp/config/makeprops.py index 3c448a025ba..aec33ea0a39 100644 --- a/cpp/config/makeprops.py +++ b/cpp/config/makeprops.py @@ -33,12 +33,12 @@ def progError(msg): def removeOutputFiles(): global outputFiles for entry in outputFiles: - try: - if os.path.exists(entry[0]): - os.remove(entry[0]) - except EnvironmentError, ex: - progError("warning: could not unlink `" + entry[0] + "': " + ex.strerror + \ - " -- generated file contains errors"); + try: + if os.path.exists(entry[0]): + os.remove(entry[0]) + except EnvironmentError, ex: + progError("warning: could not unlink `" + entry[0] + "': " + ex.strerror + \ + " -- generated file contains errors"); def handler(signum, frame): removeOutputFiles() @@ -48,11 +48,11 @@ def openOutputFile(filename): global outputFiles try: outfile = file(filename, 'w') - outputFiles.append([filename, outfile]) + outputFiles.append([filename, outfile]) except IOError, ex: progError("cannot open `" + filename + "' for writing: " + ex.strerror) - removeOutputFiles() - sys.exit(1) + removeOutputFiles() + sys.exit(1) def writePreamble(lang): global progname @@ -61,117 +61,117 @@ def writePreamble(lang): global classname for entry in outputFiles: - file = entry[1] - file.write("// **********************************************************************\n") - file.write("//\n") - file.write("// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.\n") - file.write("//\n") - file.write("// This copy of Ice is licensed to you under the terms described in the\n") - file.write("// ICE_LICENSE file included in this distribution.\n") - file.write("//\n") - file.write("// **********************************************************************\n") - file.write("\n") - file.write("// Generated by " + progname + " from file `" + infile + "', " + time.ctime() + "\n") - file.write("\n") - file.write("// IMPORTANT: Do not edit this file -- any edits made here will be lost!\n"); - if lang == "cpp": - continue - if lang == "java": - file.write("\n"); - file.write("package IceInternal;\n") - file.write("\n") - file.write("public final class " + classname + '\n'); - file.write("{\n") - continue - if lang == "cs": - file.write("\n"); - file.write("namespace IceInternal\n") - file.write("{\n") - file.write(" public sealed class " + classname + '\n') - file.write(" {\n"); - continue - progError("Internal error: impossible language: `" + lang + "'") - sys.exit(1) + file = entry[1] + file.write("// **********************************************************************\n") + file.write("//\n") + file.write("// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved.\n") + file.write("//\n") + file.write("// This copy of Ice is licensed to you under the terms described in the\n") + file.write("// ICE_LICENSE file included in this distribution.\n") + file.write("//\n") + file.write("// **********************************************************************\n") + file.write("\n") + file.write("// Generated by " + progname + " from file `" + infile + "', " + time.ctime() + "\n") + file.write("\n") + file.write("// IMPORTANT: Do not edit this file -- any edits made here will be lost!\n"); + if lang == "cpp": + continue + if lang == "java": + file.write("\n"); + file.write("package IceInternal;\n") + file.write("\n") + file.write("public final class " + classname + '\n'); + file.write("{\n") + continue + if lang == "cs": + file.write("\n"); + file.write("namespace IceInternal\n") + file.write("{\n") + file.write(" public sealed class " + classname + '\n') + file.write(" {\n"); + continue + progError("Internal error: impossible language: `" + lang + "'") + sys.exit(1) if lang == "cpp": header = outputFiles[1][1] - header.write("\n"); - header.write("#ifndef ICE_INTERNAL_" + classname + "_H\n"); - header.write("#define ICE_INTERNAL_" + classname + "_H\n"); - header.write("\n") - header.write("#include <Ice/Config.h>") - header.write("\n") - header.write("namespace IceInternal\n") - header.write("{\n") - header.write("\n") - header.write("class " + classname + '\n') - header.write("{\n") - header.write("public:\n") - header.write("\n") - file = outputFiles[0][1] - file.write("\n"); - file.write("#include <Ice/" + classname + ".h>\n") + header.write("\n"); + header.write("#ifndef ICE_INTERNAL_" + classname + "_H\n"); + header.write("#define ICE_INTERNAL_" + classname + "_H\n"); + header.write("\n") + header.write("#include <Ice/Config.h>") + header.write("\n") + header.write("namespace IceInternal\n") + header.write("{\n") + header.write("\n") + header.write("class " + classname + '\n') + header.write("{\n") + header.write("public:\n") + header.write("\n") + file = outputFiles[0][1] + file.write("\n"); + file.write("#include <Ice/" + classname + ".h>\n") def writePostamble(lang, labels, commandLineLabels): file = outputFiles[0][1] if lang == "cpp": header = outputFiles[1][1] - header.write("\n") + header.write("\n") - header.write(" static const char* const* validProps[];\n") - file.write("\n"); + header.write(" static const char* const* validProps[];\n") + file.write("\n"); file.write("const char* const* IceInternal::" + classname + "::validProps[] =\n") - file.write("{\n") - for label, line in labels.iteritems(): - file.write(" " + label + "Props,\n") - file.write(" 0\n"); - file.write("};\n") - - header.write(" static const char* clPropNames[];\n") - file.write("\n"); + file.write("{\n") + for label, line in labels.iteritems(): + file.write(" " + label + "Props,\n") + file.write(" 0\n"); + file.write("};\n") + + header.write(" static const char* clPropNames[];\n") + file.write("\n"); file.write("const char* IceInternal::" + classname + "::clPropNames[] =\n") - file.write("{\n") - for label in commandLineLabels: - file.write(" \"" + label + "\",\n") - file.write(" 0\n"); - file.write("};\n") - - header.write("};\n") - header.write("\n") - header.write("}\n") - header.write("\n") - header.write("#endif\n"); - return + file.write("{\n") + for label in commandLineLabels: + file.write(" \"" + label + "\",\n") + file.write(" 0\n"); + file.write("};\n") + + header.write("};\n") + header.write("\n") + header.write("}\n") + header.write("\n") + header.write("#endif\n"); + return if lang == "java": file.write(" public static final String[] validProps[] =\n") - file.write(" {\n") - for label, line in labels.iteritems(): - file.write(" " + label + "Props,\n") - file.write(" null\n") - file.write(" };\n\n"); + file.write(" {\n") + for label, line in labels.iteritems(): + file.write(" " + label + "Props,\n") + file.write(" null\n") + file.write(" };\n\n"); file.write(" public static final String clPropNames[] =\n") - file.write(" {\n") - for label in commandLineLabels: - file.write(" \"" + label + "\",\n") - file.write(" null\n") - file.write(" };\n"); + file.write(" {\n") + for label in commandLineLabels: + file.write(" \"" + label + "\",\n") + file.write(" null\n") + file.write(" };\n"); file.write("}\n"); return if lang == "cs": file.write(" public static string[][] validProps =\n") - file.write(" {\n") - for label, line in labels.iteritems(): - file.write(" " + label + "Props,\n") - file.write(" null\n") - file.write(" };\n\n"); + file.write(" {\n") + for label, line in labels.iteritems(): + file.write(" " + label + "Props,\n") + file.write(" null\n") + file.write(" };\n\n"); file.write(" public static string[] clPropNames =\n") - file.write(" {\n") - for label in commandLineLabels: - file.write(" \"" + label + "\",\n") - file.write(" null\n") - file.write(" };\n"); + file.write(" {\n") + for label in commandLineLabels: + file.write(" \"" + label + "\",\n") + file.write(" null\n") + file.write(" };\n"); file.write(" }\n"); file.write("}\n"); return @@ -179,21 +179,21 @@ def writePostamble(lang, labels, commandLineLabels): def startSection(lang, label): if lang == "cpp": header = outputFiles[1][1] - header.write(" static const char* " + label + "Props[];\n") + header.write(" static const char* " + label + "Props[];\n") file = outputFiles[0][1] if lang == "cpp": - file.write("\n"); + file.write("\n"); file.write("const char* IceInternal::" + classname + "::" + label + "Props[] =\n") file.write("{\n"); - return + return if lang == "java": file.write(" public static final String " + label + "Props[] =\n"); - file.write(" {\n") - return + file.write(" {\n") + return if lang == "cs": file.write(" public static string[] " + label + "Props =\n"); - file.write(" {\n") + file.write(" {\n") return def endSection(lang): @@ -201,32 +201,32 @@ def endSection(lang): if lang == "cpp": file.write(" 0\n"); file.write("};\n"); - return + return if lang == "java": - file.write(" null\n"); - file.write(" };\n"); + file.write(" null\n"); + file.write(" };\n"); file.write("\n") - return + return if lang == "cs": - file.write(" null\n"); - file.write(" };\n"); + file.write(" null\n"); + file.write(" };\n"); file.write("\n") - return + return wildcard = re.compile(".*<any>.*") def writeEntry(lang, label, entry): file = outputFiles[0][1] if lang == "cpp": - file.write(" \"" + label + '.' + string.replace(entry, "<any>", "*") + "\",\n") + file.write(" \"" + label + '.' + string.replace(entry, "<any>", "*") + "\",\n") elif lang == "java": - pattern = string.replace(entry, ".", "\\\\.") - pattern = string.replace(pattern, "<any>", "[^\\\\s]+") - file.write(" " + "\"^" + label + "\\\\." + pattern + "$\",\n") + pattern = string.replace(entry, ".", "\\\\.") + pattern = string.replace(pattern, "<any>", "[^\\\\s]+") + file.write(" " + "\"^" + label + "\\\\." + pattern + "$\",\n") elif lang == "cs": - pattern = string.replace(entry, ".", "\\.") - pattern = string.replace(pattern, "<any>", "[^\\s]+") - file.write(" " + "@\"^" + label + "\\." + pattern + "$\",\n") + pattern = string.replace(entry, ".", "\\.") + pattern = string.replace(pattern, "<any>", "[^\\s]+") + file.write(" " + "@\"^" + label + "\\." + pattern + "$\",\n") def processFile(lang): @@ -235,17 +235,17 @@ def processFile(lang): # global infile try: - f = file(infile, 'r') + f = file(infile, 'r') except IOError, ex: - progError("cannot open `" + infile + "': " + ex.strerror) - sys.exit(1) + progError("cannot open `" + infile + "': " + ex.strerror) + sys.exit(1) # # Set up regular expressions for empty and comment lines, section headings, and entry lines. # - ignore = re.compile("^\s*(?:#.*)?$") # Empty line or comment line + ignore = re.compile("^\s*(?:#.*)?$") # Empty line or comment line section = re.compile("^\s*([a-zA-Z_]\w*)\s*:\s*([a-zA-Z]\w*)?\s*$") # Section heading - entry = re.compile("^\s*([^ \t\n\r\f\v#]+)(?:\s*#.*)?$") # Any non-whitespace character sequence, except for # + entry = re.compile("^\s*([^ \t\n\r\f\v#]+)(?:\s*#.*)?$") # Any non-whitespace character sequence, except for # # # Install signal handler so we can remove the output files if we are interrupted. @@ -261,14 +261,14 @@ def processFile(lang): classname, ext = os.path.splitext(os.path.basename(infile)) openOutputFile(classname + '.' + lang) if(lang == "cpp"): - openOutputFile(classname + ".h") + openOutputFile(classname + ".h") - labels = {} # Records the line number on which each label is defined + labels = {} # Records the line number on which each label is defined commandLineLabels = [] # The set of labels which are command line processing is enabled - atSectionStart = 0 # True for the line on which a label is defined - seenSection = 0 # Set to true (and the remains as true) once the first label is defined - numEntries = 0 # Number of entries within a section - errors = 0 # Number of syntax errors in the input file + atSectionStart = 0 # True for the line on which a label is defined + seenSection = 0 # Set to true (and the remains as true) once the first label is defined + numEntries = 0 # Number of entries within a section + errors = 0 # Number of syntax errors in the input file # # Write preamble. @@ -281,57 +281,57 @@ def processFile(lang): global lineNum lines = f.readlines() for l in lines: - lineNum += 1 - - # - # Ignore empty lines and comments. - # - if ignore.match(l) != None: - continue - - # - # Start of section. - # - labelMatch = section.match(l) - if labelMatch != None: - if atSectionStart: - fileError("section `" + label + "' must have at least one entry") - label = labelMatch.group(1) - try: - badLine = labels[label] - fileError("duplicate section heading: `" + label + "': previously defined on line " + badLine) - except KeyError: - pass - if label == "validProps": - fileError("`validProps' is reserved and cannot be used as a section heading") + lineNum += 1 + + # + # Ignore empty lines and comments. + # + if ignore.match(l) != None: + continue + + # + # Start of section. + # + labelMatch = section.match(l) + if labelMatch != None: + if atSectionStart: + fileError("section `" + label + "' must have at least one entry") + label = labelMatch.group(1) + try: + badLine = labels[label] + fileError("duplicate section heading: `" + label + "': previously defined on line " + badLine) + except KeyError: + pass + if label == "validProps": + fileError("`validProps' is reserved and cannot be used as a section heading") if labelMatch.group(2) != "false": commandLineLabels.append(label) - labels[label] = lineNum - if seenSection: - endSection(lang) - numEntries = 0 - startSection(lang, label) - seenSection = 1 - atSectionStart = 1 - continue - - entryMatch = entry.match(l) - if entryMatch != None: - writeEntry(lang, label, entryMatch.group(1)) - atSectionStart = 0 - numEntries += 1 - continue - - fileError("syntax error") + labels[label] = lineNum + if seenSection: + endSection(lang) + numEntries = 0 + startSection(lang, label) + seenSection = 1 + atSectionStart = 1 + continue + + entryMatch = entry.match(l) + if entryMatch != None: + writeEntry(lang, label, entryMatch.group(1)) + atSectionStart = 0 + numEntries += 1 + continue + + fileError("syntax error") if len(labels) == 0: - fileError("input must define at least one section"); + fileError("input must define at least one section"); # # End the final section. # if numEntries == 0: - fileError("section `" + label + "' must have at least one entry") + fileError("section `" + label + "' must have at least one entry") endSection(lang) # @@ -347,8 +347,8 @@ def processFile(lang): # Remove the output files if anything went wrong, so we don't leave partically written files behind. # if errors != 0: - removeOutputFiles() - sys.exit(1) + removeOutputFiles() + sys.exit(1) outputFiles = [] # @@ -364,12 +364,12 @@ if len(sys.argv) == 1: # Find where the root of the tree is. # for toplevel in [".", "..", "../..", "../../..", "../../../.."]: - toplevel = os.path.normpath(toplevel) - if os.path.exists(os.path.join(toplevel, "config", "makeprops.py")): - break + toplevel = os.path.normpath(toplevel) + if os.path.exists(os.path.join(toplevel, "config", "makeprops.py")): + break else: - progError("cannot find top-level directory") - sys.exit(1) + progError("cannot find top-level directory") + sys.exit(1) infile = os.path.join(toplevel, "config", "PropertyNames.def") lang = "all" @@ -377,17 +377,17 @@ if len(sys.argv) == 1: else: option = sys.argv[1] if option == "--cpp": - lang = "cpp" + lang = "cpp" elif option == "--java": - lang = "java" + lang = "java" elif option == "--cs": - lang = "cs" + lang = "cs" elif option == "-h" or option == "--help" or option == "-?": - usage() - sys.exit(0) + usage() + sys.exit(0) else: - usage() - sys.exit(1) + usage() + sys.exit(1) infile = sys.argv[2] if lang == "all": |