************************************************************************
         HDF5 Build and Install Instructions for MinGW
************************************************************************

NOTE:
We are no longer actively supporting MinGW as of 1.8.5. 
Below are the instructions from the 1.8.4 release.

************************************************************************
************************************************************************
************************************************************************

Preconditions:
--------------

1. Installed MinGW (5.1.6 or higher) and MSYS (1.0.11 or higher)

   To install the MinGW net release, go to http://www.mingw.org and 
   follow the instructions for a manual installation.

2. Compilers Installed

   2.1 C/C++ Compilers HDF5-1.8.4 Supported

       gcc-4.4.0 is included in MinGW, which includes: 
       gcc    : GNU C compiler
       gcc-g++: GNU C++ compiler
       gfortran: GNU Fortran compiler

   2.2 Using Compilers Not Supported
       
       The compilers in 2.1 are supported and tested by The HDF 
       Group. Any other compilers may still work but they are not 
       guaranteed by HDF group.

       If users want to use other compilers except those in 2.1,
       try to set the following variables to override the default 
       choices.
       
       CC  : C compiler command
       CXX : C++ compiler command
       FC  : Fortran compiler command
       
3. HDF5 Dependencies

   3.1 Zlib

       zlib-1.2.2 or later is supported and tested on MinGW.

   3.2 Szip
       The HDF5 library has a predefined compression filter that uses
       the extended-Rice lossless compression algorithm for chunked
       datatsets. For more information about Szip compression and 
       license terms see 
       http://hdfgroup.org/HDF5/doc_resource/SZIP/index.html.
      
       Szip is currently not supported on MinGW, although we plan to add
       support in the future.


Build HDF5 on MinGW
----------------------

