From 6a5ad2ea9883245028b4bcdc50c887c57110fff3 Mon Sep 17 00:00:00 2001 From: Guido Kanschat Date: Wed, 29 Mar 2006 10:29:22 +0000 Subject: [PATCH] change NetCDF configuration git-svn-id: https://svn.dealii.org/trunk@12754 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/aclocal.m4 | 42 ++-- deal.II/base/include/base/config.h.in | 7 +- deal.II/base/include/base/exceptions.h | 7 +- deal.II/configure | 316 ++++++++++++++++++++----- deal.II/deal.II/source/grid/grid_in.cc | 8 +- 5 files changed, 286 insertions(+), 94 deletions(-) diff --git a/deal.II/aclocal.m4 b/deal.II/aclocal.m4 index 72efcd0543..b9f2da61d5 100644 --- a/deal.II/aclocal.m4 +++ b/deal.II/aclocal.m4 @@ -4742,8 +4742,6 @@ dnl dnl ------------------------------------------------------------- AC_DEFUN(DEAL_II_CONFIGURE_NETCDF, dnl [ - AC_MSG_CHECKING(for NetCDF library directory) - AC_ARG_WITH(netcdf, [ --with-netcdf=/path/to/netcdf Specify the path to the NetCDF installation, of which the include and library directories are @@ -4758,28 +4756,34 @@ AC_DEFUN(DEAL_II_CONFIGURE_NETCDF, dnl DEAL_II_NETCDF_DIR="$NETCDF_DIR" else DEAL_II_NETCDF_DIR="" - AC_MSG_RESULT(not found) fi ]) - + if test "x$DEAL_II_NETCDF_DIR" != "x" ; then - AC_MSG_RESULT($DEAL_II_NETCDF_DIR) - AC_CHECK_FILE($DEAL_II_NETCDF_DIR/lib/libnetcdf.a, - NETCDF_LIB=$DEAL_II_NETCDF_DIR/lib/libnetcdf.a) - AC_CHECK_FILE($DEAL_II_NETCDF_DIR/lib/libnetcdf_c++.a, - NETCDF_LIB="$DEAL_II_NETCDF_DIR/lib/libnetcdf_c++.a $NETCDF_LIB", - NETCDF_LIB="") - AC_CHECK_FILE($DEAL_II_NETCDF_DIR/include/netcdfcpp.h, - NETCDF_INCLUDE_DIR=-I$DEAL_II_NETCDF_DIR/include, - NETCDF_LIB="") - - if (test "x$NETCDF_LIB" != "x") ; then - AC_DEFINE(DEAL_II_HAVE_NETCDF, 1, - [Flag indicating whether the library shall be compiled to use the NetCDF interface]) - - LIBS="$NETCDF_LIB $LIBS" + CPPFLAGS="-I$DEAL_II_NETCDF_DIR/include $CPPFLAGS" + LDFLAGS="-L$DEAL_II_NETCDF_DIR/lib $LDFLAGS" + if test "$LD_PATH_OPTION" != "no" ; then + LDFLAGS="$LD_PATH_OPTION$DEAL_II_NETCDF_DIR/lib $LDFLAGS" fi fi + + dnl Check for header, if found check for C library, + dnl if successful, HAVE_LIBNETCDF will be set + dnl + dnl if the C++ library is missing, the test will fail + AC_CHECK_HEADER(netcdfcpp.h, AC_CHECK_LIB(netcdf, nc_open)) + + dnl If the C library was found, but not the C++ library + dnl abort configure with an error message + if test "x$HAVE_LIBNETCDF" == "x1" ; then + LIBS="-lnetcdf_c++ $LIBS" + AC_LINK_IFELSE( + [ AC_LANG_PROGRAM([[#include + ]], + [[NcFile test("test")]]) + ],, + AC_MSG_FAILURE([Your NetCDF installation is incomplete: C++ library missing])) + fi ]) diff --git a/deal.II/base/include/base/config.h.in b/deal.II/base/include/base/config.h.in index 1e1e6f9d53..133d5a827d 100644 --- a/deal.II/base/include/base/config.h.in +++ b/deal.II/base/include/base/config.h.in @@ -77,10 +77,6 @@ /* Defined if std::isfinite is available */ #undef DEAL_II_HAVE_ISFINITE -/* Flag indicating whether the library shall be compiled to use the NetCDF - interface */ -#undef DEAL_II_HAVE_NETCDF - /* Flag indicating whether the library shall be compiled to use the Tecplot interface */ #undef DEAL_II_HAVE_TECPLOT @@ -238,6 +234,9 @@ /* Define to 1 if you have the `lapack' library (-llapack). */ #undef HAVE_LIBLAPACK +/* Define to 1 if you have the `netcdf' library (-lnetcdf). */ +#undef HAVE_LIBNETCDF + /* Define if the std c++ library provides a demangler conforming to the GCC libstdc++ interface. */ #undef HAVE_LIBSTDCXX_DEMANGLER diff --git a/deal.II/base/include/base/exceptions.h b/deal.II/base/include/base/exceptions.h index dede4adc26..9bb42f7cae 100644 --- a/deal.II/base/include/base/exceptions.h +++ b/deal.II/base/include/base/exceptions.h @@ -888,10 +888,9 @@ namespace StandardExceptions /** * This function requires the - * NetCDF library. Please set the - * environment variable NETCDF_DIR, - * reconfigure and check if it is - * actually included. + * NetCDF library, which is neither + * in your standard path nor + * configured with --with-netcdf. */ DeclException0 (ExcNeedsNetCDF); /** diff --git a/deal.II/configure b/deal.II/configure index 0a18e84c1a..3f0c139d5c 100755 --- a/deal.II/configure +++ b/deal.II/configure @@ -11027,9 +11027,6 @@ _ACEOF - echo "$as_me:$LINENO: checking for NetCDF library directory" >&5 -echo $ECHO_N "checking for NetCDF library directory... $ECHO_C" >&6 - # Check whether --with-netcdf or --without-netcdf was given. if test "${with_netcdf+set}" = set; then @@ -11043,95 +11040,288 @@ else DEAL_II_NETCDF_DIR="$NETCDF_DIR" else DEAL_II_NETCDF_DIR="" - echo "$as_me:$LINENO: result: not found" >&5 -echo "${ECHO_T}not found" >&6 fi fi; if test "x$DEAL_II_NETCDF_DIR" != "x" ; then - echo "$as_me:$LINENO: result: $DEAL_II_NETCDF_DIR" >&5 -echo "${ECHO_T}$DEAL_II_NETCDF_DIR" >&6 - as_ac_File=`echo "ac_cv_file_$DEAL_II_NETCDF_DIR/lib/libnetcdf.a" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $DEAL_II_NETCDF_DIR/lib/libnetcdf.a" >&5 -echo $ECHO_N "checking for $DEAL_II_NETCDF_DIR/lib/libnetcdf.a... $ECHO_C" >&6 -if eval "test \"\${$as_ac_File+set}\" = set"; then + CPPFLAGS="-I$DEAL_II_NETCDF_DIR/include $CPPFLAGS" + LDFLAGS="-L$DEAL_II_NETCDF_DIR/lib $LDFLAGS" + if test "$LD_PATH_OPTION" != "no" ; then + LDFLAGS="$LD_PATH_OPTION$DEAL_II_NETCDF_DIR/lib $LDFLAGS" + fi + fi + + if test "${ac_cv_header_netcdfcpp_h+set}" = set; then + echo "$as_me:$LINENO: checking for netcdfcpp.h" >&5 +echo $ECHO_N "checking for netcdfcpp.h... $ECHO_C" >&6 +if test "${ac_cv_header_netcdfcpp_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_netcdfcpp_h" >&5 +echo "${ECHO_T}$ac_cv_header_netcdfcpp_h" >&6 else - test "$cross_compiling" = yes && - { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 -echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} - { (exit 1); exit 1; }; } -if test -r "$DEAL_II_NETCDF_DIR/lib/libnetcdf.a"; then - eval "$as_ac_File=yes" + # Is the header compilable? +echo "$as_me:$LINENO: checking netcdfcpp.h usability" >&5 +echo $ECHO_N "checking netcdfcpp.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes else - eval "$as_ac_File=no" + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking netcdfcpp.h presence" >&5 +echo $ECHO_N "checking netcdfcpp.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6 -if test `eval echo '${'$as_ac_File'}'` = yes; then - NETCDF_LIB=$DEAL_II_NETCDF_DIR/lib/libnetcdf.a +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 - as_ac_File=`echo "ac_cv_file_$DEAL_II_NETCDF_DIR/lib/libnetcdf_c++.a" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $DEAL_II_NETCDF_DIR/lib/libnetcdf_c++.a" >&5 -echo $ECHO_N "checking for $DEAL_II_NETCDF_DIR/lib/libnetcdf_c++.a... $ECHO_C" >&6 -if eval "test \"\${$as_ac_File+set}\" = set"; then +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: netcdfcpp.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: netcdfcpp.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: netcdfcpp.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: netcdfcpp.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: netcdfcpp.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: netcdfcpp.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: netcdfcpp.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: netcdfcpp.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: netcdfcpp.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: netcdfcpp.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: netcdfcpp.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: netcdfcpp.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: netcdfcpp.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: netcdfcpp.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: netcdfcpp.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: netcdfcpp.h: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## -------------------------------- ## +## Report this to dealii@dealii.org ## +## -------------------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for netcdfcpp.h" >&5 +echo $ECHO_N "checking for netcdfcpp.h... $ECHO_C" >&6 +if test "${ac_cv_header_netcdfcpp_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - test "$cross_compiling" = yes && - { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 -echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} - { (exit 1); exit 1; }; } -if test -r "$DEAL_II_NETCDF_DIR/lib/libnetcdf_c++.a"; then - eval "$as_ac_File=yes" -else - eval "$as_ac_File=no" -fi + ac_cv_header_netcdfcpp_h=$ac_header_preproc fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6 -if test `eval echo '${'$as_ac_File'}'` = yes; then - NETCDF_LIB="$DEAL_II_NETCDF_DIR/lib/libnetcdf_c++.a $NETCDF_LIB" -else - NETCDF_LIB="" +echo "$as_me:$LINENO: result: $ac_cv_header_netcdfcpp_h" >&5 +echo "${ECHO_T}$ac_cv_header_netcdfcpp_h" >&6 + fi +if test $ac_cv_header_netcdfcpp_h = yes; then - as_ac_File=`echo "ac_cv_file_$DEAL_II_NETCDF_DIR/include/netcdfcpp.h" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $DEAL_II_NETCDF_DIR/include/netcdfcpp.h" >&5 -echo $ECHO_N "checking for $DEAL_II_NETCDF_DIR/include/netcdfcpp.h... $ECHO_C" >&6 -if eval "test \"\${$as_ac_File+set}\" = set"; then +echo "$as_me:$LINENO: checking for nc_open in -lnetcdf" >&5 +echo $ECHO_N "checking for nc_open in -lnetcdf... $ECHO_C" >&6 +if test "${ac_cv_lib_netcdf_nc_open+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - test "$cross_compiling" = yes && - { { echo "$as_me:$LINENO: error: cannot check for file existence when cross compiling" >&5 -echo "$as_me: error: cannot check for file existence when cross compiling" >&2;} - { (exit 1); exit 1; }; } -if test -r "$DEAL_II_NETCDF_DIR/include/netcdfcpp.h"; then - eval "$as_ac_File=yes" + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnetcdf $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char nc_open (); +int +main () +{ +nc_open (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_netcdf_nc_open=yes else - eval "$as_ac_File=no" + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_netcdf_nc_open=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi +echo "$as_me:$LINENO: result: $ac_cv_lib_netcdf_nc_open" >&5 +echo "${ECHO_T}$ac_cv_lib_netcdf_nc_open" >&6 +if test $ac_cv_lib_netcdf_nc_open = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBNETCDF 1 +_ACEOF + + LIBS="-lnetcdf $LIBS" + fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_File'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_File'}'`" >&6 -if test `eval echo '${'$as_ac_File'}'` = yes; then - NETCDF_INCLUDE_DIR=-I$DEAL_II_NETCDF_DIR/include -else - NETCDF_LIB="" + fi - if (test "x$NETCDF_LIB" != "x") ; then -cat >>confdefs.h <<\_ACEOF -#define DEAL_II_HAVE_NETCDF 1 + if test "x$HAVE_LIBNETCDF" == "x1" ; then + LIBS="-lnetcdf_c++ $LIBS" + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ _ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +NcFile test("test") + ; + return 0; +} - LIBS="$NETCDF_LIB $LIBS" - fi +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: Your NetCDF installation is incomplete: C++ library missing +See \`config.log' for more details." >&5 +echo "$as_me: error: Your NetCDF installation is incomplete: C++ library missing +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi diff --git a/deal.II/deal.II/source/grid/grid_in.cc b/deal.II/deal.II/source/grid/grid_in.cc index e7b84e2aec..7d4b6ade04 100644 --- a/deal.II/deal.II/source/grid/grid_in.cc +++ b/deal.II/deal.II/source/grid/grid_in.cc @@ -2,7 +2,7 @@ // $Id$ // Version: $Name$ // -// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 by the deal.II authors +// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 by the deal.II authors // // This file is subject to QPL and may not be distributed // without copyright and license information. Please refer @@ -22,7 +22,7 @@ #include #include -#ifdef DEAL_II_HAVE_NETCDF +#ifdef HAVE_LIBNETCDF #include #endif @@ -756,7 +756,7 @@ void GridIn<1>::read_netcdf (const std::string &) template <> void GridIn<2>::read_netcdf (const std::string &filename) { -#ifndef DEAL_II_HAVE_NETCDF +#ifndef HAVE_LIBNETCDF // do something with unused // filename filename.c_str(); @@ -1013,7 +1013,7 @@ void GridIn<2>::read_netcdf (const std::string &filename) template <> void GridIn<3>::read_netcdf (const std::string &filename) { -#ifndef DEAL_II_HAVE_NETCDF +#ifndef HAVE_LIBNETCDF // do something with the function argument // to make sure it at least looks used, // even if it is not -- 2.39.5