From d65d8084ff8068befb28251c9dbf62ded4f24f5c Mon Sep 17 00:00:00 2001 From: Vailin Choi Date: Fri, 27 Jul 2007 12:36:36 -0500 Subject: [svn-r14023] Purpose: reorganization. Description: move the h5stat tool into its own directory. Platform tested: kagiso. --- MANIFEST | 35 +- configure | 7 +- configure.in | 3 +- tools/Makefile.am | 2 +- tools/Makefile.in | 2 +- tools/h5stat/Makefile.am | 52 + tools/h5stat/Makefile.in | 891 +++++++++++++++ tools/h5stat/h5stat.c | 1377 ++++++++++++++++++++++++ tools/h5stat/h5stat_gentest.c | 84 ++ tools/h5stat/testfiles/h5stat_filters-F.ddl | 21 + tools/h5stat/testfiles/h5stat_filters-d.ddl | 33 + tools/h5stat/testfiles/h5stat_filters-dT.ddl | 42 + tools/h5stat/testfiles/h5stat_filters-file.ddl | 13 + tools/h5stat/testfiles/h5stat_filters-g.ddl | 9 + tools/h5stat/testfiles/h5stat_filters.ddl | 78 ++ tools/h5stat/testfiles/h5stat_filters.h5 | Bin 0 -> 46272 bytes tools/h5stat/testfiles/h5stat_help1.ddl | 24 + tools/h5stat/testfiles/h5stat_help2.ddl | 24 + tools/h5stat/testfiles/h5stat_newgrat.ddl | 74 ++ tools/h5stat/testfiles/h5stat_newgrat.h5 | Bin 0 -> 72236 bytes tools/h5stat/testfiles/h5stat_tsohm.ddl | 72 ++ tools/h5stat/testfiles/h5stat_tsohm.h5 | Bin 0 -> 3603 bytes tools/h5stat/testh5stat.sh.in | 135 +++ tools/misc/Makefile.am | 10 +- tools/misc/Makefile.in | 41 +- tools/misc/h5stat.c | 1377 ------------------------ tools/misc/h5stat_gentest.c | 84 -- tools/misc/testfiles/h5stat_filters-F.ddl | 21 - tools/misc/testfiles/h5stat_filters-d.ddl | 33 - tools/misc/testfiles/h5stat_filters-dT.ddl | 42 - tools/misc/testfiles/h5stat_filters-file.ddl | 13 - tools/misc/testfiles/h5stat_filters-g.ddl | 9 - tools/misc/testfiles/h5stat_filters.ddl | 78 -- tools/misc/testfiles/h5stat_filters.h5 | Bin 46272 -> 0 bytes tools/misc/testfiles/h5stat_help1.ddl | 24 - tools/misc/testfiles/h5stat_help2.ddl | 24 - tools/misc/testfiles/h5stat_newgrat.ddl | 74 -- tools/misc/testfiles/h5stat_newgrat.h5 | Bin 72236 -> 0 bytes tools/misc/testfiles/h5stat_tsohm.ddl | 72 -- tools/misc/testfiles/h5stat_tsohm.h5 | Bin 3603 -> 0 bytes tools/misc/testh5stat.sh.in | 135 --- 41 files changed, 2972 insertions(+), 2043 deletions(-) create mode 100644 tools/h5stat/Makefile.am create mode 100644 tools/h5stat/Makefile.in create mode 100644 tools/h5stat/h5stat.c create mode 100644 tools/h5stat/h5stat_gentest.c create mode 100644 tools/h5stat/testfiles/h5stat_filters-F.ddl create mode 100644 tools/h5stat/testfiles/h5stat_filters-d.ddl create mode 100644 tools/h5stat/testfiles/h5stat_filters-dT.ddl create mode 100644 tools/h5stat/testfiles/h5stat_filters-file.ddl create mode 100644 tools/h5stat/testfiles/h5stat_filters-g.ddl create mode 100644 tools/h5stat/testfiles/h5stat_filters.ddl create mode 100644 tools/h5stat/testfiles/h5stat_filters.h5 create mode 100644 tools/h5stat/testfiles/h5stat_help1.ddl create mode 100644 tools/h5stat/testfiles/h5stat_help2.ddl create mode 100644 tools/h5stat/testfiles/h5stat_newgrat.ddl create mode 100644 tools/h5stat/testfiles/h5stat_newgrat.h5 create mode 100644 tools/h5stat/testfiles/h5stat_tsohm.ddl create mode 100644 tools/h5stat/testfiles/h5stat_tsohm.h5 create mode 100644 tools/h5stat/testh5stat.sh.in delete mode 100644 tools/misc/h5stat.c delete mode 100644 tools/misc/h5stat_gentest.c delete mode 100644 tools/misc/testfiles/h5stat_filters-F.ddl delete mode 100644 tools/misc/testfiles/h5stat_filters-d.ddl delete mode 100644 tools/misc/testfiles/h5stat_filters-dT.ddl delete mode 100644 tools/misc/testfiles/h5stat_filters-file.ddl delete mode 100644 tools/misc/testfiles/h5stat_filters-g.ddl delete mode 100644 tools/misc/testfiles/h5stat_filters.ddl delete mode 100644 tools/misc/testfiles/h5stat_filters.h5 delete mode 100644 tools/misc/testfiles/h5stat_help1.ddl delete mode 100644 tools/misc/testfiles/h5stat_help2.ddl delete mode 100644 tools/misc/testfiles/h5stat_newgrat.ddl delete mode 100644 tools/misc/testfiles/h5stat_newgrat.h5 delete mode 100644 tools/misc/testfiles/h5stat_tsohm.ddl delete mode 100644 tools/misc/testfiles/h5stat_tsohm.h5 delete mode 100644 tools/misc/testh5stat.sh.in diff --git a/MANIFEST b/MANIFEST index 1ca18f4..5a3e02a 100644 --- a/MANIFEST +++ b/MANIFEST @@ -991,25 +991,28 @@ ./tools/misc/h5redeploy.in ./tools/misc/h5repart.c ./tools/misc/h5repart_gentest.c -./tools/misc/h5stat.c -./tools/misc/h5stat_gentest.c ./tools/misc/repart_test.c ./tools/misc/testh5mkgrp.sh ./tools/misc/testh5repart.sh.in -./tools/misc/testh5stat.sh.in -./tools/misc/testfiles/h5stat_filters-d.ddl -./tools/misc/testfiles/h5stat_filters.ddl -./tools/misc/testfiles/h5stat_filters-dT.ddl -./tools/misc/testfiles/h5stat_filters-F.ddl -./tools/misc/testfiles/h5stat_filters-file.ddl -./tools/misc/testfiles/h5stat_filters-g.ddl -./tools/misc/testfiles/h5stat_filters.h5 -./tools/misc/testfiles/h5stat_help1.ddl -./tools/misc/testfiles/h5stat_help2.ddl -./tools/misc/testfiles/h5stat_newgrat.ddl -./tools/misc/testfiles/h5stat_newgrat.h5 -./tools/misc/testfiles/h5stat_tsohm.ddl -./tools/misc/testfiles/h5stat_tsohm.h5 + +./tools/h5stat/Makefile.am +./tools/h5stat/Makefile.in +./tools/h5stat/h5stat.c +./tools/h5stat/h5stat_gentest.c +./tools/h5stat/testh5stat.sh.in +./tools/h5stat/testfiles/h5stat_filters-d.ddl +./tools/h5stat/testfiles/h5stat_filters.ddl +./tools/h5stat/testfiles/h5stat_filters-dT.ddl +./tools/h5stat/testfiles/h5stat_filters-F.ddl +./tools/h5stat/testfiles/h5stat_filters-file.ddl +./tools/h5stat/testfiles/h5stat_filters-g.ddl +./tools/h5stat/testfiles/h5stat_filters.h5 +./tools/h5stat/testfiles/h5stat_help1.ddl +./tools/h5stat/testfiles/h5stat_help2.ddl +./tools/h5stat/testfiles/h5stat_newgrat.ddl +./tools/h5stat/testfiles/h5stat_newgrat.h5 +./tools/h5stat/testfiles/h5stat_tsohm.ddl +./tools/h5stat/testfiles/h5stat_tsohm.h5 # h5dump ./tools/testfiles/family_file00000.h5 diff --git a/configure b/configure index 729ae60..38085c5 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Id: configure.in 13972 2007-07-13 02:42:17Z koziol . +# From configure.in Id: configure.in 14022 2007-07-26 21:33:10Z koziol . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for HDF5 1.8.0-beta2post1. # @@ -52649,7 +52649,7 @@ if test -n "$TESTPARALLEL"; then fi fi -ac_config_files="$ac_config_files src/libhdf5.settings Makefile src/Makefile test/Makefile testpar/Makefile testpar/testph5.sh perform/Makefile tools/Makefile tools/h5dump/Makefile tools/h5dump/testh5dump.sh tools/h5dump/testh5dumpxml.sh tools/h5import/Makefile tools/h5diff/Makefile tools/h5jam/Makefile tools/h5jam/testh5jam.sh tools/h5repack/Makefile tools/h5repack/h5repack.sh tools/h5ls/Makefile tools/h5copy/Makefile tools/lib/Makefile tools/misc/Makefile tools/misc/h5cc tools/misc/testh5repart.sh tools/misc/testh5stat.sh examples/Makefile examples/testh5cc.sh c++/Makefile c++/src/Makefile c++/src/h5c++ c++/test/Makefile c++/examples/Makefile c++/examples/testh5c++.sh fortran/Makefile fortran/src/h5fc fortran/src/libhdf5_fortran.settings fortran/src/Makefile fortran/test/Makefile fortran/testpar/Makefile fortran/examples/Makefile fortran/examples/testh5fc.sh hl/Makefile hl/src/Makefile hl/test/Makefile hl/tools/Makefile hl/tools/gif2h5/Makefile hl/examples/Makefile hl/c++/Makefile hl/c++/src/Makefile hl/c++/test/Makefile hl/c++/examples/Makefile hl/fortran/Makefile hl/fortran/src/Makefile hl/fortran/test/Makefile hl/fortran/examples/Makefile" +ac_config_files="$ac_config_files src/libhdf5.settings Makefile src/Makefile test/Makefile testpar/Makefile testpar/testph5.sh perform/Makefile tools/Makefile tools/h5dump/Makefile tools/h5dump/testh5dump.sh tools/h5dump/testh5dumpxml.sh tools/h5import/Makefile tools/h5diff/Makefile tools/h5jam/Makefile tools/h5jam/testh5jam.sh tools/h5repack/Makefile tools/h5repack/h5repack.sh tools/h5ls/Makefile tools/h5copy/Makefile tools/lib/Makefile tools/misc/Makefile tools/misc/h5cc tools/misc/testh5repart.sh tools/h5stat/testh5stat.sh tools/h5stat/Makefile examples/Makefile examples/testh5cc.sh c++/Makefile c++/src/Makefile c++/src/h5c++ c++/test/Makefile c++/examples/Makefile c++/examples/testh5c++.sh fortran/Makefile fortran/src/h5fc fortran/src/libhdf5_fortran.settings fortran/src/Makefile fortran/test/Makefile fortran/testpar/Makefile fortran/examples/Makefile fortran/examples/testh5fc.sh hl/Makefile hl/src/Makefile hl/test/Makefile hl/tools/Makefile hl/tools/gif2h5/Makefile hl/examples/Makefile hl/c++/Makefile hl/c++/src/Makefile hl/c++/test/Makefile hl/c++/examples/Makefile hl/fortran/Makefile hl/fortran/src/Makefile hl/fortran/test/Makefile hl/fortran/examples/Makefile" cat >confcache <<\_ACEOF @@ -53326,7 +53326,8 @@ do "tools/misc/Makefile") CONFIG_FILES="$CONFIG_FILES tools/misc/Makefile" ;; "tools/misc/h5cc") CONFIG_FILES="$CONFIG_FILES tools/misc/h5cc" ;; "tools/misc/testh5repart.sh") CONFIG_FILES="$CONFIG_FILES tools/misc/testh5repart.sh" ;; - "tools/misc/testh5stat.sh") CONFIG_FILES="$CONFIG_FILES tools/misc/testh5stat.sh" ;; + "tools/h5stat/testh5stat.sh") CONFIG_FILES="$CONFIG_FILES tools/h5stat/testh5stat.sh" ;; + "tools/h5stat/Makefile") CONFIG_FILES="$CONFIG_FILES tools/h5stat/Makefile" ;; "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "examples/testh5cc.sh") CONFIG_FILES="$CONFIG_FILES examples/testh5cc.sh" ;; "c++/Makefile") CONFIG_FILES="$CONFIG_FILES c++/Makefile" ;; diff --git a/configure.in b/configure.in index 01e4ef2..5d1a7fb 100644 --- a/configure.in +++ b/configure.in @@ -3810,7 +3810,8 @@ AC_CONFIG_FILES([src/libhdf5.settings tools/misc/Makefile tools/misc/h5cc tools/misc/testh5repart.sh - tools/misc/testh5stat.sh + tools/h5stat/testh5stat.sh + tools/h5stat/Makefile examples/Makefile examples/testh5cc.sh c++/Makefile diff --git a/tools/Makefile.am b/tools/Makefile.am index d1047da..d52942b 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -22,6 +22,6 @@ include $(top_srcdir)/config/commence.am # All subdirectories -SUBDIRS=lib h5dump h5diff h5ls misc h5import h5repack h5jam h5copy +SUBDIRS=lib h5dump h5diff h5ls misc h5import h5repack h5jam h5copy h5stat include $(top_srcdir)/config/conclude.am diff --git a/tools/Makefile.in b/tools/Makefile.in index 64f0f76..eabfca2 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -304,7 +304,7 @@ TRACE = perl $(top_srcdir)/bin/trace CHECK_CLEANFILES = *.chkexe *.chklog *.clog # All subdirectories -SUBDIRS = lib h5dump h5diff h5ls misc h5import h5repack h5jam h5copy +SUBDIRS = lib h5dump h5diff h5ls misc h5import h5repack h5jam h5copy h5stat # Automake needs to be taught how to build lib, progs, and tests targets. # These will be filled in automatically for the most part (e.g., diff --git a/tools/h5stat/Makefile.am b/tools/h5stat/Makefile.am new file mode 100644 index 0000000..b1c2024 --- /dev/null +++ b/tools/h5stat/Makefile.am @@ -0,0 +1,52 @@ +# +# Copyright by The HDF Group. +# Copyright by the Board of Trustees of the University of Illinois. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the files COPYING and Copyright.html. COPYING can be found at the root +# of the source code distribution tree; Copyright.html can be found at the +# root level of an installed copy of the electronic HDF5 document set and +# is linked from the top-level documents page. It can also be found at +# http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have +# access to either file, you may request a copy from help@hdfgroup.org. +## +## Makefile.am +## Run automake to generate a Makefile.in from this file. +# +# HDF5 Library Makefile(.in) +# + +include $(top_srcdir)/config/commence.am + +# Include src directory +INCLUDES=-I$(top_srcdir)/src -I$(top_srcdir)/tools/lib + +#test script and program +TEST_PROG=h5stat_gentest +TEST_SCRIPT=testh5stat.sh + +check_PROGRAMS=$(TEST_PROG) +check_SCRIPTS=$(TEST_SCRIPT) +SCRIPT_DEPEND=h5stat$(EXEEXT) + +# These are our main targets, the tools +bin_PROGRAMS=h5stat +bin_SCRIPTS= + +# Tell automake to clean h5redeploy script +CLEANFILES= + +# Temporary files. *.h5 are generated by h5repart_gentest. They should +# copied to the testfiles/ directory if update is required. fst_family*.h5 +# and scd_family*.h5 were created by setting the HDF5_NOCLEANUP variable. +CHECK_CLEANFILES+=*.h5 ../testfiles/fst_family*.h5 ../testfiles/scd_family*.h5 + +# These were generated by configure. Remove them only when distclean. +DISTCLEANFILES=testh5stat.sh + +# All programs rely on hdf5 library and h5tools library +LDADD=$(LIBH5TOOLS) $(LIBHDF5) + +include $(top_srcdir)/config/conclude.am diff --git a/tools/h5stat/Makefile.in b/tools/h5stat/Makefile.in new file mode 100644 index 0000000..33a3060 --- /dev/null +++ b/tools/h5stat/Makefile.in @@ -0,0 +1,891 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# Copyright by The HDF Group. +# Copyright by the Board of Trustees of the University of Illinois. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the files COPYING and Copyright.html. COPYING can be found at the root +# of the source code distribution tree; Copyright.html can be found at the +# root level of an installed copy of the electronic HDF5 document set and +# is linked from the top-level documents page. It can also be found at +# http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have +# access to either file, you may request a copy from help@hdfgroup.org. +# +# HDF5 Library Makefile(.in) +# + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/testh5stat.sh.in $(top_srcdir)/config/commence.am \ + $(top_srcdir)/config/conclude.am +check_PROGRAMS = $(am__EXEEXT_1) +bin_PROGRAMS = h5stat$(EXEEXT) +TESTS = $(check_PROGRAMS) $(check_SCRIPTS) +subdir = tools/h5stat +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/bin/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/src/H5config.h +CONFIG_CLEAN_FILES = testh5stat.sh +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +am__EXEEXT_1 = h5stat_gentest$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) +h5stat_SOURCES = h5stat.c +h5stat_OBJECTS = h5stat.$(OBJEXT) +h5stat_LDADD = $(LDADD) +h5stat_DEPENDENCIES = $(LIBH5TOOLS) $(LIBHDF5) +h5stat_gentest_SOURCES = h5stat_gentest.c +h5stat_gentest_OBJECTS = h5stat_gentest.$(OBJEXT) +h5stat_gentest_LDADD = $(LDADD) +h5stat_gentest_DEPENDENCIES = $(LIBH5TOOLS) $(LIBHDF5) +binSCRIPT_INSTALL = $(INSTALL_SCRIPT) +SCRIPTS = $(bin_SCRIPTS) +DEFAULT_INCLUDES = -I. -I$(top_builddir)/src@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/bin/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = h5stat.c h5stat_gentest.c +DIST_SOURCES = h5stat.c h5stat_gentest.c +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = /home1/packages/automake/automake-1.9.6/bin/aclocal-1.9 -I /afs/ncsa/projects/hdf/packages/libtool_1.5.14/Linux_2.4/share/aclocal +ADD_PARALLEL_FILES = @ADD_PARALLEL_FILES@ +AMTAR = @AMTAR@ +AM_MAKEFLAGS = @AM_MAKEFLAGS@ +AR = @AR@ + +# Set the paths for AFS installs of autotools for Linux machines +# Ideally, these tools should never be needed during the build. +AUTOCONF = /home1/packages/autoconf/autoconf-2.60/bin/autoconf +AUTOHEADER = /home1/packages/autoconf/autoconf-2.60/bin/autoheader +AUTOMAKE = /home1/packages/automake/automake-1.9.6/bin/automake-1.9 +AWK = @AWK@ +BYTESEX = @BYTESEX@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CC_VERSION = @CC_VERSION@ + +# H5_CFLAGS holds flags that should be used as CFLAGS when building hdf5, +# but which shouldn't be exported to h5cc for building other programs. +CFLAGS = @CFLAGS@ @H5_CFLAGS@ +CLEARFILEBUF = @CLEARFILEBUF@ +CONFIG_DATE = @CONFIG_DATE@ +CONFIG_MODE = @CONFIG_MODE@ +CONFIG_USER = @CONFIG_USER@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ @H5_CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ @H5_CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEBUG_PKG = @DEBUG_PKG@ +DEFAULT_API_VERSION = @DEFAULT_API_VERSION@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ +DYNAMIC_DIRS = @DYNAMIC_DIRS@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ + +# Make sure that these variables are exported to the Makefiles +F9XMODEXT = @F9XMODEXT@ +F9XMODFLAG = @F9XMODFLAG@ +F9XSUFFIXFLAG = @F9XSUFFIXFLAG@ +FC = @FC@ +FCFLAGS = @FCFLAGS@ @H5_FCFLAGS@ +FCFLAGS_f90 = @FCFLAGS_f90@ +FCLIBS = @FCLIBS@ +FFLAGS = @FFLAGS@ +FILTERS = @FILTERS@ +FSEARCH_DIRS = @FSEARCH_DIRS@ +GREP = @GREP@ +H5_CFLAGS = @H5_CFLAGS@ +H5_CPPFLAGS = @H5_CPPFLAGS@ +H5_CXXFLAGS = @H5_CXXFLAGS@ +H5_FCFLAGS = @H5_FCFLAGS@ +H5_LONE_COLON = @H5_LONE_COLON@ +H5_VERSION = @H5_VERSION@ +HADDR_T = @HADDR_T@ +HDF5_INTERFACES = @HDF5_INTERFACES@ +HID_T = @HID_T@ +HL = @HL@ +HL_FOR = @HL_FOR@ +HSIZET = @HSIZET@ +HSIZE_T = @HSIZE_T@ +HSSIZE_T = @HSSIZE_T@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_STATIC_EXEC = @LT_STATIC_EXEC@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MPE = @MPE@ +MPI_GET_SIZE = @MPI_GET_SIZE@ +OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PARALLEL = @PARALLEL@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PTHREAD = @PTHREAD@ +RANLIB = @RANLIB@ +ROOT = @ROOT@ +RUNPARALLEL = @RUNPARALLEL@ +RUNSERIAL = @RUNSERIAL@ +R_INTEGER = @R_INTEGER@ +R_LARGE = @R_LARGE@ +SEARCH = @SEARCH@ +SETX = @SETX@ +SET_MAKE = @SET_MAKE@ + +# Hardcode SHELL to be /bin/sh. Most machines have this shell, and +# on at least one machine configure fails to detect its existence (janus). +# Also, when HDF5 is configured on one machine but run on another, +# configure's automatic SHELL detection may not work on the build machine. +SHELL = /bin/sh +SIZE_T = @SIZE_T@ +STATIC_SHARED = @STATIC_SHARED@ +STRIP = @STRIP@ +TESTPARALLEL = @TESTPARALLEL@ +TIME = @TIME@ +TR = @TR@ +TRACE_API = @TRACE_API@ +USE_FILTER_DEFLATE = @USE_FILTER_DEFLATE@ +USE_FILTER_FLETCHER32 = @USE_FILTER_FLETCHER32@ +USE_FILTER_NBIT = @USE_FILTER_NBIT@ +USE_FILTER_SCALEOFFSET = @USE_FILTER_SCALEOFFSET@ +USE_FILTER_SHUFFLE = @USE_FILTER_SHUFFLE@ +USE_FILTER_SZIP = @USE_FILTER_SZIP@ +USINGMEMCHECKER = @USINGMEMCHECKER@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_FC = @ac_ct_FC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = $(exec_prefix)/doc +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ + +# Install directories that automake doesn't know about +includedir = $(exec_prefix)/include +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Shell commands used in Makefiles +RM = rm -f +CP = cp + +# Some machines need a command to run executables; this is that command +# so that our tests will run. +# We use RUNTESTS instead of RUNSERIAL directly because it may be that +# some tests need to be run with a different command. Older versions +# of the makefiles used the command +# $(LIBTOOL) --mode=execute +# in some directories, for instance. +RUNTESTS = $(RUNSERIAL) + +# Libraries to link to while building +LIBHDF5 = $(top_builddir)/src/libhdf5.la +LIBH5TEST = $(top_builddir)/test/libh5test.la +LIBH5F = $(top_builddir)/fortran/src/libhdf5_fortran.la +LIBH5FTEST = $(top_builddir)/fortran/test/libh5test_fortran.la +LIBH5CPP = $(top_builddir)/c++/src/libhdf5_cpp.la +LIBH5TOOLS = $(top_builddir)/tools/lib/libh5tools.la +LIBH5_HL = $(top_builddir)/hl/src/libhdf5_hl.la +LIBH5F_HL = $(top_builddir)/hl/fortran/src/libhdf5hl_fortran.la +LIBH5CPP_HL = $(top_builddir)/hl/c++/src/libhdf5_hl_cpp.la + +# Scripts used to build examples +# If only shared libraries have been installed, have h5cc build examples with +# shared libraries instead of static libraries +H5CC = $(bindir)/h5cc +H5CC_PP = $(bindir)/h5pcc +H5FC = $(bindir)/h5fc +H5FC_PP = $(bindir)/h5pfc +H5CPP = $(bindir)/h5c++ + +# The trace script; this is used on source files from the C library to +# insert tracing macros. +TRACE = perl $(top_srcdir)/bin/trace + +# .chkexe files are used to mark tests that have run successfully. +# .chklog files are output from those tests. +# *.clog are from the MPE option. + +# Temporary files. *.h5 are generated by h5repart_gentest. They should +# copied to the testfiles/ directory if update is required. fst_family*.h5 +# and scd_family*.h5 were created by setting the HDF5_NOCLEANUP variable. +CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.h5 \ + ../testfiles/fst_family*.h5 ../testfiles/scd_family*.h5 + +# Include src directory +INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/tools/lib + +#test script and program +TEST_PROG = h5stat_gentest +TEST_SCRIPT = testh5stat.sh +check_SCRIPTS = $(TEST_SCRIPT) +SCRIPT_DEPEND = h5stat$(EXEEXT) +bin_SCRIPTS = + +# Tell automake to clean h5redeploy script +CLEANFILES = + +# These were generated by configure. Remove them only when distclean. +DISTCLEANFILES = testh5stat.sh + +# All programs rely on hdf5 library and h5tools library +LDADD = $(LIBH5TOOLS) $(LIBHDF5) + +# Automake needs to be taught how to build lib, progs, and tests targets. +# These will be filled in automatically for the most part (e.g., +# lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG, and +# EXTRA_TEST variables are supplied to allow the user to force targets to +# be built at certain times. +LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ + $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) + +PROGS = $(bin_PROGRAMS) $(bin_SCRIPTS) $(noinst_PROGRAMS) $(noinst_SCRIPTS) \ + $(EXTRA_PROG) + +TEST_PROG_CHKEXE = $(TEST_PROG:=.chkexe_) +TEST_PROG_PARA_CHKEXE = $(TEST_PROG_PARA:=.chkexe_) +TEST_SCRIPT_CHKSH = $(TEST_SCRIPT:=.chkexe_) +TEST_SCRIPT_PARA_CHKSH = $(TEST_SCRIPT_PARA:=.chkexe_) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/config/commence.am $(top_srcdir)/config/conclude.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tools/h5stat/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign tools/h5stat/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +testh5stat.sh: $(top_builddir)/config.status $(srcdir)/testh5stat.sh.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + || test -f $$p1 \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +h5stat$(EXEEXT): $(h5stat_OBJECTS) $(h5stat_DEPENDENCIES) + @rm -f h5stat$(EXEEXT) + $(LINK) $(h5stat_OBJECTS) $(h5stat_LDADD) $(LIBS) +h5stat_gentest$(EXEEXT): $(h5stat_gentest_OBJECTS) $(h5stat_gentest_DEPENDENCIES) + @rm -f h5stat_gentest$(EXEEXT) + $(LINK) $(h5stat_gentest_OBJECTS) $(h5stat_gentest_LDADD) $(LIBS) +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_SCRIPTS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f $$d$$p; then \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ + else :; fi; \ + done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(bin_SCRIPTS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5stat_gentest.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(PROGRAMS) $(SCRIPTS) all-local +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: install-binPROGRAMS install-binSCRIPTS + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool mostlyclean-local + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am all-local check check-TESTS check-am \ + clean clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ + clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-binSCRIPTS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ + pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-binSCRIPTS + + +# List all build rules defined by HDF5 Makefiles as "PHONY" targets here. +# This tells the Makefiles that these targets are not files to be built but +# commands that should be executed even if a file with the same name already +# exists. +.PHONY: build-check-clean build-check-p build-check-s build-lib build-progs \ + build-tests check-clean check-install check-p check-s check-vfd \ + install-doc lib progs tests uninstall-doc _exec_check-s _test help + +help: + @$(top_srcdir)/bin/makehelp + +# lib/progs/tests targets recurse into subdirectories. build-* targets +# build files in this directory. +build-lib: $(LIB) +build-progs: $(LIB) $(PROGS) +build-tests: $(LIB) $(PROGS) $(TESTS) + +# General rule for recursive building targets. +# BUILT_SOURCES contain targets that need to be built before anything else +# in the directory (e.g., for Fortran type detection) +lib progs tests check-s check-p :: $(BUILT_SOURCES) + @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; + @for d in X $(SUBDIRS); do \ + if test $$d != X && test $$d != .; then \ + (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ + fi; \ + done + +# General rule for recursive cleaning targets. Like the rule above, +# but doesn't require building BUILT_SOURCES. +check-clean :: + @$(MAKE) $(AM_MAKEFLAGS) build-$@ || exit 1; + @for d in X $(SUBDIRS); do \ + if test $$d != X && test $$d != .; then \ + (set -x; cd $$d && $(MAKE) $(AM_MAKEFLAGS) $@) || exit 1; \ + fi; \ + done + +# Tell Automake to build tests when the user types `make all' (this is +# not its default behavior). Also build EXTRA_LIB and EXTRA_PROG since +# Automake won't build them automatically, either. +all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(TESTS) + +# make install-doc doesn't do anything outside of doc directory, but +# Makefiles should recognize it. +# UPDATE: docs no longer reside in this build tree, so this target +# is depreciated. +install-doc uninstall-doc: + @echo "Nothing to be done." + +# clean up files generated by tests so they can be re-run. +build-check-clean: + $(RM) -rf $(CHECK_CLEANFILES) + +# run check-clean whenever mostlyclean is run +mostlyclean-local: build-check-clean + +# check-install is just a synonym for installcheck +check-install: installcheck + +# Run each test in order, passing $(TEST_FLAGS) to the program. +# Since tests are done in a shell loop, "make -i" does apply inside it. +# Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop. +# The timestamps give a rough idea how much time the tests use. +# +# Note that targets in TESTS (defined above) will be built when the user +# types 'make tests' or 'make check', but only programs in TEST_PROG, +# TEST_PROG_PARA, or TEST_SCRIPT will actually be executed. +check-TESTS: test + +test _test: + @$(MAKE) build-check-s + @$(MAKE) build-check-p + +# Actual execution of check-s. +build-check-s: $(LIB) $(PROGS) $(TESTS) + @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ + echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ + fi + @$(MAKE) $(AM_MAKEFLAGS) _exec_check-s + @if test -n "$(TEST_PROG)$(TEST_SCRIPT)"; then \ + echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ + fi + +_exec_check-s: $(TEST_PROG_CHKEXE) $(TEST_SCRIPT_CHKSH) + +# The dummy.chkexe here prevents the target from being +# empty if there are no tests in the current directory. +# $${log} is the log file. +# $${tname} is the name of test. +$(TEST_PROG_CHKEXE) $(TEST_PROG_PARA_CHKEXE) dummy.chkexe_: + @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummy.chkexe_"; then \ + tname=$(@:.chkexe_=)$(EXEEXT);\ + log=$(@:.chkexe_=.chklog); \ + echo "============================"; \ + if $(top_srcdir)/bin/newer $(@:.chkexe_=.chkexe) $${tname}; then \ + echo "No need to test $${tname} again."; \ + else \ + echo "============================" > $${log}; \ + if test "X$(HDF_FORTRAN)" = "Xyes"; then \ + echo "Fortran API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \ + echo "Fortran API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ + elif test "X$(HDF_CXX)" = "Xyes"; then \ + echo "C++ API: Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \ + echo "C++ API: $(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log};\ + else \ + echo "Testing $(HDF5_DRIVER) $${tname} $(TEST_FLAGS)"; \ + echo "$(HDF5_DRIVER) $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ + fi; \ + echo "============================" >> $${log}; \ + srcdir="$(srcdir)" \ + $(TIME) $(RUNTESTS) ./$${tname} $(TEST_FLAGS) >> $${log} 2>&1 \ + && touch $(@:.chkexe_=.chkexe) || \ + (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ + (cat $${log} && false) || exit 1; \ + echo "" >> $${log}; \ + echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ + echo "============================" >> $${log}; \ + echo "Finished testing $${tname} $(TEST_FLAGS)"; \ + cat $${log}; \ + fi; \ + fi + +# The dummysh.chkexe here prevents the target from being +# empty if there are no tests in the current directory. +# $${log} is the log file. +# $${tname} is the name of test. +$(TEST_SCRIPT_CHKSH) $(TEST_SCRIPT_PARA_CHKSH) dummysh.chkexe_: + @if test "X$@" != "X.chkexe_" && test "X$@" != "Xdummysh.chkexe_"; then \ + cmd=$(@:.chkexe_=);\ + tname=`basename $$cmd`;\ + chkname=`basename $(@:.chkexe_=.chkexe)`;\ + log=`basename $(@:.chkexe_=.chklog)`; \ + echo "============================"; \ + if $(top_srcdir)/bin/newer $${chkname} $$cmd $(SCRIPT_DEPEND); then \ + echo "No need to test $${tname} again."; \ + else \ + echo "============================" > $${log}; \ + if test "X$(HDF_FORTRAN)" = "Xyes"; then \ + echo "Fortran API: Testing $${tname} $(TEST_FLAGS)"; \ + echo "Fortran API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ + elif test "X$(HDF_CXX)" = "Xyes"; then \ + echo "C++ API: Testing $${tname} $(TEST_FLAGS)"; \ + echo "C++ API: $${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ + else \ + echo "Testing $${tname} $(TEST_FLAGS)"; \ + echo "$${tname} $(TEST_FLAGS) Test Log" >> $${log}; \ + fi; \ + echo "============================" >> $${log}; \ + RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)" \ + srcdir="$(srcdir)" \ + $(TIME) $(SHELL) $$cmd $(TEST_FLAGS) >> $${log} 2>&1 \ + && touch $${chkname} || \ + (test $$HDF5_Make_Ignore && echo "*** Error ignored") || \ + (cat $${log} && false) || exit 1; \ + echo "" >> $${log}; \ + echo "Finished testing $${tname} $(TEST_FLAGS)" >> $${log}; \ + echo "============================" >> $${log}; \ + echo "Finished testing $${tname} $(TEST_FLAGS)"; \ + cat $${log}; \ + fi; \ + echo "============================"; \ + fi + +# Actual execution of check-p. +build-check-p: $(LIB) $(PROGS) $(TESTS) + @if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then \ + echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="; \ + fi + @if test -n "$(TEST_PROG_PARA)"; then \ + echo "**** Hint ****"; \ + echo "Parallel test files reside in the current directory" \ + "by default."; \ + echo "Set HDF5_PARAPREFIX to use another directory. E.g.,"; \ + echo " HDF5_PARAPREFIX=/PFS/user/me"; \ + echo " export HDF5_PARAPREFIX"; \ + echo " make check"; \ + echo "**** end of Hint ****"; \ + fi + @for test in $(TEST_PROG_PARA) dummy; do \ + if test $$test != dummy; then \ + $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ \ + RUNTESTS="$(RUNPARALLEL)" || exit 1; \ + fi; \ + done + @for test in $(TEST_SCRIPT_PARA) dummy; do \ + if test $$test != dummy; then \ + $(MAKE) $(AM_MAKEFLAGS) $$test.chkexe_ || exit 1; \ + fi; \ + done + @if test -n "$(TEST_PROG_PARA)$(TEST_SCRIPT_PARA)"; then \ + echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`===";\ + fi + +# Run test with different Virtual File Driver +check-vfd: $(LIB) $(PROGS) $(TESTS) + @for vfd in $(VFD_LIST) dummy; do \ + if test $$vfd != dummy; then \ + echo "============================"; \ + echo "Testing Virtual File Driver $$vfd"; \ + echo "============================"; \ + $(MAKE) $(AM_MAKEFLAGS) check-clean || exit 1; \ + HDF5_DRIVER=$$vfd $(MAKE) $(AM_MAKEFLAGS) check || exit 1; \ + fi; \ + done +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tools/h5stat/h5stat.c b/tools/h5stat/h5stat.c new file mode 100644 index 0000000..8f29519 --- /dev/null +++ b/tools/h5stat/h5stat.c @@ -0,0 +1,1377 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * Copyright by the Board of Trustees of the University of Illinois. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the files COPYING and Copyright.html. COPYING can be found at the root * + * of the source code distribution tree; Copyright.html can be found at the * + * root level of an installed copy of the electronic HDF5 document set and * + * is linked from the top-level documents page. It can also be found at * + * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include +#include +#include "H5private.h" /* Generic Functions */ +#include "h5tools.h" +#include "h5tools_utils.h" +#include "h5tools_ref.h" +#include "h5trav.h" +#include "hdf5.h" + +/* Parameters to control statistics gathered */ +#define SIZE_SMALL_GROUPS 10 +#define SIZE_SMALL_ATTRS 10 +#define SIZE_SMALL_DSETS 10 + +#define H5_NFILTERS_IMPL 8 /* Number of currently implemented filters + one to + accommodate for user-define filters + one + to accomodate datasets whithout any filters */ + + + +/* Datatype statistics for datasets */ +typedef struct dtype_info_t { + hid_t tid; /* ID of datatype */ + unsigned long count; /* Number of types found */ + unsigned long named; /* Number of types that are named */ +} dtype_info_t; + +typedef struct ohdr_info_t { + hsize_t total_size; /* Total size of object headers */ + hsize_t free_size; /* Total free space in object headers */ +} ohdr_info_t; + +/* Info to pass to the iteration functions */ +typedef struct iter_t { + const char *container; /* Full name of the container object */ + unsigned long curr_depth; /* Current depth of hierarchy */ + + unsigned long uniq_groups; /* Number of unique groups */ + unsigned long uniq_dsets; /* Number of unique datasets */ + unsigned long uniq_types; /* Number of unique named datatypes */ + unsigned long uniq_links; /* Number of unique links */ + unsigned long uniq_others; /* Number of other unique objects */ + + unsigned long max_depth; /* Maximum depth of hierarchy */ + unsigned long max_links; /* Maximum # of links to an object */ + hsize_t max_fanout; /* Maximum fanout from a group */ + unsigned long num_small_groups[SIZE_SMALL_GROUPS]; /* Size of small groups tracked */ + unsigned group_nbins; /* Number of bins for group counts */ + unsigned long *group_bins; /* Pointer to array of bins for group counts */ + ohdr_info_t group_ohdr_info; /* Object header information for groups */ + + hsize_t max_attrs; /* Maximum attributes from a group */ + unsigned long num_small_attrs[SIZE_SMALL_ATTRS]; /* Size of small attributes tracked */ + unsigned attr_nbins; + unsigned long *attr_bins; + + unsigned long max_dset_rank; /* Maximum rank of dataset */ + unsigned long dset_rank_count[H5S_MAX_RANK]; /* Number of datasets of each rank */ + hsize_t max_dset_dims; /* Maximum dimension size of dataset */ + unsigned long small_dset_dims[SIZE_SMALL_DSETS]; /* Size of dimensions of small datasets tracked */ + unsigned long dset_layouts[H5D_NLAYOUTS]; /* Type of storage for each dataset */ + unsigned long dset_comptype[H5_NFILTERS_IMPL]; /* Number of currently implemented filters */ + unsigned long dset_ntypes; /* Number of diff. dataset datatypes found */ + dtype_info_t *dset_type_info; /* Pointer to dataset datatype information found */ + unsigned dset_dim_nbins; /* Number of bins for dataset dimensions */ + unsigned long *dset_dim_bins; /* Pointer to array of bins for dataset dimensions */ + ohdr_info_t dset_ohdr_info; /* Object header information for datasets */ + hsize_t dset_storage_size; /* Size of raw data for datasets */ + hsize_t groups_btree_storage_size; /* btree size for group */ + hsize_t groups_heap_storage_size; /* heap size for group */ + hsize_t attrs_btree_storage_size; /* btree size for attributes (1.8) */ + hsize_t attrs_heap_storage_size; /* fractal heap size for attributes (1.8) */ + hsize_t SM_hdr_storage_size; /* header size for SOHM table (1.8) */ + hsize_t SM_index_storage_size; /* index (btree & list) size for SOHM table (1.8) */ + hsize_t SM_heap_storage_size; /* fractal heap size for SOHM table (1.8) */ + hsize_t super_ext_size; /* superblock extension size */ + hsize_t datasets_btree_storage_size; /* btree size for chunked dataset */ + unsigned long nexternal; /* Number of external files for a dataset */ + int local; /* Flag to indicate iteration over the object*/ +} iter_t; + + +/* Table containing object id and object name */ +static struct { + int nalloc; /* number of slots allocated */ + int nobjs; /* number of objects */ + struct { + haddr_t id; /* object number */ + char *name; /* full object name */ + } *obj; +} idtab_g; + +const char *progname = "h5stat"; +int d_status = EXIT_SUCCESS; +static int display_all = TRUE; +static int display_file_metadata = FALSE; +static int display_file = FALSE; +static int display_group_metadata = FALSE; +static int display_group = FALSE; +static int display_dset_metadata = FALSE; +static int display_dset = FALSE; +static int display_dtype_metadata = FALSE; +/* Not used yet 11/17/06 EIP +static int display_dtype = FALSE; +*/ +static int display_object = FALSE; +static int display_attr = FALSE; + +/* a structure for handling the order command-line parameters come in */ +struct handler_t { + void (*func)(void *); + int flag; + char *obj; +}; + + +static const char *s_opts ="AFfhGgDdTO:V"; +static struct long_options l_opts[] = { + {"help", no_arg, 'h'}, + {"hel", no_arg, 'h'}, + {"file", no_arg, 'f'}, + {"fil", no_arg, 'f'}, + {"fi", no_arg, 'f'}, + {"FILEmetadata", no_arg, 'F'}, + {"FILEmetadat", no_arg, 'F'}, + {"FILEmetada", no_arg, 'F'}, + {"FILEmetad", no_arg, 'F'}, + {"FILEmeta", no_arg, 'F'}, + {"FILEmet", no_arg, 'F'}, + {"FILEme", no_arg, 'F'}, + {"FILEm", no_arg, 'F'}, + {"group", no_arg, 'g'}, + {"grou", no_arg, 'g'}, + {"gro", no_arg, 'g'}, + {"gr", no_arg, 'g'}, + {"groupmetadata", no_arg, 'G'}, + {"groupmetadat", no_arg, 'G'}, + {"groupmetada", no_arg, 'G'}, + {"groupmetad", no_arg, 'G'}, + {"groupmeta", no_arg, 'G'}, + {"groupmet", no_arg, 'G'}, + {"groupme", no_arg, 'G'}, + {"groupm", no_arg, 'G'}, + {"dset", no_arg, 'd'}, + {"dse", no_arg, 'd'}, + {"ds", no_arg, 'd'}, + {"d", no_arg, 'd'}, + {"dsetmetadata", no_arg, 'D'}, + {"dsetmetadat", no_arg, 'D'}, + {"dsetmetada", no_arg, 'D'}, + {"dsetmetad", no_arg, 'D'}, + {"dsetmeta", no_arg, 'D'}, + {"dsetmet", no_arg, 'D'}, + {"dsetme", no_arg, 'D'}, + {"dsetm", no_arg, 'D'}, + {"dtypemetadata", no_arg, 'T'}, + {"dtypemetadat", no_arg, 'T'}, + {"dtypemetada", no_arg, 'T'}, + {"dtypemetad", no_arg, 'T'}, + {"dtypemeta", no_arg, 'T'}, + {"dtypemet", no_arg, 'T'}, + {"dtypeme", no_arg, 'T'}, + {"dtypem", no_arg, 'T'}, + {"dtype", no_arg, 'T'}, + { "object", require_arg, 'O' }, + { "objec", require_arg, 'O' }, + { "obje", require_arg, 'O' }, + { "obj", require_arg, 'O' }, + { "ob", require_arg, 'O' }, + { "version", no_arg, 'V' }, + { "versio", no_arg, 'V' }, + { "versi", no_arg, 'V' }, + { "vers", no_arg, 'V' }, + { "ver", no_arg, 'V' }, + { "ve", no_arg, 'V' }, + { "attribute", no_arg, 'A' }, + { "attribut", no_arg, 'A' }, + { "attribu", no_arg, 'A' }, + { "attrib", no_arg, 'A' }, + { "attri", no_arg, 'A' }, + { "attr", no_arg, 'A' }, + { "att", no_arg, 'A' }, + { "at", no_arg, 'A' }, + { "a", no_arg, 'A' }, + { NULL, 0, '\0' } +}; + +static void +leave(int ret) +{ + h5tools_close(); + exit(ret); +} + + +static void usage(const char *prog) +{ + fflush(stdout); + fprintf(stdout, "\n"); + fprintf(stdout, "This tool is under development. For detailed information\n"); + fprintf(stdout, "please see the specification document at\n"); + fprintf(stdout, "http://hdf.ncsa.uiuc.edu/RFC/h5stat/h5stat-spec.pdf\n"); + fprintf(stdout, "\n"); + fprintf(stdout, "Please send your comments and questions to help@hdfgroup.org\n"); + fprintf(stdout, "\n"); + fprintf(stdout, "Usage: %s [OPTIONS] file\n", prog); + fprintf(stdout, "\n"); + fprintf(stdout, " OPTIONS\n"); + fprintf(stdout, " -h, --help Print a usage message and exit\n"); + fprintf(stdout, " -V, --version Print version number and exit\n"); + fprintf(stdout, " -f, --file Print file information\n"); + fprintf(stdout, " -F, --filemetadata Print file metadata\n"); + fprintf(stdout, " -g, --group Print group information\n"); + fprintf(stdout, " -G, --groupmetadata Print group metadata\n"); + fprintf(stdout, " -d, --dset Print dataset information\n"); + fprintf(stdout, " -D, --dsetmetadata Print dataset metadata\n"); + fprintf(stdout, " -T, --dtypemetadata Print datatype metadata\n"); + fprintf(stdout, " -A, --attribute Print attribute information\n"); + fprintf(stdout, "\n"); +} + + +/*------------------------------------------------------------------------- + * Function: ceil_log10 + * + * Purpose: Compute the ceiling of log_10(x) + * + * Return: >0 on success, 0 on failure + * + * Programmer: Quincey Koziol + * Monday, August 22, 2005 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static unsigned +ceil_log10(unsigned long x) +{ + unsigned long pow10 = 1; + unsigned ret = 0; + + while(x >= pow10) { + pow10 *= 10; + ret++; + } /* end while */ + + return(ret); +} + + +/*------------------------------------------------------------------------- + * Function: sym_insert + * + * Purpose: Add a symbol to the table. + * + * Return: void + * + * Programmer: Robb Matzke + * Thursday, January 21, 1999 + * + *------------------------------------------------------------------------- + */ +static void +sym_insert(H5O_info_t *oi, const char *name) +{ + /* Don't add it if the link count is 1 because such an object can only + * have one name. */ + if(oi->rc > 1) { + int n; + + /* Extend the table */ + if(idtab_g.nobjs >= idtab_g.nalloc) { + idtab_g.nalloc = MAX(256, 2 * idtab_g.nalloc); + idtab_g.obj = realloc(idtab_g.obj, idtab_g.nalloc * sizeof(idtab_g.obj[0])); + } /* end if */ + + /* Insert the entry */ + n = idtab_g.nobjs++; + idtab_g.obj[n].id = oi->addr; + idtab_g.obj[n].name = strdup(name); + } /* end if */ +} /* end sym_insert() */ + + +/*------------------------------------------------------------------------- + * Function: sym_lookup + * + * Purpose: Find another name for the specified object. + * + * Return: Success: Ptr to another name. + * + * Failure: NULL + * + * Programmer: Robb Matzke + * Thursday, January 21, 1999 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static char * +sym_lookup(H5O_info_t *oi) +{ + int n; + + /*only one name possible*/ + if(oi->rc < 2) + return NULL; + + for(n = 0; n < idtab_g.nobjs; n++) + if(idtab_g.obj[n].id == oi->addr) + return idtab_g.obj[n].name; + + return NULL; +} /* end sym_lookup() */ + + +/*------------------------------------------------------------------------- + * Function: fix_name + * + * Purpose: Returns a malloc'd buffer that contains the PATH and BASE + * names separated by a single slash. It also removes duplicate + * and trailing slashes. + * + * Return: Success: Ptr to fixed name from malloc() + * + * Failure: NULL + * + * Programmer: Robb Matzke + * Thursday, January 21, 1999 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static char * +fix_name(const char *path, const char *base) +{ + size_t n = (path ? strlen(path) : 0) + (base ? strlen(base) : 0) + 3; + char *s = malloc(n), prev='\0'; + size_t len = 0; + + if (path) { + /* Path, followed by slash */ + for (/*void*/; *path; path++) + if ('/'!=*path || '/'!=prev) + prev = s[len++] = *path; + if ('/' != prev) + prev = s[len++] = '/'; + } + + if (base) { + /* Base name w/o trailing slashes */ + const char *end = base + strlen(base); + while (end > base && '/' == end[-1]) + --end; + + for (/*void*/; base < end; base++) + if ('/' != *base || '/' != prev) + prev = s[len++] = *base; + } + + s[len] = '\0'; + return s; +} + + +/*------------------------------------------------------------------------- + * Function: attribute_stats + * + * Purpose: Gather statistics about attributes on an object + * + * Return: Success: 0 + * + * Failure: -1 + * + * Programmer: Quincey Koziol + * Tuesday, July 17, 2007 + * + *------------------------------------------------------------------------- + */ +static herr_t +attribute_stats(iter_t *iter, const H5O_info_t *oi) +{ + unsigned bin; /* "bin" the number of objects falls in */ + + /* Update dataset & attribute metadata info */ + iter->attrs_btree_storage_size += oi->meta_size.attr.index_size; + iter->attrs_heap_storage_size += oi->meta_size.attr.heap_size; + + /* Update small # of attribute count & limits */ + if(oi->num_attrs < SIZE_SMALL_ATTRS) + (iter->num_small_attrs[(size_t)oi->num_attrs])++; + if(oi->num_attrs > iter->max_attrs) + iter->max_attrs = oi->num_attrs; + + /* Add attribute count to proper bin */ + bin = ceil_log10((unsigned long)oi->num_attrs); + if((bin + 1) > iter->attr_nbins) { + iter->attr_bins = realloc(iter->attr_bins, (bin + 1) * sizeof(unsigned long)); + assert(iter->attr_bins); + + /* Initialize counts for intermediate bins */ + while(iter->attr_nbins < bin) + iter->attr_bins[iter->attr_nbins++] = 0; + iter->attr_nbins++; + + /* Initialize count for new bin */ + iter->attr_bins[bin] = 1; + } /* end if */ + else + (iter->attr_bins[bin])++; + + return 0; +} /* end attribute_stats() */ + + +/*------------------------------------------------------------------------- + * Function: group_stats + * + * Purpose: Gather statistics about the group + * + * Return: Success: 0 + * + * Failure: -1 + * + * Programmer: Quincey Koziol + * Tuesday, August 16, 2005 + * + * Modifications: Refactored code from the walk_function + * EIP, Wednesday, August 16, 2006 + * + * Vailin Choi 12 July 2007 + * 1. Gathered storage info for btree and heap + * (groups and attributes) + * 2. Gathered info for attributes + * + * Vailin Choi 14 July 2007 + * Cast "num_objs" and "num_attrs" to size_t + * Due to the -Mbounds problem for the pgi-32 bit compiler on indexing + * + *------------------------------------------------------------------------- + */ +static herr_t +group_stats(hid_t group, const char *name, const char *fullname, + const H5O_info_t *oi, H5G_iterate_t walk, iter_t *iter) +{ + hid_t gid; /* Group ID */ + const char *last_container; + hsize_t num_objs; + unsigned bin; /* "bin" the number of objects falls in */ + herr_t ret; + + /* Gather statistics about this type of object */ + iter->uniq_groups++; + if(iter->curr_depth > iter->max_depth) + iter->max_depth = iter->curr_depth; + + /* Get object header information */ + iter->group_ohdr_info.total_size += oi->hdr.space.total; + iter->group_ohdr_info.free_size += oi->hdr.space.free; + + gid = H5Gopen(group, name); + assert(gid > 0); + + /* Get number of links in this group */ + ret = H5Gget_num_objs(gid, &num_objs); + assert(ret >= 0); + + /* Update link stats */ + if(num_objs < SIZE_SMALL_GROUPS) + (iter->num_small_groups[(size_t)num_objs])++; + if(num_objs > iter->max_fanout) + iter->max_fanout = num_objs; + + /* Add group count to proper bin */ + bin = ceil_log10((unsigned long)num_objs); + if((bin + 1) > iter->group_nbins) { + /* Allocate more storage for info about dataset's datatype */ + iter->group_bins = realloc(iter->group_bins, (bin + 1) * sizeof(unsigned long)); + assert(iter->group_bins); + + /* Initialize counts for intermediate bins */ + while(iter->group_nbins < bin) + iter->group_bins[iter->group_nbins++] = 0; + iter->group_nbins++; + + /* Initialize count for new bin */ + iter->group_bins[bin] = 1; + } /* end if */ + else + (iter->group_bins[bin])++; + + /* Update group metadata info */ + iter->groups_btree_storage_size += oi->meta_size.obj.index_size; + iter->groups_heap_storage_size += oi->meta_size.obj.heap_size; + + /* Update attribute metadata info */ + ret = attribute_stats(iter, oi); + assert(ret >= 0); + + /* Close current group */ + ret = H5Gclose(gid); + assert(ret >= 0); + + /* Update current container info */ + last_container = iter->container; + iter->container = fullname; + iter->curr_depth++; + + /* Recursively descend into current group's objects */ + H5Giterate(group, name, NULL, walk, iter); + + /* Revert current container info */ + iter->container = last_container; + iter->curr_depth--; + + return 0; +} /* end group_stats() */ + + +/*------------------------------------------------------------------------- + * Function: dataset_stats + * + * Purpose: Gather statistics about the dataset + * + * Return: Success: 0 + * + * Failure: -1 + * + * Programmer: Quincey Koziol + * Tuesday, August 16, 2005 + * + * Modifications: Refactored code from the walk_function + * EIP, Wednesday, August 16, 2006 + * + * Vailin Choi 12 July 2007 + * 1. Gathered storage info for btree and heap + * (chunked datasets and attributes) + * 2. Gathered info for attributes + * + * Vailin Choi 14 July 2007 + * Cast "dims" and "num_attrs" to size_t + * Due to the -Mbounds problem for the pgi-32bit compiler on indexing + * + *------------------------------------------------------------------------- + */ +static herr_t +dataset_stats(hid_t group, const char *name, const H5O_info_t *oi, iter_t *iter) +{ + unsigned bin; /* "bin" the number of objects falls in */ + hid_t did; /* Dataset ID */ + hid_t sid; /* Dataspace ID */ + hid_t tid; /* Datatype ID */ + hid_t dcpl; /* Dataset creation property list ID */ + hsize_t dims[H5S_MAX_RANK];/* Dimensions of dataset */ + H5D_layout_t lout; /* Layout of dataset */ + unsigned type_found; /* Whether the dataset's datatype was */ + /* already found */ + int ndims; /* Number of dimensions of dataset */ + hsize_t storage; /* Size of dataset storage */ + unsigned u; /* Local index variable */ + int num_ext; /* Number of external files for a dataset */ + int nfltr; /* Number of filters for a dataset */ + H5Z_filter_t fltr; /* Filter identifier */ + herr_t ret; + + /* Gather statistics about this type of object */ + iter->uniq_dsets++; + + /* Get object header information */ + iter->dset_ohdr_info.total_size += oi->hdr.space.total; + iter->dset_ohdr_info.free_size += oi->hdr.space.free; + + did = H5Dopen(group, name); + assert(did > 0); + + /* Update dataset metadata info */ + iter->datasets_btree_storage_size += oi->meta_size.obj.index_size; + + /* Update attribute metadata info */ + ret = attribute_stats(iter, oi); + assert(ret >= 0); + + /* Get storage info */ + storage = H5Dget_storage_size(did); + iter->dset_storage_size += storage; + + /* Gather dataspace statistics */ + sid = H5Dget_space(did); + assert(sid > 0); + + ndims = H5Sget_simple_extent_dims(sid, dims, NULL); + assert(ndims >= 0); + + /* Check for larger rank of dataset */ + if((unsigned)ndims > iter->max_dset_rank) + iter->max_dset_rank = ndims; + + /* Track the number of datasets with each rank */ + (iter->dset_rank_count[ndims])++; + + /* Only gather dim size statistics on 1-D datasets */ + if(ndims == 1) { + iter->max_dset_dims = dims[0]; + if(dims[0] < SIZE_SMALL_DSETS) + (iter->small_dset_dims[(size_t)dims[0]])++; + + /* Add dim count to proper bin */ + bin = ceil_log10((unsigned long)dims[0]); + if((bin + 1) > iter->dset_dim_nbins) { + /* Allocate more storage for info about dataset's datatype */ + iter->dset_dim_bins = realloc(iter->dset_dim_bins, (bin + 1) * sizeof(unsigned long)); + assert(iter->dset_dim_bins); + + /* Initialize counts for intermediate bins */ + while(iter->dset_dim_nbins < bin) + iter->dset_dim_bins[iter->dset_dim_nbins++] = 0; + iter->dset_dim_nbins++; + + /* Initialize count for this bin */ + iter->dset_dim_bins[bin] = 1; + } /* end if */ + else + (iter->dset_dim_bins[bin])++; + } /* end if */ + + ret = H5Sclose(sid); + assert(ret >= 0); + + /* Gather datatype statistics */ + tid = H5Dget_type(did); + assert(tid > 0); + + type_found = FALSE; + for(u = 0; u < iter->dset_ntypes; u++) + if(H5Tequal(iter->dset_type_info[u].tid, tid) > 0) { + type_found = TRUE; + break; + } /* end for */ + if(type_found) + (iter->dset_type_info[u].count)++; + else { + unsigned curr_ntype = iter->dset_ntypes; + + /* Increment # of datatypes seen for datasets */ + iter->dset_ntypes++; + + /* Allocate more storage for info about dataset's datatype */ + iter->dset_type_info = realloc(iter->dset_type_info, iter->dset_ntypes * sizeof(dtype_info_t)); + assert(iter->dset_type_info); + + /* Initialize information about datatype */ + iter->dset_type_info[curr_ntype].tid = H5Tcopy(tid); + assert(iter->dset_type_info[curr_ntype].tid > 0); + iter->dset_type_info[curr_ntype].count = 1; + iter->dset_type_info[curr_ntype].named = 0; + + /* Set index for later */ + u = curr_ntype; + } /* end else */ + + /* Check if the datatype is a named datatype */ + if(H5Tcommitted(tid) > 0) + (iter->dset_type_info[u].named)++; + + ret = H5Tclose(tid); + assert(ret >= 0); + + /* Gather layout statistics */ + dcpl = H5Dget_create_plist(did); + assert(dcpl > 0); + + lout = H5Pget_layout(dcpl); + assert(lout >= 0); + + /* Track the layout type for dataset */ + (iter->dset_layouts[lout])++; + + num_ext = H5Pget_external_count(dcpl); + assert (num_ext >= 0); + + if(num_ext) + iter->nexternal = iter->nexternal + num_ext; + + /* Track different filters */ + if((nfltr = H5Pget_nfilters(dcpl)) >= 0) { + if(nfltr == 0) + iter->dset_comptype[0]++; + for(u = 0; u < (unsigned)nfltr; u++) { +#ifdef H5_WANT_H5_V1_6_COMPAT + fltr = H5Pget_filter(dcpl, u, 0, 0, 0, 0, 0); +#else /* H5_WANT_H5_V1_6_COMPAT */ + fltr = H5Pget_filter(dcpl, u, 0, 0, 0, 0, 0, NULL); +#endif /* H5_WANT_H5_V1_6_COMPAT */ + if(fltr < (H5_NFILTERS_IMPL - 1)) + iter->dset_comptype[fltr]++; + else + iter->dset_comptype[H5_NFILTERS_IMPL - 1]++; /*other filters*/ + } /* end for */ + } /* endif nfltr */ + + ret = H5Pclose(dcpl); + assert(ret >= 0); + + ret = H5Dclose(did); + assert(ret >= 0); + + return 0; +} /* end dataset_stats() */ + + +/*------------------------------------------------------------------------- + * Function: walk + * + * Purpose: Gather statistics about the file + * + * Return: Success: 0 + * Failure: -1 + * + * Programmer: Quincey Koziol + * Tuesday, August 16, 2005 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +walk(hid_t group, const char *name, void *_iter) +{ + iter_t *iter = (iter_t *)_iter; + H5O_info_t oi; + char *fullname = NULL; + char *s; + herr_t ret; /* Generic return value */ + + /* Get the full object name */ + fullname = fix_name(iter->container, name); + + /* Get object information */ + ret = H5Oget_info(group, name, &oi, H5P_DEFAULT); + assert(ret >= 0); + + /* If the object has already been printed then just show the object ID + * and return. */ + if((s = sym_lookup(&oi))) { + printf("%s same as %s\n", name, s); + } else { + sym_insert(&oi, fullname); + + /* Gather some statistics about the object */ + if(oi.rc > iter->max_links) + iter->max_links = oi.rc; + + switch(oi.type) { + case H5G_GROUP: + group_stats(group, name, fullname, &oi, walk, iter); + break; + + case H5G_DATASET: + dataset_stats(group, name, &oi, iter); + break; + + case H5G_TYPE: + /* Gather statistics about this type of object */ + iter->uniq_types++; + break; + + case H5G_LINK: + /* Gather statistics about links and UD links */ + iter->uniq_links++; + break; + + default: + /* Gather statistics about this type of object */ + iter->uniq_others++; + break; + } /* end switch */ + } + + if(fullname) + free(fullname); + + return 0; +} + + +/*------------------------------------------------------------------------- + * Function: parse_command_line + * + * Purpose: Parses command line and sets up global variable to control output + * + * Return: Success: 0 + * + * Failure: -1 + * + * Programmer: Elena Pourmal + * Saturday, August 12, 2006 + * + * Modifications: + * Vailin Choi 12 July 2007 + * Added 'A' option to display attribute info + * + *------------------------------------------------------------------------- + */ +static struct handler_t * +parse_command_line(int argc, const char *argv[]) +{ + int opt, i; + struct handler_t *hand; + + /* Allocate space to hold the command line info */ + hand = calloc((size_t)argc, sizeof(struct handler_t)); + + /* parse command line options */ + while ((opt = get_option(argc, argv, s_opts, l_opts)) != EOF) { + switch ((char)opt) { + case 'A': + display_all = FALSE; + display_attr = TRUE; + break; + case 'F': + display_all = FALSE; + display_file_metadata = TRUE; + break; + case 'f': + display_all = FALSE; + display_file = TRUE; + break; + case 'G': + display_all = FALSE; + display_group_metadata = TRUE; + break; + case 'g': + display_all = FALSE; + display_group = TRUE; + break; + case 'T': + display_all = FALSE; + display_dtype_metadata = TRUE; + break; + case 'D': + display_all = FALSE; + display_dset_metadata = TRUE; + break; + case 'd': + display_all = FALSE; + display_dset = TRUE; + break; + case 'h': + usage(progname); + leave(EXIT_SUCCESS); + case 'V': + print_version(progname); + leave(EXIT_SUCCESS); + break; + case 'O': + display_object = TRUE; + for (i = 0; i < argc; i++) + if (!hand[i].obj) { + hand[i].obj = HDstrdup(opt_arg); + hand[i].flag = 1; + break; + } + break; + default: + usage(progname); + leave(EXIT_FAILURE); + } + } + + /* check for file name to be processed */ + if (argc <= opt_ind) { + error_msg(progname, "missing file name\n"); + usage(progname); + leave(EXIT_FAILURE); + } + return hand; +} + + +/*------------------------------------------------------------------------- + * Function: init_iter + * + * Purpose: Initialize iter structure + * + * Return: Success: 0 + * + * Failure: Never fails + * + * Programmer: Elena Pourmal + * Saturday, August 12, 2006 + * + *------------------------------------------------------------------------- + */ +static herr_t +iter_init(iter_t *iter) +{ + /* Clear everything to zeros */ + memset(iter, 0, sizeof(*iter)); + + /* Initialize non-zero information */ + iter->container = "/"; + + return 0; +} + + +/*------------------------------------------------------------------------- + * Function: print_file_info + * + * Purpose: Prints information about file + * + * Return: Success: 0 + * + * Failure: Never fails + * + * Programmer: Elena Pourmal + * Saturday, August 12, 2006 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +print_file_info(const iter_t *iter) +{ + printf("File information\n"); + printf("\t# of unique groups: %lu\n", iter->uniq_groups); + printf("\t# of unique datasets: %lu\n", iter->uniq_dsets); + printf("\t# of unique named dataypes: %lu\n", iter->uniq_types); + printf("\t# of unique links: %lu\n", iter->uniq_links); + printf("\t# of unique other: %lu\n", iter->uniq_others); + printf("\tMax. # of links to object: %lu\n", iter->max_links); + printf("\tMax. depth of hierarchy: %lu\n", iter->max_depth); + HDfprintf(stdout, "\tMax. # of objects in group: %Hu\n", iter->max_fanout); + + return 0; +} + + +/*------------------------------------------------------------------------- + * Function: print_file_metadata + * + * Purpose: Prints metadata information about file + * + * Return: Success: 0 + * + * Failure: Never fails + * + * Programmer: Elena Pourmal + * Saturday, August 12, 2006 + * + * Modifications: + * Vailin Choi 12 July 2007 + * Print storage info for: + * 1. btree/heap storage for groups and attributes + * 2. btree storage for chunked dataset + * 3. hdr/btree/list/heap storage for SOHM table + * 4. superblock extension size + * + *------------------------------------------------------------------------- + */ +static herr_t +print_file_metadata(const iter_t *iter) +{ + printf("Object header size: (total/unused)\n"); + HDfprintf(stdout, "\tGroups: %Hu/%Hu\n", iter->group_ohdr_info.total_size, + iter->group_ohdr_info.free_size); + HDfprintf(stdout, "\tDatasets: %Hu/%Hu\n", iter->dset_ohdr_info.total_size, + iter->dset_ohdr_info.free_size); + + printf("Storage information:\n"); + HDfprintf(stdout, "\tGroups:\n"); + HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->groups_btree_storage_size); + HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->groups_heap_storage_size); + + HDfprintf(stdout, "\tAttributes:\n"); + HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->attrs_btree_storage_size); + HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->attrs_heap_storage_size); + + HDfprintf(stdout, "\tChunked datasets:\n"); + HDfprintf(stdout, "\t\tB-tree: %Hu\n", iter->datasets_btree_storage_size); + + HDfprintf(stdout, "\tShared Messages:\n"); + HDfprintf(stdout, "\t\tHeader: %Hu\n", iter->SM_hdr_storage_size); + HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->SM_index_storage_size); + HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->SM_heap_storage_size); + + HDfprintf(stdout, "\tSuperblock extension: %Hu\n", iter->super_ext_size); + + return 0; +} + + +/*------------------------------------------------------------------------- + * Function: print_group_info + * + * Purpose: Prints information about groups in the file + * + * Return: Success: 0 + * + * Failure: Never fails + * + * Programmer: Elena Pourmal + * Saturday, August 12, 2006 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +print_group_info(const iter_t *iter) +{ + unsigned long power; /* Temporary "power" for bins */ + unsigned long total; /* Total count for various statistics */ + unsigned u; /* Local index variable */ + + printf("Small groups:\n"); + total = 0; + for(u = 0; u < SIZE_SMALL_GROUPS; u++) { + if(iter->num_small_groups[u] > 0) { + printf("\t# of groups of size %u: %lu\n", u, iter->num_small_groups[u]); + total += iter->num_small_groups[u]; + } /* end if */ + } /* end for */ + printf("\tTotal # of small groups: %lu\n", total); + + printf("Group bins:\n"); + total = 0; + if(iter->group_bins[0] > 0) { + printf("\t# of groups of size 0: %lu\n", iter->group_bins[0]); + total = iter->group_bins[0]; + } /* end if */ + power = 1; + for(u = 1; u < iter->group_nbins; u++) { + if(iter->group_bins[u] > 0) { + printf("\t# of groups of size %lu - %lu: %lu\n", power, (power * 10) - 1, + iter->group_bins[u]); + total += iter->group_bins[u]; + } /* end if */ + power *= 10; + } /* end for */ + printf("\tTotal # of groups: %lu\n", total); + + return 0; +} + + +/*------------------------------------------------------------------------- + * Function: print_attr_info + * + * Purpose: Prints information about attributes in the file + * + * Return: Success: 0 + * + * Failure: Never fails + * + * Programmer: Vailin Choi + * July 12, 2007 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +print_attr_info(const iter_t *iter) +{ + unsigned long power; /* Temporary "power" for bins */ + unsigned long total; /* Total count for various statistics */ + unsigned u; /* Local index variable */ + + printf("Small # of attributes:\n"); + total = 0; + for(u = 1; u < SIZE_SMALL_ATTRS; u++) { + if(iter->num_small_attrs[u] > 0) { + printf("\t# of objects with %u attributes: %lu\n", u, iter->num_small_attrs[u]); + total += iter->num_small_attrs[u]; + } /* end if */ + } /* end for */ + printf("\tTotal # of objects with small # of attributes: %lu\n", total); + + printf("Attribute bins:\n"); + total = 0; + power = 1; + for(u = 1; u < iter->attr_nbins; u++) { + if(iter->attr_bins[u] > 0) { + printf("\t# of objects with %lu - %lu attributes: %lu\n", power, (power * 10) - 1, + iter->attr_bins[u]); + total += iter->attr_bins[u]; + } /* end if */ + power *= 10; + } /* end for */ + printf("\tTotal # of objects with attributes: %lu\n", total); + printf("\tMax. # of attributes to objects: %lu\n", (unsigned long)iter->max_attrs); + + return 0; +} + + +/*------------------------------------------------------------------------- + * Function: print_dataset_info + * + * Purpose: Prints information about datasets in the file + * + * Return: Success: 0 + * + * Failure: Never fails + * + * Programmer: Elena Pourmal + * Saturday, August 12, 2006 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +print_dataset_info(const iter_t *iter) +{ + unsigned long power; /* Temporary "power" for bins */ + unsigned long total; /* Total count for various statistics */ + size_t dtype_size; /* Size of encoded datatype */ + unsigned u; /* Local index variable */ + + if(iter->uniq_dsets > 0) { + printf("Dataset dimension information:\n"); + printf("\tMax. rank of datasets: %lu\n", iter->max_dset_rank); + printf("\tDataset ranks:\n"); + for(u = 0; u < H5S_MAX_RANK; u++) + if(iter->dset_rank_count[u] > 0) + printf("\t\t# of dataset with rank %u: %lu\n", u, iter->dset_rank_count[u]); + + printf("1-D Dataset information:\n"); + HDfprintf(stdout, "\tMax. dimension size of 1-D datasets: %Hu\n", iter->max_dset_dims); + printf("\tSmall 1-D datasets:\n"); + total = 0; + for(u = 0; u < SIZE_SMALL_DSETS; u++) { + if(iter->small_dset_dims[u] > 0) { + printf("\t\t# of dataset dimensions of size %u: %lu\n", u, + iter->small_dset_dims[u]); + total += iter->small_dset_dims[u]; + } /* end if */ + } /* end for */ + printf("\t\tTotal small datasets: %lu\n", total); + + /* Protect against no datasets in file */ + if(iter->dset_dim_nbins > 0) { + printf("\t1-D Dataset dimension bins:\n"); + total = 0; + if(iter->dset_dim_bins[0] > 0) { + printf("\t\t# of datasets of size 0: %lu\n", iter->dset_dim_bins[0]); + total = iter->dset_dim_bins[0]; + } /* end if */ + power = 1; + for(u = 1; u < iter->dset_dim_nbins; u++) { + if(iter->dset_dim_bins[u] > 0) { + printf("\t\t# of datasets of size %lu - %lu: %lu\n", power, (power * 10) - 1, + iter->dset_dim_bins[u]); + total += iter->dset_dim_bins[u]; + } /* end if */ + power *= 10; + } /* end for */ + printf("\t\tTotal # of datasets: %lu\n", total); + } /* end if */ + + printf("Dataset storage information:\n"); + HDfprintf(stdout, "\tTotal raw data size: %Hu\n", iter->dset_storage_size); + + printf("Dataset layout information:\n"); + for(u = 0; u < H5D_NLAYOUTS; u++) + printf("\tDataset layout counts[%s]: %lu\n", (u == 0 ? "COMPACT" : + (u == 1 ? "CONTIG" : "CHUNKED")), iter->dset_layouts[u]); + printf("\tNumber of external files : %lu\n", iter->nexternal); + + printf("Dataset filters information:\n"); + printf("\tNumber of datasets with:\n"); + printf("\t\tNO filter: %lu\n", iter->dset_comptype[H5Z_FILTER_ERROR+1]); + printf("\t\tGZIP filter: %lu\n", iter->dset_comptype[H5Z_FILTER_DEFLATE]); + printf("\t\tSHUFFLE filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SHUFFLE]); + printf("\t\tFLETCHER32 filter: %lu\n", iter->dset_comptype[H5Z_FILTER_FLETCHER32]); + printf("\t\tSZIP filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SZIP]); + printf("\t\tNBIT filter: %lu\n", iter->dset_comptype[H5Z_FILTER_NBIT]); + printf("\t\tSCALEOFFSET filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SCALEOFFSET]); + printf("\t\tUSER-DEFINED filter: %lu\n", iter->dset_comptype[H5_NFILTERS_IMPL-1]); + + if(display_dtype_metadata) { + printf("Dataset datatype information:\n"); + printf("\t# of unique datatypes used by datasets: %lu\n", iter->dset_ntypes); + total = 0; + for(u = 0; u < iter->dset_ntypes; u++) { + H5Tencode(iter->dset_type_info[u].tid, NULL, &dtype_size); + printf("\tDataset datatype #%u:\n", u); + printf("\t\tCount (total/named) = (%lu/%lu)\n", iter->dset_type_info[u].count, iter->dset_type_info[u].named); + printf("\t\tSize (desc./elmt) = (%lu/%lu)\n", (unsigned long)dtype_size, + (unsigned long)H5Tget_size(iter->dset_type_info[u].tid)); + H5Tclose(iter->dset_type_info[u].tid); + total += iter->dset_type_info[u].count; + } /* end for */ + printf("\tTotal dataset datatype count: %lu\n", total); + } + } /* end if */ + + return 0; +} + + +/*------------------------------------------------------------------------- + * Function: print_file_statistics + * + * Purpose: Prints file statistics + * + * Return: Success: 0 + * + * Failure: Never fails + * + * Programmer: Elena Pourmal + * Saturday, August 12, 2006 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static void +print_file_statistics(const iter_t *iter) +{ + if(display_all) { + display_file = TRUE; + display_file_metadata = TRUE; + display_group = TRUE; + display_group_metadata = TRUE; + display_dset = TRUE; + display_dtype_metadata = TRUE; + display_attr = TRUE; + } + + if(display_file) print_file_info(iter); + if(display_file_metadata) print_file_metadata(iter); + if(display_group) print_group_info(iter); + if(display_dset) print_dataset_info(iter); + if(display_attr) print_attr_info(iter); +} + + +/*------------------------------------------------------------------------- + * Function: print_object_statistics + * + * Purpose: Prints object statistics + * + * Return: Success: 0 + * + * Failure: Never fails + * + * Programmer: Elena Pourmal + * Thursday, August 17, 2006 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static void +print_object_statistics(const char *name) +{ + printf("Object name %s\n", name); +} + + +/*------------------------------------------------------------------------- + * Function: print_statistics + * + * Purpose: Prints statistics + * + * Return: Success: 0 + * + * Failure: Never fails + * + * Programmer: Elena Pourmal + * Thursday, August 17, 2006 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static void +print_statistics(const char *name, const iter_t *iter) +{ + if(display_object) + print_object_statistics(name); + else + print_file_statistics(iter); +} + + +int +main(int argc, const char *argv[]) +{ + iter_t iter; + const char *fname = NULL; + hid_t fid; + struct handler_t *hand; + char root[] = "/"; + int i; + H5F_info_t finfo; + + + /* Disable error reporting */ + H5Eset_auto2(H5E_DEFAULT, NULL, NULL); + + /* Initialize h5tools lib */ + h5tools_init(); + hand = parse_command_line (argc, argv); + if (!hand) { + error_msg(progname, "unable to parse command line arguments \n"); + leave(EXIT_FAILURE); + } + + fname = argv[opt_ind]; + hand[opt_ind].obj = root; + hand[opt_ind].flag = 1; + if (display_object) hand[opt_ind].flag = 0; + + printf("Filename: %s\n", fname); + + fid = H5Fopen(fname, H5F_ACC_RDONLY, H5P_DEFAULT); + if (fid < 0) { + error_msg(progname, "unable to open file \"%s\"\n", fname); + leave(EXIT_FAILURE); + } + + /* Initialize iter structure */ + iter_init(&iter); + + /* Get storge info for SOHM's btree/list/heap and superblock extension */ + if(H5Fget_info(fid, &finfo) < 0) + warn_msg(progname, "Unable to retrieve SOHM info\n"); + else { + iter.super_ext_size = finfo.super_ext_size; + iter.SM_hdr_storage_size = finfo.sohm.hdr_size; + iter.SM_index_storage_size = finfo.sohm.msgs_info.index_size; + iter.SM_heap_storage_size = finfo.sohm.msgs_info.heap_size; + } + + /* Walk the objects or all file */ + for(i = 0; i < argc; i++) { + if(hand[i].obj) { + if(hand[i].flag) { + walk(fid, hand[i].obj, &iter); + print_statistics(hand[i].obj, &iter); + } + } + } + + free(hand); + + if(H5Fclose(fid) < 0) { + error_msg(progname, "unable to close file \"%s\"\n", fname); + leave(EXIT_FAILURE); + } + + leave(EXIT_SUCCESS); +} + diff --git a/tools/h5stat/h5stat_gentest.c b/tools/h5stat/h5stat_gentest.c new file mode 100644 index 0000000..f0219bd --- /dev/null +++ b/tools/h5stat/h5stat_gentest.c @@ -0,0 +1,84 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright by The HDF Group. * + * Copyright by the Board of Trustees of the University of Illinois. * + * All rights reserved. * + * * + * This file is part of HDF5. The full HDF5 copyright notice, including * + * terms governing use, modification, and redistribution, is contained in * + * the files COPYING and Copyright.html. COPYING can be found at the root * + * of the source code distribution tree; Copyright.html can be found at the * + * root level of an installed copy of the electronic HDF5 document set and * + * is linked from the top-level documents page. It can also be found at * + * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * + * access to either file, you may request a copy from help@hdfgroup.org. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* + * Generate the binary hdf5 files for the h5stat tests. + * Usage: just execute the program without any arguments will + * generate all the binary hdf5 files in the ./testfiles directory. + * + * If you regenerate the test files (e.g., changing some code, + * trying it on a new platform, ...), you need to verify the correctness + * of the expected output and update the corresponding *.ddl files. + */ + +#include "hdf5.h" + +#define FILE "h5stat_newgrat.h5" +#define DATASET_NAME "DATASET_NAME" +#define GROUP_NAME "GROUP" +#define ATTR_NAME "ATTR" +#define NUM_GRPS 350 +#define NUM_ATTRS 100 + +/* + * Generate 1.8 HDF5 file + * with NUM_GRPS groups + * with NUM_ATTRS for the + */ +static void gen_file(void) +{ + int ret, i; + hid_t fapl, gid; + hid_t file, type_id, space_id, attr_id, dset_id; + char name[30]; + char attrname[30]; + + + fapl = H5Pcreate(H5P_FILE_ACCESS); + ret = H5Pset_latest_format(fapl,1); + + /* Create dataset */ + file=H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); + for (i=1; i<=NUM_GRPS; i++) { + sprintf(name, "%s%d", GROUP_NAME,i); + gid = H5Gcreate(file, name, (size_t)0); + H5Gclose(gid); + } + + + /* Create a datatype to commit and use */ + type_id=H5Tcopy(H5T_NATIVE_INT); + /* Create dataspace for dataset */ + space_id=H5Screate(H5S_SCALAR); + /* Create dataset */ + dset_id=H5Dcreate(file, DATASET_NAME,type_id,space_id,H5P_DEFAULT); + for (i=1; i<=NUM_ATTRS; i++) { + sprintf(attrname, "%s%d", ATTR_NAME,i); + attr_id=H5Acreate(dset_id,attrname, type_id,space_id,H5P_DEFAULT); + ret=H5Aclose(attr_id); + } + + ret=H5Dclose(dset_id); + ret=H5Sclose(space_id); + ret=H5Tclose(type_id); + ret=H5Fclose(file); +} + +int main(void) +{ + gen_file(); + + return 0; +} diff --git a/tools/h5stat/testfiles/h5stat_filters-F.ddl b/tools/h5stat/testfiles/h5stat_filters-F.ddl new file mode 100644 index 0000000..544d0c7 --- /dev/null +++ b/tools/h5stat/testfiles/h5stat_filters-F.ddl @@ -0,0 +1,21 @@ +############################# +Expected output for 'h5stat -F h5stat_filters.h5' +############################# +Filename: h5stat_filters.h5 +Object header size: (total/unused) + Groups: 48/8 + Datasets: 4936/1344 +Storage information: + Groups: + B-tree/List: 1200 + Heap: 288 + Attributes: + B-tree/List: 0 + Heap: 0 + Chunked datasets: + B-tree: 31392 + Shared Messages: + Header: 0 + B-tree/List: 0 + Heap: 0 + Superblock extension: 0 diff --git a/tools/h5stat/testfiles/h5stat_filters-d.ddl b/tools/h5stat/testfiles/h5stat_filters-d.ddl new file mode 100644 index 0000000..e83c6c4 --- /dev/null +++ b/tools/h5stat/testfiles/h5stat_filters-d.ddl @@ -0,0 +1,33 @@ +############################# +Expected output for 'h5stat -d h5stat_filters.h5' +############################# +Filename: h5stat_filters.h5 +Dataset dimension information: + Max. rank of datasets: 2 + Dataset ranks: + # of dataset with rank 1: 1 + # of dataset with rank 2: 14 +1-D Dataset information: + Max. dimension size of 1-D datasets: 100 + Small 1-D datasets: + Total small datasets: 0 + 1-D Dataset dimension bins: + # of datasets of size 100 - 999: 1 + Total # of datasets: 1 +Dataset storage information: + Total raw data size: 8659 +Dataset layout information: + Dataset layout counts[COMPACT]: 1 + Dataset layout counts[CONTIG]: 2 + Dataset layout counts[CHUNKED]: 12 + Number of external files : 2 +Dataset filters information: + Number of datasets with: + NO filter: 7 + GZIP filter: 2 + SHUFFLE filter: 2 + FLETCHER32 filter: 2 + SZIP filter: 2 + NBIT filter: 2 + SCALEOFFSET filter: 1 + USER-DEFINED filter: 1 diff --git a/tools/h5stat/testfiles/h5stat_filters-dT.ddl b/tools/h5stat/testfiles/h5stat_filters-dT.ddl new file mode 100644 index 0000000..62735f0 --- /dev/null +++ b/tools/h5stat/testfiles/h5stat_filters-dT.ddl @@ -0,0 +1,42 @@ +############################# +Expected output for 'h5stat -dT h5stat_filters.h5' +############################# +Filename: h5stat_filters.h5 +Dataset dimension information: + Max. rank of datasets: 2 + Dataset ranks: + # of dataset with rank 1: 1 + # of dataset with rank 2: 14 +1-D Dataset information: + Max. dimension size of 1-D datasets: 100 + Small 1-D datasets: + Total small datasets: 0 + 1-D Dataset dimension bins: + # of datasets of size 100 - 999: 1 + Total # of datasets: 1 +Dataset storage information: + Total raw data size: 8659 +Dataset layout information: + Dataset layout counts[COMPACT]: 1 + Dataset layout counts[CONTIG]: 2 + Dataset layout counts[CHUNKED]: 12 + Number of external files : 2 +Dataset filters information: + Number of datasets with: + NO filter: 7 + GZIP filter: 2 + SHUFFLE filter: 2 + FLETCHER32 filter: 2 + SZIP filter: 2 + NBIT filter: 2 + SCALEOFFSET filter: 1 + USER-DEFINED filter: 1 +Dataset datatype information: + # of unique datatypes used by datasets: 2 + Dataset datatype #0: + Count (total/named) = (14/0) + Size (desc./elmt) = (14/4) + Dataset datatype #1: + Count (total/named) = (1/0) + Size (desc./elmt) = (14/4) + Total dataset datatype count: 15 diff --git a/tools/h5stat/testfiles/h5stat_filters-file.ddl b/tools/h5stat/testfiles/h5stat_filters-file.ddl new file mode 100644 index 0000000..c6aeef0 --- /dev/null +++ b/tools/h5stat/testfiles/h5stat_filters-file.ddl @@ -0,0 +1,13 @@ +############################# +Expected output for 'h5stat -f h5stat_filters.h5' +############################# +Filename: h5stat_filters.h5 +File information + # of unique groups: 1 + # of unique datasets: 15 + # of unique named dataypes: 1 + # of unique links: 0 + # of unique other: 0 + Max. # of links to object: 1 + Max. depth of hierarchy: 0 + Max. # of objects in group: 16 diff --git a/tools/h5stat/testfiles/h5stat_filters-g.ddl b/tools/h5stat/testfiles/h5stat_filters-g.ddl new file mode 100644 index 0000000..d488b8f --- /dev/null +++ b/tools/h5stat/testfiles/h5stat_filters-g.ddl @@ -0,0 +1,9 @@ +############################# +Expected output for 'h5stat -g h5stat_filters.h5' +############################# +Filename: h5stat_filters.h5 +Small groups: + Total # of small groups: 0 +Group bins: + # of groups of size 10 - 99: 1 + Total # of groups: 1 diff --git a/tools/h5stat/testfiles/h5stat_filters.ddl b/tools/h5stat/testfiles/h5stat_filters.ddl new file mode 100644 index 0000000..4dd6aee --- /dev/null +++ b/tools/h5stat/testfiles/h5stat_filters.ddl @@ -0,0 +1,78 @@ +############################# +Expected output for 'h5stat h5stat_filters.h5' +############################# +Filename: h5stat_filters.h5 +File information + # of unique groups: 1 + # of unique datasets: 15 + # of unique named dataypes: 1 + # of unique links: 0 + # of unique other: 0 + Max. # of links to object: 1 + Max. depth of hierarchy: 0 + Max. # of objects in group: 16 +Object header size: (total/unused) + Groups: 48/8 + Datasets: 4936/1344 +Storage information: + Groups: + B-tree/List: 1200 + Heap: 288 + Attributes: + B-tree/List: 0 + Heap: 0 + Chunked datasets: + B-tree: 31392 + Shared Messages: + Header: 0 + B-tree/List: 0 + Heap: 0 + Superblock extension: 0 +Small groups: + Total # of small groups: 0 +Group bins: + # of groups of size 10 - 99: 1 + Total # of groups: 1 +Dataset dimension information: + Max. rank of datasets: 2 + Dataset ranks: + # of dataset with rank 1: 1 + # of dataset with rank 2: 14 +1-D Dataset information: + Max. dimension size of 1-D datasets: 100 + Small 1-D datasets: + Total small datasets: 0 + 1-D Dataset dimension bins: + # of datasets of size 100 - 999: 1 + Total # of datasets: 1 +Dataset storage information: + Total raw data size: 8659 +Dataset layout information: + Dataset layout counts[COMPACT]: 1 + Dataset layout counts[CONTIG]: 2 + Dataset layout counts[CHUNKED]: 12 + Number of external files : 2 +Dataset filters information: + Number of datasets with: + NO filter: 7 + GZIP filter: 2 + SHUFFLE filter: 2 + FLETCHER32 filter: 2 + SZIP filter: 2 + NBIT filter: 2 + SCALEOFFSET filter: 1 + USER-DEFINED filter: 1 +Dataset datatype information: + # of unique datatypes used by datasets: 2 + Dataset datatype #0: + Count (total/named) = (14/0) + Size (desc./elmt) = (14/4) + Dataset datatype #1: + Count (total/named) = (1/0) + Size (desc./elmt) = (14/4) + Total dataset datatype count: 15 +Small # of attributes: + Total # of objects with small # of attributes: 0 +Attribute bins: + Total # of objects with attributes: 0 + Max. # of attributes to objects: 0 diff --git a/tools/h5stat/testfiles/h5stat_filters.h5 b/tools/h5stat/testfiles/h5stat_filters.h5 new file mode 100644 index 0000000..5b5f4bb Binary files /dev/null and b/tools/h5stat/testfiles/h5stat_filters.h5 differ diff --git a/tools/h5stat/testfiles/h5stat_help1.ddl b/tools/h5stat/testfiles/h5stat_help1.ddl new file mode 100644 index 0000000..0841572 --- /dev/null +++ b/tools/h5stat/testfiles/h5stat_help1.ddl @@ -0,0 +1,24 @@ +############################# +Expected output for 'h5stat -h' +############################# + +This tool is under development. For detailed information +please see the specification document at +http://hdf.ncsa.uiuc.edu/RFC/h5stat/h5stat-spec.pdf + +Please send your comments and questions to help@hdfgroup.org + +Usage: h5stat [OPTIONS] file + + OPTIONS + -h, --help Print a usage message and exit + -V, --version Print version number and exit + -f, --file Print file information + -F, --filemetadata Print file metadata + -g, --group Print group information + -G, --groupmetadata Print group metadata + -d, --dset Print dataset information + -D, --dsetmetadata Print dataset metadata + -T, --dtypemetadata Print datatype metadata + -A, --attribute Print attribute information + diff --git a/tools/h5stat/testfiles/h5stat_help2.ddl b/tools/h5stat/testfiles/h5stat_help2.ddl new file mode 100644 index 0000000..1e6295b --- /dev/null +++ b/tools/h5stat/testfiles/h5stat_help2.ddl @@ -0,0 +1,24 @@ +############################# +Expected output for 'h5stat --help' +############################# + +This tool is under development. For detailed information +please see the specification document at +http://hdf.ncsa.uiuc.edu/RFC/h5stat/h5stat-spec.pdf + +Please send your comments and questions to help@hdfgroup.org + +Usage: h5stat [OPTIONS] file + + OPTIONS + -h, --help Print a usage message and exit + -V, --version Print version number and exit + -f, --file Print file information + -F, --filemetadata Print file metadata + -g, --group Print group information + -G, --groupmetadata Print group metadata + -d, --dset Print dataset information + -D, --dsetmetadata Print dataset metadata + -T, --dtypemetadata Print datatype metadata + -A, --attribute Print attribute information + diff --git a/tools/h5stat/testfiles/h5stat_newgrat.ddl b/tools/h5stat/testfiles/h5stat_newgrat.ddl new file mode 100644 index 0000000..228d565 --- /dev/null +++ b/tools/h5stat/testfiles/h5stat_newgrat.ddl @@ -0,0 +1,74 @@ +############################# +Expected output for 'h5stat h5stat_newgrat.h5' +############################# +Filename: h5stat_newgrat.h5 +File information + # of unique groups: 351 + # of unique datasets: 1 + # of unique named dataypes: 0 + # of unique links: 0 + # of unique other: 0 + Max. # of links to object: 1 + Max. depth of hierarchy: 1 + Max. # of objects in group: 351 +Object header size: (total/unused) + Groups: 51597/32292 + Datasets: 414/312 +Storage information: + Groups: + B-tree/List: 5158 + Heap: 7643 + Attributes: + B-tree/List: 2598 + Heap: 4442 + Chunked datasets: + B-tree: 0 + Shared Messages: + Header: 0 + B-tree/List: 0 + Heap: 0 + Superblock extension: 0 +Small groups: + # of groups of size 0: 350 + Total # of small groups: 350 +Group bins: + # of groups of size 0: 350 + # of groups of size 100 - 999: 1 + Total # of groups: 351 +Dataset dimension information: + Max. rank of datasets: 0 + Dataset ranks: + # of dataset with rank 0: 1 +1-D Dataset information: + Max. dimension size of 1-D datasets: 0 + Small 1-D datasets: + Total small datasets: 0 +Dataset storage information: + Total raw data size: 0 +Dataset layout information: + Dataset layout counts[COMPACT]: 0 + Dataset layout counts[CONTIG]: 1 + Dataset layout counts[CHUNKED]: 0 + Number of external files : 0 +Dataset filters information: + Number of datasets with: + NO filter: 1 + GZIP filter: 0 + SHUFFLE filter: 0 + FLETCHER32 filter: 0 + SZIP filter: 0 + NBIT filter: 0 + SCALEOFFSET filter: 0 + USER-DEFINED filter: 0 +Dataset datatype information: + # of unique datatypes used by datasets: 1 + Dataset datatype #0: + Count (total/named) = (1/0) + Size (desc./elmt) = (14/4) + Total dataset datatype count: 1 +Small # of attributes: + Total # of objects with small # of attributes: 0 +Attribute bins: + # of objects with 100 - 999 attributes: 1 + Total # of objects with attributes: 1 + Max. # of attributes to objects: 100 diff --git a/tools/h5stat/testfiles/h5stat_newgrat.h5 b/tools/h5stat/testfiles/h5stat_newgrat.h5 new file mode 100644 index 0000000..cab98bb Binary files /dev/null and b/tools/h5stat/testfiles/h5stat_newgrat.h5 differ diff --git a/tools/h5stat/testfiles/h5stat_tsohm.ddl b/tools/h5stat/testfiles/h5stat_tsohm.ddl new file mode 100644 index 0000000..572965e --- /dev/null +++ b/tools/h5stat/testfiles/h5stat_tsohm.ddl @@ -0,0 +1,72 @@ +############################# +Expected output for 'h5stat h5stat_tsohm.h5' +############################# +Filename: h5stat_tsohm.h5 +File information + # of unique groups: 1 + # of unique datasets: 2 + # of unique named dataypes: 0 + # of unique links: 0 + # of unique other: 0 + Max. # of links to object: 1 + Max. depth of hierarchy: 0 + Max. # of objects in group: 2 +Object header size: (total/unused) + Groups: 51/2 + Datasets: 568/358 +Storage information: + Groups: + B-tree/List: 872 + Heap: 120 + Attributes: + B-tree/List: 0 + Heap: 0 + Chunked datasets: + B-tree: 0 + Shared Messages: + Header: 38 + B-tree/List: 550 + Heap: 1316 + Superblock extension: 40 +Small groups: + # of groups of size 2: 1 + Total # of small groups: 1 +Group bins: + # of groups of size 1 - 9: 1 + Total # of groups: 1 +Dataset dimension information: + Max. rank of datasets: 2 + Dataset ranks: + # of dataset with rank 2: 2 +1-D Dataset information: + Max. dimension size of 1-D datasets: 0 + Small 1-D datasets: + Total small datasets: 0 +Dataset storage information: + Total raw data size: 0 +Dataset layout information: + Dataset layout counts[COMPACT]: 0 + Dataset layout counts[CONTIG]: 0 + Dataset layout counts[CHUNKED]: 2 + Number of external files : 0 +Dataset filters information: + Number of datasets with: + NO filter: 2 + GZIP filter: 0 + SHUFFLE filter: 0 + FLETCHER32 filter: 0 + SZIP filter: 0 + NBIT filter: 0 + SCALEOFFSET filter: 0 + USER-DEFINED filter: 0 +Dataset datatype information: + # of unique datatypes used by datasets: 1 + Dataset datatype #0: + Count (total/named) = (2/0) + Size (desc./elmt) = (14/4) + Total dataset datatype count: 2 +Small # of attributes: + Total # of objects with small # of attributes: 0 +Attribute bins: + Total # of objects with attributes: 0 + Max. # of attributes to objects: 0 diff --git a/tools/h5stat/testfiles/h5stat_tsohm.h5 b/tools/h5stat/testfiles/h5stat_tsohm.h5 new file mode 100644 index 0000000..45ee36c Binary files /dev/null and b/tools/h5stat/testfiles/h5stat_tsohm.h5 differ diff --git a/tools/h5stat/testh5stat.sh.in b/tools/h5stat/testh5stat.sh.in new file mode 100644 index 0000000..66d05be --- /dev/null +++ b/tools/h5stat/testh5stat.sh.in @@ -0,0 +1,135 @@ +#! /bin/sh +# +# Copyright by The HDF Group. +# Copyright by the Board of Trustees of the University of Illinois. +# All rights reserved. +# +# This file is part of HDF5. The full HDF5 copyright notice, including +# terms governing use, modification, and redistribution, is contained in +# the files COPYING and Copyright.html. COPYING can be found at the root +# of the source code distribution tree; Copyright.html can be found at the +# root level of an installed copy of the electronic HDF5 document set and +# is linked from the top-level documents page. It can also be found at +# http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have +# access to either file, you may request a copy from help@hdfgroup.org. +# +# Tests for the h5dump tool + +# Determine which filters are available +USE_FILTER_SZIP="@USE_FILTER_SZIP@" +USE_FILTER_DEFLATE="@USE_FILTER_DEFLATE@" +USE_FILTER_SHUFFLE="@USE_FILTER_SHUFFLE@" +USE_FILTER_FLETCHER32="@USE_FILTER_FLETCHER32@" +USE_FILTER_NBIT="@USE_FILTER_NBIT@" +USE_FILTER_SCALEOFFSET="@USE_FILTER_SCALEOFFSET@" + +STAT=h5stat # The tool name +STAT_BIN=`pwd`/$STAT # The path of the tool binary + +CMP='cmp -s' +DIFF='diff -c' + +nerrors=0 +verbose=yes + +# The build (current) directory might be different than the source directory. +if test -z "$srcdir"; then + srcdir=. +fi + +test -d ./testfiles || mkdir ./testfiles + +# Print a line-line message left justified in a field of 70 characters +# beginning with the word "Testing". +# +TESTING() { + SPACES=" " + echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012' +} + +# Run a test and print PASS or *FAIL*. If a test fails then increment +# the `nerrors' global variable and (if $verbose is set) display the +# difference between the actual output and the expected output. The +# expected output is given as the first argument to this function and +# the actual output file is calculated by replacing the `.ddl' with +# `.out'. The actual output is not removed if $HDF5_NOCLEANUP has a +# non-zero value. +# +TOOLTEST() { + expect="$srcdir/testfiles/$1" + actual="./testfiles/`basename $1 .ddl`.out" + actual_err="./testfiles/`basename $1 .ddl`.err" + shift + + # Run test. + TESTING $STAT $@ + ( + echo "#############################" + echo "Expected output for '$STAT $@'" + echo "#############################" + cd $srcdir/testfiles + $RUNSERIAL $STAT_BIN $@ + ) >$actual 2>$actual_err + cat $actual_err >> $actual + + + if [ ! -f $expect ]; then + # Create the expect file if it doesn't yet exist. + echo " CREATED" + cp $actual $expect + elif $CMP $expect $actual; then + echo " PASSED" + else + echo "*FAILED*" + echo " Expected result (*.ddl) differs from actual result (*.out)" + nerrors="`expr $nerrors + 1`" + test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/ /' + fi + + # Clean up output file + if test -z "$HDF5_NOCLEANUP"; then + rm -f $actual $actual_err + fi +} + + +# Print a "SKIP" message +SKIP() { + TESTING $STAT $@ + echo " -SKIP-" +} + + + +############################################################################## +############################################################################## +### T H E T E S T S ### +############################################################################## +############################################################################## + +# Test for help flag +TOOLTEST h5stat_help1.ddl -h +TOOLTEST h5stat_help2.ddl --help + +# Test file with groups, compressed datasets, user-applied fileters, etc. +# h5stat_filters.h5 is a copy of ../../testfiles/tfilters.h5 as of release 1.8.0-alpha4 +TOOLTEST h5stat_filters.ddl h5stat_filters.h5 +TOOLTEST h5stat_filters-file.ddl -f h5stat_filters.h5 +TOOLTEST h5stat_filters-F.ddl -F h5stat_filters.h5 +TOOLTEST h5stat_filters-d.ddl -d h5stat_filters.h5 +TOOLTEST h5stat_filters-g.ddl -g h5stat_filters.h5 +TOOLTEST h5stat_filters-dT.ddl -dT h5stat_filters.h5 +# h5stat_tsohm.h5 is a copy of ../../../test/tsohm.h5 generated by tsohm.c +# as of release 1.8.0-alpha4 +TOOLTEST h5stat_tsohm.ddl h5stat_tsohm.h5 +# h5stat_newgrat.h5 is generated by h5stat_gentest.c +TOOLTEST h5stat_newgrat.ddl h5stat_newgrat.h5 +echo + + +if test $nerrors -eq 0 ; then + echo "All $STAT tests passed." +fi + +exit $nerrors + diff --git a/tools/misc/Makefile.am b/tools/misc/Makefile.am index fc097cd..46dd8b7 100644 --- a/tools/misc/Makefile.am +++ b/tools/misc/Makefile.am @@ -24,15 +24,15 @@ include $(top_srcdir)/config/commence.am INCLUDES=-I$(top_srcdir)/src -I$(top_srcdir)/tools/lib #test script and program -TEST_PROG=h5repart_gentest h5stat_gentest -TEST_SCRIPT=testh5repart.sh testh5stat.sh $(srcdir)/testh5mkgrp.sh +TEST_PROG=h5repart_gentest +TEST_SCRIPT=testh5repart.sh $(srcdir)/testh5mkgrp.sh check_PROGRAMS=$(TEST_PROG) repart_test check_SCRIPTS=$(TEST_SCRIPT) -SCRIPT_DEPEND=h5repart$(EXEEXT) h5stat$(EXEEXT) h5mkgrp$(EXEEXT) +SCRIPT_DEPEND=h5repart$(EXEEXT) h5mkgrp$(EXEEXT) # These are our main targets, the tools -bin_PROGRAMS=h5debug h5repart h5stat h5mkgrp +bin_PROGRAMS=h5debug h5repart h5mkgrp bin_SCRIPTS=h5redeploy # Tell automake to clean h5redeploy script @@ -44,7 +44,7 @@ CLEANFILES=h5redeploy CHECK_CLEANFILES+=*.h5 ../testfiles/fst_family*.h5 ../testfiles/scd_family*.h5 # These were generated by configure. Remove them only when distclean. -DISTCLEANFILES=h5cc testh5repart.sh testh5stat.sh +DISTCLEANFILES=h5cc testh5repart.sh # All programs rely on hdf5 library and h5tools library LDADD=$(LIBH5TOOLS) $(LIBHDF5) diff --git a/tools/misc/Makefile.in b/tools/misc/Makefile.in index c8022c7..44d54c0 100644 --- a/tools/misc/Makefile.in +++ b/tools/misc/Makefile.in @@ -52,11 +52,10 @@ build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/h5cc.in $(srcdir)/testh5repart.sh.in \ - $(srcdir)/testh5stat.sh.in $(top_srcdir)/config/commence.am \ + $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am check_PROGRAMS = $(am__EXEEXT_1) repart_test$(EXEEXT) -bin_PROGRAMS = h5debug$(EXEEXT) h5repart$(EXEEXT) h5stat$(EXEEXT) \ - h5mkgrp$(EXEEXT) +bin_PROGRAMS = h5debug$(EXEEXT) h5repart$(EXEEXT) h5mkgrp$(EXEEXT) TESTS = $(check_PROGRAMS) $(check_SCRIPTS) subdir = tools/misc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -65,10 +64,10 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/bin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/H5config.h -CONFIG_CLEAN_FILES = h5cc testh5repart.sh testh5stat.sh +CONFIG_CLEAN_FILES = h5cc testh5repart.sh am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) -am__EXEEXT_1 = h5repart_gentest$(EXEEXT) h5stat_gentest$(EXEEXT) +am__EXEEXT_1 = h5repart_gentest$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) h5debug_SOURCES = h5debug.c h5debug_OBJECTS = h5debug.$(OBJEXT) @@ -86,14 +85,6 @@ h5repart_gentest_SOURCES = h5repart_gentest.c h5repart_gentest_OBJECTS = h5repart_gentest.$(OBJEXT) h5repart_gentest_LDADD = $(LDADD) h5repart_gentest_DEPENDENCIES = $(LIBH5TOOLS) $(LIBHDF5) -h5stat_SOURCES = h5stat.c -h5stat_OBJECTS = h5stat.$(OBJEXT) -h5stat_LDADD = $(LDADD) -h5stat_DEPENDENCIES = $(LIBH5TOOLS) $(LIBHDF5) -h5stat_gentest_SOURCES = h5stat_gentest.c -h5stat_gentest_OBJECTS = h5stat_gentest.$(OBJEXT) -h5stat_gentest_LDADD = $(LDADD) -h5stat_gentest_DEPENDENCIES = $(LIBH5TOOLS) $(LIBHDF5) repart_test_SOURCES = repart_test.c repart_test_OBJECTS = repart_test.$(OBJEXT) repart_test_LDADD = $(LDADD) @@ -112,10 +103,10 @@ CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ -SOURCES = h5debug.c h5mkgrp.c h5repart.c h5repart_gentest.c h5stat.c \ - h5stat_gentest.c repart_test.c +SOURCES = h5debug.c h5mkgrp.c h5repart.c h5repart_gentest.c \ + repart_test.c DIST_SOURCES = h5debug.c h5mkgrp.c h5repart.c h5repart_gentest.c \ - h5stat.c h5stat_gentest.c repart_test.c + repart_test.c ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -356,17 +347,17 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.h5 \ INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/tools/lib #test script and program -TEST_PROG = h5repart_gentest h5stat_gentest -TEST_SCRIPT = testh5repart.sh testh5stat.sh $(srcdir)/testh5mkgrp.sh +TEST_PROG = h5repart_gentest +TEST_SCRIPT = testh5repart.sh $(srcdir)/testh5mkgrp.sh check_SCRIPTS = $(TEST_SCRIPT) -SCRIPT_DEPEND = h5repart$(EXEEXT) h5stat$(EXEEXT) h5mkgrp$(EXEEXT) +SCRIPT_DEPEND = h5repart$(EXEEXT) h5mkgrp$(EXEEXT) bin_SCRIPTS = h5redeploy # Tell automake to clean h5redeploy script CLEANFILES = h5redeploy # These were generated by configure. Remove them only when distclean. -DISTCLEANFILES = h5cc testh5repart.sh testh5stat.sh +DISTCLEANFILES = h5cc testh5repart.sh # All programs rely on hdf5 library and h5tools library LDADD = $(LIBH5TOOLS) $(LIBHDF5) @@ -428,8 +419,6 @@ h5cc: $(top_builddir)/config.status $(srcdir)/h5cc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ testh5repart.sh: $(top_builddir)/config.status $(srcdir)/testh5repart.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -testh5stat.sh: $(top_builddir)/config.status $(srcdir)/testh5stat.sh.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @@ -477,12 +466,6 @@ h5repart$(EXEEXT): $(h5repart_OBJECTS) $(h5repart_DEPENDENCIES) h5repart_gentest$(EXEEXT): $(h5repart_gentest_OBJECTS) $(h5repart_gentest_DEPENDENCIES) @rm -f h5repart_gentest$(EXEEXT) $(LINK) $(h5repart_gentest_OBJECTS) $(h5repart_gentest_LDADD) $(LIBS) -h5stat$(EXEEXT): $(h5stat_OBJECTS) $(h5stat_DEPENDENCIES) - @rm -f h5stat$(EXEEXT) - $(LINK) $(h5stat_OBJECTS) $(h5stat_LDADD) $(LIBS) -h5stat_gentest$(EXEEXT): $(h5stat_gentest_OBJECTS) $(h5stat_gentest_DEPENDENCIES) - @rm -f h5stat_gentest$(EXEEXT) - $(LINK) $(h5stat_gentest_OBJECTS) $(h5stat_gentest_LDADD) $(LIBS) repart_test$(EXEEXT): $(repart_test_OBJECTS) $(repart_test_DEPENDENCIES) @rm -f repart_test$(EXEEXT) $(LINK) $(repart_test_OBJECTS) $(repart_test_LDADD) $(LIBS) @@ -516,8 +499,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5mkgrp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5repart.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5repart_gentest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5stat.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h5stat_gentest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/repart_test.Po@am__quote@ .c.o: diff --git a/tools/misc/h5stat.c b/tools/misc/h5stat.c deleted file mode 100644 index 8f29519..0000000 --- a/tools/misc/h5stat.c +++ /dev/null @@ -1,1377 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * Copyright by the Board of Trustees of the University of Illinois. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the files COPYING and Copyright.html. COPYING can be found at the root * - * of the source code distribution tree; Copyright.html can be found at the * - * root level of an installed copy of the electronic HDF5 document set and * - * is linked from the top-level documents page. It can also be found at * - * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * - * access to either file, you may request a copy from help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#include -#include -#include "H5private.h" /* Generic Functions */ -#include "h5tools.h" -#include "h5tools_utils.h" -#include "h5tools_ref.h" -#include "h5trav.h" -#include "hdf5.h" - -/* Parameters to control statistics gathered */ -#define SIZE_SMALL_GROUPS 10 -#define SIZE_SMALL_ATTRS 10 -#define SIZE_SMALL_DSETS 10 - -#define H5_NFILTERS_IMPL 8 /* Number of currently implemented filters + one to - accommodate for user-define filters + one - to accomodate datasets whithout any filters */ - - - -/* Datatype statistics for datasets */ -typedef struct dtype_info_t { - hid_t tid; /* ID of datatype */ - unsigned long count; /* Number of types found */ - unsigned long named; /* Number of types that are named */ -} dtype_info_t; - -typedef struct ohdr_info_t { - hsize_t total_size; /* Total size of object headers */ - hsize_t free_size; /* Total free space in object headers */ -} ohdr_info_t; - -/* Info to pass to the iteration functions */ -typedef struct iter_t { - const char *container; /* Full name of the container object */ - unsigned long curr_depth; /* Current depth of hierarchy */ - - unsigned long uniq_groups; /* Number of unique groups */ - unsigned long uniq_dsets; /* Number of unique datasets */ - unsigned long uniq_types; /* Number of unique named datatypes */ - unsigned long uniq_links; /* Number of unique links */ - unsigned long uniq_others; /* Number of other unique objects */ - - unsigned long max_depth; /* Maximum depth of hierarchy */ - unsigned long max_links; /* Maximum # of links to an object */ - hsize_t max_fanout; /* Maximum fanout from a group */ - unsigned long num_small_groups[SIZE_SMALL_GROUPS]; /* Size of small groups tracked */ - unsigned group_nbins; /* Number of bins for group counts */ - unsigned long *group_bins; /* Pointer to array of bins for group counts */ - ohdr_info_t group_ohdr_info; /* Object header information for groups */ - - hsize_t max_attrs; /* Maximum attributes from a group */ - unsigned long num_small_attrs[SIZE_SMALL_ATTRS]; /* Size of small attributes tracked */ - unsigned attr_nbins; - unsigned long *attr_bins; - - unsigned long max_dset_rank; /* Maximum rank of dataset */ - unsigned long dset_rank_count[H5S_MAX_RANK]; /* Number of datasets of each rank */ - hsize_t max_dset_dims; /* Maximum dimension size of dataset */ - unsigned long small_dset_dims[SIZE_SMALL_DSETS]; /* Size of dimensions of small datasets tracked */ - unsigned long dset_layouts[H5D_NLAYOUTS]; /* Type of storage for each dataset */ - unsigned long dset_comptype[H5_NFILTERS_IMPL]; /* Number of currently implemented filters */ - unsigned long dset_ntypes; /* Number of diff. dataset datatypes found */ - dtype_info_t *dset_type_info; /* Pointer to dataset datatype information found */ - unsigned dset_dim_nbins; /* Number of bins for dataset dimensions */ - unsigned long *dset_dim_bins; /* Pointer to array of bins for dataset dimensions */ - ohdr_info_t dset_ohdr_info; /* Object header information for datasets */ - hsize_t dset_storage_size; /* Size of raw data for datasets */ - hsize_t groups_btree_storage_size; /* btree size for group */ - hsize_t groups_heap_storage_size; /* heap size for group */ - hsize_t attrs_btree_storage_size; /* btree size for attributes (1.8) */ - hsize_t attrs_heap_storage_size; /* fractal heap size for attributes (1.8) */ - hsize_t SM_hdr_storage_size; /* header size for SOHM table (1.8) */ - hsize_t SM_index_storage_size; /* index (btree & list) size for SOHM table (1.8) */ - hsize_t SM_heap_storage_size; /* fractal heap size for SOHM table (1.8) */ - hsize_t super_ext_size; /* superblock extension size */ - hsize_t datasets_btree_storage_size; /* btree size for chunked dataset */ - unsigned long nexternal; /* Number of external files for a dataset */ - int local; /* Flag to indicate iteration over the object*/ -} iter_t; - - -/* Table containing object id and object name */ -static struct { - int nalloc; /* number of slots allocated */ - int nobjs; /* number of objects */ - struct { - haddr_t id; /* object number */ - char *name; /* full object name */ - } *obj; -} idtab_g; - -const char *progname = "h5stat"; -int d_status = EXIT_SUCCESS; -static int display_all = TRUE; -static int display_file_metadata = FALSE; -static int display_file = FALSE; -static int display_group_metadata = FALSE; -static int display_group = FALSE; -static int display_dset_metadata = FALSE; -static int display_dset = FALSE; -static int display_dtype_metadata = FALSE; -/* Not used yet 11/17/06 EIP -static int display_dtype = FALSE; -*/ -static int display_object = FALSE; -static int display_attr = FALSE; - -/* a structure for handling the order command-line parameters come in */ -struct handler_t { - void (*func)(void *); - int flag; - char *obj; -}; - - -static const char *s_opts ="AFfhGgDdTO:V"; -static struct long_options l_opts[] = { - {"help", no_arg, 'h'}, - {"hel", no_arg, 'h'}, - {"file", no_arg, 'f'}, - {"fil", no_arg, 'f'}, - {"fi", no_arg, 'f'}, - {"FILEmetadata", no_arg, 'F'}, - {"FILEmetadat", no_arg, 'F'}, - {"FILEmetada", no_arg, 'F'}, - {"FILEmetad", no_arg, 'F'}, - {"FILEmeta", no_arg, 'F'}, - {"FILEmet", no_arg, 'F'}, - {"FILEme", no_arg, 'F'}, - {"FILEm", no_arg, 'F'}, - {"group", no_arg, 'g'}, - {"grou", no_arg, 'g'}, - {"gro", no_arg, 'g'}, - {"gr", no_arg, 'g'}, - {"groupmetadata", no_arg, 'G'}, - {"groupmetadat", no_arg, 'G'}, - {"groupmetada", no_arg, 'G'}, - {"groupmetad", no_arg, 'G'}, - {"groupmeta", no_arg, 'G'}, - {"groupmet", no_arg, 'G'}, - {"groupme", no_arg, 'G'}, - {"groupm", no_arg, 'G'}, - {"dset", no_arg, 'd'}, - {"dse", no_arg, 'd'}, - {"ds", no_arg, 'd'}, - {"d", no_arg, 'd'}, - {"dsetmetadata", no_arg, 'D'}, - {"dsetmetadat", no_arg, 'D'}, - {"dsetmetada", no_arg, 'D'}, - {"dsetmetad", no_arg, 'D'}, - {"dsetmeta", no_arg, 'D'}, - {"dsetmet", no_arg, 'D'}, - {"dsetme", no_arg, 'D'}, - {"dsetm", no_arg, 'D'}, - {"dtypemetadata", no_arg, 'T'}, - {"dtypemetadat", no_arg, 'T'}, - {"dtypemetada", no_arg, 'T'}, - {"dtypemetad", no_arg, 'T'}, - {"dtypemeta", no_arg, 'T'}, - {"dtypemet", no_arg, 'T'}, - {"dtypeme", no_arg, 'T'}, - {"dtypem", no_arg, 'T'}, - {"dtype", no_arg, 'T'}, - { "object", require_arg, 'O' }, - { "objec", require_arg, 'O' }, - { "obje", require_arg, 'O' }, - { "obj", require_arg, 'O' }, - { "ob", require_arg, 'O' }, - { "version", no_arg, 'V' }, - { "versio", no_arg, 'V' }, - { "versi", no_arg, 'V' }, - { "vers", no_arg, 'V' }, - { "ver", no_arg, 'V' }, - { "ve", no_arg, 'V' }, - { "attribute", no_arg, 'A' }, - { "attribut", no_arg, 'A' }, - { "attribu", no_arg, 'A' }, - { "attrib", no_arg, 'A' }, - { "attri", no_arg, 'A' }, - { "attr", no_arg, 'A' }, - { "att", no_arg, 'A' }, - { "at", no_arg, 'A' }, - { "a", no_arg, 'A' }, - { NULL, 0, '\0' } -}; - -static void -leave(int ret) -{ - h5tools_close(); - exit(ret); -} - - -static void usage(const char *prog) -{ - fflush(stdout); - fprintf(stdout, "\n"); - fprintf(stdout, "This tool is under development. For detailed information\n"); - fprintf(stdout, "please see the specification document at\n"); - fprintf(stdout, "http://hdf.ncsa.uiuc.edu/RFC/h5stat/h5stat-spec.pdf\n"); - fprintf(stdout, "\n"); - fprintf(stdout, "Please send your comments and questions to help@hdfgroup.org\n"); - fprintf(stdout, "\n"); - fprintf(stdout, "Usage: %s [OPTIONS] file\n", prog); - fprintf(stdout, "\n"); - fprintf(stdout, " OPTIONS\n"); - fprintf(stdout, " -h, --help Print a usage message and exit\n"); - fprintf(stdout, " -V, --version Print version number and exit\n"); - fprintf(stdout, " -f, --file Print file information\n"); - fprintf(stdout, " -F, --filemetadata Print file metadata\n"); - fprintf(stdout, " -g, --group Print group information\n"); - fprintf(stdout, " -G, --groupmetadata Print group metadata\n"); - fprintf(stdout, " -d, --dset Print dataset information\n"); - fprintf(stdout, " -D, --dsetmetadata Print dataset metadata\n"); - fprintf(stdout, " -T, --dtypemetadata Print datatype metadata\n"); - fprintf(stdout, " -A, --attribute Print attribute information\n"); - fprintf(stdout, "\n"); -} - - -/*------------------------------------------------------------------------- - * Function: ceil_log10 - * - * Purpose: Compute the ceiling of log_10(x) - * - * Return: >0 on success, 0 on failure - * - * Programmer: Quincey Koziol - * Monday, August 22, 2005 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static unsigned -ceil_log10(unsigned long x) -{ - unsigned long pow10 = 1; - unsigned ret = 0; - - while(x >= pow10) { - pow10 *= 10; - ret++; - } /* end while */ - - return(ret); -} - - -/*------------------------------------------------------------------------- - * Function: sym_insert - * - * Purpose: Add a symbol to the table. - * - * Return: void - * - * Programmer: Robb Matzke - * Thursday, January 21, 1999 - * - *------------------------------------------------------------------------- - */ -static void -sym_insert(H5O_info_t *oi, const char *name) -{ - /* Don't add it if the link count is 1 because such an object can only - * have one name. */ - if(oi->rc > 1) { - int n; - - /* Extend the table */ - if(idtab_g.nobjs >= idtab_g.nalloc) { - idtab_g.nalloc = MAX(256, 2 * idtab_g.nalloc); - idtab_g.obj = realloc(idtab_g.obj, idtab_g.nalloc * sizeof(idtab_g.obj[0])); - } /* end if */ - - /* Insert the entry */ - n = idtab_g.nobjs++; - idtab_g.obj[n].id = oi->addr; - idtab_g.obj[n].name = strdup(name); - } /* end if */ -} /* end sym_insert() */ - - -/*------------------------------------------------------------------------- - * Function: sym_lookup - * - * Purpose: Find another name for the specified object. - * - * Return: Success: Ptr to another name. - * - * Failure: NULL - * - * Programmer: Robb Matzke - * Thursday, January 21, 1999 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static char * -sym_lookup(H5O_info_t *oi) -{ - int n; - - /*only one name possible*/ - if(oi->rc < 2) - return NULL; - - for(n = 0; n < idtab_g.nobjs; n++) - if(idtab_g.obj[n].id == oi->addr) - return idtab_g.obj[n].name; - - return NULL; -} /* end sym_lookup() */ - - -/*------------------------------------------------------------------------- - * Function: fix_name - * - * Purpose: Returns a malloc'd buffer that contains the PATH and BASE - * names separated by a single slash. It also removes duplicate - * and trailing slashes. - * - * Return: Success: Ptr to fixed name from malloc() - * - * Failure: NULL - * - * Programmer: Robb Matzke - * Thursday, January 21, 1999 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static char * -fix_name(const char *path, const char *base) -{ - size_t n = (path ? strlen(path) : 0) + (base ? strlen(base) : 0) + 3; - char *s = malloc(n), prev='\0'; - size_t len = 0; - - if (path) { - /* Path, followed by slash */ - for (/*void*/; *path; path++) - if ('/'!=*path || '/'!=prev) - prev = s[len++] = *path; - if ('/' != prev) - prev = s[len++] = '/'; - } - - if (base) { - /* Base name w/o trailing slashes */ - const char *end = base + strlen(base); - while (end > base && '/' == end[-1]) - --end; - - for (/*void*/; base < end; base++) - if ('/' != *base || '/' != prev) - prev = s[len++] = *base; - } - - s[len] = '\0'; - return s; -} - - -/*------------------------------------------------------------------------- - * Function: attribute_stats - * - * Purpose: Gather statistics about attributes on an object - * - * Return: Success: 0 - * - * Failure: -1 - * - * Programmer: Quincey Koziol - * Tuesday, July 17, 2007 - * - *------------------------------------------------------------------------- - */ -static herr_t -attribute_stats(iter_t *iter, const H5O_info_t *oi) -{ - unsigned bin; /* "bin" the number of objects falls in */ - - /* Update dataset & attribute metadata info */ - iter->attrs_btree_storage_size += oi->meta_size.attr.index_size; - iter->attrs_heap_storage_size += oi->meta_size.attr.heap_size; - - /* Update small # of attribute count & limits */ - if(oi->num_attrs < SIZE_SMALL_ATTRS) - (iter->num_small_attrs[(size_t)oi->num_attrs])++; - if(oi->num_attrs > iter->max_attrs) - iter->max_attrs = oi->num_attrs; - - /* Add attribute count to proper bin */ - bin = ceil_log10((unsigned long)oi->num_attrs); - if((bin + 1) > iter->attr_nbins) { - iter->attr_bins = realloc(iter->attr_bins, (bin + 1) * sizeof(unsigned long)); - assert(iter->attr_bins); - - /* Initialize counts for intermediate bins */ - while(iter->attr_nbins < bin) - iter->attr_bins[iter->attr_nbins++] = 0; - iter->attr_nbins++; - - /* Initialize count for new bin */ - iter->attr_bins[bin] = 1; - } /* end if */ - else - (iter->attr_bins[bin])++; - - return 0; -} /* end attribute_stats() */ - - -/*------------------------------------------------------------------------- - * Function: group_stats - * - * Purpose: Gather statistics about the group - * - * Return: Success: 0 - * - * Failure: -1 - * - * Programmer: Quincey Koziol - * Tuesday, August 16, 2005 - * - * Modifications: Refactored code from the walk_function - * EIP, Wednesday, August 16, 2006 - * - * Vailin Choi 12 July 2007 - * 1. Gathered storage info for btree and heap - * (groups and attributes) - * 2. Gathered info for attributes - * - * Vailin Choi 14 July 2007 - * Cast "num_objs" and "num_attrs" to size_t - * Due to the -Mbounds problem for the pgi-32 bit compiler on indexing - * - *------------------------------------------------------------------------- - */ -static herr_t -group_stats(hid_t group, const char *name, const char *fullname, - const H5O_info_t *oi, H5G_iterate_t walk, iter_t *iter) -{ - hid_t gid; /* Group ID */ - const char *last_container; - hsize_t num_objs; - unsigned bin; /* "bin" the number of objects falls in */ - herr_t ret; - - /* Gather statistics about this type of object */ - iter->uniq_groups++; - if(iter->curr_depth > iter->max_depth) - iter->max_depth = iter->curr_depth; - - /* Get object header information */ - iter->group_ohdr_info.total_size += oi->hdr.space.total; - iter->group_ohdr_info.free_size += oi->hdr.space.free; - - gid = H5Gopen(group, name); - assert(gid > 0); - - /* Get number of links in this group */ - ret = H5Gget_num_objs(gid, &num_objs); - assert(ret >= 0); - - /* Update link stats */ - if(num_objs < SIZE_SMALL_GROUPS) - (iter->num_small_groups[(size_t)num_objs])++; - if(num_objs > iter->max_fanout) - iter->max_fanout = num_objs; - - /* Add group count to proper bin */ - bin = ceil_log10((unsigned long)num_objs); - if((bin + 1) > iter->group_nbins) { - /* Allocate more storage for info about dataset's datatype */ - iter->group_bins = realloc(iter->group_bins, (bin + 1) * sizeof(unsigned long)); - assert(iter->group_bins); - - /* Initialize counts for intermediate bins */ - while(iter->group_nbins < bin) - iter->group_bins[iter->group_nbins++] = 0; - iter->group_nbins++; - - /* Initialize count for new bin */ - iter->group_bins[bin] = 1; - } /* end if */ - else - (iter->group_bins[bin])++; - - /* Update group metadata info */ - iter->groups_btree_storage_size += oi->meta_size.obj.index_size; - iter->groups_heap_storage_size += oi->meta_size.obj.heap_size; - - /* Update attribute metadata info */ - ret = attribute_stats(iter, oi); - assert(ret >= 0); - - /* Close current group */ - ret = H5Gclose(gid); - assert(ret >= 0); - - /* Update current container info */ - last_container = iter->container; - iter->container = fullname; - iter->curr_depth++; - - /* Recursively descend into current group's objects */ - H5Giterate(group, name, NULL, walk, iter); - - /* Revert current container info */ - iter->container = last_container; - iter->curr_depth--; - - return 0; -} /* end group_stats() */ - - -/*------------------------------------------------------------------------- - * Function: dataset_stats - * - * Purpose: Gather statistics about the dataset - * - * Return: Success: 0 - * - * Failure: -1 - * - * Programmer: Quincey Koziol - * Tuesday, August 16, 2005 - * - * Modifications: Refactored code from the walk_function - * EIP, Wednesday, August 16, 2006 - * - * Vailin Choi 12 July 2007 - * 1. Gathered storage info for btree and heap - * (chunked datasets and attributes) - * 2. Gathered info for attributes - * - * Vailin Choi 14 July 2007 - * Cast "dims" and "num_attrs" to size_t - * Due to the -Mbounds problem for the pgi-32bit compiler on indexing - * - *------------------------------------------------------------------------- - */ -static herr_t -dataset_stats(hid_t group, const char *name, const H5O_info_t *oi, iter_t *iter) -{ - unsigned bin; /* "bin" the number of objects falls in */ - hid_t did; /* Dataset ID */ - hid_t sid; /* Dataspace ID */ - hid_t tid; /* Datatype ID */ - hid_t dcpl; /* Dataset creation property list ID */ - hsize_t dims[H5S_MAX_RANK];/* Dimensions of dataset */ - H5D_layout_t lout; /* Layout of dataset */ - unsigned type_found; /* Whether the dataset's datatype was */ - /* already found */ - int ndims; /* Number of dimensions of dataset */ - hsize_t storage; /* Size of dataset storage */ - unsigned u; /* Local index variable */ - int num_ext; /* Number of external files for a dataset */ - int nfltr; /* Number of filters for a dataset */ - H5Z_filter_t fltr; /* Filter identifier */ - herr_t ret; - - /* Gather statistics about this type of object */ - iter->uniq_dsets++; - - /* Get object header information */ - iter->dset_ohdr_info.total_size += oi->hdr.space.total; - iter->dset_ohdr_info.free_size += oi->hdr.space.free; - - did = H5Dopen(group, name); - assert(did > 0); - - /* Update dataset metadata info */ - iter->datasets_btree_storage_size += oi->meta_size.obj.index_size; - - /* Update attribute metadata info */ - ret = attribute_stats(iter, oi); - assert(ret >= 0); - - /* Get storage info */ - storage = H5Dget_storage_size(did); - iter->dset_storage_size += storage; - - /* Gather dataspace statistics */ - sid = H5Dget_space(did); - assert(sid > 0); - - ndims = H5Sget_simple_extent_dims(sid, dims, NULL); - assert(ndims >= 0); - - /* Check for larger rank of dataset */ - if((unsigned)ndims > iter->max_dset_rank) - iter->max_dset_rank = ndims; - - /* Track the number of datasets with each rank */ - (iter->dset_rank_count[ndims])++; - - /* Only gather dim size statistics on 1-D datasets */ - if(ndims == 1) { - iter->max_dset_dims = dims[0]; - if(dims[0] < SIZE_SMALL_DSETS) - (iter->small_dset_dims[(size_t)dims[0]])++; - - /* Add dim count to proper bin */ - bin = ceil_log10((unsigned long)dims[0]); - if((bin + 1) > iter->dset_dim_nbins) { - /* Allocate more storage for info about dataset's datatype */ - iter->dset_dim_bins = realloc(iter->dset_dim_bins, (bin + 1) * sizeof(unsigned long)); - assert(iter->dset_dim_bins); - - /* Initialize counts for intermediate bins */ - while(iter->dset_dim_nbins < bin) - iter->dset_dim_bins[iter->dset_dim_nbins++] = 0; - iter->dset_dim_nbins++; - - /* Initialize count for this bin */ - iter->dset_dim_bins[bin] = 1; - } /* end if */ - else - (iter->dset_dim_bins[bin])++; - } /* end if */ - - ret = H5Sclose(sid); - assert(ret >= 0); - - /* Gather datatype statistics */ - tid = H5Dget_type(did); - assert(tid > 0); - - type_found = FALSE; - for(u = 0; u < iter->dset_ntypes; u++) - if(H5Tequal(iter->dset_type_info[u].tid, tid) > 0) { - type_found = TRUE; - break; - } /* end for */ - if(type_found) - (iter->dset_type_info[u].count)++; - else { - unsigned curr_ntype = iter->dset_ntypes; - - /* Increment # of datatypes seen for datasets */ - iter->dset_ntypes++; - - /* Allocate more storage for info about dataset's datatype */ - iter->dset_type_info = realloc(iter->dset_type_info, iter->dset_ntypes * sizeof(dtype_info_t)); - assert(iter->dset_type_info); - - /* Initialize information about datatype */ - iter->dset_type_info[curr_ntype].tid = H5Tcopy(tid); - assert(iter->dset_type_info[curr_ntype].tid > 0); - iter->dset_type_info[curr_ntype].count = 1; - iter->dset_type_info[curr_ntype].named = 0; - - /* Set index for later */ - u = curr_ntype; - } /* end else */ - - /* Check if the datatype is a named datatype */ - if(H5Tcommitted(tid) > 0) - (iter->dset_type_info[u].named)++; - - ret = H5Tclose(tid); - assert(ret >= 0); - - /* Gather layout statistics */ - dcpl = H5Dget_create_plist(did); - assert(dcpl > 0); - - lout = H5Pget_layout(dcpl); - assert(lout >= 0); - - /* Track the layout type for dataset */ - (iter->dset_layouts[lout])++; - - num_ext = H5Pget_external_count(dcpl); - assert (num_ext >= 0); - - if(num_ext) - iter->nexternal = iter->nexternal + num_ext; - - /* Track different filters */ - if((nfltr = H5Pget_nfilters(dcpl)) >= 0) { - if(nfltr == 0) - iter->dset_comptype[0]++; - for(u = 0; u < (unsigned)nfltr; u++) { -#ifdef H5_WANT_H5_V1_6_COMPAT - fltr = H5Pget_filter(dcpl, u, 0, 0, 0, 0, 0); -#else /* H5_WANT_H5_V1_6_COMPAT */ - fltr = H5Pget_filter(dcpl, u, 0, 0, 0, 0, 0, NULL); -#endif /* H5_WANT_H5_V1_6_COMPAT */ - if(fltr < (H5_NFILTERS_IMPL - 1)) - iter->dset_comptype[fltr]++; - else - iter->dset_comptype[H5_NFILTERS_IMPL - 1]++; /*other filters*/ - } /* end for */ - } /* endif nfltr */ - - ret = H5Pclose(dcpl); - assert(ret >= 0); - - ret = H5Dclose(did); - assert(ret >= 0); - - return 0; -} /* end dataset_stats() */ - - -/*------------------------------------------------------------------------- - * Function: walk - * - * Purpose: Gather statistics about the file - * - * Return: Success: 0 - * Failure: -1 - * - * Programmer: Quincey Koziol - * Tuesday, August 16, 2005 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static herr_t -walk(hid_t group, const char *name, void *_iter) -{ - iter_t *iter = (iter_t *)_iter; - H5O_info_t oi; - char *fullname = NULL; - char *s; - herr_t ret; /* Generic return value */ - - /* Get the full object name */ - fullname = fix_name(iter->container, name); - - /* Get object information */ - ret = H5Oget_info(group, name, &oi, H5P_DEFAULT); - assert(ret >= 0); - - /* If the object has already been printed then just show the object ID - * and return. */ - if((s = sym_lookup(&oi))) { - printf("%s same as %s\n", name, s); - } else { - sym_insert(&oi, fullname); - - /* Gather some statistics about the object */ - if(oi.rc > iter->max_links) - iter->max_links = oi.rc; - - switch(oi.type) { - case H5G_GROUP: - group_stats(group, name, fullname, &oi, walk, iter); - break; - - case H5G_DATASET: - dataset_stats(group, name, &oi, iter); - break; - - case H5G_TYPE: - /* Gather statistics about this type of object */ - iter->uniq_types++; - break; - - case H5G_LINK: - /* Gather statistics about links and UD links */ - iter->uniq_links++; - break; - - default: - /* Gather statistics about this type of object */ - iter->uniq_others++; - break; - } /* end switch */ - } - - if(fullname) - free(fullname); - - return 0; -} - - -/*------------------------------------------------------------------------- - * Function: parse_command_line - * - * Purpose: Parses command line and sets up global variable to control output - * - * Return: Success: 0 - * - * Failure: -1 - * - * Programmer: Elena Pourmal - * Saturday, August 12, 2006 - * - * Modifications: - * Vailin Choi 12 July 2007 - * Added 'A' option to display attribute info - * - *------------------------------------------------------------------------- - */ -static struct handler_t * -parse_command_line(int argc, const char *argv[]) -{ - int opt, i; - struct handler_t *hand; - - /* Allocate space to hold the command line info */ - hand = calloc((size_t)argc, sizeof(struct handler_t)); - - /* parse command line options */ - while ((opt = get_option(argc, argv, s_opts, l_opts)) != EOF) { - switch ((char)opt) { - case 'A': - display_all = FALSE; - display_attr = TRUE; - break; - case 'F': - display_all = FALSE; - display_file_metadata = TRUE; - break; - case 'f': - display_all = FALSE; - display_file = TRUE; - break; - case 'G': - display_all = FALSE; - display_group_metadata = TRUE; - break; - case 'g': - display_all = FALSE; - display_group = TRUE; - break; - case 'T': - display_all = FALSE; - display_dtype_metadata = TRUE; - break; - case 'D': - display_all = FALSE; - display_dset_metadata = TRUE; - break; - case 'd': - display_all = FALSE; - display_dset = TRUE; - break; - case 'h': - usage(progname); - leave(EXIT_SUCCESS); - case 'V': - print_version(progname); - leave(EXIT_SUCCESS); - break; - case 'O': - display_object = TRUE; - for (i = 0; i < argc; i++) - if (!hand[i].obj) { - hand[i].obj = HDstrdup(opt_arg); - hand[i].flag = 1; - break; - } - break; - default: - usage(progname); - leave(EXIT_FAILURE); - } - } - - /* check for file name to be processed */ - if (argc <= opt_ind) { - error_msg(progname, "missing file name\n"); - usage(progname); - leave(EXIT_FAILURE); - } - return hand; -} - - -/*------------------------------------------------------------------------- - * Function: init_iter - * - * Purpose: Initialize iter structure - * - * Return: Success: 0 - * - * Failure: Never fails - * - * Programmer: Elena Pourmal - * Saturday, August 12, 2006 - * - *------------------------------------------------------------------------- - */ -static herr_t -iter_init(iter_t *iter) -{ - /* Clear everything to zeros */ - memset(iter, 0, sizeof(*iter)); - - /* Initialize non-zero information */ - iter->container = "/"; - - return 0; -} - - -/*------------------------------------------------------------------------- - * Function: print_file_info - * - * Purpose: Prints information about file - * - * Return: Success: 0 - * - * Failure: Never fails - * - * Programmer: Elena Pourmal - * Saturday, August 12, 2006 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static herr_t -print_file_info(const iter_t *iter) -{ - printf("File information\n"); - printf("\t# of unique groups: %lu\n", iter->uniq_groups); - printf("\t# of unique datasets: %lu\n", iter->uniq_dsets); - printf("\t# of unique named dataypes: %lu\n", iter->uniq_types); - printf("\t# of unique links: %lu\n", iter->uniq_links); - printf("\t# of unique other: %lu\n", iter->uniq_others); - printf("\tMax. # of links to object: %lu\n", iter->max_links); - printf("\tMax. depth of hierarchy: %lu\n", iter->max_depth); - HDfprintf(stdout, "\tMax. # of objects in group: %Hu\n", iter->max_fanout); - - return 0; -} - - -/*------------------------------------------------------------------------- - * Function: print_file_metadata - * - * Purpose: Prints metadata information about file - * - * Return: Success: 0 - * - * Failure: Never fails - * - * Programmer: Elena Pourmal - * Saturday, August 12, 2006 - * - * Modifications: - * Vailin Choi 12 July 2007 - * Print storage info for: - * 1. btree/heap storage for groups and attributes - * 2. btree storage for chunked dataset - * 3. hdr/btree/list/heap storage for SOHM table - * 4. superblock extension size - * - *------------------------------------------------------------------------- - */ -static herr_t -print_file_metadata(const iter_t *iter) -{ - printf("Object header size: (total/unused)\n"); - HDfprintf(stdout, "\tGroups: %Hu/%Hu\n", iter->group_ohdr_info.total_size, - iter->group_ohdr_info.free_size); - HDfprintf(stdout, "\tDatasets: %Hu/%Hu\n", iter->dset_ohdr_info.total_size, - iter->dset_ohdr_info.free_size); - - printf("Storage information:\n"); - HDfprintf(stdout, "\tGroups:\n"); - HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->groups_btree_storage_size); - HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->groups_heap_storage_size); - - HDfprintf(stdout, "\tAttributes:\n"); - HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->attrs_btree_storage_size); - HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->attrs_heap_storage_size); - - HDfprintf(stdout, "\tChunked datasets:\n"); - HDfprintf(stdout, "\t\tB-tree: %Hu\n", iter->datasets_btree_storage_size); - - HDfprintf(stdout, "\tShared Messages:\n"); - HDfprintf(stdout, "\t\tHeader: %Hu\n", iter->SM_hdr_storage_size); - HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->SM_index_storage_size); - HDfprintf(stdout, "\t\tHeap: %Hu\n", iter->SM_heap_storage_size); - - HDfprintf(stdout, "\tSuperblock extension: %Hu\n", iter->super_ext_size); - - return 0; -} - - -/*------------------------------------------------------------------------- - * Function: print_group_info - * - * Purpose: Prints information about groups in the file - * - * Return: Success: 0 - * - * Failure: Never fails - * - * Programmer: Elena Pourmal - * Saturday, August 12, 2006 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static herr_t -print_group_info(const iter_t *iter) -{ - unsigned long power; /* Temporary "power" for bins */ - unsigned long total; /* Total count for various statistics */ - unsigned u; /* Local index variable */ - - printf("Small groups:\n"); - total = 0; - for(u = 0; u < SIZE_SMALL_GROUPS; u++) { - if(iter->num_small_groups[u] > 0) { - printf("\t# of groups of size %u: %lu\n", u, iter->num_small_groups[u]); - total += iter->num_small_groups[u]; - } /* end if */ - } /* end for */ - printf("\tTotal # of small groups: %lu\n", total); - - printf("Group bins:\n"); - total = 0; - if(iter->group_bins[0] > 0) { - printf("\t# of groups of size 0: %lu\n", iter->group_bins[0]); - total = iter->group_bins[0]; - } /* end if */ - power = 1; - for(u = 1; u < iter->group_nbins; u++) { - if(iter->group_bins[u] > 0) { - printf("\t# of groups of size %lu - %lu: %lu\n", power, (power * 10) - 1, - iter->group_bins[u]); - total += iter->group_bins[u]; - } /* end if */ - power *= 10; - } /* end for */ - printf("\tTotal # of groups: %lu\n", total); - - return 0; -} - - -/*------------------------------------------------------------------------- - * Function: print_attr_info - * - * Purpose: Prints information about attributes in the file - * - * Return: Success: 0 - * - * Failure: Never fails - * - * Programmer: Vailin Choi - * July 12, 2007 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static herr_t -print_attr_info(const iter_t *iter) -{ - unsigned long power; /* Temporary "power" for bins */ - unsigned long total; /* Total count for various statistics */ - unsigned u; /* Local index variable */ - - printf("Small # of attributes:\n"); - total = 0; - for(u = 1; u < SIZE_SMALL_ATTRS; u++) { - if(iter->num_small_attrs[u] > 0) { - printf("\t# of objects with %u attributes: %lu\n", u, iter->num_small_attrs[u]); - total += iter->num_small_attrs[u]; - } /* end if */ - } /* end for */ - printf("\tTotal # of objects with small # of attributes: %lu\n", total); - - printf("Attribute bins:\n"); - total = 0; - power = 1; - for(u = 1; u < iter->attr_nbins; u++) { - if(iter->attr_bins[u] > 0) { - printf("\t# of objects with %lu - %lu attributes: %lu\n", power, (power * 10) - 1, - iter->attr_bins[u]); - total += iter->attr_bins[u]; - } /* end if */ - power *= 10; - } /* end for */ - printf("\tTotal # of objects with attributes: %lu\n", total); - printf("\tMax. # of attributes to objects: %lu\n", (unsigned long)iter->max_attrs); - - return 0; -} - - -/*------------------------------------------------------------------------- - * Function: print_dataset_info - * - * Purpose: Prints information about datasets in the file - * - * Return: Success: 0 - * - * Failure: Never fails - * - * Programmer: Elena Pourmal - * Saturday, August 12, 2006 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static herr_t -print_dataset_info(const iter_t *iter) -{ - unsigned long power; /* Temporary "power" for bins */ - unsigned long total; /* Total count for various statistics */ - size_t dtype_size; /* Size of encoded datatype */ - unsigned u; /* Local index variable */ - - if(iter->uniq_dsets > 0) { - printf("Dataset dimension information:\n"); - printf("\tMax. rank of datasets: %lu\n", iter->max_dset_rank); - printf("\tDataset ranks:\n"); - for(u = 0; u < H5S_MAX_RANK; u++) - if(iter->dset_rank_count[u] > 0) - printf("\t\t# of dataset with rank %u: %lu\n", u, iter->dset_rank_count[u]); - - printf("1-D Dataset information:\n"); - HDfprintf(stdout, "\tMax. dimension size of 1-D datasets: %Hu\n", iter->max_dset_dims); - printf("\tSmall 1-D datasets:\n"); - total = 0; - for(u = 0; u < SIZE_SMALL_DSETS; u++) { - if(iter->small_dset_dims[u] > 0) { - printf("\t\t# of dataset dimensions of size %u: %lu\n", u, - iter->small_dset_dims[u]); - total += iter->small_dset_dims[u]; - } /* end if */ - } /* end for */ - printf("\t\tTotal small datasets: %lu\n", total); - - /* Protect against no datasets in file */ - if(iter->dset_dim_nbins > 0) { - printf("\t1-D Dataset dimension bins:\n"); - total = 0; - if(iter->dset_dim_bins[0] > 0) { - printf("\t\t# of datasets of size 0: %lu\n", iter->dset_dim_bins[0]); - total = iter->dset_dim_bins[0]; - } /* end if */ - power = 1; - for(u = 1; u < iter->dset_dim_nbins; u++) { - if(iter->dset_dim_bins[u] > 0) { - printf("\t\t# of datasets of size %lu - %lu: %lu\n", power, (power * 10) - 1, - iter->dset_dim_bins[u]); - total += iter->dset_dim_bins[u]; - } /* end if */ - power *= 10; - } /* end for */ - printf("\t\tTotal # of datasets: %lu\n", total); - } /* end if */ - - printf("Dataset storage information:\n"); - HDfprintf(stdout, "\tTotal raw data size: %Hu\n", iter->dset_storage_size); - - printf("Dataset layout information:\n"); - for(u = 0; u < H5D_NLAYOUTS; u++) - printf("\tDataset layout counts[%s]: %lu\n", (u == 0 ? "COMPACT" : - (u == 1 ? "CONTIG" : "CHUNKED")), iter->dset_layouts[u]); - printf("\tNumber of external files : %lu\n", iter->nexternal); - - printf("Dataset filters information:\n"); - printf("\tNumber of datasets with:\n"); - printf("\t\tNO filter: %lu\n", iter->dset_comptype[H5Z_FILTER_ERROR+1]); - printf("\t\tGZIP filter: %lu\n", iter->dset_comptype[H5Z_FILTER_DEFLATE]); - printf("\t\tSHUFFLE filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SHUFFLE]); - printf("\t\tFLETCHER32 filter: %lu\n", iter->dset_comptype[H5Z_FILTER_FLETCHER32]); - printf("\t\tSZIP filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SZIP]); - printf("\t\tNBIT filter: %lu\n", iter->dset_comptype[H5Z_FILTER_NBIT]); - printf("\t\tSCALEOFFSET filter: %lu\n", iter->dset_comptype[H5Z_FILTER_SCALEOFFSET]); - printf("\t\tUSER-DEFINED filter: %lu\n", iter->dset_comptype[H5_NFILTERS_IMPL-1]); - - if(display_dtype_metadata) { - printf("Dataset datatype information:\n"); - printf("\t# of unique datatypes used by datasets: %lu\n", iter->dset_ntypes); - total = 0; - for(u = 0; u < iter->dset_ntypes; u++) { - H5Tencode(iter->dset_type_info[u].tid, NULL, &dtype_size); - printf("\tDataset datatype #%u:\n", u); - printf("\t\tCount (total/named) = (%lu/%lu)\n", iter->dset_type_info[u].count, iter->dset_type_info[u].named); - printf("\t\tSize (desc./elmt) = (%lu/%lu)\n", (unsigned long)dtype_size, - (unsigned long)H5Tget_size(iter->dset_type_info[u].tid)); - H5Tclose(iter->dset_type_info[u].tid); - total += iter->dset_type_info[u].count; - } /* end for */ - printf("\tTotal dataset datatype count: %lu\n", total); - } - } /* end if */ - - return 0; -} - - -/*------------------------------------------------------------------------- - * Function: print_file_statistics - * - * Purpose: Prints file statistics - * - * Return: Success: 0 - * - * Failure: Never fails - * - * Programmer: Elena Pourmal - * Saturday, August 12, 2006 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -print_file_statistics(const iter_t *iter) -{ - if(display_all) { - display_file = TRUE; - display_file_metadata = TRUE; - display_group = TRUE; - display_group_metadata = TRUE; - display_dset = TRUE; - display_dtype_metadata = TRUE; - display_attr = TRUE; - } - - if(display_file) print_file_info(iter); - if(display_file_metadata) print_file_metadata(iter); - if(display_group) print_group_info(iter); - if(display_dset) print_dataset_info(iter); - if(display_attr) print_attr_info(iter); -} - - -/*------------------------------------------------------------------------- - * Function: print_object_statistics - * - * Purpose: Prints object statistics - * - * Return: Success: 0 - * - * Failure: Never fails - * - * Programmer: Elena Pourmal - * Thursday, August 17, 2006 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -print_object_statistics(const char *name) -{ - printf("Object name %s\n", name); -} - - -/*------------------------------------------------------------------------- - * Function: print_statistics - * - * Purpose: Prints statistics - * - * Return: Success: 0 - * - * Failure: Never fails - * - * Programmer: Elena Pourmal - * Thursday, August 17, 2006 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -print_statistics(const char *name, const iter_t *iter) -{ - if(display_object) - print_object_statistics(name); - else - print_file_statistics(iter); -} - - -int -main(int argc, const char *argv[]) -{ - iter_t iter; - const char *fname = NULL; - hid_t fid; - struct handler_t *hand; - char root[] = "/"; - int i; - H5F_info_t finfo; - - - /* Disable error reporting */ - H5Eset_auto2(H5E_DEFAULT, NULL, NULL); - - /* Initialize h5tools lib */ - h5tools_init(); - hand = parse_command_line (argc, argv); - if (!hand) { - error_msg(progname, "unable to parse command line arguments \n"); - leave(EXIT_FAILURE); - } - - fname = argv[opt_ind]; - hand[opt_ind].obj = root; - hand[opt_ind].flag = 1; - if (display_object) hand[opt_ind].flag = 0; - - printf("Filename: %s\n", fname); - - fid = H5Fopen(fname, H5F_ACC_RDONLY, H5P_DEFAULT); - if (fid < 0) { - error_msg(progname, "unable to open file \"%s\"\n", fname); - leave(EXIT_FAILURE); - } - - /* Initialize iter structure */ - iter_init(&iter); - - /* Get storge info for SOHM's btree/list/heap and superblock extension */ - if(H5Fget_info(fid, &finfo) < 0) - warn_msg(progname, "Unable to retrieve SOHM info\n"); - else { - iter.super_ext_size = finfo.super_ext_size; - iter.SM_hdr_storage_size = finfo.sohm.hdr_size; - iter.SM_index_storage_size = finfo.sohm.msgs_info.index_size; - iter.SM_heap_storage_size = finfo.sohm.msgs_info.heap_size; - } - - /* Walk the objects or all file */ - for(i = 0; i < argc; i++) { - if(hand[i].obj) { - if(hand[i].flag) { - walk(fid, hand[i].obj, &iter); - print_statistics(hand[i].obj, &iter); - } - } - } - - free(hand); - - if(H5Fclose(fid) < 0) { - error_msg(progname, "unable to close file \"%s\"\n", fname); - leave(EXIT_FAILURE); - } - - leave(EXIT_SUCCESS); -} - diff --git a/tools/misc/h5stat_gentest.c b/tools/misc/h5stat_gentest.c deleted file mode 100644 index f0219bd..0000000 --- a/tools/misc/h5stat_gentest.c +++ /dev/null @@ -1,84 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Copyright by The HDF Group. * - * Copyright by the Board of Trustees of the University of Illinois. * - * All rights reserved. * - * * - * This file is part of HDF5. The full HDF5 copyright notice, including * - * terms governing use, modification, and redistribution, is contained in * - * the files COPYING and Copyright.html. COPYING can be found at the root * - * of the source code distribution tree; Copyright.html can be found at the * - * root level of an installed copy of the electronic HDF5 document set and * - * is linked from the top-level documents page. It can also be found at * - * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * - * access to either file, you may request a copy from help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * Generate the binary hdf5 files for the h5stat tests. - * Usage: just execute the program without any arguments will - * generate all the binary hdf5 files in the ./testfiles directory. - * - * If you regenerate the test files (e.g., changing some code, - * trying it on a new platform, ...), you need to verify the correctness - * of the expected output and update the corresponding *.ddl files. - */ - -#include "hdf5.h" - -#define FILE "h5stat_newgrat.h5" -#define DATASET_NAME "DATASET_NAME" -#define GROUP_NAME "GROUP" -#define ATTR_NAME "ATTR" -#define NUM_GRPS 350 -#define NUM_ATTRS 100 - -/* - * Generate 1.8 HDF5 file - * with NUM_GRPS groups - * with NUM_ATTRS for the - */ -static void gen_file(void) -{ - int ret, i; - hid_t fapl, gid; - hid_t file, type_id, space_id, attr_id, dset_id; - char name[30]; - char attrname[30]; - - - fapl = H5Pcreate(H5P_FILE_ACCESS); - ret = H5Pset_latest_format(fapl,1); - - /* Create dataset */ - file=H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); - for (i=1; i<=NUM_GRPS; i++) { - sprintf(name, "%s%d", GROUP_NAME,i); - gid = H5Gcreate(file, name, (size_t)0); - H5Gclose(gid); - } - - - /* Create a datatype to commit and use */ - type_id=H5Tcopy(H5T_NATIVE_INT); - /* Create dataspace for dataset */ - space_id=H5Screate(H5S_SCALAR); - /* Create dataset */ - dset_id=H5Dcreate(file, DATASET_NAME,type_id,space_id,H5P_DEFAULT); - for (i=1; i<=NUM_ATTRS; i++) { - sprintf(attrname, "%s%d", ATTR_NAME,i); - attr_id=H5Acreate(dset_id,attrname, type_id,space_id,H5P_DEFAULT); - ret=H5Aclose(attr_id); - } - - ret=H5Dclose(dset_id); - ret=H5Sclose(space_id); - ret=H5Tclose(type_id); - ret=H5Fclose(file); -} - -int main(void) -{ - gen_file(); - - return 0; -} diff --git a/tools/misc/testfiles/h5stat_filters-F.ddl b/tools/misc/testfiles/h5stat_filters-F.ddl deleted file mode 100644 index 544d0c7..0000000 --- a/tools/misc/testfiles/h5stat_filters-F.ddl +++ /dev/null @@ -1,21 +0,0 @@ -############################# -Expected output for 'h5stat -F h5stat_filters.h5' -############################# -Filename: h5stat_filters.h5 -Object header size: (total/unused) - Groups: 48/8 - Datasets: 4936/1344 -Storage information: - Groups: - B-tree/List: 1200 - Heap: 288 - Attributes: - B-tree/List: 0 - Heap: 0 - Chunked datasets: - B-tree: 31392 - Shared Messages: - Header: 0 - B-tree/List: 0 - Heap: 0 - Superblock extension: 0 diff --git a/tools/misc/testfiles/h5stat_filters-d.ddl b/tools/misc/testfiles/h5stat_filters-d.ddl deleted file mode 100644 index e83c6c4..0000000 --- a/tools/misc/testfiles/h5stat_filters-d.ddl +++ /dev/null @@ -1,33 +0,0 @@ -############################# -Expected output for 'h5stat -d h5stat_filters.h5' -############################# -Filename: h5stat_filters.h5 -Dataset dimension information: - Max. rank of datasets: 2 - Dataset ranks: - # of dataset with rank 1: 1 - # of dataset with rank 2: 14 -1-D Dataset information: - Max. dimension size of 1-D datasets: 100 - Small 1-D datasets: - Total small datasets: 0 - 1-D Dataset dimension bins: - # of datasets of size 100 - 999: 1 - Total # of datasets: 1 -Dataset storage information: - Total raw data size: 8659 -Dataset layout information: - Dataset layout counts[COMPACT]: 1 - Dataset layout counts[CONTIG]: 2 - Dataset layout counts[CHUNKED]: 12 - Number of external files : 2 -Dataset filters information: - Number of datasets with: - NO filter: 7 - GZIP filter: 2 - SHUFFLE filter: 2 - FLETCHER32 filter: 2 - SZIP filter: 2 - NBIT filter: 2 - SCALEOFFSET filter: 1 - USER-DEFINED filter: 1 diff --git a/tools/misc/testfiles/h5stat_filters-dT.ddl b/tools/misc/testfiles/h5stat_filters-dT.ddl deleted file mode 100644 index 62735f0..0000000 --- a/tools/misc/testfiles/h5stat_filters-dT.ddl +++ /dev/null @@ -1,42 +0,0 @@ -############################# -Expected output for 'h5stat -dT h5stat_filters.h5' -############################# -Filename: h5stat_filters.h5 -Dataset dimension information: - Max. rank of datasets: 2 - Dataset ranks: - # of dataset with rank 1: 1 - # of dataset with rank 2: 14 -1-D Dataset information: - Max. dimension size of 1-D datasets: 100 - Small 1-D datasets: - Total small datasets: 0 - 1-D Dataset dimension bins: - # of datasets of size 100 - 999: 1 - Total # of datasets: 1 -Dataset storage information: - Total raw data size: 8659 -Dataset layout information: - Dataset layout counts[COMPACT]: 1 - Dataset layout counts[CONTIG]: 2 - Dataset layout counts[CHUNKED]: 12 - Number of external files : 2 -Dataset filters information: - Number of datasets with: - NO filter: 7 - GZIP filter: 2 - SHUFFLE filter: 2 - FLETCHER32 filter: 2 - SZIP filter: 2 - NBIT filter: 2 - SCALEOFFSET filter: 1 - USER-DEFINED filter: 1 -Dataset datatype information: - # of unique datatypes used by datasets: 2 - Dataset datatype #0: - Count (total/named) = (14/0) - Size (desc./elmt) = (14/4) - Dataset datatype #1: - Count (total/named) = (1/0) - Size (desc./elmt) = (14/4) - Total dataset datatype count: 15 diff --git a/tools/misc/testfiles/h5stat_filters-file.ddl b/tools/misc/testfiles/h5stat_filters-file.ddl deleted file mode 100644 index c6aeef0..0000000 --- a/tools/misc/testfiles/h5stat_filters-file.ddl +++ /dev/null @@ -1,13 +0,0 @@ -############################# -Expected output for 'h5stat -f h5stat_filters.h5' -############################# -Filename: h5stat_filters.h5 -File information - # of unique groups: 1 - # of unique datasets: 15 - # of unique named dataypes: 1 - # of unique links: 0 - # of unique other: 0 - Max. # of links to object: 1 - Max. depth of hierarchy: 0 - Max. # of objects in group: 16 diff --git a/tools/misc/testfiles/h5stat_filters-g.ddl b/tools/misc/testfiles/h5stat_filters-g.ddl deleted file mode 100644 index d488b8f..0000000 --- a/tools/misc/testfiles/h5stat_filters-g.ddl +++ /dev/null @@ -1,9 +0,0 @@ -############################# -Expected output for 'h5stat -g h5stat_filters.h5' -############################# -Filename: h5stat_filters.h5 -Small groups: - Total # of small groups: 0 -Group bins: - # of groups of size 10 - 99: 1 - Total # of groups: 1 diff --git a/tools/misc/testfiles/h5stat_filters.ddl b/tools/misc/testfiles/h5stat_filters.ddl deleted file mode 100644 index 4dd6aee..0000000 --- a/tools/misc/testfiles/h5stat_filters.ddl +++ /dev/null @@ -1,78 +0,0 @@ -############################# -Expected output for 'h5stat h5stat_filters.h5' -############################# -Filename: h5stat_filters.h5 -File information - # of unique groups: 1 - # of unique datasets: 15 - # of unique named dataypes: 1 - # of unique links: 0 - # of unique other: 0 - Max. # of links to object: 1 - Max. depth of hierarchy: 0 - Max. # of objects in group: 16 -Object header size: (total/unused) - Groups: 48/8 - Datasets: 4936/1344 -Storage information: - Groups: - B-tree/List: 1200 - Heap: 288 - Attributes: - B-tree/List: 0 - Heap: 0 - Chunked datasets: - B-tree: 31392 - Shared Messages: - Header: 0 - B-tree/List: 0 - Heap: 0 - Superblock extension: 0 -Small groups: - Total # of small groups: 0 -Group bins: - # of groups of size 10 - 99: 1 - Total # of groups: 1 -Dataset dimension information: - Max. rank of datasets: 2 - Dataset ranks: - # of dataset with rank 1: 1 - # of dataset with rank 2: 14 -1-D Dataset information: - Max. dimension size of 1-D datasets: 100 - Small 1-D datasets: - Total small datasets: 0 - 1-D Dataset dimension bins: - # of datasets of size 100 - 999: 1 - Total # of datasets: 1 -Dataset storage information: - Total raw data size: 8659 -Dataset layout information: - Dataset layout counts[COMPACT]: 1 - Dataset layout counts[CONTIG]: 2 - Dataset layout counts[CHUNKED]: 12 - Number of external files : 2 -Dataset filters information: - Number of datasets with: - NO filter: 7 - GZIP filter: 2 - SHUFFLE filter: 2 - FLETCHER32 filter: 2 - SZIP filter: 2 - NBIT filter: 2 - SCALEOFFSET filter: 1 - USER-DEFINED filter: 1 -Dataset datatype information: - # of unique datatypes used by datasets: 2 - Dataset datatype #0: - Count (total/named) = (14/0) - Size (desc./elmt) = (14/4) - Dataset datatype #1: - Count (total/named) = (1/0) - Size (desc./elmt) = (14/4) - Total dataset datatype count: 15 -Small # of attributes: - Total # of objects with small # of attributes: 0 -Attribute bins: - Total # of objects with attributes: 0 - Max. # of attributes to objects: 0 diff --git a/tools/misc/testfiles/h5stat_filters.h5 b/tools/misc/testfiles/h5stat_filters.h5 deleted file mode 100644 index 5b5f4bb..0000000 Binary files a/tools/misc/testfiles/h5stat_filters.h5 and /dev/null differ diff --git a/tools/misc/testfiles/h5stat_help1.ddl b/tools/misc/testfiles/h5stat_help1.ddl deleted file mode 100644 index 0841572..0000000 --- a/tools/misc/testfiles/h5stat_help1.ddl +++ /dev/null @@ -1,24 +0,0 @@ -############################# -Expected output for 'h5stat -h' -############################# - -This tool is under development. For detailed information -please see the specification document at -http://hdf.ncsa.uiuc.edu/RFC/h5stat/h5stat-spec.pdf - -Please send your comments and questions to help@hdfgroup.org - -Usage: h5stat [OPTIONS] file - - OPTIONS - -h, --help Print a usage message and exit - -V, --version Print version number and exit - -f, --file Print file information - -F, --filemetadata Print file metadata - -g, --group Print group information - -G, --groupmetadata Print group metadata - -d, --dset Print dataset information - -D, --dsetmetadata Print dataset metadata - -T, --dtypemetadata Print datatype metadata - -A, --attribute Print attribute information - diff --git a/tools/misc/testfiles/h5stat_help2.ddl b/tools/misc/testfiles/h5stat_help2.ddl deleted file mode 100644 index 1e6295b..0000000 --- a/tools/misc/testfiles/h5stat_help2.ddl +++ /dev/null @@ -1,24 +0,0 @@ -############################# -Expected output for 'h5stat --help' -############################# - -This tool is under development. For detailed information -please see the specification document at -http://hdf.ncsa.uiuc.edu/RFC/h5stat/h5stat-spec.pdf - -Please send your comments and questions to help@hdfgroup.org - -Usage: h5stat [OPTIONS] file - - OPTIONS - -h, --help Print a usage message and exit - -V, --version Print version number and exit - -f, --file Print file information - -F, --filemetadata Print file metadata - -g, --group Print group information - -G, --groupmetadata Print group metadata - -d, --dset Print dataset information - -D, --dsetmetadata Print dataset metadata - -T, --dtypemetadata Print datatype metadata - -A, --attribute Print attribute information - diff --git a/tools/misc/testfiles/h5stat_newgrat.ddl b/tools/misc/testfiles/h5stat_newgrat.ddl deleted file mode 100644 index 228d565..0000000 --- a/tools/misc/testfiles/h5stat_newgrat.ddl +++ /dev/null @@ -1,74 +0,0 @@ -############################# -Expected output for 'h5stat h5stat_newgrat.h5' -############################# -Filename: h5stat_newgrat.h5 -File information - # of unique groups: 351 - # of unique datasets: 1 - # of unique named dataypes: 0 - # of unique links: 0 - # of unique other: 0 - Max. # of links to object: 1 - Max. depth of hierarchy: 1 - Max. # of objects in group: 351 -Object header size: (total/unused) - Groups: 51597/32292 - Datasets: 414/312 -Storage information: - Groups: - B-tree/List: 5158 - Heap: 7643 - Attributes: - B-tree/List: 2598 - Heap: 4442 - Chunked datasets: - B-tree: 0 - Shared Messages: - Header: 0 - B-tree/List: 0 - Heap: 0 - Superblock extension: 0 -Small groups: - # of groups of size 0: 350 - Total # of small groups: 350 -Group bins: - # of groups of size 0: 350 - # of groups of size 100 - 999: 1 - Total # of groups: 351 -Dataset dimension information: - Max. rank of datasets: 0 - Dataset ranks: - # of dataset with rank 0: 1 -1-D Dataset information: - Max. dimension size of 1-D datasets: 0 - Small 1-D datasets: - Total small datasets: 0 -Dataset storage information: - Total raw data size: 0 -Dataset layout information: - Dataset layout counts[COMPACT]: 0 - Dataset layout counts[CONTIG]: 1 - Dataset layout counts[CHUNKED]: 0 - Number of external files : 0 -Dataset filters information: - Number of datasets with: - NO filter: 1 - GZIP filter: 0 - SHUFFLE filter: 0 - FLETCHER32 filter: 0 - SZIP filter: 0 - NBIT filter: 0 - SCALEOFFSET filter: 0 - USER-DEFINED filter: 0 -Dataset datatype information: - # of unique datatypes used by datasets: 1 - Dataset datatype #0: - Count (total/named) = (1/0) - Size (desc./elmt) = (14/4) - Total dataset datatype count: 1 -Small # of attributes: - Total # of objects with small # of attributes: 0 -Attribute bins: - # of objects with 100 - 999 attributes: 1 - Total # of objects with attributes: 1 - Max. # of attributes to objects: 100 diff --git a/tools/misc/testfiles/h5stat_newgrat.h5 b/tools/misc/testfiles/h5stat_newgrat.h5 deleted file mode 100644 index cab98bb..0000000 Binary files a/tools/misc/testfiles/h5stat_newgrat.h5 and /dev/null differ diff --git a/tools/misc/testfiles/h5stat_tsohm.ddl b/tools/misc/testfiles/h5stat_tsohm.ddl deleted file mode 100644 index 572965e..0000000 --- a/tools/misc/testfiles/h5stat_tsohm.ddl +++ /dev/null @@ -1,72 +0,0 @@ -############################# -Expected output for 'h5stat h5stat_tsohm.h5' -############################# -Filename: h5stat_tsohm.h5 -File information - # of unique groups: 1 - # of unique datasets: 2 - # of unique named dataypes: 0 - # of unique links: 0 - # of unique other: 0 - Max. # of links to object: 1 - Max. depth of hierarchy: 0 - Max. # of objects in group: 2 -Object header size: (total/unused) - Groups: 51/2 - Datasets: 568/358 -Storage information: - Groups: - B-tree/List: 872 - Heap: 120 - Attributes: - B-tree/List: 0 - Heap: 0 - Chunked datasets: - B-tree: 0 - Shared Messages: - Header: 38 - B-tree/List: 550 - Heap: 1316 - Superblock extension: 40 -Small groups: - # of groups of size 2: 1 - Total # of small groups: 1 -Group bins: - # of groups of size 1 - 9: 1 - Total # of groups: 1 -Dataset dimension information: - Max. rank of datasets: 2 - Dataset ranks: - # of dataset with rank 2: 2 -1-D Dataset information: - Max. dimension size of 1-D datasets: 0 - Small 1-D datasets: - Total small datasets: 0 -Dataset storage information: - Total raw data size: 0 -Dataset layout information: - Dataset layout counts[COMPACT]: 0 - Dataset layout counts[CONTIG]: 0 - Dataset layout counts[CHUNKED]: 2 - Number of external files : 0 -Dataset filters information: - Number of datasets with: - NO filter: 2 - GZIP filter: 0 - SHUFFLE filter: 0 - FLETCHER32 filter: 0 - SZIP filter: 0 - NBIT filter: 0 - SCALEOFFSET filter: 0 - USER-DEFINED filter: 0 -Dataset datatype information: - # of unique datatypes used by datasets: 1 - Dataset datatype #0: - Count (total/named) = (2/0) - Size (desc./elmt) = (14/4) - Total dataset datatype count: 2 -Small # of attributes: - Total # of objects with small # of attributes: 0 -Attribute bins: - Total # of objects with attributes: 0 - Max. # of attributes to objects: 0 diff --git a/tools/misc/testfiles/h5stat_tsohm.h5 b/tools/misc/testfiles/h5stat_tsohm.h5 deleted file mode 100644 index 45ee36c..0000000 Binary files a/tools/misc/testfiles/h5stat_tsohm.h5 and /dev/null differ diff --git a/tools/misc/testh5stat.sh.in b/tools/misc/testh5stat.sh.in deleted file mode 100644 index 66d05be..0000000 --- a/tools/misc/testh5stat.sh.in +++ /dev/null @@ -1,135 +0,0 @@ -#! /bin/sh -# -# Copyright by The HDF Group. -# Copyright by the Board of Trustees of the University of Illinois. -# All rights reserved. -# -# This file is part of HDF5. The full HDF5 copyright notice, including -# terms governing use, modification, and redistribution, is contained in -# the files COPYING and Copyright.html. COPYING can be found at the root -# of the source code distribution tree; Copyright.html can be found at the -# root level of an installed copy of the electronic HDF5 document set and -# is linked from the top-level documents page. It can also be found at -# http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have -# access to either file, you may request a copy from help@hdfgroup.org. -# -# Tests for the h5dump tool - -# Determine which filters are available -USE_FILTER_SZIP="@USE_FILTER_SZIP@" -USE_FILTER_DEFLATE="@USE_FILTER_DEFLATE@" -USE_FILTER_SHUFFLE="@USE_FILTER_SHUFFLE@" -USE_FILTER_FLETCHER32="@USE_FILTER_FLETCHER32@" -USE_FILTER_NBIT="@USE_FILTER_NBIT@" -USE_FILTER_SCALEOFFSET="@USE_FILTER_SCALEOFFSET@" - -STAT=h5stat # The tool name -STAT_BIN=`pwd`/$STAT # The path of the tool binary - -CMP='cmp -s' -DIFF='diff -c' - -nerrors=0 -verbose=yes - -# The build (current) directory might be different than the source directory. -if test -z "$srcdir"; then - srcdir=. -fi - -test -d ./testfiles || mkdir ./testfiles - -# Print a line-line message left justified in a field of 70 characters -# beginning with the word "Testing". -# -TESTING() { - SPACES=" " - echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012' -} - -# Run a test and print PASS or *FAIL*. If a test fails then increment -# the `nerrors' global variable and (if $verbose is set) display the -# difference between the actual output and the expected output. The -# expected output is given as the first argument to this function and -# the actual output file is calculated by replacing the `.ddl' with -# `.out'. The actual output is not removed if $HDF5_NOCLEANUP has a -# non-zero value. -# -TOOLTEST() { - expect="$srcdir/testfiles/$1" - actual="./testfiles/`basename $1 .ddl`.out" - actual_err="./testfiles/`basename $1 .ddl`.err" - shift - - # Run test. - TESTING $STAT $@ - ( - echo "#############################" - echo "Expected output for '$STAT $@'" - echo "#############################" - cd $srcdir/testfiles - $RUNSERIAL $STAT_BIN $@ - ) >$actual 2>$actual_err - cat $actual_err >> $actual - - - if [ ! -f $expect ]; then - # Create the expect file if it doesn't yet exist. - echo " CREATED" - cp $actual $expect - elif $CMP $expect $actual; then - echo " PASSED" - else - echo "*FAILED*" - echo " Expected result (*.ddl) differs from actual result (*.out)" - nerrors="`expr $nerrors + 1`" - test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/ /' - fi - - # Clean up output file - if test -z "$HDF5_NOCLEANUP"; then - rm -f $actual $actual_err - fi -} - - -# Print a "SKIP" message -SKIP() { - TESTING $STAT $@ - echo " -SKIP-" -} - - - -############################################################################## -############################################################################## -### T H E T E S T S ### -############################################################################## -############################################################################## - -# Test for help flag -TOOLTEST h5stat_help1.ddl -h -TOOLTEST h5stat_help2.ddl --help - -# Test file with groups, compressed datasets, user-applied fileters, etc. -# h5stat_filters.h5 is a copy of ../../testfiles/tfilters.h5 as of release 1.8.0-alpha4 -TOOLTEST h5stat_filters.ddl h5stat_filters.h5 -TOOLTEST h5stat_filters-file.ddl -f h5stat_filters.h5 -TOOLTEST h5stat_filters-F.ddl -F h5stat_filters.h5 -TOOLTEST h5stat_filters-d.ddl -d h5stat_filters.h5 -TOOLTEST h5stat_filters-g.ddl -g h5stat_filters.h5 -TOOLTEST h5stat_filters-dT.ddl -dT h5stat_filters.h5 -# h5stat_tsohm.h5 is a copy of ../../../test/tsohm.h5 generated by tsohm.c -# as of release 1.8.0-alpha4 -TOOLTEST h5stat_tsohm.ddl h5stat_tsohm.h5 -# h5stat_newgrat.h5 is generated by h5stat_gentest.c -TOOLTEST h5stat_newgrat.ddl h5stat_newgrat.h5 -echo - - -if test $nerrors -eq 0 ; then - echo "All $STAT tests passed." -fi - -exit $nerrors - -- cgit v0.12