1. Get HDF5 source code package
   Users can download HDF5 source code package from HDF website
   (http://hdfgroup.org). 
     
2. Unpacking the distribution

   The HDF5 source code is distributed in a variety of formats which
   can be unpacked with the following commands, each of which creates 
   an `hdf5-1.8.4' directory.

   2.1 Non-compressed tar archive (*.tar)

            $ tar xf hdf5-1.8.4.tar

   2.2 Gzip'd tar archive (*.tar.gz)

            $ gunzip < hdf5-1.8.4.tar.gz | tar xf -

   2.3 Bzip'd tar archive (*.tar.bz2)

            $ bunzip2 < hdf5-1.8.4.tar.bz2 | tar xf - 
            
3. Setup Environment

   Building HDF5 1.8.4 requires an explicit link to libws2_32.a
   to handle Windows Sockets.  To do this, issue the command:
   
            $ export LIBS=-lws2_32
            
   Also, the default search path can cause trouble using ./configure in HDF5
   1.8.4.  Check that non-MinGW or non-msys directories are not added to the
   PATH.  You can do this by:
   
            $ echo $PATH
            
   If there are spurious entries, specifically those related to other Windows
   compilers or tools, remove them by setting a new PATH without them.  For
   example,
   
            $ export PATH=.:/usr/local/bin:/mingw/bin:/bin

            
4. Remove Unsupported Source

   There are some projects which are built by default to test performance on
   POSIX systems.  They are irrelevent on MinGW, and can cause compiler errors.
   
   To remove these projects from the build script, open ./perform/Makefile.in
   Find all instances of "h5perf_serial", and remove them (along with their
   respective extension or targets, if they exist).  Then save the file.
   
   
5. Remove Tests
   
   When building with MinGW, many tests must be removed from the
   test suite run with "make check".  This is because of the way
   MinGW and Windows handles certain parsing.  For example, MinGW
   treats any command parameter starting with '/' as a path, and
   replaces it with it's root directory on Windows, such as
   'C:\msys\1.0\'.
   
   To remove the tests, open the given 'Makefile.in' and edit the
   line begining with "TEST_SCRIPT = " to remove the test script.
   For example, to remove the "testerror.sh" from ./test/Makefile.in:
   
        1) Open ./test/Makefile.in
        
        2) Find the line "TEST_SCRIPT = $(top_srcdir)/test/testerror.sh"
        
        3) Change it to simply read "TEST_SCRIPT =", and save.
        
   Do this for the following Makefiles and tests:
   
        - ./test/Makefile.in: "testerror.sh testlibinfo.sh testcheckinfo.sh"
        
        - ./tools/h5diff/Makefile.in: "testh5diff.sh"
        
        - ./tools/h5ls/Makefile.in: "testh5ls.sh"
        
        - ./tools/misc/Makefile.in: "testh5mkgrp.sh"
        
        - ./tools/h5copy/Makefile.in: "testh5copy.sh"
        
        - ./tools/h5stat/Makefile.in: "testh5stat.sh"
        
        - ./tools/h5dump/Makefile.in: "testh5dump.sh" and "testh5dumpxml.sh"
        
        
6. Configuring 
     
   Notes: 
       1) Note: MinGW is c++ package is missing the libstdc++.dll.a file
          and c++ linking fails. Do not enable c++ option in configure.
       
       2) See detailed information in hdf5/release_docs/INSTALL, 
          part 5. Full installation instructions for source 
          distributions
     
   In short,
     
   To configure HDF5 with C Library, use 
            
            $ ./configure
                   
   If you would like to build the C++ library, add the parameter:

            --enable-cxx (12-11-2009 MinGW C++ package is missing a file)
                                                         
   If you would like to build without the Zlib library, add the parameter:
     
           --without-zlib
           
   If you would like to specify the the Zlib library, there are two ways:
     
     Using

           --with-zlib=INCDIR,LIBDIR

       For example, if the zlib library is installed in
       /usr, which is the parent directory of directories
       "include" and "lib", 

           --with-zlib=/usr/include,/usr/lib

     Through the CPPFLAGS and LDFLAGS Variables
           
       For example, if zlib was installed in the directory 
       /c/usr then using the following command to configure 
       HDF5 with zib

           $ export CPPFLAGS=-I/usr/include
           $ export LDFLAGS=-L/usr/lib

   If you would like to specify the install directory, add the parameter:

            --prefix="path for installation"
                 
       By default, HDF5 library, header files, examples, and 
       support programs will be installed in /usr/local/lib,
       /usr/local/include, /usr/local/doc/hdf5/examples, and
       /usr/local/bin. To use a path other than /usr/local specify 
       the path with the `--prefix=PATH' switch as in the above
       command.

   Combination of Switches 

       All of the above switches can be combined together. For 
       example, if users want to configure HDF5 C/Fortran
       library, with zlib library at /c/usr/, and 
       install HDF5 into directory /c/hdf5 using 
       gcc/gfortran as C/Fortran compiler:
     
           $ ./configure
             --with-zlib=/usr/include,/usr/lib
             --prefix=/c/hdf5
             --enable-fortran
             <"If no more switches, then hit Enter">

       Notes: The command format above is for readilibity. In practice,
              please type in the command above with at least one
              space between each line, No "Enter" until users finish 
              the switches and want to run the configure. 

 
     or do it through CPPFLAGS and LDFLAGS variables:
     
           $ CPPFLAGS=-I/usr/include \
           $ LDFLAGS=-L/usr/lib \

           $ ./configure
             --prefix=/c/hdf5
             --enable-fortran
             <"If no more switches, then hit Enter">
                          
7. Make and Make Check

   After configuration is done successfully, run the following series of
   commands to build, test and install HDF5
    
            $ make          > "output file name"
            $ make check    > "output file name"
            
   Before run "make install", check output file for "make check", there
   should be no failures at all.

8. Make Install

            $ make install  > "output file name"
   
     
9. Check installed HDF5 library

   After step 8, go to your installation directory, there should be 
   three subdirectories: "bin" "include" and "lib".

            $ make installcheck  > "output file name"

-----------------------------------------------------------------------

Need Further assistance, email help@hdfgroup.org
