]> git.saurik.com Git - apple/xnu.git/blame - config/newvers.pl
xnu-3248.60.10.tar.gz
[apple/xnu.git] / config / newvers.pl
CommitLineData
91447636
A
1#!/usr/bin/perl
2#
3# This tool is used to stamp kernel version information into files at kernel
4# build time. Each argument provided on the command line is the path to a file
5# that needs to be updated with the current verison information. The file
6# xnu/config/MasterVersion is read to determine the version number to use.
7# Each file is read, and all occurrences of the following strings are replaced
8# in-place like so:
9# ###KERNEL_VERSION_LONG### 1.2.3b4
10# ###KERNEL_VERSION_SHORT### 1.2.3
11# ###KERNEL_VERSION_MAJOR### 1
12# ###KERNEL_VERSION_MINOR### 2
13# ###KERNEL_VERSION_VARIANT### 3b4
14# ###KERNEL_VERSION_REVISION### 3
15# ###KERNEL_VERSION_STAGE### VERSION_STAGE_BETA (see libkern/version.h)
16# ###KERNEL_VERSION_PRERELEASE_LEVEL### 4
17# ###KERNEL_BUILDER### root
18# ###KERNEL_BUILD_OBJROOT### xnu/xnu-690.obj~2/RELEASE_PPC
19# ###KERNEL_BUILD_DATE### Sun Oct 24 05:33:28 PDT 2004
20
316670eb
A
21use File::Basename;
22
23use strict;
24
91447636
A
25sub ReadFile {
26 my ($fileName) = @_;
27 my $data;
28 local $/ = undef; # Read complete files
29
30 if (open(IN, "<$fileName")) {
31 $data=<IN>;
32 close IN;
33 return $data;
34 }
35 die "newvers: Can't read file \"$fileName\"\n";
36}
37
38sub WriteFile {
39 my ($fileName, $data) = @_;
40
41 open (OUT, ">$fileName") or die "newvers: Can't write file \"$fileName\"\n";
42 print OUT $data;
43 close(OUT);
44}
45
316670eb
A
46die("SRCROOT not defined") unless defined($ENV{'SRCROOT'});
47die("OBJROOT not defined") unless defined($ENV{'OBJROOT'});
48
91447636 49my $versfile = "MasterVersion";
39236c6e 50$versfile = "$ENV{'SRCROOT'}/config/$versfile" if ($ENV{'SRCROOT'});
316670eb
A
51my $BUILD_SRCROOT=$ENV{'SRCROOT'};
52$BUILD_SRCROOT =~ s,/+$,,;
53my $BUILD_OBJROOT=$ENV{'OBJROOT'};
54$BUILD_OBJROOT =~ s,/+$,,;
39236c6e 55my $BUILD_OBJPATH=$ENV{'TARGET'} || $ENV{'OBJROOT'};
316670eb 56$BUILD_OBJPATH =~ s,/+$,,;
91447636
A
57my $BUILD_DATE = `date`;
58$BUILD_DATE =~ s/[\n\t]//g;
59my $BUILDER=`whoami`;
60$BUILDER =~ s/[\n\t]//g;
fe8ab488 61my $RC_STRING = $ENV{'RC_ProjectNameAndSourceVersion'} . "~" . $ENV{'RC_ProjectBuildVersion'} if defined($ENV{'RC_XBS'});
316670eb 62
fe8ab488 63# Handle four scenarios:
316670eb
A
64# SRCROOT=/tmp/xnu
65# OBJROOT=/tmp/xnu/BUILD/obj
66# OBJPATH=/tmp/xnu/BUILD/obj/RELEASE_X86_64
67#
fe8ab488
A
68# SRCROOT=/SourceCache/xnu/xnu-2706
69# OBJROOT=/BinaryCache/xnu/xnu-2706~3/Objects
70# OBJPATH=/BinaryCache/xnu/xnu-2706~3/Objects/DEVELOPMENT_X86_64
71# RC_XBS=YES (XBS-16.3+)
72# RC_ProjectNameAndSourceVersion=xnu-2706
73# RC_ProjectBuildVersion=3
74#
75# SRCROOT=/SourceCache/xnu/xnu-2706
76# OBJROOT=/private/var/tmp/xnu/xnu-2706~2
77# OBJPATH=/private/var/tmp/xnu/xnu-2706~2/DEVELOPMENT_ARM_S5L8940X
78# RC_XBS=YES (<XBS-16.3)
79# RC_ProjectNameAndSourceVersion=xnu-2706
80# RC_ProjectBuildVersion=2
81#
82# SRCROOT=/tmp/xnu-2800.0.1_xnu-svn.roots/Sources/xnu-2800.0.1
83# OBJROOT=/private/tmp/xnu-2800.0.1_xnu-svn.roots/BuildRecords/xnu-2800.0.1_install/Objects
84# OBJPATH=/private/tmp/xnu-2800.0.1_xnu-svn.roots/BuildRecords/xnu-2800.0.1_install/Objects/DEVELOPMENT_X86_64
85# RC_XBS=YES (buildit)
86# RC_BUILDIT=YES
87# RC_ProjectNameAndSourceVersion=xnu-2800.0.1
88# RC_ProjectBuildVersion=1
89#
316670eb
A
90#
91# If SRCROOT is a strict prefix of OBJPATH, we
92# want to preserve the "interesting" part
93# starting with "xnu". If it's not a prefix,
94# the basename of OBJROOT itself is "interesting".
fe8ab488
A
95# Newer versions of XBS just set this to "Objects", so we
96# need to synthesize the directory name to be more interesting.
97#
316670eb
A
98
99if ($BUILD_OBJPATH =~ m,^$BUILD_SRCROOT/(.*)$,) {
100 $BUILD_OBJROOT = basename($BUILD_SRCROOT) . "/" . $1;
101} elsif ($BUILD_OBJPATH =~ m,^$BUILD_OBJROOT/(.*)$,) {
fe8ab488
A
102 if (defined($RC_STRING)) {
103 $BUILD_OBJROOT = $RC_STRING . "/" . $1;
104 } else {
105 $BUILD_OBJROOT = basename($BUILD_OBJROOT) . "/" . $1;
106 }
316670eb
A
107} else {
108 # Use original OBJROOT
109}
91447636
A
110
111my $rawvers = &ReadFile($versfile);
112#$rawvers =~ s/\s//g;
113($rawvers) = split "\n", $rawvers;
114my ($VERSION_MAJOR, $VERSION_MINOR, $VERSION_VARIANT) = split /\./, $rawvers;
115die "newvers: Invalid MasterVersion \"$rawvers\"!!! " if (!$VERSION_MAJOR);
116$VERSION_MINOR = "0" unless ($VERSION_MINOR);
117$VERSION_VARIANT = "0" unless ($VERSION_VARIANT);
118$VERSION_VARIANT =~ tr/A-Z/a-z/;
119$VERSION_VARIANT =~ m/(\d+)((?:d|a|b|r|fc)?)(\d*)/;
120my $VERSION_REVISION = $1;
121my $stage = $2;
122my $VERSION_PRERELEASE_LEVEL = $3;
123$VERSION_REVISION ="0" unless ($VERSION_REVISION);
124$stage = "r" if (!$stage || ($stage eq "fc"));
125$VERSION_PRERELEASE_LEVEL = "0" unless ($VERSION_PRERELEASE_LEVEL);
126
127my $VERSION_STAGE;
128$VERSION_STAGE = 'VERSION_STAGE_DEV' if ($stage eq 'd');
129$VERSION_STAGE = 'VERSION_STAGE_ALPHA' if ($stage eq 'a');
130$VERSION_STAGE = 'VERSION_STAGE_BETA' if ($stage eq 'b');
131$VERSION_STAGE = 'VERSION_STAGE_RELEASE' if ($stage eq 'r');
132
133my $VERSION_SHORT = "$VERSION_MAJOR.$VERSION_MINOR.$VERSION_REVISION";
134my $VERSION_LONG = $VERSION_SHORT;
135$VERSION_LONG .= "$stage$VERSION_PRERELEASE_LEVEL" if (($stage ne "r") || ($VERSION_PRERELEASE_LEVEL != 0));
136
137my $file;
138foreach $file (@ARGV) {
139 print "newvers.pl: Stamping version \"$VERSION_LONG\" into \"$file\" ...";
140 my $data = &ReadFile($file);
141 my $count=0;
142 $count += $data =~ s/###KERNEL_VERSION_LONG###/$VERSION_LONG/g;
143 $count += $data =~ s/###KERNEL_VERSION_SHORT###/$VERSION_SHORT/g;
144 $count += $data =~ s/###KERNEL_VERSION_MAJOR###/$VERSION_MAJOR/g;
145 $count += $data =~ s/###KERNEL_VERSION_MINOR###/$VERSION_MINOR/g;
146 $count += $data =~ s/###KERNEL_VERSION_VARIANT###/$VERSION_VARIANT/g;
147 $count += $data =~ s/###KERNEL_VERSION_REVISION###/$VERSION_REVISION/g;
148 $count += $data =~ s/###KERNEL_VERSION_STAGE###/$VERSION_STAGE/g;
149 $count += $data =~ s/###KERNEL_VERSION_PRERELEASE_LEVEL###/$VERSION_PRERELEASE_LEVEL/g;
150 $count += $data =~ s/###KERNEL_BUILDER###/$BUILDER/g;
151 $count += $data =~ s/###KERNEL_BUILD_OBJROOT###/$BUILD_OBJROOT/g;
152 $count += $data =~ s/###KERNEL_BUILD_DATE###/$BUILD_DATE/g;
153 print " $count replacements\n";
154 &WriteFile($file, $data);
155}
156
157if (0==scalar @ARGV) {
158 print "newvers.pl: read version \"$rawvers\" from \"$versfile\"\n";
159 print "newvers.pl: ###KERNEL_VERSION_LONG### = $VERSION_LONG\n";
160 print "newvers.pl: ###KERNEL_VERSION_SHORT### = $VERSION_SHORT\n";
161 print "newvers.pl: ###KERNEL_VERSION_MAJOR### = $VERSION_MAJOR\n";
162 print "newvers.pl: ###KERNEL_VERSION_MINOR### = $VERSION_MINOR\n";
163 print "newvers.pl: ###KERNEL_VERSION_VARIANT### = $VERSION_VARIANT\n";
164 print "newvers.pl: ###KERNEL_VERSION_REVISION### = $VERSION_REVISION\n";
165 print "newvers.pl: ###KERNEL_VERSION_STAGE### = $VERSION_STAGE\n";
166 print "newvers.pl: ###KERNEL_VERSION_PRERELEASE_LEVEL### = $VERSION_PRERELEASE_LEVEL\n";
167 print "newvers.pl: ###KERNEL_BUILDER### = $BUILDER\n";
168 print "newvers.pl: ###KERNEL_BUILD_OBJROOT### = $BUILD_OBJROOT\n";
169 print "newvers.pl: ###KERNEL_BUILD_DATE### = $BUILD_DATE\n";
170}