#! /bin/sh
#
# This forms the basis for the nc-config utility, which tells you
# various things about the netCDF installation. This code was
# contributed by netCDF user Arlindo DaSilva. Thanks Arlindo!

prefix="/usr"
exec_prefix="/usr"
libdir="/usr/lib"
includedir="/usr/include"
plugindir="/usr/lib/netcdf/plugin"
pluginsearchpath="/usr/lib/netcdf/plugin:/usr/local/hdf5/lib/plugin"

cc="/usr/bin/mpicc"
cflags="-I/usr/include"
libs="-L/usr/lib -lnetcdf"
libsprivate="-lHDF5::HDF5 -lhdf5::hdf5_hl -lm -lz -lzip -lzstd -lbz2 -lsz -lCURL::libcurl -lPNETCDF::PNETCDF -lxml2"
HAS_STATIC="FALSE"
PRINTLIBS="FALSE"

has_dap2="ON"
if [ -z $has_dap2 -o "$has_dap2" = "OFF" ]; then
    has_dap2="no"
else
    has_dap2="yes"
fi

has_dap4="ON"
if [ -z $has_dap4 -o "$has_dap4" = "OFF" ]; then
    has_dap4="no"
else
    has_dap4="yes"
fi

has_nc2="ON"


if [ -z "$has_nc2" -o "$has_nc2" = "OFF" ]; then
    has_nc2="no"
else
    has_nc2="yes"
fi

has_nc4="ON"
if [ -z "$has_nc4" -o "$has_nc4" = "OFF" ]; then
    has_nc4="no"
else
    has_nc4="yes"
fi

has_logging="ON"
if [ -z "$has_logging" -o "$has_logging" = "OFF" ]; then
    has_logging="no"
else
    has_logging="yes"
fi

has_hdf4=""
if [ -z "$has_hdf4" -o "$has_hdf4" = "OFF" ]; then
    has_hdf4="no"
else
    has_hdf4="yes"
fi

has_pnetcdf="ON"
if [ -z "$has_pnetcdf" -o "$has_pnetcdf" = "OFF" ]; then
    has_pnetcdf="no"
else
    has_pnetcdf="yes"
fi

has_hdf5="ON"
if [ -z "$has_hdf5" -o "$has_hdf5" = "OFF" ]; then
    has_hdf5="no"
else
    has_hdf5="yes"
fi

has_szlib="TRUE"
if [ -z "$has_szlib" -o "$has_szlib" = "OFF" ]; then
    has_szlib="no"
else
    has_szlib="yes"
fi

has_cdf5="AUTO"
if [ -z "$has_cdf5" -o "$has_cdf5" = "OFF" -o "$has_cdf5" = "FALSE" ]; then
    has_cdf5="no"
else
    has_cdf5="yes"
fi

has_parallel4="ON"
if [ -z $has_parallel4 ]; then
    has_parallel4="no"
else
    has_parallel4="yes"
fi

has_parallel="ON"
if [ -z $has_parallel ]; then
    has_parallel="no"
else
    has_parallel="yes"
fi

has_nczarr="ON"
if [ -z "$has_nczarr" -o "$has_nczarr" = "OFF" -o "$has_nczarr" = "FALSE" ]; then
    has_nczarr="no"
else
    has_nczarr="yes"
fi

has_benchmarks="no"
if [ -z "$has_benchmarks" -o "$has_benchmarks" = "OFF" -o "$has_benchmarks" = "FALSE" ]; then
    has_benchmarks="no"
else
    has_benchmarks="yes"
fi

has_multifilters="yes"

has_zstd="ON"
if [ -z "$has_zstd" -o "$has_zstd" = "OFF" -o "$has_zstd" = "FALSE" ]; then
    has_zstd="no"
else
    has_zstd="yes"
fi

has_quantize="yes"
if [ -z "$has_quantize" -o "$has_quantize" = "OFF" -o "$has_quantize" = "FALSE" ]; then
    has_quantize="no"
