H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 1 | #!/usr/bin/perl |
H. Peter Anvin | e6ee1a8 | 2009-06-28 16:52:56 -0700 | [diff] [blame] | 2 | ## -------------------------------------------------------------------------- |
| 3 | ## |
H. Peter Anvin | 4071660 | 2016-05-16 20:30:09 -0700 | [diff] [blame] | 4 | ## Copyright 1996-2016 The NASM Authors - All Rights Reserved |
H. Peter Anvin | e6ee1a8 | 2009-06-28 16:52:56 -0700 | [diff] [blame] | 5 | ## See the file AUTHORS included with the NASM distribution for |
| 6 | ## the specific copyright holders. |
| 7 | ## |
| 8 | ## Redistribution and use in source and binary forms, with or without |
| 9 | ## modification, are permitted provided that the following |
| 10 | ## conditions are met: |
| 11 | ## |
| 12 | ## * Redistributions of source code must retain the above copyright |
| 13 | ## notice, this list of conditions and the following disclaimer. |
| 14 | ## * Redistributions in binary form must reproduce the above |
| 15 | ## copyright notice, this list of conditions and the following |
| 16 | ## disclaimer in the documentation and/or other materials provided |
| 17 | ## with the distribution. |
| 18 | ## |
| 19 | ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND |
| 20 | ## CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
| 21 | ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| 22 | ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 23 | ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
| 24 | ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 25 | ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
| 26 | ## NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| 27 | ## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 28 | ## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| 29 | ## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
| 30 | ## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
| 31 | ## EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 32 | ## |
| 33 | ## -------------------------------------------------------------------------- |
| 34 | |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 35 | # |
| 36 | # version.pl |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 37 | # |
| 38 | # Parse the NASM version file and produce appropriate macros |
| 39 | # |
| 40 | # The NASM version number is assumed to consist of: |
| 41 | # |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 42 | # <major>.<minor>[.<subminor>][pl<patchlevel>]]<tail> |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 43 | # |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 44 | # ... where <tail> is not necessarily numeric, but if it is of the form |
| 45 | # -<digits> it is assumed to be a snapshot release. |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 46 | # |
| 47 | # This defines the following macros: |
| 48 | # |
| 49 | # version.h: |
| 50 | # NASM_MAJOR_VER |
| 51 | # NASM_MINOR_VER |
| 52 | # NASM_SUBMINOR_VER -- this is zero if no subminor |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 53 | # NASM_PATCHLEVEL_VER -- this is zero is no patchlevel |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 54 | # NASM_SNAPSHOT -- if snapshot |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 55 | # NASM_VERSION_ID -- version number encoded |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 56 | # NASM_VER -- whole version number as a string |
| 57 | # |
| 58 | # version.mac: |
H. Peter Anvin | d235408 | 2019-08-27 16:38:48 -0700 | [diff] [blame] | 59 | # __?NASM_MAJOR?__ |
| 60 | # __?NASM_MINOR?__ |
| 61 | # __?NASM_SUBMINOR?__ |
| 62 | # __?NASM_PATCHLEVEL?__ |
| 63 | # __?NASM_SNAPSHOT?__ |
| 64 | # __?NASM_VERSION_ID?__ |
| 65 | # __?NASM_VER?__ |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 66 | # |
| 67 | |
| 68 | ($what) = @ARGV; |
| 69 | |
| 70 | $line = <STDIN>; |
| 71 | chomp $line; |
| 72 | |
H. Peter Anvin (Intel) | 177a05d | 2019-08-09 13:30:19 -0700 | [diff] [blame] | 73 | undef $maj; |
| 74 | undef $min; |
| 75 | undef $smin; |
| 76 | undef $plvl; |
| 77 | undef $tail; |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 78 | $is_rc = 0; |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 79 | |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 80 | if ( $line =~ /^([0-9]+)\.([0-9]+)(.*)$/ ) { |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 81 | $maj = $1; |
| 82 | $min = $2; |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 83 | $tail = $3; |
| 84 | if ( $tail =~ /^\.([0-9]+)(.*)$/ ) { |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 85 | $smin = $1; |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 86 | $tail = $2; |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 87 | } |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 88 | if ( $tail =~ /^(pl|\.)([0-9]+)(.*)$/ ) { |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 89 | $plvl = $2; |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 90 | $tail = $3; |
| 91 | } elsif ( $tail =~ /^rc([0-9]+)(.*)$/ ) { |
| 92 | $is_rc = 1; |
| 93 | $plvl = $1; |
| 94 | $tail = $2; |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 95 | } |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 96 | } else { |
| 97 | die "$0: Invalid input format\n"; |
| 98 | } |
| 99 | |
H. Peter Anvin | b6e3610 | 2008-11-01 12:57:05 -0700 | [diff] [blame] | 100 | if ($tail =~ /^\-([0-9]+)$/) { |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 101 | $snapshot = $1; |
| 102 | } else { |
| 103 | undef $snapshot; |
| 104 | } |
| 105 | |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 106 | $nmaj = $maj+0; $nmin = $min+0; |
| 107 | $nsmin = $smin+0; $nplvl = $plvl+0; |
| 108 | |
H. Peter Anvin | b10f3e2 | 2007-09-22 16:19:19 -0700 | [diff] [blame] | 109 | if ($is_rc) { |
| 110 | $nplvl += 90; |
| 111 | if ($nsmin > 0) { |
| 112 | $nsmin--; |
| 113 | } else { |
| 114 | $nsmin = 99; |
| 115 | if ($nmin > 0) { |
| 116 | $nmin--; |
| 117 | } else { |
| 118 | $nmin = 99; |
| 119 | $nmaj--; |
| 120 | } |
| 121 | } |
| 122 | } |
| 123 | |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 124 | $nasm_id = ($nmaj << 24)+($nmin << 16)+($nsmin << 8)+$nplvl; |
| 125 | |
H. Peter Anvin | b2783e1 | 2008-10-24 10:10:32 -0700 | [diff] [blame] | 126 | $mangled_ver = sprintf("%d.%02d", $nmaj, $nmin); |
H. Peter Anvin | 9ee0cea | 2008-10-25 12:41:29 -0700 | [diff] [blame] | 127 | if ($nsmin || $nplvl || defined($snapshot)) { |
| 128 | $mangled_ver .= sprintf(".%02d", $nsmin); |
| 129 | if ($nplvl || defined($snapshot)) { |
| 130 | $mangled_ver .= '.'.$nplvl; |
| 131 | } |
| 132 | } |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 133 | ($mtail = $tail) =~ tr/-/./; |
| 134 | $mangled_ver .= $mtail; |
H. Peter Anvin | 9b8f0ad | 2007-09-22 16:35:11 -0700 | [diff] [blame] | 135 | |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 136 | if ( $what eq 'h' ) { |
| 137 | print "#ifndef NASM_VERSION_H\n"; |
| 138 | print "#define NASM_VERSION_H\n"; |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 139 | printf "#define NASM_MAJOR_VER %d\n", $nmaj; |
| 140 | printf "#define NASM_MINOR_VER %d\n", $nmin; |
| 141 | printf "#define NASM_SUBMINOR_VER %d\n", $nsmin; |
| 142 | printf "#define NASM_PATCHLEVEL_VER %d\n", $nplvl; |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 143 | if (defined($snapshot)) { |
| 144 | printf "#define NASM_SNAPSHOT %d\n", $snapshot; |
| 145 | } |
H. Peter Anvin | 5a09ee3 | 2002-05-20 01:04:34 +0000 | [diff] [blame] | 146 | printf "#define NASM_VERSION_ID 0x%08x\n", $nasm_id; |
| 147 | printf "#define NASM_VER \"%s\"\n", $line; |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 148 | print "#endif /* NASM_VERSION_H */\n"; |
| 149 | } elsif ( $what eq 'mac' ) { |
H. Peter Anvin | f760661 | 2016-07-13 14:23:48 -0700 | [diff] [blame] | 150 | print "STD: version\n"; |
H. Peter Anvin | d235408 | 2019-08-27 16:38:48 -0700 | [diff] [blame] | 151 | printf "%%define __?NASM_MAJOR?__ %d\n", $nmaj; |
| 152 | printf "%%define __?NASM_MINOR?__ %d\n", $nmin; |
| 153 | printf "%%define __?NASM_SUBMINOR?__ %d\n", $nsmin; |
| 154 | printf "%%define __?NASM_PATCHLEVEL?__ %d\n", $nplvl; |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 155 | if (defined($snapshot)) { |
H. Peter Anvin | d235408 | 2019-08-27 16:38:48 -0700 | [diff] [blame] | 156 | printf "%%define __?NASM_SNAPSHOT?__ %d\n", $snapshot; |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 157 | } |
H. Peter Anvin | d235408 | 2019-08-27 16:38:48 -0700 | [diff] [blame] | 158 | printf "%%define __?NASM_VERSION_ID?__ 0%08Xh\n", $nasm_id; |
| 159 | printf "%%define __?NASM_VER?__ \"%s\"\n", $line; |
H. Peter Anvin | 9b8f0ad | 2007-09-22 16:35:11 -0700 | [diff] [blame] | 160 | } elsif ( $what eq 'sed' ) { |
| 161 | printf "s/\@\@NASM_MAJOR\@\@/%d/g\n", $nmaj; |
| 162 | printf "s/\@\@NASM_MINOR\@\@/%d/g\n", $nmin; |
| 163 | printf "s/\@\@NASM_SUBMINOR\@\@/%d/g\n", $nsmin; |
| 164 | printf "s/\@\@NASM_PATCHLEVEL\@\@/%d/g\n", $nplvl; |
H. Peter Anvin | 747a80e | 2007-09-27 21:12:17 -0700 | [diff] [blame] | 165 | printf "s/\@\@NASM_SNAPSHOT\@\@/%d/g\n", $snapshot; # Possibly empty |
H. Peter Anvin | 9b8f0ad | 2007-09-22 16:35:11 -0700 | [diff] [blame] | 166 | printf "s/\@\@NASM_VERSION_ID\@\@/%d/g\n", $nasm_id; |
| 167 | printf "s/\@\@NASM_VERSION_XID\@\@/0x%08x/g\n", $nasm_id; |
| 168 | printf "s/\@\@NASM_VER\@\@/%s/g\n", $line; |
| 169 | printf "s/\@\@NASM_MANGLED_VER\@\@/%s/g\n", $mangled_ver; |
H. Peter Anvin | 18622eb | 2008-02-05 21:29:32 -0800 | [diff] [blame] | 170 | } elsif ( $what eq 'make' ) { |
| 171 | printf "NASM_VER=%s\n", $line; |
| 172 | printf "NASM_MAJOR_VER=%d\n", $nmaj; |
| 173 | printf "NASM_MINOR_VER=%d\n", $nmin; |
| 174 | printf "NASM_SUBMINOR_VER=%d\n", $nsmin; |
| 175 | printf "NASM_PATCHLEVEL_VER=%d\n", $nplvl; |
H. Peter Anvin | d897922 | 2009-04-06 19:12:34 -0700 | [diff] [blame] | 176 | } elsif ( $what eq 'nsis' ) { |
| 177 | printf "!define VERSION \"%s\"\n", $line; |
| 178 | printf "!define MAJOR_VER %d\n", $nmin; |
| 179 | printf "!define MINOR_VER %d\n", $nmin; |
| 180 | printf "!define SUBMINOR_VER %d\n", $nsmin; |
| 181 | printf "!define PATCHLEVEL_VER %d\n", $nplvl; |
H. Peter Anvin | f29b128 | 2002-05-21 02:28:51 +0000 | [diff] [blame] | 182 | } elsif ( $what eq 'id' ) { |
| 183 | print $nasm_id, "\n"; # Print ID in decimal |
| 184 | } elsif ( $what eq 'xid' ) { |
| 185 | printf "0x%08x\n", $nasm_id; # Print ID in hexadecimal |
H. Peter Anvin | 4071660 | 2016-05-16 20:30:09 -0700 | [diff] [blame] | 186 | } elsif ( $what eq 'docsrc' ) { |
| 187 | printf "\\M{version}{%s}\n", $line; |
| 188 | printf "\\M{subtitle}{version %s}\n", $line; |
H. Peter Anvin | e87613b | 2002-05-04 03:57:52 +0000 | [diff] [blame] | 189 | } else { |
| 190 | die "$0: Unknown output: $what\n"; |
| 191 | } |
| 192 | |
| 193 | exit 0; |