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 
  60 use vars qw($script $usage $readme $cnt);
  61 use 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
  70 while ((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 
 101 open(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 
 113 while ($_ = <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 }
 122 close FILE;
 123 
 124 # If this is a standard build, the revision # is all we want
 125 if ($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 
 138 print "1.$cnt:$wsname-$ENV{USER}-$last_cr-$date\n";
 139 
 140 exit 0;