#! /usr/bin/python
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
#
#
# Make sure there is a correctly formed copyright message containing
# the current year.
#
# We treat extant but incorrect copyrights of known format as present
# for the purposes of the "no copyright found" messages to avoid
# treating every otherwise incorrect copyright as also not present
#
import time, re, sys
def err(stream, msg, fname, line=None):
if line:
stream.write("%s: %d: %s\n" % (fname, line, msg))
else:
stream.write("%s: %s\n" % (fname, msg))
# pre-2002 copyright with '(c)'
oldcopyright = re.compile(r'Copyright \(c\) .* Sun Microsystems, Inc\.')
# pre-2002 copyright with 'by'
oldcopyright1 = re.compile(r'Copyright .* by Sun Microsystems, Inc\.')
# last valid Sun copyright
suncopyright = re.compile(r'Copyright ([\d, -]+) Sun Microsystems, Inc\.' +
r'(\s+)(All rights reserved\.)?')
# old, check to make sure no longer present
licterms = 'Use is subject to license terms.'
# initial Oracle copyright
goodcopyright = re.compile(r'Copyright \(c\) (\d\d\d\d, )?(\d\d\d\d)(,)? ' +
r'Oracle and/or its affiliates\.(\s+)' +
r'All rights reserved\.')
def copyright(fh, filename=None, output=sys.stderr):
ret = lineno = rights = 0
check_license = False
if not filename:
filename = fh.name
for line in fh:
lineno += 1
if check_license:
check_license = False
if licterms in line:
err(output, "old '%s' message found" % licterms,
filename, lineno)
ret = 1
continue
if oldcopyright.search(line):
err(output, "ancient Sun copyright", filename,
lineno)
rights += 1
ret = 1
check_license = True
continue
elif oldcopyright1.search(line):
err(output, "pre-2002 Sun copyright", filename, lineno)
rights += 1
ret = 1
check_license = True
continue
elif suncopyright.search(line):
err(output, "old Sun copyright", filename, lineno)
rights += 1
ret = 1
check_license = True
continue
#
# group 1 = optional initial year
# group 2 = current year
# group 3 = comma after current year
# group 4 = spacing between phrases
#
match = goodcopyright.search(line)
if match:
# only check for the old license message on the line
# following a copyright match
check_license = True
rights += 1
year = time.strftime('%Y')
if match.group(2) != year:
err(output, "wrong copyright year %s, should "
"be %s" %
(match.group(2), year), filename, lineno)
ret = 1
if match.group(3) != ',':
err(output, "need comma after current year",
filename, lineno)
ret = 1
if match.group(4) != ' ':
err(output, "need one space between copyright "
"and all rights reserved phrases",
filename, lineno)
ret = 1
if rights == 0:
err(output, "no copyright message found", filename)
ret = 1
return ret