Salome HOME
Copyrights update 2015.
[plugins/netgenplugin.git] / adm_local / unix / config_files / check_NETGEN.m4
index 2738aeb54cf8582f547117bfdb350d725368ce9e..fa689bcf7579ad65c4cf87d28a0cdc747ecb3ecc 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+dnl Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
 dnl
 dnl Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -6,7 +6,7 @@ dnl
 dnl This library is free software; you can redistribute it and/or
 dnl modify it under the terms of the GNU Lesser General Public
 dnl License as published by the Free Software Foundation; either
-dnl version 2.1 of the License.
+dnl version 2.1 of the License, or (at your option) any later version.
 dnl
 dnl This library is distributed in the hope that it will be useful,
 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -24,233 +24,237 @@ 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_OLD="-L${NETGEN_HOME}/lib -lnglib"
+  NETGEN_LIBS_NEW="-L${NETGEN_HOME}/lib -lnglib -linterface -lgeom2d -lcsg -lstl -locc -lmesh"
   
+  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([
-                     #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])
-    ])
-    Netgen_ok="$salome_cv_netgen_lib"
+  CXXFLAGS="$CAS_CXXFLAGS $NETGEN_INCLUDES $CXXFLAGS"
 
-    else
+  AC_MSG_CHECKING([for Netgen header file])
 
-      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();
+  AC_CHECK_HEADER([nglib.h], [Netgen_ok=yes], [Netgen_ok=no])
+
+  dnl check Netgen libraries
+
+  NETGEN_LIBS=${NETGEN_LIBS_NEW}
+
+  LIBS_old="$LIBS"
+  LIBS="$NETGEN_LIBS $CAS_LDPATH -lTKernel -lTKMath -lTKG3d -lTKBRep -lTKShHealing -lTKSTEP -lTKXSBase -lTKIGES -lTKSTL -lTKTopAlgo -lTKGeomBase $LIBS_old"
+
+  if test "x$Netgen_ok" = "xyes"; then
+
+    AC_MSG_NOTICE([checking for Netgen libraries])
+
+    AC_MSG_CHECKING([libraries ... try new style ])
+
+    AC_TRY_LINK(
+      [
+        #include <iostream>
+        #include <fstream>
+        namespace nglib {
+        #include "nglib.h"
+        }
       ],
-      [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();
+      [
+        nglib::Ng_Init();
+        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
+      [Netgen_ok=yes],
+      [Netgen_ok=no])
+
+    if test "x$Netgen_ok" = "xno" ; then
+
+        AC_MSG_RESULT([no])
+
+        AC_MSG_CHECKING([libraries ... try old style])
 
-      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=${NETGEN_LIBS_OLD}
+        LIBS="$NETGEN_LIBS $CAS_LDPATH -lTKernel -lTKMath -lTKG3d -lTKBRep -lTKShHealing -lTKSTEP -lTKXSBase -lTKIGES -lTKSTL -lTKTopAlgo -lTKGeomBase $LIBS_old"
 
-      NETGEN_LIBS="-L${NETGEN_LIBS_DIR} -lnglib"
+        AC_TRY_LINK(
+          [
+            #include <iostream>
+            #include <fstream>
+            namespace nglib {
+            #include "nglib.h"
+            }
+          ],
+          [
+            nglib::Ng_Init();
+            nglib::Ng_Exit();
+          ],
+          [Netgen_ok=yes],
+          [Netgen_ok=no])
 
     fi
 
-    LIBS="$LIBS_old"
   fi
 
+  dnl check if Netgen of v5 or v4
+
+  if test "$Netgen_ok" = "yes" ; then
+
+    AC_MSG_RESULT([yes])
+
+    AC_MSG_CHECKING([Netgen version])
+
+    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();
+      ],
+      [NETGEN_V5=yes],
+      [NETGEN_V5=no])
+
+  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_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();
+      ],
+      [Netgen_ok=yes],
+      [Netgen_ok=no])
+
+  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_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();
+      ],
+      [Netgen_ok=yes],
+      [Netgen_ok=no])
+
+  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