configuring HDF5 2/17/06 Configure has a lot of options. Don't be intimidated! You'll probably never have to worry about most of them. For a quick summary of the possible options, use the --help option. The first options listed are standard options for configure and allow users to control what platform configure targets, where the Makefiles are told to install HDF5, etc. These options should be documented in configure's documentation (look for documentation for GNU autoconf). To see only options that are specific to HDF5, look at the options that are listed under "Optional Features", or use the --help=short option with configure to list only these options. enable/disable commands All of the following commands can be enabled with --enable-foo and disabled with --enable-foo=no or --disable-foo. --enable-maintainer-mode Users should not enable this mode. Maintainer mode attempts to automatically run the GNU autotools (autoconf, automake, etc.) to regenerate any out-of-date files. In principle, this is an alternative to the reconfigure script, but the reconfigure script also checks the version numbers of the autotools and modifies the root-level makefile, so even maintainers should not enable maintainer mode at present. --disable-hsizet If this option is enabled, the hsize_t typedef uses the largest type of integer available on a machine (typically a 64-bit integer). Disabling this option forces hsize_t to be the same as size_t for that machine. It's possible to reduce the size of HDF5 files slightly be disabling this option, but that generally limits the maximum file able to be accessed to 32-bit offsets. --disable-dependency-tracking --enable-dependency-tracking Automake's automatic dependency tracking records dependencies between source files so that when one file is changed all the objects that depend on it are rebuilt. This is a necessity for developers, but users who don't plan on changing any of HDF5's source files can configure with --disable-dependency-tracking to speed up their build. HDF5's default is to enable dependency tracking in all cases. This is not the default for automake, which disables dependencies on some machines where computing dependencies is very slow. Dependency tracking can also cause trouble on some platforms. --enable-fortran --enable-cxx HDF5's C interface is always compiled. These options cause the Fortran and C++ interfaces to be compiled and installed (during "make install"). --enable-static-exec If this option is enabled, all utilities and examples will be linked statically even if shared libraries are built. --enable-shared, --disable-shared --enable-static, --disable-static Libtool is able to build both shared (.la) and static (.lib) libraries. By default, it tries to build both, but either can be disabled. Trying to disable both will cause an error at configure time (since that would result in no libraries being built!). Many platforms don't support shared libraries, and some platforms don't support shared fortran libraries. Many of these platforms will automatically disable shared libraries (and thus will cause an error if --disable-shared is also used). --enable-fast-install No idea. --disable-libtool-lock No idea. --enable-production Controls how the compiler is run. Current settings include "yes" "no" "profile" and "user-defined". By default, HDF5 uses development mode (--enable-production="no"). Users probably want to build in production mode (--enable-production="yes"). What these modes mean varies somewhat from platform to platform, but production mode will generally try to enable optimizations. Development mode, the default, adds compiler flags for debugging (in addition to what --enable-debug does). Profile mode adds flags to allow a performance profiler to measure HDF5's performance. User-defined mode adds no flags at all beyond what the user specifies in the environment variables. --enable-linux-lfs Large file sizes on linux? I assume this works, since I think we still support it. --enable-threadsafe If this option is enabled, the library is compiled to use pthread semaphores to enable the library to be thread-safe. The current use of the semaphores only allows one thread to be executing in the library at a time, so the library is thread-safe, but not concurrent. --enable-hdf5v1_6 Attempts to build HDF5 to duplicate the API of HDF5 version 1.6. This may be useful for users who wish to use the latest version of HDF5 but don't want to change their programs to conform to any API changes between versions 1.6 and 1.8 of HDF5. This functionality may not be thoroughly tested, so users should use it cautiously. The API changes between versions 1.6 and 1.8 should be relatively small, so users should consider updating their programs to be compatible with 1.8. --enable-stream-vfd Enables building the stream VFD in the library. Users may with to disable this if their machine doesn't support using UNIX socket API calls. --enable-debug This should enable compiler flags for debugging, but it may do nothing at the moment. Enables compiler flags for debugging. This can be done at the HDF5 package level. Available packages are: "ac,b,d,e,f,g,hg,hl,i,mf,mm,o,p,s,t,v,z". This list will be used if --enable-debug=all is supplied on the configure line. By default, or when --enable-debug=yes is specified, debugging flags are used for the following packages: "d,e,f,g,hg,i,mm,o,p,s,t,v,z" Users can specify specific packages with --enable-debug="mm,s,z" (for example) or disable debugging flags with --enable-debug=no. --enable-funcstack Enables the internal "funtion stack" routines in the library, for easier debugging by developers. Enabling this can slow down library operations and it should be disabled by users for production installations. --enable-trace HDF5 has macros that allow API calls to be traced through the library, which can help in debugging. By default, this feature is on if debugging is enabled, and off if debugging is disabled. --enable-instrument Enables instrumentation? Not sure if this has been tested for a long time. --enable-parallel Build parallel version of HDF5 using MPI-IO. This will look for mpicc or mpi support files and fail if it is unable to find them. --enable-fphdf5 Enables the experimental "Flexible Parallel HDF5" virtual file driver. This has known bugs and should only be used by knowledgable developers looking to experiment with this particular feature. --enable-filters (=all, =no, =SHUFFLE, FLETCHER32, NBIT, SCALEOFFSET) Enables all, none, or some of HDF5's internal data filters. See HDF5's documentation for more information on what the filters are and what they are used for. The default is to build with all filters enabled. --enable-dconv-exception Allows the user to specify exception functions to handle data conversions. This gives the user more flexibility to control how data conversion (e.g., from double to float) is handled, but at the expense of some performance, since an exception function must be checked for each time a conversion is performed. The default is to enable data conversion exception handling. --enable-dconv-accuracy Guarantee accuracy during data conversion. This can reduce the speed of the conversions in some situations. --enable-hl Compiles the High-Level library, which contains useful APIs for working with HDF5 files. If C++ or Fortran interfaces are enabled, this will also build the high-level C++ and high-level Fortran libraries. --enable-build-all Only developers should need this option. There are some programs that are included with HDF5 that do not need to be built regularly, but should still be able to be built (for instance, programs to generate HDF5 files used in tests). This option causes all programs to be built, either to run these programs or to test that they are still compatible with the library. --with-dmalloc=... --with-zlib=... --with-szlib=... --with-pthread=... --with-mpe=... There are a number of external packages that HDF5 can take advantage of. To build HDF5 with the zlib library, for instance, first install zlib (which probably has its own configure script and makefiles). Then configure HDF5 with the option --with-zlib=/path/to/zlib . You can supply a number of packages in this way. The path you give can have one element or two. For instance: --with-zlib=/users/foobar/zlib will look in /users/foobar/zlib/include/ and /users/foobar/zlib/lib/ for include and library files, respectively. Alternately, you could type: --with-zlib=/users/foobar/zlib/include/,/users/foobar/zlib/lib/ to achieve the same effect (which is useful if zlib is installed in a nonstandard way). Environment Variables CC: the C compiler. If this is not set, configure will attempt to detect a default compiler on your system. If configure complains that it is having trouble compiling programs, this is the first place you should look. CPPFLAGS: C and C++ preprocessor flags. If you have headers that HDF5 needs to include located in a nonstandard directory, use the -I flag to include them here. CFLAGS: C compiler flags. Specify any flags that the C compiler needs here. If you want to build with optimization, or to enable 64-bit mode, this is where to put the flag. LDFLAGS: Linker flags. Use this to link against libraries in a nonstandard directory. FC: the Fortran compiler, like CC. Again, this is the place to start investigating any Fortran problems. F9X: depreciated. Currently does the same thing as FC. If both F9X and FC are set, FC takes precedence. FCFLAGS: Fortran compiler flags. Like CFLAGS. In some cases the Fortran libraries will not compile properly if unusual options are specified in CFLAGS but not in FCFLAGS (for instance, if the C library is 64-bit and the Fortran library is not). F9XFLAGS: depreciated. Does the same as FCFLAGS, but FCFLAGS takes precedence. CXX: the C++ compiler. Like CC. CXXFLAGS: C++ compiler flags. Like CFLAGS. CPP: The C preprocessor. On most platforms, setting the C compiler correctly is sufficient. CXXCPP: C++ preprocessor. Like CPP. F77, FFLAGS: These flags are not used by HDF5. If Fortran builds behave oddly, it might be worth making sure that they are not set.