Fixed identification of header files in the include_preamble
diff --git a/abi-compliance-checker.pl b/abi-compliance-checker.pl
index ca13e6e..cd279c7 100755
--- a/abi-compliance-checker.pl
+++ b/abi-compliance-checker.pl
@@ -1,6 +1,6 @@
#!/usr/bin/perl
###########################################################################
-# ABI Compliance Checker (ACC) 1.99.8.3
+# ABI Compliance Checker (ACC) 1.99.8.4
# A tool for checking backward compatibility of a C/C++ library API
#
# Copyright (C) 2009-2010 The Linux Foundation
@@ -64,7 +64,7 @@
use Data::Dumper;
use Config;
-my $TOOL_VERSION = "1.99.8.3";
+my $TOOL_VERSION = "1.99.8.4";
my $ABI_DUMP_VERSION = "3.2";
my $OLDEST_SUPPORTED_VERSION = "1.18";
my $XML_REPORT_VERSION = "1.1";
@@ -93,7 +93,7 @@
$UserLang, $TargetHeadersPath, $BinaryOnly, $SourceOnly, $BinaryReportPath,
$SourceReportPath, $UseXML, $Browse, $OpenReport, $SortDump, $DumpFormat,
$ExtraInfo, $ExtraDump, $Force, $Tolerance, $Tolerant, $SkipSymbolsListPath,
-$CheckInfo, $Quick, $AffectLimit, $AllAffected);
+$CheckInfo, $Quick, $AffectLimit, $AllAffected, $CppIncompat);
my $CmdName = get_filename($0);
my %OS_LibExt = (
@@ -252,6 +252,7 @@
"test-dump!" => \$TestDump,
"debug!" => \$Debug,
"cpp-compatible!" => \$CppCompat,
+ "cpp-incompatible!" => \$CppIncompat,
"p|params=s" => \$ParamNamesPath,
"relpath1|relpath=s" => \$RelativeDirectory{1},
"relpath2=s" => \$RelativeDirectory{2},
@@ -664,6 +665,9 @@
If your header files are written in C language and can be compiled
by the G++ compiler (i.e. don't use C++ keywords), then you can tell
the tool about this and speedup the analysis.
+
+ -cpp-incompatible
+ Set this option if input C header files use C++ keywords.
-p|-params PATH
Path to file with the function parameter names. It can be used
@@ -8686,9 +8690,16 @@
{ # try to recompile
# FIXME: handle other errors and try to recompile
if($CppMode{$Version}==1
- and index($Errors, "c99_")!=-1)
+ and index($Errors, "c99_")!=-1
+ and not defined $CppIncompat)
{ # disable c99 mode and try again
$CppMode{$Version}=-1;
+
+ if($Debug)
+ {
+ # printMsg("INFO", $Errors);
+ }
+
printMsg("INFO", "Disabling C++ compatibility mode");
resetLogging($Version);
$TMP_DIR = tempdir(CLEANUP=>1);
@@ -14961,6 +14972,9 @@
my $TN1 = $TypeInfo{1}{$Tid1}{"Name"};
my $TN2 = $TypeInfo{2}{$Tid2}{"Name"};
+ my $TT1 = $TypeInfo{1}{$Tid1}{"Type"};
+ my $TT2 = $TypeInfo{2}{$Tid2}{"Type"};
+
if($Changed)
{ # different formats
if($UseOldDumps)
@@ -14968,9 +14982,6 @@
return 0;
}
- my $TT1 = $TypeInfo{1}{$Tid1}{"Type"};
- my $TT2 = $TypeInfo{2}{$Tid2}{"Type"};
-
my %Base1 = get_Type($Tid1, 1);
while(defined $Base1{"Type"} and $Base1{"Type"} eq "Typedef") {
%Base1 = get_OneStep_BaseType($Base1{"Tid"}, $TypeInfo{1});
@@ -15029,6 +15040,20 @@
return 0;
}
}
+
+ if($TT1 eq "FuncPtr"
+ and $TT2 eq "FuncPtr")
+ {
+ my $TN1_C = $TN1;
+ my $TN2_C = $TN2;
+
+ $TN1_C=~s/\b(struct|union) //g;
+ $TN2_C=~s/\b(struct|union) //g;
+
+ if($TN1_C eq $TN2_C) {
+ return 0;
+ }
+ }
}
return 1;
}
@@ -19446,7 +19471,13 @@
{
next if(not -d $DevelPath);
- my @Files = cmd_find($DevelPath);
+ my @Files = cmd_find($DevelPath,"f");
+ foreach my $Link (cmd_find($DevelPath,"l"))
+ { # add symbolic links
+ if(-f $Link) {
+ push(@Files, $Link);
+ }
+ }
if(not $CheckObjectsOnly)
{
@@ -20867,6 +20898,8 @@
# check GCC version
if($GCC_Ver=~/\A4\.8(|\.0|\.1)\Z/)
{ # bug http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57850
+ # introduced in 4.8
+ # fixed in 4.9
printMsg("WARNING", "Not working properly with GCC $GCC_Ver. Please update or downgrade GCC or use a local installation by --gcc-path=PATH option.");
$EMERGENCY_MODE_48 = 1;
}