mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-17 16:10:24 +08:00
Add 'warning density' computation to the warnhist script (#3910)
* Add 'warning density' computation to the warnhist script, along with several cleanups to it. Add "--enable-show-all-warnings" configure (and CMake) option to disable compiler diagnostic suppression (and therefore show all the otherwise suppressed compiler diagnostics), disabled by default. Clean up a buncn of misc. warnings. Signed-off-by: Quincey Koziol <qkoziol@amazon.com>
This commit is contained in:
parent
6ffc55c6d9
commit
3a21ee0877
301
bin/warnhist
301
bin/warnhist
@ -22,8 +22,13 @@ use warnings;
|
||||
# Perl modules/settings
|
||||
use strict;
|
||||
use Getopt::Std;
|
||||
use File::Find;
|
||||
use File::Basename;
|
||||
use Cwd;
|
||||
#use Data::Dumper;
|
||||
|
||||
# Global variables, for accumulating information
|
||||
my %options=();
|
||||
my $totalcount = 0;
|
||||
my $notecount = 0;
|
||||
my $dupcount = 0;
|
||||
@ -54,11 +59,25 @@ my $last_fort_name;
|
||||
my $last_fort_line;
|
||||
my $last_fort_offset;
|
||||
|
||||
# Info about source files
|
||||
my %c_files;
|
||||
my %c_files_counted;
|
||||
my %cpp_files;
|
||||
my %cpp_files_counted;
|
||||
my %fort_files;
|
||||
my %fort_files_counted;
|
||||
my $c_lines = 0;
|
||||
my $cpp_lines = 0;
|
||||
my $fort_lines = 0;
|
||||
|
||||
# Display usage
|
||||
sub do_help {
|
||||
print "Usage: 'warnhist [-h, --help] [-t <prefix>] [-w <n>] [-W] [-f <n>] [-F] [-s <warning string list>] [-S <file string list] [-l] [-u] [-i <name list>] [file]'\n";
|
||||
print "\t-h, --help\tDisplay this usage\n";
|
||||
print "\t-t <prefix>\tTrim pathname prefix from filenames, <prefix>\n";
|
||||
print "Usage: 'warnhist [-h, --help] [-t <prefix>] [-w <n>] [-W] [-f <n>] [-F]\n";
|
||||
print "\t[-s <warning string list>] [-S <file string list] [-l] [-u]'\n";
|
||||
print "\t[-i <name list>] [-d] [-p <path list] [-q] [file]'\n\n";
|
||||
print "Options:\n";
|
||||
print "\t-h, --help Display this usage\n";
|
||||
print "\t-t <prefix> Trim pathname prefix from filenames, <prefix>\n";
|
||||
print "\t-w <n>\tDisplay files for a given warning index list, <n>\n";
|
||||
print "\t\t<n> can be a single value, a range, or a comma separated list\n";
|
||||
print "\t\tFor example: '0' or '0,4' or '8-10' or '0,2-4,8-10,13'\n";
|
||||
@ -67,10 +86,13 @@ sub do_help {
|
||||
print "\t\t<n> can be a single value, a range, or a comma separated list\n";
|
||||
print "\t\tFor example: '0' or '0,4' or '8-10' or '0,2-4,8-10,13'\n";
|
||||
print "\t-F\tDisplay warnings for all files\n";
|
||||
print "\t-s <warning string list>\tDisplay files for warnings which contain a string, <warning string list>\n";
|
||||
print "\t-s <warning string list> Display files for warnings which contain a\n";
|
||||
print "\t\tstring, <warning string list>\n";
|
||||
print "\t\t<warning string list> is a comma separated list, with no spaces\n";
|
||||
print "\t\tFor example: 'Wunused-dummy-argument' or 'Wunused-dummy-argument,Wunused-variable'\n";
|
||||
print "\t-S <file string list>\tDisplay warnings for files which contain a string, <file string list>\n";
|
||||
print "\t\tFor example: 'Wunused-dummy-argument' or\n";
|
||||
print "\t\t'Wunused-dummy-argument,Wunused-variable'\n";
|
||||
print "\t-S <file string list> Display warnings for files which contain a\n";
|
||||
print "\t\tstring, <file string list>\n";
|
||||
print "\t\t<file string list> is a comma separated list, with no spaces\n";
|
||||
print "\t\tFor example: 'H5Fint' or 'H5Fint,H5Gnode'\n";
|
||||
print "\t-l\tDisplay line numbers for file/warning\n";
|
||||
@ -78,18 +100,182 @@ sub do_help {
|
||||
print "\t-i <name list>\tIgnore named files, <name list>\n";
|
||||
print "\t\t<name list> is a comma separated list, with no spaces\n";
|
||||
print "\t\tFor example: 'H5LTparse' or 'H5LTparse,H5LTanalyze'\n";
|
||||
print "\t-d\tCompute warning density for compiled source files. Paths to the\n";
|
||||
print "\t\troot of a directory containing source may be provided with the\n";
|
||||
print "\t\t'-p <path list>' option. If the path list is given, only those\n";
|
||||
print "\t\tdirectories are scanned for source files. If the path list\n";
|
||||
print "\t\toption is not given, the current working directory is scanned.\n";
|
||||
print "\t-p <path list>\tPaths to search for compiled files. Compiled files\n";
|
||||
print "\t\tare only used when computing warning density and are not\n";
|
||||
print "\t\tnecessary for just analyzing warnings in build output.\n";
|
||||
print "\t\t<path list> is a comma separated list, with no spaces\n";
|
||||
print "\t\tFor example: '/home/koziol/hdf5' or '.,~/dev/hdf5,~/dev/build'\n";
|
||||
print "\t-q\tSuppress warning output\n";
|
||||
print "\tfile\tFilename containing build output\n";
|
||||
print "\t\tIf no file is given, standard input is used.\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
# Count # of lines in a file
|
||||
sub line_count {
|
||||
my ($name) = @_;
|
||||
#print "name = '$name'\n";
|
||||
my $tmp;
|
||||
my $lines = 0;
|
||||
|
||||
open (FILE, $name) or die "Can't open '$name': $!";
|
||||
$lines++ while ($tmp = <FILE>);
|
||||
close FILE;
|
||||
#print "$lines\n";
|
||||
|
||||
return $lines;
|
||||
}
|
||||
|
||||
# Recursively search a directory hierarchy for source files
|
||||
# Adds results to the global %c_files, %cpp_files, and %fort_files hashes
|
||||
sub parse_tree {
|
||||
my ($root_path) = @_;
|
||||
#print "root_path = $root_path\n";
|
||||
|
||||
my $path_checker = sub {
|
||||
my $name = $File::Find::name;
|
||||
if (-f $name) {
|
||||
my $bn = basename($name);
|
||||
|
||||
# Check for different kinds of source files
|
||||
# Use lists here: https://gist.github.com/ppisarczyk/43962d06686722d26d176fad46879d41#file-programming_languages_extensions-json
|
||||
|
||||
# FORTRAN source file
|
||||
if($bn =~ /.*(\.f90)|(\.f)|(\.f03)|(\.f08)|(\.f77)|(\.f95)|(\.for)|(\.fpp)$/i) {
|
||||
$bn =~ s/(\.f90)|(\.f)|(\.f03)|(\.f08)|(\.f77)|(\.f95)|(\.for)|(\.fpp)$//ig;
|
||||
if(!exists $fort_files{$bn}) {
|
||||
$fort_files{$bn} = [ $name ];
|
||||
} else {
|
||||
push @{ $fort_files{$bn} }, $name;
|
||||
}
|
||||
# C++ source file
|
||||
} elsif($bn =~ /.*(\.cpp)|(\.c\+\+)|(\.cc)|(\.cp)|(\.cxx)$/i) {
|
||||
$bn =~ s/(\.cpp)|(\.c\+\+)|(\.cc)|(\.cp)|(\.cxx)$//ig;
|
||||
if(!exists $cpp_files{$bn}) {
|
||||
$cpp_files{$bn} = [ $name ];
|
||||
} else {
|
||||
push @{ $cpp_files{$bn} }, $name;
|
||||
}
|
||||
# C source file
|
||||
} elsif($bn =~ /.*(\.c)$/i) {
|
||||
$bn =~ s/(\.c)$//g;
|
||||
if(!exists $c_files{$bn}) {
|
||||
$c_files{$bn} = [ $name ];
|
||||
} else {
|
||||
push @{ $c_files{$bn} }, $name;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
find($path_checker, $root_path);
|
||||
|
||||
#print Dumper \%c_files;
|
||||
#print Dumper \%cpp_files;
|
||||
#print Dumper \%fort_files;
|
||||
}
|
||||
|
||||
sub count_file_loc {
|
||||
my ($filename, $typename, $file_paths, $files_counted, $count) = @_;
|
||||
|
||||
# Attempt to detect and handle object file name mangling by Automake
|
||||
if(!exists $file_paths->{$filename} && $filename =~ /\-/) {
|
||||
my ($bn) = $filename =~ /\S+\-(\S+)$/x;
|
||||
if(exists $file_paths->{$bn}) {
|
||||
if(!exists $options{q}) {
|
||||
warn "No path for $typename source file '$filename', but '$bn' has path, assuming automake generated object file name";
|
||||
}
|
||||
$filename = $bn;
|
||||
}
|
||||
}
|
||||
|
||||
if(exists $file_paths->{$filename}) {
|
||||
my $filecount = 0;
|
||||
|
||||
# Attempt to count LOC for files with same name
|
||||
if(scalar(@{$file_paths->{$filename}}) > 1) {
|
||||
$filecount = $files_counted->{$filename}++;
|
||||
|
||||
# Issue warning about multiple source files with same name
|
||||
if($filecount == 0 && !exists $options{q}) {
|
||||
local $" = ', '; # '$"' is documented in https://perldoc.perl.org/perlvar
|
||||
warn "Multiple paths for $typename source file named '$filename', assuming each is compiled once, paths: [@{$file_paths->{$filename}}]\n";
|
||||
}
|
||||
|
||||
# Sanity check for too many compiles of a file
|
||||
if($filecount >= scalar(@{$file_paths->{$filename}})) {
|
||||
if(!exists $options{q}) {
|
||||
local $" = ', '; # '$"' is documented in https://perldoc.perl.org/perlvar
|
||||
warn "Too many compiles of $typename source file named '$filename' with paths: [@{$file_paths->{$filename}}], disabling warning density calculations\n";
|
||||
}
|
||||
delete $options{d};
|
||||
}
|
||||
}
|
||||
|
||||
# Increment the # of lines of code (if not too many)
|
||||
if($filecount < scalar(@{$file_paths->{$filename}})) {
|
||||
${$count} += line_count($file_paths->{$filename}[$filecount]);
|
||||
}
|
||||
} else {
|
||||
if(!exists $options{q}) {
|
||||
warn "No path for $typename source file '$filename', e '-p' option to specify, disabling warning density calculations\n";
|
||||
}
|
||||
delete $options{d};
|
||||
}
|
||||
}
|
||||
|
||||
# Compute LOC for compiled source file
|
||||
sub count_source_loc {
|
||||
my ($compile_line) = @_;
|
||||
#print "compile_line = $compile_line\n";
|
||||
my $filetype;
|
||||
my $filename;
|
||||
|
||||
($filetype, $filename) = $compile_line =~ /^\s+(CC|FC|CXX|PPFC)\s+(\S*)\.l*o$/x;
|
||||
if($filename =~ /\//) {
|
||||
$filename = basename($filename);
|
||||
}
|
||||
#print "filetype = '$filetype'\n";
|
||||
#print "filename = '$filename'\n";
|
||||
|
||||
if($filetype =~ /FC|PPFC/) { # FORTRAN source file
|
||||
count_file_loc($filename, "FORTRAN", \%fort_files, \%fort_files_counted, \$fort_lines);
|
||||
} elsif($filetype =~ /CXX/) { # C++ source file
|
||||
count_file_loc($filename, "C++", \%cpp_files, \%cpp_files_counted, \$cpp_lines);
|
||||
} elsif($filetype =~ /CC/) { # C source file
|
||||
count_file_loc($filename, "C", \%c_files, \%c_files_counted, \$c_lines);
|
||||
}
|
||||
}
|
||||
|
||||
sub sanity_check_loc {
|
||||
my ($typename, $file_paths, $files_counted) = @_;
|
||||
|
||||
if(scalar keys %{$files_counted} > 0) {
|
||||
for my $x (keys(%{$files_counted})) {
|
||||
#print "x = $x, # of compiles = ${$files_counted}{$x}, # of paths = ", scalar(@{$file_paths->{$x}}), "\n";
|
||||
if($files_counted->{$x} != scalar(@{$file_paths->{$x}})) {
|
||||
if(!exists $options{q}) {
|
||||
warn "# of compiles of C source file '$x' ($files_counted->{$x}) != # of paths (", scalar(@{$file_paths->{$x}}), "), disabling warning density calculation\n";
|
||||
}
|
||||
# Don't print warning density, it's not accurate
|
||||
delete $options{d};
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
sub main::HELP_MESSAGE {
|
||||
do_help();
|
||||
}
|
||||
|
||||
# declare the Perl command line flags/options we want to allow
|
||||
my %options=();
|
||||
getopts("FWhut:w:f:s:S:i:l", \%options);
|
||||
getopts("FWhut:w:f:s:S:i:ldp:q", \%options);
|
||||
|
||||
# Display usage, if requested
|
||||
if($options{h}) {
|
||||
@ -185,6 +371,20 @@ if($options{u}) {
|
||||
$genericize = 0;
|
||||
}
|
||||
|
||||
# Scan source files, if warning density requested
|
||||
if(exists $options{d}) {
|
||||
if(exists $options{p}) {
|
||||
my @pathnames = split /,/, $options{p};
|
||||
#print STDERR @pathnames;
|
||||
for my $path (@pathnames) {
|
||||
parse_tree($path);
|
||||
}
|
||||
} else {
|
||||
# Scan the current working directory
|
||||
parse_tree(getcwd);
|
||||
}
|
||||
}
|
||||
|
||||
PARSE_LINES:
|
||||
while (<>) {
|
||||
my $name;
|
||||
@ -197,7 +397,7 @@ while (<>) {
|
||||
my $extra2;
|
||||
|
||||
# Retain last FORTRAN compile line, which comes a few lines before warning
|
||||
if($_ =~ /.*\.[fF]90:.*/) {
|
||||
if($_ =~ /.*((\.inc)|(\.f90)|(\.f)|(\.f03)|(\.f08)|(\.f77)|(\.f95)|(\.for)|(\.fpp))\:.*/i) {
|
||||
($last_fort_name, $last_fort_line, $last_fort_offset) = split /\:/, $_;
|
||||
($last_fort_line, $toss) = split /\./, $last_fort_line;
|
||||
}
|
||||
@ -212,17 +412,30 @@ while (<>) {
|
||||
$last_c_name = $_;
|
||||
}
|
||||
|
||||
# Compute LOC for compiled source files, if warning density requested
|
||||
if(exists $options{d}) {
|
||||
# Check for compilation line
|
||||
if($_ =~ /^\s+(CC|FC|CXX|PPFC)\s+/) {
|
||||
count_source_loc($_);
|
||||
}
|
||||
}
|
||||
|
||||
# Skip lines that don't have the word "warning"
|
||||
next if $_ !~ /[Ww]arning/;
|
||||
|
||||
# Skip warnings from linker
|
||||
next if $_ =~ /ld: warning:/;
|
||||
|
||||
# Skip warnings from make
|
||||
next if $_ =~ /^Makefile:[\d]*: warning:/;
|
||||
|
||||
# Skip warnings from build_py and install_lib
|
||||
next if $_ =~ /warning: (build_py|install_lib)/;
|
||||
|
||||
# Skip variables with the word 'warning' in them
|
||||
next if $_ =~ /_warning_/;
|
||||
# Skip variables with the word 'warning' (case insensitively) in them
|
||||
next if $_ =~ /_warning_/i;
|
||||
next if $_ =~ /_warning/i;
|
||||
next if $_ =~ /warning_/i;
|
||||
|
||||
# Skip AMD Optimizing Compiler (aocc) lines "<#> warning(s) generated."
|
||||
next if $_ =~ / warnings? generated\./;
|
||||
@ -235,13 +448,9 @@ while (<>) {
|
||||
# Check for weird formatting of warning message
|
||||
$line = "??";
|
||||
$offset = "??";
|
||||
if($_ =~ /^cc1: warning:.*/) {
|
||||
if($_ =~ /^(cc1|<command-line>): warning:.*/) {
|
||||
$name = $last_c_name;
|
||||
($toss, $toss, $warning, $extra, $extra2) = split /\:/, $_;
|
||||
# Check for CMAKE build with warning on first line and no filename
|
||||
} elsif($_ =~ /^\s*[Ww]arning:.*/) {
|
||||
$name = $last_c_name;
|
||||
($toss, $warning, $extra, $extra2) = split /\:/, $_;
|
||||
# Check for file-scope gcc Fortran warning output
|
||||
} elsif($_ =~ /f\d\d\d: Warning:/) {
|
||||
# These are interspersed with the "compiling a file" output
|
||||
@ -274,9 +483,9 @@ while (<>) {
|
||||
} elsif($_ =~ /^\".*, line [0-9]+: *[Ww]arning:.*/) {
|
||||
($name, $toss, $warning, $extra, $extra2) = split /\:/, $_;
|
||||
($name, $line) = split /\,/, $name;
|
||||
$name =~ s/^\"//g;
|
||||
$name =~ s/\"$//g;
|
||||
$line =~ s/^\s*line\s*//g;
|
||||
$name =~ s/^\"//g;
|
||||
$name =~ s/\"$//g;
|
||||
$line =~ s/^\s*line\s*//g;
|
||||
# Check for Intel icc warning
|
||||
} elsif($_ =~ /.*[A-Za-z0-9_]\.[chC]\(.*[0-9]\):.*#.*/) {
|
||||
($last_c_name, $toss, $warning) = split /\:/, $last_c_name;
|
||||
@ -294,19 +503,13 @@ while (<>) {
|
||||
|
||||
# Check for extra ':' followed by more text in original warning string,
|
||||
# and append the ':' and text back onto the parsed warning
|
||||
# (Use 'length $extra' idiom to avoid warning when $extra is undefined)
|
||||
if(length $extra ) {
|
||||
if(defined $extra) {
|
||||
$warning = join ':', $warning, $extra;
|
||||
}
|
||||
if(length $extra2 ) {
|
||||
if(defined $extra2) {
|
||||
$warning = join ':', $warning, $extra2;
|
||||
}
|
||||
|
||||
# Restore the C++ '::' symbol now that we've parsed out the parts of the line
|
||||
while($warning =~ /@@@@/) {
|
||||
$warning =~ s/@@@@/\:\:/g;
|
||||
}
|
||||
|
||||
# Trim leading '..' paths from filename
|
||||
while($name =~ /^\.\.\//) {
|
||||
$name =~ s/^\.\.\///g;
|
||||
@ -336,6 +539,11 @@ while (<>) {
|
||||
next
|
||||
}
|
||||
|
||||
# Restore the C++ '::' symbol now that we've parsed out the parts of the line
|
||||
while($warning =~ /@@@@/) {
|
||||
$warning =~ s/@@@@/\:\:/g;
|
||||
}
|
||||
|
||||
# Get rid of leading & trailing whitespace
|
||||
$warning =~ s/^\s//g;
|
||||
$warning =~ s/\s$//g;
|
||||
@ -383,8 +591,8 @@ while (<>) {
|
||||
if($warning =~ /'[A-Za-z_0-9\(\)\*\,\[\]\.\<\>\&\:\+\#\-\=]+[A-Za-z_0-9\(\)\*\,\[\]\.\<\>\&\:\+\#\-\=\ ]*'/) {
|
||||
$warning =~ s/'[A-Za-z_0-9\(\)\*\,\[\]\.\<\>\&\:\+\#\-\=]+[A-Za-z_0-9\(\)\*\,\[\]\.\<\>\&\:\+\#\-\=\ ]*'/'-'/g;
|
||||
}
|
||||
if($warning =~ /'%[\#0\-\ \+]*[,;\:_]?[0-9\*]*\.?[0-9\*]*[hjltzL]*[aAcdeEfFgGinosuxX]'/) {
|
||||
$warning =~ s/'%[\#0\-\ \+]*[,;\:_]?[0-9\*]*\.?[0-9\*]*[hjltzL]*[aAcdeEfFgGinosuxX]'/'-'/g;
|
||||
if($warning =~ /'%[\#0\-\ \+]*[,;\:_]?[0-9\*]*\.?[0-9\*]*[hjltzL]*[aAcdeEfFgGinopsuxX]'/) {
|
||||
$warning =~ s/'%[\#0\-\ \+]*[,;\:_]?[0-9\*]*\.?[0-9\*]*[hjltzL]*[aAcdeEfFgGinopsuxX]'/'-'/g;
|
||||
}
|
||||
|
||||
# Genericize C/C++ "<macro>" warnings into "-"
|
||||
@ -397,6 +605,11 @@ while (<>) {
|
||||
$warning =~ s/=[A-Za-z_0-9]*\]/=-\]/g;
|
||||
}
|
||||
|
||||
# Genericize C/C++ "No such file or directory" warnings into "-"
|
||||
if($warning =~ /^[A-Za-z_0-9\/]*: No such file or directory/) {
|
||||
$warning =~ s/^[A-Za-z_0-9\/]*:/'-':/g;
|
||||
}
|
||||
|
||||
# Genericize FORTRAN "at (<n>)" into "at (-)", "REAL(<n>)" into "REAL(-)",
|
||||
# and "INTEGER(<n>)" into "INTEGER(-)"
|
||||
if($warning =~ /.*at\s\([0-9]+\).*/) {
|
||||
@ -449,7 +662,31 @@ while (<>) {
|
||||
# print STDERR "warning = \"$warning\"\n";
|
||||
}
|
||||
|
||||
print "Total unique [non-ignored] warnings: $totalcount\n";
|
||||
# Sanity check compiled source files with multiple paths when computing
|
||||
# warning density
|
||||
# (Check $options{d} each time, because any of the sanity checks could disable
|
||||
# displaying the warning density)
|
||||
if(exists $options{d}) {
|
||||
sanity_check_loc("C", \%c_files, \%c_files_counted);
|
||||
}
|
||||
if(exists $options{d}) {
|
||||
sanity_check_loc("FORTRAN", \%fort_files, \%fort_files_counted);
|
||||
}
|
||||
if(exists $options{d}) {
|
||||
sanity_check_loc("C++", \%cpp_files, \%cpp_files_counted);
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# Display results
|
||||
#
|
||||
|
||||
print "\nTotal unique [non-ignored] warnings: $totalcount\n";
|
||||
# Display warning density, if requested
|
||||
if(exists $options{d}) {
|
||||
print "Lines of code compiled: <total> (C/C++/FORTRAN): ", ($c_lines + $cpp_lines + $fort_lines), " ($c_lines/$cpp_lines/$fort_lines)\n";
|
||||
printf "Warning density (<# of warnings> / <# of LOC compiled>): %10.10f\n", $totalcount / ($c_lines + $cpp_lines + $fort_lines);
|
||||
}
|
||||
print "Ignored notes / supplemental warning lines [not counted in unique warnings]: $notecount\n";
|
||||
print "Duplicated warning lines [not counted in unique warnings]: $dupcount\n";
|
||||
print "Total ignored warnings: $ignorecount\n";
|
||||
@ -484,7 +721,7 @@ for my $x (sort {$warn_count{$b} <=> $warn_count{$a}} keys(%warn_count)) {
|
||||
$match = 1;
|
||||
}
|
||||
|
||||
if($match) {
|
||||
if($match || exists $options{W}) {
|
||||
for my $y (sort {$warn_file{$x}{$b} <=> $warn_file{$x}{$a}} keys(%{$warn_file{$x}})) {
|
||||
printf ("\t%4d - %s\n", $warn_file{$x}{$y}, $y);
|
||||
if(exists $options{l}) {
|
||||
@ -522,7 +759,7 @@ for my $x (sort {$file_count{$b} <=> $file_count{$a}} keys(%file_count)) {
|
||||
$match = 1;
|
||||
}
|
||||
|
||||
if($match) {
|
||||
if($match || exists $options{F}) {
|
||||
for my $y (sort {$file_warn{$x}{$b} <=> $file_warn{$x}{$a}} keys(%{$file_warn{$x}})) {
|
||||
printf ("\t%4d - %s\n", $file_warn{$x}{$y}, $y);
|
||||
if(exists $options{l}) {
|
||||
|
@ -594,6 +594,17 @@ if (HDF5_ENABLE_CODESTACK)
|
||||
endif ()
|
||||
MARK_AS_ADVANCED (HDF5_ENABLE_CODESTACK)
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# Check if they would like to show all warnings (not suppressed internally)
|
||||
#-----------------------------------------------------------------------------
|
||||
option (HDF5_SHOW_ALL_WARNINGS "Show all warnings (not suppressed internally)." OFF)
|
||||
mark_as_advanced (HDF5_SHOW_ALL_WARNINGS)
|
||||
if (HDF5_SHOW_ALL_WARNINGS)
|
||||
message (STATUS "....All warnings will be displayed")
|
||||
set (${HDF_PREFIX}_SHOW_ALL_WARNINGS 1)
|
||||
endif ()
|
||||
MARK_AS_ADVANCED (HDF5_SHOW_ALL_WARNINGS)
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# Check if they would like to use file locking by default
|
||||
#-----------------------------------------------------------------------------
|
||||
|
@ -631,6 +631,9 @@
|
||||
/* Check exception handling functions during data conversions */
|
||||
#cmakedefine H5_WANT_DCONV_EXCEPTION @H5_WANT_DCONV_EXCEPTION@
|
||||
|
||||
/* Define if showing all compiler warnings are desired (i.e. don't suppress them internally) */
|
||||
#cmakedefine H5_SHOW_ALL_WARNINGS @H5_SHOW_ALL_WARNINGS@
|
||||
|
||||
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
||||
significant byte first (like Motorola and SPARC, unlike Intel). */
|
||||
#if !defined(__APPLE__)
|
||||
|
39
configure.ac
39
configure.ac
@ -2311,6 +2311,45 @@ case "X-$DEV_WARNINGS" in
|
||||
;;
|
||||
esac
|
||||
|
||||
## ----------------------------------------------------------------------
|
||||
## Check if they would like suppessed compiler diagnostics displayed
|
||||
## (i.e. not suppressed)
|
||||
##
|
||||
## NOTE: Compiler diagnostics (i.e. warnings) are suppressed for some
|
||||
## "noisy" warnings that are harmless (in the opinion of the primary
|
||||
## HDF5 development team), but this option is provided to allow
|
||||
## developers to see those warnings.
|
||||
##
|
||||
AC_MSG_CHECKING([whether showing all compiler warnings is enabled])
|
||||
AC_ARG_ENABLE([show-all-warnings],
|
||||
[AS_HELP_STRING([--enable-show-all-warnings],
|
||||
[Enable showing all compiler warnings (for developer debugging).
|
||||
[default=no]
|
||||
])],
|
||||
[SHOW_ALL_WARNINGS=$enableval])
|
||||
|
||||
## Set the default level.
|
||||
if test "X-$SHOW_ALL_WARNINGS" = X- ; then
|
||||
SHOW_ALL_WARNINGS=no
|
||||
fi
|
||||
|
||||
## Allow this variable to be substituted in
|
||||
## other files (src/libhdf5.settings.in, etc.)
|
||||
AC_SUBST([SHOW_ALL_WARNINGS])
|
||||
|
||||
case "X-$SHOW_ALL_WARNINGS" in
|
||||
X-yes)
|
||||
AC_MSG_RESULT([yes])
|
||||
AC_DEFINE([SHOW_ALL_WARNINGS], [1], [Define if showing all warnings is desired (i.e. not suppressed internally with H5_DIAG_OFF)])
|
||||
;;
|
||||
X-no)
|
||||
AC_MSG_RESULT([no])
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR([Unrecognized value: $SHOW_ALL_WARNINGS])
|
||||
;;
|
||||
esac
|
||||
|
||||
## ----------------------------------------------------------------------
|
||||
## Check if the compiler should use profiling flags/settings
|
||||
##
|
||||
|
@ -28,8 +28,8 @@
|
||||
#endif
|
||||
|
||||
! Define if on APPLE
|
||||
#cmakedefine01 H5_HAVE_DARWIN
|
||||
#if H5_HAVE_DARWIN == 0
|
||||
#cmakedefine01 CMAKE_H5_HAVE_DARWIN
|
||||
#if CMAKE_H5_HAVE_DARWIN == 0
|
||||
#undef H5_HAVE_DARWIN
|
||||
#else
|
||||
#define H5_HAVE_DARWIN
|
||||
|
@ -826,6 +826,7 @@ ALLOW_UNSUPPORTED "Allow unsupported combinations of configure opti
|
||||
HDF5_EXTERNAL_LIB_PREFIX "Use prefix for custom library naming." ""
|
||||
HDF5_DISABLE_COMPILER_WARNINGS "Disable compiler warnings" OFF
|
||||
HDF5_ENABLE_ALL_WARNINGS "Enable all warnings" OFF
|
||||
HDF5_SHOW_ALL_WARNINGS "Show all warnings (i.e. not suppress "noisy" ones internally)" OFF
|
||||
HDF5_ENABLE_CODESTACK "Enable the function stack tracing (for developer debugging)." OFF
|
||||
HDF5_ENABLE_COVERAGE "Enable code coverage for Libraries and Programs" OFF
|
||||
HDF5_ENABLE_DEBUG_APIS "Turn on extra debug output in all packages" OFF
|
||||
|
@ -727,7 +727,7 @@ H5_DLL herr_t H5D__chunk_allocated(const H5D_t *dset, hsize_t *nbytes);
|
||||
H5_DLL herr_t H5D__chunk_allocate(const H5D_t *dset, bool full_overwrite, const hsize_t old_dim[]);
|
||||
H5_DLL herr_t H5D__chunk_file_alloc(const H5D_chk_idx_info_t *idx_info, const H5F_block_t *old_chunk,
|
||||
H5F_block_t *new_chunk, bool *need_insert, const hsize_t *scaled);
|
||||
H5_DLL void *H5D__chunk_mem_alloc(size_t size, void *pline);
|
||||
H5_DLL void *H5D__chunk_mem_alloc(size_t size, void *pline) H5_ATTR_MALLOC;
|
||||
H5_DLL void H5D__chunk_mem_free(void *chk, void *pline);
|
||||
H5_DLL void *H5D__chunk_mem_xfree(void *chk, const void *pline);
|
||||
H5_DLL void *H5D__chunk_mem_realloc(void *chk, size_t size, const H5O_pline_t *pline);
|
||||
|
@ -389,7 +389,7 @@ H5_DLL herr_t H5EA__destroy_flush_depend(H5AC_info_t *parent_entry, H5AC_info_t
|
||||
H5_DLL H5EA_hdr_t *H5EA__hdr_alloc(H5F_t *f);
|
||||
H5_DLL herr_t H5EA__hdr_init(H5EA_hdr_t *hdr, void *ctx_udata);
|
||||
H5_DLL haddr_t H5EA__hdr_create(H5F_t *f, const H5EA_create_t *cparam, void *ctx_udata);
|
||||
H5_DLL void *H5EA__hdr_alloc_elmts(H5EA_hdr_t *hdr, size_t nelmts);
|
||||
H5_DLL void *H5EA__hdr_alloc_elmts(H5EA_hdr_t *hdr, size_t nelmts) H5_ATTR_MALLOC;
|
||||
H5_DLL herr_t H5EA__hdr_free_elmts(H5EA_hdr_t *hdr, size_t nelmts, void *elmts);
|
||||
H5_DLL herr_t H5EA__hdr_incr(H5EA_hdr_t *hdr);
|
||||
H5_DLL herr_t H5EA__hdr_decr(H5EA_hdr_t *hdr);
|
||||
|
@ -75,7 +75,7 @@ typedef int (*H5ES_list_iter_func_t)(H5ES_event_t *ev, void *ctx);
|
||||
/******************************/
|
||||
/* Package Private Prototypes */
|
||||
/******************************/
|
||||
H5_DLL H5ES_t *H5ES__create(void);
|
||||
H5_DLL H5ES_t *H5ES__create(void) H5_ATTR_MALLOC;
|
||||
H5_DLL herr_t H5ES__insert_request(H5ES_t *es, H5VL_t *connector, void *token);
|
||||
H5_DLL herr_t H5ES__wait(H5ES_t *es, uint64_t timeout, size_t *num_in_progress, bool *op_failed);
|
||||
H5_DLL herr_t H5ES__get_requests(H5ES_t *es, H5_iter_order_t order, hid_t *connector_ids, void **requests,
|
||||
|
15
src/H5Idbg.c
15
src/H5Idbg.c
@ -83,13 +83,13 @@ H5I__id_dump_cb(void *_item, void H5_ATTR_UNUSED *_key, void *_udata)
|
||||
|
||||
fprintf(stderr, " id = %" PRIdHID "\n", info->id);
|
||||
fprintf(stderr, " count = %u\n", info->count);
|
||||
fprintf(stderr, " obj = 0x%8p\n", info->object);
|
||||
fprintf(stderr, " obj = 0x%8p\n", info->u.c_object);
|
||||
fprintf(stderr, " marked = %d\n", info->marked);
|
||||
|
||||
/* Get the group location, so we get get the name */
|
||||
switch (type) {
|
||||
case H5I_GROUP: {
|
||||
const H5VL_object_t *vol_obj = (const H5VL_object_t *)info->object;
|
||||
const H5VL_object_t *vol_obj = (const H5VL_object_t *)info->u.c_object;
|
||||
|
||||
object = H5VL_object_data(vol_obj);
|
||||
if (H5_VOL_NATIVE == vol_obj->connector->cls->value)
|
||||
@ -98,7 +98,7 @@ H5I__id_dump_cb(void *_item, void H5_ATTR_UNUSED *_key, void *_udata)
|
||||
}
|
||||
|
||||
case H5I_DATASET: {
|
||||
const H5VL_object_t *vol_obj = (const H5VL_object_t *)info->object;
|
||||
const H5VL_object_t *vol_obj = (const H5VL_object_t *)info->u.c_object;
|
||||
|
||||
object = H5VL_object_data(vol_obj);
|
||||
if (H5_VOL_NATIVE == vol_obj->connector->cls->value)
|
||||
@ -107,13 +107,10 @@ H5I__id_dump_cb(void *_item, void H5_ATTR_UNUSED *_key, void *_udata)
|
||||
}
|
||||
|
||||
case H5I_DATATYPE: {
|
||||
const H5T_t *dt = (const H5T_t *)info->object;
|
||||
H5T_t *dt = info->u.object;
|
||||
|
||||
H5_GCC_CLANG_DIAG_OFF("cast-qual")
|
||||
object = (void *)H5T_get_actual_type((H5T_t *)dt);
|
||||
H5_GCC_CLANG_DIAG_ON("cast-qual")
|
||||
|
||||
path = H5T_nameof(object);
|
||||
object = H5T_get_actual_type((H5T_t *)dt);
|
||||
path = H5T_nameof(object);
|
||||
break;
|
||||
}
|
||||
|
||||
|
58
src/H5Iint.c
58
src/H5Iint.c
@ -369,17 +369,16 @@ H5I__mark_node(void *_info, void H5_ATTR_UNUSED *key, void *_udata)
|
||||
*/
|
||||
if (udata->force || (info->count - (!udata->app_ref * info->app_count)) <= 1) {
|
||||
/* Check if this is an un-realized future object */
|
||||
H5_GCC_CLANG_DIAG_OFF("cast-qual")
|
||||
if (info->is_future) {
|
||||
/* Discard the future object */
|
||||
if ((info->discard_cb)((void *)info->object) < 0) {
|
||||
if ((info->discard_cb)(info->u.object) < 0) {
|
||||
if (udata->force) {
|
||||
#ifdef H5I_DEBUG
|
||||
if (H5DEBUG(I)) {
|
||||
fprintf(H5DEBUG(I),
|
||||
"H5I: discard type=%d obj=%p "
|
||||
"failure ignored\n",
|
||||
(int)udata->type_info->cls->type, info->object);
|
||||
(int)udata->type_info->cls->type, info->u.c_object);
|
||||
}
|
||||
#endif /* H5I_DEBUG */
|
||||
|
||||
@ -395,14 +394,14 @@ H5I__mark_node(void *_info, void H5_ATTR_UNUSED *key, void *_udata)
|
||||
else {
|
||||
/* Check for a 'free' function and call it, if it exists */
|
||||
if (udata->type_info->cls->free_func &&
|
||||
(udata->type_info->cls->free_func)((void *)info->object, H5_REQUEST_NULL) < 0) {
|
||||
(udata->type_info->cls->free_func)(info->u.object, H5_REQUEST_NULL) < 0) {
|
||||
if (udata->force) {
|
||||
#ifdef H5I_DEBUG
|
||||
if (H5DEBUG(I)) {
|
||||
fprintf(H5DEBUG(I),
|
||||
"H5I: free type=%d obj=%p "
|
||||
"failure ignored\n",
|
||||
(int)udata->type_info->cls->type, info->object);
|
||||
(int)udata->type_info->cls->type, info->u.c_object);
|
||||
}
|
||||
#endif /* H5I_DEBUG */
|
||||
|
||||
@ -415,7 +414,6 @@ H5I__mark_node(void *_info, void H5_ATTR_UNUSED *key, void *_udata)
|
||||
mark = true;
|
||||
}
|
||||
}
|
||||
H5_GCC_CLANG_DIAG_ON("cast-qual")
|
||||
|
||||
/* Remove ID if requested */
|
||||
if (mark) {
|
||||
@ -524,7 +522,7 @@ H5I__register(H5I_type_t type, const void *object, bool app_ref, H5I_future_real
|
||||
info->id = new_id;
|
||||
info->count = 1; /* initial reference count */
|
||||
info->app_count = !!app_ref;
|
||||
info->object = object;
|
||||
info->u.c_object = object;
|
||||
info->is_future = (NULL != realize_cb);
|
||||
info->realize_cb = realize_cb;
|
||||
info->discard_cb = discard_cb;
|
||||
@ -633,7 +631,7 @@ H5I_register_using_existing_id(H5I_type_t type, void *object, bool app_ref, hid_
|
||||
info->id = existing_id;
|
||||
info->count = 1; /* initial reference count*/
|
||||
info->app_count = !!app_ref;
|
||||
info->object = object;
|
||||
info->u.object = object;
|
||||
/* This API call is only used by the native VOL connector, which is
|
||||
* not asynchronous.
|
||||
*/
|
||||
@ -677,12 +675,10 @@ H5I_subst(hid_t id, const void *new_object)
|
||||
HGOTO_ERROR(H5E_ID, H5E_NOTFOUND, NULL, "can't get ID ref count");
|
||||
|
||||
/* Get the old object pointer to return */
|
||||
H5_GCC_CLANG_DIAG_OFF("cast-qual")
|
||||
ret_value = (void *)info->object;
|
||||
H5_GCC_CLANG_DIAG_ON("cast-qual")
|
||||
ret_value = info->u.object;
|
||||
|
||||
/* Set the new object pointer for the ID */
|
||||
info->object = new_object;
|
||||
info->u.c_object = new_object;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
@ -709,12 +705,9 @@ H5I_object(hid_t id)
|
||||
FUNC_ENTER_NOAPI_NOERR
|
||||
|
||||
/* General lookup of the ID */
|
||||
if (NULL != (info = H5I__find_id(id))) {
|
||||
if (NULL != (info = H5I__find_id(id)))
|
||||
/* Get the object pointer to return */
|
||||
H5_GCC_CLANG_DIAG_OFF("cast-qual")
|
||||
ret_value = (void *)info->object;
|
||||
H5_GCC_CLANG_DIAG_ON("cast-qual")
|
||||
}
|
||||
ret_value = info->u.object;
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* end H5I_object() */
|
||||
@ -742,12 +735,9 @@ H5I_object_verify(hid_t id, H5I_type_t type)
|
||||
assert(type >= 1 && (int)type < H5I_next_type_g);
|
||||
|
||||
/* Verify that the type of the ID is correct & lookup the ID */
|
||||
if (type == H5I_TYPE(id) && NULL != (info = H5I__find_id(id))) {
|
||||
if (type == H5I_TYPE(id) && NULL != (info = H5I__find_id(id)))
|
||||
/* Get the object pointer to return */
|
||||
H5_GCC_CLANG_DIAG_OFF("cast-qual")
|
||||
ret_value = (void *)info->object;
|
||||
H5_GCC_CLANG_DIAG_ON("cast-qual")
|
||||
}
|
||||
ret_value = info->u.object;
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5I_object_verify() */
|
||||
@ -898,9 +888,7 @@ H5I__remove_common(H5I_type_info_t *type_info, hid_t id)
|
||||
if (type_info->last_id_info == info)
|
||||
type_info->last_id_info = NULL;
|
||||
|
||||
H5_GCC_CLANG_DIAG_OFF("cast-qual")
|
||||
ret_value = (void *)info->object;
|
||||
H5_GCC_CLANG_DIAG_ON("cast-qual")
|
||||
ret_value = info->u.object;
|
||||
|
||||
if (!H5I_marking_s)
|
||||
info = H5FL_FREE(H5I_id_info_t, info);
|
||||
@ -1000,8 +988,7 @@ H5I__dec_ref(hid_t id, void **request)
|
||||
/* Get the ID's type */
|
||||
type_info = H5I_type_info_array_g[H5I_TYPE(id)];
|
||||
|
||||
H5_GCC_CLANG_DIAG_OFF("cast-qual")
|
||||
if (!type_info->cls->free_func || (type_info->cls->free_func)((void *)info->object, request) >= 0) {
|
||||
if (!type_info->cls->free_func || (type_info->cls->free_func)(info->u.object, request) >= 0) {
|
||||
/* Remove the node from the type */
|
||||
if (NULL == H5I__remove_common(type_info, id))
|
||||
HGOTO_ERROR(H5E_ID, H5E_CANTDELETE, (-1), "can't remove ID node");
|
||||
@ -1009,7 +996,6 @@ H5I__dec_ref(hid_t id, void **request)
|
||||
} /* end if */
|
||||
else
|
||||
ret_value = -1;
|
||||
H5_GCC_CLANG_DIAG_ON("cast-qual")
|
||||
} /* end if */
|
||||
else {
|
||||
--(info->count);
|
||||
@ -1482,9 +1468,7 @@ H5I__iterate_cb(void *_item, void H5_ATTR_UNUSED *_key, void *_udata)
|
||||
/* The stored object pointer might be an H5VL_object_t, in which
|
||||
* case we'll need to get the wrapped object struct (H5F_t *, etc.).
|
||||
*/
|
||||
H5_GCC_CLANG_DIAG_OFF("cast-qual")
|
||||
object = H5I__unwrap((void *)info->object, type);
|
||||
H5_GCC_CLANG_DIAG_ON("cast-qual")
|
||||
object = H5I__unwrap(info->u.object, type);
|
||||
|
||||
/* Invoke callback function */
|
||||
cb_ret_val = (*udata->user_func)((void *)object, info->id, udata->user_udata);
|
||||
@ -1607,14 +1591,13 @@ H5I__find_id(hid_t id)
|
||||
}
|
||||
|
||||
/* Check if this is a future ID */
|
||||
H5_GCC_CLANG_DIAG_OFF("cast-qual")
|
||||
if (id_info && id_info->is_future) {
|
||||
hid_t actual_id = H5I_INVALID_HID; /* ID for actual object */
|
||||
void *future_object; /* Pointer to the future object */
|
||||
void *actual_object; /* Pointer to the actual object */
|
||||
|
||||
/* Invoke the realize callback, to get the actual object */
|
||||
if ((id_info->realize_cb)((void *)id_info->object, &actual_id) < 0)
|
||||
if ((id_info->realize_cb)(id_info->u.object, &actual_id) < 0)
|
||||
HGOTO_DONE(NULL);
|
||||
|
||||
/* Verify that we received a valid ID, of the same type */
|
||||
@ -1624,10 +1607,10 @@ H5I__find_id(hid_t id)
|
||||
HGOTO_DONE(NULL);
|
||||
|
||||
/* Swap the actual object in for the future object */
|
||||
future_object = (void *)id_info->object;
|
||||
future_object = id_info->u.object;
|
||||
actual_object = H5I__remove_common(type_info, actual_id);
|
||||
assert(actual_object);
|
||||
id_info->object = actual_object;
|
||||
id_info->u.object = actual_object;
|
||||
|
||||
/* Discard the future object */
|
||||
if ((id_info->discard_cb)(future_object) < 0)
|
||||
@ -1639,7 +1622,6 @@ H5I__find_id(hid_t id)
|
||||
id_info->realize_cb = NULL;
|
||||
id_info->discard_cb = NULL;
|
||||
}
|
||||
H5_GCC_CLANG_DIAG_ON("cast-qual")
|
||||
|
||||
/* Set return value */
|
||||
ret_value = id_info;
|
||||
@ -1674,9 +1656,7 @@ H5I__find_id_cb(void *_item, void H5_ATTR_UNUSED *_key, void *_udata)
|
||||
assert(udata);
|
||||
|
||||
/* Get a pointer to the VOL connector's data */
|
||||
H5_GCC_CLANG_DIAG_OFF("cast-qual")
|
||||
object = H5I__unwrap((void *)info->object, type);
|
||||
H5_GCC_CLANG_DIAG_ON("cast-qual")
|
||||
object = H5I__unwrap(info->u.object, type);
|
||||
|
||||
/* Check for a match */
|
||||
if (object == udata->object) {
|
||||
|
11
src/H5Ipkg.h
11
src/H5Ipkg.h
@ -56,10 +56,13 @@
|
||||
|
||||
/* ID information structure used */
|
||||
typedef struct H5I_id_info_t {
|
||||
hid_t id; /* ID for this info */
|
||||
unsigned count; /* Ref. count for this ID */
|
||||
unsigned app_count; /* Ref. count of application visible IDs */
|
||||
const void *object; /* Pointer associated with the ID */
|
||||
hid_t id; /* ID for this info */
|
||||
unsigned count; /* Ref. count for this ID */
|
||||
unsigned app_count; /* Ref. count of application visible IDs */
|
||||
union {
|
||||
const void *c_object; /* Const pointer associated with the ID */
|
||||
void *object; /* Pointer associated with the ID */
|
||||
} u;
|
||||
|
||||
/* Future ID info */
|
||||
bool is_future; /* Whether this ID represents a future object */
|
||||
|
@ -175,7 +175,7 @@ H5_DLL herr_t H5P_insert(H5P_genplist_t *plist, const char *name, size_t size, v
|
||||
H5_DLL herr_t H5P_remove(H5P_genplist_t *plist, const char *name);
|
||||
H5_DLL htri_t H5P_exist_plist(const H5P_genplist_t *plist, const char *name);
|
||||
H5_DLL htri_t H5P_class_isa(const H5P_genclass_t *pclass1, const H5P_genclass_t *pclass2);
|
||||
H5_DLL char *H5P_get_class_name(H5P_genclass_t *pclass);
|
||||
H5_DLL char *H5P_get_class_name(H5P_genclass_t *pclass) H5_ATTR_MALLOC;
|
||||
|
||||
/* Internal helper routines */
|
||||
H5_DLL herr_t H5P_get_nprops_pclass(const H5P_genclass_t *pclass, size_t *nprops, bool recurse);
|
||||
|
@ -870,7 +870,7 @@ H5_DLL herr_t H5T__enum_insert(const H5T_t *dt, const char *name, const void *va
|
||||
H5_DLL herr_t H5T__get_member_value(const H5T_t *dt, unsigned membno, void *value);
|
||||
|
||||
/* Field functions (for both compound & enumerated types) */
|
||||
H5_DLL char *H5T__get_member_name(H5T_t const *dt, unsigned membno);
|
||||
H5_DLL char *H5T__get_member_name(H5T_t const *dt, unsigned membno) H5_ATTR_MALLOC;
|
||||
H5_DLL herr_t H5T__sort_value(const H5T_t *dt, int *map);
|
||||
H5_DLL herr_t H5T__sort_name(const H5T_t *dt, int *map);
|
||||
|
||||
|
@ -497,8 +497,16 @@
|
||||
#define H5_DIAG_DO_PRAGMA(x) _Pragma(#x)
|
||||
#define H5_DIAG_PRAGMA(x) H5_DIAG_DO_PRAGMA(GCC diagnostic x)
|
||||
|
||||
/* Allow suppression of compiler diagnostics unless H5_SHOW_ALL_WARNINGS is
|
||||
* defined (enabled with '--enable-show-all-warnings' configure option).
|
||||
*/
|
||||
#ifndef H5_SHOW_ALL_WARNINGS
|
||||
#define H5_DIAG_OFF(x) H5_DIAG_PRAGMA(push) H5_DIAG_PRAGMA(ignored H5_DIAG_JOINSTR("-W", x))
|
||||
#define H5_DIAG_ON(x) H5_DIAG_PRAGMA(pop)
|
||||
#else
|
||||
#define H5_DIAG_OFF(x)
|
||||
#define H5_DIAG_ON(x)
|
||||
#endif
|
||||
|
||||
/* Macros for enabling/disabling particular GCC-only warnings.
|
||||
* These pragmas are only implemented usefully in gcc 4.6+
|
||||
|
@ -22,8 +22,8 @@ static const char *FILENAME[] = {"event_set_1", NULL};
|
||||
|
||||
static hid_t connector_ids_g[EVENT_SET_NUM_CONNECTOR_IDS];
|
||||
|
||||
herr_t fake_wait_request_wait(void *req, uint64_t timeout, H5VL_request_status_t *status);
|
||||
herr_t fake_wait_request_free(void *req);
|
||||
herr_t fake_wait_request_wait(void *req, uint64_t timeout, H5VL_request_status_t *status);
|
||||
H5_ATTR_CONST herr_t fake_wait_request_free(void *req);
|
||||
|
||||
/* A VOL class struct that describes a VOL class with no
|
||||
* functionality, other than a wait that returns success.
|
||||
|
@ -26,48 +26,48 @@
|
||||
#endif
|
||||
|
||||
/* Local function declarations */
|
||||
static int gtoken(char *s);
|
||||
static int process(struct Options *opt);
|
||||
static int processConfigurationFile(char *infile, struct Input *in);
|
||||
static int mapKeywordToIndex(char *key);
|
||||
static int parsePathInfo(struct path_info *path, char *strm);
|
||||
static int parseDimensions(struct Input *in, char *strm);
|
||||
static int getInputSize(struct Input *in, int ival);
|
||||
static int getInputClass(struct Input *in, char *strm);
|
||||
static int getInputClassType(struct Input *in, char *strm);
|
||||
static int getInputByteOrder(struct Input *in, FILE *strm);
|
||||
static int InputClassStrToInt(char *temp);
|
||||
static int getRank(struct Input *in, FILE *strm);
|
||||
static int getDimensionSizes(struct Input *in, FILE *strm);
|
||||
static int getOutputSize(struct Input *in, FILE *strm);
|
||||
static int getOutputClass(struct Input *in, FILE *strm);
|
||||
static int OutputClassStrToInt(char *temp);
|
||||
static int getOutputArchitecture(struct Input *in, FILE *strm);
|
||||
static int OutputArchStrToInt(const char *temp);
|
||||
static int getOutputByteOrder(struct Input *in, FILE *strm);
|
||||
static int OutputByteOrderStrToInt(const char *temp);
|
||||
static int getChunkedDimensionSizes(struct Input *in, FILE *strm);
|
||||
static int getCompressionType(struct Input *in, FILE *strm);
|
||||
static int CompressionTypeStrToInt(char *temp);
|
||||
static int getCompressionParameter(struct Input *in, FILE *strm);
|
||||
static int getExternalFilename(struct Input *in, FILE *strm);
|
||||
static int getMaximumDimensionSizes(struct Input *in, FILE *strm);
|
||||
static int processDataFile(char *infile, struct Input *in, hid_t file_id);
|
||||
static int readIntegerData(FILE *strm, struct Input *in);
|
||||
static int readFloatData(FILE *strm, struct Input *in);
|
||||
static int allocateIntegerStorage(struct Input *in);
|
||||
static int allocateFloatStorage(struct Input *in);
|
||||
static int readUIntegerData(FILE *strm, struct Input *in);
|
||||
static int allocateUIntegerStorage(struct Input *in);
|
||||
static int validateConfigurationParameters(struct Input *in);
|
||||
static int processStrData(FILE *strm, struct Input *in, hid_t file_id);
|
||||
static int processStrHDFData(FILE *strm, struct Input *in, hid_t file_id);
|
||||
uint16_t swap_uint16(uint16_t val);
|
||||
int16_t swap_int16(int16_t val);
|
||||
uint32_t swap_uint32(uint32_t val);
|
||||
int32_t swap_int32(int32_t val);
|
||||
int64_t swap_int64(int64_t val);
|
||||
uint64_t swap_uint64(uint64_t val);
|
||||
static int gtoken(char *s);
|
||||
static int process(struct Options *opt);
|
||||
static int processConfigurationFile(char *infile, struct Input *in);
|
||||
static int mapKeywordToIndex(char *key);
|
||||
static int parsePathInfo(struct path_info *path, char *strm);
|
||||
static int parseDimensions(struct Input *in, char *strm);
|
||||
static int getInputSize(struct Input *in, int ival);
|
||||
static int getInputClass(struct Input *in, char *strm);
|
||||
static int getInputClassType(struct Input *in, char *strm);
|
||||
static int getInputByteOrder(struct Input *in, FILE *strm);
|
||||
static int InputClassStrToInt(char *temp);
|
||||
static int getRank(struct Input *in, FILE *strm);
|
||||
static int getDimensionSizes(struct Input *in, FILE *strm);
|
||||
static int getOutputSize(struct Input *in, FILE *strm);
|
||||
static int getOutputClass(struct Input *in, FILE *strm);
|
||||
static int OutputClassStrToInt(char *temp);
|
||||
static int getOutputArchitecture(struct Input *in, FILE *strm);
|
||||
static int OutputArchStrToInt(const char *temp);
|
||||
static int getOutputByteOrder(struct Input *in, FILE *strm);
|
||||
static int OutputByteOrderStrToInt(const char *temp);
|
||||
static int getChunkedDimensionSizes(struct Input *in, FILE *strm);
|
||||
static int getCompressionType(struct Input *in, FILE *strm);
|
||||
static int CompressionTypeStrToInt(char *temp);
|
||||
static int getCompressionParameter(struct Input *in, FILE *strm);
|
||||
static int getExternalFilename(struct Input *in, FILE *strm);
|
||||
static int getMaximumDimensionSizes(struct Input *in, FILE *strm);
|
||||
static int processDataFile(char *infile, struct Input *in, hid_t file_id);
|
||||
static int readIntegerData(FILE *strm, struct Input *in);
|
||||
static int readFloatData(FILE *strm, struct Input *in);
|
||||
static int allocateIntegerStorage(struct Input *in);
|
||||
static int allocateFloatStorage(struct Input *in);
|
||||
static int readUIntegerData(FILE *strm, struct Input *in);
|
||||
static int allocateUIntegerStorage(struct Input *in);
|
||||
static int validateConfigurationParameters(struct Input *in);
|
||||
static int processStrData(FILE *strm, struct Input *in, hid_t file_id);
|
||||
static int processStrHDFData(FILE *strm, struct Input *in, hid_t file_id);
|
||||
H5_ATTR_CONST uint16_t swap_uint16(uint16_t val);
|
||||
H5_ATTR_CONST int16_t swap_int16(int16_t val);
|
||||
H5_ATTR_CONST uint32_t swap_uint32(uint32_t val);
|
||||
H5_ATTR_CONST int32_t swap_int32(int32_t val);
|
||||
H5_ATTR_CONST int64_t swap_int64(int64_t val);
|
||||
H5_ATTR_CONST uint64_t swap_uint64(uint64_t val);
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
|
@ -29,7 +29,6 @@
|
||||
/* in detailed logging */
|
||||
#define HEXDUMP_WRITEDATA 0 /* Toggle whether to print bytes to write */
|
||||
/* in detailed logging */
|
||||
#define LISTENQ 80 /* max pending Driver requests */
|
||||
|
||||
#define MW_SESSION_MAGIC 0x88F36B32u
|
||||
#define MW_SOCK_COMM_MAGIC 0xDF10A157u
|
||||
|
Loading…
Reference in New Issue
Block a user