Removed dead code left over from previous refactor of the version.pl test files
[nasm/perl-rewrite.git] / perl / version.pl
bloba2b97e8c89852f5ed2bf8b31258e7aa4884570de
1 #!/usr/bin/env perl
3 # version.pl
5 # Parse the NASM version file and produce appropriate macros
7 # The NASM version number is assumed to consist of:
9 # <major>.<minor>[.<subminor>][pl<patchlevel> | rc<number>]]<tail>
11 # ... where <tail> is not necessarily numeric, but if it is of the form
12 # -<digits> it is assumed to be a snapshot release.
14 # This defines the following macros:
16 # version.h:
17 # NASM_MAJOR_VER
18 # NASM_MINOR_VER
19 # NASM_SUBMINOR_VER -- this is zero if no subminor
20 # NASM_PATCHLEVEL_VER -- this is zero is no patchlevel
21 # NASM_SNAPSHOT -- if snapshot
22 # NASM_VERSION_ID -- version number encoded
23 # NASM_VER -- whole version number as a string
25 # version.mac:
26 # __NASM_MAJOR__
27 # __NASM_MINOR__
28 # __NASM_SUBMINOR__
29 # __NASM_PATCHLEVEL__
30 # __NASM_SNAPSHOT__
31 # __NASM_VERSION_ID__
32 # __NASM_VER__
34 use warnings;
35 use strict;
37 # fill in %version;
38 our %version;
40 my $line = <STDIN>;
41 chomp $line;
42 $version{_line} = $line;
44 $line =~ m{ ^
45 (?<major>\d+)[.](?<minor>\d+)
46 (?:[.](?<subminor>\d+))?
47 (?:
48 pl(?<patchlevel>\d+) |
49 rc(?<rc>\d+)
51 (?:
52 [-](?<snapshot>\d+) |
53 (?<tail>.+)
56 }x;
58 for my $key(qw'major minor subminor patchlevel rc'){
59 my $value = $+{$key} || 0;
60 $version{$key} = $value + 0;
62 for my $key(qw'snapshot tail'){
63 if(exists $+{$key}){
64 $version{$key} = $+{$key};
72 # modify %version if this is a release candidate
73 if($version{rc}){
74 $version{patchlevel} = $version{rc} + 90;
76 if($version{subminor}){
77 $version{subminor}--;
78 }else{
79 $version{subminor} = 99;
81 if($version{minor}){
82 $version{minor}--;
83 }else{
84 $version{minor} = 99;
85 $version{major}--;
92 # add 'id' and 'xid' to %version
93 $version{id} =
94 ($version{major} << 24) +
95 ($version{minor} << 16) +
96 ($version{subminor} << 8) +
97 $version{patchlevel};
98 $version{xid} = sprintf('0x%08x',$version{id});
102 # add 'mangled' to %version
104 my $mangled = sprintf("%d.%02d",$version{major},$version{minor});
106 $version{subminor} ||
107 $version{patchlevel} ||
108 $version{snapshot}
110 $mangled .= sprintf(".%02d",$version{subminor});
113 $version{patchlevel} ||
114 $version{snapshot}
116 $mangled .= sprintf(".%02d",$version{patchlevel})
120 if($version{snapshot}){
121 $mangled .= '.'.$version{snapshot}
122 }elsif( $version{tail}){
123 my $tail = $version{tail};
124 $tail =~ s/-/./g;
125 $mangled .= $tail;
128 $version{mangled} = $mangled;
134 # forward definition of subroutines
135 sub help;
136 sub h;
137 sub mac;
138 sub sed;
139 sub make;
140 sub nsis;
143 # jump table to subroutines / variables
144 my %jump = (
145 help => \&help,
146 h => \&h,
147 mac => \&mac,
148 sed => \&sed,
149 make => \&make,
150 nsis => \&nsis,
151 id => \$version{id},
152 xid => \$version{xid},
153 dump => sub{
154 no warnings;
155 require Data::Dumper;
156 $Data::Dumper::Terse = 1;
158 my %ret = %version;
159 for( keys %ret ){
160 # remove any "hidden" keys
161 delete $ret{$_} if /^[_.]/;
163 return Data::Dumper::Dumper(\%ret);
168 # Main Code Block
170 use Scalar::Util 'reftype';
172 my($arg) = (@ARGV, 'help');
173 local( undef, @ARGV) = @ARGV if @ARGV;
175 my $jump = $jump{$arg} || $jump{help};
178 if( ref $jump ){
179 my $reftype = reftype $jump;
181 if($reftype eq 'CODE'){
182 my $ret = $jump->(@ARGV);
183 print "$ret\n" if defined $ret;
185 }elsif($reftype eq 'SCALAR'){
186 print $$jump,"\n";
188 }else{
189 die;
191 }else{
192 print $jump,"\n";
197 # subroutine definitions
200 sub h{
201 printf <<END, @version{'major','minor','subminor','patchlevel'};
202 #ifndef NASM_VERSION_H
203 #define NASM_VERSION_H
204 #define NASM_MAJOR_VER %d
205 #define NASM_MINOR_VER %d
206 #define NASM_SUBMINOR_VER %d
207 #define NASM_PATCHLEVEL_VER %d
210 if ($version{snapshot}) {
211 printf "#define NASM_SNAPSHOT %d\n", $version{snapshot};
214 printf <<END, @version{'xid','_line'};
215 #define NASM_VERSION_ID %s
216 #define NASM_VER "%s"
217 #endif /* NASM_VERSION_H */
219 return;
224 sub mac{
225 printf <<'END', @version{'major','minor','subminor','patchlevel'};
226 %%define __NASM_MAJOR__ %d
227 %%define __NASM_MINOR__ %d
228 %%define __NASM_SUBMINOR__ %d
229 %%define __NASM_PATCHLEVEL__ %d
232 if ($version{snapshot}) {
233 printf "%%define __NASM_SNAPSHOT__ %d\n", $version{snapshot};
236 printf <<'END', @version{'id','_line'};
237 %%define __NASM_VERSION_ID__ 0%08Xh
238 %%define __NASM_VER__ "%s"
240 return;
245 sub sed{
246 my @rep = @version{qw{
247 major
248 minor
249 subminor
250 patchlevel
251 snapshot
254 _line
255 mangled
257 no warnings 'uninitialized';
258 sprintf <<'END', @rep;
259 s/@@NASM_MAJOR@@/%d/g
260 s/@@NASM_MINOR@@/%d/g
261 s/@@NASM_SUBMINOR@@/%d/g
262 s/@@NASM_PATCHLEVEL@@/%d/g
263 s/@@NASM_SNAPSHOT@@/%d/g
264 s/@@NASM_VERSION_ID@@/%d/g
265 s/@@NASM_VERSION_XID@@/%s/g
266 s/@@NASM_VER@@/%s/g
267 s/@@NASM_MANGLED_VER@@/%s/g
274 sub make{
275 return sprintf <<END, @version{'_line','major','minor','subminor','patchlevel'};
276 NASM_VER=%s
277 NASM_MAJOR_VER=%d
278 NASM_MINOR_VER=%d
279 NASM_SUBMINOR_VER=%d
280 NASM_PATCHLEVEL_VER=%d
286 sub nsis{
287 return sprintf <<'END', @version{'_line','major','minor','subminor','patchlevel'};
288 !define VERSION "%s"
289 !define MAJOR_VER %d
290 !define MINOR_VER %d
291 !define SUBMINOR_VER %d
292 !define PATCHLEVEL_VER %d
298 BEGIN{
299 my %help = (
300 sed => 'strings for sed command',
301 mac => 'strings for nasm macros',
302 h => 'strings for headers',
303 make => 'strings for makefiles',
304 dump => 'dump of program data',
305 nsis => 'nsis?'
307 sub help{
308 my($cmd) = @_;
309 if( $cmd and $help{$cmd} ){
310 return $help{$cmd};
311 }else{
312 return "$0 [help] <[ sed | mac | h | make | nsis | dump ]>";