else
    has_quantize="yes"
fi

version="netCDF 4.9.3"

usage()
{
    cat <<EOF
Usage: nc-config [OPTION]

Available values for OPTION include:

  --help              display this help message and exit
  --all               display all options
  --cc                C compiler
  --cflags            pre-processor and compiler flags
  
  --has-dap2          whether OPeNDAP (DAP2) is enabled in this build
  --has-dap4          whether DAP4 is enabled in this build
  --has-dap           same as --has-dap2 (Deprecated)
  --has-nc2           whether NetCDF-2 API is enabled
  --has-nc4           whether NetCDF-4/HDF-5 is enabled in this build
  --has-hdf5          whether HDF5 is used in build (always the same as --has-nc4)
  --has-hdf4          whether HDF4 was used in build
  --has-logging       whether logging is enabled with --enable-logging.
  --has-pnetcdf       whether PnetCDF was used in build
  --has-szlib         whether szlib is included in build
  --has-cdf5          whether cdf5 support is included in build
  --has-parallel4     whether has parallel IO support via HDF5
  --has-parallel      whether has parallel IO support via HDF5 or PnetCDF
  --has-nczarr        whether nczarr enabled
  --has-zstd          whether zstandard compression enabled
  --has-multifilters  whether multifilter support is enabled
  --has-quanitze      whether quantize support is enabled
  --has-stdfilters    lists the standard filters enabled
  --has-benchmarks    whether benchmarks enabled

  --libs              library linking information for netcdf
  --libs-ac-syntax    forces autotools-compatible syntax argument for libraries
  --static            library linking information for statically-compiled netcdf
  --prefix            Install prefix
  --includedir        Include directory
  --libdir            Library directory
  --plugindir         Plugin install directory
  --plugin-searchpath Plugin search directory
  --version           Library version
  --build-system      Build System

EOF

    exit $1
}

all()
{
        echo
        echo "This $version has been built with the following features: "
        echo
        echo "  --cc               -> $cc"
        echo "  --cflags           -> $cflags"
        echo "  --libs             -> $libs"
        echo "  --static           -> $libsprivate"
        echo

        echo 
        echo "  --has-dap          -> $has_dap2"
        echo "  --has-dap2         -> $has_dap2"
        echo "  --has-dap4         -> $has_dap4"
        echo "  --has-nc2          -> $has_nc2"
        echo "  --has-nc4          -> $has_nc4"
        echo "  --has-hdf5         -> $has_hdf5"
        echo "  --has-hdf4         -> $has_hdf4"
        echo "  --has-logging      -> $has_logging"
        echo "  --has-pnetcdf      -> $has_pnetcdf"
        echo "  --has-szlib        -> $has_szlib"
        echo "  --has-cdf5         -> $has_cdf5"
        echo "  --has-parallel4    -> $has_parallel4"
        echo "  --has-parallel     -> $has_parallel"
        echo "  --has-nczarr       -> $has_nczarr"
        echo "  --has-zstd         -> $has_zstd"
        echo "  --has-benchmarks   -> $has_benchmarks"
        echo "  --has-multifilters -> $has_multifilters"
        echo "  --has-stdfilters   -> deflate szip zstd bz2"
        echo "  --has-quantize     -> $has_quantize"
        echo
        echo "  --prefix            -> $prefix"
        echo "  --includedir        -> $includedir"
        echo "  --libdir            -> $libdir"
        echo "  --plugindir         -> $plugindir"
        echo "  --plugin-searchpath -> $pluginsearchpath"
        echo "  --version           -> $version"
        echo "  --build-system      -> cmake"
        echo
}

if test $# -eq 0; then
    usage 1
fi

for i in "$@"; do
    case $i in
        --libs)
            PRINTLIBS="TRUE"
            ;;
        --static)
            HAS_STATIC="TRUE"
            ;;
        *)
            ;;
    esac
