xref: /titanic_50/usr/src/cmd/sgs/packages/common/readme_revision (revision 7c2fbfb345896881c631598ee3852ce9ce33fb07)
1#!/usr/bin/perl -w
2#
3# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
4# Use is subject to license terms.
5#
6# CDDL HEADER START
7#
8# The contents of this file are subject to the terms of the
9# Common Development and Distribution License (the "License").
10# You may not use this file except in compliance with the License.
11#
12# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
13# or http://www.opensolaris.org/os/licensing.
14# See the License for the specific language governing permissions
15# and limitations under the License.
16#
17# When distributing Covered Code, include this CDDL HEADER in each
18# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
19# If applicable, add the following below this CDDL HEADER, with the
20# fields enclosed by brackets "[]" replaced with your own identifying
21# information: Portions Copyright [yyyy] [name of copyright owner]
22#
23# CDDL HEADER END
24#
25#pragma ident	"%Z%%M%	%I%	%E% SMI"
26
27
28#
29# Generate a revision number for the sgs linker components, based
30# on usr/src/cmd/sgs/packages/common/SUNWonld-README.
31#
32#	usage: readme_revision [-d] [readme-file]
33#
34# This revision number used to be the SCCS revision id for that file,
35# in the form 1.xxx (where xxx was the revision). There were two benefits:
36#
37#	(1) You could examine the sccs revision log to determine the CR
38#		of the putback that created the revision.
39#	(2) The revisions were monotonically increasing.
40#
41# In order to remove the hard wired dependence on sccs, this script generates
42# a replacement revision number, by returning the string '1.xxx', where
43# xxx is an integer giving the number of unique CR lines found in the file.
44# This means that the revision goes up by one for each CR we fix, which
45# makes intutive sense, and is similar to the way the SCCS revision worked.
46#
47# If this is a debug/development build (-d option), then we include
48# additional information at the end of the revision:
49#
50#	- Workspace name
51#	- user
52#	- CR # of last item in the readme file
53#	- date,
54#
55# This extra information is useful when we need to identify SUNWonld
56# linker packages in the field, and provides the information previously
57# supplied by (1) above.
58#
59
60use vars qw($script $usage $readme $cnt);
61use vars qw($debug $last_cr $wsname $date);
62
63# Use the basename of the name we're invoked under as the script name
64@_ = split /\//, $0;
65$script = $_[$#_];
66$usage = "usage: $script [-d] [readme-file]\n";
67
68$debug = 0;
69# Process the options
70while ((scalar(@ARGV) > 0) && ($_ = $ARGV[0],/^-/)) {
71  ARG: {
72	if (/^-d$/) {
73		$debug = 1;
74		last ARG;
75	}
76
77
78      # If it gets here, the option is unknown.
79      die $usage;
80  }
81    shift;
82}
83
84# Plain argument
85$cnt = scalar @ARGV;
86{
87	if ($cnt == 0) {
88		$readme = 'SUNWonld-README';
89		next;
90	}
91
92	if ($cnt == 1) {
93		$readme = $ARGV[0];
94		next;
95	}
96
97	die $usage;
98}
99
100
101open(FILE, $readme) || die "$script: Unable to open $readme\n";
102
103# At the date this script was put into service, the SCCS revision
104# of SUNWonld-README was 1.627, and SUNWonld-README had 588 unique
105# CRs. Revisions are supposed to always increase monotonically, so
106# we add 1000 to the number of unique CRs.
107#
108# This means that any linker with a version <1000 was built using
109# the SCCS revision, and any linker with version >=1000 was built
110# with this script.
111$cnt = 1000;
112
113while ($_ = <FILE>) {
114	chomp $_;
115
116	# If the line starts with a number, it is taken as a CR.
117	if ($_ =~ /^(\d+)\s/) {
118		$cnt++;
119		$last_cr = $1;
120	}
121}
122close FILE;
123
124# If this is a standard build, the revision # is all we want
125if ($debug == 0) {
126	print "1.$cnt\n";
127	exit 0;
128}
129
130# For debug mode, add diagnostic data
131#
132($wsname = $ENV{'CODEMGR_WS'}) ne '' || ($wsname = 'unknown');
133@wsname = split /\//, $wsname;
134$wsname = $wsname[$#wsname];
135
136$date = `date +%m/%d/%y`;
137
138print "1.$cnt:$wsname-$ENV{USER}-$last_cr-$date\n";
139
140exit 0;
141