BR 3392279: Fix duplicated REX prefixes
[platform/upstream/nasm.git] / mkdep.pl
index 388315d..9f80ed3 100755 (executable)
--- a/mkdep.pl
+++ b/mkdep.pl
@@ -1,4 +1,39 @@
 #!/usr/bin/perl
+## --------------------------------------------------------------------------
+##   
+##   Copyright 1996-2009 The NASM Authors - All Rights Reserved
+##   See the file AUTHORS included with the NASM distribution for
+##   the specific copyright holders.
+##
+##   Copyright 1996-2009 the NASM Authors - All rights reserved.
+##
+##   Redistribution and use in source and binary forms, with or without
+##   modification, are permitted provided that the following
+##   conditions are met:
+##
+##   * Redistributions of source code must retain the above copyright
+##     notice, this list of conditions and the following disclaimer.
+##   * Redistributions in binary form must reproduce the above
+##     copyright notice, this list of conditions and the following
+##     disclaimer in the documentation and/or other materials provided
+##     with the distribution.
+##     
+##     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+##     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+##     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+##     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+##     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+##     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+##     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+##     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+##     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+##     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+##     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+##     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+##     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+##
+## --------------------------------------------------------------------------
+
 #
 # Script to create Makefile-style dependencies.
 #
@@ -84,7 +119,7 @@ sub insert_deps($) {
     my($file) = @_;
     $nexttemp++;               # Unique serial number for each temp file
     my($tmp) = File::Spec->catfile(dirname($file), 'tmp.'.$nexttemp);
-    
+
     sysopen(IN, $file, O_RDONLY)
        or die "$0: Cannot open input: $file\n";
     sysopen(OUT, $tmp, O_WRONLY|O_CREAT|O_TRUNC, 0666)
@@ -95,6 +130,7 @@ sub insert_deps($) {
     my($sep) = '/';
     my($cont) = "\\";
     my($maxline) = 78;         # Seems like a reasonable default
+    my @exclude = ();          # Don't exclude anything
 
     while ( defined($line = <IN>) ) {
        if ( $line =~ /^\s*\#\s*@([a-z0-9-]+):\s*\"([^\"]*)\"/ ) {
@@ -107,6 +143,8 @@ sub insert_deps($) {
                $maxline = $val+0;
            } elsif ( $parm eq 'continuation' ) {
                $cont = $val;
+           } elsif ( $parm eq 'exclude' ) {
+               @exclude = split(/\,/, $val);
            }
        } elsif ( $line eq $barrier ) {
            last;               # Stop reading input at barrier line
@@ -115,6 +153,12 @@ sub insert_deps($) {
     }
     close(IN);
 
+    my $e;
+    my %do_exclude = ();
+    foreach $e (@exclude) {
+       $do_exclude{$e} = 1;
+    }
+
     my $dfile, $ofile, $str, $sl, $len;
     my @deps, $dep;
 
@@ -127,29 +171,31 @@ sub insert_deps($) {
            $len = length($str);
            print OUT $str;
            foreach $dep ($dfile, alldeps($dfile)) {
-               $str = convert_file($dep,$sep);
-               $sl = length($str)+1;
-               if ( $len+$sl > $maxline-2 ) {
-                   print OUT ' ', $cont, "\n ", $str;
-                   $len = $sl;
-               } else {
-                   print OUT ' ', $str;
-                   $len += $sl;
+               unless ($do_exclude{$dep}) {
+                   $str = convert_file($dep,$sep);
+                   $sl = length($str)+1;
+                   if ( $len+$sl > $maxline-2 ) {
+                       print OUT ' ', $cont, "\n ", $str;
+                       $len = $sl;
+                   } else {
+                       print OUT ' ', $str;
+                       $len += $sl;
+                   }
                }
            }
            print OUT "\n";
        }
     }
     close(OUT);
-    
-    (unlink($file) && rename($tmp, $file)) 
+
+    (unlink($file) && rename($tmp, $file))
        or die "$0: Failed to change $tmp -> $file\n";
 }
 
 #
 # Main program
 #
-    
+
 %deps = ();
 @files = ();
 @mkfiles = ();