Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1146)

Unified Diff: src/trusted/validator_x86/enum_gen.py

Issue 625923004: Delete old x86 validator. (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/trusted/validator_x86/enum_gen.py
diff --git a/src/trusted/validator_x86/enum_gen.py b/src/trusted/validator_x86/enum_gen.py
deleted file mode 100755
index ef7272622f11c6e73dd2ec117509312afe8a9e0e..0000000000000000000000000000000000000000
--- a/src/trusted/validator_x86/enum_gen.py
+++ /dev/null
@@ -1,281 +0,0 @@
-#!/usr/bin/python2.4
-# Copyright (c) 2011 The Native Client Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-""" Generates C header/source files for an enumerated type.
-
-Usage: python enum_gen.py <enum_spec>.enum
-"""
-
-import getopt
-import logging
-import os
-import re
-import sys
-
-logging.getLogger().setLevel(logging.INFO)
-
-def _Usage():
- print >>sys.stderr, 'Usage: enum_gen [options] <enum_spec>.enum'
-
-# Command line options, and thier default values.
-_ClOptions = {
- # Header file to generate - default is <enum_spec>.h
- 'header': None,
- # Source file to generate - default is <enum_spec>.c
- 'source': None,
- # Name of enumerated type - default is <enum_spec>
- 'name': None,
- # Prefix to remove print print names - default is None
- 'name_prefix': None,
- # Path prefix to remove from descriptions of generated source.
- 'path_prefix': None,
- # Sort enumerated constants
- 'sort': 0,
- # Add a "EnumSize" constant at the end of the list.
- 'add_size': 0
- }
-
-# Pattern expected for enumerated values to generate.
-_filename_form = re.compile(r'^(.*)\.enum$')
-
-# Verify that the enumeration filename matches expectations.
-def _ValidateFilename(filename):
- if not _filename_form.match(filename):
- logging.error("Enum argument of wrong form: %s", filename)
- sys.exit(1)
-
-# Given the enumeration filename, return the corresponding header
-# file that contains the enumeration and the name function declaration.
-def _GetHeaderFilename(filename):
- # Use command line specification if defined.
- header = _ClOptions['header']
- if header is None:
- # Replace the .enum suffix of with .h
- for prefix in _filename_form.findall(filename):
- return prefix + ".h"
- # This should not be reached.
- logging.error("Unable to generate header file name: %s", filename)
- sys.exit(1)
- else:
- return header
-
-# Given the enumeration filename, return the name of the enumerated type
-# being defined.
-def _GetEnumName(filename):
- # Use the command line specification if defined.
- name = _ClOptions['name']
- if name is None:
- # Use the filename without the suffix.
- for prefix in _filename_form.findall(filename):
- return prefix
- # This should not be reached.
- logging.error("Unable to generate enum name: %s", filename)
- sys.exit(1)
- else:
- return name
-
-# Generate the enumeration constant name to use for the constant
-# specified in the enumeration file.
-def _GetPrintName(constant):
- # See if the command line specifies a prefix. If so, add it to the
- # constant name.
- prefix = _ClOptions['name_prefix']
- if prefix is None:
- return constant
- else:
- return prefix + constant
-
-# Given the enumeration filename, return the name of the file containing
-# the implementation of the enumeration.
-def _GetSourceFilename(filename):
- # Use the comand line specification if defined.
- source = _ClOptions['source']
- if source is None:
- # Replace the .enum suffix with .c
- for prefix in _filename_form.findall(filename):
- return prefix + ".c"
- # This should not be reached.
- logging.error("Unable to generate source file name: %s", filename)
- sys.exit(1)
- else:
- return source
-
-# Given a filename, remove the path_prefix if possible.
-def _GetSimplifiedFilename(filename):
- # Use the path prefix specified on the command line.
- path_prefix = _ClOptions['path_prefix']
- if path_prefix is not None:
- if filename.startswith(path_prefix):
- filename = filename[len(path_prefix):]
- return filename
-
-# Given the list of enumerated constants from the given enumeration file,
-# update the constants based on command line options.
-def _ApplyFilters(constants):
- if _ClOptions['sort']:
- constants.sort()
- return constants
-
-# Given the enumeration file name, open the file and return the list of
-# constants defined in the file.
-def _ReadConstants(filename):
- name_pattern = re.compile(r'^(\w+)\s*\#?')
- infile = open(filename, "r")
- constants = []
- for line in infile:
- line = line.rstrip()
- trimmed_line = line.lstrip()
- if len(trimmed_line) > 0 and not trimmed_line.startswith("#"):
- if name_pattern.match(trimmed_line):
- for name in name_pattern.findall(trimmed_line):
- constants.append(name)
- else:
- logging.error("Line not understood: %s", line)
- sys.exit(1)
- if constants == []:
- logging.error("No enumerated values found")
- sys.exit(1)
- return constants
-
-# Generate a DO NOT EDIT banner in the given file.
-# file - The file to put the banner
-# filename - The name of the file to put the banner in.
-# enumfile - The name of the enumeration file.
-def _AddDoNotEditMessage(file, filename, enumfile):
- print >>file, "/* %s" % _GetSimplifiedFilename(filename)
- print >>file, " * THIS FILE IS AUTO_GENERATED DO NOT EDIT."
- print >>file, " *"
- print >>file, " * This file was auto-generated by enum_gen.py"
- print >>file, " * from file %s" % os.path.basename(enumfile)
- print >>file, " */"
- print >>file, ""
-
-# Given a file name, convert it to the DEFINE name to use to make sure
-# the file is included at most once.
-def _GetDefineName(filename):
- return filename.replace(".", "_").replace(
- "/", "_").replace("\\", "_").replace("-","_").upper()
-
-# Given the enumeration file name, and the constants defined within that file,
-# Generate a header file defining the enumeration, and the corresponding function
-# to print out symbolic names for each constant.
-def _GenerateHeader(enumfile, constants):
- filename = _GetHeaderFilename(enumfile)
- outfile = open(filename, "w")
- simplified_filename = _GetSimplifiedFilename(filename)
- _AddDoNotEditMessage(outfile, filename, enumfile)
- enumname = _GetEnumName(enumfile)
- print >>outfile, "#ifndef %s__" % _GetDefineName(simplified_filename)
- print >>outfile, "#define %s__" % _GetDefineName(simplified_filename)
- print >>outfile, ""
- print >>outfile, '#include "native_client/src/include/portability.h"'
- print >>outfile, ""
- print >>outfile, "EXTERN_C_BEGIN"
- print >>outfile, "typedef enum %s {" % enumname
- enum_value = 0
- for constant in constants:
- print >>outfile, " %s = %d," % (_GetPrintName(constant), enum_value)
- enum_value += 1
- if _ClOptions['add_size']:
- print >>outfile, (" %sEnumSize = %d, " +
- "/* special size marker */") % (enumname, enum_value)
- print >>outfile, "} %s;" % enumname
- print >>outfile, ""
- print >>outfile, "/* Returns the name of an %s constant. */" % enumname
- print >>outfile, "extern const char* %sName(%s name);" % (enumname, enumname)
- print >>outfile, ""
- print >>outfile, "EXTERN_C_END"
- print >>outfile, ""
- print >>outfile, "#endif /* %s__ */" % _GetDefineName(simplified_filename)
-
-# Given the enumeration file name, and the constants defined within that file,
-# Generate an implementation file defining the corresponding function to print
-# out symbolic names for each constant.
-def _GenerateSource(enumfile, constants):
- filename = _GetSourceFilename(enumfile)
- outfile = open(filename, "w")
- _AddDoNotEditMessage(outfile, filename, enumfile)
- enumname = _GetEnumName(enumfile)
- sizename = constants[-1]
- if _ClOptions['add_size']:
- sizename = enumname + 'EnumSize'
- print >>outfile, "/* Define the corresponding names of %s. */" % enumname
- print >>outfile, ("static const char* " +
- "const g_%sName[%s + 1] = {") % (enumname, sizename)
- for constant in constants:
- print >>outfile, ' "%s",' % constant
- if _ClOptions['add_size']:
- print >>outfile, ' "%sEnumSize"' % enumname
- print >>outfile, "};"
- print >>outfile, ""
- print >>outfile, "const char* %sName(%s name) {" % (enumname, enumname)
- print >>outfile, " return name <= %s" % sizename
- print >>outfile, " ? g_%sName[name]" % enumname
- print >>outfile, ' : "%s???";' % enumname
- print >>outfile, "}"
-
-# Given an array of command line arguments, process command line options, and
-# return a list of arguments that aren't command line options.
-def _ProcessOptions(argv):
- """Process command line options and return the unprocessed left overs."""
- try:
- opts, args = getopt.getopt(argv, '', [x + '=' for x in _ClOptions])
- except getopt.GetoptError, err:
- print(str(err)) # will print something like 'option -a not recognized'
- sys.exit(-1)
-
- for o, a in opts:
- # strip the leading '--'
- option = o[2:]
- assert option in _ClOptions
- if type(_ClOptions[option]) == int:
- _ClOptions[option] = int(a)
- else:
- _ClOptions[option] = a
- # return the unprocessed options, i.e. the command
- return args
-
-# Given an enumeration file to generate, build the corresponding header/source
-# files implementing the enumerated type.
-def main(argv):
- command = _ProcessOptions(argv)
- if len(command) != 1:
- _Usage()
- return 1
- enumfile = command[0]
- _ValidateFilename(enumfile)
- constants = _ApplyFilters(_ReadConstants(enumfile))
- _GenerateHeader(enumfile, constants)
- _GenerateSource(enumfile, constants)
- return 0
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv[1:]))

Powered by Google App Engine
This is Rietveld 408576698