source: branches/port5/SOURCE_TOOLS/build_info.pl

Last change on this file was 5555, checked in by westram, 16 years ago
  • switched back to old behavior (auto-upgrade version once per hour)
  • Property svn:executable set to *
File size: 5.6 KB
Line 
1#!/usr/bin/perl
2
3# create/update build info into
4# $ARBHOME/TEMPLATES/arb_build.h and
5# $ARBHOME/TEMPLATES/svn_revision.h
6
7# --------------------------------------------------------------------------------
8
9my $dump = 1;
10
11# --------------------------------------------------------------------------------
12
13my $ARBHOME = $ENV{ARBHOME};
14if (not defined $ARBHOME) { die "ARBHOME undefined"; }
15if ((not -d $ARBHOME) or (not -f $ARBHOME.'/arb_LICENSE.txt')) {
16  die "ARBHOME ('$ARBHOME') must point to ARB build directory";
17}
18
19my $TEMPLATES    = $ARBHOME.'/TEMPLATES';       if (not -d $TEMPLATES)    { die "no such directory '$TEMPLATES'"; }
20my $SOURCE_TOOLS = $ARBHOME.'/SOURCE_TOOLS';    if (not -d $SOURCE_TOOLS) { die "no such directory '$SOURCE_TOOLS'"; }
21my $mv_if_diff   = $SOURCE_TOOLS.'/mv_if_diff'; if (not -x $mv_if_diff)   { die "no such skript '$mv_if_diff'"; }
22
23# --------------------------------------------------------------------------------
24
25sub getHost() {
26  my $host = $ENV{HOST};
27  my $hostname = $ENV{HOSTNAME};
28
29  my @hosts = ();
30  if (defined $host) { push @hosts, $host; }
31  if (defined $hostname) { push @hosts, $hostname; }
32
33  if (scalar(@hosts)==0) { push @hosts, "unknownHost"; }
34
35  @hosts = sort { length($b) <=> length($a); } @hosts; # sort longest first
36  return $hosts[0];
37}
38
39sub getUser() {
40  my $user = $ENV{USER};
41  if (not defined $user) { $user = 'unknownUser'; }
42  return $user;
43}
44
45sub update($\@) {
46  my ($file,$content_r) = @_;
47  my $tmp = $file.'.tmp';
48
49  open(TMP,'>'.$tmp) || die "can't write to '$tmp' (Reason: $!)";
50  foreach (@$content_r) { print TMP $_."\n"; }
51  close(TMP);
52  `$mv_if_diff '$tmp' '$file'`;
53}
54
55sub file2hash($\%$) {
56  my ($file,$hash_r,$expectFile) = @_;
57  if (open(FILE,'<'.$file)) {
58    foreach (<FILE>) {
59      chomp;
60      if (/^([^=]+)=(.*)$/o) { $$hash_r{$1}=$2; }
61    }
62    close(FILE);
63  }
64  elsif ($expectFile==1) {
65    die "can't read '$file' (Reason: $!)";
66  }
67}
68
69sub hash2file(\%$) {
70  my ($hash_r,$file) = @_;
71  open(FILE,'>'.$file) or die "can't write '$file' (Reason: $!)";
72  foreach (keys %$hash_r) {
73    print FILE "$_=".$$hash_r{$_}."\n";
74  }
75  close(FILE);
76}
77
78# --------------------------------------------------------------------------------
79
80my $dot_build_info = $ENV{HOME}.'/.arb_build_info';
81
82# default build info (may be overridden by ~/.arb_build_info)
83my %build_info =  (
84
85                   user                => getUser(),
86                   host                => getHost(),
87                   tag                 => 'private',
88                   allowVersionUpgrade => 0,
89                   showWhereBuild      => 1,
90
91                  );
92
93# read local settings
94file2hash($dot_build_info,%build_info,0);
95
96my $arb_build_h    = $TEMPLATES.'/arb_build.h';
97my $svn_revision_h = $TEMPLATES.'/svn_revision.h';
98
99my $in_SVN = (-d $ARBHOME.'/.svn');
100my $date = `date '+%d.%b.%Y'`;
101chomp($date);
102my $year = undef;
103if ($date =~ /\.([^\.]+)$/o) {
104  $year = $1;
105}
106else {
107  die "error parsing year from '$date'";
108}
109
110# read version info
111my $version_info = $SOURCE_TOOLS.'/version_info';
112my %version_info = ();
113file2hash($version_info,%version_info,1);
114
115# upgrade version?
116my $inc_major = $SOURCE_TOOLS.'/inc_major.stamp';
117my $inc_minor = $SOURCE_TOOLS.'/inc_minor.stamp';
118
119if ($in_SVN==1 and $build_info{allowVersionUpgrade}==1) {
120  if (-f $inc_major or -f $inc_minor) { # version upgrade requested
121    my $last_version_upgrade = $version_info{last_upgrade};
122    if (not defined $last_version_upgrade) { $last_version_upgrade = 0; }
123
124    my $earliestNextUpgrade = $last_version_upgrade + (60*60);
125    if (time>=$earliestNextUpgrade) { # do not upgrade version more than once per hour
126        my $oldVersion = $version_info{MAJOR}.'.'.$version_info{MINOR};
127        if (-f $inc_major) {
128          $version_info{MAJOR}++;
129          $version_info{MINOR} = 0;
130        }
131        else {
132          $version_info{MINOR}++;
133        }
134        my $newVersion = $version_info{MAJOR}.'.'.$version_info{MINOR};
135        print "Version upgraded from $oldVersion to $newVersion\n";
136        $version_info{last_upgrade}=time; # upgrade timestamp
137
138        hash2file(%version_info,$version_info);
139        my $command = "cd '$ARBHOME/SOURCE_TOOLS'; ".
140          "svn commit version_info --non-interactive ".
141            "--message 'Auto version upgrade to $newVersion by ".$build_info{user}.'@'.$build_info{host}."';".
142              "( cd '$ARBHOME' ; svn update )"; # update revision of checkout in $ARBHOME
143        `( $command )`;
144    }
145    else {
146      print "Skipping version upgrade (last upgrade was ".(time-$last_version_upgrade)." seconds ago)\n";
147    }
148  }
149}
150# remove requests
151-f $inc_minor && unlink($inc_minor);
152-f $inc_major && unlink($inc_major);
153
154my @arb_build = (
155                 '#define ARB_VERSION_MAJOR "'.$version_info{MAJOR}.'"',
156                 '#define ARB_VERSION_MINOR "'.$version_info{MINOR}.'"',
157                 '#define ARB_VERSION_TAG   "'.$build_info{tag}.'"',
158                 '#define ARB_BUILD_DATE    "'.$date.'"',
159                 '#define ARB_BUILD_YEAR    "'.$year.'"',
160                 '#define ARB_BUILD_HOST    "'.$build_info{host}.'"',
161                 '#define ARB_BUILD_USER    "'.$build_info{user}.'"',
162                );
163
164if ($build_info{showWhereBuild}!=0) {
165  push @arb_build, '#define SHOW_WHERE_BUILD';
166}
167
168update($arb_build_h,@arb_build);
169
170# update revision info?
171if ($in_SVN) {
172  # in SVN checkout -> update revision info
173  my $revision = `svnversion -n $ARBHOME`;
174  my @svn_revision = (
175                      '#define ARB_SVN_REVISION "'.$revision.'"',
176                     );
177  update($svn_revision_h,@svn_revision);
178}
179else {
180  if (not -f $svn_revision_h) {
181    die "Missing file '$svn_revision_h'";
182  }
183  # use revision info as in source tarball
184}
185
Note: See TracBrowser for help on using the repository browser.