H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 1 | #!/usr/bin/perl |
| 2 | # |
| 3 | # version.pl |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 4 | # |
| 5 | # Parse the NASM version file and produce appropriate macros |
| 6 | # |
| 7 | # The NASM version number is assumed to consist of: |
| 8 | # |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 9 | # <major>.<minor>[.<subminor>][pl<patchlevel>]]<tail> |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 10 | # |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 11 | # ... where <tail> is not necessarily numeric, but if it is of the form |
| 12 | # -<digits> it is assumed to be a snapshot release. |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 13 | # |
| 14 | # This defines the following macros: |
| 15 | # |
| 16 | # version.h: |
| 17 | # NASM_MAJOR_VER |
| 18 | # NASM_MINOR_VER |
| 19 | # NASM_SUBMINOR_VER -- this is zero if no subminor |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 20 | # NASM_PATCHLEVEL_VER -- this is zero is no patchlevel |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 21 | # NASM_SNAPSHOT -- if snapshot |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 22 | # NASM_VERSION_ID -- version number encoded |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 23 | # NASM_VER -- whole version number as a string |
| 24 | # |
| 25 | # version.mac: |
| 26 | # __NASM_MAJOR__ |
| 27 | # __NASM_MINOR__ |
| 28 | # __NASM_SUBMINOR__ |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 29 | # __NASM_PATCHLEVEL__ |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 30 | # __NASM_SNAPSHOT__ |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 31 | # __NASM_VERSION_ID__ |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 32 | # __NASM_VER__ |
| 33 | # |
| 34 | |
| 35 | ($what) = @ARGV; |
| 36 | |
| 37 | $line = <STDIN>; |
| 38 | chomp $line; |
| 39 | |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 40 | undef $man, $min, $smin, $plvl, $tail; |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 41 | $is_rc = 0; |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 42 | |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 43 | if ( $line =~ /^([0-9]+)\.([0-9]+)(.*)$/ ) { |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 44 | $maj = $1; |
| 45 | $min = $2; |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 46 | $tail = $3; |
| 47 | if ( $tail =~ /^\.([0-9]+)(.*)$/ ) { |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 48 | $smin = $1; |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 49 | $tail = $2; |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 50 | } |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 51 | if ( $tail =~ /^(pl|\.)([0-9]+)(.*)$/ ) { |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 52 | $plvl = $2; |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 53 | $tail = $3; |
| 54 | } elsif ( $tail =~ /^rc([0-9]+)(.*)$/ ) { |
| 55 | $is_rc = 1; |
| 56 | $plvl = $1; |
| 57 | $tail = $2; |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 58 | } |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 59 | } else { |
| 60 | die "$0: Invalid input format\n"; |
| 61 | } |
| 62 | |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 63 | if ($tail =~ /^\-([0-9]+)/) { |
| 64 | $snapshot = $1; |
| 65 | } else { |
| 66 | undef $snapshot; |
| 67 | } |
| 68 | |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 69 | $nmaj = $maj+0; $nmin = $min+0; |
| 70 | $nsmin = $smin+0; $nplvl = $plvl+0; |
| 71 | |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 72 | if ($is_rc) { |
| 73 | $nplvl += 90; |
| 74 | if ($nsmin > 0) { |
| 75 | $nsmin--; |
| 76 | } else { |
| 77 | $nsmin = 99; |
| 78 | if ($nmin > 0) { |
| 79 | $nmin--; |
| 80 | } else { |
| 81 | $nmin = 99; |
| 82 | $nmaj--; |
| 83 | } |
| 84 | } |
| 85 | } |
| 86 | |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 87 | $nasm_id = ($nmaj << 24)+($nmin << 16)+($nsmin << 8)+$nplvl; |
| 88 | |
H. Peter Anvin | b2783e1 | 2008-10-24 10:10:32 -0700 | [diff] [blame] | 89 | $mangled_ver = sprintf("%d.%02d", $nmaj, $nmin); |
H. Peter Anvin | 9ee0cea | 2008-10-25 12:41:29 -0700 | [diff] [blame] | 90 | if ($nsmin || $nplvl || defined($snapshot)) { |
| 91 | $mangled_ver .= sprintf(".%02d", $nsmin); |
| 92 | if ($nplvl || defined($snapshot)) { |
| 93 | $mangled_ver .= '.'.$nplvl; |
| 94 | } |
| 95 | } |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 96 | ($mtail = $tail) =~ tr/-/./; |
| 97 | $mangled_ver .= $mtail; |
H. Peter Anvin | 9b8f0ad | 2007-09-22 16:35:11 -0700 | [diff] [blame] | 98 | |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 99 | if ( $what eq 'h' ) { |
| 100 | print "#ifndef NASM_VERSION_H\n"; |
| 101 | print "#define NASM_VERSION_H\n"; |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 102 | printf "#define NASM_MAJOR_VER %d\n", $nmaj; |
| 103 | printf "#define NASM_MINOR_VER %d\n", $nmin; |
| 104 | printf "#define NASM_SUBMINOR_VER %d\n", $nsmin; |
| 105 | printf "#define NASM_PATCHLEVEL_VER %d\n", $nplvl; |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 106 | if (defined($snapshot)) { |
| 107 | printf "#define NASM_SNAPSHOT %d\n", $snapshot; |
| 108 | } |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 109 | printf "#define NASM_VERSION_ID 0x%08x\n", $nasm_id; |
| 110 | printf "#define NASM_VER \"%s\"\n", $line; |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 111 | print "#endif /* NASM_VERSION_H */\n"; |
| 112 | } elsif ( $what eq 'mac' ) { |
H. Peter Anvin | 00edfad | 2002-05-04 04:10:09 +0000 | [diff] [blame] | 113 | printf "%%define __NASM_MAJOR__ %d\n", $nmaj; |
| 114 | printf "%%define __NASM_MINOR__ %d\n", $nmin; |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 115 | printf "%%define __NASM_SUBMINOR__ %d\n", $nsmin; |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 116 | printf "%%define __NASM_PATCHLEVEL__ %d\n", $nplvl; |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 117 | if (defined($snapshot)) { |
| 118 | printf "%%define __NASM_SNAPSHOT__ %d\n", $snapshot; |
| 119 | } |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 120 | printf "%%define __NASM_VERSION_ID__ 0%08Xh\n", $nasm_id; |
H. Peter Anvin | 00edfad | 2002-05-04 04:10:09 +0000 | [diff] [blame] | 121 | printf "%%define __NASM_VER__ \"%s\"\n", $line; |
H. Peter Anvin | 9b8f0ad | 2007-09-22 16:35:11 -0700 | [diff] [blame] | 122 | } elsif ( $what eq 'sed' ) { |
| 123 | printf "s/\@\@NASM_MAJOR\@\@/%d/g\n", $nmaj; |
| 124 | printf "s/\@\@NASM_MINOR\@\@/%d/g\n", $nmin; |
| 125 | printf "s/\@\@NASM_SUBMINOR\@\@/%d/g\n", $nsmin; |
| 126 | printf "s/\@\@NASM_PATCHLEVEL\@\@/%d/g\n", $nplvl; |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 127 | printf "s/\@\@NASM_SNAPSHOT\@\@/%d/g\n", $snapshot; # Possibly empty |
H. Peter Anvin | 9b8f0ad | 2007-09-22 16:35:11 -0700 | [diff] [blame] | 128 | printf "s/\@\@NASM_VERSION_ID\@\@/%d/g\n", $nasm_id; |
| 129 | printf "s/\@\@NASM_VERSION_XID\@\@/0x%08x/g\n", $nasm_id; |
| 130 | printf "s/\@\@NASM_VER\@\@/%s/g\n", $line; |
| 131 | printf "s/\@\@NASM_MANGLED_VER\@\@/%s/g\n", $mangled_ver; |
H. Peter Anvin | 18622eb | 2008-02-05 21:29:32 -0800 | [diff] [blame] | 132 | } elsif ( $what eq 'make' ) { |
| 133 | printf "NASM_VER=%s\n", $line; |
| 134 | printf "NASM_MAJOR_VER=%d\n", $nmaj; |
| 135 | printf "NASM_MINOR_VER=%d\n", $nmin; |
| 136 | printf "NASM_SUBMINOR_VER=%d\n", $nsmin; |
| 137 | printf "NASM_PATCHLEVEL_VER=%d\n", $nplvl; |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 138 | } elsif ( $what eq 'id' ) { |
| 139 | print $nasm_id, "\n"; # Print ID in decimal |
| 140 | } elsif ( $what eq 'xid' ) { |
| 141 | printf "0x%08x\n", $nasm_id; # Print ID in hexadecimal |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 142 | } else { |
| 143 | die "$0: Unknown output: $what\n"; |
| 144 | } |
| 145 | |
| 146 | exit 0; |