done

while test $# -gt 0; do
    case "$1" in
    # this deals with options in the style
    # --option=value and extracts the value part
    # [not currently used]
    -*=*) value=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
    *) value= ;;
    esac

    case "$1" in

    --help)
        usage 0
        ;;

    --all)
        all
        ;;
    
    --build-system)
        echo "cmake"
        ;;

    --cc)
        echo $cc
        ;;

    --cflags)
        echo $cflags
        ;;

    --plugindir)
        echo $plugindir
        ;;

    --plugin-searchpath)
        echo $pluginsearchpath
        ;;

    --has-dap)
        echo $has_dap2
        ;;

    --has-dap2)
        echo $has_dap2
        ;;

    --has-dap4)
        echo $has_dap4
        ;;

    --has-nc2)
        echo $has_nc2
        ;;

    --has-nc4)
        echo $has_nc4
        ;;

    --has-hdf5)
        echo $has_hdf5
        ;;

    --has-hdf4)
        echo $has_hdf4
        ;;

    --has-logging)
        echo $has_logging
        ;;

    --has-pnetcdf)
        echo $has_pnetcdf
        ;;

    --has-szlib)
        echo $has_szlib
        ;;

    --has-cdf5)
        echo $has_cdf5
        ;;

    --has-parallel4)
        echo $has_parallel4
        ;;

    --has-parallel)
        echo $has_parallel
        ;;

    --has-nczarr)
        echo $has_nczarr
        ;;

    --has-zstd)
        echo $has_zstd
        ;;

    --has-benchmarks)
        echo $has_benchmarks
        ;;

    --has-multifilters)
        echo $has_multifilters
        ;;

    --has-stdfilters)
        echo deflate szip zstd bz2
        ;;

    --has-quantize)
        echo $has_quantize
        ;;

    --libs)
        if [ "x$HAS_STATIC" = "xTRUE" ]; then
            echo $LDFLAGS $libs $libsprivate
        else
            echo $libs
        fi
        ;;
    --libs-ac-syntax)

            libs=$(echo $libs | sed 's/hdf5::hdf5_hl/hdf5_hl/g')
            libs=$(echo $libs | sed 's/HDF5::HDF5/hdf5/g')

            if [ "x$HAS_STATIC" = "xTRUE" ]; then
                libsprivate=$(echo $libsprivate | sed 's/hdf5::hdf5_hl/hdf5_hl/g')
                libsprivate=$(echo $libsprivate | sed 's/HDF5::HDF5/hdf5/g')
                echo $libs $libsprivate
            else
                echo $libs
            fi
        
        ;;
    --static)
        if [ "x$PRINTLIBS" != "xTRUE" ]; then
            echo $LDFLAGS $libs $libsprivate
        fi
        ;;

    --prefix)
        echo "${prefix}"
        ;;

    --includedir)
        echo "${includedir}"
        ;;

    --libdir)
        echo "${libdir}"
        ;;

    --version)
        echo $version
        ;;

    --has-c++)
        echo $has_cxx
        ;;

    --cxx)
        echo $cxx
        ;;

    --cxxflags)
        echo $cxxflags
        ;;

    --cxxlibs)
        echo $cxxlibs
        ;;

    --has-c++4)
        echo $has_cxx4
        ;;

    --cxx4)
        echo $cxx4
        ;;

    --cxx4flags)
        echo $cxx4flags
        ;;

    --cxx4libs)
        echo $cxx4libs
        ;;

    --has-fortran)
        echo $has_fortran
        ;;

    --fc)
        echo $fc
        ;;

    --fflags)
        echo $fflags
        ;;

    --flibs)
        echo $flibs
        ;;

    --has-f90)
        echo $has_f90
        ;;

    --has-f03)
        echo $has_f03
        ;;

    *)
        echo "unknown option: $1"
        usage 1
        ;;
    esac
    shift
done

exit 0
