diff --git a/3rdparty/cppcheck/checksources.pl b/3rdparty/cppcheck/checksources.pl new file mode 100755 index 0000000000..329ff7d943 --- /dev/null +++ b/3rdparty/cppcheck/checksources.pl @@ -0,0 +1,52 @@ +#!/usr/bin/perl + +use warnings; +use strict; +use File::Basename; +use File::Find; + +if (scalar @ARGV < 2) { + die "Usage: $0 \n"; +} + +if (!-e "./ReadMe.cross-compile") { + die "ERROR: $0 must be called from Haiku top directory!\n"; +} + +my %headers; +my $dirToCheck = shift @ARGV; +my $fileToLog = shift @ARGV; +my $jobs = 1; +if (scalar @ARGV) { + $jobs = shift @ARGV; +} +my $headersDirs; +my $cppcheck; + +print "Scanning headers...\n"; +find({ wanted => \&process, no_chdir => 1}, + ("headers/posix", "headers/libs", "headers/os", "headers/private")); + +foreach my $dir (sort keys %headers) { + $headersDirs .= "-I $dir "; +} + +print "Running cppcheck tool...\n"; +$cppcheck = "cppcheck -j $jobs --force --auto-dealloc 3rdparty/cppcheck/haiku.lst --enable=exceptRealloc,possibleError,style $headersDirs $dirToCheck 2> $fileToLog"; + +system($cppcheck); + +sub process +{ + if (substr($_, -4, 4) eq '.svn') { + $File::Find::prune = 1; + } else { + return if $File::Find::dir eq $_; # skip toplevel folders + my $name = (fileparse($_))[0]; + if (-d $_) { + push @{$headers{$File::Find::name}->{subdirs}}, $name; + return; + } + } +} + diff --git a/3rdparty/cppcheck/haiku.lst b/3rdparty/cppcheck/haiku.lst new file mode 100644 index 0000000000..10c2509966 --- /dev/null +++ b/3rdparty/cppcheck/haiku.lst @@ -0,0 +1,17 @@ +BAlert +BButton +BCheckBox +BControl +BMenuBar +BMenuField +BMenuItem +BMenuWindow +BPopUpMenu +BRadioButton +BScrollBar +BSplitView +BStringView +BTextControl +BView +BWindow +