Hello community,

here is the log from the commit of package abi-compliance-checker for 
openSUSE:Factory checked in at 2017-07-08 12:34:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/abi-compliance-checker (Old)
 and      /work/SRC/openSUSE:Factory/.abi-compliance-checker.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "abi-compliance-checker"

Sat Jul  8 12:34:44 2017 rev:7 rq:508414 version:2.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/abi-compliance-checker/abi-compliance-checker.changes
    2017-03-31 15:10:04.847351726 +0200
+++ 
/work/SRC/openSUSE:Factory/.abi-compliance-checker.new/abi-compliance-checker.changes
       2017-07-08 12:34:54.686120929 +0200
@@ -1,0 +2,14 @@
+Wed Jul  5 15:38:54 UTC 2017 - astie...@suse.com
+
+- update to 2.1:
+  * Show added v-table symbols for public classes
+  * Fixed analysis of static methods
+  * Fixed analysis of typedefs
+  * Fixed analysis of zero-size structs
+  * Fixed logs
+  * Fixed analysis of static libraries on Windows
+  * Fixed search for files on Windows
+  * Documented -skip-internal-types option in -help
+  * Add noindex meta tag to report if no changes detected
+
+-------------------------------------------------------------------

Old:
----
  abi-compliance-checker-2.0.tar.gz

New:
----
  abi-compliance-checker-2.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ abi-compliance-checker.spec ++++++
--- /var/tmp/diff_new_pack.DZFIo8/_old  2017-07-08 12:34:55.446013746 +0200
+++ /var/tmp/diff_new_pack.DZFIo8/_new  2017-07-08 12:34:55.450013182 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           abi-compliance-checker
-Version:        2.0
+Version:        2.1
 Release:        0
 Summary:        A Compliance Checker For library ABIs
 License:        GPL-2.0+ or LGPL-2.0+

++++++ abi-compliance-checker-2.0.tar.gz -> abi-compliance-checker-2.1.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abi-compliance-checker-2.0/INSTALL 
new/abi-compliance-checker-2.1/INSTALL
--- old/abi-compliance-checker-2.0/INSTALL      2017-01-28 17:20:49.000000000 
+0100
+++ new/abi-compliance-checker-2.1/INSTALL      2017-06-17 06:59:27.000000000 
+0200
@@ -8,8 +8,8 @@
 RELEASE INFORMATION
 
 Project:           ABI Compliance Checker (ABICC)
-Version:           2.0
-Date:              2017-01-28
+Version:           2.1
+Date:              June 17, 2017
 
 
 This file explains how to install and setup environment
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abi-compliance-checker-2.0/abi-compliance-checker.pl 
new/abi-compliance-checker-2.1/abi-compliance-checker.pl
--- old/abi-compliance-checker-2.0/abi-compliance-checker.pl    2017-01-28 
17:20:49.000000000 +0100
+++ new/abi-compliance-checker-2.1/abi-compliance-checker.pl    2017-06-17 
06:59:27.000000000 +0200
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 ###########################################################################
-# ABI Compliance Checker (ABICC) 2.0
+# ABI Compliance Checker (ABICC) 2.1
 # A tool for checking backward compatibility of a C/C++ library API
 #
 # Copyright (C) 2009-2011 Institute for System Programming, RAS
@@ -58,7 +58,7 @@
 use Cwd qw(abs_path cwd);
 use Data::Dumper;
 
-my $TOOL_VERSION = "2.0";
+my $TOOL_VERSION = "2.1";
 my $XML_REPORT_VERSION = "1.2";
 my $ABI_DUMP_VERSION = "3.4";
 my $ABI_DUMP_VERSION_MIN = "3.2";
@@ -608,10 +608,12 @@
       The list of types that should not be checked.
 
   -skip-internal-symbols PATTERN
-      Do not check symbols matched by the pattern.
+      Do not check symbols matched by the regular expression.
 
   -skip-internal-types PATTERN
