Salome HOME
Merge from V6_main 28/02/2013
[plugins/netgenplugin.git] / adm_local / unix / config_files / check_NETGEN.m4
index 2738aeb54cf8582f547117bfdb350d725368ce9e..5aa0eebe745e25eed7d36bbcd260ccae1a71b964 100644 (file)
@@ -24,233 +24,223 @@ AC_DEFUN([CHECK_NETGEN],[
 
 AC_REQUIRE([AC_PROG_CXX])dnl
 AC_REQUIRE([AC_PROG_CXXCPP])dnl
+AC_REQUIRE([CHECK_CAS])dnl
 
-AC_CHECKING(for Netgen 4.5 and higher Libraries)
+AC_CHECKING([for Netgen])
 
 AC_LANG_SAVE
 AC_LANG_CPLUSPLUS
 
-AC_ARG_WITH(netgen,
-           [  --with-netgen=DIR root directory path of NETGEN installation],
-           NETGEN_HOME=$withval,NETGEN_HOME="")
+AC_ARG_WITH([netgen],
+           [AC_HELP_STRING([--with-netgen=DIR], [root directory path to NETGEN library installation])],
+           [NETGEN_HOME=$withval],[NETGEN_HOME=yes])
 
 NETGEN_INCLUDES=""
-NETGEN_LIBS_DIR=""
 NETGEN_LIBS=""
-NETGEN_NEW=no
+NETGEN_V5=no
 
-Netgen_ok=no
-
-if test "x$NETGEN_HOME" == "x" ; then
+AC_SUBST(NETGEN_INCLUDES)
+AC_SUBST(NETGEN_LIBS)
 
-# no --with-netgen option used
-   if test "x$NETGENHOME" != "x" ; then
+Netgen_ok=no
 
-    # NETGENHOME environment variable defined
-      NETGEN_HOME=$NETGENHOME
+if test "x$NETGEN_HOME" = "x" -o "x$NETGEN_HOME" = "xyes" -o "x$NETGEN_HOME" = "xauto" ; then
+  # auto-detection
 
-   fi
-# 
+  if test "x$NETGENHOME" != "x" ; then
+    # - by environment variable NETGENHOME
+    NETGEN_HOME=$NETGENHOME
+  else
+    # - by searching NETGEN executables
+    AC_PATH_PROG([TEMP], [ng_stl])
+    if test "x$TEMP" != "x" ; then
+      NETGEN_BIN_DIR=`dirname $TEMP`
+      NETGEN_HOME=`dirname $NETGEN_BIN_DIR`
+    else
+      NETGEN_HOME=""
+    fi
+  fi 
 fi
 
-if test "x$NETGEN_HOME" != "x"; then
+echo NETGEN_HOME=$NETGEN_HOME
 
-  if test -f ${NETGEN_HOME}/lib/libnglib.so ; then
-    NETGEN_NEW=yes  
-  fi
+if test "x$NETGEN_HOME" != "x"; then
 
-  echo ----------------------------------------------------------
   echo ----------------------------------------------------------
   echo You are about to choose to use somehow the
   echo Netgen Library to generate Tetrahedric mesh.
-  echo ----------------------------------------------------------
-  echo ----------------------------------------------------------
+  echo
   echo You are strongly advised to consult the file
   echo NETGENPLUGIN_SRC/src/NETGEN/ReadMeForNgUsers, particularly
   echo about assumptions made on the installation of the Netgen
   echo application and libraries.
   echo ----------------------------------------------------------
-  echo ----------------------------------------------------------
-
-  NETGEN_INCLUDES="-I${NETGEN_HOME}/include"
 
-  if test "$NETGEN_NEW" = "yes" ; then
-    NETGEN_INCLUDES="${NETGEN_INCLUDES} -DNETGEN_NEW -I${NETGEN_HOME}/share/netgen/include"
-  fi
-
-  # check ${NETGEN_HOME}/lib/LINUX directory for libraries
-  if test -f ${NETGEN_HOME}/lib/LINUX/libcsg.a ; then
-       NETGEN_LIBS_DIR="${NETGEN_HOME}/lib/LINUX"
-  else
-       # check ${NETGEN_HOME}/lib/LINUX64 directory for libraries
-       if test -f ${NETGEN_HOME}/lib/LINUX64/libcsg.a ; then
-               NETGEN_LIBS_DIR="${NETGEN_HOME}/lib/LINUX64"
-       else
-               NETGEN_LIBS_DIR="${NETGEN_HOME}/lib"
-       fi
-  fi
-
-  echo "NETGEN_LIBS_DIR = $NETGEN_LIBS_DIR"
+  NETGEN_INCLUDES="-I${NETGEN_HOME}/include -I${NETGEN_HOME}/share/netgen/include"
+  NETGEN_LIBS="-L${NETGEN_HOME}/lib -lnglib"
   
+  dnl check Netgen headers availability 
+
   CPPFLAGS_old="$CPPFLAGS"
   CXXFLAGS_old="$CXXFLAGS"
   CPPFLAGS="$CAS_CPPFLAGS $NETGEN_INCLUDES $CPPFLAGS"
-  CXXFLAGS="$CAS_CPPFLAGS $NETGEN_INCLUDES $CXXFLAGS"
-
-  AC_MSG_CHECKING(for Netgen header file)
-
-  AC_CHECK_HEADER(nglib.h,Netgen_ok=yes,Netgen_ok=no)
-  if test "x$Netgen_ok" == "xyes"; then
-
-    if test "$NETGEN_NEW" = "no" ; then
-
-    AC_MSG_CHECKING(for Netgen libraries)
-
-    LIBS_old="$LIBS"
-    LIBS="-L. -lNETGEN $CAS_LDPATH -lTKernel -lTKMath -lTKG3d -lTKBRep -lTKShHealing -lTKSTEP -lTKXSBase -lTKIGES -lTKSTL -lTKTopAlgo $LIBS"
-
-    AC_TRY_COMPILE(#include <iostream>
-#include <fstream>
-namespace nglib {
-#include "nglib.h"
-}
-#define OCCGEOMETRY
-#include <occgeom.hpp>
-,nglib::Ng_Init();
- netgen::OCCGeometry occgeo;
- nglib::Ng_Exit();,Netgen_ok=yes;ar x "$NETGEN_LIBS_DIR/libnginterface.a";
-           ar x "$NETGEN_LIBS_DIR/libocc.a";
-            ar x "$NETGEN_LIBS_DIR/libcsg.a";
-            ar x "$NETGEN_LIBS_DIR/libgprim.a";
-            ar x "$NETGEN_LIBS_DIR/libmesh.a";
-            ar x "$NETGEN_LIBS_DIR/libopti.a";
-            ar x "$NETGEN_LIBS_DIR/libgen.a";
-            ar x "$NETGEN_LIBS_DIR/libla.a";
-            ar x "$NETGEN_LIBS_DIR/libstlgeom.a";
-            ar x "$NETGEN_LIBS_DIR/libgeom2d.a";
-            $CXX -shared linopt.o bfgs.o linsearch.o global.o bisect.o meshtool.o refine.o ruler3.o improve3.o adfront3.o tetrarls.o prism2rls.o profiler.o pyramidrls.o pyramid2rls.o netrule3.o ruler2.o meshclass.o improve2.o adfront2.o netrule2.o triarls.o geomsearch.o secondorder.o meshtype.o parser3.o quadrls.o specials.o parser2.o meshing2.o meshing3.o meshfunc.o localh.o improve2gen.o delaunay.o boundarylayer.o msghandler.o meshfunc2d.o smoothing2.o smoothing3.o topology.o curvedelems_new.o clusters.o zrefine.o ngexception.o geomtest3d.o geom2d.o geom2dmesh.o geom3d.o adtree.o transform3d.o geomfuncs.o polynomial.o densemat.o vector.o basemat.o sparsmat.o algprim.o brick.o manifold.o bspline2d.o meshsurf.o csgeom.o polyhedra.o curve2d.o singularref.o edgeflw.o solid.o explicitcurve2d.o specpoin.o gencyl.o revolution.o genmesh.o genmesh2d.o spline3d.o surface.o identify.o triapprox.o meshstlsurface.o stlline.o stltopology.o stltool.o stlgeom.o stlgeomchart.o stlgeommesh.o table.o optmem.o spbita2d.o hashtabl.o sort.o flags.o seti.o bitarray.o array.o symbolta.o mystring.o moveablemem.o spline.o splinegeometry.o ngnewdelete.o nglib.o hprefinement.o Partition_Inter2d.o Partition_Loop.o Partition_Loop3d.o Partition_Inter3d.o Partition_Loop2d.o Partition_Spliter.o occgeom.o occgenmesh.o occmeshsurf.o -o libNETGEN.so;
-            rm -rf linopt.o bfgs.o linsearch.o global.o bisect.o meshtool.o refine.o ruler3.o improve3.o adfront3.o tetrarls.o prism2rls.o profiler.o pyramidrls.o pyramid2rls.o netrule3.o ruler2.o meshclass.o improve2.o adfront2.o netrule2.o triarls.o geomsearch.o secondorder.o meshtype.o parser3.o quadrls.o specials.o parser2.o meshing2.o meshing3.o meshfunc.o localh.o improve2gen.o delaunay.o boundarylayer.o msghandler.o meshfunc2d.o smoothing2.o smoothing3.o topology.o curvedelems_new.o clusters.o zrefine.o ngexception.o geomtest3d.o geom2d.o geom2dmesh.o geom3d.o adtree.o transform3d.o geomfuncs.o polynomial.o densemat.o vector.o basemat.o sparsmat.o algprim.o brick.o manifold.o bspline2d.o meshsurf.o csgeom.o polyhedra.o curve2d.o singularref.o edgeflw.o solid.o explicitcurve2d.o specpoin.o gencyl.o revolution.o genmesh.o genmesh2d.o spline3d.o surface.o identify.o triapprox.o meshstlsurface.o stlline.o stltopology.o stltool.o stlgeom.o stlgeomchart.o stlgeommesh.o table.o optmem.o spbita2d.o hashtabl.o sort.o flags.o seti.o bitarray.o array.o symbolta.o mystring.o moveablemem.o spline.o splinegeometry.o ngnewdelete.o nglib.o hprefinement.o Partition_Inter2d.o Partition_Loop.o Partition_Loop3d.o Partition_Inter3d.o Partition_Loop2d.o Partition_Spliter.o occgeom.o occgenmesh.o occmeshsurf.o csgparser.o dynamicmem.o extrusion.o occconstruction.o parthreads.o readuser.o writeabaqus.o writediffpack.o writeelmer.o writefeap.o writefluent.o writegmsh.o writejcm.o writepermas.o writetecplot.o writetochnog.o writeuser.o wuchemnitz.o,
-            Netgen_ok=no)
-
-    AC_CACHE_VAL(salome_cv_netgen_lib,[
-                 AC_TRY_LINK([
+  CXXFLAGS="$CAS_CXXFLAGS $NETGEN_INCLUDES $CXXFLAGS"
+
+  AC_MSG_CHECKING([for Netgen header file])
+
+  AC_CHECK_HEADER([nglib.h], [Netgen_ok=yes], [Netgen_ok=no])
+
+  dnl check Netgen libraries
+
+  LIBS_old="$LIBS"
+  LIBS="$NETGEN_LIBS $CAS_LDPATH -lTKernel -lTKMath -lTKG3d -lTKBRep -lTKShHealing -lTKSTEP -lTKXSBase -lTKIGES -lTKSTL -lTKTopAlgo -lTKGeomBase $LIBS"
+
+  if test "x$Netgen_ok" = "xyes"; then
+
+    AC_MSG_CHECKING([for Netgen libraries])
+
+    AC_CACHE_VAL([salome_cv_netgen_lib],
+                 [AC_TRY_LINK(
+                   [
                      #include <iostream>
                      #include <fstream>
                      namespace nglib {
                      #include "nglib.h"
                      }
-                     #define OCCGEOMETRY
-                     #include <occgeom.hpp>
-                  ],[
+                   ],
+                   [
                      nglib::Ng_Init();
-                     netgen::OCCGeometry occgeo;
                      nglib::Ng_Exit();
-                  ],
-                  [eval "salome_cv_netgen_lib=yes";rm -rf libNETGEN.so],
-                  [eval "salome_cv_netgen_lib=no";rm -rf libNETGEN.so])
-    ])
+                   ],
+                   [eval "salome_cv_netgen_lib=yes"],
+                   [eval "salome_cv_netgen_lib=no"])
+                 ])
+
     Netgen_ok="$salome_cv_netgen_lib"
 
-    else
+  fi
+
+  dnl check if Netgen of v5 or v4
 
-      LIBS_old="$LIBS"
-      LIBS="-L${NETGEN_LIBS_DIR} -lnglib $CAS_LDPATH -lTKernel -lTKMath -lTKG3d -lTKBRep -lTKShHealing -lTKSTEP -lTKXSBase -lTKIGES -lTKSTL -lTKTopAlgo -lTKGeomBase $LIBS"
-
-      AC_MSG_CHECKING(for official Netgen libraries)
-      AC_CACHE_VAL(salome_cv_netgen_lib,[
-      AC_TRY_LINK([
-      #include <iostream>
-      #include <fstream>
-      namespace nglib {
-      #include "nglib.h"
-      }
-      ],[
-      nglib::Ng_Init();
-      nglib::Ng_Exit();
-      ],
-      [eval "salome_cv_netgen_lib=yes"],
-      [eval "salome_cv_netgen_lib=no"])
-      ])
-      Netgen_ok="$salome_cv_netgen_lib"
-
-      if test "$Netgen_ok" = "yes" ; then
-      AC_MSG_RESULT(yes)
-      AC_MSG_CHECKING(for occ support in Netgen libraries)
-      AC_CACHE_VAL(salome_cv_netgen_occ_lib,[
-      AC_TRY_LINK([
-      #include <iostream>
-      #include <fstream>
-      #define OCCGEOMETRY
-      namespace nglib {
-      #include "nglib.h"
-      }
-      ],[
-      nglib::Ng_Init();
-      nglib::Ng_OCC_Geometry * ng_occ_geom = nglib::Ng_OCC_NewGeometry();
-      nglib::Ng_Exit();
-      ],
-      [eval "salome_cv_netgen_occ_lib=yes"],
-      [eval "salome_cv_netgen_occ_lib=no"])
-      ])
-      Netgen_ok="$salome_cv_netgen_occ_lib"
-      fi
-
-      if test "$Netgen_ok" = "yes" ; then
-      AC_MSG_RESULT(yes)
-      AC_MSG_CHECKING(for salome patch in Netgen installation)
-      AC_CACHE_VAL(salome_cv_netgen_salome_patch_lib,[
-      AC_TRY_LINK([
-      #include <iostream>
-      #include <fstream>
-      #define OCCGEOMETRY
-      namespace nglib {
-      #include "nglib.h"
-      }
-      #include <occgeom.hpp>
-      ],[
-      nglib::Ng_Init();
-      netgen::OCCGeometry occgeo;
-      nglib::Ng_Exit();
-      ],
-      [eval "salome_cv_netgen_salome_patch_lib=yes"],
-      [eval "salome_cv_netgen_salome_patch_lib=no"])
-      ])
-      Netgen_ok="$salome_cv_netgen_salome_patch_lib"
-      fi
-
-      if test "x$Netgen_ok" == xno ; then
-      AC_MSG_RESULT(no)
-      AC_MSG_ERROR(Netgen is not properly installed. Read NETGENPLUGIN_SRC/src/NETGEN/ReadMeForNgUsers for details.)
-      fi
-
-      NETGEN_LIBS="-L${NETGEN_LIBS_DIR} -lnglib"
+  if test "$Netgen_ok" = "yes" ; then
 
+    AC_MSG_RESULT([yes])
+
+    AC_MSG_CHECKING([Netgen version])
+
+    AC_CACHE_VAL([salome_cv_netgen_v5_lib],
+                 [AC_TRY_LINK(
+                   [
+                     #include <iostream>
+                     #include <fstream>
+                     #define OCCGEOMETRY
+                     namespace nglib {
+                     #include "nglib.h"
+                     }
+                     #include <occgeom.hpp>
+                   ],
+                   [
+                     nglib::Ng_Init();
+                     netgen::Mesh* ngMesh;
+                     ngMesh->CalcLocalH(1.0);
+                     nglib::Ng_Exit();
+                   ],
+                   [eval "salome_cv_netgen_v5_lib=yes"],
+                   [eval "salome_cv_netgen_v5_lib=no"])
+                 ])
+
+    if test "x$salome_cv_netgen_v5_lib" = "xyes" ; then
+      NETGEN_V5=yes
     fi
+  fi
+
+  dnl check OCCT support in Netgen
+
+  if test "$Netgen_ok" = "yes" ; then
+
+    AC_MSG_RESULT([yes])
+
+    AC_MSG_CHECKING([for OCCT support in Netgen library])
+
+    AC_CACHE_VAL([salome_cv_netgen_occ_lib],
+                 [AC_TRY_LINK(
+                   [
+                     #include <iostream>
+                     #include <fstream>
+                     #define OCCGEOMETRY
+                     namespace nglib {
+                     #include "nglib.h"
+                     }
+                   ],
+                   [
+                     nglib::Ng_Init();
+                     nglib::Ng_OCC_Geometry* ng_occ_geom = nglib::Ng_OCC_NewGeometry();
+                     nglib::Ng_Exit();
+                   ],
+                   [eval "salome_cv_netgen_occ_lib=yes"],
+                   [eval "salome_cv_netgen_occ_lib=no"])
+                 ])
+
+    Netgen_ok="$salome_cv_netgen_occ_lib"
 
-    LIBS="$LIBS_old"
   fi
 
+  dnl check SALOME patch in Netgen
+
+  if test "$Netgen_ok" = "yes" ; then
+
+    AC_MSG_RESULT([yes])
+
+    AC_MSG_CHECKING([for SALOME patch in Netgen library])
+
+    AC_CACHE_VAL([salome_cv_netgen_salome_patch_lib],
+                 [AC_TRY_LINK(
+                   [
+                     #include <iostream>
+                     #include <fstream>
+                     #define OCCGEOMETRY
+                     namespace nglib {
+                     #include "nglib.h"
+                     }
+                     #include <occgeom.hpp>
+                   ],
+                   [
+                     nglib::Ng_Init();
+                     netgen::OCCGeometry occgeo;
+                     nglib::Ng_Exit();
+                   ],
+                   [eval "salome_cv_netgen_salome_patch_lib=yes"],
+                   [eval "salome_cv_netgen_salome_patch_lib=no"])
+                 ])
+
+    Netgen_ok="$salome_cv_netgen_salome_patch_lib"
+    
+  fi
+
+  LIBS="$LIBS_old"
   CPPFLAGS="$CPPFLAGS_old"
   CXXFLAGS="$CXXFLAGS_old"
 
-  if test "x$Netgen_ok" == xno ; then
-    AC_MSG_RESULT(no)
-    AC_MSG_ERROR(Netgen libraries not found or not properly installed)
+fi
+
+if test "x$Netgen_ok" = xyes ; then
+
+  AC_MSG_RESULT([yes])
+
+  if test "x$NETGEN_V5" = "xyes" ; then
+    AC_MSG_RESULT([Netgen is of version 5.0 or newer])
+    NETGEN_INCLUDES="$NETGEN_INCLUDES -DNETGEN_V5"
   else
-    AC_MSG_RESULT(yes)
+    AC_MSG_RESULT([Netgen is of version 4.9.13 or older])
   fi
 
 else
 
-    AC_MSG_ERROR(Netgen libraries not found. Please define NETGENHOME or use --with-netgen option)
+  AC_MSG_RESULT([no])
+  AC_MSG_ERROR([Netgen is not properly installed. Read NETGENPLUGIN_SRC/src/NETGEN/ReadMeForNgUsers for more details.])
 
 fi
 
-AC_SUBST(NETGEN_INCLUDES)
-AC_SUBST(NETGEN_LIBS_DIR)
-AC_SUBST(NETGEN_LIBS)
-AM_CONDITIONAL(NETGEN_NEW, [test x"$NETGEN_NEW" = x"yes"])
-
 AC_LANG_RESTORE
 
 ])dnl