Cleaned up the configure file a bit.
Description:
There were a few small bugs having to do with checking if strings
were empty. Also needed to force paths to be absolute instead of
relative.
Solution:
I standardized string checking (test -z for an empty string and
test -n for a non-empty string). Also, if the user specifies a
relative path for any of the options, the configure now makes it
into an absolute path for both CPPFLAGS and LDFLAGS macros.
Platforms:
Solaris, Linux
macro didn't work on all systems. This fixes it.
This also introduces the ability to configure for fortran and c++. This
is not to be implemented yet, though!
command form (e.g., cc, gcc) and put that in the libhdf5.settings
file. This would help show exactly which compiler was used during
the configure stage. It may not be 100% "correct" in some cases
such as "configure done in one machine but compiling done in another."
Makefile.in:
acconfig.h:
src/H5F.c:
src/H5FDdpss.c:
src/H5FDdpss.h:
src/H5config.h.in:
test/dpss_read.c:
test/dpss_write.c:
Changed the name DPSS to GRIDSTORAGE since that is the real name
of the API from ANL. DPSS is just one of the protocols it can use.
Changed a bug in the --with-ssl option.
Makefile.in:
Removed the copying of Makefile.dist since it caused problems
when doing a make distclean in a --srcdir configured directory.
Configuration improvement
Problem:
Arabica has a zlib library that is a dynamic lib in /usr/ncsa/lib.
Binary generated would fail to run with a missig libz.so complain
if /usr/ncsa/lib is not in $LD_LIBRARY_PATH. This exposed the
problem that if the binary is linked with -L$mylibpath -lxyz
where libxyz is a dynamic type, the binary can't run if $mylibpath
is not in $LD_LIBRARY_PATH (or equivalent) or as part of the
system default library paths (e.g., /usr/lib, /usr/local/lib).
This problem also caused failures during configure (when trying
to see what format to print long long) and during H5detect.
The base cause is because libtool does not "transfer" the
knowledge of -L$mylibpath to the wrapper file its mode=link
generates.
Solution:
bin/ltmain.sh:
Changed it so that it transfers the libpaths from -Llibpaths
to the wrapper generated. I used the already defined variable
finalize_shlibpath. Not sure it is correct to use it this way.
Need to check on this.
configure.in:
Put in a patch to transfer information from LDFLAGS to LD_LIBRARY_PATH
right before the AC_TRY_RUN. The above fix for ltmain.sh does not
work here because libtool is generated later than this point.
There should be a cleaner way to do this.
Removed the hardcode of NCSA_LT_LINK_EXE because it is no longer
needed.
commence.in:
Removed the hardcode of NCSA_LT_LINK_EXE because it is no longer
needed.
Makefile.in:
Another patch of LDFLAGS to LD_LIBRARY_PATH because I could not
make it to generate H5detect in the wrapper form of libtool.
Need to make it to use the libtool correctly. Later.
Platform tested:
arabica (solaris 2.7)
baldric (solaris 2.6)
New feature
configure.in:
When just --enable-parallel is used, will try to test if MPI and MPI-IO
library codes are linkable. If not, try -lmpi and -lmpio as the most
commonly used library names for them.
Also, set default value for RUNPARALLEL if not set.
Now, for systems, like SGI Crays where there are the system supported
MPI libraries, "./configure --enable-parallel" would configure
correctly.
Configure:
Derived from configure.in via autoconf.
Platform tested:
SGI O2K.
----------------------
./MANIFEST
./configure.in
./configure [REGENERATED]
Added more checking for `make' features.
./Makefile.in
./doc/Makefile.in
./doc/html/Makefile.in
./doc/html/Tutor/Makefile.in
./examples/Makefile.in
./pablo/Makefile.in
./src/Makefile.in
./test/Makefile.in
./testpar/Makefile.in
./tools/Makefile.in
./config/commence.in
./config/conclude.in
./config/depend.in [REMOVED]
./config/depend1.in [NEW]
./config/depend2.in [NEW]
./config/depend3.in [NEW]
./config/depend4.in [NEW]
./config/dependN.in [NEW]
The directory search stuff was moved into commence.in, thereby
shortening the Makefile.in prologues.
./doc/html/Dependencies [NEW]
./doc/html/Tutor/Dependencies [NEW]
./examples/Dependencies [NEW]
./src/Dependencies [NEW]
./test/Dependencies [NEW]
./testpar/Dependencies [NEW]
./tools/Dependencies [NEW]
The `.distdep' files were all renamed to `Dependencies' to make them
more obvious. They are required (but may be empty) in every directory
that has a Makefile.in that ends with @CONCLUDE@ (you'll get an
obvious error from make if you forgot to create one).
./bin/trace
./src/H5.c
Added H5E_major_t and H5E_minor_t although tracing only prints the
integer value.
./src/H5E.c
./src/H5Epublic.h
Added tracing information.
./src/H5FDcore.c
./src/H5FDfamily.c
./src/H5FDgass.c
./src/H5FDmpio.c
./src/H5FDsec2.c
./src/H5FDstdio.c
Fixed places where FUNC_LEAVE() evaluated it's argument more than
once.
Added tracing information.
Wrapped long lines.
./config/gnu-flags
Fixed a syntax error when we don't have a gnu compiler.
Updated.
configure.in:
Removed the test for -lxnet in the GASS-driver part. There is
no need for it and it does not exist in other machines like IRIX64.
configure:
Deriverd from configure.in.
----------------------
./configure.in
./src/H5config.h.in [REGENERATED]
The /usr/ncsa/{include,lib} directories are only added if they
actually exist. This fixes a warning on some systems.
Checks for the <pdb.h> header file and also for either the PDB or Silo
library, and if found prepares to compile the pdb2hdf program.
./config/distdep
Relative path names for include files are changed to base names since
the makefile contains the logic for searching and since it's likely
that building the .distdep files happed from a location other than
where they would be used in the file system.
./config/conclude.in
Fixed shell errors when `for' loops iterate over nothing for the
`uninstall' target.
./src/H5D.c
./src/H5Oefl.c
File names for the external files are added to the heap when the
dataset is created instead of when the object header is written. This
fixes a rare infinite recursion bug.
./src/H5FD.c
./src/H5FDpublic.h
Optimization to the free list causes H5FD_alloc() usage to go from >10
seconds to <0.4 second for one example (converting a 30MB equation of
state file from PDB to HDF5 format). The optimization is to simply
keep track of the largest item in the free list and not search the
free list when the largest item is not big enough to satisfy the
request.
./src/H5FDcore.c
./src/H5FDcore.h
./test/h5test.c
If the `backing_store' property is true then a flush causes the entire
contents of memory to be written to the specified file. This is in
preparation for the ASCI/red optimizations and is currently tested by
the pdb2hdf `--cached' switch.
./src/H5Odtypes.c
Wrapped three long lines.
./tools/Makefile.in
./tools/pdb2hdf.c [NEW]
A PDB-to-HDF5 translator. It only translates meta data -- the
resulting HDF5 points into the PDB file for the raw data.
Added the GASS macro definition entry.
configure:
[Generated from configure.in]
configure.in:
Added Globus GASS driver configuation as --with-gass=INC,LIB option.
Default is no => no GASS configured.
src/H5config.h.in:
[Generated from acconfig.h]
Added the checking for zlib and jpeg libraries when doing the -with-hdf4
option. HDF4 applications in general needs lib mfhdf, df, z, and jpeg.
Removed the earlier alone test for jpeg. It conflicted with the hdf4
tests. Also, moved the hdf5-own library test for zlib after the hdf4
tests so that when hdf4 is used, the results would cover the zlib
test.
configure:
derived from configure.in by autoconf.
Platforms tested:
IRIX 6.5, IRIX64 6.5, Solaris 2.6 (with default gcc, tested h5toh4
tool).
Comments:
This still generates compile commands that listed the "-lmfhdf ..."
library list before the -L/usr/ncsa/lib. I traced the problem to
the libtool. (I stopped at the door and dared not to enter this
libtool cave. :-) Most compilers, except solaris' cc, tolerate
the "duplicated" library list.
Changes since 19990618
----------------------
./configure.in
./configure [REGENERATED]
Now that compound struct conversions don't make so many calls
to convert their members I turned the H5T debugging back on by
default (it will still be disabled in a production version).
./src/H5AC.c
./src/H5B.c
Made it possible to turn off messages about debugging these
two packages using the same method as for all other
packages. Just supply an invalid file descriptor number or use
the shell to redirect said descriptor to /dev/null like this:
$ HDF5_DEBUG=99,ac,b 99>/dev/null a.out
./src/H5T.c
Changed the name of the old compound conversion function from
`struct' to `struct(no-opt)' to be more consistent with the
new version named `struct(opt)'.
Fixed a bug in H5T_cmp() that caused any two VL types to
compare as being equal.
Removed duplicate code for bitfield comparisons in H5T_cmp().
./src/H5Tconv.c
Relaxed some constraints in the new compound conversion
function so it applies to more cases. Also eliminated a
memcpy in a tight loop.
./test/cmpd_dset.c
Added a `--noopt' command line switch which unregisters the
optimized compound conversion so we can test the non-optimized
version.
Changes since 19990616
----------------------
./src/H5T.c
./src/H5Tconv.c
All conversion functions take an extra argument called
`stride' which is the number of bytes to advance the source
and destination pointers after each element is converted. If
the value is zero then the old behavior is preserved (source
and destination values are packed). This feature was necessary
to implement the compound datatype conversion optimizations
and it causes a minor change to the API (application-defined
type conversion functions take an extra size_t stride
argument).
./src/H5Tconv.c
An additional compound data type conversion function was added
which is applied unless the destination type is larger than
the source type. I'm measuring significant performance
increases for certain operations:
Test Name Struct-Conv Noop-Conv
New(Old) MB/s New(Old) MB/s
---------- ------------- -------------
Reordering 2.062(0.3936) 54087(0.9047)
Subsetting 2.901(0.6581) 40192(1.1100)
Shrinking 1.976(0.3925) 33628(1.1500)
---------- ------------- -------------
./test/dtypes.c
Added various compound datatype conversion tests.
Fixed return values from functions.
./src/H5T.c
Conversion timers are updated only if H5T debugging is turned
on a runtime (in addition to compile time). This allows the
data type layer to be compiled with debugging support without
having to pay a big runtime penalty if the debugging isn't
actually used.
./src/H5A.c
./src/H5D.c
./src/H5Ofill.c
./src/H5P.c
./src/H5T.c
./src/H5Tconv.c
./src/H5Tpkg.h
./src/H5Tprivate.h
./src/H5Tpublic.h
Added the stride argument to the H5T_convert() calls. The
stride is always zero, which means that the source and
destination data values are packed.
./configure.in
./configure [REGENERATED]
If API tracing is turned off then libhdf5.settings will say
`no' instead of nothing.
./test/flush1.c
./test/flush2.c
Added better error messages in a couple places.
----------------------
./configure.in
./configure [REGENERATED]
./src/H5T.c
./src/H5Tpkg.h
./src/H5Tpublic.h
./src/H5config.h.in [REGENERATED]
./src/H5detect.c
./src/H5private.h
Added checks for the C9x integer types like int32_t,
int_least32_t, and int_fast32_t and the unsigned
versions. HDF5 defines H5T_NATIVE_* versions (all caps) to be
the same as the type provided by the C library, otherwise it
defines them as integers exactly the specified size. Hardware
type conversion functions are used when the types
match some C-language type (like `int').
----------------------
./configure.in
./configure [REGENERATED]
./src/libhdf5.settings.in [NEW]
./config/conclude.in
./INSTALL
./MANIFEST
A file called `libhdf5.settings' is installed along with the
libraries and it contains a list of various things that might
be of interest to someone using the library (such as what
compiler/options were used and what other libraries might need
to be linked to satisfy external references). We can add more
things as it becomes necessary. Here's a sample...
SUMMARY OF THE HDF5 CONFIGURATION
=================================
HDF5 Version: hdf5-1.1.106
Configured on: Tue Jun 8 11:38:52 EDT 1999
Configured by: matzke@llnl.gov at Spizella Software
Configure mode: development
Host system: i686-pc-linux-gnulibc1
Byte sex: little-endian
Libraries: static, shared
Parallel support: mpicc
Installation point: /usr/local
Compiler: mpicc (egcs-2.91.66)
Compiler switches: -Wall -g
Extra libraries: -lmfhdf -ldf -lz -ljpeg -lm
Archiver: ar
Ranlib: ranlib
Debugged Packages: d,e,f,g,hg,i,mm,o,p,s,v,z
API Tracing: yes
File addresses: large
----------------------
./tools/h5ls.c
Added a `--address' (`-a') switch which causes h5ls to display
file addresses for raw data. For contiguous datasets it's just
a nice simple number, but for chunked datasets it's a list of
logical dataset coordinates, file addresses, filter masks, and
storage sizes.
Changed `--dump' switch to `--data'.
./src/H5D.c
./src/H5F.c
./src/H5Fprivate.h
Enhanced the indexed-storage B-tree iterator so it can dump
raw data addresses (and other info) to the standard error
stream.
Added H5Ddebug() so h5ls has a way to dump addresses for
datasets. I'm not sure what else this API function should do,
so I think we should discuss it before we document it. So far,
h5ls is the only thing that uses it, and we can easily change
that.
./src/H5Tconv.c
./test/dtypes.c
Finally had a chance to verify Paul's H5T_conv_s_s (general
string to string conversions) bug fixes and incorporate them
into H5T_conv_f_f (general floating-point to floating-point
conversions) and H5T_conv_i_i (general integer to integer
conversons). Thanks Paul.
./src/H5D.c
./src/H5S.c
./src/H5Sprivate.h
Added performance timers around data space read and write
callbacks. They were already there for the gather/scatter
callbacks.
The timings for read/write callbacks are displayed along with
gather/scatter when data space debugging is turned on.
./bin/iostats
Updated to print totals. Added a `--fast' option that doesn't
do any output except the totals and is much faster.
./bin/trace
Changed __unused__ to UNUSED to match source code.
./config/gnu-flags
Updated error message for pgcc. I've sent bug reports to the
pgcc people but the new version still has the same bug.
./configure.in
./config/conclude.in
./config/depend.in
Fixed dependencies for non-GNU makes when run in a directory
other than the hdf5 source tree.
Updated GNU `make dep' rules to copy the distributed
dependencies for non-GNU makes into the source tree when run
in some other directory.