summaryrefslogtreecommitdiff
path: root/usr/src/tools/onbld
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/tools/onbld')
-rw-r--r--usr/src/tools/onbld/Checks/Mapfile.py55
-rw-r--r--usr/src/tools/onbld/hgext/cdm.py14
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)