diff options
Diffstat (limited to 'usr/src/tools/onbld')
-rw-r--r-- | usr/src/tools/onbld/Checks/Mapfile.py | 55 | ||||
-rw-r--r-- | usr/src/tools/onbld/hgext/cdm.py | 14 |
2 files changed, 62 insertions, 7 deletions
diff --git a/usr/src/tools/onbld/Checks/Mapfile.py b/usr/src/tools/onbld/Checks/Mapfile.py index a215e674bf..2a8cb74aed 100644 --- a/usr/src/tools/onbld/Checks/Mapfile.py +++ b/usr/src/tools/onbld/Checks/Mapfile.py @@ -21,8 +21,7 @@ # # -# Copyright 2009 Sun Microsystems, Inc. All rights reserved. -# Use is subject to license terms. +# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # @@ -39,10 +38,56 @@ You should not be making modifications here until you've read the most current copy of that file. If you need help, contact a gatekeeper for guidance. ''' -import sys, CmtBlk +import re, sys, CmtBlk MAPFILE = MAPFILE.splitlines()[1:] # Don't include initial \n def mapfilechk(fh, filename=None, verbose=False, output=sys.stderr): - return CmtBlk.cmtblkchk(fh, 'MAPFILE', MAPFILE, filename=filename, - verbose=verbose, output=output) + if filename: + name = filename + else: + name = fh.name + + # Verify that the mapfile is using version 2 syntax. Read and discard + # comment and empty lines until the first non-empty line is seen. + # This line must be '$mapfile_version 2'. + CmtRE = re.compile(r'#.*$') + LeadingWSRE = re.compile(r'^\s+') + VersionRE = re.compile(r'^\$mapfile_version\s+2\s*$') + for line in fh: + line = CmtRE.sub(r'', line) + line = LeadingWSRE.sub(r'', line) + if line == '' : + continue + + # First non=empty line must be version declaration + if not VersionRE.match(line): + output.write("Warning: mapfile version 2 syntax" + " expected in file %s\n" % name) + return 1 + + # We have verified version 2 syntax. Exit the loop + break + + + # If the mapfile contains a SYMBOL_VERSION directive, the file + # must include a copy of the MAPFILE warning comment above. The + # comment is specific to symbol versioning, so we don't harrass + # the authors of mapfiles used exclusively for other purposes. + SymVerRE = re.compile(r'^\s*symbol_version\s+', re.IGNORECASE) + for line in fh: + # If we find a SYMBOL_VERSION, then verify that the comment + # is present. The comment usually precedes the mapfile_version + # comment and any mapfile directives (including SYMBOL_VERSION), + # so we need to rewind the file. This is more efficient than it + # might seem: All of these items are near the top of the file, + # so not not many lines are read, and file contents are + # bufferred. + if SymVerRE.match(line): + fh.seek(0); + return CmtBlk.cmtblkchk(fh, 'MAPFILE', MAPFILE, + filename=filename, verbose=verbose, + output=output) + + # Comment is not required. + return 0 diff --git a/usr/src/tools/onbld/hgext/cdm.py b/usr/src/tools/onbld/hgext/cdm.py index 53328a4a46..577da5544d 100644 --- a/usr/src/tools/onbld/hgext/cdm.py +++ b/usr/src/tools/onbld/hgext/cdm.py @@ -30,7 +30,7 @@ Run pre-putback checks - pbchk Collapse all your changes into a single changeset - recommit''' -import atexit, os, stat, sys, termios +import atexit, os, re, stat, sys, termios # # Adjust the load path based on the location of cdm.py and the version @@ -344,12 +344,22 @@ def cdm_mapfilechk(ui, repo, *args, **opts): exclude = not_check(repo, 'mapfilechk') ret = 0 + # We are interested in examining any file that has the following + # in its final path segment: + # - Contains the word 'mapfile' + # - Begins with 'map.' + # - Ends with '.map' + # We don't want to match unless these things occur in final path segment + # because directory names with these strings don't indicate a mapfile. + MapfileRE = re.compile(r'.*((mapfile[^/]*)|(/map\.*[^/]*)|(\.map))$', + re.IGNORECASE) + ui.write('Mapfile comment check:\n') for f, e in filelist: if e and e.is_removed(): continue - elif f.find('mapfile') == -1: + elif not MapfileRE.match(f): continue elif (e or opts.get('honour_nots')) and exclude(f): ui.status('Skipping %s...\n' % f) |