-      Do not check types matched by the pattern.
+      Do not check types matched by the regular expression.
+      It's matched against full qualified type names (e.g. 'struct 
xyz::Name<T>').
+      It has to match any part of type name.
 
   -keep-cxx
       Check _ZS*, _ZNS* and _ZNKS* symbols.
@@ -3064,9 +3066,9 @@
         }
     }
     
-    if(not $Type1_Pure{"Size"}
-    or not $Type2_Pure{"Size"})
-    {
+    if($Type1_Pure{"Size"} eq ""
+    or $Type2_Pure{"Size"} eq "")
+    { # NOTE: size of struct may be 0 bytes
         if($Type1_Pure{"Type"}=~/Class|Struct|Union/)
         { # including a case when "class Class { ... };" changed to "class 
Class;"
             if(not defined $Type1_Pure{"Memb"} or not defined 
$Type2_Pure{"Memb"}
@@ -3530,10 +3532,12 @@
                 if(my $BSize2 = 
$Type2_Pure{"Memb"}{$MemberPair_Pos}{"bitfield"}) {
                     $SizeV2 = $BSize2;
                 }
+                
                 my $MemberType1_Name = $TypeInfo{1}{$MemberType1_Id}{"Name"};
                 my $MemberType2_Name = $TypeInfo{2}{$MemberType2_Id}{"Name"};
+                
                 if($Level eq "Binary"
-                and $SizeV1 and $SizeV2
+                and $SizeV1 ne "" and $SizeV2 ne ""
                 and $SizeV1 ne $SizeV2)
                 {
                     if($MemberType1_Name eq $MemberType2_Name or 
(isAnon($MemberType1_Name) and isAnon($MemberType2_Name))
@@ -3894,13 +3898,54 @@
     }
 }
 
+sub checkVtable($$$)
+{
+    my ($Level, $Symbol, $V) = @_;
+    
+    # skip v-tables for templates, that should not be imported by applications
+    if(my $CName = $VTableClass{$V}{$Symbol})
+    {
+        if(index($CName, "<")!=-1) {
+            return 0;
+        }
+        
+        if(not keys(%{$ClassMethods{$Level}{$V}{$CName}}))
+        { # do not show vtables for "private" classes
+          # use case: vtable for QDragManager (Qt 4.5.3 to 4.6.0) became 
HIDDEN symbol
+            return 0;
+        }
+    }
+    
+    if($In::Desc{$V}{"SkipSymbols"}{$Symbol})
+    { # user defined symbols to ignore
+        return 0;
+    }
+    
+    return 1;
+}
+
 sub mergeLibs($)
 {
     my $Level = $_[0];
     foreach my $Symbol (sort keys(%{$AddedInt{$Level}}))
     { # checking added symbols
         next if(not $CompSign{2}{$Symbol}{"Header"} and not 
$CompSign{2}{$Symbol}{"Source"});
-        next if(not symbolFilter($Symbol, $CompSign{2}{$Symbol}, "Affected + 
InlineVirt", $Level, 2));
+        
+        if(index($Symbol, "_ZTV")==0)
+        {
+            if(not checkVtable($Level, $Symbol, 2)) {
+                next;
+            }
+        }
+        else {
+            next if(not symbolFilter($Symbol, $CompSign{2}{$Symbol}, "Affected 
+ InlineVirt", $Level, 2));
+        }
+        
+        if($CompSign{2}{$Symbol}{"PureVirt"})
+        { # symbols for pure virtual methods cannot be called by clients
+            next;
+        }
+        
         %{$CompatProblems{$Level}{$Symbol}{"Added_Symbol"}{""}} = ();
     }
     foreach my $Symbol (sort keys(%{$RemovedInt{$Level}}))
@@ -3908,22 +3953,8 @@
         next if(not $CompSign{1}{$Symbol}{"Header"} and not 
$CompSign{1}{$Symbol}{"Source"});
         
         if(index($Symbol, "_ZTV")==0)
-        { # skip v-tables for templates, that should not be imported by 
applications
-            if(my $CName = $VTableClass{1}{$Symbol})
-            {
-                if(index($CName, "<")!=-1) {
-                    next;
-                }
-                
-                if(not keys(%{$ClassMethods{$Level}{1}{$CName}}))
-                { # vtables for "private" classes
-                  # use case: vtable for QDragManager (Qt 4.5.3 to 4.6.0) 
became HIDDEN symbol
-                    next;
-                }
-            }
-            
-            if($In::Desc{1}{"SkipSymbols"}{$Symbol})
-            { # user defined symbols to ignore
+        {
+            if(not checkVtable($Level, $Symbol, 1)) {
                 next;
             }
         }
@@ -6627,6 +6658,9 @@
         $TotalSymbols -= keys(%ExtendedSymbols);
     }
     
+    my $AnyChanged = ($Added or $Removed or $I_Problems_High or 
$I_Problems_Medium or $I_Problems_Low or $T_Problems_High or
+    $C_Problems_Low or $T_Problems_Medium or $T_Problems_Low or $I_Other or 
$T_Other or $C_Other);
+    
     my ($Arch1, $Arch2) = ($In::ABI{1}{"Arch"}, $In::ABI{2}{"Arch"});
     my ($GccV1, $GccV2) = ($In::ABI{1}{"GccVersion"}, 
$In::ABI{2}{"GccVersion"});
     my ($ClangV1, $ClangV2) = ($In::ABI{1}{"ClangVersion"}, 
$In::ABI{2}{"ClangVersion"});
@@ -6717,7 +6751,7 @@
         
         $Problem_Summary = 
"<problem_summary>\n".$Problem_Summary."</problem_summary>\n\n";
         
-        return ($TestInfo.$TestResults.$Problem_Summary, "");
+        return ($TestInfo.$TestResults.$Problem_Summary, "", $AnyChanged);
     }
     else
     { # HTML
@@ -6950,7 +6984,7 @@
         $META_DATA .= "tool_version:$TOOL_VERSION";
         $Problem_Summary .= "</table>\n";
         
-        return ($TestInfo.$TestResults.$Problem_Summary, $META_DATA);
+        return ($TestInfo.$TestResults.$Problem_Summary, $META_DATA, 
$AnyChanged);
     }
 }
 
@@ -8340,7 +8374,7 @@
         else
         {
             my $Report = "<report kind=\"".lc($Level)."\" 
version=\"$XML_REPORT_VERSION\">\n\n";
-            my ($Summary, $MetaData) = getSummary($Level);
+            my ($Summary, $MetaData, $AnyChanged) = getSummary($Level);
             $Report .= $Summary."\n";
             $Report .= getReportProblems_All($Level);
             $Report .= "</report>\n";
@@ -8358,9 +8392,9 @@
             my $Title = $In::Opt{"TargetTitle"}.": ".$In::Desc{1}{"Version"}." 
to ".$In::Desc{2}{"Version"}." compatibility report";
             my $Keywords = $In::Opt{"TargetTitle"}.", compatibility, API, ABI, 
report";
             my $Des = "API/ABI compatibility report for the 
".$In::Opt{"TargetTitle"}." ".$In::Opt{"TargetComponent"}." between 
".$In::Desc{1}{"Version"}." and ".$In::Desc{2}{"Version"}." versions";
-            my ($BSummary, $BMetaData) = getSummary("Binary");
-            my ($SSummary, $SMetaData) = getSummary("Source");
-            my $Report = "<!-\- $BMetaData -\->\n<!-\- $SMetaData 
-\->\n".composeHTML_Head($Title, $Keywords, $Des, $CssStyles, 
$JScripts)."<body><a name='Source'></a><a name='Binary'></a><a name='Top'></a>";
+            my ($BSummary, $BMetaData, $BAnyChanged) = getSummary("Binary");
+            my ($SSummary, $SMetaData, $SAnyChanged) = getSummary("Source");
+            my $Report = "<!-\- $BMetaData -\->\n<!-\- $SMetaData 
-\->\n".composeHTML_Head($Title, $Keywords, $Des, $CssStyles, $JScripts, 
($BAnyChanged or $SAnyChanged))."<body><a name='Source'></a><a 
name='Binary'></a><a name='Top'></a>";
             $Report .= getReportTitle("Join")."
             <br/>
             <div class='tabset'>
@@ -8375,7 +8409,7 @@
         }
         else
         {
-            my ($Summary, $MetaData) = getSummary($Level);
+            my ($Summary, $MetaData, $AnyChanged) = getSummary($Level);
             my $Title = $In::Opt{"TargetTitle"}.": ".$In::Desc{1}{"Version"}." 
to ".$In::Desc{2}{"Version"}." ".lc($Level)." compatibility report";
             my $Keywords = $In::Opt{"TargetTitle"}.", ".lc($Level)." 
compatibility, API, report";
             my $Des = "$Level compatibility report for the 
".$In::Opt{"TargetTitle"}." ".$In::Opt{"TargetComponent"}." between 
".$In::Desc{1}{"Version"}." and ".$In::Desc{2}{"Version"}." versions";
@@ -8385,7 +8419,7 @@
                     $Des .= " on ".showArch($In::ABI{1}{"Arch"});
                 }
             }
-            my $Report = "<!-\- $MetaData -\->\n".composeHTML_Head($Title, 
$Keywords, $Des, $CssStyles, $JScripts)."\n<body>\n<div><a name='Top'></a>\n";
+            my $Report = "<!-\- $MetaData -\->\n".composeHTML_Head($Title, 
$Keywords, $Des, $CssStyles, $JScripts, $AnyChanged)."\n<body>\n<div><a 
name='Top'></a>\n";
             $Report .= getReportTitle($Level)."\n".$Summary."\n";
             $Report .= getReportProblems_All($Level);
             $Report .= getSourceInfo();
@@ -8488,9 +8522,9 @@
     return $Report;
 }
 
-sub composeHTML_Head($$$$$)
+sub composeHTML_Head($$$$$$)
 {
-    my ($Title, $Keywords, $Des, $Styles, $Scripts) = @_;
+    my ($Title, $Keywords, $Des, $Styles, $Scripts, $AnyChanged) = @_;
     
     my $Head = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 
Transitional//EN\" 
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\";>\n";
     $Head .= "<html xmlns=\"http://www.w3.org/1999/xhtml\"; xml:lang=\"en\" 
lang=\"en\">\n";
@@ -8498,6 +8532,11 @@
     $Head .= "<meta http-equiv=\"Content-Type\" content=\"text/html; 
charset=utf-8\" />\n";
     $Head .= "<meta name=\"keywords\" content=\"$Keywords\" />\n";
     $Head .= "<meta name=\"description\" content=\"$Des\" />\n";
+    
+    if(not $AnyChanged) {
+        $Head .= "<meta name=\"robots\" content=\"noindex\" />\n";
+    }
+    
     $Head .= "<title>$Title</title>\n";
     $Head .= "<style type=\"text/css\">\n$Styles</style>\n";
     $Head .= "<script type=\"text/javascript\" 
language=\"JavaScript\">\n<!--\n$Scripts\n-->\n</script>\n";
@@ -8955,7 +8994,7 @@
     my $Title = "$LName: public symbols";
     my $Keywords = "$LName, API, symbols";
     my $Des = "List of symbols in $LName ($LVersion) on ".showArch($ArchName);
-    $SYMBOLS_LIST = composeHTML_Head($Title, $Keywords, $Des, $CssStyles, 
$JScripts)."
+    $SYMBOLS_LIST = composeHTML_Head($Title, $Keywords, $Des, $CssStyles, 
$JScripts, 1)."
     <body><div>\n$SYMBOLS_LIST</div>
     <br/><br/>\n".getReportFooter()."
     </body></html>";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/abi-compliance-checker-2.0/doc/Changelog.html 
new/abi-compliance-checker-2.1/doc/Changelog.html
--- old/abi-compliance-checker-2.0/doc/Changelog.html   2017-01-28 
17:20:49.000000000 +0100
+++ new/abi-compliance-checker-2.1/doc/Changelog.html   2017-06-17 
06:59:27.000000000 +0200
@@ -44,6 +44,45 @@
 <p/>
 <br/>
 
+<b>Version 2.1 (June 17, 2017)</b><br/>
+<b>Improvements</b>
+<ul>
+    <li>
+        Show added v-table symbols for public classes
+    </li>
+</ul>
+<b>Bug Fixes</b>
+<ul>
+    <li>
+        Fixed analysis of static methods
+    </li>
+    <li>
+        Fixed analysis of typedefs
+    </li>
+    <li>
+        Fixed analysis of zero-size structs
+    </li>
+    <li>
+        Fixed logs
+    </li>
+    <li>
+        Fixed analysis of static libraries on Windows
+    </li>
+    <li>
+        Fixed search for files on Windows
+    </li>
+</ul>
+<b>Other</b>
+<ul>
+    <li>
+        Documented -skip-internal-types option in -help
+    </li>
+    <li>
+        Add noindex meta tag to report if no changes detected
+    </li>
+</ul>
+<br/>
+
 <b>Version 2.0 (January 28, 2017)</b><br/>
 <b>Improvements</b>
 <ul>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/abi-compliance-checker-2.0/modules/Internals/ABIDump.pm 
new/abi-compliance-checker-2.1/modules/Internals/ABIDump.pm
--- old/abi-compliance-checker-2.0/modules/Internals/ABIDump.pm 2017-01-28 
17:20:49.000000000 +0100
+++ new/abi-compliance-checker-2.1/modules/Internals/ABIDump.pm 2017-06-17 
06:59:27.000000000 +0200
@@ -390,8 +390,17 @@
         while(<LIB>)
         {
             my $Symbol = undef;
-            if(not $In::Opt{"UseStaticLibs"})
+            if($In::Opt{"UseStaticLibs"})
             {
+                if(/\A\s{10,}(\d+\s+|)([_\w\?\@]+)(\s*\Z|\s+)/i)
+                {
+                    # 16 IID_ISecurityInformation
+                    # ??_7TestBaseClass@api@@6B@ (const 
api::TestBaseClass::`vftable')
+                    $Symbol = $2;
+                }
+            }
+            else
+            { # Dll
                 # 1197 4AC 0000A620 SetThreadStackGuarantee
                 # 1198 4AD          SetThreadToken (forwarded to ...)
                 # 3368 _o2i_ECPublicKey
@@ -403,14 +412,6 @@
                     $Symbol = $1;
                 }
             }
-            else
-            { # static
-                if(/\A\s{10,}\d*\s+([\w\?\@]+)\s*\Z/i)
-                {
-                    # 16 IID_ISecurityInformation
-                    $Symbol = $1;
-                }
-            }
             
             if($Symbol)
             {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/abi-compliance-checker-2.0/modules/Internals/Filter.pm 
new/abi-compliance-checker-2.1/modules/Internals/Filter.pm
--- old/abi-compliance-checker-2.0/modules/Internals/Filter.pm  2017-01-28 
17:20:49.000000000 +0100
+++ new/abi-compliance-checker-2.1/modules/Internals/Filter.pm  2017-06-17 
06:59:27.000000000 +0200
@@ -148,8 +148,8 @@
         if($Level eq "Binary")
         {
             if($SInfo->{"InLine"}
-            or isInLineInst($SInfo, $LVer))
-            {
+            or (not $SInfo->{"Static"} and isInLineInst($SInfo, $LVer)))
+            { # example: _ZN6Givaro6ZpzDomINS_7IntegerEE3EndEv is not exported 
(inlined)
                 if($ClassId and $SInfo->{"Virt"})
                 { # inline virtual methods
                     if($Type=~/InlineVirt/) {
@@ -653,7 +653,8 @@
 sub isOpaque($)
 {
     my $T = $_[0];
-    if(not defined $T->{"Memb"})
+    if(not defined $T->{"Memb"}
+    and not defined $T->{"Size"})
     {
         return 1;
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/abi-compliance-checker-2.0/modules/Internals/SysCheck.pm 
new/abi-compliance-checker-2.1/modules/Internals/SysCheck.pm
--- old/abi-compliance-checker-2.0/modules/Internals/SysCheck.pm        
2017-01-28 17:20:49.000000000 +0100
+++ new/abi-compliance-checker-2.1/modules/Internals/SysCheck.pm        
2017-06-17 06:59:27.000000000 +0200
@@ -505,7 +505,7 @@
                 
                 $Diff = "<table width='100%' cellpadding='0' 
cellspacing='0'><tr><td>$Diff</td></tr></table>";
                 
-                $Diff = composeHTML_Head($Title, $Keywords, $Description, 
$Styles, "")."\n<body>\n$Diff\n</body>\n</html>\n";
+                $Diff = composeHTML_Head($Title, $Keywords, $Description, 
$Styles, "", 1)."\n<body>\n$Diff\n</body>\n</html>\n";
                 
                 my $Output = $SYS_REPORT_PATH."/headers_diff/$LName";
                 writeFile($Output."/diff.html", $Diff);
@@ -900,7 +900,7 @@
     my $Description = "API compatibility report between $SystemName1 and 
$SystemName2 on ".showArch($ArchName);
     my $Styles = readModule("Styles", "CmpSystems.css");
     
-    $SYS_REPORT = composeHTML_Head($Title, $Keywords, $Description, $Styles, 
"")."\n<body>\n<div>".$SYS_REPORT."</div>\n";
+    $SYS_REPORT = composeHTML_Head($Title, $Keywords, $Description, $Styles, 
"", 1)."\n<body>\n<div>".$SYS_REPORT."</div>\n";
     $SYS_REPORT .= "<br/><br/>\n";
     $SYS_REPORT .= getReportFooter();
     $SYS_REPORT .= "</body></html>\n";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/abi-compliance-checker-2.0/modules/Internals/TUDump.pm 
new/abi-compliance-checker-2.1/modules/Internals/TUDump.pm
--- old/abi-compliance-checker-2.0/modules/Internals/TUDump.pm  2017-01-28 
17:20:49.000000000 +0100
+++ new/abi-compliance-checker-2.1/modules/Internals/TUDump.pm  2017-06-17 
06:59:27.000000000 +0200
@@ -338,6 +338,10 @@
         if(my $NSAdd = getNSAdditions($LVer, $TUnit_NameSpaces{$LVer}))
         { # GCC on all supported platforms does not include namespaces to the 
dump by default
             appendFile($HeaderPath, "\n  // add namespaces\n".$NSAdd);
+            
+            if($HeaderPath ne $TmpHeaderPath) {
+                appendFile($TmpHeaderPath, "\n  // add namespaces\n".$NSAdd);
+            }
         }
         # some GCC versions don't include class methods to the TU dump by 
default
         my ($AddClass, $ClassNum) = ("", 0);
@@ -374,8 +378,13 @@
             }
             $AddClass .= "  $CName* tmp_add_class_".($ClassNum++).";\n";
         }
-        if($AddClass) {
+        if($AddClass)
+        {
             appendFile($HeaderPath, "\n  // add classes\n".$AddClass);
+            
+            if($HeaderPath ne $TmpHeaderPath) {
+                appendFile($TmpHeaderPath, "\n  // add classes\n".$AddClass);
+            }
         }
     }
     writeLog($LVer, "Temporary header file \'$TmpHeaderPath\' with the 
following content will be compiled to create GCC translation unit 
dump:\n".readFile($TmpHeaderPath)."\n");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/abi-compliance-checker-2.0/modules/Internals/Utils.pm 
new/abi-compliance-checker-2.1/modules/Internals/Utils.pm
--- old/abi-compliance-checker-2.0/modules/Internals/Utils.pm   2017-01-28 
17:20:49.000000000 +0100
+++ new/abi-compliance-checker-2.1/modules/Internals/Utils.pm   2017-06-17 
06:59:27.000000000 +0200
@@ -81,7 +81,7 @@
     if($In::Opt{"OS"} eq "windows")
     {
         $Path = getAbsPath($Path);
-        my $Cmd = "dir \"$Path\" /B /O";
+        my $Cmd = "cmd /C dir \"$Path\" /B /O";
         if($MaxDepth!=1) {
             $Cmd .= " /S";
         }
@@ -91,7 +91,7 @@
         elsif($Type eq "f") {
             $Cmd .= " /A-D";
         }
-        my @Files = split(/\n/, `$Cmd 2>\"$TmpDir/null\"`);
+        my @Files = split(/\n/, qx/$Cmd/);
         if($Name)
         {
             if(not $UseRegex)
@@ -247,7 +247,7 @@
     
     if($In::Opt{"Target"} eq "symbian")
     { # options for GCCE compiler
-        my %Symbian_Opts = map {$_=>1} (
+        my @Symbian_Opts = (
             "-D__GCCE__",
             "-DUNICODE",
             "-fexceptions",
@@ -268,13 +268,13 @@
             "-DEKA2",
             "-DSYMBIAN_ENABLE_SPLIT_HEADERS"
         );
-        return join(" ", keys(%Symbian_Opts));
+        return join(" ", @Symbian_Opts);
     }
     elsif($In::Opt{"OS"} eq "windows"
     and $In::Opt{"GccTarget"}=~/mingw/i)
     { # add options to MinGW compiler
       # to simulate the MSVC compiler
-        my %MinGW_Opts = map {$_=>1} (
+        my @MinGW_Opts = (
             "-D__unaligned=\" \"",
             "-D__nullptr=\"nullptr\"",
             "-D_WIN32",
@@ -319,24 +319,24 @@
         
         if($In::ABI{$LVer}{"Arch"} eq "x86")
         {
-            $MinGW_Opts{"-D_X86_=300"}=1;
-            $MinGW_Opts{"-D_M_IX86=300"}=1;
+            push(@MinGW_Opts, "-D_X86_=300");
+            push(@MinGW_Opts, "-D_M_IX86=300");
         }
         elsif($In::ABI{$LVer}{"Arch"} eq "x86_64")
         {
-            $MinGW_Opts{"-D_AMD64_=300"}=1;
-            $MinGW_Opts{"-D_M_AMD64=300"}=1;
-            $MinGW_Opts{"-D_M_X64=300"}=1;
+            push(@MinGW_Opts, "-D_AMD64_=300");
+            push(@MinGW_Opts, "-D_M_AMD64=300");
+            push(@MinGW_Opts, "-D_M_X64=300");
         }
         elsif($In::ABI{$LVer}{"Arch"} eq "ia64")
         {
-            $MinGW_Opts{"-D_IA64_=300"}=1;
-            $MinGW_Opts{"-D_M_IA64=300"}=1;
+            push(@MinGW_Opts, "-D_IA64_=300");
+            push(@MinGW_Opts, "-D_M_IA64=300");
         }
         
-        return join(" ", sort keys(%MinGW_Opts));
+        return join(" ", @MinGW_Opts);
     }
-    return "";
+    return undef;
 }
 
 sub uncoverTypedefs($$)
@@ -361,8 +361,11 @@
         foreach my $Word (keys(%Words))
         {
             my $BaseType_Name = $In::ABI{$LVer}{"TypedefBase"}{$Word};
+            
             next if(not $BaseType_Name);
+            next if($BaseType_Name=~/\b$Word\b/);
             next if($TypeName_New=~/\b(struct|union|enum)\s\Q$Word\E\b/);
+            
             if($BaseType_Name=~/\([\*]+\)/)
             { # FuncPtr
                 if($TypeName_New=~/\Q$Word\E(.*)\Z/)


Reply via email to