From f583ba6eba5957b9b313f2da3987fd105c2b6fe9 Mon Sep 17 00:00:00 2001 From: treecity Date: Wed, 8 Jun 2011 17:59:50 +0000 Subject: [PATCH] =?utf8?q?[src]=20neue=20Version=20von=20bem3d=20[src]=20F?= =?utf8?q?ehler=20aus=20der=20SLPrectangle=20(bem3d)=20und=20simpleLayer..?= =?utf8?q?.=20[src]=20SLPrecangle=20nun=20von=20MEX=20Unabh=C3=A4ngig=20+?= =?utf8?q?=20Verwendung=20von=20M=5FPI=20und=20cout=20[src]=20neu:=20compu?= =?utf8?q?teSlpEstMuTilde=20mark=20->=20Markieren=20Elmente=20die=20verfei?= =?utf8?q?nert=20werden=20sollen=20[src]=20quad=5Fnorm=20->=20quadNorm=20[?= =?utf8?q?src]=20test=5FsolveError=20testet=20und=20plottet=20[src]=20test?= =?utf8?q?=5FsolveError=5F10...=20erste=20Testbeispiele=20(2D/3D)=20[src]?= =?utf8?q?=20refineType=20erweitert=20und=20hei=C3=9Ft=20jetzt=20marked=20?= =?utf8?q?+=20computeSlpEstMuTilde?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: https://drops.fb12.tu-berlin.de/svn/bacc/trunk@33 26120e32-c555-405d-b3e1-1f783fb42516 --- src/SLPrecangle.cpp | 6 +- src/bem3d/.gitignore | 16 + src/bem3d/Makefile | 11 +- src/bem3d/Makefile.am | 2 +- src/bem3d/Makefile.in | 9 +- src/bem3d/aclocal.m4 | 1 + src/bem3d/autom4te.cache/output.2 | 137 +- src/bem3d/autom4te.cache/output.3 | 11019 ++++++++++++++++ src/bem3d/autom4te.cache/requests | 116 +- src/bem3d/autom4te.cache/traces.2 | 246 +- src/bem3d/autom4te.cache/traces.3 | 2097 +++ src/bem3d/config.status | 13 +- src/bem3d/configure | 137 +- src/bem3d/configure.ac | 9 +- src/bem3d/m4/ax_lib_loki.m4 | 82 + src/bem3d/src/HLibOperator_fwd.hpp | 19 + src/bem3d/src/HLibOperator_tmpl.cpp | 84 +- src/bem3d/src/Makefile | 9 +- src/bem3d/src/Makefile.in | 7 +- .../.deps/libhilbert_mesh_a-GenericVector.Po | 47 +- src/bem3d/src/boundary_mesh/Face.hpp | 14 +- src/bem3d/src/boundary_mesh/FaceDispatch.hpp | 82 +- .../src/boundary_mesh/FaceDispatch_tmpl.cpp | 35 +- src/bem3d/src/boundary_mesh/Face_tmpl.cpp | 77 +- src/bem3d/src/boundary_mesh/FlexibleMesh.hpp | 24 +- .../src/boundary_mesh/FlexibleMesh_tmpl.cpp | 11 + src/bem3d/src/boundary_mesh/HalfEdge.hpp | 7 +- src/bem3d/src/boundary_mesh/Makefile | 9 +- src/bem3d/src/boundary_mesh/Makefile.in | 7 +- src/bem3d/src/boundary_mesh/Marker.hpp | 216 +- src/bem3d/src/boundary_mesh/Marker_fwd.hpp | 144 - src/bem3d/src/boundary_mesh/Marker_tmpl.cpp | 205 +- src/bem3d/src/boundary_mesh/Marker_tmpl.hpp | 8 + src/bem3d/src/boundary_mesh/Mesh.cpp | 160 +- src/bem3d/src/boundary_mesh/Mesh.hpp | 47 +- src/bem3d/src/boundary_mesh/MeshBuilder.hpp | 9 +- .../src/boundary_mesh/MeshBuilder_tmpl.cpp | 15 +- .../src/boundary_mesh/RefinementData.hpp | 152 + .../src/boundary_mesh/RefinementData_tmpl.cpp | 291 + src/bem3d/src/boundary_mesh/Vertex.hpp | 70 + src/bem3d/src/boundary_mesh/Vertex_tmpl.cpp | 227 +- .../algorithm/HandleObj_tmpl.cpp | 18 +- .../algorithm/RefineAdaptivly.hpp | 51 + .../algorithm/RefineAdaptivly_tmpl.cpp | 535 + .../algorithm/RefineUniformly.hpp | 33 +- .../algorithm/RefineUniformly_tmpl.cpp | 225 +- .../src/boundary_mesh/face/Rectangle.hpp | 59 + .../src/boundary_mesh/face/Rectangle_tmpl.cpp | 65 + .../src/boundary_mesh/face/Rectangle_tmpl.hpp | 8 + src/bem3d/src/boundary_mesh/face/Triangle.hpp | 2 + .../src/boundary_mesh/face/Triangle_tmpl.cpp | 17 +- .../boundary_mesh/layer/RefinementData.cpp | 187 - .../boundary_mesh/layer/RefinementData.hpp | 117 - src/bem3d/src/boundary_mesh/testhilbertmesh | Bin 1283752 -> 0 bytes src/bem3d/src/boundary_mesh/types.hpp | 2 - src/bem3d/src/generic/BaseTypes.hpp | 8 - src/bem3d/src/generic/GenericVector.hpp | 7 + src/bem3d/src/generic/GenericVector_tmpl.cpp | 25 +- src/bem3d/src/generic/PtrCompare.hpp | 39 + ...enceSemanticsForPtrVectorConstIterator.hpp | 65 + .../src/generic/SingleElementIterator.hpp | 53 + src/bem3d/src/generic/Testing.hpp | 10 + src/bem3d/src/generic/TypeMap.hpp | 29 + src/bem3d/src/generic/TypeMap_tmpl.cpp | 42 + src/bem3d/src/generic/TypeMap_tmpl.hpp | 8 + src/bem3d/src/hilbert.hpp | 2 +- .../.deps/testLaplace-SimpleLayerPotential.Po | 4 +- .../src/laplace/DoubleLayerPotential.cpp | 152 + .../src/laplace/DoubleLayerPotential.hpp | 31 + src/bem3d/src/laplace/Makefile | 9 +- src/bem3d/src/laplace/Makefile.am | 1 - src/bem3d/src/laplace/Makefile.in | 7 +- .../src/laplace/SimpleLayerPotential.cpp | 344 +- .../SimpleLayerPotential.cpp.BACKUP.2711.cpp | 449 + .../SimpleLayerPotential.cpp.BASE.2711.cpp | 176 + .../SimpleLayerPotential.cpp.LOCAL.2711.cpp | 287 + .../SimpleLayerPotential.cpp.REMOTE.2711.cpp | 222 + .../src/laplace/SimpleLayerPotential.hpp | 8 +- src/bem3d/src/laplace/TriangleIntegrator.cpp | 19 + src/bem3d/src/laplace/TriangleIntegrator.hpp | 6 + src/bem3d/src/laplace/t.cpp | 135 +- src/bem3d/src/laplace/testLaplace | Bin 2470530 -> 0 bytes src/bem3d/src/mesh_explorer/Makefile | 113 +- src/bem3d/src/mesh_explorer/mesh_explorer.pro | 2 - .../src/mesh_explorer/moc_MeshWidget.cpp | 6 +- .../.deps/libhilbert_spaces_a-GenericSpace.Po | 1 + .../.deps/libhilbert_spaces_a-P1Space.Po | 1 + src/bem3d/src/spaces/GenericSpace.cpp | 22 + src/bem3d/src/spaces/GenericSpace.hpp | 90 + src/bem3d/src/spaces/GenericSpace_tmpl.cpp | 260 + src/bem3d/src/spaces/HLibSpace.hpp | 35 +- src/bem3d/src/spaces/HLibSpace_tmpl.cpp | 61 + src/bem3d/src/spaces/Makefile | 48 +- src/bem3d/src/spaces/Makefile.am | 5 +- src/bem3d/src/spaces/Makefile.in | 46 +- src/bem3d/src/spaces/P0Space.cpp | 157 +- src/bem3d/src/spaces/P0Space.hpp | 67 +- src/bem3d/src/spaces/P1Space.cpp | 46 + src/bem3d/src/spaces/P1Space.hpp | 39 + src/bem3d/src/spaces/testP0Space | Bin 1713189 -> 0 bytes src/bem3d/t/Makefile | 573 + src/bem3d/t/Makefile.am | 7 + src/bem3d/t/Makefile.in | 573 + src/bem3d/t/boundary_mesh/.deps/Face.Po | 1 + .../.deps/FlexibleMeshAdaptiveRefinement.Po | 1 + .../t/boundary_mesh/.deps/GenericVector.Po | 1 + src/bem3d/t/boundary_mesh/Face.cpp | 141 + .../FlexibleMeshAdaptiveRefinement.cpp | 28 + .../t/boundary_mesh/FlexibleMeshBasics.cpp | 0 .../FlexibleMeshUniformRefinement.cpp | 23 + src/bem3d/t/boundary_mesh/Makefile | 624 + src/bem3d/t/boundary_mesh/Makefile.am | 23 + src/bem3d/t/boundary_mesh/Makefile.in | 624 + src/bem3d/t/generic/.deps/GenericVector.Po | 1 + .../t/generic/.deps/testGenericVector.Po | 1 + src/bem3d/t/generic/GenericVector.cpp | 10 - .../t/generic/GenericVector/01-basics.cpp | 26 - src/bem3d/t/generic/Makefile | 577 + src/bem3d/t/generic/Makefile.am | 13 + src/bem3d/t/generic/Makefile.in | 577 + src/bem3d/t/generic/testGenericVector.cpp | 262 + ...eDoubleLayerPotentialEntry-HLibOperator.Po | 1 + ...eLayerPotentialEntry-TriangleIntegrator.Po | 1 + ...lEntry-computeDoubleLayerPotentialEntry.Po | 1 + ...eSimpleLayerPotentialEntry-HLibOperator.Po | 1 + ...ayerPotentialEntry-SimpleLayerPotential.Po | 1 + ...eLayerPotentialEntry-TriangleIntegrator.Po | 1 + ...lEntry-computeSimpleLayerPotentialEntry.Po | 1 + src/bem3d/t/laplace/Makefile | 732 + src/bem3d/t/laplace/Makefile.am | 31 + src/bem3d/t/laplace/Makefile.in | 732 + .../computeDoubleLayerPotentialEntry.cpp | 77 + .../computeSimpleLayerPotentialEntry.cpp | 113 + .../hilbert3d_printers/__init__.py | 0 .../hilbert3d_printers/generic.py | 20 + src/build_A.cpp | 13 +- src/computeEstSlpMuTilde.m | 18 + src/exmpl_2DQuad.mat | Bin 249 -> 279 bytes src/mark.m | 38 + src/plotShape.m | 4 +- src/{quad_norm.m => quadNorm.m} | 6 +- src/refineType.m | 25 - src/test_solve.m | 2 +- src/test_solveError.m | 123 +- src/test_solveError_1050_2DQuad.fig | Bin 0 -> 73989 bytes src/test_solveError_1050_2DQuad.mat | Bin 0 -> 13067 bytes src/test_solveError_1050_3DFichCube.fig | Bin 0 -> 84753 bytes src/test_solveError_1050_3DFichCube.mat | Bin 0 -> 15897 bytes src/test_solveS.m | 2 +- 149 files changed, 25000 insertions(+), 1362 deletions(-) create mode 100644 src/bem3d/.gitignore create mode 100644 src/bem3d/autom4te.cache/output.3 create mode 100644 src/bem3d/autom4te.cache/traces.3 create mode 100644 src/bem3d/m4/ax_lib_loki.m4 delete mode 100644 src/bem3d/src/boundary_mesh/Marker_fwd.hpp create mode 100644 src/bem3d/src/boundary_mesh/Marker_tmpl.hpp create mode 100644 src/bem3d/src/boundary_mesh/RefinementData.hpp create mode 100644 src/bem3d/src/boundary_mesh/RefinementData_tmpl.cpp create mode 100644 src/bem3d/src/boundary_mesh/algorithm/RefineAdaptivly.hpp create mode 100644 src/bem3d/src/boundary_mesh/algorithm/RefineAdaptivly_tmpl.cpp create mode 100644 src/bem3d/src/boundary_mesh/face/Rectangle.hpp create mode 100644 src/bem3d/src/boundary_mesh/face/Rectangle_tmpl.cpp create mode 100644 src/bem3d/src/boundary_mesh/face/Rectangle_tmpl.hpp delete mode 100644 src/bem3d/src/boundary_mesh/layer/RefinementData.cpp delete mode 100644 src/bem3d/src/boundary_mesh/layer/RefinementData.hpp delete mode 100755 src/bem3d/src/boundary_mesh/testhilbertmesh create mode 100644 src/bem3d/src/generic/PtrCompare.hpp create mode 100644 src/bem3d/src/generic/ReferenceSemanticsForPtrVectorConstIterator.hpp create mode 100644 src/bem3d/src/generic/SingleElementIterator.hpp create mode 100644 src/bem3d/src/generic/Testing.hpp create mode 100644 src/bem3d/src/generic/TypeMap.hpp create mode 100644 src/bem3d/src/generic/TypeMap_tmpl.cpp create mode 100644 src/bem3d/src/generic/TypeMap_tmpl.hpp create mode 100644 src/bem3d/src/laplace/DoubleLayerPotential.cpp create mode 100644 src/bem3d/src/laplace/DoubleLayerPotential.hpp create mode 100644 src/bem3d/src/laplace/SimpleLayerPotential.cpp.BACKUP.2711.cpp create mode 100644 src/bem3d/src/laplace/SimpleLayerPotential.cpp.BASE.2711.cpp create mode 100644 src/bem3d/src/laplace/SimpleLayerPotential.cpp.LOCAL.2711.cpp create mode 100644 src/bem3d/src/laplace/SimpleLayerPotential.cpp.REMOTE.2711.cpp delete mode 100755 src/bem3d/src/laplace/testLaplace create mode 100644 src/bem3d/src/spaces/.deps/libhilbert_spaces_a-GenericSpace.Po create mode 100644 src/bem3d/src/spaces/.deps/libhilbert_spaces_a-P1Space.Po create mode 100644 src/bem3d/src/spaces/GenericSpace.cpp create mode 100644 src/bem3d/src/spaces/GenericSpace.hpp create mode 100644 src/bem3d/src/spaces/GenericSpace_tmpl.cpp create mode 100644 src/bem3d/src/spaces/HLibSpace_tmpl.cpp create mode 100644 src/bem3d/src/spaces/P1Space.cpp create mode 100644 src/bem3d/src/spaces/P1Space.hpp delete mode 100755 src/bem3d/src/spaces/testP0Space create mode 100644 src/bem3d/t/Makefile create mode 100644 src/bem3d/t/Makefile.am create mode 100644 src/bem3d/t/Makefile.in create mode 100644 src/bem3d/t/boundary_mesh/.deps/Face.Po create mode 100644 src/bem3d/t/boundary_mesh/.deps/FlexibleMeshAdaptiveRefinement.Po create mode 100644 src/bem3d/t/boundary_mesh/.deps/GenericVector.Po create mode 100644 src/bem3d/t/boundary_mesh/Face.cpp create mode 100644 src/bem3d/t/boundary_mesh/FlexibleMeshAdaptiveRefinement.cpp create mode 100644 src/bem3d/t/boundary_mesh/FlexibleMeshBasics.cpp create mode 100644 src/bem3d/t/boundary_mesh/FlexibleMeshUniformRefinement.cpp create mode 100644 src/bem3d/t/boundary_mesh/Makefile create mode 100644 src/bem3d/t/boundary_mesh/Makefile.am create mode 100644 src/bem3d/t/boundary_mesh/Makefile.in create mode 100644 src/bem3d/t/generic/.deps/GenericVector.Po create mode 100644 src/bem3d/t/generic/.deps/testGenericVector.Po delete mode 100644 src/bem3d/t/generic/GenericVector.cpp delete mode 100644 src/bem3d/t/generic/GenericVector/01-basics.cpp create mode 100644 src/bem3d/t/generic/Makefile create mode 100644 src/bem3d/t/generic/Makefile.am create mode 100644 src/bem3d/t/generic/Makefile.in create mode 100644 src/bem3d/t/generic/testGenericVector.cpp create mode 100644 src/bem3d/t/laplace/.deps/test_ComputeDoubleLayerPotentialEntry-HLibOperator.Po create mode 100644 src/bem3d/t/laplace/.deps/test_ComputeDoubleLayerPotentialEntry-TriangleIntegrator.Po create mode 100644 src/bem3d/t/laplace/.deps/test_ComputeDoubleLayerPotentialEntry-computeDoubleLayerPotentialEntry.Po create mode 100644 src/bem3d/t/laplace/.deps/test_ComputeSimpleLayerPotentialEntry-HLibOperator.Po create mode 100644 src/bem3d/t/laplace/.deps/test_ComputeSimpleLayerPotentialEntry-SimpleLayerPotential.Po create mode 100644 src/bem3d/t/laplace/.deps/test_ComputeSimpleLayerPotentialEntry-TriangleIntegrator.Po create mode 100644 src/bem3d/t/laplace/.deps/test_ComputeSimpleLayerPotentialEntry-computeSimpleLayerPotentialEntry.Po create mode 100644 src/bem3d/t/laplace/Makefile create mode 100644 src/bem3d/t/laplace/Makefile.am create mode 100644 src/bem3d/t/laplace/Makefile.in create mode 100644 src/bem3d/t/laplace/computeDoubleLayerPotentialEntry.cpp create mode 100644 src/bem3d/t/laplace/computeSimpleLayerPotentialEntry.cpp create mode 100644 src/bem3d/tools/pretty_printer/hilbert3d_printers/__init__.py create mode 100644 src/bem3d/tools/pretty_printer/hilbert3d_printers/generic.py create mode 100644 src/computeEstSlpMuTilde.m create mode 100644 src/mark.m rename src/{quad_norm.m => quadNorm.m} (84%) delete mode 100644 src/refineType.m create mode 100644 src/test_solveError_1050_2DQuad.fig create mode 100644 src/test_solveError_1050_2DQuad.mat create mode 100644 src/test_solveError_1050_3DFichCube.fig create mode 100644 src/test_solveError_1050_3DFichCube.mat diff --git a/src/SLPrecangle.cpp b/src/SLPrecangle.cpp index a5f3b7e..faefd8d 100644 --- a/src/SLPrecangle.cpp +++ b/src/SLPrecangle.cpp @@ -2,11 +2,9 @@ #include #include #include -#include "mex.h" #include "SLPrecangle.hpp" -#define my_PI 3.141592653589793 #define EPS 0.00001 using namespace std; @@ -81,7 +79,7 @@ double G00(double p, double y1, double y2, double x1, double x2, double l) { sol /= 2 * p + 2; } else { sol = NAN; - printf("warning in G00: no case for p=%.2f defined\n", p); + cout << "warning in G00: no case for p="<< p <<" defined. Possible: [-1.5,-0.5,0.5,...]\n"; //mexErrMsgTxt("no case for p defined\n"); } @@ -237,7 +235,7 @@ double compute_g0(double p, double y, double x, double a) { return (y - x) * pow((x * x + y * y + a * a - 2 * x * y), -0.5) / (a * a); default: - printf("p must be either 0, -1/2, -1 or -3/2. (%.2f)\n", p); + cout << "p must be either 0, -1/2, -1 or -3/2. (" << p << ")\n"; return NAN; } } diff --git a/src/bem3d/.gitignore b/src/bem3d/.gitignore new file mode 100644 index 0000000..ac526ac --- /dev/null +++ b/src/bem3d/.gitignore @@ -0,0 +1,16 @@ +# Ignore object files and compiled libraries: +*.o +*.a +*.deps + +# Created by ./configure: +*.out +*.log +Makefile +/config.status +/src/config.h +/aclocal.m4 + +# Binaries: +/src/boundary_mesh/testhilbertmesh + diff --git a/src/bem3d/Makefile b/src/bem3d/Makefile index 924a14d..1e9bfc0 100644 --- a/src/bem3d/Makefile +++ b/src/bem3d/Makefile @@ -39,7 +39,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_boost_base.m4 \ $(top_srcdir)/m4/ax_boost_regex.m4 $(top_srcdir)/m4/ax_hlib.m4 \ - $(top_srcdir)/m4/ax_lapack.m4 \ + $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_lib_loki.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) @@ -104,6 +104,8 @@ distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run aclocal-1.11 AMTAR = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run tar +AM_CXXFLAGS = +AM_LDFLAGS = AUTOCONF = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run autoconf AUTOHEADER = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run autoheader AUTOMAKE = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run automake-1.11 @@ -115,7 +117,7 @@ BOOST_REGEX_LIB = -lboost_regex-mt BOOST_ROOT_PATH = /usr CC = gcc CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 +CFLAGS = -I/usr/local/include CPP = gcc -E CPPFLAGS = CXX = g++ @@ -170,6 +172,9 @@ LAPACK_LIBS = -llapack LDFLAGS = LIBOBJS = LIBS = +LOKI_CPPFLAGS = -I/usr/local/include +LOKI_LDFLAGS = -L/usr/local/lib +LOKI_ROOT_PATH = /usr/local LTLIBOBJS = MAKEINFO = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run makeinfo MKDIR_P = /bin/mkdir -p @@ -232,7 +237,7 @@ top_build_prefix = top_builddir = . top_srcdir = . ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = src +SUBDIRS = src t ##DX_CLEAN_HTML = docs/doxygen/html ##DX_CLEAN_CHM = docs/doxygen/chm ###DX_CLEAN_CHI = docs/doxygen/hilbert3d.chi diff --git a/src/bem3d/Makefile.am b/src/bem3d/Makefile.am index f9db819..e25c295 100644 --- a/src/bem3d/Makefile.am +++ b/src/bem3d/Makefile.am @@ -1,5 +1,5 @@ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = src +SUBDIRS = src t ## --------------------------------- ## ## Format-independent Doxygen rules. ## diff --git a/src/bem3d/Makefile.in b/src/bem3d/Makefile.in index 437b86a..1e48fc9 100644 --- a/src/bem3d/Makefile.in +++ b/src/bem3d/Makefile.in @@ -39,7 +39,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_boost_base.m4 \ $(top_srcdir)/m4/ax_boost_regex.m4 $(top_srcdir)/m4/ax_hlib.m4 \ - $(top_srcdir)/m4/ax_lapack.m4 \ + $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_lib_loki.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) @@ -104,6 +104,8 @@ distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_CXXFLAGS = @AM_CXXFLAGS@ +AM_LDFLAGS = @AM_LDFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -170,6 +172,9 @@ LAPACK_LIBS = @LAPACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ +LOKI_CPPFLAGS = @LOKI_CPPFLAGS@ +LOKI_LDFLAGS = @LOKI_LDFLAGS@ +LOKI_ROOT_PATH = @LOKI_ROOT_PATH@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ @@ -232,7 +237,7 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = src +SUBDIRS = src t @DX_COND_doc_TRUE@@DX_COND_html_TRUE@DX_CLEAN_HTML = @DX_DOCDIR@/html @DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHM = @DX_DOCDIR@/chm @DX_COND_chi_TRUE@@DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi diff --git a/src/bem3d/aclocal.m4 b/src/bem3d/aclocal.m4 index 6e06657..b9b5d4d 100755 --- a/src/bem3d/aclocal.m4 +++ b/src/bem3d/aclocal.m4 @@ -954,4 +954,5 @@ m4_include([m4/ax_boost_base.m4]) m4_include([m4/ax_boost_regex.m4]) m4_include([m4/ax_hlib.m4]) m4_include([m4/ax_lapack.m4]) +m4_include([m4/ax_lib_loki.m4]) m4_include([m4/ax_prog_doxygen.m4]) diff --git a/src/bem3d/autom4te.cache/output.2 b/src/bem3d/autom4te.cache/output.2 index 6868db4..9d02a2c 100755 --- a/src/bem3d/autom4te.cache/output.2 +++ b/src/bem3d/autom4te.cache/output.2 @@ -597,9 +597,14 @@ ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIB@&t@OBJS +AM_LDFLAGS +AM_CXXFLAGS EGREP GREP CPP +LOKI_ROOT_PATH +LOKI_LDFLAGS +LOKI_CPPFLAGS HLIB_LIB HLIB_ROOT_PATH HLIB_LDFLAGS @@ -763,6 +768,7 @@ with_boost_regex with_blas with_lapack with_hlib +with_loki ' ac_precious_vars='build_alias host_alias @@ -1422,6 +1428,7 @@ Optional Packages: --with-lapack= use LAPACK library --with-hlib@<:@=DIR@:>@ use hlib (default is yes) - it is possible to specify the root directory for hlib (optional) + --with-loki@<:@=DIR|:>@ specify the root directory for the loki library Some influential environment variables: CXX C++ compiler command @@ -6621,6 +6628,7 @@ fi LDFLAGS="$LDFLAGS_SAVED" fi +AX_BOOST_TEST ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' @@ -8813,6 +8821,126 @@ $as_echo "@%:@define HAVE_HLIB /**/" >>confdefs.h fi + +@%:@ Check whether --with-loki was given. +if test "${with_loki+set}" = set; then : + withval=$with_loki; + if test "$withval" = "no"; then + as_fn_error $? "Sorry, but it is not possible to compile without loki" "$LINENO" 5 + want_loki="no" + elif test "$withval" = "yes"; then + want_loki="yes" + ac_loki_path="" + else + want_loki="yes" + ac_loki_path="$withval" + fi + +else + + want_loki="yes"; + +fi + + + if test "x$want_loki" = "xyes"; then + if test "x$ac_loki_path" = "x"; then + for ac_loki_path_tmp in /usr /usr/local /opt /opt/local; do + if test -d "$ac_loki_path_tmp/include/loki"; then + LOKI_LDFLAGS="-L$ac_hlib_path_tmp/lib" + LOKI_CPPFLAGS="-I$ac_hlib_path_tmp/include" + LOKI_ROOT_PATH="$ac_hlib_path_tmp" + break; + fi + done + else + LOKI_LDFLAGS="-L$ac_hlib_path/lib" + LOKI_CPPFLAGS="-I$ac_hlib_path/include" + LOKI_ROOT_PATH="$ac_hlib_path" + fi + + if test "x$LOKI_ROOT_PATH" = "x"; then + as_fn_error $? "We could not detect the loki library. Please install + the loki library, c.f. loki-lib.sf.net, before + proceeding." "$LINENO" 5 + else + + + + + # Run some basic tests to check whether loki is really available: + CPPFLAGS_SAVED="$CPPFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + + CPPFLAGS="$CPPFLAGS $LOKI_CPPFLAGS" + CFLAGS="$CPPFLAGS" + export CPPFLAGS + export CFLAGS + LDFLAGS="$LDFLAGS $LOKI_LDFLAGS" + export LDFLAGS + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Loki is usable" >&5 +$as_echo_n "checking whether Loki is usable... " >&6; } +if test "${ax_cv_loki+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +::Loki::SmartPtr< int > t = new int; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_loki="yes" +else + ax_cv_loki="no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_loki" >&5 +$as_echo "$ax_cv_loki" >&6; } + + if test "$ax_cv_loki" != "yes"; then + as_fn_error $? "Could not use the loki library. Please make sure + that it is installed correctly." "$LINENO" 5 ; + fi + + CPPFLAGS="$SAVED_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$SAVED_LDFLAGS" + export LDFLAGS + fi + fi + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -9337,7 +9465,10 @@ $as_echo "@%:@define HAVE_STDBOOL_H 1" >>confdefs.h fi -ac_config_files="$ac_config_files Makefile src/Makefile src/boundary_mesh/Makefile src/spaces/Makefile src/laplace/Makefile" + + + +ac_config_files="$ac_config_files Makefile src/Makefile src/boundary_mesh/Makefile src/spaces/Makefile src/laplace/Makefile t/Makefile t/generic/Makefile t/boundary_mesh/Makefile t/laplace/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -10156,6 +10287,10 @@ do "src/boundary_mesh/Makefile") CONFIG_FILES="$CONFIG_FILES src/boundary_mesh/Makefile" ;; "src/spaces/Makefile") CONFIG_FILES="$CONFIG_FILES src/spaces/Makefile" ;; "src/laplace/Makefile") CONFIG_FILES="$CONFIG_FILES src/laplace/Makefile" ;; + "t/Makefile") CONFIG_FILES="$CONFIG_FILES t/Makefile" ;; + "t/generic/Makefile") CONFIG_FILES="$CONFIG_FILES t/generic/Makefile" ;; + "t/boundary_mesh/Makefile") CONFIG_FILES="$CONFIG_FILES t/boundary_mesh/Makefile" ;; + "t/laplace/Makefile") CONFIG_FILES="$CONFIG_FILES t/laplace/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; esac diff --git a/src/bem3d/autom4te.cache/output.3 b/src/bem3d/autom4te.cache/output.3 new file mode 100644 index 0000000..9d02a2c --- /dev/null +++ b/src/bem3d/autom4te.cache/output.3 @@ -0,0 +1,11019 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.67 for Hilbert 3D 0.1.0. +@%:@ +@%:@ Report bugs to . +@%:@ +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +@%:@ Foundation, Inc. +@%:@ +@%:@ +@%:@ This configure script is free software; the Free Software Foundation +@%:@ gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in @%:@( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: markus.mayr@tuwien.ac.at about your system, including +$0: any error possibly output before this message. Then +$0: install a modern shell, or manually run the script +$0: under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in @%:@( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='Hilbert 3D' +PACKAGE_TARNAME='hilbert3d' +PACKAGE_VERSION='0.1.0' +PACKAGE_STRING='Hilbert 3D 0.1.0' +PACKAGE_BUGREPORT='markus.mayr@tuwien.ac.at' +PACKAGE_URL='http://83.169.35.184/cgi-bin/gitweb?p=bem3d.git' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIB@&t@OBJS +AM_LDFLAGS +AM_CXXFLAGS +EGREP +GREP +CPP +LOKI_ROOT_PATH +LOKI_LDFLAGS +LOKI_CPPFLAGS +HLIB_LIB +HLIB_ROOT_PATH +HLIB_LDFLAGS +HLIB_CPPFLAGS +LAPACK_LIBS +BLAS_LIBS +FLIBS +ac_ct_F77 +FFLAGS +F77 +BOOST_REGEX_LIB +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +ac_ct_CC +CFLAGS +CC +BOOST_ROOT_PATH +BOOST_LDFLAGS +BOOST_CPPFLAGS +DOXYGEN_PAPER_SIZE +DX_COND_latex_FALSE +DX_COND_latex_TRUE +DX_COND_pdf_FALSE +DX_COND_pdf_TRUE +DX_PDFLATEX +DX_FLAG_pdf +DX_COND_ps_FALSE +DX_COND_ps_TRUE +DX_EGREP +DX_DVIPS +DX_MAKEINDEX +DX_LATEX +DX_FLAG_ps +DX_COND_html_FALSE +DX_COND_html_TRUE +DX_FLAG_html +DX_COND_chi_FALSE +DX_COND_chi_TRUE +DX_FLAG_chi +DX_COND_chm_FALSE +DX_COND_chm_TRUE +DX_HHC +DX_FLAG_chm +DX_COND_xml_FALSE +DX_COND_xml_TRUE +DX_FLAG_xml +DX_COND_rtf_FALSE +DX_COND_rtf_TRUE +DX_FLAG_rtf +DX_COND_man_FALSE +DX_COND_man_TRUE +DX_FLAG_man +DX_COND_dot_FALSE +DX_COND_dot_TRUE +DX_DOT +DX_FLAG_dot +DX_COND_doc_FALSE +DX_COND_doc_TRUE +DX_PERL +DX_DOXYGEN +DX_FLAG_doc +DX_ENV +DX_DOCDIR +DX_CONFIG +DX_PROJECT +RANLIB +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CXX +CPPFLAGS +LDFLAGS +CXXFLAGS +CXX +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_doxygen_doc +enable_doxygen_dot +enable_doxygen_man +enable_doxygen_rtf +enable_doxygen_xml +enable_doxygen_chm +enable_doxygen_chi +enable_doxygen_html +enable_doxygen_ps +enable_doxygen_pdf +with_boost +with_boost_regex +with_blas +with_lapack +with_hlib +with_loki +' + ac_precious_vars='build_alias +host_alias +target_alias +CXX +CXXFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCC +DOXYGEN_PAPER_SIZE +CC +CFLAGS +F77 +FFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures Hilbert 3D 0.1.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + @<:@@S|@ac_default_prefix@:>@ + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + @<:@PREFIX@:>@ + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root @<:@DATAROOTDIR/doc/hilbert3d@:>@ + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of Hilbert 3D 0.1.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --disable-doxygen-doc don't generate any doxygen documentation + --enable-doxygen-dot generate graphics for doxygen documentation + --enable-doxygen-man generate doxygen manual pages + --enable-doxygen-rtf generate doxygen RTF documentation + --enable-doxygen-xml generate doxygen XML documentation + --enable-doxygen-chm generate doxygen compressed HTML help documentation + --enable-doxygen-chi generate doxygen seperate compressed HTML help index + file + --disable-doxygen-html don't generate doxygen plain HTML documentation + --disable-doxygen-ps don't generate doxygen PostScript documentation + --disable-doxygen-pdf don't generate doxygen PDF documentation + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-boost@<:@=DIR@:>@ use boost (default is yes) - it is possible to + specify the root directory for boost (optional) + --with-boost-regex@<:@=special-lib@:>@ + use the Regex library from boost - it is possible to + specify a certain library for the linker e.g. + --with-boost-regex=boost_regex-gcc-mt-d-1_33_1 + --with-blas= use BLAS library + --with-lapack= use LAPACK library + --with-hlib@<:@=DIR@:>@ use hlib (default is yes) - it is possible to + specify the root directory for hlib (optional) + --with-loki@<:@=DIR|:>@ specify the root directory for the loki library + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + DOXYGEN_PAPER_SIZE + a4wide (default), a4, letter, legal or executive + CC C compiler command + CFLAGS C compiler flags + F77 Fortran 77 compiler command + FFLAGS Fortran 77 compiler flags + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +Hilbert 3D home page: . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +Hilbert 3D configure 0.1.0 +generated by GNU Autoconf 2.67 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +@%:@ ac_fn_cxx_try_compile LINENO +@%:@ ---------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_compile + +@%:@ ac_fn_c_try_compile LINENO +@%:@ -------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_compile + +@%:@ ac_fn_c_try_link LINENO +@%:@ ----------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_link + +@%:@ ac_fn_f77_try_compile LINENO +@%:@ ---------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_f77_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_f77_try_compile + +@%:@ ac_fn_c_check_func LINENO FUNC VAR +@%:@ ---------------------------------- +@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_func + +@%:@ ac_fn_c_check_type LINENO TYPE VAR INCLUDES +@%:@ ------------------------------------------- +@%:@ Tests whether TYPE exists after having included INCLUDES, setting cache +@%:@ variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_type + +@%:@ ac_fn_c_try_cpp LINENO +@%:@ ---------------------- +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_cpp + +@%:@ ac_fn_c_try_run LINENO +@%:@ ---------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_run + +@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists and can be compiled using the include files in +@%:@ INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_header_compile +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by Hilbert 3D $as_me 0.1.0, which was +generated by GNU Autoconf 2.67. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in @%:@(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5 ; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in @%:@(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='hilbert3d' + VERSION='0.1.0' + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +ac_config_headers="$ac_config_headers src/config.h" + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C++ compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5 ; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5 ; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +@%:@ Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + + + + +# Files: +DX_PROJECT="Hilbert 3D" + +DX_CONFIG=Doxyfile + +DX_DOCDIR=docs/doxygen + + +# Environment variables used inside doxygen.cfg: +DX_ENV="$DX_ENV SRCDIR='$srcdir'" + +DX_ENV="$DX_ENV PROJECT='$DX_PROJECT'" + +DX_ENV="$DX_ENV DOCDIR='$DX_DOCDIR'" + +DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'" + + +# Doxygen itself: + + + + @%:@ Check whether --enable-doxygen-doc was given. +if test "${enable_doxygen_doc+set}" = set; then : + enableval=$enable_doxygen_doc; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_doc=1 + + +;; #( +n|N|no|No|NO) + DX_FLAG_doc=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-doc" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_doc=1 + + + +fi + +if test "$DX_FLAG_doc" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args. +set dummy ${ac_tool_prefix}doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DX_DOXYGEN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DX_DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN +if test -n "$DX_DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5 +$as_echo "$DX_DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_DOXYGEN"; then + ac_pt_DX_DOXYGEN=$DX_DOXYGEN + # Extract the first word of "doxygen", so it can be a program name with args. +set dummy doxygen; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_DX_DOXYGEN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_DOXYGEN in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN +if test -n "$ac_pt_DX_DOXYGEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5 +$as_echo "$ac_pt_DX_DOXYGEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_DOXYGEN" = x; then + DX_DOXYGEN="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_DOXYGEN=$ac_pt_DX_DOXYGEN + fi +else + DX_DOXYGEN="$ac_cv_path_DX_DOXYGEN" +fi + +if test "$DX_FLAG_doc$DX_DOXYGEN" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5 +$as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;} + DX_FLAG_doc=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args. +set dummy ${ac_tool_prefix}perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DX_PERL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DX_PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_PERL=$ac_cv_path_DX_PERL +if test -n "$DX_PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5 +$as_echo "$DX_PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_PERL"; then + ac_pt_DX_PERL=$DX_PERL + # Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_DX_PERL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL +if test -n "$ac_pt_DX_PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5 +$as_echo "$ac_pt_DX_PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_PERL" = x; then + DX_PERL="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_PERL=$ac_pt_DX_PERL + fi +else + DX_PERL="$ac_cv_path_DX_PERL" +fi + +if test "$DX_FLAG_doc$DX_PERL" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5 +$as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;} + DX_FLAG_doc=0 + +fi + + : +fi +if test "$DX_FLAG_doc" = 1; then + if :; then + DX_COND_doc_TRUE= + DX_COND_doc_FALSE='#' +else + DX_COND_doc_TRUE='#' + DX_COND_doc_FALSE= +fi + + DX_ENV="$DX_ENV PERL_PATH='$DX_PERL'" + + : +else + if false; then + DX_COND_doc_TRUE= + DX_COND_doc_FALSE='#' +else + DX_COND_doc_TRUE='#' + DX_COND_doc_FALSE= +fi + + + : +fi + + +# Dot for graphics: + + + + @%:@ Check whether --enable-doxygen-dot was given. +if test "${enable_doxygen_dot+set}" = set; then : + enableval=$enable_doxygen_dot; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_dot=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-dot requires doxygen-dot" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_dot=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-dot" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_dot=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_dot=0 + + + +fi + +if test "$DX_FLAG_dot" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args. +set dummy ${ac_tool_prefix}dot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DX_DOT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DX_DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_DOT=$ac_cv_path_DX_DOT +if test -n "$DX_DOT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5 +$as_echo "$DX_DOT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_DOT"; then + ac_pt_DX_DOT=$DX_DOT + # Extract the first word of "dot", so it can be a program name with args. +set dummy dot; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_DX_DOT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_DOT in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT +if test -n "$ac_pt_DX_DOT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5 +$as_echo "$ac_pt_DX_DOT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_DOT" = x; then + DX_DOT="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_DOT=$ac_pt_DX_DOT + fi +else + DX_DOT="$ac_cv_path_DX_DOT" +fi + +if test "$DX_FLAG_dot$DX_DOT" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5 +$as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;} + DX_FLAG_dot=0 + +fi + + : +fi +if test "$DX_FLAG_dot" = 1; then + if :; then + DX_COND_dot_TRUE= + DX_COND_dot_FALSE='#' +else + DX_COND_dot_TRUE='#' + DX_COND_dot_FALSE= +fi + + DX_ENV="$DX_ENV HAVE_DOT='YES'" + + DX_ENV="$DX_ENV DOT_PATH='`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'`'" + + : +else + if false; then + DX_COND_dot_TRUE= + DX_COND_dot_FALSE='#' +else + DX_COND_dot_TRUE='#' + DX_COND_dot_FALSE= +fi + + DX_ENV="$DX_ENV HAVE_DOT='NO'" + + : +fi + + +# Man pages generation: + + + + @%:@ Check whether --enable-doxygen-man was given. +if test "${enable_doxygen_man+set}" = set; then : + enableval=$enable_doxygen_man; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_man=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-man requires doxygen-man" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_man=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-man" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_man=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0 + + + +fi + +if test "$DX_FLAG_man" = 1; then + + : +fi +if test "$DX_FLAG_man" = 1; then + if :; then + DX_COND_man_TRUE= + DX_COND_man_FALSE='#' +else + DX_COND_man_TRUE='#' + DX_COND_man_FALSE= +fi + + DX_ENV="$DX_ENV GENERATE_MAN='YES'" + + : +else + if false; then + DX_COND_man_TRUE= + DX_COND_man_FALSE='#' +else + DX_COND_man_TRUE='#' + DX_COND_man_FALSE= +fi + + DX_ENV="$DX_ENV GENERATE_MAN='NO'" + + : +fi + + +# RTF file generation: + + + + @%:@ Check whether --enable-doxygen-rtf was given. +if test "${enable_doxygen_rtf+set}" = set; then : + enableval=$enable_doxygen_rtf; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_rtf=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-rtf requires doxygen-rtf" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_rtf=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-rtf" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_rtf=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_rtf=0 + + + +fi + +if test "$DX_FLAG_rtf" = 1; then + + : +fi +if test "$DX_FLAG_rtf" = 1; then + if :; then + DX_COND_rtf_TRUE= + DX_COND_rtf_FALSE='#' +else + DX_COND_rtf_TRUE='#' + DX_COND_rtf_FALSE= +fi + + DX_ENV="$DX_ENV GENERATE_RTF='YES'" + + : +else + if false; then + DX_COND_rtf_TRUE= + DX_COND_rtf_FALSE='#' +else + DX_COND_rtf_TRUE='#' + DX_COND_rtf_FALSE= +fi + + DX_ENV="$DX_ENV GENERATE_RTF='NO'" + + : +fi + + +# XML file generation: + + + + @%:@ Check whether --enable-doxygen-xml was given. +if test "${enable_doxygen_xml+set}" = set; then : + enableval=$enable_doxygen_xml; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_xml=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-xml requires doxygen-xml" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_xml=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-xml" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_xml=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_xml=0 + + + +fi + +if test "$DX_FLAG_xml" = 1; then + + : +fi +if test "$DX_FLAG_xml" = 1; then + if :; then + DX_COND_xml_TRUE= + DX_COND_xml_FALSE='#' +else + DX_COND_xml_TRUE='#' + DX_COND_xml_FALSE= +fi + + DX_ENV="$DX_ENV GENERATE_XML='YES'" + + : +else + if false; then + DX_COND_xml_TRUE= + DX_COND_xml_FALSE='#' +else + DX_COND_xml_TRUE='#' + DX_COND_xml_FALSE= +fi + + DX_ENV="$DX_ENV GENERATE_XML='NO'" + + : +fi + + +# (Compressed) HTML help generation: + + + + @%:@ Check whether --enable-doxygen-chm was given. +if test "${enable_doxygen_chm+set}" = set; then : + enableval=$enable_doxygen_chm; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_chm=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-chm requires doxygen-chm" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_chm=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-chm" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_chm=0 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_chm=0 + + + +fi + +if test "$DX_FLAG_chm" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args. +set dummy ${ac_tool_prefix}hhc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DX_HHC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DX_HHC in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_HHC=$ac_cv_path_DX_HHC +if test -n "$DX_HHC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5 +$as_echo "$DX_HHC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_HHC"; then + ac_pt_DX_HHC=$DX_HHC + # Extract the first word of "hhc", so it can be a program name with args. +set dummy hhc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_DX_HHC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_HHC in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC +if test -n "$ac_pt_DX_HHC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5 +$as_echo "$ac_pt_DX_HHC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_HHC" = x; then + DX_HHC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_HHC=$ac_pt_DX_HHC + fi +else + DX_HHC="$ac_cv_path_DX_HHC" +fi + +if test "$DX_FLAG_chm$DX_HHC" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5 +$as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;} + DX_FLAG_chm=0 + +fi + + : +fi +if test "$DX_FLAG_chm" = 1; then + if :; then + DX_COND_chm_TRUE= + DX_COND_chm_FALSE='#' +else + DX_COND_chm_TRUE='#' + DX_COND_chm_FALSE= +fi + + DX_ENV="$DX_ENV HHC_PATH='$DX_HHC'" + + DX_ENV="$DX_ENV GENERATE_HTML='YES'" + + DX_ENV="$DX_ENV GENERATE_HTMLHELP='YES'" + + : +else + if false; then + DX_COND_chm_TRUE= + DX_COND_chm_FALSE='#' +else + DX_COND_chm_TRUE='#' + DX_COND_chm_FALSE= +fi + + DX_ENV="$DX_ENV GENERATE_HTMLHELP='NO'" + + : +fi + + +# Seperate CHI file generation. + + + + @%:@ Check whether --enable-doxygen-chi was given. +if test "${enable_doxygen_chi+set}" = set; then : + enableval=$enable_doxygen_chi; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_chi=1 + + +test "$DX_FLAG_chm" = "1" \ +|| as_fn_error $? "doxygen-chi requires doxygen-chi" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_chi=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-chi" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_chi=0 + + +test "$DX_FLAG_chm" = "1" || DX_FLAG_chi=0 + + + +fi + +if test "$DX_FLAG_chi" = 1; then + + : +fi +if test "$DX_FLAG_chi" = 1; then + if :; then + DX_COND_chi_TRUE= + DX_COND_chi_FALSE='#' +else + DX_COND_chi_TRUE='#' + DX_COND_chi_FALSE= +fi + + DX_ENV="$DX_ENV GENERATE_CHI='YES'" + + : +else + if false; then + DX_COND_chi_TRUE= + DX_COND_chi_FALSE='#' +else + DX_COND_chi_TRUE='#' + DX_COND_chi_FALSE= +fi + + DX_ENV="$DX_ENV GENERATE_CHI='NO'" + + : +fi + + +# Plain HTML pages generation: + + + + @%:@ Check whether --enable-doxygen-html was given. +if test "${enable_doxygen_html+set}" = set; then : + enableval=$enable_doxygen_html; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_html=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-html requires doxygen-html" "$LINENO" 5 + +test "$DX_FLAG_chm" = "0" \ +|| as_fn_error $? "doxygen-html contradicts doxygen-html" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_html=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-html" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_html=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_html=0 + + +test "$DX_FLAG_chm" = "0" || DX_FLAG_html=0 + + + +fi + +if test "$DX_FLAG_html" = 1; then + + : +fi +if test "$DX_FLAG_html" = 1; then + if :; then + DX_COND_html_TRUE= + DX_COND_html_FALSE='#' +else + DX_COND_html_TRUE='#' + DX_COND_html_FALSE= +fi + + DX_ENV="$DX_ENV GENERATE_HTML='YES'" + + : +else + if false; then + DX_COND_html_TRUE= + DX_COND_html_FALSE='#' +else + DX_COND_html_TRUE='#' + DX_COND_html_FALSE= +fi + + test "$DX_FLAG_chm" = 1 || DX_ENV="$DX_ENV GENERATE_HTML='NO'" + + : +fi + + +# PostScript file generation: + + + + @%:@ Check whether --enable-doxygen-ps was given. +if test "${enable_doxygen_ps+set}" = set; then : + enableval=$enable_doxygen_ps; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_ps=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-ps requires doxygen-ps" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_ps=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-ps" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_ps=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_ps=0 + + + +fi + +if test "$DX_FLAG_ps" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args. +set dummy ${ac_tool_prefix}latex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DX_LATEX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DX_LATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_LATEX=$ac_cv_path_DX_LATEX +if test -n "$DX_LATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5 +$as_echo "$DX_LATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_LATEX"; then + ac_pt_DX_LATEX=$DX_LATEX + # Extract the first word of "latex", so it can be a program name with args. +set dummy latex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_DX_LATEX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_LATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX +if test -n "$ac_pt_DX_LATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5 +$as_echo "$ac_pt_DX_LATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_LATEX" = x; then + DX_LATEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_LATEX=$ac_pt_DX_LATEX + fi +else + DX_LATEX="$ac_cv_path_DX_LATEX" +fi + +if test "$DX_FLAG_ps$DX_LATEX" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. +set dummy ${ac_tool_prefix}makeindex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DX_MAKEINDEX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX +if test -n "$DX_MAKEINDEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +$as_echo "$DX_MAKEINDEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_MAKEINDEX"; then + ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX + # Extract the first word of "makeindex", so it can be a program name with args. +set dummy makeindex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_DX_MAKEINDEX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX +if test -n "$ac_pt_DX_MAKEINDEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_MAKEINDEX" = x; then + DX_MAKEINDEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX + fi +else + DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" +fi + +if test "$DX_FLAG_ps$DX_MAKEINDEX" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args. +set dummy ${ac_tool_prefix}dvips; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DX_DVIPS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DX_DVIPS in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_DVIPS=$ac_cv_path_DX_DVIPS +if test -n "$DX_DVIPS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5 +$as_echo "$DX_DVIPS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_DVIPS"; then + ac_pt_DX_DVIPS=$DX_DVIPS + # Extract the first word of "dvips", so it can be a program name with args. +set dummy dvips; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_DX_DVIPS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_DVIPS in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS +if test -n "$ac_pt_DX_DVIPS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5 +$as_echo "$ac_pt_DX_DVIPS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_DVIPS" = x; then + DX_DVIPS="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_DVIPS=$ac_pt_DX_DVIPS + fi +else + DX_DVIPS="$ac_cv_path_DX_DVIPS" +fi + +if test "$DX_FLAG_ps$DX_DVIPS" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. +set dummy ${ac_tool_prefix}egrep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DX_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_EGREP=$ac_cv_path_DX_EGREP +if test -n "$DX_EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +$as_echo "$DX_EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_EGREP"; then + ac_pt_DX_EGREP=$DX_EGREP + # Extract the first word of "egrep", so it can be a program name with args. +set dummy egrep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_DX_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP +if test -n "$ac_pt_DX_EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +$as_echo "$ac_pt_DX_EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_EGREP" = x; then + DX_EGREP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_EGREP=$ac_pt_DX_EGREP + fi +else + DX_EGREP="$ac_cv_path_DX_EGREP" +fi + +if test "$DX_FLAG_ps$DX_EGREP" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5 +$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;} + DX_FLAG_ps=0 + +fi + + : +fi +if test "$DX_FLAG_ps" = 1; then + if :; then + DX_COND_ps_TRUE= + DX_COND_ps_FALSE='#' +else + DX_COND_ps_TRUE='#' + DX_COND_ps_FALSE= +fi + + + : +else + if false; then + DX_COND_ps_TRUE= + DX_COND_ps_FALSE='#' +else + DX_COND_ps_TRUE='#' + DX_COND_ps_FALSE= +fi + + + : +fi + + +# PDF file generation: + + + + @%:@ Check whether --enable-doxygen-pdf was given. +if test "${enable_doxygen_pdf+set}" = set; then : + enableval=$enable_doxygen_pdf; +case "$enableval" in +#( +y|Y|yes|Yes|YES) + DX_FLAG_pdf=1 + + +test "$DX_FLAG_doc" = "1" \ +|| as_fn_error $? "doxygen-pdf requires doxygen-pdf" "$LINENO" 5 + +;; #( +n|N|no|No|NO) + DX_FLAG_pdf=0 + +;; #( +*) + as_fn_error $? "invalid value '$enableval' given to doxygen-pdf" "$LINENO" 5 +;; +esac + +else + +DX_FLAG_pdf=1 + + +test "$DX_FLAG_doc" = "1" || DX_FLAG_pdf=0 + + + +fi + +if test "$DX_FLAG_pdf" = 1; then + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args. +set dummy ${ac_tool_prefix}pdflatex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DX_PDFLATEX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DX_PDFLATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX +if test -n "$DX_PDFLATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5 +$as_echo "$DX_PDFLATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_PDFLATEX"; then + ac_pt_DX_PDFLATEX=$DX_PDFLATEX + # Extract the first word of "pdflatex", so it can be a program name with args. +set dummy pdflatex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_DX_PDFLATEX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_PDFLATEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX +if test -n "$ac_pt_DX_PDFLATEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5 +$as_echo "$ac_pt_DX_PDFLATEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_PDFLATEX" = x; then + DX_PDFLATEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_PDFLATEX=$ac_pt_DX_PDFLATEX + fi +else + DX_PDFLATEX="$ac_cv_path_DX_PDFLATEX" +fi + +if test "$DX_FLAG_pdf$DX_PDFLATEX" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;} + DX_FLAG_pdf=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args. +set dummy ${ac_tool_prefix}makeindex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DX_MAKEINDEX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX +if test -n "$DX_MAKEINDEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5 +$as_echo "$DX_MAKEINDEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_MAKEINDEX"; then + ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX + # Extract the first word of "makeindex", so it can be a program name with args. +set dummy makeindex; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_DX_MAKEINDEX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_MAKEINDEX in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX +if test -n "$ac_pt_DX_MAKEINDEX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5 +$as_echo "$ac_pt_DX_MAKEINDEX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_MAKEINDEX" = x; then + DX_MAKEINDEX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX + fi +else + DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX" +fi + +if test "$DX_FLAG_pdf$DX_MAKEINDEX" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;} + DX_FLAG_pdf=0 + +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args. +set dummy ${ac_tool_prefix}egrep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DX_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DX_EGREP=$ac_cv_path_DX_EGREP +if test -n "$DX_EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5 +$as_echo "$DX_EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_DX_EGREP"; then + ac_pt_DX_EGREP=$DX_EGREP + # Extract the first word of "egrep", so it can be a program name with args. +set dummy egrep; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_DX_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_DX_EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP +if test -n "$ac_pt_DX_EGREP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5 +$as_echo "$ac_pt_DX_EGREP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_DX_EGREP" = x; then + DX_EGREP="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DX_EGREP=$ac_pt_DX_EGREP + fi +else + DX_EGREP="$ac_cv_path_DX_EGREP" +fi + +if test "$DX_FLAG_pdf$DX_EGREP" = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5 +$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;} + DX_FLAG_pdf=0 + +fi + + : +fi +if test "$DX_FLAG_pdf" = 1; then + if :; then + DX_COND_pdf_TRUE= + DX_COND_pdf_FALSE='#' +else + DX_COND_pdf_TRUE='#' + DX_COND_pdf_FALSE= +fi + + + : +else + if false; then + DX_COND_pdf_TRUE= + DX_COND_pdf_FALSE='#' +else + DX_COND_pdf_TRUE='#' + DX_COND_pdf_FALSE= +fi + + + : +fi + + +# LaTeX generation for PS and/or PDF: +if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then + if :; then + DX_COND_latex_TRUE= + DX_COND_latex_FALSE='#' +else + DX_COND_latex_TRUE='#' + DX_COND_latex_FALSE= +fi + + DX_ENV="$DX_ENV GENERATE_LATEX='YES'" + +else + if false; then + DX_COND_latex_TRUE= + DX_COND_latex_FALSE='#' +else + DX_COND_latex_TRUE='#' + DX_COND_latex_FALSE= +fi + + DX_ENV="$DX_ENV GENERATE_LATEX='NO'" + +fi + +# Paper size for PS and/or PDF: + +case "$DOXYGEN_PAPER_SIZE" in +#( +"") + DOXYGEN_PAPER_SIZE="" + +;; #( +a4wide|a4|letter|legal|executive) + DX_ENV="$DX_ENV PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" + +;; #( +*) + as_fn_error $? "unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" "$LINENO" 5 +;; +esac + +#For debugging: +#echo DX_FLAG_doc=$DX_FLAG_doc +#echo DX_FLAG_dot=$DX_FLAG_dot +#echo DX_FLAG_man=$DX_FLAG_man +#echo DX_FLAG_html=$DX_FLAG_html +#echo DX_FLAG_chm=$DX_FLAG_chm +#echo DX_FLAG_chi=$DX_FLAG_chi +#echo DX_FLAG_rtf=$DX_FLAG_rtf +#echo DX_FLAG_xml=$DX_FLAG_xml +#echo DX_FLAG_pdf=$DX_FLAG_pdf +#echo DX_FLAG_ps=$DX_FLAG_ps +#echo DX_ENV=$DX_ENV + + + + + +@%:@ Check whether --with-boost was given. +if test "${with_boost+set}" = set; then : + withval=$with_boost; + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ac_boost_path="" + else + want_boost="yes" + ac_boost_path="$withval" + fi + +else + want_boost="yes" +fi + + +if test "x$want_boost" = "xyes"; then + boost_lib_version_req=1.38.0 + boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([0-9]*\.[0-9]*\)'` + boost_lib_version_req_major=`expr $boost_lib_version_req : '\([0-9]*\)'` + boost_lib_version_req_minor=`expr $boost_lib_version_req : '[0-9]*\.\([0-9]*\)'` + boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[0-9]*\.[0-9]*\.\([0-9]*\)'` + if test "x$boost_lib_version_req_sub_minor" = "x" ; then + boost_lib_version_req_sub_minor="0" + fi + WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for boostlib >= $boost_lib_version_req" >&5 +$as_echo_n "checking for boostlib >= $boost_lib_version_req... " >&6; } + succeeded=no + + if test "$ac_boost_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_path/lib" + BOOST_CPPFLAGS="-I$ac_boost_path/include" + BOOST_ROOT_PATH="$ac_boost_path" + else + for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then + BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib" + BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" + BOOST_ROOT_PATH="$ac_boost_path_tmp" + break; + fi + done + fi + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + export BOOST_ROOT_PATH + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + @%:@include + +int +main () +{ + + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + succeeded=yes + found_system=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + if test "x$succeeded" != "xyes"; then + _version=0 + if test "$ac_boost_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_path/lib" + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + fi + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" + done + fi + else + for ac_boost_path in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + best_path=$ac_boost_path + fi + done + fi + done + + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" + BOOST_LDFLAGS="-L$best_path/lib" + BOOST_ROOT_PATH="$best_path" + + if test "x$BOOST_ROOT" != "x"; then + if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then + version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` + stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` + stage_version_shorten=`expr $stage_version : '\([0-9]*\.[0-9]*\)'` + V_CHECK=`expr $stage_version_shorten \>\= $_version` + if test "$V_CHECK" = "1" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: We will use a staged boost library from $BOOST_ROOT" >&5 +$as_echo "$as_me: We will use a staged boost library from $BOOST_ROOT" >&6;} + BOOST_CPPFLAGS="-I$BOOST_ROOT" + BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib" + BOOST_ROOT_PATH="$BOOST_ROOT" + fi + fi + fi + fi + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + export BOOST_ROOT_PATH + + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + @%:@include + +int +main () +{ + + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + succeeded=yes + found_system=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + fi + + if test "$succeeded" != "yes" ; then + if test "$_version" = "0" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&5 +$as_echo "$as_me: WARNING: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&2;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your boost libraries seems to old (version $_version)." >&5 +$as_echo "$as_me: WARNING: Your boost libraries seems to old (version $_version)." >&2;} + fi + else + + + + +$as_echo "@%:@define HAVE_BOOST /**/" >>confdefs.h + + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5 ; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + + + +@%:@ Check whether --with-boost-regex was given. +if test "${with_boost_regex+set}" = set; then : + withval=$with_boost_regex; + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_regex_lib="" + else + want_boost="yes" + ax_boost_user_regex_lib="$withval" + fi + +else + want_boost="yes" + +fi + + + if test "x$want_boost" = "xyes"; then + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Boost::Regex library is available" >&5 +$as_echo_n "checking whether the Boost::Regex library is available... " >&6; } +if test "${ax_cv_boost_regex+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include + +int +main () +{ +boost::regex r(); return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_boost_regex=yes +else + ax_cv_boost_regex=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_boost_regex" >&5 +$as_echo "$ax_cv_boost_regex" >&6; } + if test "x$ax_cv_boost_regex" = "xyes"; then + +$as_echo "@%:@define HAVE_BOOST_REGEX /**/" >>confdefs.h + + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + if test "x$ax_boost_user_regex_lib" = "x"; then + for libextension in `ls $BOOSTLIBDIR/libboost_regex*.{so,a}* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_regex.*\)\.so.*$;\1;' -e 's;^lib\(boost_regex.*\)\.a*$;\1;'` ; do + ax_lib=${libextension} + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_REGEX_LIB="-l$ax_lib"; link_regex="yes"; break +else + link_regex="no" +fi + + done + if test "x$link_regex" != "xyes"; then + for libextension in `ls $BOOSTLIBDIR/boost_regex*.{dll,a}* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_regex.*\)\.dll.*$;\1;' -e 's;^\(boost_regex.*\)\.a*$;\1;'` ; do + ax_lib=${libextension} + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 +$as_echo_n "checking for exit in -l$ax_lib... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char exit (); +int +main () +{ +return exit (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_REGEX_LIB="-l$ax_lib"; link_regex="yes"; break +else + link_regex="no" +fi + + done + fi + + else + for ax_lib in $ax_boost_user_regex_lib boost_regex-$ax_boost_user_regex_lib; do + as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l$ax_lib" >&5 +$as_echo_n "checking for main in -l$ax_lib... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$ax_lib $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BOOST_REGEX_LIB="-l$ax_lib"; link_regex="yes"; break +else + link_regex="no" +fi + + done + fi + if test "x$link_regex" != "xyes"; then + as_fn_error $? "Could not link against $ax_lib !" "$LINENO" 5 + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi + +AX_BOOST_TEST +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_F77+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_F77="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $F77" >&5 +$as_echo "$F77" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_F77="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5 +$as_echo "$ac_ct_F77" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_F77" && break +done + + if test "x$ac_ct_F77" = x; then + F77="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + F77=$ac_ct_F77 + fi +fi + + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran 77 compiler" >&5 +$as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; } +if test "${ac_cv_f77_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +if ac_fn_f77_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5 +$as_echo "$ac_cv_f77_compiler_gnu" >&6; } +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+set} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5 +$as_echo_n "checking whether $F77 accepts -g... " >&6; } +if test "${ac_cv_prog_f77_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + FFLAGS=-g +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_f77_try_compile "$LINENO"; then : + ac_cv_prog_f77_g=yes +else + ac_cv_prog_f77_g=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5 +$as_echo "$ac_cv_prog_f77_g" >&6; } +if test "$ac_test_FFLAGS" = set; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +if test $ac_compiler_gnu = yes; then + G77=yes +else + G77= +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $F77" >&5 +$as_echo_n "checking how to get verbose linking output from $F77... " >&6; } +if test "${ac_cv_prog_f77_v+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_f77_try_compile "$LINENO"; then : + ac_cv_prog_f77_v= +# Try some options frequently used verbose output +for ac_verb in -v -verbose --verbose -V -\#\#\#; do + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF + +# Compile and link our simple test program by passing a flag (argument +# 1 to this macro) to the Fortran compiler in order to get +# "verbose" output that we can then parse for the Fortran linker +# flags. +ac_save_FFLAGS=$FFLAGS +FFLAGS="$FFLAGS $ac_verb" +eval "set x $ac_link" +shift +$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 +# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, +# LIBRARY_PATH; skip all such settings. +ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | + grep -v 'Driving:' | grep -v "^[_$as_cr_Letters][_$as_cr_alnum]*="` +$as_echo "$ac_f77_v_output" >&5 +FFLAGS=$ac_save_FFLAGS + +rm -rf conftest* + +# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where +# /foo, /bar, and /baz are search directories for the Fortran linker. +# Here, we change these into -L/foo -L/bar -L/baz (and put it first): +ac_f77_v_output="`echo $ac_f77_v_output | + grep 'LPATH is:' | + sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" + +# FIXME: we keep getting bitten by quoted arguments; a more general fix +# that detects unbalanced quotes in FLIBS should be implemented +# and (ugh) tested at some point. +case $ac_f77_v_output in + # If we are using xlf then replace all the commas with spaces. + *xlfentry*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; + + # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted + # $LIBS confuse us, and the libraries appear later in the output anyway). + *mGLOB_options_string*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; + + # Portland Group compiler has singly- or doubly-quoted -cmdline argument + # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. + # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". + *-cmdline\ * | *-ignore\ * | *-def\ *) + ac_f77_v_output=`echo $ac_f77_v_output | sed "\ + s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g + s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g + s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; + + # If we are using Cray Fortran then delete quotes. + *cft90*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; +esac + + + # look for -l* and *.a constructs in the output + for ac_arg in $ac_f77_v_output; do + case $ac_arg in + [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) + ac_cv_prog_f77_v=$ac_verb + break 2 ;; + esac + done +done +if test -z "$ac_cv_prog_f77_v"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $F77" >&5 +$as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 +$as_echo "$as_me: WARNING: compilation failed" >&2;} +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_v" >&5 +$as_echo "$ac_cv_prog_f77_v" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 libraries of $F77" >&5 +$as_echo_n "checking for Fortran 77 libraries of $F77... " >&6; } +if test "${ac_cv_f77_libs+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$FLIBS" != "x"; then + ac_cv_f77_libs="$FLIBS" # Let the user override the test. +else + +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF + +# Compile and link our simple test program by passing a flag (argument +# 1 to this macro) to the Fortran compiler in order to get +# "verbose" output that we can then parse for the Fortran linker +# flags. +ac_save_FFLAGS=$FFLAGS +FFLAGS="$FFLAGS $ac_cv_prog_f77_v" +eval "set x $ac_link" +shift +$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 +# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, +# LIBRARY_PATH; skip all such settings. +ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | + grep -v 'Driving:' | grep -v "^[_$as_cr_Letters][_$as_cr_alnum]*="` +$as_echo "$ac_f77_v_output" >&5 +FFLAGS=$ac_save_FFLAGS + +rm -rf conftest* + +# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where +# /foo, /bar, and /baz are search directories for the Fortran linker. +# Here, we change these into -L/foo -L/bar -L/baz (and put it first): +ac_f77_v_output="`echo $ac_f77_v_output | + grep 'LPATH is:' | + sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" + +# FIXME: we keep getting bitten by quoted arguments; a more general fix +# that detects unbalanced quotes in FLIBS should be implemented +# and (ugh) tested at some point. +case $ac_f77_v_output in + # If we are using xlf then replace all the commas with spaces. + *xlfentry*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/,/ /g'` ;; + + # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted + # $LIBS confuse us, and the libraries appear later in the output anyway). + *mGLOB_options_string*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; + + # Portland Group compiler has singly- or doubly-quoted -cmdline argument + # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. + # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". + *-cmdline\ * | *-ignore\ * | *-def\ *) + ac_f77_v_output=`echo $ac_f77_v_output | sed "\ + s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g + s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g + s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; + + # If we are using Cray Fortran then delete quotes. + *cft90*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; +esac + + + +ac_cv_f77_libs= + +# Save positional arguments (if any) +ac_save_positional="$@" + +set X $ac_f77_v_output +while test $@%:@ != 1; do + shift + ac_arg=$1 + case $ac_arg in + [\\/]*.a | ?:[\\/]*.a) + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then : + +else + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" +fi + ;; + -bI:*) + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then : + +else + if test "$ac_compiler_gnu" = yes; then + for ac_link_opt in $ac_arg; do + ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" + done +else + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" +fi +fi + ;; + # Ignore these flags. + -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ + |-LANG:=* | -LIST:* | -LNO:* | -link) + ;; + -lkernel32) + test x"$CYGWIN" != xyes && ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" + ;; + -[LRuYz]) + # These flags, when seen by themselves, take an argument. + # We remove the space between option and argument and re-iterate + # unless we find an empty arg or a new option (starting with -) + case $2 in + "" | -*);; + *) + ac_arg="$ac_arg$2" + shift; shift + set X $ac_arg "$@" + ;; + esac + ;; + -YP,*) + for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_j" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then : + +else + ac_arg="$ac_arg $ac_j" + ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" +fi + done + ;; + -[lLR]*) + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue; then : + +else + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" +fi + ;; + -zallextract*| -zdefaultextract) + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" + ;; + # Ignore everything else. + esac +done +# restore positional arguments +set X $ac_save_positional; shift + +# We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, +# then we insist that the "run path" must be an absolute path (i.e. it +# must begin with a "/"). +case `(uname -sr) 2>/dev/null` in + "SunOS 5"*) + ac_ld_run_path=`$as_echo "$ac_f77_v_output" | + sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` + test "x$ac_ld_run_path" != x && + if test "$ac_compiler_gnu" = yes; then + for ac_link_opt in $ac_ld_run_path; do + ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" + done +else + ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" +fi + ;; +esac +fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_libs" >&5 +$as_echo "$ac_cv_f77_libs" >&6; } +FLIBS="$ac_cv_f77_libs" + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran 77 libraries" >&5 +$as_echo_n "checking for dummy main to link with Fortran 77 libraries... " >&6; } +if test "${ac_cv_f77_dummy_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_f77_dm_save_LIBS=$LIBS + LIBS="$LIBS $FLIBS" + ac_fortran_dm_var=F77_DUMMY_MAIN + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + # First, try linking without a dummy main: + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_fortran_dummy_main=none +else + ac_cv_fortran_dummy_main=unknown +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + if test $ac_cv_fortran_dummy_main = unknown; then + for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@define $ac_fortran_dm_var $ac_func +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_fortran_dummy_main=$ac_func; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + fi + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + ac_cv_f77_dummy_main=$ac_cv_fortran_dummy_main + rm -rf conftest* + LIBS=$ac_f77_dm_save_LIBS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_dummy_main" >&5 +$as_echo "$ac_cv_f77_dummy_main" >&6; } +F77_DUMMY_MAIN=$ac_cv_f77_dummy_main +if test "$F77_DUMMY_MAIN" != unknown; then : + if test $F77_DUMMY_MAIN != none; then + +cat >>confdefs.h <<_ACEOF +@%:@define F77_DUMMY_MAIN $F77_DUMMY_MAIN +_ACEOF + + if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then + +$as_echo "@%:@define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h + + fi +fi +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "linking to Fortran libraries from C fails +See \`config.log' for more details" "$LINENO" 5 ; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 name-mangling scheme" >&5 +$as_echo_n "checking for Fortran 77 name-mangling scheme... " >&6; } +if test "${ac_cv_f77_mangling+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.$ac_ext <<_ACEOF + subroutine foobar() + return + end + subroutine foo_bar() + return + end +_ACEOF +if ac_fn_f77_try_compile "$LINENO"; then : + mv conftest.$ac_objext cfortran_test.$ac_objext + + ac_save_LIBS=$LIBS + LIBS="cfortran_test.$ac_objext $LIBS $FLIBS" + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + ac_success=no + for ac_foobar in foobar FOOBAR; do + for ac_underscore in "" "_"; do + ac_func="$ac_foobar$ac_underscore" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_success=yes; break 2 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + done + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + if test "$ac_success" = "yes"; then + case $ac_foobar in + foobar) + ac_case=lower + ac_foo_bar=foo_bar + ;; + FOOBAR) + ac_case=upper + ac_foo_bar=FOO_BAR + ;; + esac + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + ac_success_extra=no + for ac_extra in "" "_"; do + ac_func="$ac_foo_bar$ac_underscore$ac_extra" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_success_extra=yes; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + done + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + if test "$ac_success_extra" = "yes"; then + ac_cv_f77_mangling="$ac_case case" + if test -z "$ac_underscore"; then + ac_cv_f77_mangling="$ac_cv_f77_mangling, no underscore" + else + ac_cv_f77_mangling="$ac_cv_f77_mangling, underscore" + fi + if test -z "$ac_extra"; then + ac_cv_f77_mangling="$ac_cv_f77_mangling, no extra underscore" + else + ac_cv_f77_mangling="$ac_cv_f77_mangling, extra underscore" + fi + else + ac_cv_f77_mangling="unknown" + fi + else + ac_cv_f77_mangling="unknown" + fi + + LIBS=$ac_save_LIBS + rm -rf conftest* + rm -f cfortran_test* +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compile a simple Fortran program +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_mangling" >&5 +$as_echo "$ac_cv_f77_mangling" >&6; } + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +ax_blas_ok=no + + +@%:@ Check whether --with-blas was given. +if test "${with_blas+set}" = set; then : + withval=$with_blas; +fi + +case $with_blas in + yes | "") ;; + no) ax_blas_ok=disable ;; + -* | */* | *.a | *.so | *.so.* | *.o) BLAS_LIBS="$with_blas" ;; + *) BLAS_LIBS="-l$with_blas" ;; +esac + +# Get fortran linker names of BLAS functions to check for. +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +case $ac_cv_f77_mangling in + upper*) ac_val="SGEMM" ;; + lower*) ac_val="sgemm" ;; + *) ac_val="unknown" ;; +esac +case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac + +sgemm="$ac_val" + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +case $ac_cv_f77_mangling in + upper*) ac_val="DGEMM" ;; + lower*) ac_val="dgemm" ;; + *) ac_val="unknown" ;; +esac +case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac + +dgemm="$ac_val" + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ax_blas_save_LIBS="$LIBS" +LIBS="$LIBS $FLIBS" + +# First, check BLAS_LIBS environment variable +if test $ax_blas_ok = no; then +if test "x$BLAS_LIBS" != x; then + save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in $BLAS_LIBS" >&5 +$as_echo_n "checking for $sgemm in $BLAS_LIBS... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_blas_ok=yes +else + BLAS_LIBS="" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_blas_ok" >&5 +$as_echo "$ax_blas_ok" >&6; } + LIBS="$save_LIBS" +fi +fi + +# BLAS linked to by default? (happens on some supercomputers) +if test $ax_blas_ok = no; then + save_LIBS="$LIBS"; LIBS="$LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $sgemm is being linked in already" >&5 +$as_echo_n "checking if $sgemm is being linked in already... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_blas_ok=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_blas_ok" >&5 +$as_echo "$ax_blas_ok" >&6; } + LIBS="$save_LIBS" +fi + +# BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) +if test $ax_blas_ok = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ATL_xerbla in -latlas" >&5 +$as_echo_n "checking for ATL_xerbla in -latlas... " >&6; } +if test "${ac_cv_lib_atlas_ATL_xerbla+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-latlas $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ATL_xerbla (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return ATL_xerbla (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_atlas_ATL_xerbla=yes +else + ac_cv_lib_atlas_ATL_xerbla=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_atlas_ATL_xerbla" >&5 +$as_echo "$ac_cv_lib_atlas_ATL_xerbla" >&6; } +if test "x$ac_cv_lib_atlas_ATL_xerbla" = x""yes; then : + as_ac_Lib=`$as_echo "ac_cv_lib_f77blas_$sgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lf77blas" >&5 +$as_echo_n "checking for $sgemm in -lf77blas... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lf77blas -latlas $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cblas_dgemm in -lcblas" >&5 +$as_echo_n "checking for cblas_dgemm in -lcblas... " >&6; } +if test "${ac_cv_lib_cblas_cblas_dgemm+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcblas -lf77blas -latlas $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cblas_dgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return cblas_dgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_cblas_cblas_dgemm=yes +else + ac_cv_lib_cblas_cblas_dgemm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cblas_cblas_dgemm" >&5 +$as_echo "$ac_cv_lib_cblas_cblas_dgemm" >&6; } +if test "x$ac_cv_lib_cblas_cblas_dgemm" = x""yes; then : + ax_blas_ok=yes + BLAS_LIBS="-lcblas -lf77blas -latlas" +fi + +fi + +fi + +fi + +# BLAS in PhiPACK libraries? (requires generic BLAS lib, too) +if test $ax_blas_ok = no; then + as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5 +$as_echo_n "checking for $sgemm in -lblas... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lblas $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + as_ac_Lib=`$as_echo "ac_cv_lib_dgemm_$dgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $dgemm in -ldgemm" >&5 +$as_echo_n "checking for $dgemm in -ldgemm... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldgemm -lblas $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $dgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $dgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + as_ac_Lib=`$as_echo "ac_cv_lib_sgemm_$sgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lsgemm" >&5 +$as_echo_n "checking for $sgemm in -lsgemm... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsgemm -lblas $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas" +fi + +fi + +fi + +fi + +# BLAS in Intel MKL library? +if test $ax_blas_ok = no; then + as_ac_Lib=`$as_echo "ac_cv_lib_mkl_$sgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lmkl" >&5 +$as_echo_n "checking for $sgemm in -lmkl... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmkl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_blas_ok=yes;BLAS_LIBS="-lmkl" +fi + +fi + +# BLAS in Apple vecLib library? +if test $ax_blas_ok = no; then + save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -framework vecLib" >&5 +$as_echo_n "checking for $sgemm in -framework vecLib... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_blas_ok=yes;BLAS_LIBS="-framework vecLib" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_blas_ok" >&5 +$as_echo "$ax_blas_ok" >&6; } + LIBS="$save_LIBS" +fi + +# BLAS in Alpha CXML library? +if test $ax_blas_ok = no; then + as_ac_Lib=`$as_echo "ac_cv_lib_cxml_$sgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lcxml" >&5 +$as_echo_n "checking for $sgemm in -lcxml... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcxml $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_blas_ok=yes;BLAS_LIBS="-lcxml" +fi + +fi + +# BLAS in Alpha DXML library? (now called CXML, see above) +if test $ax_blas_ok = no; then + as_ac_Lib=`$as_echo "ac_cv_lib_dxml_$sgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -ldxml" >&5 +$as_echo_n "checking for $sgemm in -ldxml... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldxml $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_blas_ok=yes;BLAS_LIBS="-ldxml" +fi + +fi + +# BLAS in Sun Performance library? +if test $ax_blas_ok = no; then + if test "x$GCC" != xyes; then # only works with Sun CC + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for acosp in -lsunmath" >&5 +$as_echo_n "checking for acosp in -lsunmath... " >&6; } +if test "${ac_cv_lib_sunmath_acosp+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsunmath $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char acosp (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return acosp (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_sunmath_acosp=yes +else + ac_cv_lib_sunmath_acosp=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sunmath_acosp" >&5 +$as_echo "$ac_cv_lib_sunmath_acosp" >&6; } +if test "x$ac_cv_lib_sunmath_acosp" = x""yes; then : + as_ac_Lib=`$as_echo "ac_cv_lib_sunperf_$sgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lsunperf" >&5 +$as_echo_n "checking for $sgemm in -lsunperf... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsunperf -lsunmath $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + BLAS_LIBS="-xlic_lib=sunperf -lsunmath" + ax_blas_ok=yes +fi + +fi + + fi +fi + +# BLAS in SCSL library? (SGI/Cray Scientific Library) +if test $ax_blas_ok = no; then + as_ac_Lib=`$as_echo "ac_cv_lib_scs_$sgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lscs" >&5 +$as_echo_n "checking for $sgemm in -lscs... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lscs $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_blas_ok=yes; BLAS_LIBS="-lscs" +fi + +fi + +# BLAS in SGIMATH library? +if test $ax_blas_ok = no; then + as_ac_Lib=`$as_echo "ac_cv_lib_complib.sgimath_$sgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lcomplib.sgimath" >&5 +$as_echo_n "checking for $sgemm in -lcomplib.sgimath... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcomplib.sgimath $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath" +fi + +fi + +# BLAS in IBM ESSL library? (requires generic BLAS lib, too) +if test $ax_blas_ok = no; then + as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5 +$as_echo_n "checking for $sgemm in -lblas... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lblas $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + as_ac_Lib=`$as_echo "ac_cv_lib_essl_$sgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lessl" >&5 +$as_echo_n "checking for $sgemm in -lessl... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lessl -lblas $FLIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_blas_ok=yes; BLAS_LIBS="-lessl -lblas" +fi + +fi + +fi + +# Generic BLAS library? +if test $ax_blas_ok = no; then + as_ac_Lib=`$as_echo "ac_cv_lib_blas_$sgemm" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $sgemm in -lblas" >&5 +$as_echo_n "checking for $sgemm in -lblas... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lblas $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $sgemm (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $sgemm (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_blas_ok=yes; BLAS_LIBS="-lblas" +fi + +fi + + + +LIBS="$ax_blas_save_LIBS" + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$ax_blas_ok" = xyes; then + +$as_echo "@%:@define HAVE_BLAS 1" >>confdefs.h + + : +else + ax_blas_ok=no + +fi + + + +ax_lapack_ok=no + + +@%:@ Check whether --with-lapack was given. +if test "${with_lapack+set}" = set; then : + withval=$with_lapack; +fi + +case $with_lapack in + yes | "") ;; + no) ax_lapack_ok=disable ;; + -* | */* | *.a | *.so | *.so.* | *.o) LAPACK_LIBS="$with_lapack" ;; + *) LAPACK_LIBS="-l$with_lapack" ;; +esac + +# Get fortran linker name of LAPACK function to check for. +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +case $ac_cv_f77_mangling in + upper*) ac_val="CHEEV" ;; + lower*) ac_val="cheev" ;; + *) ac_val="unknown" ;; +esac +case $ac_cv_f77_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac + +cheev="$ac_val" + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# We cannot use LAPACK if BLAS is not found +if test "x$ax_blas_ok" != xyes; then + ax_lapack_ok=noblas + LAPACK_LIBS="" +fi + +# First, check LAPACK_LIBS environment variable +if test "x$LAPACK_LIBS" != x; then + save_LIBS="$LIBS"; LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $cheev in $LAPACK_LIBS" >&5 +$as_echo_n "checking for $cheev in $LAPACK_LIBS... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $cheev (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $cheev (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_lapack_ok=yes +else + LAPACK_LIBS="" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_lapack_ok" >&5 +$as_echo "$ax_lapack_ok" >&6; } + LIBS="$save_LIBS" + if test $ax_lapack_ok = no; then + LAPACK_LIBS="" + fi +fi + +# LAPACK linked to by default? (is sometimes included in BLAS lib) +if test $ax_lapack_ok = no; then + save_LIBS="$LIBS"; LIBS="$LIBS $BLAS_LIBS $FLIBS" + as_ac_var=`$as_echo "ac_cv_func_$cheev" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$cheev" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + ax_lapack_ok=yes +fi + + LIBS="$save_LIBS" +fi + +# Generic LAPACK library? +for lapack in lapack lapack_rs6k; do + if test $ax_lapack_ok = no; then + save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" + as_ac_Lib=`$as_echo "ac_cv_lib_$lapack''_$cheev" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $cheev in -l$lapack" >&5 +$as_echo_n "checking for $cheev in -l$lapack... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l$lapack $FLIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $cheev (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return $cheev (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + ax_lapack_ok=yes; LAPACK_LIBS="-l$lapack" +fi + + LIBS="$save_LIBS" + fi +done + + + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$ax_lapack_ok" = xyes; then + +$as_echo "@%:@define HAVE_LAPACK 1" >>confdefs.h + + : +else + ax_lapack_ok=no + +fi + + + + + +@%:@ Check whether --with-hlib was given. +if test "${with_hlib+set}" = set; then : + withval=$with_hlib; + if test "$withval" = "no"; then + want_hlib="no" + elif test "$withval" = "yes"; then + want_hlib="yes" + ac_hlib_path="" + else + want_hlib="yes" + ac_hlib_path="$withval" + fi + +else + + want_hlib="yes" + +fi + + + if test "x$want_hlib" = "xyes"; then + if test "x$LAPACK_LIBS" = "x"; then + as_fn_error $? "We could not detect lapack. Please install lapack or disable + HLib." "$LINENO" 5 + fi + + if test "$ac_hlib_path" != ""; then + HLIB_LDFLAGS="-L$ac_hlib_path/lib" + HLIB_CPPFLAGS="-I$ac_hlib_path/include" + HLIB_ROOT_PATH="$ac_hlib_path" + else + for ac_hlib_path_tmp in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_hlib_path_tmp/include/HLib"; then + HLIB_LDFLAGS="-L$ac_hlib_path_tmp/lib" + HLIB_CPPFLAGS="-I$ac_hlib_path_tmp/include" + HLIB_ROOT_PATH="$ac_hlib_path_tmp" + break; + fi + done + fi + + if test "x$HLIB_ROOT_PATH" = "x"; then + as_fn_error $? "We could not detect HLib. You may disable this error + message by running configure with --with-hlib=no. If you + would like to use HLib, please make sure that a recent + version (1.3 or higher) is installed and specify the + location by running configure with --with-hlib=/dir/to/hlib. + Please note that you have to install HLib to use it with + this software package." "$LINENO" 5 + else + + + + + # Now we are trying to include headers: + CPPFLAGS_SAVED="$CPPFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + + CPPFLAGS="$CPPFLAGS $HLIB_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $HLIB_LDFLAGS" + export LDFLAGS + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether HLib library is available" >&5 +$as_echo_n "checking whether HLib library is available... " >&6; } +if test "${ax_cv_hlib+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +del_bemgrid2d(new_bemgrid2d(5, 5)); return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ax_cv_hlib=yes +else + ax_cv_hlib=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_hlib" >&5 +$as_echo "$ax_cv_hlib" >&6; } + + if test "x$ax_cv_hlib" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for newaca_fill_block in -lhmatrix" >&5 +$as_echo_n "checking for newaca_fill_block in -lhmatrix... " >&6; } +if test "${ac_cv_lib_hmatrix_newaca_fill_block+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lhmatrix $LAPACK_LIBS $BLAS_LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char newaca_fill_block (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +return newaca_fill_block (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_hmatrix_newaca_fill_block=yes +else + ac_cv_lib_hmatrix_newaca_fill_block=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hmatrix_newaca_fill_block" >&5 +$as_echo "$ac_cv_lib_hmatrix_newaca_fill_block" >&6; } +if test "x$ac_cv_lib_hmatrix_newaca_fill_block" = x""yes; then : + HLIB_LIB="-lhmatrix"; link_hlib="yes"; break +else + link_hlib="no" +fi + + + if test "x$link_hlib" = "xyes"; then + +$as_echo "@%:@define HAVE_HLIB /**/" >>confdefs.h + + else + as_fn_error $? "Could not link against HLib. Please verify that + HLib is installed properly. You may disable support + for HLib by running configure with --with-hlib=no." "$LINENO" 5 + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi + fi + + + +@%:@ Check whether --with-loki was given. +if test "${with_loki+set}" = set; then : + withval=$with_loki; + if test "$withval" = "no"; then + as_fn_error $? "Sorry, but it is not possible to compile without loki" "$LINENO" 5 + want_loki="no" + elif test "$withval" = "yes"; then + want_loki="yes" + ac_loki_path="" + else + want_loki="yes" + ac_loki_path="$withval" + fi + +else + + want_loki="yes"; + +fi + + + if test "x$want_loki" = "xyes"; then + if test "x$ac_loki_path" = "x"; then + for ac_loki_path_tmp in /usr /usr/local /opt /opt/local; do + if test -d "$ac_loki_path_tmp/include/loki"; then + LOKI_LDFLAGS="-L$ac_hlib_path_tmp/lib" + LOKI_CPPFLAGS="-I$ac_hlib_path_tmp/include" + LOKI_ROOT_PATH="$ac_hlib_path_tmp" + break; + fi + done + else + LOKI_LDFLAGS="-L$ac_hlib_path/lib" + LOKI_CPPFLAGS="-I$ac_hlib_path/include" + LOKI_ROOT_PATH="$ac_hlib_path" + fi + + if test "x$LOKI_ROOT_PATH" = "x"; then + as_fn_error $? "We could not detect the loki library. Please install + the loki library, c.f. loki-lib.sf.net, before + proceeding." "$LINENO" 5 + else + + + + + # Run some basic tests to check whether loki is really available: + CPPFLAGS_SAVED="$CPPFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + + CPPFLAGS="$CPPFLAGS $LOKI_CPPFLAGS" + CFLAGS="$CPPFLAGS" + export CPPFLAGS + export CFLAGS + LDFLAGS="$LDFLAGS $LOKI_LDFLAGS" + export LDFLAGS + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Loki is usable" >&5 +$as_echo_n "checking whether Loki is usable... " >&6; } +if test "${ax_cv_loki+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +::Loki::SmartPtr< int > t = new int; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_loki="yes" +else + ax_cv_loki="no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_loki" >&5 +$as_echo "$ax_cv_loki" >&6; } + + if test "$ax_cv_loki" != "yes"; then + as_fn_error $? "Could not use the loki library. Please make sure + that it is installed correctly." "$LINENO" 5 ; + fi + + CPPFLAGS="$SAVED_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$SAVED_LDFLAGS" + export LDFLAGS + fi + fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5 ; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if test "${ac_cv_header_stdbool_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifndef bool + "error: bool is not defined" +#endif +#ifndef false + "error: false is not defined" +#endif +#if false + "error: false is not 0" +#endif +#ifndef true + "error: true is not defined" +#endif +#if true != 1 + "error: true is not 1" +#endif +#ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" +#endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + bool e = &s; + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; +# if defined __xlc__ || defined __GNUC__ + /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 + reported by James Lemley on 2005-10-05; see + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + This test is not quite right, since xlc is allowed to + reject this program, as the initializer for xlcbug is + not one of the forms that C requires support for. + However, doing the test right would require a runtime + test, and that would make cross-compilation harder. + Let us hope that IBM fixes the xlc bug, and also adds + support for this kind of constant expression. In the + meantime, this test will reject xlc, which is OK, since + our stdbool.h substitute should suffice. We also test + this with GCC, where it should work, to detect more + quickly whether someone messes up the test in the + future. */ + char digs[] = "0123456789"; + int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); +# endif + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ + + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } +ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +@%:@define HAVE__BOOL 1 +_ACEOF + + +fi + +if test $ac_cv_header_stdbool_h = yes; then + +$as_echo "@%:@define HAVE_STDBOOL_H 1" >>confdefs.h + +fi + + + + + +ac_config_files="$ac_config_files Makefile src/Makefile src/boundary_mesh/Makefile src/spaces/Makefile src/laplace/Makefile t/Makefile t/generic/Makefile t/boundary_mesh/Makefile t/laplace/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_doc\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_doc\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_dot\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_dot\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_man\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_man\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_rtf\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_rtf\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_xml\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_xml\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_chm\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_chm\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_chi\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_chi\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_html\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_html\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_ps\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_ps\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_pdf\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_pdf\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_latex\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then + as_fn_error $? "conditional \"DX_COND_latex\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in @%:@( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by Hilbert 3D $as_me 0.1.0, which was +generated by GNU Autoconf 2.67. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to . +Hilbert 3D home page: ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +Hilbert 3D config.status 0.1.0 +configured by $0, generated by GNU Autoconf 2.67, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "src/boundary_mesh/Makefile") CONFIG_FILES="$CONFIG_FILES src/boundary_mesh/Makefile" ;; + "src/spaces/Makefile") CONFIG_FILES="$CONFIG_FILES src/spaces/Makefile" ;; + "src/laplace/Makefile") CONFIG_FILES="$CONFIG_FILES src/laplace/Makefile" ;; + "t/Makefile") CONFIG_FILES="$CONFIG_FILES t/Makefile" ;; + "t/generic/Makefile") CONFIG_FILES="$CONFIG_FILES t/generic/Makefile" ;; + "t/boundary_mesh/Makefile") CONFIG_FILES="$CONFIG_FILES t/boundary_mesh/Makefile" ;; + "t/laplace/Makefile") CONFIG_FILES="$CONFIG_FILES t/laplace/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + diff --git a/src/bem3d/autom4te.cache/requests b/src/bem3d/autom4te.cache/requests index 85aa52a..afec7be 100755 --- a/src/bem3d/autom4te.cache/requests +++ b/src/bem3d/autom4te.cache/requests @@ -105,9 +105,9 @@ 'AM_PROG_MKDIR_P' => 1, 'DX_FEATURE_chi' => 1, 'DX_IF_FEATURE' => 1, + 'DX_FEATURE_doc' => 1, 'DX_CHM_FEATURE' => 1, 'AM_AUTOMAKE_VERSION' => 1, - 'DX_FEATURE_doc' => 1, 'AM_MISSING_HAS_RUN' => 1, 'DX_PDF_FEATURE' => 1, 'AM_SUBST_NOTMAKE' => 1, @@ -235,6 +235,120 @@ '_AM_COND_ELSE' => 1, 'AC_SUBST_TRACE' => 1 } + ], 'Autom4te::Request' ), + bless( [ + '3', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + '/usr/share/aclocal-1.11/amversion.m4', + '/usr/share/aclocal-1.11/auxdir.m4', + '/usr/share/aclocal-1.11/cond.m4', + '/usr/share/aclocal-1.11/depend.m4', + '/usr/share/aclocal-1.11/depout.m4', + '/usr/share/aclocal-1.11/init.m4', + '/usr/share/aclocal-1.11/install-sh.m4', + '/usr/share/aclocal-1.11/lead-dot.m4', + '/usr/share/aclocal-1.11/make.m4', + '/usr/share/aclocal-1.11/missing.m4', + '/usr/share/aclocal-1.11/mkdirp.m4', + '/usr/share/aclocal-1.11/options.m4', + '/usr/share/aclocal-1.11/runlog.m4', + '/usr/share/aclocal-1.11/sanity.m4', + '/usr/share/aclocal-1.11/silent.m4', + '/usr/share/aclocal-1.11/strip.m4', + '/usr/share/aclocal-1.11/substnot.m4', + '/usr/share/aclocal-1.11/tar.m4', + 'm4/ax_blas.m4', + 'm4/ax_boost_base.m4', + 'm4/ax_boost_regex.m4', + 'm4/ax_hlib.m4', + 'm4/ax_lapack.m4', + 'm4/ax_lib_loki.m4', + 'm4/ax_prog_doxygen.m4', + 'configure.ac' + ], + { + 'DX_RTF_FEATURE' => 1, + 'm4_pattern_forbid' => 1, + 'AX_LAPACK' => 1, + 'AC_DEFUN' => 1, + 'AM_PROG_MKDIR_P' => 1, + 'DX_FEATURE_chi' => 1, + 'DX_IF_FEATURE' => 1, + 'DX_CHM_FEATURE' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'DX_FEATURE_doc' => 1, + 'AM_MISSING_HAS_RUN' => 1, + 'DX_PDF_FEATURE' => 1, + 'AM_SUBST_NOTMAKE' => 1, + 'AM_MISSING_PROG' => 1, + 'AM_PROG_INSTALL_STRIP' => 1, + 'DX_DOT_FEATURE' => 1, + '_m4_warn' => 1, + 'AM_SANITY_CHECK' => 1, + 'DX_CHI_FEATURE' => 1, + 'AX_LIB_LOKI' => 1, + '_AM_PROG_TAR' => 1, + 'DX_CURRENT_FEATURE' => 1, + 'DX_CLEAR_DEPEND' => 1, + 'AM_DEP_TRACK' => 1, + 'ACX_LAPACK' => 1, + 'DX_HTML_FEATURE' => 1, + '_AM_IF_OPTION' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'm4_pattern_allow' => 1, + '_AM_AUTOCONF_VERSION' => 1, + 'AM_SET_LEADING_DOT' => 1, + 'DX_DIRNAME_EXPR' => 1, + '_AM_DEPENDENCIES' => 1, + 'DX_DOXYGEN_FEATURE' => 1, + 'DX_FEATURE_man' => 1, + 'AX_HLIB' => 1, + 'DX_PS_FEATURE' => 1, + 'AU_DEFUN' => 1, + 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, + 'DX_MAN_FEATURE' => 1, + '_AM_SET_OPTION' => 1, + 'AX_BLAS' => 1, + 'DX_FEATURE_chm' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'DX_FEATURE_rtf' => 1, + 'DX_INIT_DOXYGEN' => 1, + 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AC_DEFUN_ONCE' => 1, + 'DX_XML_FEATURE' => 1, + 'AX_BOOST_REGEX' => 1, + 'DX_TEST_FEATURE' => 1, + 'DX_ENV_APPEND' => 1, + 'AM_SILENT_RULES' => 1, + 'AX_BOOST_BASE' => 1, + 'DX_CHECK_DEPEND' => 1, + 'DX_FEATURE_pdf' => 1, + 'include' => 1, + 'DX_REQUIRE_PROG' => 1, + 'DX_ARG_ABLE' => 1, + 'DX_FEATURE_html' => 1, + 'AM_AUX_DIR_EXPAND' => 1, + 'DX_CURRENT_DESCRIPTION' => 1, + '_AM_SET_OPTIONS' => 1, + '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AM_RUN_LOG' => 1, + '_AM_MANGLE_OPTION' => 1, + 'AM_CONDITIONAL' => 1, + 'DX_FEATURE_xml' => 1, + 'AM_SET_DEPDIR' => 1, + 'DX_FEATURE_dot' => 1, + 'AM_PROG_INSTALL_SH' => 1, + 'm4_include' => 1, + 'ACX_BLAS' => 1, + 'DX_FEATURE_ps' => 1, + '_AC_AM_CONFIG_HEADER_HOOK' => 1, + 'AM_MAKE_INCLUDE' => 1 + } ], 'Autom4te::Request' ) ); diff --git a/src/bem3d/autom4te.cache/traces.2 b/src/bem3d/autom4te.cache/traces.2 index 4a1e5e6..73a4b69 100755 --- a/src/bem3d/autom4te.cache/traces.2 +++ b/src/bem3d/autom4te.cache/traces.2 @@ -3,7 +3,8 @@ m4trace:aclocal.m4:953: -1- m4_include([m4/ax_boost_base.m4]) m4trace:aclocal.m4:954: -1- m4_include([m4/ax_boost_regex.m4]) m4trace:aclocal.m4:955: -1- m4_include([m4/ax_hlib.m4]) m4trace:aclocal.m4:956: -1- m4_include([m4/ax_lapack.m4]) -m4trace:aclocal.m4:957: -1- m4_include([m4/ax_prog_doxygen.m4]) +m4trace:aclocal.m4:957: -1- m4_include([m4/ax_lib_loki.m4]) +m4trace:aclocal.m4:958: -1- m4_include([m4/ax_prog_doxygen.m4]) m4trace:configure.ac:1: -1- AC_INIT([Hilbert 3D], [0.1.0], [markus.mayr@tuwien.ac.at], [hilbert3d], [http://83.169.35.184/cgi-bin/gitweb?p=bem3d.git]) m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:1: -1- m4_pattern_forbid([_AC_]) @@ -847,135 +848,150 @@ m4trace:configure.ac:13: -1- m4_pattern_allow([^BOOST_REGEX_LIB$]) m4trace:configure.ac:13: -1- AC_SUBST([BOOST_REGEX_LIB]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([BOOST_REGEX_LIB]) m4trace:configure.ac:13: -1- m4_pattern_allow([^BOOST_REGEX_LIB$]) -m4trace:configure.ac:14: -1- AC_SUBST([F77]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([F77]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^F77$]) -m4trace:configure.ac:14: -1- AC_SUBST([FFLAGS]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([FFLAGS]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^FFLAGS$]) -m4trace:configure.ac:14: -1- AC_SUBST([LDFLAGS]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([LDFLAGS]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^LDFLAGS$]) -m4trace:configure.ac:14: -1- AC_SUBST([LIBS]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([LIBS]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^LIBS$]) -m4trace:configure.ac:14: -1- AC_SUBST([F77]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([F77]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^F77$]) -m4trace:configure.ac:14: -1- AC_SUBST([ac_ct_F77]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([ac_ct_F77]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^ac_ct_F77$]) -m4trace:configure.ac:14: -1- AC_SUBST([FLIBS]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([FLIBS]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^FLIBS$]) -m4trace:configure.ac:14: -1- AC_DEFINE_TRACE_LITERAL([F77_DUMMY_MAIN]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^F77_DUMMY_MAIN$]) -m4trace:configure.ac:14: -1- AH_OUTPUT([F77_DUMMY_MAIN], [/* Define to dummy `main\' function (if any) required to link to the Fortran +m4trace:configure.ac:15: -1- AC_SUBST([F77]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([F77]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^F77$]) +m4trace:configure.ac:15: -1- AC_SUBST([FFLAGS]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([FFLAGS]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^FFLAGS$]) +m4trace:configure.ac:15: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:15: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:15: -1- AC_SUBST([F77]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([F77]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^F77$]) +m4trace:configure.ac:15: -1- AC_SUBST([ac_ct_F77]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ac_ct_F77]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^ac_ct_F77$]) +m4trace:configure.ac:15: -1- AC_SUBST([FLIBS]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([FLIBS]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^FLIBS$]) +m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([F77_DUMMY_MAIN]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^F77_DUMMY_MAIN$]) +m4trace:configure.ac:15: -1- AH_OUTPUT([F77_DUMMY_MAIN], [/* Define to dummy `main\' function (if any) required to link to the Fortran libraries. */ @%:@undef F77_DUMMY_MAIN]) -m4trace:configure.ac:14: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN_EQ_F77]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) -m4trace:configure.ac:14: -1- AH_OUTPUT([FC_DUMMY_MAIN_EQ_F77], [/* Define if F77 and FC dummy `main\' functions are identical. */ +m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN_EQ_F77]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) +m4trace:configure.ac:15: -1- AH_OUTPUT([FC_DUMMY_MAIN_EQ_F77], [/* Define if F77 and FC dummy `main\' functions are identical. */ @%:@undef FC_DUMMY_MAIN_EQ_F77]) -m4trace:configure.ac:14: -1- AC_SUBST([BLAS_LIBS]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([BLAS_LIBS]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^BLAS_LIBS$]) -m4trace:configure.ac:14: -2- AC_DEFINE_TRACE_LITERAL([HAVE_BLAS]) -m4trace:configure.ac:14: -2- m4_pattern_allow([^HAVE_BLAS$]) -m4trace:configure.ac:14: -2- AH_OUTPUT([HAVE_BLAS], [/* Define if you have a BLAS library. */ +m4trace:configure.ac:15: -1- AC_SUBST([BLAS_LIBS]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([BLAS_LIBS]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^BLAS_LIBS$]) +m4trace:configure.ac:15: -2- AC_DEFINE_TRACE_LITERAL([HAVE_BLAS]) +m4trace:configure.ac:15: -2- m4_pattern_allow([^HAVE_BLAS$]) +m4trace:configure.ac:15: -2- AH_OUTPUT([HAVE_BLAS], [/* Define if you have a BLAS library. */ @%:@undef HAVE_BLAS]) -m4trace:configure.ac:14: -1- AC_SUBST([LAPACK_LIBS]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([LAPACK_LIBS]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^LAPACK_LIBS$]) -m4trace:configure.ac:14: -2- AC_DEFINE_TRACE_LITERAL([HAVE_LAPACK]) -m4trace:configure.ac:14: -2- m4_pattern_allow([^HAVE_LAPACK$]) -m4trace:configure.ac:14: -2- AH_OUTPUT([HAVE_LAPACK], [/* Define if you have LAPACK library. */ +m4trace:configure.ac:15: -1- AC_SUBST([LAPACK_LIBS]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([LAPACK_LIBS]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^LAPACK_LIBS$]) +m4trace:configure.ac:15: -2- AC_DEFINE_TRACE_LITERAL([HAVE_LAPACK]) +m4trace:configure.ac:15: -2- m4_pattern_allow([^HAVE_LAPACK$]) +m4trace:configure.ac:15: -2- AH_OUTPUT([HAVE_LAPACK], [/* Define if you have LAPACK library. */ @%:@undef HAVE_LAPACK]) -m4trace:configure.ac:14: -1- AC_SUBST([HLIB_CPPFLAGS]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([HLIB_CPPFLAGS]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^HLIB_CPPFLAGS$]) -m4trace:configure.ac:14: -1- AC_SUBST([HLIB_LDFLAGS]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([HLIB_LDFLAGS]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^HLIB_LDFLAGS$]) -m4trace:configure.ac:14: -1- AC_SUBST([HLIB_ROOT_PATH]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([HLIB_ROOT_PATH]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^HLIB_ROOT_PATH$]) -m4trace:configure.ac:14: -1- AC_SUBST([HLIB_LIB]) -m4trace:configure.ac:14: -1- AC_SUBST_TRACE([HLIB_LIB]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^HLIB_LIB$]) -m4trace:configure.ac:14: -1- AC_DEFINE_TRACE_LITERAL([HAVE_HLIB]) -m4trace:configure.ac:14: -1- m4_pattern_allow([^HAVE_HLIB$]) -m4trace:configure.ac:14: -1- AH_OUTPUT([HAVE_HLIB], [/* Define if HLib library is available */ +m4trace:configure.ac:15: -1- AC_SUBST([HLIB_CPPFLAGS]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([HLIB_CPPFLAGS]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^HLIB_CPPFLAGS$]) +m4trace:configure.ac:15: -1- AC_SUBST([HLIB_LDFLAGS]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([HLIB_LDFLAGS]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^HLIB_LDFLAGS$]) +m4trace:configure.ac:15: -1- AC_SUBST([HLIB_ROOT_PATH]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([HLIB_ROOT_PATH]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^HLIB_ROOT_PATH$]) +m4trace:configure.ac:15: -1- AC_SUBST([HLIB_LIB]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([HLIB_LIB]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^HLIB_LIB$]) +m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([HAVE_HLIB]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^HAVE_HLIB$]) +m4trace:configure.ac:15: -1- AH_OUTPUT([HAVE_HLIB], [/* Define if HLib library is available */ @%:@undef HAVE_HLIB]) -m4trace:configure.ac:16: -1- AC_SUBST([CPP]) -m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CPP]) -m4trace:configure.ac:16: -1- m4_pattern_allow([^CPP$]) -m4trace:configure.ac:16: -1- AC_SUBST([CPPFLAGS]) -m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CPPFLAGS]) -m4trace:configure.ac:16: -1- m4_pattern_allow([^CPPFLAGS$]) -m4trace:configure.ac:16: -1- AC_SUBST([CPP]) -m4trace:configure.ac:16: -1- AC_SUBST_TRACE([CPP]) -m4trace:configure.ac:16: -1- m4_pattern_allow([^CPP$]) -m4trace:configure.ac:16: -1- AC_SUBST([GREP]) -m4trace:configure.ac:16: -1- AC_SUBST_TRACE([GREP]) -m4trace:configure.ac:16: -1- m4_pattern_allow([^GREP$]) -m4trace:configure.ac:16: -1- AC_SUBST([EGREP]) -m4trace:configure.ac:16: -1- AC_SUBST_TRACE([EGREP]) -m4trace:configure.ac:16: -1- m4_pattern_allow([^EGREP$]) -m4trace:configure.ac:16: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) -m4trace:configure.ac:16: -1- m4_pattern_allow([^STDC_HEADERS$]) -m4trace:configure.ac:16: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ +m4trace:configure.ac:16: -1- AC_SUBST([LOKI_CPPFLAGS]) +m4trace:configure.ac:16: -1- AC_SUBST_TRACE([LOKI_CPPFLAGS]) +m4trace:configure.ac:16: -1- m4_pattern_allow([^LOKI_CPPFLAGS$]) +m4trace:configure.ac:16: -1- AC_SUBST([LOKI_LDFLAGS]) +m4trace:configure.ac:16: -1- AC_SUBST_TRACE([LOKI_LDFLAGS]) +m4trace:configure.ac:16: -1- m4_pattern_allow([^LOKI_LDFLAGS$]) +m4trace:configure.ac:16: -1- AC_SUBST([LOKI_ROOT_PATH]) +m4trace:configure.ac:16: -1- AC_SUBST_TRACE([LOKI_ROOT_PATH]) +m4trace:configure.ac:16: -1- m4_pattern_allow([^LOKI_ROOT_PATH$]) +m4trace:configure.ac:18: -1- AC_SUBST([CPP]) +m4trace:configure.ac:18: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:18: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:18: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:18: -1- AC_SUBST([CPP]) +m4trace:configure.ac:18: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:18: -1- AC_SUBST([GREP]) +m4trace:configure.ac:18: -1- AC_SUBST_TRACE([GREP]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:18: -1- AC_SUBST([EGREP]) +m4trace:configure.ac:18: -1- AC_SUBST_TRACE([EGREP]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.ac:18: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.ac:18: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ @%:@undef STDC_HEADERS]) -m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ +m4trace:configure.ac:18: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_TYPES_H]) -m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ +m4trace:configure.ac:18: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_STAT_H]) -m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +m4trace:configure.ac:18: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDLIB_H]) -m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ +m4trace:configure.ac:18: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRING_H]) -m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ +m4trace:configure.ac:18: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_MEMORY_H]) -m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ +m4trace:configure.ac:18: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRINGS_H]) -m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ +m4trace:configure.ac:18: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_INTTYPES_H]) -m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ +m4trace:configure.ac:18: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDINT_H]) -m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ +m4trace:configure.ac:18: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_UNISTD_H]) -m4trace:configure.ac:16: -1- AC_DEFINE_TRACE_LITERAL([HAVE__BOOL]) -m4trace:configure.ac:16: -1- m4_pattern_allow([^HAVE__BOOL$]) -m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE__BOOL], [/* Define to 1 if the system has the type `_Bool\'. */ +m4trace:configure.ac:18: -1- AC_DEFINE_TRACE_LITERAL([HAVE__BOOL]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^HAVE__BOOL$]) +m4trace:configure.ac:18: -1- AH_OUTPUT([HAVE__BOOL], [/* Define to 1 if the system has the type `_Bool\'. */ @%:@undef HAVE__BOOL]) -m4trace:configure.ac:16: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDBOOL_H]) -m4trace:configure.ac:16: -1- m4_pattern_allow([^HAVE_STDBOOL_H$]) -m4trace:configure.ac:16: -1- AH_OUTPUT([HAVE_STDBOOL_H], [/* Define to 1 if stdbool.h conforms to C99. */ +m4trace:configure.ac:18: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDBOOL_H]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^HAVE_STDBOOL_H$]) +m4trace:configure.ac:18: -1- AH_OUTPUT([HAVE_STDBOOL_H], [/* Define to 1 if stdbool.h conforms to C99. */ @%:@undef HAVE_STDBOOL_H]) -m4trace:configure.ac:18: -1- AC_CONFIG_FILES([Makefile src/Makefile src/boundary_mesh/Makefile src/spaces/Makefile src/laplace/Makefile]) -m4trace:configure.ac:19: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) -m4trace:configure.ac:19: -1- m4_pattern_allow([^LIB@&t@OBJS$]) -m4trace:configure.ac:19: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([LTLIBOBJS]) -m4trace:configure.ac:19: -1- m4_pattern_allow([^LTLIBOBJS$]) -m4trace:configure.ac:19: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) -m4trace:configure.ac:19: -1- AC_SUBST([am__EXEEXT_TRUE]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) -m4trace:configure.ac:19: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) -m4trace:configure.ac:19: -1- AC_SUBST([am__EXEEXT_FALSE]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) -m4trace:configure.ac:19: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) -m4trace:configure.ac:19: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) -m4trace:configure.ac:19: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([top_builddir]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([top_build_prefix]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([srcdir]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([abs_srcdir]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([top_srcdir]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([abs_top_srcdir]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([builddir]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([abs_builddir]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([abs_top_builddir]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([INSTALL]) -m4trace:configure.ac:19: -1- AC_SUBST_TRACE([MKDIR_P]) +m4trace:configure.ac:20: -1- AC_SUBST([AM_CXXFLAGS]) +m4trace:configure.ac:20: -1- AC_SUBST_TRACE([AM_CXXFLAGS]) +m4trace:configure.ac:20: -1- m4_pattern_allow([^AM_CXXFLAGS$]) +m4trace:configure.ac:21: -1- AC_SUBST([AM_LDFLAGS]) +m4trace:configure.ac:21: -1- AC_SUBST_TRACE([AM_LDFLAGS]) +m4trace:configure.ac:21: -1- m4_pattern_allow([^AM_LDFLAGS$]) +m4trace:configure.ac:23: -1- AC_CONFIG_FILES([Makefile src/Makefile src/boundary_mesh/Makefile src/spaces/Makefile src/laplace/Makefile t/Makefile t/generic/Makefile t/boundary_mesh/Makefile t/laplace/Makefile]) +m4trace:configure.ac:24: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:24: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:24: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([LTLIBOBJS]) +m4trace:configure.ac:24: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.ac:24: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.ac:24: -1- AC_SUBST([am__EXEEXT_TRUE]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) +m4trace:configure.ac:24: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.ac:24: -1- AC_SUBST([am__EXEEXT_FALSE]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) +m4trace:configure.ac:24: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.ac:24: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.ac:24: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([top_builddir]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([top_build_prefix]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([srcdir]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([abs_srcdir]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([top_srcdir]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([abs_top_srcdir]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([builddir]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([abs_builddir]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([abs_top_builddir]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([INSTALL]) +m4trace:configure.ac:24: -1- AC_SUBST_TRACE([MKDIR_P]) diff --git a/src/bem3d/autom4te.cache/traces.3 b/src/bem3d/autom4te.cache/traces.3 new file mode 100644 index 0000000..4b79ca4 --- /dev/null +++ b/src/bem3d/autom4te.cache/traces.3 @@ -0,0 +1,2097 @@ +m4trace:/usr/share/aclocal-1.11/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) +m4trace:/usr/share/aclocal-1.11/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) +m4trace:/usr/share/aclocal-1.11/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) +m4trace:/usr/share/aclocal-1.11/cond.m4:15: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) +m4trace:/usr/share/aclocal-1.11/depend.m4:28: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) +m4trace:/usr/share/aclocal-1.11/depend.m4:163: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) +m4trace:/usr/share/aclocal-1.11/depend.m4:171: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) +m4trace:/usr/share/aclocal-1.11/depout.m4:14: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +]) +m4trace:/usr/share/aclocal-1.11/depout.m4:75: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) +m4trace:/usr/share/aclocal-1.11/init.m4:26: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) +m4trace:/usr/share/aclocal-1.11/init.m4:126: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) +m4trace:/usr/share/aclocal-1.11/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) +m4trace:/usr/share/aclocal-1.11/lead-dot.m4:12: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) +m4trace:/usr/share/aclocal-1.11/make.m4:14: -1- AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) +m4trace:/usr/share/aclocal-1.11/missing.m4:14: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) +m4trace:/usr/share/aclocal-1.11/missing.m4:24: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) +m4trace:/usr/share/aclocal-1.11/mkdirp.m4:11: -1- AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) +m4trace:/usr/share/aclocal-1.11/options.m4:13: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) +m4trace:/usr/share/aclocal-1.11/options.m4:19: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) +m4trace:/usr/share/aclocal-1.11/options.m4:25: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +m4trace:/usr/share/aclocal-1.11/options.m4:31: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) +m4trace:/usr/share/aclocal-1.11/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) +m4trace:/usr/share/aclocal-1.11/sanity.m4:14: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) +m4trace:/usr/share/aclocal-1.11/silent.m4:14: -1- AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) +m4trace:/usr/share/aclocal-1.11/strip.m4:17: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) +m4trace:/usr/share/aclocal-1.11/substnot.m4:14: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) +m4trace:/usr/share/aclocal-1.11/substnot.m4:19: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) +m4trace:/usr/share/aclocal-1.11/tar.m4:24: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) +m4trace:m4/ax_blas.m4:68: -1- AU_DEFUN([ACX_BLAS], [m4_if($#, 0, [AX_BLAS], [AX_BLAS($@)])]) +m4trace:m4/ax_blas.m4:68: -1- AC_DEFUN([ACX_BLAS], [AC_DIAGNOSE([obsolete], [The macro `ACX_BLAS' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [AX_BLAS], [AX_BLAS($@)])]) +m4trace:m4/ax_blas.m4:69: -1- AC_DEFUN([AX_BLAS], [ +AC_PREREQ(2.50) +AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS]) +ax_blas_ok=no + +AC_ARG_WITH(blas, + [AS_HELP_STRING([--with-blas=], [use BLAS library ])]) +case $with_blas in + yes | "") ;; + no) ax_blas_ok=disable ;; + -* | */* | *.a | *.so | *.so.* | *.o) BLAS_LIBS="$with_blas" ;; + *) BLAS_LIBS="-l$with_blas" ;; +esac + +# Get fortran linker names of BLAS functions to check for. +AC_F77_FUNC(sgemm) +AC_F77_FUNC(dgemm) + +ax_blas_save_LIBS="$LIBS" +LIBS="$LIBS $FLIBS" + +# First, check BLAS_LIBS environment variable +if test $ax_blas_ok = no; then +if test "x$BLAS_LIBS" != x; then + save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" + AC_MSG_CHECKING([for $sgemm in $BLAS_LIBS]) + AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes], [BLAS_LIBS=""]) + AC_MSG_RESULT($ax_blas_ok) + LIBS="$save_LIBS" +fi +fi + +# BLAS linked to by default? (happens on some supercomputers) +if test $ax_blas_ok = no; then + save_LIBS="$LIBS"; LIBS="$LIBS" + AC_MSG_CHECKING([if $sgemm is being linked in already]) + AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes]) + AC_MSG_RESULT($ax_blas_ok) + LIBS="$save_LIBS" +fi + +# BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) +if test $ax_blas_ok = no; then + AC_CHECK_LIB(atlas, ATL_xerbla, + [AC_CHECK_LIB(f77blas, $sgemm, + [AC_CHECK_LIB(cblas, cblas_dgemm, + [ax_blas_ok=yes + BLAS_LIBS="-lcblas -lf77blas -latlas"], + [], [-lf77blas -latlas])], + [], [-latlas])]) +fi + +# BLAS in PhiPACK libraries? (requires generic BLAS lib, too) +if test $ax_blas_ok = no; then + AC_CHECK_LIB(blas, $sgemm, + [AC_CHECK_LIB(dgemm, $dgemm, + [AC_CHECK_LIB(sgemm, $sgemm, + [ax_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas"], + [], [-lblas])], + [], [-lblas])]) +fi + +# BLAS in Intel MKL library? +if test $ax_blas_ok = no; then + AC_CHECK_LIB(mkl, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl"]) +fi + +# BLAS in Apple vecLib library? +if test $ax_blas_ok = no; then + save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS" + AC_MSG_CHECKING([for $sgemm in -framework vecLib]) + AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes;BLAS_LIBS="-framework vecLib"]) + AC_MSG_RESULT($ax_blas_ok) + LIBS="$save_LIBS" +fi + +# BLAS in Alpha CXML library? +if test $ax_blas_ok = no; then + AC_CHECK_LIB(cxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lcxml"]) +fi + +# BLAS in Alpha DXML library? (now called CXML, see above) +if test $ax_blas_ok = no; then + AC_CHECK_LIB(dxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-ldxml"]) +fi + +# BLAS in Sun Performance library? +if test $ax_blas_ok = no; then + if test "x$GCC" != xyes; then # only works with Sun CC + AC_CHECK_LIB(sunmath, acosp, + [AC_CHECK_LIB(sunperf, $sgemm, + [BLAS_LIBS="-xlic_lib=sunperf -lsunmath" + ax_blas_ok=yes],[],[-lsunmath])]) + fi +fi + +# BLAS in SCSL library? (SGI/Cray Scientific Library) +if test $ax_blas_ok = no; then + AC_CHECK_LIB(scs, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lscs"]) +fi + +# BLAS in SGIMATH library? +if test $ax_blas_ok = no; then + AC_CHECK_LIB(complib.sgimath, $sgemm, + [ax_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath"]) +fi + +# BLAS in IBM ESSL library? (requires generic BLAS lib, too) +if test $ax_blas_ok = no; then + AC_CHECK_LIB(blas, $sgemm, + [AC_CHECK_LIB(essl, $sgemm, + [ax_blas_ok=yes; BLAS_LIBS="-lessl -lblas"], + [], [-lblas $FLIBS])]) +fi + +# Generic BLAS library? +if test $ax_blas_ok = no; then + AC_CHECK_LIB(blas, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lblas"]) +fi + +AC_SUBST(BLAS_LIBS) + +LIBS="$ax_blas_save_LIBS" + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$ax_blas_ok" = xyes; then + ifelse([$1],,AC_DEFINE(HAVE_BLAS,1,[Define if you have a BLAS library.]),[$1]) + : +else + ax_blas_ok=no + $2 +fi +]) +m4trace:m4/ax_boost_base.m4:37: -1- AC_DEFUN([AX_BOOST_BASE], [ +AC_ARG_WITH([boost], + AS_HELP_STRING([--with-boost@<:@=DIR@:>@], [use boost (default is yes) - it is possible to specify the root directory for boost (optional)]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ac_boost_path="" + else + want_boost="yes" + ac_boost_path="$withval" + fi + ], + [want_boost="yes"]) + +if test "x$want_boost" = "xyes"; then + boost_lib_version_req=ifelse([$1], ,1.20.0,$1) + boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` + boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` + boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` + boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` + if test "x$boost_lib_version_req_sub_minor" = "x" ; then + boost_lib_version_req_sub_minor="0" + fi + WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` + AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) + succeeded=no + + dnl first we check the system location for boost libraries + dnl this location ist chosen if boost libraries are installed with the --layout=system option + dnl or if you install boost with RPM + if test "$ac_boost_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_path/lib" + BOOST_CPPFLAGS="-I$ac_boost_path/include" + BOOST_ROOT_PATH="$ac_boost_path" + else + for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then + BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib" + BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" + BOOST_ROOT_PATH="$ac_boost_path_tmp" + break; + fi + done + fi + + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + export BOOST_ROOT_PATH + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ],[ + ]) + AC_LANG_POP([C++]) + + + + dnl if we found no boost with system layout we search for boost libraries + dnl built and installed without the --layout=system option or for a staged(not installed) version + if test "x$succeeded" != "xyes"; then + _version=0 + if test "$ac_boost_path" != ""; then + BOOST_LDFLAGS="-L$ac_boost_path/lib" + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + fi + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" + done + fi + else + for ac_boost_path in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then + for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + V_CHECK=`expr $_version_tmp \> $_version` + if test "$V_CHECK" = "1" ; then + _version=$_version_tmp + best_path=$ac_boost_path + fi + done + fi + done + + VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` + BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" + BOOST_LDFLAGS="-L$best_path/lib" + BOOST_ROOT_PATH="$best_path" + + if test "x$BOOST_ROOT" != "x"; then + if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then + version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` + stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` + stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` + V_CHECK=`expr $stage_version_shorten \>\= $_version` + if test "$V_CHECK" = "1" ; then + AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) + BOOST_CPPFLAGS="-I$BOOST_ROOT" + BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib" + BOOST_ROOT_PATH="$BOOST_ROOT" + fi + fi + fi + fi + + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + export BOOST_ROOT_PATH + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if BOOST_VERSION >= $WANT_BOOST_VERSION + // Everything is okay + #else + # error Boost version is too old + #endif + ]])],[ + AC_MSG_RESULT(yes) + succeeded=yes + found_system=yes + ],[ + ]) + AC_LANG_POP([C++]) + fi + + if test "$succeeded" != "yes" ; then + if test "$_version" = "0" ; then + AC_MSG_WARN([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) + else + AC_MSG_WARN([Your boost libraries seems to old (version $_version).]) + fi + else + AC_SUBST(BOOST_CPPFLAGS) + AC_SUBST(BOOST_LDFLAGS) + AC_SUBST(BOOST_ROOT_PATH) + AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" +fi + +]) +m4trace:m4/ax_boost_regex.m4:34: -1- AC_DEFUN([AX_BOOST_REGEX], [ + AC_ARG_WITH([boost-regex], + AS_HELP_STRING([--with-boost-regex@<:@=special-lib@:>@], + [use the Regex library from boost - it is possible to specify a certain library for the linker + e.g. --with-boost-regex=boost_regex-gcc-mt-d-1_33_1 ]), + [ + if test "$withval" = "no"; then + want_boost="no" + elif test "$withval" = "yes"; then + want_boost="yes" + ax_boost_user_regex_lib="" + else + want_boost="yes" + ax_boost_user_regex_lib="$withval" + fi + ], + [want_boost="yes"] + ) + + if test "x$want_boost" = "xyes"; then + AC_REQUIRE([AC_PROG_CC]) + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS + + AC_CACHE_CHECK(whether the Boost::Regex library is available, + ax_cv_boost_regex, + [AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[@%:@include + ]], + [[boost::regex r(); return 0;]]), + ax_cv_boost_regex=yes, ax_cv_boost_regex=no) + AC_LANG_POP([C++]) + ]) + if test "x$ax_cv_boost_regex" = "xyes"; then + AC_DEFINE(HAVE_BOOST_REGEX,,[define if the Boost::Regex library is available]) + BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` + if test "x$ax_boost_user_regex_lib" = "x"; then + for libextension in `ls $BOOSTLIBDIR/libboost_regex*.{so,a}* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_regex.*\)\.so.*$;\1;' -e 's;^lib\(boost_regex.*\)\.a*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_REGEX_LIB="-l$ax_lib"; AC_SUBST(BOOST_REGEX_LIB) link_regex="yes"; break], + [link_regex="no"]) + done + if test "x$link_regex" != "xyes"; then + for libextension in `ls $BOOSTLIBDIR/boost_regex*.{dll,a}* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_regex.*\)\.dll.*$;\1;' -e 's;^\(boost_regex.*\)\.a*$;\1;'` ; do + ax_lib=${libextension} + AC_CHECK_LIB($ax_lib, exit, + [BOOST_REGEX_LIB="-l$ax_lib"; AC_SUBST(BOOST_REGEX_LIB) link_regex="yes"; break], + [link_regex="no"]) + done + fi + + else + for ax_lib in $ax_boost_user_regex_lib boost_regex-$ax_boost_user_regex_lib; do + AC_CHECK_LIB($ax_lib, main, + [BOOST_REGEX_LIB="-l$ax_lib"; AC_SUBST(BOOST_REGEX_LIB) link_regex="yes"; break], + [link_regex="no"]) + done + fi + if test "x$link_regex" != "xyes"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi +]) +m4trace:m4/ax_hlib.m4:35: -1- AC_DEFUN([AX_HLIB], [ + AC_REQUIRE([AX_LAPACK]) + + AC_ARG_WITH([hlib], + AS_HELP_STRING([--with-hlib@<:@=DIR@:>@], + [use hlib (default is yes) - it is possible to specify the root directory + for hlib (optional)]), + [ + if test "$withval" = "no"; then + want_hlib="no" + elif test "$withval" = "yes"; then + want_hlib="yes" + ac_hlib_path="" + else + want_hlib="yes" + ac_hlib_path="$withval" + fi + ], + [ + want_hlib="yes" + ]) + + if test "x$want_hlib" = "xyes"; then + if test "x$LAPACK_LIBS" = "x"; then + AC_MSG_ERROR([We could not detect lapack. Please install lapack or disable + HLib.]) + fi + + if test "$ac_hlib_path" != ""; then + HLIB_LDFLAGS="-L$ac_hlib_path/lib" + HLIB_CPPFLAGS="-I$ac_hlib_path/include" + HLIB_ROOT_PATH="$ac_hlib_path" + else + for ac_hlib_path_tmp in /usr /usr/local /opt /opt/local ; do + if test -d "$ac_hlib_path_tmp/include/HLib"; then + HLIB_LDFLAGS="-L$ac_hlib_path_tmp/lib" + HLIB_CPPFLAGS="-I$ac_hlib_path_tmp/include" + HLIB_ROOT_PATH="$ac_hlib_path_tmp" + break; + fi + done + fi + + if test "x$HLIB_ROOT_PATH" = "x"; then + AC_MSG_ERROR([We could not detect HLib. You may disable this error + message by running configure with --with-hlib=no. If you + would like to use HLib, please make sure that a recent + version (1.3 or higher) is installed and specify the + location by running configure with --with-hlib=/dir/to/hlib. + Please note that you have to install HLib to use it with + this software package.]) + else + AC_SUBST(HLIB_CPPFLAGS) + AC_SUBST(HLIB_LDFLAGS) + AC_SUBST(HLIB_ROOT_PATH) + + # Now we are trying to include headers: + CPPFLAGS_SAVED="$CPPFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + + CPPFLAGS="$CPPFLAGS $HLIB_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$LDFLAGS $HLIB_LDFLAGS" + export LDFLAGS + + AC_REQUIRE([AC_PROG_CC]) + + AC_CACHE_CHECK(whether HLib library is available, + ax_cv_hlib, + [ AC_LANG_PUSH([C]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM( + [[@%:@include ]], + [[del_bemgrid2d(new_bemgrid2d(5, 5)); return 0;]]), + ax_cv_hlib=yes, + ax_cv_hlib=no) + AC_LANG_POP([C]) + ]) + + if test "x$ax_cv_hlib" = "xyes"; then + AC_CHECK_LIB(hmatrix, newaca_fill_block, + [HLIB_LIB="-lhmatrix"; AC_SUBST(HLIB_LIB) link_hlib="yes"; break], + [link_hlib="no"], [$LAPACK_LIBS $BLAS_LIBS]) + + if test "x$link_hlib" = "xyes"; then + AC_DEFINE(HAVE_HLIB,,[Define if HLib library is available]) + else + AC_MSG_ERROR([Could not link against HLib. Please verify that + HLib is installed properly. You may disable support + for HLib by running configure with --with-hlib=no.]) + fi + fi + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi + fi +]) +m4trace:m4/ax_lapack.m4:69: -1- AU_DEFUN([ACX_LAPACK], [m4_if($#, 0, [AX_LAPACK], [AX_LAPACK($@)])]) +m4trace:m4/ax_lapack.m4:69: -1- AC_DEFUN([ACX_LAPACK], [AC_DIAGNOSE([obsolete], [The macro `ACX_LAPACK' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [AX_LAPACK], [AX_LAPACK($@)])]) +m4trace:m4/ax_lapack.m4:70: -1- AC_DEFUN([AX_LAPACK], [ +AC_REQUIRE([AX_BLAS]) +ax_lapack_ok=no + +AC_ARG_WITH(lapack, + [AS_HELP_STRING([--with-lapack=], [use LAPACK library ])]) +case $with_lapack in + yes | "") ;; + no) ax_lapack_ok=disable ;; + -* | */* | *.a | *.so | *.so.* | *.o) LAPACK_LIBS="$with_lapack" ;; + *) LAPACK_LIBS="-l$with_lapack" ;; +esac + +# Get fortran linker name of LAPACK function to check for. +AC_F77_FUNC(cheev) + +# We cannot use LAPACK if BLAS is not found +if test "x$ax_blas_ok" != xyes; then + ax_lapack_ok=noblas + LAPACK_LIBS="" +fi + +# First, check LAPACK_LIBS environment variable +if test "x$LAPACK_LIBS" != x; then + save_LIBS="$LIBS"; LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS" + AC_MSG_CHECKING([for $cheev in $LAPACK_LIBS]) + AC_TRY_LINK_FUNC($cheev, [ax_lapack_ok=yes], [LAPACK_LIBS=""]) + AC_MSG_RESULT($ax_lapack_ok) + LIBS="$save_LIBS" + if test $ax_lapack_ok = no; then + LAPACK_LIBS="" + fi +fi + +# LAPACK linked to by default? (is sometimes included in BLAS lib) +if test $ax_lapack_ok = no; then + save_LIBS="$LIBS"; LIBS="$LIBS $BLAS_LIBS $FLIBS" + AC_CHECK_FUNC($cheev, [ax_lapack_ok=yes]) + LIBS="$save_LIBS" +fi + +# Generic LAPACK library? +for lapack in lapack lapack_rs6k; do + if test $ax_lapack_ok = no; then + save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" + AC_CHECK_LIB($lapack, $cheev, + [ax_lapack_ok=yes; LAPACK_LIBS="-l$lapack"], [], [$FLIBS]) + LIBS="$save_LIBS" + fi +done + +AC_SUBST(LAPACK_LIBS) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$ax_lapack_ok" = xyes; then + ifelse([$1],,AC_DEFINE(HAVE_LAPACK,1,[Define if you have LAPACK library.]),[$1]) + : +else + ax_lapack_ok=no + $2 +fi +]) +m4trace:m4/ax_lib_loki.m4:1: -1- AC_DEFUN([AX_LIB_LOKI], [ + AC_ARG_WITH([loki], + AS_HELP_STRING([--with-loki@<:@=DIR|:>@], + [specify the root directory for the loki library]), + [ + if test "$withval" = "no"; then + AC_MSG_ERROR([Sorry, but it is not possible to compile without loki]) + want_loki="no" + elif test "$withval" = "yes"; then + want_loki="yes" + ac_loki_path="" + else + want_loki="yes" + ac_loki_path="$withval" + fi + ], + [ + want_loki="yes"; + ]) + + if test "x$want_loki" = "xyes"; then + if test "x$ac_loki_path" = "x"; then + for ac_loki_path_tmp in /usr /usr/local /opt /opt/local; do + if test -d "$ac_loki_path_tmp/include/loki"; then + LOKI_LDFLAGS="-L$ac_hlib_path_tmp/lib" + LOKI_CPPFLAGS="-I$ac_hlib_path_tmp/include" + LOKI_ROOT_PATH="$ac_hlib_path_tmp" + break; + fi + done + else + LOKI_LDFLAGS="-L$ac_hlib_path/lib" + LOKI_CPPFLAGS="-I$ac_hlib_path/include" + LOKI_ROOT_PATH="$ac_hlib_path" + fi + + if test "x$LOKI_ROOT_PATH" = "x"; then + AC_MSG_ERROR([We could not detect the loki library. Please install + the loki library, c.f. loki-lib.sf.net, before + proceeding.]) + else + AC_SUBST(LOKI_CPPFLAGS) + AC_SUBST(LOKI_LDFLAGS) + AC_SUBST(LOKI_ROOT_PATH) + + # Run some basic tests to check whether loki is really available: + CPPFLAGS_SAVED="$CPPFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + + CPPFLAGS="$CPPFLAGS $LOKI_CPPFLAGS" + CFLAGS="$CPPFLAGS" + export CPPFLAGS + export CFLAGS + LDFLAGS="$LDFLAGS $LOKI_LDFLAGS" + export LDFLAGS + + AC_REQUIRE([AC_PROG_CXX]) + + AC_CACHE_CHECK(whether Loki is usable, + ax_cv_loki, + [ AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM( + [[@%:@include ]], + [[::Loki::SmartPtr< int > t = new int;]]), + ax_cv_loki="yes", + ax_cv_loki="no") + AC_LANG_POP([C++]) + ]) + + if test "$ax_cv_loki" != "yes"; then + AC_MSG_ERROR([Could not use the loki library. Please make sure + that it is installed correctly.]); + fi + + CPPFLAGS="$SAVED_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$SAVED_LDFLAGS" + export LDFLAGS + fi + fi +]) +m4trace:m4/ax_prog_doxygen.m4:264: -1- AC_DEFUN([DX_FEATURE_doc], [ON]) +m4trace:m4/ax_prog_doxygen.m4:265: -1- AC_DEFUN([DX_FEATURE_dot], [OFF]) +m4trace:m4/ax_prog_doxygen.m4:266: -1- AC_DEFUN([DX_FEATURE_man], [OFF]) +m4trace:m4/ax_prog_doxygen.m4:267: -1- AC_DEFUN([DX_FEATURE_html], [ON]) +m4trace:m4/ax_prog_doxygen.m4:268: -1- AC_DEFUN([DX_FEATURE_chm], [OFF]) +m4trace:m4/ax_prog_doxygen.m4:269: -1- AC_DEFUN([DX_FEATURE_chi], [OFF]) +m4trace:m4/ax_prog_doxygen.m4:270: -1- AC_DEFUN([DX_FEATURE_rtf], [OFF]) +m4trace:m4/ax_prog_doxygen.m4:271: -1- AC_DEFUN([DX_FEATURE_xml], [OFF]) +m4trace:m4/ax_prog_doxygen.m4:272: -1- AC_DEFUN([DX_FEATURE_pdf], [ON]) +m4trace:m4/ax_prog_doxygen.m4:273: -1- AC_DEFUN([DX_FEATURE_ps], [ON]) +m4trace:m4/ax_prog_doxygen.m4:282: -1- AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])]) +m4trace:m4/ax_prog_doxygen.m4:287: -1- AC_DEFUN([DX_DIRNAME_EXPR], [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']]) +m4trace:m4/ax_prog_doxygen.m4:293: -1- AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])]) +m4trace:m4/ax_prog_doxygen.m4:298: -1- AC_DEFUN([DX_REQUIRE_PROG], [ +AC_PATH_TOOL([$1], [$2]) +if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then + AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION]) + AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0) +fi +]) +m4trace:m4/ax_prog_doxygen.m4:309: -1- AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1]) +m4trace:m4/ax_prog_doxygen.m4:315: -1- AC_DEFUN([DX_CHECK_DEPEND], [ +test "$DX_FLAG_$1" = "$2" \ +|| AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1, + requires, contradicts) doxygen-DX_CURRENT_FEATURE]) +]) +m4trace:m4/ax_prog_doxygen.m4:324: -1- AC_DEFUN([DX_CLEAR_DEPEND], [ +test "$DX_FLAG_$1" = "$2" || AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0) +]) +m4trace:m4/ax_prog_doxygen.m4:338: -1- AC_DEFUN([DX_ARG_ABLE], [ + AC_DEFUN([DX_CURRENT_FEATURE], [$1]) + AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2]) + AC_ARG_ENABLE(doxygen-$1, + [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1], + [--enable-doxygen-$1]), + DX_IF_FEATURE([$1], [don't $2], [$2]))], + [ +case "$enableval" in +#( +y|Y|yes|Yes|YES) + AC_SUBST([DX_FLAG_$1], 1) + $3 +;; #( +n|N|no|No|NO) + AC_SUBST([DX_FLAG_$1], 0) +;; #( +*) + AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1]) +;; +esac +], [ +AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)]) +$4 +]) +if DX_TEST_FEATURE([$1]); then + $5 + : +fi +if DX_TEST_FEATURE([$1]); then + AM_CONDITIONAL(DX_COND_$1, :) + $6 + : +else + AM_CONDITIONAL(DX_COND_$1, false) + $7 + : +fi +]) +m4trace:m4/ax_prog_doxygen.m4:384: -1- AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])]) +m4trace:m4/ax_prog_doxygen.m4:385: -1- AC_DEFUN([DX_DOT_FEATURE], [AC_DEFUN([DX_FEATURE_dot], [$1])]) +m4trace:m4/ax_prog_doxygen.m4:386: -1- AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])]) +m4trace:m4/ax_prog_doxygen.m4:387: -1- AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])]) +m4trace:m4/ax_prog_doxygen.m4:388: -1- AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])]) +m4trace:m4/ax_prog_doxygen.m4:389: -1- AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])]) +m4trace:m4/ax_prog_doxygen.m4:390: -1- AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])]) +m4trace:m4/ax_prog_doxygen.m4:391: -1- AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) +m4trace:m4/ax_prog_doxygen.m4:392: -1- AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) +m4trace:m4/ax_prog_doxygen.m4:393: -1- AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])]) +m4trace:m4/ax_prog_doxygen.m4:394: -1- AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])]) +m4trace:m4/ax_prog_doxygen.m4:400: -1- AC_DEFUN([DX_INIT_DOXYGEN], [ + +# Files: +AC_SUBST([DX_PROJECT], [$1]) +AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])]) +AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])]) + +# Environment variables used inside doxygen.cfg: +DX_ENV_APPEND(SRCDIR, $srcdir) +DX_ENV_APPEND(PROJECT, $DX_PROJECT) +DX_ENV_APPEND(DOCDIR, $DX_DOCDIR) +DX_ENV_APPEND(VERSION, $PACKAGE_VERSION) + +# Doxygen itself: +DX_ARG_ABLE(doc, [generate any doxygen documentation], + [], + [], + [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen) + DX_REQUIRE_PROG([DX_PERL], perl)], + [DX_ENV_APPEND(PERL_PATH, $DX_PERL)]) + +# Dot for graphics: +DX_ARG_ABLE(dot, [generate graphics for doxygen documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_DOT], dot)], + [DX_ENV_APPEND(HAVE_DOT, YES) + DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])], + [DX_ENV_APPEND(HAVE_DOT, NO)]) + +# Man pages generation: +DX_ARG_ABLE(man, [generate doxygen manual pages], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [], + [DX_ENV_APPEND(GENERATE_MAN, YES)], + [DX_ENV_APPEND(GENERATE_MAN, NO)]) + +# RTF file generation: +DX_ARG_ABLE(rtf, [generate doxygen RTF documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [], + [DX_ENV_APPEND(GENERATE_RTF, YES)], + [DX_ENV_APPEND(GENERATE_RTF, NO)]) + +# XML file generation: +DX_ARG_ABLE(xml, [generate doxygen XML documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [], + [DX_ENV_APPEND(GENERATE_XML, YES)], + [DX_ENV_APPEND(GENERATE_XML, NO)]) + +# (Compressed) HTML help generation: +DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_HHC], hhc)], + [DX_ENV_APPEND(HHC_PATH, $DX_HHC) + DX_ENV_APPEND(GENERATE_HTML, YES) + DX_ENV_APPEND(GENERATE_HTMLHELP, YES)], + [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)]) + +# Seperate CHI file generation. +DX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file], + [DX_CHECK_DEPEND(chm, 1)], + [DX_CLEAR_DEPEND(chm, 1)], + [], + [DX_ENV_APPEND(GENERATE_CHI, YES)], + [DX_ENV_APPEND(GENERATE_CHI, NO)]) + +# Plain HTML pages generation: +DX_ARG_ABLE(html, [generate doxygen plain HTML documentation], + [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)], + [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)], + [], + [DX_ENV_APPEND(GENERATE_HTML, YES)], + [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)]) + +# PostScript file generation: +DX_ARG_ABLE(ps, [generate doxygen PostScript documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_LATEX], latex) + DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) + DX_REQUIRE_PROG([DX_DVIPS], dvips) + DX_REQUIRE_PROG([DX_EGREP], egrep)]) + +# PDF file generation: +DX_ARG_ABLE(pdf, [generate doxygen PDF documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex) + DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) + DX_REQUIRE_PROG([DX_EGREP], egrep)]) + +# LaTeX generation for PS and/or PDF: +if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then + AM_CONDITIONAL(DX_COND_latex, :) + DX_ENV_APPEND(GENERATE_LATEX, YES) +else + AM_CONDITIONAL(DX_COND_latex, false) + DX_ENV_APPEND(GENERATE_LATEX, NO) +fi + +# Paper size for PS and/or PDF: +AC_ARG_VAR(DOXYGEN_PAPER_SIZE, + [a4wide (default), a4, letter, legal or executive]) +case "$DOXYGEN_PAPER_SIZE" in +#( +"") + AC_SUBST(DOXYGEN_PAPER_SIZE, "") +;; #( +a4wide|a4|letter|legal|executive) + DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE) +;; #( +*) + AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE']) +;; +esac + +#For debugging: +#echo DX_FLAG_doc=$DX_FLAG_doc +#echo DX_FLAG_dot=$DX_FLAG_dot +#echo DX_FLAG_man=$DX_FLAG_man +#echo DX_FLAG_html=$DX_FLAG_html +#echo DX_FLAG_chm=$DX_FLAG_chm +#echo DX_FLAG_chi=$DX_FLAG_chi +#echo DX_FLAG_rtf=$DX_FLAG_rtf +#echo DX_FLAG_xml=$DX_FLAG_xml +#echo DX_FLAG_pdf=$DX_FLAG_pdf +#echo DX_FLAG_ps=$DX_FLAG_ps +#echo DX_ENV=$DX_ENV +]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.ac:1: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.ac:3: -1- AM_INIT_AUTOMAKE([]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) +m4trace:configure.ac:3: -1- AM_SET_CURRENT_AUTOMAKE_VERSION +m4trace:configure.ac:3: -1- AM_AUTOMAKE_VERSION([1.11.1]) +m4trace:configure.ac:3: -1- _AM_AUTOCONF_VERSION([2.67]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^INSTALL_DATA$]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^am__isrc$]) +m4trace:configure.ac:3: -1- _AM_SUBST_NOTMAKE([am__isrc]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^CYGPATH_W$]) +m4trace:configure.ac:3: -1- _AM_SET_OPTIONS([]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:3: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])]) +m4trace:configure.ac:3: -2- _AM_MANGLE_OPTION([no-define]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:3: -1- AM_SANITY_CHECK +m4trace:configure.ac:3: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +m4trace:configure.ac:3: -1- AM_MISSING_HAS_RUN +m4trace:configure.ac:3: -1- AM_AUX_DIR_EXPAND +m4trace:configure.ac:3: -1- m4_pattern_allow([^ACLOCAL$]) +m4trace:configure.ac:3: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^AUTOCONF$]) +m4trace:configure.ac:3: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^AUTOMAKE$]) +m4trace:configure.ac:3: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^AUTOHEADER$]) +m4trace:configure.ac:3: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^MAKEINFO$]) +m4trace:configure.ac:3: -1- AM_PROG_INSTALL_SH +m4trace:configure.ac:3: -1- m4_pattern_allow([^install_sh$]) +m4trace:configure.ac:3: -1- AM_PROG_INSTALL_STRIP +m4trace:configure.ac:3: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) +m4trace:configure.ac:3: -1- AM_PROG_MKDIR_P +m4trace:configure.ac:3: -1- m4_pattern_allow([^MKDIR_P$]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^mkdir_p$]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^AWK$]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^SET_MAKE$]) +m4trace:configure.ac:3: -1- AM_SET_LEADING_DOT +m4trace:configure.ac:3: -1- m4_pattern_allow([^am__leading_dot$]) +m4trace:configure.ac:3: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +m4trace:configure.ac:3: -2- _AM_MANGLE_OPTION([tar-ustar]) +m4trace:configure.ac:3: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])]) +m4trace:configure.ac:3: -2- _AM_MANGLE_OPTION([tar-pax]) +m4trace:configure.ac:3: -1- _AM_PROG_TAR([v7]) +m4trace:configure.ac:3: -1- AM_MISSING_PROG([AMTAR], [tar]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^AMTAR$]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^am__tar$]) +m4trace:configure.ac:3: -1- m4_pattern_allow([^am__untar$]) +m4trace:configure.ac:3: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +m4trace:configure.ac:3: -2- _AM_MANGLE_OPTION([no-dependencies]) +m4trace:configure.ac:3: -1- _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])]) +m4trace:configure.ac:3: -2- _AM_MANGLE_OPTION([silent-rules]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.ac:6: -1- _AM_DEPENDENCIES([CXX]) +m4trace:configure.ac:6: -1- AM_SET_DEPDIR +m4trace:configure.ac:6: -1- m4_pattern_allow([^DEPDIR$]) +m4trace:configure.ac:6: -1- AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.ac:6: -1- AM_MAKE_INCLUDE +m4trace:configure.ac:6: -1- m4_pattern_allow([^am__include$]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^am__quote$]) +m4trace:configure.ac:6: -1- AM_DEP_TRACK +m4trace:configure.ac:6: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^AMDEP_TRUE$]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^AMDEP_FALSE$]) +m4trace:configure.ac:6: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) +m4trace:configure.ac:6: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) +m4trace:configure.ac:6: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:6: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:6: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:6: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:6: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:7: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.ac:10: -1- DX_INIT_DOXYGEN(["Hilbert 3D"], [Doxyfile], [docs/doxygen]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_PROJECT$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_CONFIG$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_DOCDIR$]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([SRCDIR], [$srcdir]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([PROJECT], [$DX_PROJECT]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([DOCDIR], [$DX_DOCDIR]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([VERSION], [$PACKAGE_VERSION]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ARG_ABLE([doc], [generate any doxygen documentation], [], [], [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen) + DX_REQUIRE_PROG([DX_PERL], perl)], [DX_ENV_APPEND(PERL_PATH, $DX_PERL)]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_FEATURE], [doc]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_DESCRIPTION], [generate any doxygen documentation]) +m4trace:configure.ac:10: -2- DX_IF_FEATURE([doc], [--disable-doxygen-doc], [--enable-doxygen-doc]) +m4trace:configure.ac:10: -3- DX_FEATURE_doc +m4trace:configure.ac:10: -2- DX_IF_FEATURE([doc], [don't generate any doxygen documentation], [generate any doxygen documentation]) +m4trace:configure.ac:10: -3- DX_FEATURE_doc +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_doc$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_doc$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_doc$]) +m4trace:configure.ac:10: -1- DX_IF_FEATURE([doc], [1], [0]) +m4trace:configure.ac:10: -2- DX_FEATURE_doc +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([doc]) +m4trace:configure.ac:10: -1- DX_REQUIRE_PROG([DX_DOXYGEN], [doxygen]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_DOXYGEN$]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_doc$]) +m4trace:configure.ac:10: -1- DX_REQUIRE_PROG([DX_PERL], [perl]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_PERL$]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_doc$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([doc]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_doc], [:]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_doc_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_doc_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_doc_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_doc_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([PERL_PATH], [$DX_PERL]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_doc], [false]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_doc_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_doc_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_doc_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_doc_FALSE]) +m4trace:configure.ac:10: -1- DX_ARG_ABLE([dot], [generate graphics for doxygen documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_DOT], dot)], [DX_ENV_APPEND(HAVE_DOT, YES) + DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])], [DX_ENV_APPEND(HAVE_DOT, NO)]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_FEATURE], [dot]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_DESCRIPTION], [generate graphics for doxygen documentation]) +m4trace:configure.ac:10: -2- DX_IF_FEATURE([dot], [--disable-doxygen-dot], [--enable-doxygen-dot]) +m4trace:configure.ac:10: -3- DX_FEATURE_dot +m4trace:configure.ac:10: -2- DX_IF_FEATURE([dot], [don't generate graphics for doxygen documentation], [generate graphics for doxygen documentation]) +m4trace:configure.ac:10: -3- DX_FEATURE_dot +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_dot$]) +m4trace:configure.ac:10: -1- DX_CHECK_DEPEND([doc], [1]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_dot$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_dot$]) +m4trace:configure.ac:10: -1- DX_IF_FEATURE([dot], [1], [0]) +m4trace:configure.ac:10: -2- DX_FEATURE_dot +m4trace:configure.ac:10: -1- DX_CLEAR_DEPEND([doc], [1]) +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_dot$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([dot]) +m4trace:configure.ac:10: -1- DX_REQUIRE_PROG([DX_DOT], [dot]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_DOT$]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_dot$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([dot]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_dot], [:]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_dot_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_dot_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_dot_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_dot_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([HAVE_DOT], [YES]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([DOT_PATH], [`DX_DIRNAME_EXPR($DX_DOT)`]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_DIRNAME_EXPR([$DX_DOT]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_dot], [false]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_dot_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_dot_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_dot_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_dot_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([HAVE_DOT], [NO]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ARG_ABLE([man], [generate doxygen manual pages], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [], [DX_ENV_APPEND(GENERATE_MAN, YES)], [DX_ENV_APPEND(GENERATE_MAN, NO)]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_FEATURE], [man]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_DESCRIPTION], [generate doxygen manual pages]) +m4trace:configure.ac:10: -2- DX_IF_FEATURE([man], [--disable-doxygen-man], [--enable-doxygen-man]) +m4trace:configure.ac:10: -3- DX_FEATURE_man +m4trace:configure.ac:10: -2- DX_IF_FEATURE([man], [don't generate doxygen manual pages], [generate doxygen manual pages]) +m4trace:configure.ac:10: -3- DX_FEATURE_man +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_man$]) +m4trace:configure.ac:10: -1- DX_CHECK_DEPEND([doc], [1]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_man$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_man$]) +m4trace:configure.ac:10: -1- DX_IF_FEATURE([man], [1], [0]) +m4trace:configure.ac:10: -2- DX_FEATURE_man +m4trace:configure.ac:10: -1- DX_CLEAR_DEPEND([doc], [1]) +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_man$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([man]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([man]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_man], [:]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_man_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_man_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_man_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_man_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_MAN], [YES]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_man], [false]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_man_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_man_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_man_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_man_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_MAN], [NO]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ARG_ABLE([rtf], [generate doxygen RTF documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [], [DX_ENV_APPEND(GENERATE_RTF, YES)], [DX_ENV_APPEND(GENERATE_RTF, NO)]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_FEATURE], [rtf]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_DESCRIPTION], [generate doxygen RTF documentation]) +m4trace:configure.ac:10: -2- DX_IF_FEATURE([rtf], [--disable-doxygen-rtf], [--enable-doxygen-rtf]) +m4trace:configure.ac:10: -3- DX_FEATURE_rtf +m4trace:configure.ac:10: -2- DX_IF_FEATURE([rtf], [don't generate doxygen RTF documentation], [generate doxygen RTF documentation]) +m4trace:configure.ac:10: -3- DX_FEATURE_rtf +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_rtf$]) +m4trace:configure.ac:10: -1- DX_CHECK_DEPEND([doc], [1]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_rtf$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_rtf$]) +m4trace:configure.ac:10: -1- DX_IF_FEATURE([rtf], [1], [0]) +m4trace:configure.ac:10: -2- DX_FEATURE_rtf +m4trace:configure.ac:10: -1- DX_CLEAR_DEPEND([doc], [1]) +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_rtf$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([rtf]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([rtf]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_rtf], [:]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_rtf_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_rtf_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_rtf_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_rtf_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_RTF], [YES]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_rtf], [false]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_rtf_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_rtf_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_rtf_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_rtf_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_RTF], [NO]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ARG_ABLE([xml], [generate doxygen XML documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [], [DX_ENV_APPEND(GENERATE_XML, YES)], [DX_ENV_APPEND(GENERATE_XML, NO)]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_FEATURE], [xml]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_DESCRIPTION], [generate doxygen XML documentation]) +m4trace:configure.ac:10: -2- DX_IF_FEATURE([xml], [--disable-doxygen-xml], [--enable-doxygen-xml]) +m4trace:configure.ac:10: -3- DX_FEATURE_xml +m4trace:configure.ac:10: -2- DX_IF_FEATURE([xml], [don't generate doxygen XML documentation], [generate doxygen XML documentation]) +m4trace:configure.ac:10: -3- DX_FEATURE_xml +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_xml$]) +m4trace:configure.ac:10: -1- DX_CHECK_DEPEND([doc], [1]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_xml$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_xml$]) +m4trace:configure.ac:10: -1- DX_IF_FEATURE([xml], [1], [0]) +m4trace:configure.ac:10: -2- DX_FEATURE_xml +m4trace:configure.ac:10: -1- DX_CLEAR_DEPEND([doc], [1]) +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_xml$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([xml]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([xml]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_xml], [:]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_xml_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_xml_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_xml_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_xml_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_XML], [YES]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_xml], [false]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_xml_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_xml_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_xml_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_xml_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_XML], [NO]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ARG_ABLE([chm], [generate doxygen compressed HTML help documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_HHC], hhc)], [DX_ENV_APPEND(HHC_PATH, $DX_HHC) + DX_ENV_APPEND(GENERATE_HTML, YES) + DX_ENV_APPEND(GENERATE_HTMLHELP, YES)], [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_FEATURE], [chm]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_DESCRIPTION], [generate doxygen compressed HTML help documentation]) +m4trace:configure.ac:10: -2- DX_IF_FEATURE([chm], [--disable-doxygen-chm], [--enable-doxygen-chm]) +m4trace:configure.ac:10: -3- DX_FEATURE_chm +m4trace:configure.ac:10: -2- DX_IF_FEATURE([chm], [don't generate doxygen compressed HTML help documentation], [generate doxygen compressed HTML help documentation]) +m4trace:configure.ac:10: -3- DX_FEATURE_chm +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_chm$]) +m4trace:configure.ac:10: -1- DX_CHECK_DEPEND([doc], [1]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_chm$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_chm$]) +m4trace:configure.ac:10: -1- DX_IF_FEATURE([chm], [1], [0]) +m4trace:configure.ac:10: -2- DX_FEATURE_chm +m4trace:configure.ac:10: -1- DX_CLEAR_DEPEND([doc], [1]) +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_chm$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([chm]) +m4trace:configure.ac:10: -1- DX_REQUIRE_PROG([DX_HHC], [hhc]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_HHC$]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_chm$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([chm]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_chm], [:]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_chm_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_chm_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_chm_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_chm_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([HHC_PATH], [$DX_HHC]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_HTML], [YES]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_HTMLHELP], [YES]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_chm], [false]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_chm_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_chm_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_chm_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_chm_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_HTMLHELP], [NO]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ARG_ABLE([chi], [generate doxygen seperate compressed HTML help index file], [DX_CHECK_DEPEND(chm, 1)], [DX_CLEAR_DEPEND(chm, 1)], [], [DX_ENV_APPEND(GENERATE_CHI, YES)], [DX_ENV_APPEND(GENERATE_CHI, NO)]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_FEATURE], [chi]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_DESCRIPTION], [generate doxygen seperate compressed HTML help index file]) +m4trace:configure.ac:10: -2- DX_IF_FEATURE([chi], [--disable-doxygen-chi], [--enable-doxygen-chi]) +m4trace:configure.ac:10: -3- DX_FEATURE_chi +m4trace:configure.ac:10: -2- DX_IF_FEATURE([chi], [don't generate doxygen seperate compressed HTML help index file], [generate doxygen seperate compressed HTML help index file]) +m4trace:configure.ac:10: -3- DX_FEATURE_chi +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_chi$]) +m4trace:configure.ac:10: -1- DX_CHECK_DEPEND([chm], [1]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_chi$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_chi$]) +m4trace:configure.ac:10: -1- DX_IF_FEATURE([chi], [1], [0]) +m4trace:configure.ac:10: -2- DX_FEATURE_chi +m4trace:configure.ac:10: -1- DX_CLEAR_DEPEND([chm], [1]) +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_chi$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([chi]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([chi]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_chi], [:]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_chi_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_chi_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_chi_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_chi_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_CHI], [YES]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_chi], [false]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_chi_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_chi_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_chi_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_chi_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_CHI], [NO]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ARG_ABLE([html], [generate doxygen plain HTML documentation], [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)], [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)], [], [DX_ENV_APPEND(GENERATE_HTML, YES)], [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_FEATURE], [html]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_DESCRIPTION], [generate doxygen plain HTML documentation]) +m4trace:configure.ac:10: -2- DX_IF_FEATURE([html], [--disable-doxygen-html], [--enable-doxygen-html]) +m4trace:configure.ac:10: -3- DX_FEATURE_html +m4trace:configure.ac:10: -2- DX_IF_FEATURE([html], [don't generate doxygen plain HTML documentation], [generate doxygen plain HTML documentation]) +m4trace:configure.ac:10: -3- DX_FEATURE_html +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_html$]) +m4trace:configure.ac:10: -1- DX_CHECK_DEPEND([doc], [1]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CHECK_DEPEND([chm], [0]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_html$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_html$]) +m4trace:configure.ac:10: -1- DX_IF_FEATURE([html], [1], [0]) +m4trace:configure.ac:10: -2- DX_FEATURE_html +m4trace:configure.ac:10: -1- DX_CLEAR_DEPEND([doc], [1]) +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_html$]) +m4trace:configure.ac:10: -1- DX_CLEAR_DEPEND([chm], [0]) +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_html$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([html]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([html]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_html], [:]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_html_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_html_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_html_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_html_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_HTML], [YES]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_html], [false]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_html_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_html_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_html_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_html_FALSE]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([chm]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_HTML], [NO]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- DX_ARG_ABLE([ps], [generate doxygen PostScript documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_LATEX], latex) + DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) + DX_REQUIRE_PROG([DX_DVIPS], dvips) + DX_REQUIRE_PROG([DX_EGREP], egrep)]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_FEATURE], [ps]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_DESCRIPTION], [generate doxygen PostScript documentation]) +m4trace:configure.ac:10: -2- DX_IF_FEATURE([ps], [--disable-doxygen-ps], [--enable-doxygen-ps]) +m4trace:configure.ac:10: -3- DX_FEATURE_ps +m4trace:configure.ac:10: -2- DX_IF_FEATURE([ps], [don't generate doxygen PostScript documentation], [generate doxygen PostScript documentation]) +m4trace:configure.ac:10: -3- DX_FEATURE_ps +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_ps$]) +m4trace:configure.ac:10: -1- DX_CHECK_DEPEND([doc], [1]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_ps$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_ps$]) +m4trace:configure.ac:10: -1- DX_IF_FEATURE([ps], [1], [0]) +m4trace:configure.ac:10: -2- DX_FEATURE_ps +m4trace:configure.ac:10: -1- DX_CLEAR_DEPEND([doc], [1]) +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_ps$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([ps]) +m4trace:configure.ac:10: -1- DX_REQUIRE_PROG([DX_LATEX], [latex]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_LATEX$]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_ps$]) +m4trace:configure.ac:10: -1- DX_REQUIRE_PROG([DX_MAKEINDEX], [makeindex]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_MAKEINDEX$]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_ps$]) +m4trace:configure.ac:10: -1- DX_REQUIRE_PROG([DX_DVIPS], [dvips]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_DVIPS$]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_ps$]) +m4trace:configure.ac:10: -1- DX_REQUIRE_PROG([DX_EGREP], [egrep]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_EGREP$]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_ps$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([ps]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_ps], [:]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_ps_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_ps_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_ps_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_ps_FALSE]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_ps], [false]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_ps_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_ps_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_ps_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_ps_FALSE]) +m4trace:configure.ac:10: -1- DX_ARG_ABLE([pdf], [generate doxygen PDF documentation], [DX_CHECK_DEPEND(doc, 1)], [DX_CLEAR_DEPEND(doc, 1)], [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex) + DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) + DX_REQUIRE_PROG([DX_EGREP], egrep)]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_FEATURE], [pdf]) +m4trace:configure.ac:10: -1- AC_DEFUN([DX_CURRENT_DESCRIPTION], [generate doxygen PDF documentation]) +m4trace:configure.ac:10: -2- DX_IF_FEATURE([pdf], [--disable-doxygen-pdf], [--enable-doxygen-pdf]) +m4trace:configure.ac:10: -3- DX_FEATURE_pdf +m4trace:configure.ac:10: -2- DX_IF_FEATURE([pdf], [don't generate doxygen PDF documentation], [generate doxygen PDF documentation]) +m4trace:configure.ac:10: -3- DX_FEATURE_pdf +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_pdf$]) +m4trace:configure.ac:10: -1- DX_CHECK_DEPEND([doc], [1]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_pdf$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_pdf$]) +m4trace:configure.ac:10: -1- DX_IF_FEATURE([pdf], [1], [0]) +m4trace:configure.ac:10: -2- DX_FEATURE_pdf +m4trace:configure.ac:10: -1- DX_CLEAR_DEPEND([doc], [1]) +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_pdf$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([pdf]) +m4trace:configure.ac:10: -1- DX_REQUIRE_PROG([DX_PDFLATEX], [pdflatex]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_PDFLATEX$]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_pdf$]) +m4trace:configure.ac:10: -1- DX_REQUIRE_PROG([DX_MAKEINDEX], [makeindex]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_MAKEINDEX$]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_pdf$]) +m4trace:configure.ac:10: -1- DX_REQUIRE_PROG([DX_EGREP], [egrep]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_EGREP$]) +m4trace:configure.ac:10: -1- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -1- DX_CURRENT_DESCRIPTION +m4trace:configure.ac:10: -2- DX_CURRENT_FEATURE +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_FLAG_pdf$]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([pdf]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_pdf], [:]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_pdf_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_pdf_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_pdf_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_pdf_FALSE]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_pdf], [false]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_pdf_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_pdf_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_pdf_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_pdf_FALSE]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([ps]) +m4trace:configure.ac:10: -1- DX_TEST_FEATURE([pdf]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_latex], [:]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_latex_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_latex_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_latex_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_latex_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_LATEX], [YES]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- AM_CONDITIONAL([DX_COND_latex], [false]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_latex_TRUE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_COND_latex_FALSE$]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_latex_TRUE]) +m4trace:configure.ac:10: -1- _AM_SUBST_NOTMAKE([DX_COND_latex_FALSE]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([GENERATE_LATEX], [NO]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DOXYGEN_PAPER_SIZE$]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DOXYGEN_PAPER_SIZE$]) +m4trace:configure.ac:10: -1- DX_ENV_APPEND([PAPER_SIZE], [$DOXYGEN_PAPER_SIZE]) +m4trace:configure.ac:10: -1- m4_pattern_allow([^DX_ENV$]) +m4trace:configure.ac:12: -1- AX_BOOST_BASE([1.38.0]) +m4trace:configure.ac:12: -1- m4_pattern_allow([^BOOST_CPPFLAGS$]) +m4trace:configure.ac:12: -1- m4_pattern_allow([^BOOST_LDFLAGS$]) +m4trace:configure.ac:12: -1- m4_pattern_allow([^BOOST_ROOT_PATH$]) +m4trace:configure.ac:12: -1- m4_pattern_allow([^HAVE_BOOST$]) +m4trace:configure.ac:13: -1- AX_BOOST_REGEX +m4trace:configure.ac:13: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.ac:13: -1- _AM_DEPENDENCIES([CC]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CCDEPMODE$]) +m4trace:configure.ac:13: -1- AM_CONDITIONAL([am__fastdepCC], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^HAVE_BOOST_REGEX$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^BOOST_REGEX_LIB$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^BOOST_REGEX_LIB$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^BOOST_REGEX_LIB$]) +m4trace:configure.ac:15: -1- AX_HLIB +m4trace:configure.ac:15: -1- AX_LAPACK +m4trace:configure.ac:15: -1- AX_BLAS +m4trace:configure.ac:15: -1- m4_pattern_allow([^F77$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^FFLAGS$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^F77$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^ac_ct_F77$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^FLIBS$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^F77_DUMMY_MAIN$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^BLAS_LIBS$]) +m4trace:configure.ac:15: -2- m4_pattern_allow([^HAVE_BLAS$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^LAPACK_LIBS$]) +m4trace:configure.ac:15: -2- m4_pattern_allow([^HAVE_LAPACK$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^HLIB_CPPFLAGS$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^HLIB_LDFLAGS$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^HLIB_ROOT_PATH$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^HLIB_LIB$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^HAVE_HLIB$]) +m4trace:configure.ac:16: -1- AX_LIB_LOKI +m4trace:configure.ac:16: -1- m4_pattern_allow([^LOKI_CPPFLAGS$]) +m4trace:configure.ac:16: -1- m4_pattern_allow([^LOKI_LDFLAGS$]) +m4trace:configure.ac:16: -1- m4_pattern_allow([^LOKI_ROOT_PATH$]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^HAVE__BOOL$]) +m4trace:configure.ac:18: -1- m4_pattern_allow([^HAVE_STDBOOL_H$]) +m4trace:configure.ac:20: -1- m4_pattern_allow([^AM_CXXFLAGS$]) +m4trace:configure.ac:21: -1- m4_pattern_allow([^AM_LDFLAGS$]) +m4trace:configure.ac:24: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:24: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.ac:24: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.ac:24: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.ac:24: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.ac:24: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.ac:24: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.ac:24: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) +m4trace:configure.ac:24: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS diff --git a/src/bem3d/config.status b/src/bem3d/config.status index 5450625..f23ba51 100755 --- a/src/bem3d/config.status +++ b/src/bem3d/config.status @@ -404,7 +404,7 @@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " # Files that config.status was made for. -config_files=" Makefile src/Makefile src/boundary_mesh/Makefile src/spaces/Makefile src/laplace/Makefile" +config_files=" Makefile src/Makefile src/boundary_mesh/Makefile src/spaces/Makefile src/laplace/Makefile t/Makefile t/generic/Makefile t/boundary_mesh/Makefile t/laplace/Makefile" config_headers=" src/config.h" config_commands=" depfiles" @@ -565,6 +565,10 @@ do "src/boundary_mesh/Makefile") CONFIG_FILES="$CONFIG_FILES src/boundary_mesh/Makefile" ;; "src/spaces/Makefile") CONFIG_FILES="$CONFIG_FILES src/spaces/Makefile" ;; "src/laplace/Makefile") CONFIG_FILES="$CONFIG_FILES src/laplace/Makefile" ;; + "t/Makefile") CONFIG_FILES="$CONFIG_FILES t/Makefile" ;; + "t/generic/Makefile") CONFIG_FILES="$CONFIG_FILES t/generic/Makefile" ;; + "t/boundary_mesh/Makefile") CONFIG_FILES="$CONFIG_FILES t/boundary_mesh/Makefile" ;; + "t/laplace/Makefile") CONFIG_FILES="$CONFIG_FILES t/laplace/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; esac @@ -632,9 +636,14 @@ S["am__EXEEXT_FALSE"]="" S["am__EXEEXT_TRUE"]="#" S["LTLIBOBJS"]="" S["LIBOBJS"]="" +S["AM_LDFLAGS"]="" +S["AM_CXXFLAGS"]="" S["EGREP"]="/bin/grep -E" S["GREP"]="/bin/grep" S["CPP"]="gcc -E" +S["LOKI_ROOT_PATH"]="/usr/local" +S["LOKI_LDFLAGS"]="-L/usr/local/lib" +S["LOKI_CPPFLAGS"]="-I/usr/local/include" S["HLIB_LIB"]="-lhmatrix" S["HLIB_ROOT_PATH"]="/usr/local" S["HLIB_LDFLAGS"]="-L/usr/local/lib" @@ -651,7 +660,7 @@ S["am__fastdepCC_FALSE"]="#" S["am__fastdepCC_TRUE"]="" S["CCDEPMODE"]="depmode=gcc3" S["ac_ct_CC"]="gcc" -S["CFLAGS"]="-g -O2" +S["CFLAGS"]=" -I/usr/local/include" S["CC"]="gcc" S["BOOST_ROOT_PATH"]="/usr" S["BOOST_LDFLAGS"]="-L/usr/lib" diff --git a/src/bem3d/configure b/src/bem3d/configure index e0e7146..9e0178f 100755 --- a/src/bem3d/configure +++ b/src/bem3d/configure @@ -597,9 +597,14 @@ ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS +AM_LDFLAGS +AM_CXXFLAGS EGREP GREP CPP +LOKI_ROOT_PATH +LOKI_LDFLAGS +LOKI_CPPFLAGS HLIB_LIB HLIB_ROOT_PATH HLIB_LDFLAGS @@ -763,6 +768,7 @@ with_boost_regex with_blas with_lapack with_hlib +with_loki ' ac_precious_vars='build_alias host_alias @@ -1422,6 +1428,7 @@ Optional Packages: --with-lapack= use LAPACK library --with-hlib[=DIR] use hlib (default is yes) - it is possible to specify the root directory for hlib (optional) + --with-loki[=DIR|:>@ specify the root directory for the loki library Some influential environment variables: CXX C++ compiler command @@ -6621,6 +6628,7 @@ fi LDFLAGS="$LDFLAGS_SAVED" fi +AX_BOOST_TEST ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' @@ -8813,6 +8821,126 @@ $as_echo "#define HAVE_HLIB /**/" >>confdefs.h fi + +# Check whether --with-loki was given. +if test "${with_loki+set}" = set; then : + withval=$with_loki; + if test "$withval" = "no"; then + as_fn_error $? "Sorry, but it is not possible to compile without loki" "$LINENO" 5 + want_loki="no" + elif test "$withval" = "yes"; then + want_loki="yes" + ac_loki_path="" + else + want_loki="yes" + ac_loki_path="$withval" + fi + +else + + want_loki="yes"; + +fi + + + if test "x$want_loki" = "xyes"; then + if test "x$ac_loki_path" = "x"; then + for ac_loki_path_tmp in /usr /usr/local /opt /opt/local; do + if test -d "$ac_loki_path_tmp/include/loki"; then + LOKI_LDFLAGS="-L$ac_hlib_path_tmp/lib" + LOKI_CPPFLAGS="-I$ac_hlib_path_tmp/include" + LOKI_ROOT_PATH="$ac_hlib_path_tmp" + break; + fi + done + else + LOKI_LDFLAGS="-L$ac_hlib_path/lib" + LOKI_CPPFLAGS="-I$ac_hlib_path/include" + LOKI_ROOT_PATH="$ac_hlib_path" + fi + + if test "x$LOKI_ROOT_PATH" = "x"; then + as_fn_error $? "We could not detect the loki library. Please install + the loki library, c.f. loki-lib.sf.net, before + proceeding." "$LINENO" 5 + else + + + + + # Run some basic tests to check whether loki is really available: + CPPFLAGS_SAVED="$CPPFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + + CPPFLAGS="$CPPFLAGS $LOKI_CPPFLAGS" + CFLAGS="$CPPFLAGS" + export CPPFLAGS + export CFLAGS + LDFLAGS="$LDFLAGS $LOKI_LDFLAGS" + export LDFLAGS + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Loki is usable" >&5 +$as_echo_n "checking whether Loki is usable... " >&6; } +if test "${ax_cv_loki+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main () +{ +::Loki::SmartPtr< int > t = new int; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ax_cv_loki="yes" +else + ax_cv_loki="no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_loki" >&5 +$as_echo "$ax_cv_loki" >&6; } + + if test "$ax_cv_loki" != "yes"; then + as_fn_error $? "Could not use the loki library. Please make sure + that it is installed correctly." "$LINENO" 5 ; + fi + + CPPFLAGS="$SAVED_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$SAVED_LDFLAGS" + export LDFLAGS + fi + fi + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -9337,7 +9465,10 @@ $as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h fi -ac_config_files="$ac_config_files Makefile src/Makefile src/boundary_mesh/Makefile src/spaces/Makefile src/laplace/Makefile" + + + +ac_config_files="$ac_config_files Makefile src/Makefile src/boundary_mesh/Makefile src/spaces/Makefile src/laplace/Makefile t/Makefile t/generic/Makefile t/boundary_mesh/Makefile t/laplace/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -10156,6 +10287,10 @@ do "src/boundary_mesh/Makefile") CONFIG_FILES="$CONFIG_FILES src/boundary_mesh/Makefile" ;; "src/spaces/Makefile") CONFIG_FILES="$CONFIG_FILES src/spaces/Makefile" ;; "src/laplace/Makefile") CONFIG_FILES="$CONFIG_FILES src/laplace/Makefile" ;; + "t/Makefile") CONFIG_FILES="$CONFIG_FILES t/Makefile" ;; + "t/generic/Makefile") CONFIG_FILES="$CONFIG_FILES t/generic/Makefile" ;; + "t/boundary_mesh/Makefile") CONFIG_FILES="$CONFIG_FILES t/boundary_mesh/Makefile" ;; + "t/laplace/Makefile") CONFIG_FILES="$CONFIG_FILES t/laplace/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; esac diff --git a/src/bem3d/configure.ac b/src/bem3d/configure.ac index 06f3daf..76c9e3b 100644 --- a/src/bem3d/configure.ac +++ b/src/bem3d/configure.ac @@ -1,5 +1,5 @@ AC_INIT([Hilbert 3D], [0.1.0], [markus.mayr@tuwien.ac.at], [hilbert3d], [http://83.169.35.184/cgi-bin/gitweb?p=bem3d.git]) -AC_PREREQ([2.67]) +AC_PREREQ([2.64]) AM_INIT_AUTOMAKE() AC_CONFIG_HEADERS([src/config.h]) @@ -11,10 +11,15 @@ DX_INIT_DOXYGEN(["Hilbert 3D"], [Doxyfile], [docs/doxygen]) AX_BOOST_BASE([1.38.0]) AX_BOOST_REGEX +AX_BOOST_TEST AX_HLIB +AX_LIB_LOKI AC_HEADER_STDBOOL -AC_CONFIG_FILES([Makefile src/Makefile src/boundary_mesh/Makefile src/spaces/Makefile src/laplace/Makefile]) +AC_SUBST([AM_CXXFLAGS]) +AC_SUBST([AM_LDFLAGS]) + +AC_CONFIG_FILES([Makefile src/Makefile src/boundary_mesh/Makefile src/spaces/Makefile src/laplace/Makefile t/Makefile t/generic/Makefile t/boundary_mesh/Makefile t/laplace/Makefile]) AC_OUTPUT diff --git a/src/bem3d/m4/ax_lib_loki.m4 b/src/bem3d/m4/ax_lib_loki.m4 new file mode 100644 index 0000000..0afba19 --- /dev/null +++ b/src/bem3d/m4/ax_lib_loki.m4 @@ -0,0 +1,82 @@ +AC_DEFUN([AX_LIB_LOKI],[ + AC_ARG_WITH([loki], + AS_HELP_STRING([--with-loki@<:@=DIR|:>@], + [specify the root directory for the loki library]), + [ + if test "$withval" = "no"; then + AC_MSG_ERROR([Sorry, but it is not possible to compile without loki]) + want_loki="no" + elif test "$withval" = "yes"; then + want_loki="yes" + ac_loki_path="" + else + want_loki="yes" + ac_loki_path="$withval" + fi + ], + [ + want_loki="yes"; + ]) + + if test "x$want_loki" = "xyes"; then + if test "x$ac_loki_path" = "x"; then + for ac_loki_path_tmp in /usr /usr/local /opt /opt/local; do + if test -d "$ac_loki_path_tmp/include/loki"; then + LOKI_LDFLAGS="-L$ac_hlib_path_tmp/lib" + LOKI_CPPFLAGS="-I$ac_hlib_path_tmp/include" + LOKI_ROOT_PATH="$ac_hlib_path_tmp" + break; + fi + done + else + LOKI_LDFLAGS="-L$ac_hlib_path/lib" + LOKI_CPPFLAGS="-I$ac_hlib_path/include" + LOKI_ROOT_PATH="$ac_hlib_path" + fi + + if test "x$LOKI_ROOT_PATH" = "x"; then + AC_MSG_ERROR([We could not detect the loki library. Please install + the loki library, c.f. loki-lib.sf.net, before + proceeding.]) + else + AC_SUBST(LOKI_CPPFLAGS) + AC_SUBST(LOKI_LDFLAGS) + AC_SUBST(LOKI_ROOT_PATH) + + # Run some basic tests to check whether loki is really available: + CPPFLAGS_SAVED="$CPPFLAGS" + LDFLAGS_SAVED="$LDFLAGS" + + CPPFLAGS="$CPPFLAGS $LOKI_CPPFLAGS" + CFLAGS="$CPPFLAGS" + export CPPFLAGS + export CFLAGS + LDFLAGS="$LDFLAGS $LOKI_LDFLAGS" + export LDFLAGS + + AC_REQUIRE([AC_PROG_CXX]) + + AC_CACHE_CHECK(whether Loki is usable, + ax_cv_loki, + [ AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE(AC_LANG_PROGRAM( + [[@%:@include ]], + [[::Loki::SmartPtr< int > t = new int;]]), + ax_cv_loki="yes", + ax_cv_loki="no") + AC_LANG_POP([C++]) + ]) + + if test "$ax_cv_loki" != "yes"; then + AC_MSG_ERROR([Could not use the loki library. Please make sure + that it is installed correctly.]); + fi + + CPPFLAGS="$SAVED_CPPFLAGS" + export CPPFLAGS + LDFLAGS="$SAVED_LDFLAGS" + export LDFLAGS + fi + fi +]) + diff --git a/src/bem3d/src/HLibOperator_fwd.hpp b/src/bem3d/src/HLibOperator_fwd.hpp index dcf06f7..7a385a1 100644 --- a/src/bem3d/src/HLibOperator_fwd.hpp +++ b/src/bem3d/src/HLibOperator_fwd.hpp @@ -28,6 +28,12 @@ enum HLibOperatorConstructionMethod BuildHLibOperatorFromCluster }; +enum HLibOperatorConstructionLibrary +{ + HLib, + Hilbert +}; + class HLibInitializer { public: @@ -60,6 +66,9 @@ template < class TAnsatzSpace, class TTestSpace, enum MatrixSymmetry symmetry = UnsymmetricMatrix > class HLibOperator { + + typedef typename TAnsatzSpace::DFunc AFunc; + public: static const double defaultEpsForAcaAlgorithm = 1e-8; static const double defaultAimedResidualForGMRes = 1e-6; @@ -68,6 +77,9 @@ class HLibOperator static const enum HLibOperatorConstructionMethod defaultOperatorConstructionMethod = BuildHLibOperatorFromCluster; + static const enum HLibOperatorConstructionLibrary + defaultLibrary = Hilbert; + HLibOperator( const TAnsatzSpace& ansatzSpace, const TTestSpace& testSpace, @@ -84,6 +96,13 @@ class HLibOperator double maximumNumberOfSteps = defaultMaximumNumberOfStepsForGMRes ) const; + typename TAnsatzSpace::DFunc solve(typename TTestSpace::DFunc& rhs); + + /** + * @brief Computes the Energy of a Discrete Function + */ + double energy(typename TAnsatzSpace::DFunc& func); + private: const TAnsatzSpace ansatzSpace_; const TTestSpace testSpace_; diff --git a/src/bem3d/src/HLibOperator_tmpl.cpp b/src/bem3d/src/HLibOperator_tmpl.cpp index 63005be..6cdf558 100644 --- a/src/bem3d/src/HLibOperator_tmpl.cpp +++ b/src/bem3d/src/HLibOperator_tmpl.cpp @@ -27,29 +27,43 @@ HLibOperator< TAnsatzSpace, TTestSpace, symmetry >::HLibOperator( write_clustertree(columnClusterTree_,"clustertree.txt"); output_clustertree(columnClusterTree_,"clustertree.ps",0); + // MK: what is the right way to test if Ansatz and Testspace are the same??? + // e.g. look at the following piece of code + // + // Boundarymesh mesh; + // P0Space space1(mesh); + // P0Space space2(mesh); unsigned int numberOfTestElements = testSpace_.getNumberOfElements(); +// XXX: Bad-Hack! Removed this temporarily. +#if 0 if ( &ansatzSpace == &testSpace ) { std::cerr << "TestSpace = AnsatzSpace" << std::endl; rowClusterTree_ = columnClusterTree_; } + else { +#endif clusterfactory* testFactory = testSpace_.createClusterFactory(); rowClusterTree_ = create_clustertree( testFactory, HLIB_GEOMETRIC, 30, /* XXX: What is this constant? */ numberOfTestElements * numberOfTestElements ); del_clusterfactory( testFactory ); +#if 0 } +#endif if ( method == BuildHLibOperatorFull ) { + std::cerr << "# method == BuildHLibOperatorFull" << std::endl; supermatrix_ = build_full_supermatrix( rowClusterTree_->root, columnClusterTree_->root ); } else if ( method == BuildHLibOperatorFromCluster ) { //assert(0); // TODO/XXX: Not implemented yet! + std::cerr << "# method == BuildHLibOperatorFromCluster" << std::endl; supermatrix_ = build_supermatrix_from_cluster( rowClusterTree_->root, columnClusterTree_->root, 1, 30, HLIB_MINADM); @@ -59,7 +73,8 @@ HLibOperator< TAnsatzSpace, TTestSpace, symmetry >::HLibOperator( assert(0); } - outputrank_supermatrix(supermatrix_,"V.ps"); +// outputrank_supermatrix(supermatrix_,"V.ps"); + print_supermatrix("V.ps", supermatrix_); // print_cluster(rowClusterTree_->root,0,0); fillSupermatrixAca( @@ -69,6 +84,8 @@ HLibOperator< TAnsatzSpace, TTestSpace, symmetry >::HLibOperator( (void*) this, acaEps); + write_supermatrix("V.txt", supermatrix_); + // fill_supermatrix_aca(supermatrix_,rowClusterTree_->root,columnClusterTree_->root,(void*) this, computeEntryHelper, acaEps); } @@ -92,7 +109,7 @@ HLibOperator< TAnsatzSpace, TTestSpace, symmetry >::solveGMRes( assert(0); /* TODO: Replace by an exception, name: *DimensionMismatch* */ } - std::vector< double > solution( ansatzSpace_.getNumberOfElements(), 0 ); + std::vector< double > solution( ansatzSpace_.getNumberOfElements(), 0. ); /* TODO: Document this call and the effects for certain operators. * Should it be possible to specify preconditioner matrices? @@ -100,15 +117,65 @@ HLibOperator< TAnsatzSpace, TTestSpace, symmetry >::solveGMRes( solve_gmres_supermatrix( supermatrix_, (double*)(&rhs[0]), &solution[0], aimedResidual, maximumNumberOfSteps, - 0, HLIB_PREC_LU, + 0, HLIB_PREC_CHOLESKY, 0, HLIB_EVAL_DEFAULT, - 0); + 1); return solution; } +template < class TAnsatzSpace, class TTestSpace, + enum MatrixSymmetry symmetry > +typename TAnsatzSpace::DFunc +HLibOperator< TAnsatzSpace, TTestSpace, symmetry >::solve(typename TTestSpace::DFunc& rhs) +{ +// std::vector rhsHLibOrder = rhs.getCoeffHLibOrder(); + +// for ( int i = 0; i < ansatzSpace_.getNumberOfElements(); ++i ) +// rhsHLibOrder + std::vector solution = solveGMRes(rhs.getCoeff()); + + // TODO: linke seite muss noch sortiert werden + typename TAnsatzSpace::DFunc result(ansatzSpace_,solution); + + return result; +} + +template < class TAnsatzSpace, class TTestSpace, + enum MatrixSymmetry symmetry > +double +HLibOperator< TAnsatzSpace, TTestSpace, symmetry >::energy( + typename TAnsatzSpace::DFunc& func) +{ + assert( ansatzSpace_.getNumberOfElements() == testSpace_.getNumberOfElements() ); + + std::vector idxIn = func.getCoeff(); + std::vector dofAnsatzIn (ansatzSpace_.getNumberOfElements(),0); + + // order coeffs of func according to internal HLib-order of the AnsatzSpace + for ( int i=0; iidx2dof[i]] = idxIn[i]; + + std::vector dofTestOut (testSpace_.getNumberOfElements(),0); +// eval_supermatrix(supermatrix_, &dofAnsatzIn[0], &dofTestOut[0]); + eval_supermatrix(supermatrix_, &idxIn[0], &dofTestOut[0]); + + std::vector dofTestIn (ansatzSpace_.getNumberOfElements(),0); + + // order coeffs of func according to internal HLib-order of the TestSpace + // (the spaces are the SAME, but their dof2idx arrays can differ....) + for ( int i=0; iidx2dof[i]] = idxIn[i]; + + // MK: vector multiplication... is there a function in the STL? + double result = 0; + for ( int i=0; i void @@ -196,6 +263,13 @@ HLibOperator< TAnsatzSpace, TTestSpace, symmetry >::computeEntryHelper( HLibOperator* op = static_cast< HLibOperator* >( data ); int ourI = op->rowClusterTree_->dof2idx[ i ]; int ourJ = op->columnClusterTree_->dof2idx[ j ]; +// std::cerr << " computeEntryHelper: " << op->computeEntry_( op->ansatzSpace_[ ourI ], op->testSpace_[ ourJ ] ) << std::endl; return op->computeEntry_( op->ansatzSpace_[ ourI ], op->testSpace_[ ourJ ] ); + + // The identity +// if ( i==j ) +// return op->ansatzSpace_[i].getSupport().computeArea(); +// else +// return 0; } diff --git a/src/bem3d/src/Makefile b/src/bem3d/src/Makefile index 90fcf89..3b14731 100644 --- a/src/bem3d/src/Makefile +++ b/src/bem3d/src/Makefile @@ -38,7 +38,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_boost_base.m4 \ $(top_srcdir)/m4/ax_boost_regex.m4 $(top_srcdir)/m4/ax_hlib.m4 \ - $(top_srcdir)/m4/ax_lapack.m4 \ + $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_lib_loki.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) @@ -91,6 +91,8 @@ am__relativize = \ reldir="$$dir2" ACLOCAL = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run aclocal-1.11 AMTAR = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run tar +AM_CXXFLAGS = +AM_LDFLAGS = AUTOCONF = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run autoconf AUTOHEADER = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run autoheader AUTOMAKE = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run automake-1.11 @@ -102,7 +104,7 @@ BOOST_REGEX_LIB = -lboost_regex-mt BOOST_ROOT_PATH = /usr CC = gcc CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 +CFLAGS = -I/usr/local/include CPP = gcc -E CPPFLAGS = CXX = g++ @@ -157,6 +159,9 @@ LAPACK_LIBS = -llapack LDFLAGS = LIBOBJS = LIBS = +LOKI_CPPFLAGS = -I/usr/local/include +LOKI_LDFLAGS = -L/usr/local/lib +LOKI_ROOT_PATH = /usr/local LTLIBOBJS = MAKEINFO = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run makeinfo MKDIR_P = /bin/mkdir -p diff --git a/src/bem3d/src/Makefile.in b/src/bem3d/src/Makefile.in index af23781..169189a 100644 --- a/src/bem3d/src/Makefile.in +++ b/src/bem3d/src/Makefile.in @@ -38,7 +38,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_boost_base.m4 \ $(top_srcdir)/m4/ax_boost_regex.m4 $(top_srcdir)/m4/ax_hlib.m4 \ - $(top_srcdir)/m4/ax_lapack.m4 \ + $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_lib_loki.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) @@ -91,6 +91,8 @@ am__relativize = \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_CXXFLAGS = @AM_CXXFLAGS@ +AM_LDFLAGS = @AM_LDFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -157,6 +159,9 @@ LAPACK_LIBS = @LAPACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ +LOKI_CPPFLAGS = @LOKI_CPPFLAGS@ +LOKI_LDFLAGS = @LOKI_LDFLAGS@ +LOKI_ROOT_PATH = @LOKI_ROOT_PATH@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ diff --git a/src/bem3d/src/boundary_mesh/.deps/libhilbert_mesh_a-GenericVector.Po b/src/bem3d/src/boundary_mesh/.deps/libhilbert_mesh_a-GenericVector.Po index 247e377..50aa473 100644 --- a/src/bem3d/src/boundary_mesh/.deps/libhilbert_mesh_a-GenericVector.Po +++ b/src/bem3d/src/boundary_mesh/.deps/libhilbert_mesh_a-GenericVector.Po @@ -1,12 +1,14 @@ libhilbert_mesh_a-GenericVector.o: ../generic/GenericVector.cpp \ - ../generic/GenericVector.hpp /usr/include/c++/4.5/ostream \ - /usr/include/c++/4.5/ios /usr/include/c++/4.5/iosfwd \ + ../generic/GenericVector.hpp /usr/include/c++/4.5/functional \ /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ /usr/include/features.h /usr/include/bits/predefs.h \ /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h /usr/include/c++/4.5/ostream \ + /usr/include/c++/4.5/ios /usr/include/c++/4.5/iosfwd \ /usr/include/c++/4.5/bits/stringfwd.h \ /usr/include/c++/4.5/bits/postypes.h /usr/include/c++/4.5/cwchar \ /usr/include/c++/4.5/cstddef \ @@ -51,8 +53,6 @@ libhilbert_mesh_a-GenericVector.o: ../generic/GenericVector.cpp \ /usr/include/c++/4.5/ext/new_allocator.h /usr/include/c++/4.5/new \ /usr/include/c++/4.5/bits/ostream_insert.h \ /usr/include/c++/4.5/cxxabi-forced.h \ - /usr/include/c++/4.5/bits/stl_function.h \ - /usr/include/c++/4.5/backward/binders.h \ /usr/include/c++/4.5/bits/basic_string.h \ /usr/include/c++/4.5/initializer_list \ /usr/include/c++/4.5/bits/basic_string.tcc \ @@ -68,20 +68,17 @@ libhilbert_mesh_a-GenericVector.o: ../generic/GenericVector.cpp \ /usr/include/c++/4.5/bits/basic_ios.tcc \ /usr/include/c++/4.5/bits/ostream.tcc ../generic/GenericVector_tmpl.cpp \ /usr/include/c++/4.5/cassert /usr/include/assert.h \ - /usr/include/c++/4.5/cmath /usr/include/math.h \ - /usr/include/bits/huge_val.h /usr/include/bits/huge_valf.h \ - /usr/include/bits/huge_vall.h /usr/include/bits/inf.h \ - /usr/include/bits/nan.h /usr/include/bits/mathdef.h \ - /usr/include/bits/mathcalls.h /usr/include/bits/mathinline.h \ - /usr/include/c++/4.5/bits/cmath.tcc + /usr/include/c++/4.5/iostream /usr/include/c++/4.5/istream \ + /usr/include/c++/4.5/bits/istream.tcc /usr/include/c++/4.5/cmath \ + /usr/include/math.h /usr/include/bits/huge_val.h \ + /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \ + /usr/include/bits/inf.h /usr/include/bits/nan.h \ + /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \ + /usr/include/bits/mathinline.h /usr/include/c++/4.5/bits/cmath.tcc ../generic/GenericVector.hpp: -/usr/include/c++/4.5/ostream: - -/usr/include/c++/4.5/ios: - -/usr/include/c++/4.5/iosfwd: +/usr/include/c++/4.5/functional: /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: @@ -101,6 +98,16 @@ libhilbert_mesh_a-GenericVector.o: ../generic/GenericVector.cpp \ /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +/usr/include/c++/4.5/ostream: + +/usr/include/c++/4.5/ios: + +/usr/include/c++/4.5/iosfwd: + /usr/include/c++/4.5/bits/stringfwd.h: /usr/include/c++/4.5/bits/postypes.h: @@ -229,10 +236,6 @@ libhilbert_mesh_a-GenericVector.o: ../generic/GenericVector.cpp \ /usr/include/c++/4.5/cxxabi-forced.h: -/usr/include/c++/4.5/bits/stl_function.h: - -/usr/include/c++/4.5/backward/binders.h: - /usr/include/c++/4.5/bits/basic_string.h: /usr/include/c++/4.5/initializer_list: @@ -271,6 +274,12 @@ libhilbert_mesh_a-GenericVector.o: ../generic/GenericVector.cpp \ /usr/include/assert.h: +/usr/include/c++/4.5/iostream: + +/usr/include/c++/4.5/istream: + +/usr/include/c++/4.5/bits/istream.tcc: + /usr/include/c++/4.5/cmath: /usr/include/math.h: diff --git a/src/bem3d/src/boundary_mesh/Face.hpp b/src/bem3d/src/boundary_mesh/Face.hpp index 29c5ef2..c6c98be 100644 --- a/src/bem3d/src/boundary_mesh/Face.hpp +++ b/src/bem3d/src/boundary_mesh/Face.hpp @@ -7,6 +7,7 @@ #include "types.hpp" #include "exception.hpp" #include "FaceDispatch.hpp" +#include "../generic/Testing.hpp" /** * @page boundary_mesh_faces The Face datatypes @@ -68,6 +69,7 @@ namespace boundary_mesh template < class TMesh > class CommonFaceBase__ { + friend class testing::Tester< TMesh >; template < class TFace, class TNext > friend class FaceFactory; public: @@ -134,17 +136,16 @@ namespace boundary_mesh ConstFaceIterator begin_f() const; ConstFaceIterator end_f() const; + unsigned int getNumberOfEdges() const; unsigned int getLocalEdgeId( const typename TMesh::Prop::HalfEdge& edge ) const; - bool operator==(const typename TMesh::Prop::HalfEdge& rhs) const; - protected: CommonFaceBase__( const typename TMesh::Prop::HalfEdge& halfedge ) - : halfedge_( halfedge ) {} + : halfedge_( &halfedge ) {} private: - const typename TMesh::Prop::HalfEdge& halfedge_; + const typename TMesh::Prop::HalfEdge* halfedge_; }; template < class TMesh > @@ -158,6 +159,7 @@ namespace boundary_mesh geoid_t getId() const; virtual double computeArea() const =0; + virtual double computeDiameter() const =0; virtual unsigned int getNumberOfVertices() const =0; virtual dispatchId_t getDispatchId() const =0; @@ -179,6 +181,10 @@ namespace boundary_mesh typename std::vector< const typename TMesh::Vertex* > vertices_; }; + template < class TMesh > + bool operator<( + const CommonFaceBase__< TMesh >& lhs, + const CommonFaceBase__< TMesh >& rhs); } #include "Face_tmpl.cpp" diff --git a/src/bem3d/src/boundary_mesh/FaceDispatch.hpp b/src/bem3d/src/boundary_mesh/FaceDispatch.hpp index 0cff98b..aeb04cc 100644 --- a/src/bem3d/src/boundary_mesh/FaceDispatch.hpp +++ b/src/bem3d/src/boundary_mesh/FaceDispatch.hpp @@ -7,8 +7,55 @@ #include "../generic/TypeList.hpp" #include "../generic/BaseTypes.hpp" #include "exception/DispatchIdNotSet.hpp" +#include "loki/MultiMethods.h" +#include typedef int dispatchId_t; +#include "Face.hpp" + +#define HILBERT3D_DISPATCH_PARAMETERS_0(Name, R) \ + public: \ + Name() {} \ + typedef TMesh Mesh; \ + private: \ + typedef R Result; +#define HILBERT3D_DISPATCH_PARAMETERS_1(Name, R, T1, N1) \ + public: \ + Name(T1 N1) : N1(N1) {} \ + typedef TMesh Mesh; \ + private: \ + T1 N1; \ + typedef R Result; +#define HILBERT3D_DISPATCH_PARAMETERS_2(Name, R, T1, N1, T2, N2) \ + public: \ + Name(T1 N1, T2 N2) : N1(N1), N2(N2) {} \ + typedef TMesh Mesh; \ + private: \ + T1 N1; T2 N2; \ + typedef R Result; +#define HILBERT3D_DISPATCH_PARAMETERS_3(Name, R, T1, N1, T2, N2, T3, N3) \ + public: \ + Name(T1 N1, T2 N2, T3 N3) : N1(N1), N2(N2), N3(N3) {} \ + typedef TMesh Mesh; \ + private: \ + T1 N1; T2 N2; T3 N3; \ + typedef R Result; +#define HILBERT3D_DISPATCH_PARAMETERS_4(Name, R, T1, N1, T2, N2, T3, N3, T4, N4) \ + public: \ + Name(T1 N1, T2 N2, T3 N3, T4 N4) : N1(N1), N2(N2), N3(N3), N4(N4) {} \ + typedef TMesh Mesh; \ + private: \ + T1 N1; T2 N2; T3 N3; T4 N4; \ + typedef R Result; +#define HILBERT3D_SINGLE_DISPATCH_IMPLEMENTATION_FOR( T ) \ + public: \ + typename boost::enable_if< boost::is_base_of< \ + typename TMesh::Face, typename T >, Result >::type \ + exec( const typename T& face ) +#define HILBERT3D_DOUBLE_DISPATCH_IMPLEMENTATION_FOR( T1,T2 ) \ + public: \ + Result \ + exec( const typename T1& face1, const typename T2& face2 ) const namespace boundary_mesh { @@ -23,6 +70,17 @@ namespace boundary_mesh TExecutor exec); }; + template < class TExecutor, class TBase, class TTypes > + class StaticSingleDispatcher< TExecutor, TBase, TTypes, void > + { + public: + typedef TExecutor PARAM; + + static void Exec( + const TBase& face, + TExecutor exec); + }; + template < class TExecutor, class TBase, class TResult > class StaticSingleDispatcher< TExecutor, TBase, generic::NullType, TResult > { @@ -34,13 +92,25 @@ namespace boundary_mesh TExecutor exec); }; + template < class TExecutor, class TBase > + class StaticSingleDispatcher< TExecutor, TBase, generic::NullType, void > + { + public: + typedef TExecutor PARAM; + + static void Exec( + const TBase& face, + TExecutor exec); + }; + template < class TExecutor, class TMesh, class TResult = void > class SingleFaceDispatcher : public StaticSingleDispatcher< TExecutor, typename TMesh::Face, typename TMesh::FaceTypes, TResult > - {}; + { + }; template < class TExecutor, class TBaseLhs, class TTypesLhs, class TBaseRhs = TBaseLhs, class TTypesRhs = TTypesLhs, @@ -89,12 +159,20 @@ namespace boundary_mesh template < class TExecutor, class TMesh, class TResult > class DoubleFaceDispatcher +#ifdef USE_LOKI_DISPATCHER_ + : public ::Loki::StaticDispatcher< +#else : public StaticDoubleDispatcher< +#endif TExecutor, typename TMesh::Face, typename TMesh::FaceTypes, +#ifdef USE_LOKI_DISPATCHER_ + false, +#endif typename TMesh::Face, typename TMesh::FaceTypes, TResult > - {}; + { + }; } #include "FaceDispatch_tmpl.cpp" diff --git a/src/bem3d/src/boundary_mesh/FaceDispatch_tmpl.cpp b/src/bem3d/src/boundary_mesh/FaceDispatch_tmpl.cpp index 8380a16..fef0e82 100644 --- a/src/bem3d/src/boundary_mesh/FaceDispatch_tmpl.cpp +++ b/src/bem3d/src/boundary_mesh/FaceDispatch_tmpl.cpp @@ -11,6 +11,26 @@ namespace boundary_mesh { + template < class TExecutor, class TBase, class TTypes > + void + StaticSingleDispatcher< TExecutor, TBase, TTypes, void >::Exec( + const TBase& face, + TExecutor exec) + { + typedef typename TTypes::Head Head; + typedef typename TTypes::Tail Tail; + + if (const Head* castedFace = dynamic_cast< const Head* >(&face)) + { + exec.exec( *castedFace ); + } + else + { + StaticSingleDispatcher< TExecutor, TBase, Tail, void >:: + Exec( face, exec ); + } + } + template < class TExecutor, class TBase, class TTypes, class TResult > TResult StaticSingleDispatcher< TExecutor, TBase, TTypes, TResult >::Exec( @@ -22,11 +42,11 @@ namespace boundary_mesh if (const Head* castedFace = dynamic_cast< const Head* >(&face)) { - exec.exec( *castedFace ); + return exec.exec( *castedFace ); } else { - StaticSingleDispatcher< TExecutor, TBase, Tail, TResult >:: + return StaticSingleDispatcher< TExecutor, TBase, Tail, TResult >:: Exec( face, exec ); } } @@ -41,6 +61,16 @@ namespace boundary_mesh "Could not dispatch function call!\n"); } + template < class TExecutor, class TBase > + void + StaticSingleDispatcher< TExecutor, TBase, generic::NullType, void >::Exec( + const TBase& face, + TExecutor exec) + { + throw new exception::CouldNotDispatchCall( + "Could not dispatch function call!\n"); + } + template < class TExecutor, class TBaseLhs, class TTypesLhs, class TBaseRhs, class TTypesRhs, class TResult > TResult @@ -116,7 +146,6 @@ namespace boundary_mesh throw exception::CouldNotDispatchCall( "Double Dispatcher: Could not dispatch right-hand side argument!\n"); } - } #endif diff --git a/src/bem3d/src/boundary_mesh/Face_tmpl.cpp b/src/bem3d/src/boundary_mesh/Face_tmpl.cpp index 5f99319..f1ed0f7 100644 --- a/src/bem3d/src/boundary_mesh/Face_tmpl.cpp +++ b/src/bem3d/src/boundary_mesh/Face_tmpl.cpp @@ -4,6 +4,7 @@ #include #include #include +#include "../generic/PtrCompare.hpp" #include "Face.hpp" @@ -81,6 +82,7 @@ namespace boundary_mesh { CommonFaceBase__< TMesh >::IteratorBase__::operator++(); } while ( this->getCurrentHalfEdge() != 0 && this->getCurrentHalfEdge()->getOppositeEdge() == 0 ); + return *this; } template < class TMesh > @@ -151,42 +153,58 @@ namespace boundary_mesh { typename CommonFaceBase__< TMesh >::ConstEdgeIterator CommonFaceBase__< TMesh >::begin_e() const { - return ConstEdgeIterator( halfedge_, StartAtBeginning ); + return ConstEdgeIterator( *halfedge_, StartAtBeginning ); } template < class TMesh > typename CommonFaceBase__< TMesh >::ConstEdgeIterator CommonFaceBase__< TMesh >::end_e() const { - return ConstEdgeIterator( halfedge_, StartAtEnd ); + return ConstEdgeIterator( *halfedge_, StartAtEnd ); } template < class TMesh > typename CommonFaceBase__< TMesh >::ConstFaceIterator CommonFaceBase__< TMesh >::begin_f() const { - return ConstFaceIterator( halfedge_, StartAtBeginning ); + return ConstFaceIterator( *halfedge_, StartAtBeginning ); } template < class TMesh > typename CommonFaceBase__< TMesh >::ConstFaceIterator CommonFaceBase__< TMesh >::end_f() const { - return ConstFaceIterator( halfedge_, StartAtEnd ); + return ConstFaceIterator( *halfedge_, StartAtEnd ); } template < class TMesh > typename CommonFaceBase__< TMesh >::ConstVertexIterator CommonFaceBase__< TMesh >::begin_v() const { - return ConstVertexIterator( halfedge_, StartAtBeginning ); + return ConstVertexIterator( *halfedge_, StartAtBeginning ); } template < class TMesh > typename CommonFaceBase__< TMesh >::ConstVertexIterator CommonFaceBase__< TMesh >::end_v() const { - return ConstVertexIterator( halfedge_, StartAtEnd ); + return ConstVertexIterator( *halfedge_, StartAtEnd ); + } + + template < class TMesh > + unsigned int + CommonFaceBase__< TMesh >::getNumberOfEdges() const + { + unsigned int i = 0; + CommonFaceBase__< TMesh >::ConstEdgeIterator edgeIt = begin_e(); + assert(edgeIt != end_e()); + + do + { + i += 1; + } while ( ++edgeIt != end_e() ); + + return i; } template < class TMesh > @@ -198,7 +216,7 @@ namespace boundary_mesh { CommonFaceBase__< TMesh >::ConstEdgeIterator edgeIt = begin_e(); assert( edgeIt != end_e() ); - while ( *edgeIt != edge && ++edgeIt != end_e() ) + while ( &(*edgeIt) != &(edge) && ++edgeIt != end_e() ) { ++i; } @@ -245,6 +263,51 @@ namespace boundary_mesh { return *(cache.vertices_[ id ]); } + + template < class TMesh > + bool operator==( + const CommonFaceBase__< TMesh >& lhs, + const CommonFaceBase__< TMesh >& rhs) + { + using namespace generic; + typedef typename TMesh::Vertex Vertex; + typedef std::set< const Vertex*, PtrObjectLess > VertexSet; + + VertexSet lhsVertices, rhsVertices; + std::for_each( lhs.begin_v(), lhs.end_v(), + SetInsertFunctor< VertexSet, Vertex >(&lhsVertices) ); + std::for_each( rhs.begin_v(), rhs.end_v(), + SetInsertFunctor< VertexSet, Vertex >(&rhsVertices) ); + + return std::equal( lhsVertices.begin(), lhsVertices.end(), + rhsVertices.begin(), PtrObjectEqual< Vertex >() ); + } + + template < class TMesh > + bool operator<( + const CommonFaceBase__< TMesh >& lhs, + const CommonFaceBase__< TMesh >& rhs) + { + if ( lhs.getNumberOfEdges() < rhs.getNumberOfEdges() ) + return true; + if ( lhs.getNumberOfEdges() > rhs.getNumberOfEdges() ) + return false; + + using namespace generic; + typedef typename TMesh::Vertex Vertex; + typedef std::set< const Vertex*, PtrObjectLess > VertexSet; + + VertexSet lhsVertices, rhsVertices; + std::for_each( lhs.begin_v(), lhs.end_v(), + SetInsertFunctor< VertexSet, Vertex >(&lhsVertices) ); + std::for_each( rhs.begin_v(), rhs.end_v(), + SetInsertFunctor< VertexSet, Vertex >(&rhsVertices) ); + + return std::lexicographical_compare( + lhsVertices.begin(), lhsVertices.end(), + rhsVertices.begin(), rhsVertices.end(), + PtrObjectLess()); + } } #endif diff --git a/src/bem3d/src/boundary_mesh/FlexibleMesh.hpp b/src/bem3d/src/boundary_mesh/FlexibleMesh.hpp index 4f7ff53..b472b1b 100644 --- a/src/bem3d/src/boundary_mesh/FlexibleMesh.hpp +++ b/src/bem3d/src/boundary_mesh/FlexibleMesh.hpp @@ -1,19 +1,25 @@ #ifndef HILBERT3D_BOUNDARY_MESH_FLEXIBLEMESH_HPP_GUARD_ #define HILBERT3D_BOUNDARY_MESH_FLEXIBLEMESH_HPP_GUARD_ +#include + #include "FaceDispatch.hpp" #include "Face.hpp" #include "HalfEdge.hpp" #include "Vertex.hpp" #include "Mesh.hpp" +#include "Marker.hpp" +#include "RefinementData.hpp" + #include "../generic/TypeList.hpp" #include "face/Triangle_tmpl.hpp" -#include "face/Parallelogram_tmpl.hpp" +#include "face/Rectangle_tmpl.hpp" #include "algorithm/HandleObj.hpp" #include "algorithm/RefineUniformly.hpp" +#include "algorithm/RefineAdaptivly.hpp" namespace boundary_mesh { @@ -25,13 +31,13 @@ namespace boundary_mesh typedef HalfEdgeT< TMesh > HalfEdge; typedef RFace< TMesh >* IntFace; typedef RFace< TMesh > Face; - typedef face::RTriangle< TMesh > Triangle; - typedef face::RParallelogram< TMesh > Parallelogram; - typedef Parallelogram ConvexQuadrilateral; - typedef Parallelogram Quadrilateral; + typedef face::RRectangle< TMesh > Rectangle; + typedef Rectangle Parallelogram; + typedef Rectangle ConvexQuadrilateral; + typedef Rectangle Quadrilateral; - typedef HILBERT3D_TYPELIST_2( Triangle, Parallelogram ) FaceTypes; + typedef HILBERT3D_TYPELIST_2( Triangle, Rectangle ) FaceTypes; static const unsigned int maximumNumberOfEdgesPerFace = 4; static const unsigned int maximumNumberOfHangingNodes = 1; @@ -43,10 +49,16 @@ namespace boundary_mesh static TMesh (*loadFromObj)( const char* ); static void (*saveAsObj)( const TMesh&, const char* ); static TMesh (*refineUniformly)( const TMesh& ); + static RefinementData< TMesh, RefinementDataRequest_RequireBoth > + (*refineAdaptivly)( const TMesh&, const Marker< TMesh >& ); }; template class Mesh< FlexibleMeshProps, FlexibleMeshAlgorithms >; typedef Mesh< FlexibleMeshProps, FlexibleMeshAlgorithms > FlexibleMesh; + template class RefinementData< FlexibleMesh, + RefinementDataRequest_RequireBoth >; + typedef RefinementData< FlexibleMesh, RefinementDataRequest_RequireBoth > + FlexibleRefinementData; } #include "FlexibleMesh_tmpl.cpp" diff --git a/src/bem3d/src/boundary_mesh/FlexibleMesh_tmpl.cpp b/src/bem3d/src/boundary_mesh/FlexibleMesh_tmpl.cpp index 56aff7f..4e18ac5 100644 --- a/src/bem3d/src/boundary_mesh/FlexibleMesh_tmpl.cpp +++ b/src/bem3d/src/boundary_mesh/FlexibleMesh_tmpl.cpp @@ -4,6 +4,11 @@ #include "FlexibleMesh.hpp" #include "FaceDispatch.hpp" +#include "Marker_tmpl.cpp" +#include "RefinementData_tmpl.cpp" + +#include "algorithm/RefineAdaptivly_tmpl.cpp" + namespace boundary_mesh { template < class TMesh > @@ -17,6 +22,12 @@ namespace boundary_mesh template < class TMesh > TMesh (* FlexibleMeshAlgorithms< TMesh >::refineUniformly)(const TMesh& ) = &(algorithm::refineUniformly< TMesh >); + + template < class TMesh > + RefinementData< TMesh, RefinementDataRequest_RequireBoth > + (* FlexibleMeshAlgorithms< TMesh >::refineAdaptivly)( + const TMesh&, const Marker< TMesh >& ) + = &(algorithm::refineAdaptivly); } #endif diff --git a/src/bem3d/src/boundary_mesh/HalfEdge.hpp b/src/bem3d/src/boundary_mesh/HalfEdge.hpp index 9f1f222..2739dd8 100644 --- a/src/bem3d/src/boundary_mesh/HalfEdge.hpp +++ b/src/bem3d/src/boundary_mesh/HalfEdge.hpp @@ -1,6 +1,8 @@ #ifndef HILBERT3D_BOUNDARY_MESH_HALFEDGE_HPP_GUARD_ #define HILBERT3D_BOUNDARY_MESH_HALFEDGE_HPP_GUARD_ +#include "../generic/Testing.hpp" + /** * @file HalfEdge.hpp * @brief Declares a half-edge data structure. @@ -18,14 +20,11 @@ namespace boundary_mesh * does not make any assumptions on the Face and the Vertex type. The * type TMesh::HalfEdge must however be equal to the HalfEdgeT< TMesh > * type when TMesh is the template parameter passed to HalfEdgeT. - * - * TODO: Do not use the Mesh class as a friend class. Create a - * HalfEdgeBuilder class instead. This also requires some changes in the - * Mesh class. */ template < class TMesh > class HalfEdgeT { + friend class testing::Tester< TMesh >; template < template class TProp, template class TAlg > friend class Mesh; diff --git a/src/bem3d/src/boundary_mesh/Makefile b/src/bem3d/src/boundary_mesh/Makefile index 1011ccb..b08462d 100644 --- a/src/bem3d/src/boundary_mesh/Makefile +++ b/src/bem3d/src/boundary_mesh/Makefile @@ -42,7 +42,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_boost_base.m4 \ $(top_srcdir)/m4/ax_boost_regex.m4 $(top_srcdir)/m4/ax_hlib.m4 \ - $(top_srcdir)/m4/ax_lapack.m4 \ + $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_lib_loki.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) @@ -107,6 +107,8 @@ CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run aclocal-1.11 AMTAR = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run tar +AM_CXXFLAGS = +AM_LDFLAGS = AUTOCONF = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run autoconf AUTOHEADER = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run autoheader AUTOMAKE = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run automake-1.11 @@ -118,7 +120,7 @@ BOOST_REGEX_LIB = -lboost_regex-mt BOOST_ROOT_PATH = /usr CC = gcc CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 +CFLAGS = -I/usr/local/include CPP = gcc -E CPPFLAGS = CXX = g++ @@ -173,6 +175,9 @@ LAPACK_LIBS = -llapack LDFLAGS = LIBOBJS = LIBS = +LOKI_CPPFLAGS = -I/usr/local/include +LOKI_LDFLAGS = -L/usr/local/lib +LOKI_ROOT_PATH = /usr/local LTLIBOBJS = MAKEINFO = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run makeinfo MKDIR_P = /bin/mkdir -p diff --git a/src/bem3d/src/boundary_mesh/Makefile.in b/src/bem3d/src/boundary_mesh/Makefile.in index 9798cb5..c8a6b11 100644 --- a/src/bem3d/src/boundary_mesh/Makefile.in +++ b/src/bem3d/src/boundary_mesh/Makefile.in @@ -42,7 +42,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_boost_base.m4 \ $(top_srcdir)/m4/ax_boost_regex.m4 $(top_srcdir)/m4/ax_hlib.m4 \ - $(top_srcdir)/m4/ax_lapack.m4 \ + $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_lib_loki.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) @@ -107,6 +107,8 @@ CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_CXXFLAGS = @AM_CXXFLAGS@ +AM_LDFLAGS = @AM_LDFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -173,6 +175,9 @@ LAPACK_LIBS = @LAPACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ +LOKI_CPPFLAGS = @LOKI_CPPFLAGS@ +LOKI_LDFLAGS = @LOKI_LDFLAGS@ +LOKI_ROOT_PATH = @LOKI_ROOT_PATH@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ diff --git a/src/bem3d/src/boundary_mesh/Marker.hpp b/src/bem3d/src/boundary_mesh/Marker.hpp index 67fd4a1..3a7a768 100644 --- a/src/bem3d/src/boundary_mesh/Marker.hpp +++ b/src/bem3d/src/boundary_mesh/Marker.hpp @@ -1,8 +1,220 @@ #ifndef HILBERT3D_BOUNDARY_MESH_MARKER_HPP_GUARD_ #define HILBERT3D_BOUNDARY_MESH_MARKER_HPP_GUARD_ -#include "Marker_fwd.hpp" -#include "Marker_tmpl.cpp" +#include +#include "types.hpp" +#include "FaceDispatch.hpp" + +namespace boundary_mesh +{ + /** + * The Marker class contains state information about a specific Mesh instance. + * It stores whether a certain edge is marked with respect to a certain face. + * This class was written for and is extensivly used within the adaptive + * refinement algorithms. There, we also provide functions to build the + * closure of a marking with respect to certain shape regularity constraints. + * + * In order to follow our design principle of objects being "immutable after + * construction", we provide the MarkerBuilder class which exposes methods + * to build or instantize a Marker instance step by step. + */ + template < class TMesh > + class Marker + { + template < class,class > friend class MarkerBuilder; + + public: + /** + * @param marker + * + * Creates a copy of the given Marker instance. + */ + Marker( const Marker& marker ); + + /** + * @param face This is a face, which is contained within the Mesh + * instance this Marker instance was created for. + * @param edge This is a half-edge, which is contained within the Mesh + * instance this Marker instance was created for. + * + * TODO: Error handling? At the moment: + * The method fails and terminates the program if either face or edge + * are not within the Mesh instance, this Marker instance was created for, + * if compiled wihtout the NDEBUG flag. Otherwise, behaviour is undefined. + * + * @returns Whether the given half-edge is marked with respect to the + * given face. + */ + bool isMarked( const typename TMesh::Face& face, + const typename TMesh::HalfEdge& edge) const; + + /** + * @param face A face which is contained within the Mesh instance this + * marker is created for. + * + * TODO: Error handling? At the moment: + * The method fails and terminates the program if either face or edge + * are not within the Mesh instance, this Marker instance was created for, + * if compiled wihtout the NDEBUG flag. Otherwise, behaviour is undefined. + * + * @returns The number of edges that are marked with respect to this + * face. + */ + unsigned int getNumberOfMarkedEdges( + const typename TMesh::Face& face ) const; + + private: + const TMesh& mesh_; + std::vector< bool > marked_; + + /** + * @param mesh + * + * Creates and initializes a Marker instance which has enough space to + * mark any number of edges. + */ + Marker( const TMesh& mesh ); + + /** + * @param face This is a face, which is contained within the Mesh + * instance this Marker instance was created for. + * @param edge This is a half-edge, which is contained within the Mesh + * instance this Marker instance was created for. + * + * TODO: Error handling? At the moment: + * The method fails and terminates the program if either face or edge + * are not within the Mesh instance, this Marker instance was created for, + * if compiled wihtout the NDEBUG flag. Otherwise, behaviour is undefined. + * + * This method marks the given edge with respect to the given face. + * Subsequent class to the method isMarked with the same face and the same + * edge will return true. + */ + void mark( const typename TMesh::Face& face, + const typename TMesh::HalfEdge& edge); + + /** + * @param face This is a face, which is contained within the Mesh + * instance this Marker instance was created for. + * @param edge This is a half-edge, which is contained within the Mesh + * instance this Marker instance was created for. + * + * TODO: Error handling? At the moment: + * The method fails and terminates the program if either face or edge + * are not within the Mesh instance, this Marker instance was created for, + * if compiled wihtout the NDEBUG flag. Otherwise, behaviour is undefined. + * + * @returns The index of the given face/edge combination with respect to + * the boolean vector, the marker flags are stored within. + */ + geoid_t getIndex( const typename TMesh::Face& face, + const typename TMesh::HalfEdge& edge) const; + }; + + namespace priv + { + template < class TMesh > + class FaceClosureDefaultPolicy__; + } + + template < class TMesh, class FaceClosurePolicy > class MarkerBuilder; + + template < class TMesh, class FaceClosurePolicy = + priv::FaceClosureDefaultPolicy__ > + class MarkerBuilder + { + public: + /** + * @param mesh + * + * Creates a new MeshBuilder instance with respect to the given Mesh + * instance. + */ + MarkerBuilder( const TMesh& mesh, + unsigned int maximumNumberOfHangingNodes = 0 ); + + /** + * @param marker + * + * Create a new MeshBuilder instance with respect to the same Mesh + * instance the given Marker instance refers to. Also marks all the + * face/edge combinations, which are marked within the given Marker + * instance. + */ + MarkerBuilder( const Marker< TMesh >& marker ); + + /** + * @param face This is a face, which is contained within the Mesh + * instance this Marker instance was created for. + * @param edge This is a half-edge, which is contained within the Mesh + * instance this Marker instance was created for. + * + * Marks the given face/edge combination within the Marker instance. + */ + void mark( const typename TMesh::Face& face, + const typename TMesh::HalfEdge& edge ); + + bool isMarked( const typename TMesh::Face& face, + const typename TMesh::HalfEdge& edge ); + + /** + * @returns Delivers the Marker instance that is built by this class. + */ + Marker< TMesh > deliver( unsigned int maximumNumberOfHangingNodes ); + Marker< TMesh > deliver(); + + private: + /** + * @param maximumNumberOfHangingNodes The maximum number of hanging nodes + * that is allowed within a given mesh. + * + * This function computes the closure of the marking, i.e. it ensures the + * following conditions: + * + * For triangles: + * If some edge is marked within the triangle, the longest edge is + * marked as well. + * + * Between faces: + * If two faces F1, F2 have a common edge E and E is marked with + * respect F1 and bisecting E would result in more than + * maximumNumberOfHangingNodes hanging nodes, the edge E is also + * marked with respect to the face F2. + * + * @returns A new Marker instance that satisfies the constraints + * mentioned above. + */ + void createClosure( + unsigned int maximumNumberOfHangingNodes ); + + void closeFace( const typename TMesh::Face&, + unsigned int maximumNumberOfHangingNodes ); + + Marker< TMesh > marker_; + std::vector< bool > closedFaces_; + unsigned int maximumNumberOfHangingNodes_; + }; + +#if 0 + namespace priv + { + template < class TMesh > + class FaceClosureDefaultPolicy__ + { + typedef MarkerBuilder< TMesh, FaceClosureDefaultPolicy__ > + MarkerBuilderClass; + HILBERT3D_DISPATCH_PARAMETERS_2( + FaceClosureDefaultPolicy__, + const Marker< TMesh >&, marker_, + MarkerBuilderClass*, builder_); + + public: + bool exec( const typename TMesh::Prop::Triangle& face ); + bool exec( const typename TMesh::Face& face ); + }; + } +#endif +} #endif diff --git a/src/bem3d/src/boundary_mesh/Marker_fwd.hpp b/src/bem3d/src/boundary_mesh/Marker_fwd.hpp deleted file mode 100644 index 6be62d2..0000000 --- a/src/bem3d/src/boundary_mesh/Marker_fwd.hpp +++ /dev/null @@ -1,144 +0,0 @@ -#ifndef HILBERT3D_BOUNDARY_MESH_MARKER_FWD_HPP_GUARD_ -#define HILBERT3D_BOUNDARY_MESH_MARKER_FWD_HPP_GUARD_ - -#include - -namespace boundary_mesh -{ - /** - * The Marker class contains state information about a specific Mesh instance. - * It stores whether a certain edge is marked with respect to a certain face. - * This class was written for and is extensivly used within the adaptive - * refinement algorithms. There, we also provide functions to build the - * closure of a marking with respect to certain shape regularity constraints. - * - * In order to follow our design principle of objects being "immutable after - * construction", we provide the MarkerBuilder class which exposes methods - * to build or instantize a Marker instance step by step. - */ - template < class TMesh > - class Marker - { - template friend class MarkerBuilder; // MK changed this: XXX: why do i have to write typename, and not class TMesh? - - public: - /** - * @param face This is a face, which is contained within the Mesh - * instance this Marker instance was created for. - * @param edge This is a half-edge, which is contained within the Mesh - * instance this Marker instance was created for. - * - * TODO: Error handling? At the moment: - * The method fails and terminates the program if either face or edge - * are not within the Mesh instance, this Marker instance was created for, - * if compiled wihtout the NDEBUG flag. Otherwise, behaviour is undefined. - * - * @returns Whether the given half-edge is marked with respect to the - * given face. - */ - bool isMarked( const typename TMesh::Face& face, - const typename TMesh::HalfEdge& edge) const; - - private: - const TMesh& mesh_; - std::vector< bool > marked_; - - /** - * @param mesh - * - * Creates and initializes a Marker instance which has enough space to - * mark any number of edges. - */ - Marker( const TMesh& mesh ); - - /** - * @param marker - * - * Creates a copy of the given Marker instance. - */ - Marker( const Marker& marker ); - - /** - * @param face This is a face, which is contained within the Mesh - * instance this Marker instance was created for. - * @param edge This is a half-edge, which is contained within the Mesh - * instance this Marker instance was created for. - * - * TODO: Error handling? At the moment: - * The method fails and terminates the program if either face or edge - * are not within the Mesh instance, this Marker instance was created for, - * if compiled wihtout the NDEBUG flag. Otherwise, behaviour is undefined. - * - * This method marks the given edge with respect to the given face. - * Subsequent class to the method isMarked with the same face and the same - * edge will return true. - */ - void mark( const typename TMesh::Face& face, - const typename TMesh::HalfEdge& edge); - - /** - * @param face This is a face, which is contained within the Mesh - * instance this Marker instance was created for. - * @param edge This is a half-edge, which is contained within the Mesh - * instance this Marker instance was created for. - * - * TODO: Error handling? At the moment: - * The method fails and terminates the program if either face or edge - * are not within the Mesh instance, this Marker instance was created for, - * if compiled wihtout the NDEBUG flag. Otherwise, behaviour is undefined. - * - * @returns The index of the given face/edge combination with respect to - * the boolean vector, the marker flags are stored within. - */ - geoid_t getIndex( const typename TMesh::Face& face, - const typename TMesh::HalfEdge& edge) const; - }; - - /** - * TODO: Write documentation for MarkerBuilder class. - */ - template < class TMesh > - class MarkerBuilder - { - public: - /** - * @param mesh - * - * Creates a new MeshBuilder instance with respect to the given Mesh - * instance. - */ - MarkerBuilder( const TMesh& mesh ); - - /** - * @param marker - * - * Create a new MeshBuilder instance with respect to the same Mesh - * instance the given Marker instance refers to. Also marks all the - * face/edge combinations, which are marked within the given Marker - * instance. - */ - MarkerBuilder( const Marker< TMesh >& marker ); - - /** - * @param face This is a face, which is contained within the Mesh - * instance this Marker instance was created for. - * @param edge This is a half-edge, which is contained within the Mesh - * instance this Marker instance was created for. - * - * Marks the given face/edge combination within the Marker instance. - */ - void mark( const typename TMesh::Face& face, - const typename TMesh::HalfEdge& edge ); - - /** - * @returns Delivers the Marker instance that is built by this class. - */ - Marker< TMesh > deliver(); - - private: - Marker< TMesh > marker_; - }; -} - -#endif - diff --git a/src/bem3d/src/boundary_mesh/Marker_tmpl.cpp b/src/bem3d/src/boundary_mesh/Marker_tmpl.cpp index c7e6efc..061dcc6 100644 --- a/src/bem3d/src/boundary_mesh/Marker_tmpl.cpp +++ b/src/bem3d/src/boundary_mesh/Marker_tmpl.cpp @@ -1,4 +1,7 @@ -#include "Marker_fwd.hpp" +#ifndef HILBERT3D_BOUNDARY_MESH_MARKER_TMPL_CPP_GUARD_ +#define HILBERT3D_BOUNDARY_MESH_MARKER_TMPL_CPP_GUARD_ + +#include "Marker_tmpl.hpp" #include namespace boundary_mesh @@ -13,6 +16,24 @@ namespace boundary_mesh return marked_[ idx ]; } + template < class TMesh > + unsigned int + Marker< TMesh >::getNumberOfMarkedEdges( + const typename TMesh::Face& face) const + { + unsigned int markedEdges = 0; + for (typename TMesh::Face::ConstEdgeIterator edgeIt = face.begin_e(); + edgeIt != face.end_e(); ++edgeIt) + { + if ( isMarked(face, *edgeIt) == true ) + { + markedEdges += 1; + } + } + + return markedEdges; + } + template < class TMesh > Marker< TMesh >::Marker( const TMesh& mesh ) : mesh_(mesh), @@ -44,29 +65,191 @@ namespace boundary_mesh + face.getLocalEdgeId( edge ); } - template < class TMesh > - MarkerBuilder< TMesh >::MarkerBuilder( const TMesh& mesh ) - : marker_( Marker< TMesh >(mesh) ) + template < class TMesh, class FaceClosurePolicy > + MarkerBuilder< TMesh, FaceClosurePolicy >::MarkerBuilder( + const TMesh& mesh, unsigned int maximumNumberOfHangingNodes ) + : marker_( Marker< TMesh >(mesh) ), + closedFaces_( std::vector< bool >(mesh.getNumberOfFaces(), false) ), + maximumNumberOfHangingNodes_( maximumNumberOfHangingNodes ) {} - template < class TMesh > - MarkerBuilder< TMesh >::MarkerBuilder( const Marker< TMesh >& marker ) - : marker_( marker ) + template < class TMesh, class FaceClosurePolicy > + MarkerBuilder< TMesh, FaceClosurePolicy >::MarkerBuilder( + const Marker< TMesh >& marker ) + : marker_( marker ), + closedFaces_( std::vector< bool >( + marker.mesh_.getNumberOfFaces(), false) ) {} - template < class TMesh > + template < class TMesh, class FaceClosurePolicy > void - MarkerBuilder< TMesh >::mark( const typename TMesh::Face& face, + MarkerBuilder< TMesh, FaceClosurePolicy >::mark( + const typename TMesh::Face& face, const typename TMesh::HalfEdge& edge ) { marker_.mark( face, edge ); } - template < class TMesh > + template < class TMesh, class FaceClosurePolicy > + bool + MarkerBuilder< TMesh, FaceClosurePolicy >::isMarked( + const typename TMesh::Face& face, + const typename TMesh::HalfEdge& edge ) + { + return marker_.isMarked( face, edge ); + } + + template < class TMesh, class FaceClosurePolicy > Marker< TMesh > - MarkerBuilder< TMesh >::deliver() + MarkerBuilder< TMesh, FaceClosurePolicy >::deliver( + unsigned int maximumNumberOfHangingNodes ) { + createClosure( maximumNumberOfHangingNodes ); return marker_; } + + template < class TMesh, class FaceClosurePolicy > + Marker< TMesh > + MarkerBuilder< TMesh, FaceClosurePolicy >::deliver() + { + createClosure( maximumNumberOfHangingNodes_ ); + return marker_; + } + + template < class TMesh, class FaceClosurePolicy > + void + MarkerBuilder< TMesh, FaceClosurePolicy >::createClosure( + unsigned int maximumNumberOfHangingNodes) + { + typedef SingleFaceDispatcher< FaceClosurePolicy, TMesh, bool > + CreateClosureForSpecificFace; + + typename CreateClosureForSpecificFace::PARAM param( marker_, this ); + + for (typename TMesh::ConstFaceIterator + faceIt = marker_.mesh_.begin_f(); + faceIt != marker_.mesh_.end_f(); ++faceIt) + { + if ( CreateClosureForSpecificFace::Exec( *faceIt, param ) == true ) + { // CreateClosureForSpecificFace marked at least one edge: + // As a result, we need to check if we added too many hanging + // nodes to this face. + for (typename TMesh::Face::ConstFaceIterator neighbourIt = + faceIt->begin_f(); neighbourIt != faceIt->end_f(); ++neighbourIt) + { + if ( closedFaces_[marker_.mesh_.getFaceId( *neighbourIt )] == true ) + { + closeFace( *neighbourIt, maximumNumberOfHangingNodes ); + } + } + } + + closeFace( *faceIt, maximumNumberOfHangingNodes ); + } + } + + template < class TMesh, class FaceClosurePolicy > + void + MarkerBuilder< TMesh, FaceClosurePolicy >::closeFace( + const typename TMesh::Face& face, + unsigned int maximumNumberOfHangingNodes ) + { + for (typename TMesh::Face::ConstEdgeIterator edgeIt = face.begin_e(); + edgeIt != face.end_e(); ++edgeIt) + { + if ( edgeIt->getOppositeEdge() != 0 ) + { + unsigned int numberOfOppositeHangingNodes = 0; + const typename TMesh::HalfEdge* currentOppositeEdge = + edgeIt->getOppositeEdge(); + + do { + numberOfOppositeHangingNodes += 1; + if (marker_.isMarked( face, *edgeIt )) + { + numberOfOppositeHangingNodes += 1; + } + } while ((currentOppositeEdge = + currentOppositeEdge->getHangingEdge()) != 0); + + numberOfOppositeHangingNodes -= 1; + + if ( numberOfOppositeHangingNodes > maximumNumberOfHangingNodes ) + { + mark( face, *edgeIt ); + } + } + } + + closedFaces_[ marker_.mesh_.getFaceId(face) ] = true; + } + + namespace priv + { + template < class TMesh > + class FaceClosureDefaultPolicy__ + { + typedef MarkerBuilder< TMesh, FaceClosureDefaultPolicy__ > + MarkerBuilderClass; + + HILBERT3D_DISPATCH_PARAMETERS_2( + FaceClosureDefaultPolicy__, bool, + const Marker< TMesh >&, marker_, + MarkerBuilderClass*, builder_); + + HILBERT3D_SINGLE_DISPATCH_IMPLEMENTATION_FOR( TMesh::Prop::Triangle ) + { + if ( builder_->isMarked(face, *(face.begin_e())) == false ) + { + for (typename TMesh::Face::ConstEdgeIterator + edgeIt = face.begin_e(); edgeIt != face.end_e(); ++edgeIt) + { + if ( builder_->isMarked(face, *edgeIt) == true ) + { + builder_->mark(face, *(face.begin_e())); + return true; + } + } + } + return false; + } + + HILBERT3D_SINGLE_DISPATCH_IMPLEMENTATION_FOR( TMesh::Face ) + { + return false; + } + }; + +#if 0 + bool + FaceClosureDefaultPolicy__< TMesh >::exec( + const typename TMesh::Prop::Triangle& face ) + { + if ( builder_->isMarked(face, *(face.begin_e())) == false ) + { + for (typename TMesh::Face::ConstEdgeIterator + edgeIt = face.begin_e(); edgeIt != face.end_e(); ++edgeIt) + { + if ( builder_->isMarked(face, *edgeIt) == true ) + { + builder_->mark(face, *(face.begin_e())); + return true; + } + } + } + return false; + } + + template < class TMesh > + bool + FaceClosureDefaultPolicy__< TMesh >::exec( + const typename TMesh::Face& face ) + { + return false; + } +#endif + } } +#endif + diff --git a/src/bem3d/src/boundary_mesh/Marker_tmpl.hpp b/src/bem3d/src/boundary_mesh/Marker_tmpl.hpp new file mode 100644 index 0000000..9ad078f --- /dev/null +++ b/src/bem3d/src/boundary_mesh/Marker_tmpl.hpp @@ -0,0 +1,8 @@ +#ifndef HILBERT3D_BOUNDARY_MESH_MARKER_TMPL_HPP_GUARD_ +#define HILBERT3D_BOUNDARY_MESH_MARKER_TMPL_HPP_GUARD_ + +#include "Marker.hpp" +#include "Marker_tmpl.cpp" + +#endif + diff --git a/src/bem3d/src/boundary_mesh/Mesh.cpp b/src/bem3d/src/boundary_mesh/Mesh.cpp index 4baa438..0bc2a5a 100644 --- a/src/bem3d/src/boundary_mesh/Mesh.cpp +++ b/src/bem3d/src/boundary_mesh/Mesh.cpp @@ -12,6 +12,7 @@ #include #include "exception/NoMatchingFaceType_tmpl.hpp" +#include "../generic/PtrCompare.hpp" namespace boundary_mesh { @@ -22,17 +23,28 @@ struct Mesh< TProp, TAlg >::data : numberOfFaces(0), numberOfVertices(0), numberOfHalfEdges(0), reference_counter(1) {} - ~data() + template < class TMesh > + typename boost::enable_if< + boost::is_pointer< typename TMesh::IntFace >, void >::type + cleanFaceTypeSpecificData() { - if ( boost::is_pointer< typename Mesh::IntFace >() ) + for (typename std::vector< typename Mesh::IntFace >::iterator + it = face.begin(); it != face.end(); ++it) { - for (typename std::vector< typename Mesh::IntFace >::iterator - it = face.begin(); it != face.end(); ++it) - { - delete *it; - } + delete *it; } } + template < class TMesh > + typename boost::disable_if< + boost::is_pointer< typename TMesh::IntFace >, void >::type + cleanFaceTypeSpecificData() + { + } + ~data() + { + cleanFaceTypeSpecificData< Mesh< TProp,TAlg > >(); + } + typename std::vector< typename Mesh::Vertex > vertex; typename std::vector< typename Mesh::IntFace > face; @@ -45,9 +57,6 @@ struct Mesh< TProp, TAlg >::data unsigned int reference_counter; }; -template < template < typename > class TProp, template < typename > class TAlg > -bool Mesh< TProp, TAlg >::initialized_ = false; - template < template < typename > class TProp, template < typename > class TAlg > Mesh< TProp, TAlg >::Mesh(const Mesh< TProp, TAlg >& copy) : d(copy.d) @@ -130,29 +139,35 @@ template < template < typename > class TProp, template < typename > class TAlg > Mesh< TProp, TAlg >::Mesh( const Size& sizeInfo ) : d(new Mesh< TProp, TAlg >::data()) { - initialize(); d->vertex.reserve( sizeInfo.vertices ); d->face.reserve( sizeInfo.faces ); d->edge.reserve( sizeInfo.edges ); } template < template < typename > class TProp, template < typename > class TAlg > -unsigned int +const typename Mesh< TProp, TAlg >::Vertex& Mesh< TProp, TAlg >::addVertex(const typename Mesh::UVertex& v) { assert(d->vertex.capacity() > d->numberOfVertices); - d->vertex.push_back(Vertex(v)); - return d->numberOfVertices++; + d->numberOfVertices += 1; + d->vertex.push_back(Mesh::Vertex(v)); + const Mesh::Vertex& createdVertex = d->vertex.back(); + return createdVertex; } template < template < typename > class TProp, template < typename > class TAlg > const typename Mesh< TProp, TAlg >::Face& -Mesh< TProp, TAlg >::addFace( std::vector< geoid_t > vertexIds ) +Mesh< TProp, TAlg >::addFace( + const typename std::vector< const typename Mesh::Vertex* >& protoVertices ) { - unsigned int numberOfVertices = vertexIds.size(); - assert( numberOfVertices >= 3 ); - std::vector< const typename Mesh::Vertex* > vertices; - vertices.reserve( vertexIds.size() ); + typename std::vector< typename Mesh::Vertex* > vertices(protoVertices.size()); + unsigned int numberOfVertices = vertices.size(); + assert( vertices.size() >= 3 ); + + for ( unsigned int i = 0; i < vertices.size(); ++i) + { + vertices[i] = &(d->vertex[ getVertexId(*(protoVertices[i])) ]); + } // Create all half-edges and store them within the d->edge vector. // Also determine the longest half-edge and assign a half-edge to each vertex. @@ -161,12 +176,10 @@ Mesh< TProp, TAlg >::addFace( std::vector< geoid_t > vertexIds ) for (unsigned int i = 0; i < numberOfVertices; ++i) { - typename Mesh::Vertex& startVertex = d->vertex[ vertexIds[ i ] ]; - typename Mesh::Vertex& endVertex = - d->vertex[ vertexIds[ (i+1) % numberOfVertices ] ]; - vertices.push_back( &startVertex ); + typename Mesh::Vertex& startVertex = *(vertices[ i ]); + typename Mesh::Vertex& endVertex = *(vertices[ (i+1) % numberOfVertices ]); - d->edge.push_back( Mesh::HalfEdge( startVertex, endVertex ) ); + d->edge.push_back( Mesh::HalfEdge(startVertex, endVertex) ); typename Mesh::HalfEdge& currentHalfEdge = d->edge.back(); double currentHalfEdgeLength = (currentHalfEdge.getEndVertex() - @@ -197,9 +210,19 @@ Mesh< TProp, TAlg >::addFace( std::vector< geoid_t > vertexIds ) // Create the face by using the mesh's face-factory which does the // type checking magic. // The reference edge of the face is set to the longest half-edge: + assert( longestHalfEdge != 0 ); typename Mesh< TProp, TAlg >::Face& currentFace = Mesh< TProp, TAlg >::factorizeFace< Mesh< TProp, TAlg >::FaceTypes >( - vertices, longestHalfEdge ); + protoVertices, longestHalfEdge ); + + Mesh::HalfEdge* nextHalfEdge = longestHalfEdge; + assert( nextHalfEdge != 0 ); + do + { + nextHalfEdge->setFace( currentFace ); + assert( nextHalfEdge->getNextEdge() != 0 ); + nextHalfEdge = nextHalfEdge->getNextEdge(); + } while (nextHalfEdge != longestHalfEdge); // Modify the counters for the number of faces and half-edges: return currentFace; @@ -449,7 +472,7 @@ template < template < typename > class TProp, template < typename > class TAlg > unsigned int Mesh< TProp, TAlg >::getVertexId(const typename Mesh::Vertex& v) const { - assert( d->edge.size() > 0 ); + assert( d->vertex.size() > 0 ); long offset = static_cast(&v - &(d->vertex.front())); assert(offset >= 0 && offset < d->numberOfVertices); return offset; @@ -466,12 +489,65 @@ Mesh< TProp, TAlg >::getEdgeId(const typename Mesh::HalfEdge& e) const } template < template < typename > class TProp, template < typename > class TAlg > -unsigned int +geoid_t Mesh< TProp, TAlg >::getFaceId(const typename Mesh::Face& f) const +{ + return getFaceIdImpl< Mesh >(f); +} + +template < template < typename > class TProp, template < typename > class TAlg > +template < class TMesh > +typename boost::enable_if< + boost::is_pointer< typename TMesh::IntFace >, geoid_t >::type +Mesh< TProp, TAlg >::getFaceIdImpl(const typename Mesh::Face& f) const { return f.getId(); } +template < template < typename > class TProp, template < typename > class TAlg > +template < class TMesh > +typename boost::disable_if< + boost::is_pointer< typename TMesh::IntFace >, geoid_t >::type +Mesh< TProp, TAlg >::getFaceIdImpl(const typename Mesh::Face& f) const +{ + assert( d->face.size() > 0 ); + long offset = static_cast(&f - &(d->face.front())); + assert(offset >= 0 && offset < d->numberOfFaces); + return offset; +} + +template < template < typename > class TProp, template < typename > class TAlg > +bool +Mesh< TProp, TAlg >::operator==(const Mesh& rhs) const +{ + using namespace generic; + + const Mesh& lhs = *this; + + typedef std::set< const Vertex*, PtrObjectLess > VertexSet; + typedef std::set< const Face*, PtrObjectLess > FaceSet; + + VertexSet lhsVertices, rhsVertices; + std::for_each( lhs.begin_v(), lhs.end_v(), + SetInsertFunctor< VertexSet, Vertex >(&lhsVertices) ); + std::for_each( rhs.begin_v(), rhs.end_v(), + SetInsertFunctor< VertexSet, Vertex >(&rhsVertices) ); + + if (std::equal(lhsVertices.begin(), lhsVertices.end(), + rhsVertices.begin(), PtrObjectEqual< Vertex >()) == false) + { + return false; + } + + FaceSet lhsFaces, rhsFaces; + std::for_each( lhs.begin_f(), lhs.end_f(), + SetInsertFunctor< FaceSet, Face >(&lhsFaces)); + std::for_each( rhs.begin_f(), rhs.end_f(), + SetInsertFunctor< FaceSet, Face >(&rhsFaces)); + + return std::equal(lhsFaces.begin(), lhsFaces.end(), + rhsFaces.begin(), PtrObjectEqual< Face >()); +} template < template < typename > class TProp, template < typename > class TAlg > Mesh< TProp, TAlg >::ConstFaceIterator::ConstFaceIterator( @@ -479,14 +555,12 @@ Mesh< TProp, TAlg >::ConstFaceIterator::ConstFaceIterator( : vectorIterator_(iterator) {} - template < template < typename > class TProp, template < typename > class TAlg > Mesh< TProp, TAlg >::ConstFaceIterator::ConstFaceIterator( const ConstFaceIterator& copy) : vectorIterator_( copy.vectorIterator_ ) {} - template < template < typename > class TProp, template < typename > class TAlg > bool Mesh< TProp, TAlg >::ConstFaceIterator::operator==( @@ -512,30 +586,36 @@ Mesh< TProp, TAlg >::ConstFaceIterator::operator++() } template < template < typename > class TProp, template < typename > class TAlg > -const typename Mesh< TProp, TAlg >::Face& -Mesh< TProp, TAlg >::ConstFaceIterator::operator*() const +template < class TMesh > +typename boost::enable_if< boost::is_pointer< typename TMesh::IntFace >, + const typename Mesh< TProp, TAlg >::Face& >::type +Mesh< TProp, TAlg >::ConstFaceIterator::starOperatorImpl() const { - // XXX: The case that IntFace is not a pointer is missing: return **vectorIterator_; } template < template < typename > class TProp, template < typename > class TAlg > -const typename Mesh< TProp, TAlg >::Face* -Mesh< TProp, TAlg >::ConstFaceIterator::operator->() const +template < class TMesh > +typename boost::disable_if< boost::is_pointer< typename TMesh::IntFace >, +const typename Mesh< TProp, TAlg >::Face& >::type +Mesh< TProp, TAlg >::ConstFaceIterator::starOperatorImpl() const { - // XXX: The case that IntFace is not a pointer is missing: return *vectorIterator_; } template < template < typename > class TProp, template < typename > class TAlg > -void Mesh< TProp, TAlg >::initialize() +const typename Mesh< TProp, TAlg >::Face& +Mesh< TProp, TAlg >::ConstFaceIterator::operator*() const { - if ( initialized_ == false ) - { - initialized_ = true; - } + return starOperatorImpl< Mesh >();; } +template < template < typename > class TProp, template < typename > class TAlg > +const typename Mesh< TProp, TAlg >::Face* +Mesh< TProp, TAlg >::ConstFaceIterator::operator->() const +{ + return &(starOperatorImpl< Mesh >()); +} } #endif diff --git a/src/bem3d/src/boundary_mesh/Mesh.hpp b/src/bem3d/src/boundary_mesh/Mesh.hpp index dad7d6d..194c51d 100644 --- a/src/bem3d/src/boundary_mesh/Mesh.hpp +++ b/src/bem3d/src/boundary_mesh/Mesh.hpp @@ -130,10 +130,22 @@ namespace boundary_mesh const typename Mesh::Face * operator->() const; private: + template < class TMesh > + typename boost::enable_if< boost::is_pointer< typename TMesh::IntFace >, + const typename Mesh< TProp, TAlg >::Face& >::type + starOperatorImpl() const; + + template < class TMesh > + typename boost::disable_if< boost::is_pointer< typename TMesh::IntFace >, + const typename Mesh< TProp, TAlg >::Face& >::type + starOperatorImpl() const; + typename std::vector< typename Mesh::IntFace >::const_iterator vectorIterator_; }; + Mesh(); + /** * @fn Mesh(const Mesh& copy) * @@ -266,15 +278,31 @@ namespace boundary_mesh */ Size getSize() const; + /** + * @fn bool operator==(const TMesh& rhs) const + * @brief Compares two meshes for equality. + * + * This method performs an expensive, but thourough check to determine + * whether two meshes are equal. Two meshes are considered equal if they + * contain the same vertices and faces but not necessarily in the same + * order. + * + * This is an O(N*log(N)) operation where N is the maximum of the number + * of vertices and the number of faces. Its used mostly for testing. + */ + bool operator==(const Mesh& rhs) const; + private: // The following part of the interface is only used by the // MeshBuilder class. The MeshBuilder class is the only way // to construct Mesh instances. - Mesh(); Mesh( const Size& sizeInfo ); - geoid_t addVertex(const typename Mesh::UVertex& v); + const typename Mesh::Vertex& + addVertex(const typename Mesh::UVertex& v); + const typename Mesh::Face& addFace( - std::vector< geoid_t > vertexIds ); + const typename std::vector< const typename Mesh::Vertex* >& vertices); + void buildMetaData( void ); // The following methods' main purpose is to abstract the actual @@ -323,12 +351,19 @@ namespace boundary_mesh typename TMesh::Face& >::type getFaceRefById( geoid_t faceId ) const; + template < class TMesh > + typename boost::enable_if< + boost::is_pointer< typename TMesh::IntFace >, geoid_t >::type + getFaceIdImpl(const typename Mesh::Face& f) const; + + template < class TMesh > + typename boost::disable_if< + boost::is_pointer< typename TMesh::IntFace >, geoid_t >::type + getFaceIdImpl(const typename Mesh::Face& f) const; + // For various reasons this class uses the Pimpl idiom. struct data; data* d; - - static void initialize(); - static bool initialized_; }; } diff --git a/src/bem3d/src/boundary_mesh/MeshBuilder.hpp b/src/bem3d/src/boundary_mesh/MeshBuilder.hpp index 5af08ce..1ac0bd7 100644 --- a/src/bem3d/src/boundary_mesh/MeshBuilder.hpp +++ b/src/bem3d/src/boundary_mesh/MeshBuilder.hpp @@ -2,7 +2,7 @@ #define HILBERT3D_BOUNDARY_MESH_MESH_BUILDER_HPP_GUARD_ #include "types.hpp" -#include "Mesh.hpp" +#include namespace boundary_mesh { @@ -11,8 +11,11 @@ namespace boundary_mesh { public: MeshBuilder( const typename TMesh::Size& size ); - geoid_t addVertex( const typename TMesh::UVertex& v ); - const typename TMesh::Face& addFace( std::vector< geoid_t > vertexIds ); + const typename TMesh::Vertex& addVertex( + const typename TMesh::UVertex& v ); + const typename TMesh::Face& addFace( + const typename std::vector< const typename TMesh::Vertex* >& vertices); + unsigned int getFaceId( const typename TMesh::Face& face ) const; TMesh deliver(); private: diff --git a/src/bem3d/src/boundary_mesh/MeshBuilder_tmpl.cpp b/src/bem3d/src/boundary_mesh/MeshBuilder_tmpl.cpp index f12cbe1..9493544 100644 --- a/src/bem3d/src/boundary_mesh/MeshBuilder_tmpl.cpp +++ b/src/bem3d/src/boundary_mesh/MeshBuilder_tmpl.cpp @@ -11,11 +11,10 @@ namespace boundary_mesh MeshBuilder< TMesh >::MeshBuilder( const typename TMesh::Size& size ) : mesh_( size ) { - TMesh::initialize(); } template < class TMesh > - geoid_t + const typename TMesh::Vertex& MeshBuilder< TMesh >::addVertex( const typename TMesh::UVertex& v ) { return mesh_.addVertex( v ); @@ -23,9 +22,17 @@ namespace boundary_mesh template < class TMesh > const typename TMesh::Face& - MeshBuilder< TMesh >::addFace( std::vector< geoid_t > vertexIds ) + MeshBuilder< TMesh >::addFace( + const typename std::vector< const typename TMesh::Vertex* >& vertices ) { - return mesh_.addFace( vertexIds ); + return mesh_.addFace( vertices ); + } + + template < class TMesh > + unsigned int + MeshBuilder< TMesh >::getFaceId( const typename TMesh::Face& face ) const + { + return mesh_.getFaceId( face ); } template < class TMesh > diff --git a/src/bem3d/src/boundary_mesh/RefinementData.hpp b/src/bem3d/src/boundary_mesh/RefinementData.hpp new file mode 100644 index 0000000..a9149d6 --- /dev/null +++ b/src/bem3d/src/boundary_mesh/RefinementData.hpp @@ -0,0 +1,152 @@ +#ifndef BOUNDARY_MESH_REFINEMENTDATA_HPP_GUARD_ +#define BOUNDARY_MESH_REFINEMENTDATA_HPP_GUARD_ + +#include "MeshBuilder.hpp" + +#include +#include +#include + +namespace boundary_mesh { + enum RefinementDataRequest + { + RefinementDataRequest_RequireNone = 0, + RefinementDataRequest_RequireFather2Son = 1, + RefinementDataRequest_RequireSon2Father = 2, + RefinementDataRequest_RequireBoth = 3, + }; + + typedef enum RefinementDataRequest RefinementDataRequest; + + template < class TMesh > + class Father2Son + { + template friend class RefinementDataBuilder; + template friend class RefinementData; + + public: + class ConstFaceIterator + : public std::list< + const typename TMesh::Face* >::const_iterator + { + public: + ConstFaceIterator( const typename std::list< + const typename TMesh::Face* >::const_iterator& copy ); + const typename TMesh::Face& operator*() const; + const typename TMesh::Face* operator->() const; + }; + + ~Father2Son(); + ConstFaceIterator begin(const typename TMesh::Face& face) const; + ConstFaceIterator end(const typename TMesh::Face& face) const; + + private: + // It is forbidden to create an empty Father2Son container or to + // copy it using either the copy constructor or the assignement operator. + // To detect these errors early, the methods are declared here but not + // defined anywhere: + Father2Son(); + Father2Son< TMesh >& operator=(const Father2Son< TMesh >&); + Father2Son(const Father2Son< TMesh >&); + + Father2Son(const TMesh& fatherMesh); + void addRelation( unsigned int fatherId, + const typename TMesh::Face& son ); + + const TMesh& fatherMesh_; + std::vector< std::list< const typename TMesh::Face* > > + relations_; + unsigned int referenceCounter_; + }; + + template < class TMesh > + class Son2Father + { + template friend class RefinementDataBuilder; + template friend class RefinementData; + + public: + ~Son2Father(); + const typename TMesh::Face& + getFather( const typename TMesh::Face& son ) const; + + private: + // It is forbidden to create an empty Son2Father container or to + // copy it using either the copy constructor or the assignement operator. + // To detect these errors early, the methods are declared here but not + // defined anywhere: + Son2Father(); + Son2Father< TMesh >& operator=(const Son2Father< TMesh >&); + Son2Father(const Son2Father< TMesh >&); + + Son2Father(unsigned int sonFaces); + void addRelation( const typename TMesh::Face& father, + unsigned int sonId ); + + const TMesh* sonMesh_; + std::vector< const typename TMesh::Face* > relations_; + unsigned int referenceCounter_; + }; + + template < class TMesh, RefinementDataRequest refDataReq > + class RefinementData + { + template friend class RefinementDataBuilder; + + public: + RefinementData( const RefinementData& rhs ); + RefinementData& operator=( const RefinementData& rhs ); + ~RefinementData(); + + const TMesh& getFatherMesh() const; + const TMesh& getSonMesh() const; + + typename boost::enable_if_c< + (refDataReq & RefinementDataRequest_RequireFather2Son) != 0, + const Father2Son< TMesh >& >::type + father2son() const; + + typename boost::enable_if_c< + (refDataReq & RefinementDataRequest_RequireSon2Father) != 0, + const Son2Father< TMesh >& >::type + son2father() const; + + operator TMesh() const; + + private: + RefinementData( const TMesh& fatherMesh_ ); + + TMesh fatherMesh_; + TMesh sonMesh_; + Father2Son< TMesh >* father2son_; + Son2Father< TMesh >* son2father_; + }; + + template < class TMesh, RefinementDataRequest refDataReq > + class RefinementDataBuilder + { + public: + RefinementDataBuilder( const TMesh& father, + const typename TMesh::Size& sonMeshSize ); + + const typename TMesh::Vertex& + addVertex( + const typename TMesh::UVertex& vertex ); + + void + addRelation( + const typename TMesh::Face& father, + const typename std::vector< const typename TMesh::Vertex* >& + sonVertices ); + + RefinementData< TMesh, refDataReq > + deliver(); + + private: + RefinementData< TMesh, refDataReq > refinement_; + MeshBuilder< TMesh > meshBuilder_; + }; +} + +#endif + diff --git a/src/bem3d/src/boundary_mesh/RefinementData_tmpl.cpp b/src/bem3d/src/boundary_mesh/RefinementData_tmpl.cpp new file mode 100644 index 0000000..cba091b --- /dev/null +++ b/src/bem3d/src/boundary_mesh/RefinementData_tmpl.cpp @@ -0,0 +1,291 @@ +#ifndef BOUNDARY_MESH_REFINEMENTDATA_TMPL_CPP_GUARD_ +#define BOUNDARY_MESH_REFINEMENTDATA_TMPL_CPP_GUARD_ + +#include "types.hpp" +#include "RefinementData.hpp" +#include + +namespace boundary_mesh { + template < class TMesh > + Father2Son< TMesh >::~Father2Son() + { + assert( referenceCounter_ == 0 ); + } + + template < class TMesh > + Father2Son< TMesh >::ConstFaceIterator::ConstFaceIterator( + const typename std::list< + const typename TMesh::Face* >::const_iterator& copy ) + : std::list< const typename TMesh::Face* >::const_iterator(copy) + { + } + + template < class TMesh > + const typename TMesh::Face& + Father2Son< TMesh >::ConstFaceIterator::operator*() const + { + return *(std::list< const typename TMesh::Face* > + ::const_iterator::operator*()); + } + + template < class TMesh > + const typename TMesh::Face* + Father2Son< TMesh >::ConstFaceIterator::operator->() const + { + return std::list< const typename TMesh::Face* > + ::const_iterator::operator*(); + } + + template < class TMesh > + typename Father2Son< TMesh >::ConstFaceIterator + Father2Son< TMesh >::begin(const typename TMesh::Face& face) const + { + geoid_t faceId = fatherMesh_.getFaceId( face ); + assert( faceId >= 0 && faceId < relations_.size() ); + return relations_[faceId].begin(); + } + + template < class TMesh > + typename Father2Son< TMesh >::ConstFaceIterator + Father2Son< TMesh >::end(const typename TMesh::Face& face) const + { + geoid_t faceId = fatherMesh_.getFaceId( face ); + assert( faceId >= 0 && faceId < relations_.size() ); + return relations_[faceId].end(); + } + + template < class TMesh > + Father2Son< TMesh >::Father2Son( const TMesh& fatherMesh ) + : fatherMesh_(fatherMesh), relations_( + std::vector< std::list >( + fatherMesh.getNumberOfFaces()) ), + referenceCounter_(1) + { + } + + template < class TMesh > + void + Father2Son< TMesh >::addRelation( + unsigned int fatherId, + const typename TMesh::Face& son) + { + relations_[ fatherId ].push_back( &son ); + } + + template < class TMesh > + Son2Father< TMesh >::~Son2Father() + { + assert( referenceCounter_ == 0 ); + } + + template < class TMesh > + const typename TMesh::Face& + Son2Father< TMesh >::getFather( + const typename TMesh::Face& son ) const + { + return getFather( sonMesh_.getFaceId( son ) ); + } + + template < class TMesh > + Son2Father< TMesh >::Son2Father( unsigned int sonFaces ) + : sonMesh_( 0 ), + relations_( std::vector< const typename TMesh::Face* >(sonFaces) ), + referenceCounter_( 1 ) + { + } + + template < class TMesh > + void + Son2Father< TMesh >::addRelation( + const typename TMesh::Face& father, + unsigned int sonId ) + { + assert( sonId < relations_.size() ); + relations_[ sonId ] = &father; + } + + template < class TMesh, RefinementDataRequest refDataReq > + RefinementData< TMesh, refDataReq >::RefinementData( + const TMesh& fatherMesh ) + : fatherMesh_(fatherMesh), sonMesh_(fatherMesh), + father2son_(0), son2father_(0) + { + } + + template < class TMesh, RefinementDataRequest refDataReq > + RefinementData< TMesh, refDataReq >::RefinementData( + const RefinementData< TMesh, refDataReq >& rhs ) + : fatherMesh_( rhs.fatherMesh_ ), sonMesh_( rhs.sonMesh_ ), + father2son_( rhs.father2son_ ), son2father_( rhs.son2father_ ) + { + if ( father2son_ != 0 ) + { + father2son_->referenceCounter_ += 1; + } + if ( son2father_ != 0 ) + { + son2father_->referenceCounter_ += 1; + } + } + + template < class TMesh, RefinementDataRequest refDataReq > + RefinementData< TMesh, refDataReq >& + RefinementData< TMesh, refDataReq >::operator=( + const RefinementData< TMesh, refDataReq >& rhs) + { + if ( father2son_ != 0 ) + { + assert( father2son_->referenceCounter_ > 0 ); + father2son_->referenceCounter_ -= 1; + if ( father2son_->referenceCounter_ == 0 ) + { + delete father2son_; + } + } + if ( son2father_ != 0 ) + { + assert( son2father_->referenceCounter_ > 0 ); + son2father_->referenceCounter_ -= 1; + if ( son2father_->referenceCounter_ == 0 ) + { + delete son2father_; + } + } + + fatherMesh_ = rhs.fatherMesh_; + sonMesh_ = rhs.sonMesh_; + father2son_ = rhs.father2son_; + son2father_ = rhs.son2father_; + + return *this; + } + + template < class TMesh, RefinementDataRequest refDataReq > + RefinementData< TMesh, refDataReq >::~RefinementData() + { + if (father2son_ != 0) + { + assert( father2son_->referenceCounter_ > 0 ); + father2son_->referenceCounter_ -= 1; + if ( father2son_->referenceCounter_ == 0 ) + { + delete father2son_; + } + } + if (son2father_ != 0) + { + assert( son2father_->referenceCounter_ > 0 ); + son2father_->referenceCounter_ -= 1; + if ( son2father_->referenceCounter_ == 0 ) + { + delete son2father_; + } + } + } + + template < class TMesh, RefinementDataRequest refDataReq > + const TMesh& + RefinementData< TMesh, refDataReq >::getFatherMesh() const + { + return fatherMesh_; + } + + template < class TMesh, RefinementDataRequest refDataReq > + const TMesh& + RefinementData< TMesh, refDataReq >::getSonMesh() const + { + return sonMesh_; + } + + template < class TMesh, RefinementDataRequest refDataReq > + typename boost::enable_if_c< + (refDataReq & RefinementDataRequest_RequireFather2Son) != 0, + const Father2Son< TMesh >& >::type + RefinementData< TMesh, refDataReq >::father2son() const + { + assert( father2son_ != 0 ); + return *father2son_; + } + + template < class TMesh, RefinementDataRequest refDataReq > + typename boost::enable_if_c< + (refDataReq & RefinementDataRequest_RequireSon2Father) != 0, + const Son2Father< TMesh >& >::type + RefinementData< TMesh, refDataReq >::son2father() const + { + assert( son2father_ != 0 ); + return *son2father_; + } + + template < class TMesh, RefinementDataRequest refDataReq > + RefinementData< TMesh, refDataReq >::operator TMesh() const + { + return sonMesh_; + } + + template < class TMesh, RefinementDataRequest refDataReq > + RefinementDataBuilder< TMesh, refDataReq >::RefinementDataBuilder( + const TMesh& father, const typename TMesh::Size& sonMeshSize) + : refinement_( father ), meshBuilder_( sonMeshSize ) + { + refinement_.fatherMesh_ = father; + + if ( (refDataReq & RefinementDataRequest_RequireFather2Son) != 0 ) + { + refinement_.father2son_ = new Father2Son< TMesh >( father ); + } + + if ( (refDataReq & RefinementDataRequest_RequireSon2Father) != 0 ) + { + refinement_.son2father_ = new Son2Father< TMesh >( sonMeshSize.faces ); + } + } + + template < class TMesh, RefinementDataRequest refDataReq > + const typename TMesh::Vertex& + RefinementDataBuilder< TMesh, refDataReq >::addVertex( + const typename TMesh::UVertex& vertex) + { + return meshBuilder_.addVertex( vertex ); + } + + template < class TMesh, RefinementDataRequest refDataReq > + void + RefinementDataBuilder< TMesh, refDataReq >::addRelation( + const typename TMesh::Face& father, + const typename std::vector< const typename TMesh::Vertex* >& sonVertices) + { + const typename TMesh::Face& son = meshBuilder_.addFace( sonVertices ); + + if ( (refDataReq & RefinementDataRequest_RequireFather2Son) != 0 ) + { + assert( refinement_.father2son_ != 0 ); + refinement_.father2son_->addRelation( + refinement_.fatherMesh_.getFaceId(father), son); + } + + if ( (refDataReq & RefinementDataRequest_RequireSon2Father) != 0 ) + { + assert( refinement_.son2father_ != 0 ); + refinement_.son2father_->addRelation( + father, meshBuilder_.getFaceId(son)); + } + } + + template < class TMesh, RefinementDataRequest refDataReq > + RefinementData< TMesh, refDataReq > + RefinementDataBuilder< TMesh, refDataReq >::deliver() + { + refinement_.sonMesh_ = meshBuilder_.deliver(); + + if ( (refDataReq & RefinementDataRequest_RequireSon2Father) != 0 ) + { + assert( refinement_.son2father_ != 0 ); + refinement_.son2father_->sonMesh_ = &(refinement_.sonMesh_); + } + return refinement_; + } +} + +#endif + diff --git a/src/bem3d/src/boundary_mesh/Vertex.hpp b/src/bem3d/src/boundary_mesh/Vertex.hpp index d561d78..581830f 100644 --- a/src/bem3d/src/boundary_mesh/Vertex.hpp +++ b/src/bem3d/src/boundary_mesh/Vertex.hpp @@ -4,6 +4,9 @@ #include #include "../generic/GenericVector.hpp" +#include "../generic/Testing.hpp" + +#include /** * @file boundary_mesh/Vertex.hpp @@ -18,13 +21,80 @@ namespace boundary_mesh template < class TMesh > class VertexT : public TMesh::UVertex { + friend class testing::Tester< TMesh >; template < template class TProp, template class TAlg > friend class Mesh; public: + enum WhereToStart + { + StartAtBeginning, + StartAtEnd + }; + + private: + class CommonIteratorBase__ + { + public: + CommonIteratorBase__(const VertexT& vertex, + enum WhereToStart whereToStart); + CommonIteratorBase__& operator++(); + bool operator==(const CommonIteratorBase__& rhs) const; + bool operator!=(const CommonIteratorBase__& rhs) const; + + protected: + const typename TMesh::HalfEdge& getCurrentHalfEdge() const; + bool isRewinded() const; + + private: + const VertexT* vertex_; + const typename TMesh::HalfEdge* current_; + bool rewinded_; + }; + + public: + class ConstEdgeIterator : public CommonIteratorBase__, + std::iterator< std::input_iterator_tag, typename TMesh::HalfEdge > + { + public: + ConstEdgeIterator(const VertexT&, enum WhereToStart); + ConstEdgeIterator& operator++(); + const typename TMesh::HalfEdge& operator*() const; + const typename TMesh::HalfEdge* operator->() const; + }; + + class ConstFaceIterator : public CommonIteratorBase__, + std::iterator< std::input_iterator_tag, typename TMesh::Face > + { + public: + ConstFaceIterator(const VertexT&, enum WhereToStart); + ConstFaceIterator& operator++(); + const typename TMesh::Face& operator*() const; + const typename TMesh::Face* operator->() const; + }; + + class ConstVertexIterator : public CommonIteratorBase__, + std::iterator< std::input_iterator_tag, typename TMesh::Vertex > + { + public: + ConstVertexIterator(const VertexT&, enum WhereToStart); + const typename TMesh::Vertex& operator*() const; + const typename TMesh::Vertex* operator->() const; + }; + + VertexT(const typename TMesh::Vertex& v); const typename TMesh::HalfEdge* getHalfEdge() const; + ConstEdgeIterator begin_e() const; + ConstEdgeIterator end_e() const; + ConstFaceIterator begin_f() const; + ConstFaceIterator end_f() const; + ConstVertexIterator begin_v() const; + ConstVertexIterator end_v() const; + private: + VertexT(); + VertexT(double,double,double); VertexT(const double[3]); VertexT(const typename TMesh::UVertex& downCopy); void setHalfEdge(const typename TMesh::HalfEdge& halfedge); diff --git a/src/bem3d/src/boundary_mesh/Vertex_tmpl.cpp b/src/bem3d/src/boundary_mesh/Vertex_tmpl.cpp index 1935e64..be1dfb3 100644 --- a/src/bem3d/src/boundary_mesh/Vertex_tmpl.cpp +++ b/src/bem3d/src/boundary_mesh/Vertex_tmpl.cpp @@ -4,10 +4,20 @@ namespace boundary_mesh { + template < class TMesh > + VertexT< TMesh >::VertexT(const typename TMesh::Vertex& v) + : TMesh::UVertex(v), halfedge_(v.halfedge_) + {} + template < class TMesh > VertexT< TMesh >::VertexT(const double coord[3]) : TMesh::UVertex(coord), halfedge_(0) {} + + template < class TMesh > + VertexT< TMesh >::VertexT(double x, double y, double z) + : TMesh::UVertex(x,y,z), halfedge_(0) + {} template < class TMesh > VertexT< TMesh >::VertexT(const typename TMesh::UVertex& down_copy) @@ -27,4 +37,219 @@ namespace boundary_mesh { return halfedge_; } -} + + template < class TMesh > + typename VertexT< TMesh >::ConstEdgeIterator + VertexT< TMesh >::begin_e() const + { + return ConstEdgeIterator(*this, StartAtBeginning); + } + + template < class TMesh > + typename VertexT< TMesh >::ConstEdgeIterator + VertexT< TMesh >::end_e() const + { + return ConstEdgeIterator(*this, StartAtEnd); + } + + template < class TMesh > + typename VertexT< TMesh >::ConstFaceIterator + VertexT< TMesh >::begin_f() const + { + return ConstFaceIterator(*this, StartAtBeginning); + } + + template < class TMesh > + typename VertexT< TMesh >::ConstFaceIterator + VertexT< TMesh >::end_f() const + { + return ConstFaceIterator(*this, StartAtEnd); + } + + template < class TMesh > + typename VertexT< TMesh >::ConstVertexIterator + VertexT< TMesh >::begin_v() const + { + return ConstVertexIterator(*this, StartAtBeginning); + } + + template < class TMesh > + typename VertexT< TMesh >::ConstVertexIterator + VertexT< TMesh >::end_v() const + { + return ConstVertexIterator(*this, StartAtEnd); + } + + template < class TMesh > + VertexT< TMesh >::ConstEdgeIterator::ConstEdgeIterator( + const VertexT< TMesh >& vertex, enum WhereToStart whereToStart) + : CommonIteratorBase__(vertex,whereToStart) + { + } + + template < class TMesh > + VertexT< TMesh >::CommonIteratorBase__::CommonIteratorBase__( + const VertexT& vertex, enum WhereToStart whereToStart) + : vertex_(&vertex), current_(vertex.getHalfEdge()), rewinded_(false) + { + if (whereToStart == StartAtEnd) + { + current_ = 0; + } + } + + template < class TMesh > + typename VertexT< TMesh >::CommonIteratorBase__& + VertexT< TMesh >::CommonIteratorBase__::operator++() + { + assert( current_ != 0 ); + + if ( rewinded_ == true ) + { + rewinded_ = false; + if ( current_ == vertex_->getHalfEdge() ) + { + current_ = 0; + } + } + else if ( current_->getOppositeEdge() == 0 ) + { // The Vertex is part of the boundary. Rewind the iterator to + // get the desired behaviour: + current_ = current_->getPreviousEdge(); + while ( current_->getOppositeEdge() != 0 ) + { + current_ = current_->getOppositeEdge()->getPreviousEdge(); + } + current_ = current_->getNextEdge(); + rewinded_ = true; + } + else + { + const typename TMesh::HalfEdge* oppositeEdge = + current_->getOppositeEdge(); + + if ( oppositeEdge == vertex_->getHalfEdge() ) + { // We are at the end. + current_ = 0; + } + else + { + current_ = oppositeEdge->getNextEdge(); + } + } + + return *this; + } + + template < class TMesh > + bool + VertexT< TMesh >::CommonIteratorBase__::operator==( + const VertexT< TMesh >::CommonIteratorBase__& rhs) const + { + return current_ == rhs.current_ + && rewinded_ == rhs.rewinded_ + && vertex_ == rhs.vertex_; + } + + template < class TMesh > + bool + VertexT< TMesh >::CommonIteratorBase__::operator!=( + const VertexT< TMesh >::CommonIteratorBase__& rhs) const + { + return current_ != rhs.current_ + || rewinded_ != rhs.rewinded_ + || vertex_ != rhs.vertex_; + } + + template < class TMesh > + const typename TMesh::HalfEdge& + VertexT< TMesh >::CommonIteratorBase__::getCurrentHalfEdge() const + { + return *current_; + } + + template < class TMesh > + bool + VertexT< TMesh >::CommonIteratorBase__::isRewinded() const + { + return rewinded_; + } + + template < class TMesh > + typename VertexT< TMesh >::ConstEdgeIterator& + VertexT< TMesh >::ConstEdgeIterator::operator++() + { + CommonIteratorBase__::operator++(); + if (this->isRewinded()) + CommonIteratorBase__::operator++(); + } + + template < class TMesh > + const typename TMesh::HalfEdge& + VertexT< TMesh >::ConstEdgeIterator::operator*() const + { + return this->getCurrentHalfEdge(); + } + + template < class TMesh > + const typename TMesh::HalfEdge* + VertexT< TMesh >::ConstEdgeIterator::operator->() const + { + return &(this->getCurrentHalfEdge()); + } + + template < class TMesh > + VertexT< TMesh >::ConstFaceIterator::ConstFaceIterator( + const VertexT< TMesh >& vertex, enum WhereToStart whereToStart) + : CommonIteratorBase__(vertex,whereToStart) + { + } + + template < class TMesh > + typename VertexT< TMesh >::ConstFaceIterator& + VertexT< TMesh >::ConstFaceIterator::operator++() + { + CommonIteratorBase__::operator++(); + if (this->isRewinded()) + CommonIteratorBase__::operator++(); + } + + template < class TMesh > + const typename TMesh::Face& + VertexT< TMesh >::ConstFaceIterator::operator*() const + { + return this->getCurrentHalfEdge().getFace(); + } + + template < class TMesh > + const typename TMesh::Face* + VertexT< TMesh >::ConstFaceIterator::operator->() const + { + return &(this->getCurrentHalfEdge().getFace()); + } + + template < class TMesh > + VertexT< TMesh >::ConstVertexIterator::ConstVertexIterator( + const VertexT< TMesh >& vertex, enum WhereToStart whereToStart) + : CommonIteratorBase__(vertex,whereToStart) + { + } + + template < class TMesh > + const typename TMesh::Vertex& + VertexT< TMesh >::ConstVertexIterator::operator*() const + { + if (this->isRewinded()) + return this->getCurrentHalfEdge().getPreviousEdge().getStartVertex(); + else + return this->getCurrentHalfEdge().getEndVertex(); + } + + template < class TMesh > + const typename TMesh::Vertex* + VertexT< TMesh >::ConstVertexIterator::operator->() const + { + return &(**this); + } +} + diff --git a/src/bem3d/src/boundary_mesh/algorithm/HandleObj_tmpl.cpp b/src/bem3d/src/boundary_mesh/algorithm/HandleObj_tmpl.cpp index ce297ba..f504e97 100644 --- a/src/bem3d/src/boundary_mesh/algorithm/HandleObj_tmpl.cpp +++ b/src/bem3d/src/boundary_mesh/algorithm/HandleObj_tmpl.cpp @@ -78,8 +78,10 @@ namespace boundary_mesh typename TMesh::Builder builder(sizeInfo); unsigned int line_number = 0; - std::vector< geoid_t > vertexIds; - vertexIds.reserve(TMesh::Prop::maximumNumberOfEdgesPerFace); + typename std::vector< const typename TMesh::Vertex* > faceVertices; + faceVertices.reserve(TMesh::Prop::maximumNumberOfEdgesPerFace); + typename std::vector< const typename TMesh::Vertex* > vertices; + vertices.reserve(sizeInfo.vertices); while ( file.good() ) { @@ -95,13 +97,14 @@ namespace boundary_mesh std::istringstream istr( what[i+1] ); istr >> coordinates[i]; } - builder.addVertex(typename TMesh::UVertex(coordinates)); + vertices.push_back(&(builder.addVertex( + typename TMesh::UVertex(coordinates)))); } else if (line[0] == 'f' && boost::regex_match( line, what, face_line )) { assert(what.size() == 2); - vertexIds.clear(); + faceVertices.clear(); const std::string numbers = what[1].str(); assert( numbers.length() < matchedNumberBufferSize ); matchedNumberBuffer = strncpy(matchedNumberBuffer, numbers.c_str(), @@ -113,12 +116,11 @@ namespace boundary_mesh unsigned int id = 0; std::istringstream istr( currentNumber ); istr >> id; - vertexIds.push_back( id-1 ); + assert( id <= vertices.size() ); + faceVertices.push_back( vertices[id-1] ); } while ((currentNumber = strtok_r( 0, " \t", &savePtr )) != 0); - assert(vertexIds.size() >= 3); - - builder.addFace(vertexIds); + builder.addFace(faceVertices); } else if ( boost::regex_match( line, what, empty_line ) ) {} diff --git a/src/bem3d/src/boundary_mesh/algorithm/RefineAdaptivly.hpp b/src/bem3d/src/boundary_mesh/algorithm/RefineAdaptivly.hpp new file mode 100644 index 0000000..f00d235 --- /dev/null +++ b/src/bem3d/src/boundary_mesh/algorithm/RefineAdaptivly.hpp @@ -0,0 +1,51 @@ +#ifndef HILBERT3D_BOUNDARY_MESH_ALGORITHM_REFINEADAPTIVLY_HPP_GUARD_ +#define HILBERT3D_BOUNDARY_MESH_ALGORITHM_REFINEADAPTIVLY_HPP_GUARD_ + +#include "../FaceDispatch.hpp" +#include "../RefinementData.hpp" + +namespace boundary_mesh +{ + namespace algorithm + { +#if 0 + template < class TMesh > + class CountNewFacesForFaceImpl + { + HILBERT3D_DISPATCH_PARAMETERS_2( + CountNewFacesForFaceImpl, + typename TMesh::Size*, newMeshSize_, + unsigned int, numberOfMarkedEdges_); + + public: + void exec( const typename TMesh::Prop::Triangle& face ) const; + void exec( const typename TMesh::Prop::Rectangle& face ) const; + }; + + template < class TMesh, RefinementDataRequest refDataReq > + class RefineFaceAdaptivlyImpl + { + typedef RefinementDataBuilder< TMesh, refDataReq > + MyRefinementDataBuilder; + + HILBERT3D_DISPATCH_PARAMETERS_4( + RefineFaceAdaptivlyImpl, + MyRefinementDataBuilder*, refinementBuilder_, + const typename std::vector< const typename TMesh::Vertex* >&, oldVert_, + const typename std::vector< const typename TMesh::Vertex* >&, newVert_, + unsigned int, markedBin_); + + public: + void exec( const typename TMesh::Prop::Triangle& face ); + void exec( const typename TMesh::Prop::Rectangle& face ); + }; +#endif + + template < class TMesh, RefinementDataRequest refDataReq > + RefinementData< TMesh, refDataReq > + refineAdaptivly( const TMesh& mesh, const Marker< TMesh >& marker ); + } +} + +#endif + diff --git a/src/bem3d/src/boundary_mesh/algorithm/RefineAdaptivly_tmpl.cpp b/src/bem3d/src/boundary_mesh/algorithm/RefineAdaptivly_tmpl.cpp new file mode 100644 index 0000000..34e69b6 --- /dev/null +++ b/src/bem3d/src/boundary_mesh/algorithm/RefineAdaptivly_tmpl.cpp @@ -0,0 +1,535 @@ +#ifndef HILBERT3D_BOUNDARY_MESH_ALGORITH_REFINEADAPTIVLY_TMPL_CPP_GUARD_ +#define HILBERT3D_BOUNDARY_MESH_ALGORITH_REFINEADAPTIVLY_TMPL_CPP_GUARD_ + +namespace boundary_mesh +{ + namespace algorithm + { + template < class TMesh > + class CountNewFacesForFaceImpl + { + HILBERT3D_DISPATCH_PARAMETERS_2( + CountNewFacesForFaceImpl, void, + typename TMesh::Size*, newMeshSize_, + unsigned int, numberOfMarkedEdges_); + + HILBERT3D_SINGLE_DISPATCH_IMPLEMENTATION_FOR( TMesh::Prop::Triangle ) + { + assert( numberOfMarkedEdges_ <= 3 ); + unsigned int newFaces = numberOfMarkedEdges_ + 1; + newMeshSize_->faces += newFaces; + newMeshSize_->edges += 3 * newFaces; + } + + HILBERT3D_SINGLE_DISPATCH_IMPLEMENTATION_FOR( TMesh::Prop::Rectangle ) + { + unsigned int newFaces = 0; + switch ( numberOfMarkedEdges_ ) + { + case 0: + newFaces += 1; + break; + case 4: + newMeshSize_->vertices += 1; + case 2: + newFaces += numberOfMarkedEdges_; + break; + default: + assert(0); + } + newMeshSize_->faces += newFaces; + newMeshSize_->edges += 4 * newFaces; + } + }; + +#if 0 + template < class TMesh > + void + CountNewFacesForFaceImpl< TMesh >::exec( + const typename TMesh::Prop::Triangle& face ) const + { + assert( numberOfMarkedEdges_ <= 3 ); + unsigned int newFaces = numberOfMarkedEdges_ + 1; + newMeshSize_->faces += newFaces; + newMeshSize_->edges += 3 * newFaces; + } + + template < class TMesh > + void + CountNewFacesForFaceImpl< TMesh >::exec( + const typename TMesh::Prop::Rectangle& face ) const + { + unsigned int newFaces = 0; + switch ( numberOfMarkedEdges_ ) + { + case 0: + newFaces += 1; + break; + case 4: + newMeshSize_->vertices += 1; + case 2: + newFaces += numberOfMarkedEdges_; + break; + default: + assert(0); + } + newMeshSize_->faces += newFaces; + newMeshSize_->edges += 4 * newFaces; + } +#endif + + template < class TMesh, RefinementDataRequest refDataReq > + class RefineFaceAdaptivlyImpl + { + typedef RefinementDataBuilder< TMesh, refDataReq > + MyRefinementDataBuilder; + + HILBERT3D_DISPATCH_PARAMETERS_4( + RefineFaceAdaptivlyImpl, void, + MyRefinementDataBuilder*, refinementBuilder_, + const typename std::vector< const typename TMesh::Vertex* >&, oldVert_, + const typename std::vector< const typename TMesh::Vertex* >&, newVert_, + unsigned int, markedBin_); + + HILBERT3D_SINGLE_DISPATCH_IMPLEMENTATION_FOR( TMesh::Prop::Triangle ) + { + typename std::vector< const typename TMesh::Vertex* > childFace(3); + + switch ( markedBin_ ) + { + case 0: // Nothing marked, copy old face: + assert( oldVert_.size() == 3 ); + refinementBuilder_->addRelation( face, oldVert_ ); + break; + case 1: // Only the longest edge is marked: + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[1]; + childFace[2] = oldVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[2]; + childFace[2] = oldVert_[0]; + refinementBuilder_->addRelation( face, childFace ); + + break; + case 3: // Reference edge and second edge are marked: + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[2]; + childFace[2] = oldVert_[0]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[1]; + childFace[2] = newVert_[1]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = newVert_[1]; + childFace[2] = oldVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + break; + case 5: // Reference edge and third edge are marked: + childFace[0] = newVert_[0]; + childFace[1] = newVert_[2]; + childFace[2] = oldVert_[0]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[2]; + childFace[2] = newVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[1]; + childFace[2] = oldVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + break; + case 7: // All edges are marked: + childFace[0] = newVert_[0]; + childFace[1] = newVert_[2]; + childFace[2] = oldVert_[0]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[2]; + childFace[2] = newVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = newVert_[1]; + childFace[2] = oldVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[1]; + childFace[2] = newVert_[1]; + refinementBuilder_->addRelation( face, childFace ); + + break; + default: // Marking is impossible: + assert(0); + } + } + + HILBERT3D_SINGLE_DISPATCH_IMPLEMENTATION_FOR( TMesh::Prop::Rectangle ) + { + std::vector< const typename TMesh::Vertex* > childFace(4); + + switch ( markedBin_ ) + { + case 0: // Nothing marked, copy old face: + assert( oldVert_.size() == 4 ); + refinementBuilder_->addRelation( face, oldVert_ ); + case 5: // Reference edge and opposite edge are marked: + childFace[0] = oldVert_[0]; + childFace[1] = newVert_[0]; + childFace[2] = newVert_[2]; + childFace[3] = oldVert_[3]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[1]; + childFace[2] = oldVert_[2]; + childFace[3] = newVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + break; + case 10: // Shorter edge and opposite edge are marked: + childFace[0] = oldVert_[0]; + childFace[1] = oldVert_[1]; + childFace[2] = newVert_[1]; + childFace[3] = newVert_[3]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[3]; + childFace[1] = newVert_[1]; + childFace[2] = oldVert_[2]; + childFace[3] = newVert_[3]; + refinementBuilder_->addRelation( face, childFace ); + + break; + case 15: // All edges are marked: + { + const typename TMesh::Vertex* centerVertex = + &(refinementBuilder_->addVertex( + (*(oldVert_[0]) + *(oldVert_[2])))); + + childFace[0] = centerVertex; + childFace[1] = newVert_[3]; + childFace[2] = oldVert_[0]; + childFace[3] = newVert_[0]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = centerVertex; + childFace[1] = newVert_[2]; + childFace[2] = oldVert_[3]; + childFace[3] = newVert_[3]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = centerVertex; + childFace[1] = newVert_[0]; + childFace[2] = oldVert_[1]; + childFace[3] = newVert_[1]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = centerVertex; + childFace[1] = newVert_[1]; + childFace[2] = oldVert_[2]; + childFace[3] = newVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + break; + } + default: // Impossible marking: + assert(0); + } + } + }; + +#if 0 + template < class TMesh, RefinementDataRequest refDataReq > + void + RefineFaceAdaptivlyImpl< TMesh, refDataReq >::exec( + const typename TMesh::Prop::Triangle& face ) + { + typename std::vector< const typename TMesh::Vertex* > childFace(3); + + switch ( markedBin_ ) + { + case 0: // Nothing marked, copy old face: + assert( oldVert_.size() == 3 ); + refinementBuilder_->addRelation( face, oldVert_ ); + break; + case 1: // Only the longest edge is marked: + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[1]; + childFace[2] = oldVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[2]; + childFace[2] = oldVert_[0]; + refinementBuilder_->addRelation( face, childFace ); + + break; + case 3: // Reference edge and second edge are marked: + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[2]; + childFace[2] = oldVert_[0]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[1]; + childFace[2] = newVert_[1]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = newVert_[1]; + childFace[2] = oldVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + break; + case 5: // Reference edge and third edge are marked: + childFace[0] = newVert_[0]; + childFace[1] = newVert_[2]; + childFace[2] = oldVert_[0]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[2]; + childFace[2] = newVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[1]; + childFace[2] = oldVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + break; + case 7: // All edges are marked: + childFace[0] = newVert_[0]; + childFace[1] = newVert_[2]; + childFace[2] = oldVert_[0]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[2]; + childFace[2] = newVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = newVert_[1]; + childFace[2] = oldVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[1]; + childFace[2] = newVert_[1]; + refinementBuilder_->addRelation( face, childFace ); + + break; + default: // Marking is impossible: + assert(0); + } + } + + template < class TMesh, RefinementDataRequest refDataReq > + void + RefineFaceAdaptivlyImpl< TMesh, refDataReq >::exec( + const typename TMesh::Prop::Rectangle& face ) + { + std::vector< const typename TMesh::Vertex* > childFace(4); + + switch ( markedBin_ ) + { + case 0: // Nothing marked, copy old face: + assert( oldVert_.size() == 4 ); + refinementBuilder_->addRelation( face, oldVert_ ); + case 5: // Reference edge and opposite edge are marked: + childFace[0] = oldVert_[0]; + childFace[1] = newVert_[0]; + childFace[2] = newVert_[2]; + childFace[3] = oldVert_[3]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[0]; + childFace[1] = oldVert_[1]; + childFace[2] = oldVert_[2]; + childFace[3] = newVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + break; + case 10: // Shorter edge and opposite edge are marked: + childFace[0] = oldVert_[0]; + childFace[1] = oldVert_[1]; + childFace[2] = newVert_[1]; + childFace[3] = newVert_[3]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = newVert_[3]; + childFace[1] = newVert_[1]; + childFace[2] = oldVert_[2]; + childFace[3] = newVert_[3]; + refinementBuilder_->addRelation( face, childFace ); + + break; + case 15: // All edges are marked: + { + const typename TMesh::Vertex* centerVertex = + &(refinementBuilder_->addVertex( + (*(oldVert_[0]) + *(oldVert_[2])))); + + childFace[0] = centerVertex; + childFace[1] = newVert_[3]; + childFace[2] = oldVert_[0]; + childFace[3] = newVert_[0]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = centerVertex; + childFace[1] = newVert_[2]; + childFace[2] = oldVert_[3]; + childFace[3] = newVert_[3]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = centerVertex; + childFace[1] = newVert_[0]; + childFace[2] = oldVert_[1]; + childFace[3] = newVert_[1]; + refinementBuilder_->addRelation( face, childFace ); + + childFace[0] = centerVertex; + childFace[1] = newVert_[1]; + childFace[2] = oldVert_[2]; + childFace[3] = newVert_[2]; + refinementBuilder_->addRelation( face, childFace ); + + break; + } + default: // Impossible marking: + assert(0); + } + } +#endif + + template < class TMesh, RefinementDataRequest refDataReq > + RefinementData< TMesh, refDataReq > + refineAdaptivly( + const TMesh& mesh, const Marker< TMesh >& marker) + { + typedef SingleFaceDispatcher< CountNewFacesForFaceImpl, + TMesh, void > CountNewFacesForFace; + typedef SingleFaceDispatcher< + RefineFaceAdaptivlyImpl, TMesh, void > + RefineFaceAdaptivly; + + typename TMesh::Size newMeshSize = { 0, 0, 0 }; + unsigned int numberOfHalfVertices = 0; + + for ( typename TMesh::ConstFaceIterator faceIt = mesh.begin_f(); + faceIt != mesh.end_f(); ++faceIt ) + { + unsigned int numberOfMarkedEdges = 0; + + for ( typename TMesh::Face::ConstEdgeIterator + edgeIt = faceIt->begin_e(); edgeIt != faceIt->end_e(); ++edgeIt ) + { + if ( marker.isMarked(*faceIt, *edgeIt) == true ) + { + const typename TMesh::HalfEdge* opposite = + edgeIt->getOppositeEdge(); + + if (opposite != 0 && + marker.isMarked(opposite->getFace(), *opposite) ) + { + numberOfHalfVertices += 1; + } + else + { + numberOfHalfVertices += 2; + } + + numberOfMarkedEdges += 1; + } + } + + CountNewFacesForFace::Exec( *faceIt, + typename CountNewFacesForFace::PARAM( + &newMeshSize, numberOfMarkedEdges) ); + } + + newMeshSize.vertices += mesh.getNumberOfVertices() + + (numberOfHalfVertices / 2); + + RefinementDataBuilder< TMesh, refDataReq > + refinementBuilder( mesh, newMeshSize ); + typename std::vector< const typename TMesh::Vertex* > oldVertices; + oldVertices.reserve( mesh.getNumberOfVertices() ); + typename std::vector< const typename TMesh::Vertex* > + newVertices( mesh.getNumberOfEdges(), 0 ); + + for (typename TMesh::ConstVertexIterator vertexIt = mesh.begin_v(); + vertexIt != mesh.end_v(); ++vertexIt) + { + oldVertices.push_back(&(refinementBuilder.addVertex( *vertexIt ))); + } + + for (typename TMesh::ConstFaceIterator faceIt = mesh.begin_f(); + faceIt != mesh.end_f(); ++faceIt) + { + unsigned int markerId = 1; + unsigned int marked = 0; + unsigned int numberOfFaceEdges = 0; + std::vector< const typename TMesh::Vertex* > oldIds( + faceIt->getNumberOfEdges(), 0 ); + std::vector< const typename TMesh::Vertex* > newIds( + faceIt->getNumberOfEdges(), 0 ); + + for (typename TMesh::Face::ConstEdgeIterator + edgeIt = faceIt->begin_e(); edgeIt != faceIt->end_e(); ++edgeIt) + { + oldIds[ numberOfFaceEdges ] = oldVertices[ + mesh.getVertexId(edgeIt->getStartVertex()) ]; + + if ( marker.isMarked(*faceIt, *edgeIt) == true ) + { + marked += markerId; + + if ( newVertices[ mesh.getEdgeId(*edgeIt) ] != 0 ) + { + newIds[ numberOfFaceEdges ] + = newVertices[ mesh.getEdgeId(*edgeIt) ]; + } + else + { + const typename TMesh::Vertex* vert = + &(refinementBuilder.addVertex( + .5 * (edgeIt->getStartVertex() + edgeIt->getEndVertex()) )); + newVertices[ mesh.getEdgeId(*edgeIt) ] = vert; + if ( edgeIt->getOppositeEdge() != 0 ) + { + newVertices[ mesh.getEdgeId(*(edgeIt->getOppositeEdge())) ] + = vert; + } + newIds[ numberOfFaceEdges ] = vert; + } + } + + numberOfFaceEdges += 1; + markerId *= 2; + } + + RefineFaceAdaptivly::Exec( *faceIt, + typename RefineFaceAdaptivly::PARAM( + &refinementBuilder, oldIds, newIds, marked) ); + } + + return refinementBuilder.deliver(); + } + } +} + +#endif + diff --git a/src/bem3d/src/boundary_mesh/algorithm/RefineUniformly.hpp b/src/bem3d/src/boundary_mesh/algorithm/RefineUniformly.hpp index a91df60..e7e5a20 100644 --- a/src/bem3d/src/boundary_mesh/algorithm/RefineUniformly.hpp +++ b/src/bem3d/src/boundary_mesh/algorithm/RefineUniformly.hpp @@ -4,27 +4,6 @@ #include "../types.hpp" #include "../FaceDispatch.hpp" -#define HILBERT3D_DISPATCH_PARAMETERS_0(Name) \ - public: \ - Name() {} \ - private: -#define HILBERT3D_DISPATCH_PARAMETERS_1(Name, T1, N1) \ - public: \ - Name(T1 N1) : N1(N1) {} \ - private: \ - T1 N1; -#define HILBERT3D_DISPATCH_PARAMETERS_2(Name, T1, N1, T2, N2) \ - public: \ - Name(T1 N1, T2 N2) : N1(N1), N2(N2) {} \ - private: \ - T1 N1; T2 N2; -#define HILBERT3D_DISPATCH_PARAMETERS_3(Name, T1, N1, T2, N2, T3, N3) \ - public: \ - Name(T1 N1, T2 N2, T3 N3) : N1(N1), N2(N2), N3(N3) {} \ - private: \ - T1 N1; T2 N2; T3 N3; - - namespace boundary_mesh { namespace algorithm @@ -32,19 +11,22 @@ namespace boundary_mesh namespace refine_uniformly_impl { template < class TMesh > - std::vector< geoid_t > + typename std::vector< const typename TMesh::Vertex* > addEdgeVerticesForFace( const TMesh& oldMesh, typename TMesh::Builder* builder, const typename TMesh::Face& face, - std::vector< geoid_t >* newVertices ); + typename std::vector< const typename TMesh::Vertex* >* oldVertices, + typename std::vector< const typename TMesh::Vertex* >* newVertices ); +#if 0 template < class TMesh > class RefineFaceUniformlyImpl { - HILBERT3D_DISPATCH_PARAMETERS_3( RefineFaceUniformlyImpl, + HILBERT3D_DISPATCH_PARAMETERS_4( RefineFaceUniformlyImpl, const TMesh&, oldMesh_, typename TMesh::Builder*, builder_, - std::vector< geoid_t >*, newVertices_ ); + typename std::vector< const typename TMesh::Vertex* >*, oldVertices_, + typename std::vector< const typename TMesh::Vertex* >*, newVertices_); public: void exec(const typename TMesh::Prop::Triangle& face); @@ -61,6 +43,7 @@ namespace boundary_mesh void exec( const typename TMesh::Prop::Triangle& face ); void exec( const typename TMesh::Prop::ConvexQuadrilateral& face ); }; +#endif } template < class TMesh > diff --git a/src/bem3d/src/boundary_mesh/algorithm/RefineUniformly_tmpl.cpp b/src/bem3d/src/boundary_mesh/algorithm/RefineUniformly_tmpl.cpp index 514da47..d038520 100644 --- a/src/bem3d/src/boundary_mesh/algorithm/RefineUniformly_tmpl.cpp +++ b/src/bem3d/src/boundary_mesh/algorithm/RefineUniformly_tmpl.cpp @@ -8,28 +8,30 @@ namespace boundary_mesh namespace refine_uniformly_impl { template < class TMesh > - std::vector< geoid_t > + typename std::vector< const typename TMesh::Vertex* > addEdgeVerticesForFace( const TMesh& oldMesh, typename TMesh::Builder* builder, const typename TMesh::Face& face, - std::vector< geoid_t >* newVertices) + typename std::vector< const typename TMesh::Vertex* >* oldVertices, + typename std::vector< const typename TMesh::Vertex* >* newVertices) { unsigned int i = 0; - std::vector< geoid_t > faceVertexIds( + typename std::vector< const typename TMesh::Vertex* > faceVertices( face.getNumberOfVertices() * 2, 0); for ( typename TMesh::Face::ConstEdgeIterator edgeIt = face.begin_e(); edgeIt != face.end_e(); ++edgeIt ) { - const typename TMesh::Vertex& startVertex = edgeIt->getStartVertex(); + const typename TMesh::Vertex& startVertex = + *((*oldVertices)[ oldMesh.getVertexId(edgeIt->getStartVertex()) ]); geoid_t edgeId = oldMesh.getEdgeId( *edgeIt ); - if ( (*newVertices)[ edgeId ] == geoid_t_max ) + if ( (*newVertices)[ edgeId ] == 0 ) { const typename TMesh::Vertex& endVertex = edgeIt->getEndVertex(); (*newVertices)[ edgeId ] = - builder->addVertex( ( startVertex + endVertex ) / 2. ); + &(builder->addVertex( ( startVertex + endVertex ) / 2. )); if ( edgeIt->getOppositeEdge() != 0 ) { (*newVertices)[oldMesh.getEdgeId(*(edgeIt->getOppositeEdge()))] = @@ -37,55 +39,153 @@ namespace boundary_mesh } } - faceVertexIds[ 2*i + 0 ] = oldMesh.getVertexId( startVertex ); - faceVertexIds[ 2*i + 1 ] = (*newVertices)[ edgeId ]; + faceVertices[ 2*i + 0 ] = &(startVertex); + faceVertices[ 2*i + 1 ] = (*newVertices)[ edgeId ]; ++i; } - return faceVertexIds; + return faceVertices; } - + + template < class TMesh > + class RefineFaceUniformlyImpl + { + HILBERT3D_DISPATCH_PARAMETERS_4( RefineFaceUniformlyImpl, + void, + const TMesh&, oldMesh_, typename TMesh::Builder*, builder_, + typename std::vector< const typename TMesh::Vertex* >*,oldVertices_, + typename std::vector< const typename TMesh::Vertex* >*,newVertices_); + + HILBERT3D_SINGLE_DISPATCH_IMPLEMENTATION_FOR( TMesh::Prop::Triangle ) + { + typename std::vector< const typename TMesh::Vertex* > faceVertices = + addEdgeVerticesForFace( oldMesh_, builder_, + face, oldVertices_, newVertices_ ); + typename std::vector< const typename TMesh::Vertex* > triangle(3); + + assert( faceVertices.size() == 6 ); + + // Some ASCII-Art: + // 4 + // * + // / \ The big triangle is refined to the small + // 5 *---* 3 ones. The numbers next to the stars are the + // / \ / \ indices of the appropiate nodes with + // 0 *---*---* 2 respect to the faceVertices vector. + // 1 + // We need to add the following triangles: + // [ 0, 1, 5 ], [ 1, 2, 3 ], [ 1, 3, 5 ] and [ 3, 4, 5 ] + + triangle[0] = faceVertices[0]; + triangle[1] = faceVertices[1]; + triangle[2] = faceVertices[5]; + builder_->addFace( triangle ); + + triangle[0] = faceVertices[1]; + triangle[1] = faceVertices[2]; + triangle[2] = faceVertices[3]; + builder_->addFace( triangle ); + + triangle[0] = faceVertices[1]; + triangle[1] = faceVertices[3]; + triangle[2] = faceVertices[5]; + builder_->addFace( triangle ); + + triangle[0] = faceVertices[3]; + triangle[1] = faceVertices[4]; + triangle[2] = faceVertices[5]; + builder_->addFace( triangle ); + } + + HILBERT3D_SINGLE_DISPATCH_IMPLEMENTATION_FOR( + TMesh::Prop::ConvexQuadrilateral) + { + typename std::vector< const typename TMesh::Vertex* > faceVertices = + addEdgeVerticesForFace( oldMesh_, builder_, + face, oldVertices_, newVertices_ ); + typename std::vector< const typename TMesh::Vertex* > quad(4); + + assert( faceVertices.size() == 8 ); + + // Add an additional vertex right in the center of the rectangle: + const typename TMesh::Prop::Quadrilateral& rect = + dynamic_cast< const typename TMesh::Prop::Quadrilateral& >( + face); + + const typename TMesh::Vertex* centerVertex = &(builder_->addVertex( + ( rect.getA() + rect.getC() ) / 2.)); + + // Some ASCII-Art: + // 5 + // 6 *---*---* 4 Stars and numbers have the same meaning + // | | as in the triangle case. + // 7 *---c---* 3 c is also a vertex, it has the special id + // | | centerVertex. + // 0 *---*---* 2 + // 1 + // We need to add the following rectangles: + // [0, 1, c, 7], [1, 2, 3, c], [3, 4, 5, c] and [5, 6, 7, c] + quad[0] = faceVertices[0]; quad[1] = faceVertices[1]; + quad[2] = centerVertex; quad[3] = faceVertices[7]; + builder_->addFace( quad ); + + quad[0] = faceVertices[1]; quad[2] = faceVertices[2]; + quad[3] = faceVertices[3]; quad[4] = centerVertex; + builder_->addFace( quad ); + + quad[0] = faceVertices[3]; quad[1] = faceVertices[4]; + quad[2] = faceVertices[5]; quad[3] = centerVertex; + builder_->addFace( quad ); + + quad[0] = faceVertices[5]; quad[1] = faceVertices[6]; + quad[2] = faceVertices[7]; quad[3] = centerVertex; + builder_->addFace( quad ); + } + }; + +#if 0 template < class TMesh > void RefineFaceUniformlyImpl< TMesh >::exec( const typename TMesh::Prop::Triangle& face) { - std::vector< geoid_t > faceVertexIds = - addEdgeVerticesForFace( oldMesh_, builder_, face, newVertices_ ); - std::vector< geoid_t > triangle(3); + typename std::vector< const typename TMesh::Vertex* > faceVertices = + addEdgeVerticesForFace( oldMesh_, builder_, + face, oldVertices_, newVertices_ ); + typename std::vector< const typename TMesh::Vertex* > triangle(3); - assert( faceVertexIds.size() == 6 ); + assert( faceVertices.size() == 6 ); // Some ASCII-Art: // 4 // * // / \ The big triangle is refined to the small // 5 *---* 3 ones. The numbers next to the stars are the - // / \ / \ indices of the appropiate nodes with respect - // 0 *---*---* 2 to the faceVertexIds vector. + // / \ / \ indices of the appropiate nodes with + // 0 *---*---* 2 respect to the faceVertices vector. // 1 // We need to add the following triangles: // [ 0, 1, 5 ], [ 1, 2, 3 ], [ 1, 3, 5 ] and [ 3, 4, 5 ] - triangle[0] = faceVertexIds[0]; - triangle[1] = faceVertexIds[1]; - triangle[2] = faceVertexIds[5]; + triangle[0] = faceVertices[0]; + triangle[1] = faceVertices[1]; + triangle[2] = faceVertices[5]; builder_->addFace( triangle ); - triangle[0] = faceVertexIds[1]; - triangle[1] = faceVertexIds[2]; - triangle[2] = faceVertexIds[3]; + triangle[0] = faceVertices[1]; + triangle[1] = faceVertices[2]; + triangle[2] = faceVertices[3]; builder_->addFace( triangle ); - triangle[0] = faceVertexIds[1]; - triangle[1] = faceVertexIds[3]; - triangle[2] = faceVertexIds[5]; + triangle[0] = faceVertices[1]; + triangle[1] = faceVertices[3]; + triangle[2] = faceVertices[5]; builder_->addFace( triangle ); - triangle[0] = faceVertexIds[3]; - triangle[1] = faceVertexIds[4]; - triangle[2] = faceVertexIds[5]; + triangle[0] = faceVertices[3]; + triangle[1] = faceVertices[4]; + triangle[2] = faceVertices[5]; builder_->addFace( triangle ); } @@ -94,47 +194,72 @@ namespace boundary_mesh RefineFaceUniformlyImpl< TMesh >::exec( const typename TMesh::Prop::ConvexQuadrilateral& face) { - std::vector< geoid_t > faceVertexIds = - addEdgeVerticesForFace( oldMesh_, builder_, face, newVertices_ ); - std::vector< geoid_t > quad(4); + typename std::vector< const typename TMesh::Vertex* > faceVertices = + addEdgeVerticesForFace( oldMesh_, builder_, + face, oldVertices_, newVertices_ ); + typename std::vector< const typename TMesh::Vertex* > quad(4); - assert( faceVertexIds.size() == 8 ); + assert( faceVertices.size() == 8 ); // Add an additional vertex right in the center of the rectangle: const typename TMesh::Prop::Quadrilateral& rect = dynamic_cast< const typename TMesh::Prop::Quadrilateral& >( face); - geoid_t centerVertexId = builder_->addVertex( - ( rect.getA() + rect.getC() ) / 2.); + const typename TMesh::Vertex* centerVertex = &(builder_->addVertex( + ( rect.getA() + rect.getC() ) / 2.)); // Some ASCII-Art: // 5 // 6 *---*---* 4 Stars and numbers have the same meaning // | | as in the triangle case. // 7 *---c---* 3 c is also a vertex, it has the special id - // | | centerVertexId. + // | | centerVertex. // 0 *---*---* 2 // 1 // We need to add the following rectangles: // [0, 1, c, 7], [1, 2, 3, c], [3, 4, 5, c] and [5, 6, 7, c] - quad[0] = faceVertexIds[0]; quad[1] = faceVertexIds[1]; - quad[2] = centerVertexId; quad[3] = faceVertexIds[7]; + quad[0] = faceVertices[0]; quad[1] = faceVertices[1]; + quad[2] = centerVertex; quad[3] = faceVertices[7]; builder_->addFace( quad ); - quad[0] = faceVertexIds[1]; quad[2] = faceVertexIds[2]; - quad[3] = faceVertexIds[3]; quad[4] = centerVertexId; + quad[0] = faceVertices[1]; quad[2] = faceVertices[2]; + quad[3] = faceVertices[3]; quad[4] = centerVertex; builder_->addFace( quad ); - quad[0] = faceVertexIds[3]; quad[1] = faceVertexIds[4]; - quad[2] = faceVertexIds[5]; quad[3] = centerVertexId; + quad[0] = faceVertices[3]; quad[1] = faceVertices[4]; + quad[2] = faceVertices[5]; quad[3] = centerVertex; builder_->addFace( quad ); - quad[0] = faceVertexIds[5]; quad[1] = faceVertexIds[6]; - quad[2] = faceVertexIds[7]; quad[3] = centerVertexId; + quad[0] = faceVertices[5]; quad[1] = faceVertices[6]; + quad[2] = faceVertices[7]; quad[3] = centerVertex; builder_->addFace( quad ); } - +#endif + template < class TMesh > + class ComputeNewSizeForFaceImpl + { + HILBERT3D_DISPATCH_PARAMETERS_1( ComputeNewSizeForFaceImpl, + void, + typename TMesh::Size*, size_ ); + + HILBERT3D_SINGLE_DISPATCH_IMPLEMENTATION_FOR( TMesh::Prop::Triangle ) + { + size_->vertices += 6; + size_->faces += 4; + size_->edges += 12; + } + + HILBERT3D_SINGLE_DISPATCH_IMPLEMENTATION_FOR( + TMesh::Prop::ConvexQuadrilateral ) + { + size_->vertices += 9; + size_->faces += 4; + size_->edges += 16; + } + }; + +#if 0 template < class TMesh > void ComputeNewSizeForFaceImpl< TMesh >::exec( @@ -154,6 +279,7 @@ namespace boundary_mesh size_->faces += 4; size_->edges += 16; } +#endif } template < class TMesh > @@ -182,21 +308,24 @@ namespace boundary_mesh // Add all vertices of the old mesh (in the same order, the ids are // therefore the same for both meshes): + typename std::vector< const typename TMesh::Vertex* > oldVertices; + oldVertices.reserve( mesh.getNumberOfVertices() ); for (typename TMesh::ConstVertexIterator vertexIt = mesh.begin_v(); vertexIt != mesh.end_v(); ++vertexIt) { - builder.addVertex( *vertexIt ); + oldVertices.push_back(&(builder.addVertex( *vertexIt ))); } // Call the refineFaceUniformly functor to actually do the work and // refine the faces. - std::vector< geoid_t > newVertices( mesh.getNumberOfEdges(), - geoid_t_max ); + typename std::vector< const typename TMesh::Vertex* > + newVertices( mesh.getNumberOfEdges(), 0 ); for (typename TMesh::ConstFaceIterator faceIt = mesh.begin_f(); faceIt != mesh.end_f(); ++faceIt) { RefineFaceUniformly::Exec( *faceIt, - typename RefineFaceUniformly::PARAM(mesh, &builder, &newVertices) ); + typename RefineFaceUniformly::PARAM(mesh, &builder, + &oldVertices,&newVertices) ); } return builder.deliver(); diff --git a/src/bem3d/src/boundary_mesh/face/Rectangle.hpp b/src/bem3d/src/boundary_mesh/face/Rectangle.hpp new file mode 100644 index 0000000..fdc6c31 --- /dev/null +++ b/src/bem3d/src/boundary_mesh/face/Rectangle.hpp @@ -0,0 +1,59 @@ +#ifndef HILBERT3D_BOUNDARY_MESH_FACE_RECTANGLE_HPP_GUARD_ +#define HILBERT3D_BOUNDARY_MESH_FACE_RECTANGLE_HPP_GUARD_ + +#include "../../generic/BaseTypes.hpp" +#include "Parallelogram.hpp" + +namespace boundary_mesh +{ + namespace face + { + namespace priv + { + template < class TFaceBase, class TMesh > + class GenericRectangle__ + : public TFaceBase + { + public: + static bool is( + const typename std::vector< const typename TMesh::Vertex* > + vertices); + + GenericRectangle__( const typename TMesh::HalfEdge& halfedge ); + GenericRectangle__( const typename TMesh::HalfEdge& halfedge, + geoid_t id ); + double computeDiameter() const; + }; + } + + template < class TMesh > + class Rectangle + : public priv::GenericRectangle__< + Parallelogram, TMesh > + { + public: + Rectangle( const typename TMesh::HalfEdge& halfedge ); + }; + + template < class TMesh > + class RRectangle + : public priv::GenericRectangle__< + RParallelogram< TMesh >, TMesh > + { + typedef priv::GenericRectangle__< + RParallelogram< TMesh >, TMesh > GenericRectangle; + + public: + RRectangle( const typename TMesh::HalfEdge& halfedge, geoid_t id ); + virtual double computeDiameter() const; + }; + + template < class TMesh > + class NoRectangle + : public generic::NullType + {}; + } +} + +#endif + diff --git a/src/bem3d/src/boundary_mesh/face/Rectangle_tmpl.cpp b/src/bem3d/src/boundary_mesh/face/Rectangle_tmpl.cpp new file mode 100644 index 0000000..9771f7a --- /dev/null +++ b/src/bem3d/src/boundary_mesh/face/Rectangle_tmpl.cpp @@ -0,0 +1,65 @@ +#ifndef HILBERT3D_BOUNDARY_MESH_FACE_RECTANGLE_TMPL_CPP_GUARD_ +#define HILBERT3D_BOUNDARY_MESH_FACE_RECTANGLE_TMPL_CPP_GUARD_ + +#include "Rectangle_tmpl.hpp" +#include "Parallelogram_tmpl.hpp" + +namespace boundary_mesh +{ + namespace face + { + namespace priv + { + template < class TFaceBase, class TMesh > + bool + GenericRectangle__< TFaceBase, TMesh >::is( + const typename std::vector< const typename TMesh::Vertex* > + vertices) + { + return TFaceBase::is( vertices ) && + (*vertices[1] - *vertices[0]) == (*vertices[2] - *vertices[3]); + } + + template < class TFaceBase, class TMesh > + GenericRectangle__< TFaceBase, TMesh >::GenericRectangle__( + const typename TMesh::HalfEdge& halfedge ) + : TFaceBase( halfedge ) + {} + + template < class TFaceBase, class TMesh > + GenericRectangle__< TFaceBase, TMesh >::GenericRectangle__( + const typename TMesh::HalfEdge& halfedge, geoid_t id) + : TFaceBase( halfedge, id ) + {} + + template < class TFaceBase, class TMesh > + double + GenericRectangle__< TFaceBase, TMesh >::computeDiameter() const + { + return (this->getC() - this->getA()).norm(); + } + } + + template < class TMesh > + Rectangle< TMesh >::Rectangle( + const typename TMesh::HalfEdge& halfedge ) + : priv::GenericRectangle__< Parallelogram< TMesh >, TMesh >(halfedge) + {} + + template < class TMesh > + RRectangle< TMesh >::RRectangle( + const typename TMesh::HalfEdge& halfedge, geoid_t id ) + : priv::GenericRectangle__< RParallelogram, TMesh >(halfedge, id) + {} + + template < class TMesh > + double + RRectangle< TMesh >::computeDiameter() const + { + return GenericRectangle::computeDiameter(); + } + } +} + +#endif + diff --git a/src/bem3d/src/boundary_mesh/face/Rectangle_tmpl.hpp b/src/bem3d/src/boundary_mesh/face/Rectangle_tmpl.hpp new file mode 100644 index 0000000..394a09c --- /dev/null +++ b/src/bem3d/src/boundary_mesh/face/Rectangle_tmpl.hpp @@ -0,0 +1,8 @@ +#ifndef HILBERT3D_BOUNDARY_MESH_FACE_RECTANGLE_TMPL_HPP_GUARD_ +#define HILBERT3D_BOUNDARY_MESH_FACE_RECTANGLE_TMPL_HPP_GUARD_ + +#include "Rectangle.hpp" +#include "Rectangle_tmpl.cpp" + +#endif + diff --git a/src/bem3d/src/boundary_mesh/face/Triangle.hpp b/src/bem3d/src/boundary_mesh/face/Triangle.hpp index 75ca88f..247b629 100644 --- a/src/bem3d/src/boundary_mesh/face/Triangle.hpp +++ b/src/bem3d/src/boundary_mesh/face/Triangle.hpp @@ -21,6 +21,7 @@ namespace boundary_mesh GenericTriangle__( const typename TMesh::HalfEdge& halfedge ); GenericTriangle__( const typename TMesh::HalfEdge& halfedge, geoid_t id ); + double computeDiameter() const; double computeArea() const; geoid_t getNumberOfVertices() const; const typename TMesh::Vertex& getA() const; @@ -45,6 +46,7 @@ namespace boundary_mesh public: RTriangle( const typename TMesh::HalfEdge& halfedge, geoid_t id ); + virtual double computeDiameter() const; virtual double computeArea() const; virtual geoid_t getNumberOfVertices() const; virtual dispatchId_t getDispatchId() const; diff --git a/src/bem3d/src/boundary_mesh/face/Triangle_tmpl.cpp b/src/bem3d/src/boundary_mesh/face/Triangle_tmpl.cpp index 9808a27..167a1b4 100644 --- a/src/bem3d/src/boundary_mesh/face/Triangle_tmpl.cpp +++ b/src/bem3d/src/boundary_mesh/face/Triangle_tmpl.cpp @@ -29,7 +29,15 @@ namespace boundary_mesh const typename TMesh::HalfEdge& halfedge, geoid_t id) : TFaceBase( halfedge, id ) {} - + + + template < class TFaceBase, class TMesh > + double + GenericTriangle__< TFaceBase, TMesh >::computeDiameter() const + { + return (getB() - getA()).norm(); + } + template < class TFaceBase, class TMesh > double GenericTriangle__< TFaceBase, TMesh >::computeArea() const @@ -78,6 +86,13 @@ namespace boundary_mesh : priv::GenericTriangle__< RFace< TMesh >, TMesh >( halfedge, id ) {} + template < class TMesh > + double + RTriangle< TMesh >::computeDiameter() const + { + return GenericTriangle::computeDiameter(); + } + template < class TMesh > double RTriangle< TMesh >::computeArea() const diff --git a/src/bem3d/src/boundary_mesh/layer/RefinementData.cpp b/src/bem3d/src/boundary_mesh/layer/RefinementData.cpp deleted file mode 100644 index d02f344..0000000 --- a/src/bem3d/src/boundary_mesh/layer/RefinementData.cpp +++ /dev/null @@ -1,187 +0,0 @@ -#ifdef MESH_LAYER_REFINEMENT_DATA_CPP_GUARD_ -#error -#else -#define MESH_LAYER_REFINEMENT_DATA_CPP_GUARD_ - -#include "RefinementData.hpp" - -namespace boundary_mesh { -namespace layer { - template < class TMesh > - Father2Son< TMesh >::ConstFaceIterator::ConstFaceIterator( - const typename std::list< - const typename TMesh::traits::Face* >::const_iterator& copy ) - : std::list< const typename TMesh::traits::Face* >::const_iterator(copy) - { - } - - template < class TMesh > - const typename TMesh::traits::Face& - Father2Son< TMesh >::ConstFaceIterator::operator*() const - { - return *(std::list< const typename TMesh::traits::Face* > - ::const_iterator::operator*()); - } - - template < class TMesh > - const typename TMesh::traits::Face* - Father2Son< TMesh >::ConstFaceIterator::operator->() const - { - return std::list< const typename TMesh::traits::Face* > - ::const_iterator::operator*(); - } - - template < class TMesh > - typename Father2Son< TMesh >::ConstFaceIterator - Father2Son< TMesh >::begin(const typename TMesh::traits::Face& face) const - { - return Father2Son< TMesh >::begin( fatherMesh_.getFaceId( face ) ); - } - - template < class TMesh > - typename Father2Son< TMesh >::ConstFaceIterator - Father2Son< TMesh >::begin(unsigned int faceId) const - { - assert( faceId >= 0 && faceId < relations_.size() ); - return relations_[faceId].begin(); - } - - template < class TMesh > - typename Father2Son< TMesh >::ConstFaceIterator - Father2Son< TMesh >::end(const typename TMesh::traits::Face& face) const - { - return end( fatherMesh_.getFaceId( face ) ); - } - - template < class TMesh > - typename Father2Son< TMesh >::ConstFaceIterator - Father2Son< TMesh >::end(unsigned int faceId) const - { - assert( faceId >= 0 && faceId < relations_.size() ); - return relations_[faceId].end(); - } - - template < class TMesh > - Father2Son< TMesh >::Father2Son( const TMesh& fatherMesh, - const TMesh& sonMesh, unsigned int fatherFaces ) - : fatherMesh_(fatherMesh), sonMesh_(sonMesh), - relations_( - std::vector< std::list >( - fatherFaces)) - { - } - - template < class TMesh > - void - Father2Son< TMesh >::addRelation( - const typename TMesh::traits::Face& father, - const typename TMesh::traits::Face& son) - { - relations_[ fatherMesh_.getFaceId( father ) ].push_back( &son ); - } - - template < class TMesh > - const typename TMesh::traits::Face& - Son2Father< TMesh >::getFather( - const typename TMesh::traits::Face& son ) const - { - return getFather( sonMesh_.getFaceId( son ) ); - } - - template < class TMesh > - const typename TMesh::traits::Face& - Son2Father< TMesh >::getFather(unsigned int sonId) const - { - assert( sonId >= 0 && sonId < sonMesh_.getNumberOfFaces() ); - return *(relations_[ sonId ]); - } - - template < class TMesh > - Son2Father< TMesh >::Son2Father( const TMesh& fatherMesh, - const TMesh& sonMesh, unsigned int sonFaces ) - : fatherMesh_(fatherMesh), sonMesh_(sonMesh), - relations_(std::vector< const typename TMesh::traits::Face* >( - sonFaces)) - { - } - - template < class TMesh > - void - Son2Father< TMesh >::addRelation( - const typename TMesh::traits::Face& father, - const typename TMesh::traits::Face& son) - { - relations_[ sonMesh_.getFaceId( son ) ] = &father; - } - - template < class TMesh > - RefinementData< TMesh >::RefinementData( - TMesh fatherMesh, unsigned int fatherFaces, - TMesh sonMesh, unsigned int sonFaces, - enum RefinementDataRequest request ) - : fatherMesh_(fatherMesh), sonMesh_(sonMesh), - father2son_(0), son2father_(0) - { - if (request & RequireFather2Son != 0) - father2son_ = new Father2Son< TMesh >( - fatherMesh, sonMesh, fatherFaces); - if (request & RequireSon2Father != 0) - son2father_ = new Son2Father< TMesh >( - fatherMesh, sonMesh, sonFaces); - } - - template < class TMesh > - RefinementData< TMesh >::~RefinementData() - { - if (father2son_ != 0) - delete father2son_; - if (son2father_ != 0) - delete son2father_; - } - - template < class TMesh > - const TMesh& - RefinementData< TMesh >::getFatherMesh() const - { - return fatherMesh_; - } - - template < class TMesh > - const TMesh& - RefinementData< TMesh >::getSonMesh() const - { - return sonMesh_; - } - - template < class TMesh > - const Father2Son< TMesh >& - RefinementData< TMesh >::father2son() const - { - assert( father2son_ != 0 ); - return *father2son_; - } - - template < class TMesh > - const Son2Father< TMesh >& - RefinementData< TMesh >::son2father() const - { - assert( son2father_ != 0 ); - return *son2father_; - } - - template < class TMesh > - void - RefinementData< TMesh >::addRelation( - const typename TMesh::traits::Face& father, - const typename TMesh::traits::Face& son) - { - if (father2son_ != 0) - father2son_->addRelation(father, son); - if (son2father_ != 0) - son2father_->addRelation(father, son); - } -} -} - -#endif - diff --git a/src/bem3d/src/boundary_mesh/layer/RefinementData.hpp b/src/bem3d/src/boundary_mesh/layer/RefinementData.hpp deleted file mode 100644 index 7d9fe9e..0000000 --- a/src/bem3d/src/boundary_mesh/layer/RefinementData.hpp +++ /dev/null @@ -1,117 +0,0 @@ -#ifndef MESH_LAYER_REFINEMENT_DATA_HPP_GUARD_ -#define MESH_LAYER_REFINEMENT_DATA_HPP_GUARD_ - -namespace boundary_mesh { -namespace layer { - enum RefinementDataRequest - { - RequireNone = 0, - RequireFather2Son = 1, - RequireSon2Father = 2, - RequireBoth = 3, - }; - - typedef enum RefinementDataRequest RefinementDataRequest; - - template < class TMesh > - class Father2Son - { - template < class T > friend class RefinementData; - - public: - class ConstFaceIterator - : public std::list< - const typename TMesh::traits::Face* >::const_iterator - { - public: - ConstFaceIterator( const typename std::list< - const typename TMesh::traits::Face* >::const_iterator& copy ); - const typename TMesh::traits::Face& operator*() const; - const typename TMesh::traits::Face* operator->() const; - }; - - ConstFaceIterator begin(const typename TMesh::traits::Face& face) const; - ConstFaceIterator begin(unsigned int faceId) const; - ConstFaceIterator end(const typename TMesh::traits::Face& face) const; - ConstFaceIterator end(unsigned int faceId) const; - - private: - // It is forbidden to create an empty Father2Son container or to - // copy it using either the copy constructor or the assignement operator. - // To detect these errors early, the methods are declared here but not - // defined anywhere: - Father2Son(); - Father2Son< TMesh >& operator=(const Father2Son< TMesh >&); - Father2Son(const Father2Son< TMesh >&); - - Father2Son(const TMesh& fatherMesh, const TMesh& sonMesh, - unsigned int fatherFaces); - void addRelation( const typename TMesh::traits::Face& father, - const typename TMesh::traits::Face& son ); - - const TMesh& fatherMesh_; - const TMesh& sonMesh_; - std::vector< std::list< const typename TMesh::traits::Face* > > - relations_; - }; - - template < class TMesh > - class Son2Father - { - template < class T > friend class RefinementData; - - public: - const typename TMesh::traits::Face& - getFather( const typename TMesh::traits::Face& son ) const; - const typename TMesh::traits::Face& - getFather( unsigned int sonId ) const; - - private: - // It is forbidden to create an empty Son2Father container or to - // copy it using either the copy constructor or the assignement operator. - // To detect these errors early, the methods are declared here but not - // defined anywhere: - Son2Father(); - Son2Father< TMesh >& operator=(const Son2Father< TMesh >&); - Son2Father(const Son2Father< TMesh >&); - - Son2Father( const TMesh& fatherMesh, const TMesh& sonMesh, - unsigned int sonFaces ); - void addRelation( const typename TMesh::traits::Face& father, - const typename TMesh::traits::Face& son ); - - const TMesh& fatherMesh_; - const TMesh& sonMesh_; - std::vector< const typename TMesh::traits::Face* > relations_; - }; - - template < class TMesh > - class RefinementData - { - public: - RefinementData(TMesh father, unsigned int fatherFaces, - TMesh son, unsigned int sonFaces, - RefinementDataRequest req); - ~RefinementData(); - - const TMesh& getFatherMesh() const; - const TMesh& getSonMesh() const; - const Father2Son< TMesh >& father2son() const; - const Son2Father< TMesh >& son2father() const; - - void addRelation( const typename TMesh::traits::Face& father, - const typename TMesh::traits::Face& son); - - private: - const TMesh fatherMesh_; - const TMesh sonMesh_; - Father2Son< TMesh >* father2son_; - Son2Father< TMesh >* son2father_; - }; -} -} - -#include "RefinementData.cpp" - -#endif - diff --git a/src/bem3d/src/boundary_mesh/testhilbertmesh b/src/bem3d/src/boundary_mesh/testhilbertmesh deleted file mode 100755 index d49c645eb0368dc4ee4a55e8080a16ea7c9da947..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1283752 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

B6<{%%uJ|kwYbqJqEf?ecdMWu$x-0mUkM|iQf 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

o7kW=;tV7BO%OCqtXCDs=}-QD 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%0Al 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 diff --git a/src/bem3d/src/boundary_mesh/types.hpp b/src/bem3d/src/boundary_mesh/types.hpp index a4d96f8..5d2c3a5 100644 --- a/src/bem3d/src/boundary_mesh/types.hpp +++ b/src/bem3d/src/boundary_mesh/types.hpp @@ -5,8 +5,6 @@ namespace boundary_mesh { typedef unsigned int geoid_t; - - const geoid_t geoid_t_max = std::numeric_limits< unsigned int >::max(); } #endif diff --git a/src/bem3d/src/generic/BaseTypes.hpp b/src/bem3d/src/generic/BaseTypes.hpp index dde4540..a603a37 100644 --- a/src/bem3d/src/generic/BaseTypes.hpp +++ b/src/bem3d/src/generic/BaseTypes.hpp @@ -3,8 +3,6 @@ namespace generic { - struct NullType; - struct NullType { static const bool isNullType = true; @@ -12,12 +10,6 @@ namespace generic struct EmptyType {}; - - template - struct WorkAround - { - WorkAround(int) {} - }; } #endif diff --git a/src/bem3d/src/generic/GenericVector.hpp b/src/bem3d/src/generic/GenericVector.hpp index e758b49..da50103 100644 --- a/src/bem3d/src/generic/GenericVector.hpp +++ b/src/bem3d/src/generic/GenericVector.hpp @@ -1,6 +1,7 @@ #ifndef HILBERT3D_GENERIC_GENERIC_VECTOR_HPP_GUARD_ #define HILBERT3D_GENERIC_GENERIC_VECTOR_HPP_GUARD_ +#include #include namespace generic { @@ -101,6 +102,12 @@ namespace generic { const GenericVector< DIM, BaseType, Traits > operator*(const BaseType, const GenericVector< DIM, BaseType, Traits >&); + template< unsigned int DIM, class BaseType, class Traits > + bool + operator<( + const GenericVector< DIM, BaseType, Traits >& lhs, + const GenericVector< DIM, BaseType, Traits >& rhs); + template < unsigned int DIM, class BaseType, class Traits > std::ostream& operator<<( std::ostream& out, diff --git a/src/bem3d/src/generic/GenericVector_tmpl.cpp b/src/bem3d/src/generic/GenericVector_tmpl.cpp index 13d5fa3..fc68074 100644 --- a/src/bem3d/src/generic/GenericVector_tmpl.cpp +++ b/src/bem3d/src/generic/GenericVector_tmpl.cpp @@ -1,10 +1,8 @@ -#ifdef MESH_GENERIC_VERTEX_CPP_GUARD_ -#error "This file must not be included or compiled directly!" -#else +#ifndef MESH_GENERIC_VERTEX_CPP_GUARD_ #define MESH_GENERIC_VERTEX_CPP_GUARD_ #include -#include "GenericVector.hpp" +#include namespace generic { template < unsigned int DIM, class BaseType, class Traits > @@ -190,7 +188,7 @@ operator==( { for (unsigned int i = 0; i < DIM; ++i) { - if (lhs[i] != rhs[i]) + if (Traits::abs(lhs[i] - rhs[i]) > Traits::eps) return false; } return true; @@ -277,6 +275,22 @@ operator*( return result; } +template < unsigned int DIM, class BaseType, class Traits > +bool +operator<( + const GenericVector< DIM, BaseType, Traits >& lhs, + const GenericVector< DIM, BaseType, Traits >& rhs) +{ + for (unsigned int i = 0; i < DIM; ++i) + { + if ( lhs[i] < rhs[i] ) + return true; + else if ( lhs[i] > rhs[i] ) + return false; + } + return false; +} + template < unsigned int DIM, class BaseType, class Traits > std::ostream& operator<<( std::ostream& out, @@ -288,7 +302,6 @@ operator<<( std::ostream& out, out << rhs[DIM-1] << " ]"; return out; } - } #endif diff --git a/src/bem3d/src/generic/PtrCompare.hpp b/src/bem3d/src/generic/PtrCompare.hpp new file mode 100644 index 0000000..42a0120 --- /dev/null +++ b/src/bem3d/src/generic/PtrCompare.hpp @@ -0,0 +1,39 @@ +#ifndef HILBERT3D_GENERIC_PTRCOMPARE_HPP_GUARD_ +#define HILBERT3D_GENERIC_PTRCOMPARE_HPP_GUARD_ + +#include + +namespace generic +{ + template < class T > struct PtrObjectLess + : public std::binary_function< T*, T*, bool > + { + bool operator()(const T* lhs, const T* rhs) + { + return *lhs < *rhs; + } + }; + + template < class T > struct PtrObjectEqual + : public std::binary_function< T*, T*, bool > + { + bool operator()(const T* lhs, const T* rhs) + { + return *lhs == *rhs; + } + }; + + template < class TSet, class TObject > + class SetInsertFunctor + { + public: + SetInsertFunctor( TSet* set ) + : set_(set) {} + void operator()(const TObject& o) { set_->insert(&o); } + private: + TSet* set_; + }; +} + +#endif + diff --git a/src/bem3d/src/generic/ReferenceSemanticsForPtrVectorConstIterator.hpp b/src/bem3d/src/generic/ReferenceSemanticsForPtrVectorConstIterator.hpp new file mode 100644 index 0000000..2cbd43c --- /dev/null +++ b/src/bem3d/src/generic/ReferenceSemanticsForPtrVectorConstIterator.hpp @@ -0,0 +1,65 @@ +#ifndef HILBERT3D_GENERIC_REFERENCESEMANTICSFORPTRVECTORCONSTITERATOR_HPP_GUARD_ +#define HILBERT3D_GENERIC_REFERENCESEMANTICSFORPTRVECTORCONSTITERATOR_HPP_GUARD_ + +#include +#include + +namespace hilbert3d +{ + namespace generic + { + template < class TVector > + class ReferenceSemanticsForPtrVectorConstIterator + : public std::iterator< std::input_iterator_tag, + typename boost::remove_pointer::type > + { + typedef + typename boost::remove_pointer::type + NewValueType; + + public: + ReferenceSemanticsForPtrVectorConstIterator( + const typename TVector::const_iterator& iterator) + : iterator_(iterator) + {} + + ReferenceSemanticsForPtrVectorConstIterator& + operator++() + { + ++iterator_; + } + + bool + operator==( + const ReferenceSemanticsForPtrVectorConstIterator& rhs) const + { + return iterator_ == rhs.iterator_; + } + + bool + operator!=( + const ReferenceSemanticsForPtrVectorConstIterator& rhs) const + { + return iterator_ != rhs.iterator_; + } + + const NewValueType& + operator*() const + { + return **iterator_; + } + + const NewValueType* + operator->() const + { + return *iterator_; + } + + private: + typename TVector::const_iterator iterator_; + }; + } +} + +#endif + diff --git a/src/bem3d/src/generic/SingleElementIterator.hpp b/src/bem3d/src/generic/SingleElementIterator.hpp new file mode 100644 index 0000000..2f32724 --- /dev/null +++ b/src/bem3d/src/generic/SingleElementIterator.hpp @@ -0,0 +1,53 @@ +#ifndef HILBERT3D_GENERIC_SINGLEELEMENTITERATOR_HPP_GUARD_ +#define HILBERT3D_GENERIC_SINGLEELEMENTITERATOR_HPP_GUARD_ + +#include + +namespace hilbert3d +{ + namespace generic + { + template < class T > + class SingleElementIterator + : public std::iterator< std::input_iterator_tag, T > + { + public: + SingleElementIterator() + : elementPtr_(0) + {} + SingleElementIterator( const T& element ) + : elementPtr_(&element) + {} + SingleElementIterator& operator++() + { + assert(elementPtr_ != 0); + elementPtr_ = 0; + return *this; + } + bool operator==(const SingleElementIterator& rhs) const + { + elementPtr_ == rhs.elementPtr_; + } + bool operator!=(const SingleElementIterator& rhs) const + { + elementPtr_ != rhs.elementPtr_; + } + const T& operator*() const + { + assert(elementPtr_ != 0); + return *elementPtr_; + } + const T* operator->() const + { + assert(elementPtr_ != 0); + return elementPtr_; + } + + private: + const T* elementPtr_; + }; + } +} + +#endif + diff --git a/src/bem3d/src/generic/Testing.hpp b/src/bem3d/src/generic/Testing.hpp new file mode 100644 index 0000000..290c841 --- /dev/null +++ b/src/bem3d/src/generic/Testing.hpp @@ -0,0 +1,10 @@ +#ifndef HILBERT3D_GENERIC_TESTING_HPP_GUARD_ +#define HILBERT3D_GENERIC_TESTING_HPP_GUARD_ + +namespace testing +{ + template < class TMesh > class Tester; +} + +#endif + diff --git a/src/bem3d/src/generic/TypeMap.hpp b/src/bem3d/src/generic/TypeMap.hpp new file mode 100644 index 0000000..10209b2 --- /dev/null +++ b/src/bem3d/src/generic/TypeMap.hpp @@ -0,0 +1,29 @@ +#ifndef HILBERT3D_GENERIC_TYPEMAP_HPP_GUARD_ +#define HILBERT3D_GENERIC_TYPEMAP_HPP_GUARD_ + +#include +#include + +namespace hilbert3d +{ +namespace generic +{ + template < class TValue > + class TypeMap + { + public: + TypeMap(); + + template < class TKey > + void insert( const TValue& value ); + + const TValue& get( const ::Loki::TypeInfo& type ) const; + + private: + std::map< ::Loki::TypeInfo, TValue > map_; + }; +} +} + +#endif + diff --git a/src/bem3d/src/generic/TypeMap_tmpl.cpp b/src/bem3d/src/generic/TypeMap_tmpl.cpp new file mode 100644 index 0000000..215b578 --- /dev/null +++ b/src/bem3d/src/generic/TypeMap_tmpl.cpp @@ -0,0 +1,42 @@ +#ifndef HILBERT3D_GENERIC_TYPEMAP_TMPL_CPP_GUARD_ +#define HILBERT3D_GENERIC_TYPEMAP_TMPL_CPP_GUARD_ + +#include "TypeMap_tmpl.hpp" +#include + +namespace hilbert3d +{ +namespace generic +{ + template < class TValue > + TypeMap< TValue >::TypeMap() + : map_( std::map< ::Loki::TypeInfo, TValue >() ) + {} + + template < class TValue > + template < class TKey > + void + TypeMap< TValue >::insert( const TValue& value ) + { + if ( typeid( TKey ) != typeid( ::Loki::NullType ) ) + { + map_.insert( std::pair< ::Loki::TypeInfo, TValue >( + typeid( TKey ), value )); + } + } + + template < class TValue > + const TValue& + TypeMap< TValue >::get( + const ::Loki::TypeInfo& type) const + { + typename std::map< ::Loki::TypeInfo, TValue >::const_iterator it = + map_.find( typeid( type ) ); + // XXX: Potentially dangerous, it might be equal to map_.end(). + return it->second; + } +} +} + +#endif + diff --git a/src/bem3d/src/generic/TypeMap_tmpl.hpp b/src/bem3d/src/generic/TypeMap_tmpl.hpp new file mode 100644 index 0000000..55db7c4 --- /dev/null +++ b/src/bem3d/src/generic/TypeMap_tmpl.hpp @@ -0,0 +1,8 @@ +#ifndef HILBERT3D_GENERIC_TYPEMAP_TMPL_HPP_GUARD_ +#define HILBERT3D_GENERIC_TYPEMAP_TMPL_HPP_GUARD_ + +#include "TypeMap.hpp" +#include "TypeMap_tmpl.cpp" + +#endif + diff --git a/src/bem3d/src/hilbert.hpp b/src/bem3d/src/hilbert.hpp index d08d2a4..0ae2f48 100644 --- a/src/bem3d/src/hilbert.hpp +++ b/src/bem3d/src/hilbert.hpp @@ -5,6 +5,6 @@ typedef boundary_mesh::FlexibleMesh BoundaryMesh; -#include "spaces/P0Space.hpp" // MK: warum muss dieses include nach dem typedefine in zeile 6 stehen?? sonst gehts nämlich nicht... +//#include "spaces/P0Space.hpp" // MK: warum muss dieses include nach dem typedefine in zeile 6 stehen?? sonst gehts nämlich nicht... #endif diff --git a/src/bem3d/src/laplace/.deps/testLaplace-SimpleLayerPotential.Po b/src/bem3d/src/laplace/.deps/testLaplace-SimpleLayerPotential.Po index aeedc5c..2399144 100644 --- a/src/bem3d/src/laplace/.deps/testLaplace-SimpleLayerPotential.Po +++ b/src/bem3d/src/laplace/.deps/testLaplace-SimpleLayerPotential.Po @@ -409,7 +409,7 @@ testLaplace-SimpleLayerPotential.o: SimpleLayerPotential.cpp \ /usr/local/include/HLib/surfacebem.h /usr/local/include/HLib/bem3d.h \ /usr/local/include/HLib/h2virtual.h /usr/local/include/HLib/aca.h \ /usr/local/include/HLib/quadrature2d.h ../HLibOperator_tmpl.cpp \ - ../spaces/P0Space.hpp TriangleIntegrator.hpp + ../spaces/P0Space.hpp TriangleIntegrator.hpp SLPrectangle.hpp SimpleLayerPotential.hpp: @@ -1428,3 +1428,5 @@ SimpleLayerPotential.hpp: ../spaces/P0Space.hpp: TriangleIntegrator.hpp: + +SLPrectangle.hpp: diff --git a/src/bem3d/src/laplace/DoubleLayerPotential.cpp b/src/bem3d/src/laplace/DoubleLayerPotential.cpp new file mode 100644 index 0000000..b80fb7e --- /dev/null +++ b/src/bem3d/src/laplace/DoubleLayerPotential.cpp @@ -0,0 +1,152 @@ +#include "DoubleLayerPotential.hpp" +#include "../boundary_mesh/FaceDispatch.hpp" +#include "../spaces/P0Space.hpp" +#include "../spaces/P1Space.hpp" +#include "TriangleIntegrator.hpp" +#include "../generic/Testing.hpp" + +#include + +namespace laplace +{ + template < class TMesh > + class ComputeDoubleLayerPotentialEntryComponentImpl + { + friend class testing::Tester< TMesh >; + + class TriangleHelpers + { + static double remainingIntegralHelper( + double A, double B, double G, + double alpha, double s, double p, double q, + double u_x, double s_x, double s_tau, + int sgn) + { + double u_x_sgn = (u_x > 0.) - (u_x < 0.); + double v = (std::sqrt( (1+alpha*alpha)*(s-p)*(s-p)+q*q ) - q) / + (std::sqrt(1+alpha*alpha) * (s-p)); + return -sgn * .5 * u_x * std::log(v*v+A*v+B) + + sgn * (s_tau - s_x) * u_x_sgn + * std::atan( (2*v+A)/(2*G) ); + } + + static double remainingIntegral( + double alpha, double s, double p, double q, + double u_x, double s_x, double t_x, double s_tau) + { + double A1 = 2*alpha*std::sqrt(1+alpha*alpha)*q; + double A2 = (1+alpha*alpha)*q - (alpha*s_x - t_x); + double B1 = 2*alpha*(t_x - alpha*s_x); + double B2 = std::sqrt(1+alpha*alpha)*(t_x - alpha*s_x + q); + double G1 = std::sqrt(B1 - .25 * A1*A1); // XXX: Potential weakness. + double G2 = std::sqrt(B2 - .25 * A2*A2); + return 2*(u_x / (u_x*u_x + alpha*alpha*q*q)) * ( + remainingIntegralHelper( A1, B1, G1, alpha, s, p, q, + u_x, s_x, s_tau, 1) + + remainingIntegralHelper( A2, B2, G2, alpha, s, p, q, + u_x, s_x, s_tau, -1)); + } + + static double computeF( + double s, double alpha, + double u_x, double s_x, double t_x, + double s_tau) + { + double p = (alpha * t_x + s_x) / std::log( 1+alpha*alpha ); + double q = std::sqrt(u_x*u_x + + (t_x-alpha*s_x)*(t_x-alpha*s_x) / (1+alpha*alpha)); + return u_x * remainingIntegral(alpha, s, p, q, u_x, s_x, t_x, s_tau) + - (u_x * alpha / std::sqrt(1+alpha*alpha) * + std::log( std::sqrt(1+alpha*alpha) * (s-p) + + std::sqrt((1+alpha*alpha)*(s-p)*(s-p)+q*q) )); + } + + public: + static double computeLocalContributionDi( + const typename TMesh::Prop::Triangle& tau, + const typename TMesh::UVertex& x) + { + typename TMesh::UVertex r2 = tau.getC() - tau.getB(); + double t_tau = r2.norm(); + r2 /= t_tau; + double t_star = ( tau.getA() - tau.getB() ) * r2; + const typename TMesh::UVertex x_star = tau.getB() + t_star*r2; + typename TMesh::UVertex r1 = x_star - tau.getA(); + double s_tau = r1.norm(); + r1 /= s_tau; + const typename TMesh::UVertex n = TMesh::UVertex::crossProduct(r1,r2); + double alpha1 = - t_star / s_tau; + double alpha2 = (t_tau - t_star) / s_tau; + double s_x = (x-tau.getA()) * r1; + double t_x = (x-tau.getA()) * r2; + double u_x = (x-tau.getA()) * n; + + return .25 * M_PI * ( + computeF( s_tau, alpha2, u_x, s_x, t_x, s_tau ) + - computeF( 0., alpha2, u_x, s_x, t_x, s_tau ) + - computeF( s_tau, alpha1, u_x, s_x, t_x, s_tau ) + + computeF( 0, alpha1, u_x, s_x, t_x, s_tau )); + } + }; + + HILBERT3D_DISPATCH_PARAMETERS_0( + ComputeDoubleLayerPotentialEntryComponentImpl,double); + + HILBERT3D_DOUBLE_DISPATCH_IMPLEMENTATION_FOR( + TMesh::Prop::Triangle, TMesh::Prop::Triangle) + { + TriangleIntegrator integrator; + + if ( face1.computeArea() < face2.computeArea() ) + { + return integrator.integrate( face1, face2, + TriangleHelpers::computeLocalContributionDi); + } + else + { + return integrator.integrate( face2, face1, + TriangleHelpers::computeLocalContributionDi); + } + } + + HILBERT3D_DOUBLE_DISPATCH_IMPLEMENTATION_FOR( + TMesh::Face, TMesh::Face) + { + assert(0); + } + }; + + DoubleLayerPotential::DoubleLayerPotential( + const space::P1Space& ansatzSpace, + const space::P0Space& testSpace) + : HLibOperator< space::P1Space, space::P0Space >( + ansatzSpace, testSpace, DoubleLayerPotential::computeEntry) + {} + + DoubleLayerPotential::~DoubleLayerPotential() + {} + + double + DoubleLayerPotential::computeEntry( + const space::P1Space::Element& ansatz, + const space::P0Space::Element& test) + { + typedef boundary_mesh::DoubleFaceDispatcher< + ComputeDoubleLayerPotentialEntryComponentImpl< BoundaryMesh >, + BoundaryMesh, double > + ComputeDoubleLayerPotentialEntryComponent; + + double sum = 0.; + const BoundaryMesh::Prop::Face& testFace = test.getSupport(); + for ( space::P1Space::Element::ConstFaceIterator + ansatzIt = ansatz.begin(); ansatzIt != ansatz.end(); ++ansatzIt) + { + sum += ComputeDoubleLayerPotentialEntryComponent::Exec( + testFace, *ansatzIt, + ComputeDoubleLayerPotentialEntryComponent::PARAM()); + } + + return sum; + } +} + diff --git a/src/bem3d/src/laplace/DoubleLayerPotential.hpp b/src/bem3d/src/laplace/DoubleLayerPotential.hpp new file mode 100644 index 0000000..36e88a8 --- /dev/null +++ b/src/bem3d/src/laplace/DoubleLayerPotential.hpp @@ -0,0 +1,31 @@ +#ifndef HILBERT3D_LAPLACE_DOUBLELAYERPOTENTIAL_HPP_GUARD_ +#define HILBERT3D_LAPLACE_DOUBLELAYERPOTENTIAL_HPP_GUARD_ + +#include "../hilbert.hpp" +#include "../HLibOperator.hpp" +#include "../spaces/P0Space.hpp" +#include "../spaces/P1Space.hpp" + +namespace laplace +{ + template < class TMesh = BoundaryMesh > + class ComputeDoubleLayerPotentialEntry; + + class DoubleLayerPotential + : public HLibOperator< space::P1Space, space::P0Space > + { + public: + DoubleLayerPotential( + const space::P1Space& ansatzSpace, + const space::P0Space& testSpace); + virtual ~DoubleLayerPotential(); + + private: + static double computeEntry( + const space::P1Space::Element& ansatz, + const space::P0Space::Element& test); + }; +} + +#endif + diff --git a/src/bem3d/src/laplace/Makefile b/src/bem3d/src/laplace/Makefile index 4ebbb2c..b1befa1 100644 --- a/src/bem3d/src/laplace/Makefile +++ b/src/bem3d/src/laplace/Makefile @@ -41,7 +41,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_boost_base.m4 \ $(top_srcdir)/m4/ax_boost_regex.m4 $(top_srcdir)/m4/ax_hlib.m4 \ - $(top_srcdir)/m4/ax_lapack.m4 \ + $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_lib_loki.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) @@ -102,6 +102,8 @@ CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run aclocal-1.11 AMTAR = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run tar +AM_CXXFLAGS = +AM_LDFLAGS = AUTOCONF = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run autoconf AUTOHEADER = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run autoheader AUTOMAKE = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run automake-1.11 @@ -113,7 +115,7 @@ BOOST_REGEX_LIB = -lboost_regex-mt BOOST_ROOT_PATH = /usr CC = gcc CCDEPMODE = depmode=gcc3 -CFLAGS = -g -O2 +CFLAGS = -I/usr/local/include CPP = gcc -E CPPFLAGS = CXX = g++ @@ -168,6 +170,9 @@ LAPACK_LIBS = -llapack LDFLAGS = LIBOBJS = LIBS = +LOKI_CPPFLAGS = -I/usr/local/include +LOKI_LDFLAGS = -L/usr/local/lib +LOKI_ROOT_PATH = /usr/local LTLIBOBJS = MAKEINFO = ${SHELL} /home/treecity/workspace/bacc/src/bem3d/missing --run makeinfo MKDIR_P = /bin/mkdir -p diff --git a/src/bem3d/src/laplace/Makefile.am b/src/bem3d/src/laplace/Makefile.am index 8341f54..2286425 100644 --- a/src/bem3d/src/laplace/Makefile.am +++ b/src/bem3d/src/laplace/Makefile.am @@ -13,4 +13,3 @@ testLaplace_HEADERS = \ ../spaces/P0Space.hpp testLaplace_LDADD = $(BOOST_REGEX_LIB) ../boundary_mesh/libhilbert-mesh.a ../spaces/libhilbert-spaces.a $(HLIB_LDFLAGS) $(HLIB_LIB) $(BLAS_LIBS) $(LAPACK_LIBS) $(LIBS) $(FLIBS) testLaplace_CPPFLAGS = $(CPPFLAGS) $(HLIB_CPPFLAGS) - diff --git a/src/bem3d/src/laplace/Makefile.in b/src/bem3d/src/laplace/Makefile.in index 41158f7..4f0968b 100644 --- a/src/bem3d/src/laplace/Makefile.in +++ b/src/bem3d/src/laplace/Makefile.in @@ -41,7 +41,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_blas.m4 \ $(top_srcdir)/m4/ax_boost_base.m4 \ $(top_srcdir)/m4/ax_boost_regex.m4 $(top_srcdir)/m4/ax_hlib.m4 \ - $(top_srcdir)/m4/ax_lapack.m4 \ + $(top_srcdir)/m4/ax_lapack.m4 $(top_srcdir)/m4/ax_lib_loki.m4 \ $(top_srcdir)/m4/ax_prog_doxygen.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) @@ -102,6 +102,8 @@ CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AM_CXXFLAGS = @AM_CXXFLAGS@ +AM_LDFLAGS = @AM_LDFLAGS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -168,6 +170,9 @@ LAPACK_LIBS = @LAPACK_LIBS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ +LOKI_CPPFLAGS = @LOKI_CPPFLAGS@ +LOKI_LDFLAGS = @LOKI_LDFLAGS@ +LOKI_ROOT_PATH = @LOKI_ROOT_PATH@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ diff --git a/src/bem3d/src/laplace/SimpleLayerPotential.cpp b/src/bem3d/src/laplace/SimpleLayerPotential.cpp index 8fd3573..99a2856 100644 --- a/src/bem3d/src/laplace/SimpleLayerPotential.cpp +++ b/src/bem3d/src/laplace/SimpleLayerPotential.cpp @@ -4,51 +4,64 @@ #include "TriangleIntegrator.hpp" #include "SLPrectangle.hpp" // Bibliothek fuer achsenorientierte Rechtecke + #include +#include + +#define eps 1e-9 using namespace laplace; -SimpleLayerPotential::SimpleLayerPotential(const space::P0Space& space) : - HLibOperator ( - space, space, SimpleLayerPotential::computeEntry) { +SimpleLayerPotential::SimpleLayerPotential(const space::P0Space& space) + : HLibOperator< space::P0Space, space::P0Space, SymmetricMatrix >( + space, space, SimpleLayerPotential::computeEntry) +{ } -SimpleLayerPotential::~SimpleLayerPotential() { +SimpleLayerPotential::~SimpleLayerPotential() +{ } -template -double ComputeSimpleLayerPotentialEntry::exec( - const typename TMesh::Prop::Triangle& f1, - const typename TMesh::Prop::Triangle& f2) const { - TriangleIntegrator integrator = TriangleIntegrator(); - - if (f1.computeArea() < f2.computeArea()) { - return integrator.integrate(f1, f2, computeInnerIntegralForTriangles); - } else { - return integrator.integrate(f2, f1, computeInnerIntegralForTriangles); - } +template < class TMesh > +double ComputeSimpleLayerPotentialEntry< TMesh >::exec( + const typename TMesh::Prop::Triangle& f1, + const typename TMesh::Prop::Triangle& f2) const +{ + TriangleIntegrator integrator = TriangleIntegrator(); + + if ( f1.computeArea() < f2.computeArea() ) + { + return integrator.integrate( f1, f2, + computeInnerIntegralForTriangles); + } + else + { + return integrator.integrate( f2, f1, + computeInnerIntegralForTriangles); + } } -template -double ComputeSimpleLayerPotentialEntry::exec( - const typename TMesh::Prop::Parallelogram& f1, - const typename TMesh::Prop::Parallelogram& f2) const { +template < class TMesh > +double ComputeSimpleLayerPotentialEntry< TMesh >::exec( + const typename TMesh::Prop::Parallelogram& f1, + const typename TMesh::Prop::Parallelogram& f2) const +{ // Zwischenvariable fuer die Loesung (kann fuer geschwindigkeit entfernt werden) double sol = NAN; // Flaechenstueck 1 - const typename TMesh::Vertex& xa = f1.getA() - f1.getB(); - const typename TMesh::Vertex& xb = f1.getA() - f1.getD(); - const typename TMesh::Vertex& xn = f1.getA() * f1.getD(); //todo Kreuzprodukt!? + const typename TMesh::UVertex& xa = f1.getB() - f1.getA(); + const typename TMesh::UVertex& xb = f1.getD() - f1.getA(); + const typename TMesh::UVertex& xn = TMesh::UVertex::crossProduct(xa, xb); // Flaechenstueck 2 - const typename TMesh::Vertex& ya = f2.getA() - f1.getB(); - const typename TMesh::Vertex& yb = f2.getA() - f1.getD(); - const typename TMesh::Vertex& yn = f2.getA() * f2.getD(); //todo Kreuzprodukt!? + const typename TMesh::UVertex& ya = f2.getB() - f1.getA(); + const typename TMesh::UVertex& yb = f2.getD() - f1.getA(); + const typename TMesh::UVertex& yn = TMesh::UVertex::crossProduct(ya, yb); // Abstand zwischen den Stuecken (Achtung) abstand von den beiden "kleinsten" Ecken - const typename TMesh::Vertex& d = NULL; //todo new??? + typename TMesh::UVertex d; //Variablen fuer LageInformationen int rx, rxa, rxb, ry, rya, ryb; @@ -78,15 +91,15 @@ double ComputeSimpleLayerPotentialEntry::exec( //kleinste Ecke finden und fuer \delta verwenden if (xa[rxa] > 0) { if (xb[rxb] > 0) { - d = -f1.getA; + d -= f1.getA(); } else { - d = -f1.getD; + d -= f1.getD(); } } else { if (xb[rxb] > 0) { - d = -f1.getB; + d -= f1.getB(); } else { - d = -f1.getC; + d -= f1.getC(); } } @@ -115,15 +128,15 @@ double ComputeSimpleLayerPotentialEntry::exec( //kleinste Ecke finden und fuer \delta verwenden if (ya[rya] > 0) { if (yb[ryb] > 0) { - d += f2.getA; //todo += definiert??? sonst d = d + ... + d += f2.getA(); //todo += definiert??? sonst d = d + ... } else { - d += f2.getD; //todo += definiert??? sonst d = d + ... + d += f2.getD(); //todo += definiert??? sonst d = d + ... } } else { if (yb[ryb] > 0) { - d += f2.getB; //todo += definiert??? sonst d = d + ... + d += f2.getB(); //todo += definiert??? sonst d = d + ... } else { - d += f2.getC; //todo += definiert??? sonst d = d + ... + d += f2.getC(); //todo += definiert??? sonst d = d + ... } } @@ -152,7 +165,7 @@ double ComputeSimpleLayerPotentialEntry::exec( sol /= 2.; } - return sol / (4. * PI); + return sol / (4. * M_PI); } double SimpleLayerPotential::computeEntry(const space::P0Space::Element &e1, @@ -165,122 +178,155 @@ double SimpleLayerPotential::computeEntry(const space::P0Space::Element &e1, ComputeSimpleLayerPotentialEntry ()); } -template -double ComputeSimpleLayerPotentialEntry::computeInnerIntegralForTriangles( - const typename TMesh::Prop::Triangle& tau, - const typename TMesh::UVertex& x) { - BoundaryMesh::Face::ConstVertexIterator vIt = tau.begin_v(); - const BoundaryMesh::UVertex& x1 = *vIt; - ++vIt; - const BoundaryMesh::UVertex& x2 = *vIt; - ++vIt; - const BoundaryMesh::UVertex& x3 = *vIt; - ++vIt; - - // determine a local orthogonal coordinate system (r1,r2,n) on the triangle tau - double t_tau = (x3 - x2).norm(); - BoundaryMesh::UVertex r2 = (x3 - x2) / t_tau; - double t_star = (x1 - x2) * r2; - - BoundaryMesh::UVertex r1 = (x2 + t_star * r2 - x1); - double s_tau = r1.norm(); - r1 = r1 / s_tau; - - BoundaryMesh::UVertex n = BoundaryMesh::Vertex::crossProduct(r1, r2); - - // determine necessary information - double sx = (x - x1) * r1; - double tx = (x - x1) * r2; - double ux = (x - x1) * n; - double a1 = -t_star / s_tau; - double a2 = (t_tau - t_star) / s_tau; - - // analytic computation of inner integral - return 0.25 * (F(s_tau, a2, sx, tx, ux) - F(0, a2, sx, tx, ux) - F(s_tau, - a1, sx, tx, ux) + F(0, a1, sx, tx, ux)) / M_PI; +template < class TMesh > +double +ComputeSimpleLayerPotentialEntry< TMesh >::computeInnerIntegralForTriangles( + const typename TMesh::Prop::Triangle& tau, + const typename TMesh::UVertex& x) +{ + BoundaryMesh::Face::ConstVertexIterator vIt = tau.begin_v(); + const BoundaryMesh::UVertex& x1 = *vIt; ++vIt; + const BoundaryMesh::UVertex& x2 = *vIt; ++vIt; + const BoundaryMesh::UVertex& x3 = *vIt; ++vIt; + + // determine a local orthogonal coordinate system (r1,r2,n) on the triangle tau + double t_tau = (x3-x2).norm(); + BoundaryMesh::UVertex r2 = (x3-x2)/t_tau; + double t_star=(x1-x2)*r2; + + BoundaryMesh::UVertex r1 = (x2+(t_star*r2)-x1); + double s_tau = r1.norm(); + r1 = r1 / s_tau; + + BoundaryMesh::UVertex n = BoundaryMesh::Vertex::crossProduct(r1,r2); + + // determine necessary information + double sx = (x-x1)*r1; + double tx = (x-x1)*r2; + double ux = (x-x1)*n; + double a1 = -t_star/s_tau; + double a2 = (t_tau-t_star)/s_tau; + + // analytic computation of inner integral + //return tau.computeArea(); // this is the identity + return 0.25*(F(s_tau,a2,sx,tx,ux) - F(0.,a2,sx,tx,ux) + - F(s_tau,a1,sx,tx,ux) + F(0.,a1,sx,tx,ux))/M_PI; } -template -double ComputeSimpleLayerPotentialEntry::F(double s, double a, - double sx, double tx, double ux) { - double p = (a * tx + sx) / (1 + a * a); - double q = ux * ux + (tx - a * sx) * (tx - a * sx) / (1 + a * a); - - return (s - sx) * log( - a * s - tx - + sqrt( - (s - sx) * (s - sx) + (a * s - tx) * (a * s - tx) - + ux * ux)) - s + (a * sx - tx) * log( - sqrt(1 + a * a) * (s - p) + sqrt( - (1 + a * a) * (s - p) * (s - p) + q * q)) / sqrt(q + a * a) - + 2 * ux * atan( - ((q - (a * sx - tx) / (1 + a * a)) * sqrt( - (1 + a * a) * (s - p) * (s - p) + q * q) + (a * s - - tx - q) * q) / ((s - p) * ux)); +template < class TMesh > +double +ComputeSimpleLayerPotentialEntry< TMesh >::F( + double s, double a, double sx, double tx, double ux) +{ + double p = (a*tx+sx)/(1.+a*a); + double q = sqrt(ux*ux + ((tx-a*sx)*(tx-a*sx)/(1.+a*a))); + + double tmp = ((q-(a*sx-tx)/(1.+a*a))*sqrt((1.+a*a)*(s-p)*(s-p)+q*q) + + (a*s-tx-q)*q)/(s-p); + double aux1 = 0.; + double aux2 = 0.; + double aux3 = 0.; + + if ( fabs(ux) <= eps ) + aux1 = 0.; + else { + aux1 = tmp/ux; + if ( fabs(s-p) < eps ) + if ( aux1 > 0 ) + aux1 = ux*M_PI; + else + aux1 = -ux*M_PI; + else + aux1 = 2*ux*atan( aux1/(s-p) ); + + } + + if ( fabs(q) < eps ) + aux2 = 0.; + else + aux2 = (a*sx-tx)*log(sqrt(1.+a*a)*(s-p) + + sqrt((1.+a*a)*(s-p)*(s-p) + q*q))/sqrt(1.+a*a); + + if ( fabs(s-sx) < eps ) + aux3 = 0.; + else + aux3 = (s-sx)*log(a*s - tx + sqrt((s-sx)*(s-sx) + (a*s-tx)*(a*s-tx) + ux*ux)); + + return aux3 - s + aux2 + aux1; } -void fill_supermatrix_aca_OLD(supermatrix* A, const cluster* row, - const cluster* col, void *data, - double(*compute_entry)(int i, int j, void* data), double aca_eps) { - // std::cerr << "*** fill_supermatrix_aca" << std::endl; - - fullmatrix* f = A->f; - rkmatrix* r = A->r; - int i, j; - int rank; - - if (f != NULL) { // fill fullmatrix block - // std::cerr << "*** full matrix block" << std::endl; - for (i = 0; i < row->size; i++) { - for (j = 0; j < col->size; j++) - f->e[i + j * row->size] = compute_entry(row->start + i, - col->start + j, data); - } - - return; - } - - if (r != NULL) { // fill rk-block with aca - // std::cerr << "*** rank k matrix block" << std::endl; - if (r->rows > r-> cols) - rank = r->cols; - else - rank = r->rows; - - if (rank > ACA_KMAX) - rank = ACA_KMAX; - - r->k = rank; - r->a = allocate_matrix(r->rows, rank); - r->b = allocate_matrix(r->cols, rank); - - r->kt = newaca_fill_block(r->a, r->b, r->rows, r->cols, row->start, - col->start, compute_entry, data, rank, aca_eps, ACA_STRATEGY); - - r->a = (double*) realloc(r->a, r->rows * r->kt * sizeof(double)); - r->b = (double*) realloc(r->b, r->cols * r->kt * sizeof(double)); - r->k = r->kt; - - return; - } - - if (row->sons > 0) { - if (col->sons > 0) { - for (int i = 0; i < row->sons; ++i) - for (int j = 0; j < col->sons; ++j) { - int s = i + j * row->sons; - fill_supermatrix_aca_OLD(A->s[s], row->son[i], col->son[j], - data, compute_entry, aca_eps); - } - } else { - for (int i = 0; i < row->sons; ++i) - fill_supermatrix_aca_OLD(A->s[i], row->son[i], col, data, - compute_entry, aca_eps); - } - } else { - for (int i = 0; i < col->sons; ++i) - fill_supermatrix_aca_OLD(A->s[i], row, col->son[i], data, - compute_entry, aca_eps); - } -} +//space::DFunc SimpleLayerPotential::solve(space::DFunc& rhs) +//{ +// // TODO: test, if space of DFunc rhs is the same as testSpace_ of SLP +// +// space::DFunc result(ansatzSpace_); +// +// std::vector solution = solveGMRes(rhs.getCoeff()); +// result.setCoeff(solution); +// +// return result; +//} + +//void fill_supermatrix_aca_OLD(supermatrix* A, const cluster* row, const cluster* col, void *data, +// double (*compute_entry)(int i, int j, void* data), double aca_eps) +//{ +//// std::cerr << "*** fill_supermatrix_aca" << std::endl; +// +// fullmatrix* f = A->f; +// rkmatrix* r = A->r; +// int i, j; +// int rank; +// +// if ( f!= NULL ) { // fill fullmatrix block +//// std::cerr << "*** full matrix block" << std::endl; +// for ( i=0; isize; i++ ){ +// for ( j=0; jsize; j++ ) +// f->e[i+j*row->size] = compute_entry(row->start+i,col->start+j, data); +// } +// +// return; +// } +// +// if ( r!= NULL ) { // fill rk-block with aca +//// std::cerr << "*** rank k matrix block" << std::endl; +// if ( r->rows > r-> cols ) +// rank = r->cols; +// else +// rank = r->rows; +// +// if ( rank > ACA_KMAX ) +// rank = ACA_KMAX; +// +// r->k = rank; +// r->a = allocate_matrix(r->rows,rank); +// r->b = allocate_matrix(r->cols,rank); +// +// r->kt = newaca_fill_block(r->a, r->b, r->rows, r->cols, +// row->start, col->start, +// compute_entry, data, +// rank, aca_eps, ACA_STRATEGY); +// +// r->a = (double*) realloc(r->a,r->rows*r->kt*sizeof(double)); +// r->b = (double*) realloc(r->b,r->cols*r->kt*sizeof(double)); +// r->k = r->kt; +// +// return; +// } +// +// if(row->sons>0) { +// if(col->sons>0) { +// for(int i=0;isons;++i) +// for(int j=0;jsons;++j) { +// int s=i+j*row->sons; +// fill_supermatrix_aca_OLD(A->s[s],row->son[i],col->son[j],data,compute_entry,aca_eps); +// } +// } else { +// for(int i=0;isons;++i) +// fill_supermatrix_aca_OLD(A->s[i],row->son[i],col,data,compute_entry,aca_eps); +// } +// } else { +// for(int i=0;isons;++i) +// fill_supermatrix_aca_OLD(A->s[i],row,col->son[i],data,compute_entry,aca_eps); +// } +//} diff --git a/src/bem3d/src/laplace/SimpleLayerPotential.cpp.BACKUP.2711.cpp b/src/bem3d/src/laplace/SimpleLayerPotential.cpp.BACKUP.2711.cpp new file mode 100644 index 0000000..3f7dd03 --- /dev/null +++ b/src/bem3d/src/laplace/SimpleLayerPotential.cpp.BACKUP.2711.cpp @@ -0,0 +1,449 @@ +#include "SimpleLayerPotential.hpp" + +#include "../spaces/P0Space.hpp" +#include "TriangleIntegrator.hpp" + +<<<<<<< HEAD +#include "SLPrectangle.hpp" // Bibliothek fuer achsenorientierte Rechtecke +#include +#include +======= +//#include "SLPrecangle.hpp" + +#include +#include + +#define eps 1e-9 +>>>>>>> fbf2c7a2574a91a0d425166680a16309b81c59df + +using namespace laplace; + +SimpleLayerPotential::SimpleLayerPotential(const space::P0Space& space) : + HLibOperator ( + space, space, SimpleLayerPotential::computeEntry) { +} + +SimpleLayerPotential::~SimpleLayerPotential() { +} + +template +double ComputeSimpleLayerPotentialEntry::exec( + const typename TMesh::Prop::Triangle& f1, + const typename TMesh::Prop::Triangle& f2) const { + TriangleIntegrator integrator = TriangleIntegrator(); + + if (f1.computeArea() < f2.computeArea()) { + return integrator.integrate(f1, f2, computeInnerIntegralForTriangles); + } else { + return integrator.integrate(f2, f1, computeInnerIntegralForTriangles); + } +} + +template +double ComputeSimpleLayerPotentialEntry::exec( + const typename TMesh::Prop::Parallelogram& f1, + const typename TMesh::Prop::Parallelogram& f2) const { + + // Zwischenvariable fuer die Loesung (kann fuer geschwindigkeit entfernt werden) + double sol = NAN; + + // Flaechenstueck 1 + const typename TMesh::UVertex& xa = f1.getB() - f1.getA(); + const typename TMesh::UVertex& xb = f1.getD() - f1.getA(); + const typename TMesh::UVertex& xn = TMesh::UVertex::crossProduct(xa, xb); + + // Flaechenstueck 2 + const typename TMesh::UVertex& ya = f2.getB() - f1.getA(); + const typename TMesh::UVertex& yb = f2.getD() - f1.getA(); + const typename TMesh::UVertex& yn = TMesh::UVertex::crossProduct(ya, yb); + + // Abstand zwischen den Stuecken (Achtung) abstand von den beiden "kleinsten" Ecken + typename TMesh::UVertex d; + + //Variablen fuer LageInformationen + int rx, rxa, rxb, ry, rya, ryb; + + // Lage des ersten Elements ermitteln + if (xn[2] != 0) + rx = 2; + else if (xn[1] != 0) + rx = 1; + else + rx = 0; + + if (xa[2] != 0) + rxa = 2; + else if (xa[1] != 0) + rxa = 1; + else + rxa = 0; + + if (xb[2] != 0) + rxb = 2; + else if (xb[1] != 0) + rxb = 1; + else + rxb = 0; + + //kleinste Ecke finden und fuer \delta verwenden + if (xa[rxa] > 0) { + if (xb[rxb] > 0) { + d -= f1.getA(); + } else { + d -= f1.getD(); + } + } else { + if (xb[rxb] > 0) { + d -= f1.getB(); + } else { + d -= f1.getC(); + } + } + + // Lage des zweiten Elements ermitteln + if (yn[2] != 0) + ry = 2; + else if (yn[1] != 0) + ry = 1; + else + ry = 0; + + if (ya[2] != 0) + rya = 2; + else if (ya[1] != 0) + rya = 1; + else + rya = 0; + + if (yb[2] != 0) + ryb = 2; + else if (yb[1] != 0) + ryb = 1; + else + ryb = 0; + + //kleinste Ecke finden und fuer \delta verwenden + if (ya[rya] > 0) { + if (yb[ryb] > 0) { + d += f2.getA(); //todo += definiert??? sonst d = d + ... + } else { + d += f2.getD(); //todo += definiert??? sonst d = d + ... + } + } else { + if (yb[ryb] > 0) { + d += f2.getB(); //todo += definiert??? sonst d = d + ... + } else { + d += f2.getC(); //todo += definiert??? sonst d = d + ... + } + } + + if (rx == ry) { // Flaechen sind parallel + if (rxa == rya) { // Elemente zeigen in gleiche Richtung + sol = quad0Int(F_par, fabs(xa[rxa]), fabs(xb[rxb]), fabs(ya[rxa]), + fabs(yb[rxb]), d[rxa], d[rxb], d[rx]); + } else { // Elemente zeigen nicht in gleiche Richtung + sol = quad0Int(F_par, fabs(xa[rxa]), fabs(xb[rxb]), fabs(yb[rxa]), + fabs(ya[rxb]), d[rxa], d[rxb], d[rx]); + } + } else { // Flaechen sind orthogonal + if (rxa == rya) { //Elmente richtig zuordnen + sol = quad0Int(F_ort, fabs(xb[rxb]), fabs(xa[rxa]), fabs(ya[rya]), + fabs(yb[ryb]), d[rxb], d[rxa], d[rx]); + } else if (rxa == ryb) { + sol = quad0Int(F_ort, fabs(xb[rxb]), fabs(xa[rxa]), fabs(yb[ryb]), + fabs(ya[rya]), d[rxb], d[rxa], d[rx]); + } else if (rxb == rya) { + sol = quad0Int(F_ort, fabs(xa[rxa]), fabs(xb[rxb]), fabs(ya[rya]), + fabs(yb[ryb]), d[rxa], d[rxb], d[rx]); + } else { + sol = quad0Int(F_ort, fabs(xa[rxa]), fabs(xb[rxb]), fabs(yb[ryb]), + fabs(ya[rya]), d[rxa], d[rxb], d[rx]); + } + sol /= 2.; + } + + return sol / (4. * M_PI); +} + +double SimpleLayerPotential::computeEntry(const space::P0Space::Element &e1, + const space::P0Space::Element &e2) { + typedef boundary_mesh::DoubleFaceDispatcher< + ComputeSimpleLayerPotentialEntry , BoundaryMesh, + double> ComputeEntry; + + return ComputeEntry::Exec(e1.getSupport(), e2.getSupport(), + ComputeSimpleLayerPotentialEntry ()); +} + +<<<<<<< HEAD +template +double ComputeSimpleLayerPotentialEntry::computeInnerIntegralForTriangles( + const typename TMesh::Prop::Triangle& tau, + const typename TMesh::UVertex& x) { + BoundaryMesh::Face::ConstVertexIterator vIt = tau.begin_v(); + const BoundaryMesh::UVertex& x1 = *vIt; + ++vIt; + const BoundaryMesh::UVertex& x2 = *vIt; + ++vIt; + const BoundaryMesh::UVertex& x3 = *vIt; + ++vIt; + + // determine a local orthogonal coordinate system (r1,r2,n) on the triangle tau + double t_tau = (x3 - x2).norm(); + BoundaryMesh::UVertex r2 = (x3 - x2) / t_tau; + double t_star = (x1 - x2) * r2; + + BoundaryMesh::UVertex r1 = (x2 + t_star * r2 - x1); + double s_tau = r1.norm(); + r1 = r1 / s_tau; + + BoundaryMesh::UVertex n = BoundaryMesh::Vertex::crossProduct(r1, r2); + + // determine necessary information + double sx = (x - x1) * r1; + double tx = (x - x1) * r2; + double ux = (x - x1) * n; + double a1 = -t_star / s_tau; + double a2 = (t_tau - t_star) / s_tau; + + // analytic computation of inner integral + return 0.25 * (F(s_tau, a2, sx, tx, ux) - F(0, a2, sx, tx, ux) - F(s_tau, + a1, sx, tx, ux) + F(0, a1, sx, tx, ux)) / M_PI; +} + +template +double ComputeSimpleLayerPotentialEntry::F(double s, double a, + double sx, double tx, double ux) { + double p = (a * tx + sx) / (1 + a * a); + double q = ux * ux + (tx - a * sx) * (tx - a * sx) / (1 + a * a); + + return (s - sx) * log( + a * s - tx + + sqrt( + (s - sx) * (s - sx) + (a * s - tx) * (a * s - tx) + + ux * ux)) - s + (a * sx - tx) * log( + sqrt(1 + a * a) * (s - p) + sqrt( + (1 + a * a) * (s - p) * (s - p) + q * q)) / sqrt(q + a * a) + + 2 * ux * atan( + ((q - (a * sx - tx) / (1 + a * a)) * sqrt( + (1 + a * a) * (s - p) * (s - p) + q * q) + (a * s + - tx - q) * q) / ((s - p) * ux)); +} + +void fill_supermatrix_aca_OLD(supermatrix* A, const cluster* row, + const cluster* col, void *data, + double(*compute_entry)(int i, int j, void* data), double aca_eps) { + // std::cerr << "*** fill_supermatrix_aca" << std::endl; + + fullmatrix* f = A->f; + rkmatrix* r = A->r; + int i, j; + int rank; + + if (f != NULL) { // fill fullmatrix block + // std::cerr << "*** full matrix block" << std::endl; + for (i = 0; i < row->size; i++) { + for (j = 0; j < col->size; j++) + f->e[i + j * row->size] = compute_entry(row->start + i, + col->start + j, data); + } + + return; + } + + if (r != NULL) { // fill rk-block with aca + // std::cerr << "*** rank k matrix block" << std::endl; + if (r->rows > r-> cols) + rank = r->cols; + else + rank = r->rows; + + if (rank > ACA_KMAX) + rank = ACA_KMAX; + + r->k = rank; + r->a = allocate_matrix(r->rows, rank); + r->b = allocate_matrix(r->cols, rank); + + r->kt = newaca_fill_block(r->a, r->b, r->rows, r->cols, row->start, + col->start, compute_entry, data, rank, aca_eps, ACA_STRATEGY); + + r->a = (double*) realloc(r->a, r->rows * r->kt * sizeof(double)); + r->b = (double*) realloc(r->b, r->cols * r->kt * sizeof(double)); + r->k = r->kt; + + return; + } + + if (row->sons > 0) { + if (col->sons > 0) { + for (int i = 0; i < row->sons; ++i) + for (int j = 0; j < col->sons; ++j) { + int s = i + j * row->sons; + fill_supermatrix_aca_OLD(A->s[s], row->son[i], col->son[j], + data, compute_entry, aca_eps); + } + } else { + for (int i = 0; i < row->sons; ++i) + fill_supermatrix_aca_OLD(A->s[i], row->son[i], col, data, + compute_entry, aca_eps); + } + } else { + for (int i = 0; i < col->sons; ++i) + fill_supermatrix_aca_OLD(A->s[i], row, col->son[i], data, + compute_entry, aca_eps); + } +======= +template < class TMesh > +double +ComputeSimpleLayerPotentialEntry< TMesh >::computeInnerIntegralForTriangles( + const typename TMesh::Prop::Triangle& tau, + const typename TMesh::UVertex& x) +{ + BoundaryMesh::Face::ConstVertexIterator vIt = tau.begin_v(); + const BoundaryMesh::UVertex& x1 = *vIt; ++vIt; + const BoundaryMesh::UVertex& x2 = *vIt; ++vIt; + const BoundaryMesh::UVertex& x3 = *vIt; ++vIt; + + // determine a local orthogonal coordinate system (r1,r2,n) on the triangle tau + double t_tau = (x3-x2).norm(); + BoundaryMesh::UVertex r2 = (x3-x2)/t_tau; + double t_star=(x1-x2)*r2; + + BoundaryMesh::UVertex r1 = (x2+(t_star*r2)-x1); + double s_tau = r1.norm(); + r1 = r1 / s_tau; + + BoundaryMesh::UVertex n = BoundaryMesh::Vertex::crossProduct(r1,r2); + + // determine necessary information + double sx = (x-x1)*r1; + double tx = (x-x1)*r2; + double ux = (x-x1)*n; + double a1 = -t_star/s_tau; + double a2 = (t_tau-t_star)/s_tau; + + // analytic computation of inner integral + //return tau.computeArea(); // this is the identity + return 0.25*(F(s_tau,a2,sx,tx,ux) - F(0.,a2,sx,tx,ux) + - F(s_tau,a1,sx,tx,ux) + F(0.,a1,sx,tx,ux))/M_PI; +} + +template < class TMesh > +double +ComputeSimpleLayerPotentialEntry< TMesh >::F( + double s, double a, double sx, double tx, double ux) +{ + double p = (a*tx+sx)/(1.+a*a); + double q = sqrt(ux*ux + ((tx-a*sx)*(tx-a*sx)/(1.+a*a))); + + double tmp = ((q-(a*sx-tx)/(1.+a*a))*sqrt((1.+a*a)*(s-p)*(s-p)+q*q) + + (a*s-tx-q)*q)/(s-p); + double aux1 = 0.; + double aux2 = 0.; + double aux3 = 0.; + + if ( fabs(ux) <= eps ) + aux1 = 0.; + else { + aux1 = tmp/ux; + if ( fabs(s-p) < eps ) + if ( aux1 > 0 ) + aux1 = ux*M_PI; + else + aux1 = -ux*M_PI; + else + aux1 = 2*ux*atan( aux1/(s-p) ); + + } + + if ( fabs(q) < eps ) + aux2 = 0.; + else + aux2 = (a*sx-tx)*log(sqrt(1.+a*a)*(s-p) + + sqrt((1.+a*a)*(s-p)*(s-p) + q*q))/sqrt(1.+a*a); + + if ( fabs(s-sx) < eps ) + aux3 = 0.; + else + aux3 = (s-sx)*log(a*s - tx + sqrt((s-sx)*(s-sx) + (a*s-tx)*(a*s-tx) + ux*ux)); + + return aux3 - s + aux2 + aux1; +>>>>>>> fbf2c7a2574a91a0d425166680a16309b81c59df +} + +//space::DFunc SimpleLayerPotential::solve(space::DFunc& rhs) +//{ +// // TODO: test, if space of DFunc rhs is the same as testSpace_ of SLP +// +// space::DFunc result(ansatzSpace_); +// +// std::vector solution = solveGMRes(rhs.getCoeff()); +// result.setCoeff(solution); +// +// return result; +//} + +//void fill_supermatrix_aca_OLD(supermatrix* A, const cluster* row, const cluster* col, void *data, +// double (*compute_entry)(int i, int j, void* data), double aca_eps) +//{ +//// std::cerr << "*** fill_supermatrix_aca" << std::endl; +// +// fullmatrix* f = A->f; +// rkmatrix* r = A->r; +// int i, j; +// int rank; +// +// if ( f!= NULL ) { // fill fullmatrix block +//// std::cerr << "*** full matrix block" << std::endl; +// for ( i=0; isize; i++ ){ +// for ( j=0; jsize; j++ ) +// f->e[i+j*row->size] = compute_entry(row->start+i,col->start+j, data); +// } +// +// return; +// } +// +// if ( r!= NULL ) { // fill rk-block with aca +//// std::cerr << "*** rank k matrix block" << std::endl; +// if ( r->rows > r-> cols ) +// rank = r->cols; +// else +// rank = r->rows; +// +// if ( rank > ACA_KMAX ) +// rank = ACA_KMAX; +// +// r->k = rank; +// r->a = allocate_matrix(r->rows,rank); +// r->b = allocate_matrix(r->cols,rank); +// +// r->kt = newaca_fill_block(r->a, r->b, r->rows, r->cols, +// row->start, col->start, +// compute_entry, data, +// rank, aca_eps, ACA_STRATEGY); +// +// r->a = (double*) realloc(r->a,r->rows*r->kt*sizeof(double)); +// r->b = (double*) realloc(r->b,r->cols*r->kt*sizeof(double)); +// r->k = r->kt; +// +// return; +// } +// +// if(row->sons>0) { +// if(col->sons>0) { +// for(int i=0;isons;++i) +// for(int j=0;jsons;++j) { +// int s=i+j*row->sons; +// fill_supermatrix_aca_OLD(A->s[s],row->son[i],col->son[j],data,compute_entry,aca_eps); +// } +// } else { +// for(int i=0;isons;++i) +// fill_supermatrix_aca_OLD(A->s[i],row->son[i],col,data,compute_entry,aca_eps); +// } +// } else { +// for(int i=0;isons;++i) +// fill_supermatrix_aca_OLD(A->s[i],row,col->son[i],data,compute_entry,aca_eps); +// } +//} + diff --git a/src/bem3d/src/laplace/SimpleLayerPotential.cpp.BASE.2711.cpp b/src/bem3d/src/laplace/SimpleLayerPotential.cpp.BASE.2711.cpp new file mode 100644 index 0000000..c5e299a --- /dev/null +++ b/src/bem3d/src/laplace/SimpleLayerPotential.cpp.BASE.2711.cpp @@ -0,0 +1,176 @@ +#include "SimpleLayerPotential.hpp" + +#include "../spaces/P0Space.hpp" +#include "TriangleIntegrator.hpp" + +#include "SLPrecangle.hpp" + +#include + +using namespace laplace; + +SimpleLayerPotential::SimpleLayerPotential(const space::P0Space& space) + : HLibOperator< space::P0Space, space::P0Space, SymmetricMatrix >( + space, space, SimpleLayerPotential::computeEntry) +{ +} + +SimpleLayerPotential::~SimpleLayerPotential() +{ +} + +template < class TMesh > +double ComputeSimpleLayerPotentialEntry< TMesh >::exec( + const typename TMesh::Prop::Triangle& f1, + const typename TMesh::Prop::Triangle& f2) const +{ + TriangleIntegrator integrator = TriangleIntegrator(); + + if ( f1.computeArea() < f2.computeArea() ) + { + return integrator.integrate( f1, f2, + computeInnerIntegralForTriangles); + } + else + { + return integrator.integrate( f2, f1, + computeInnerIntegralForTriangles); + } +} + +template < class TMesh > +double ComputeSimpleLayerPotentialEntry< TMesh >::exec( + const typename TMesh::Prop::Parallelogram& f1, + const typename TMesh::Prop::Parallelogram& f2) const +{ + + const typename TMesh::Vertex& a1 = f1.getA(); + const typename TMesh::Vertex& a2 = f2.getA(); + + + + + return NAN; +} + +double SimpleLayerPotential::computeEntry( + const space::P0Space::Element &e1, + const space::P0Space::Element &e2) +{ + typedef boundary_mesh::DoubleFaceDispatcher< + ComputeSimpleLayerPotentialEntry< BoundaryMesh >, BoundaryMesh, double > + ComputeEntry; + + return ComputeEntry::Exec( e1.getSupport(), e2.getSupport(), + ComputeSimpleLayerPotentialEntry< BoundaryMesh >() ); +} + +template < class TMesh > +double +ComputeSimpleLayerPotentialEntry< TMesh >::computeInnerIntegralForTriangles( + const typename TMesh::Prop::Triangle& tau, + const typename TMesh::UVertex& x) +{ + BoundaryMesh::Face::ConstVertexIterator vIt = tau.begin_v(); + const BoundaryMesh::UVertex& x1 = *vIt; ++vIt; + const BoundaryMesh::UVertex& x2 = *vIt; ++vIt; + const BoundaryMesh::UVertex& x3 = *vIt; ++vIt; + + // determine a local orthogonal coordinate system (r1,r2,n) on the triangle tau + double t_tau = (x3-x2).norm(); + BoundaryMesh::UVertex r2 = (x3-x2)/t_tau; + double t_star=(x1-x2)*r2; + + BoundaryMesh::UVertex r1 = (x2+t_star*r2-x1); + double s_tau = r1.norm(); + r1 = r1 / s_tau; + + BoundaryMesh::UVertex n = BoundaryMesh::Vertex::crossProduct(r1,r2); + + // determine necessary information + double sx = (x-x1)*r1; + double tx = (x-x1)*r2; + double ux = (x-x1)*n; + double a1 = -t_star/s_tau; + double a2 = (t_tau-t_star)/s_tau; + + // analytic computation of inner integral + return 0.25*(F(s_tau,a2,sx,tx,ux) - F(0,a2,sx,tx,ux) - F(s_tau,a1,sx,tx,ux) + F(0,a1,sx,tx,ux))/M_PI; +} + +template < class TMesh > +double +ComputeSimpleLayerPotentialEntry< TMesh >::F( + double s, double a, double sx, double tx, double ux) +{ + double p = (a*tx+sx)/(1+a*a); + double q = ux*ux + (tx-a*sx)*(tx-a*sx)/(1+a*a); + + return (s-sx)*log(a*s - tx + sqrt((s-sx)*(s-sx) + (a*s-tx)*(a*s-tx) + ux*ux)) - s + + (a*sx-tx)*log(sqrt(1+a*a)*(s-p)+sqrt((1+a*a)*(s-p)*(s-p) + q*q))/sqrt(q+a*a) + + 2*ux*atan(((q-(a*sx-tx)/(1+a*a))*sqrt((1+a*a)*(s-p)*(s-p)+q*q) + (a*s-tx-q)*q)/((s-p)*ux)); +} + +void fill_supermatrix_aca_OLD(supermatrix* A, const cluster* row, const cluster* col, void *data, + double (*compute_entry)(int i, int j, void* data), double aca_eps) +{ +// std::cerr << "*** fill_supermatrix_aca" << std::endl; + + fullmatrix* f = A->f; + rkmatrix* r = A->r; + int i, j; + int rank; + + if ( f!= NULL ) { // fill fullmatrix block +// std::cerr << "*** full matrix block" << std::endl; + for ( i=0; isize; i++ ){ + for ( j=0; jsize; j++ ) + f->e[i+j*row->size] = compute_entry(row->start+i,col->start+j, data); + } + + return; + } + + if ( r!= NULL ) { // fill rk-block with aca +// std::cerr << "*** rank k matrix block" << std::endl; + if ( r->rows > r-> cols ) + rank = r->cols; + else + rank = r->rows; + + if ( rank > ACA_KMAX ) + rank = ACA_KMAX; + + r->k = rank; + r->a = allocate_matrix(r->rows,rank); + r->b = allocate_matrix(r->cols,rank); + + r->kt = newaca_fill_block(r->a, r->b, r->rows, r->cols, + row->start, col->start, + compute_entry, data, + rank, aca_eps, ACA_STRATEGY); + + r->a = (double*) realloc(r->a,r->rows*r->kt*sizeof(double)); + r->b = (double*) realloc(r->b,r->cols*r->kt*sizeof(double)); + r->k = r->kt; + + return; + } + + if(row->sons>0) { + if(col->sons>0) { + for(int i=0;isons;++i) + for(int j=0;jsons;++j) { + int s=i+j*row->sons; + fill_supermatrix_aca_OLD(A->s[s],row->son[i],col->son[j],data,compute_entry,aca_eps); + } + } else { + for(int i=0;isons;++i) + fill_supermatrix_aca_OLD(A->s[i],row->son[i],col,data,compute_entry,aca_eps); + } + } else { + for(int i=0;isons;++i) + fill_supermatrix_aca_OLD(A->s[i],row,col->son[i],data,compute_entry,aca_eps); + } +} + diff --git a/src/bem3d/src/laplace/SimpleLayerPotential.cpp.LOCAL.2711.cpp b/src/bem3d/src/laplace/SimpleLayerPotential.cpp.LOCAL.2711.cpp new file mode 100644 index 0000000..57b35bc --- /dev/null +++ b/src/bem3d/src/laplace/SimpleLayerPotential.cpp.LOCAL.2711.cpp @@ -0,0 +1,287 @@ +#include "SimpleLayerPotential.hpp" + +#include "../spaces/P0Space.hpp" +#include "TriangleIntegrator.hpp" + +#include "SLPrectangle.hpp" // Bibliothek fuer achsenorientierte Rechtecke +#include +#include + +using namespace laplace; + +SimpleLayerPotential::SimpleLayerPotential(const space::P0Space& space) : + HLibOperator ( + space, space, SimpleLayerPotential::computeEntry) { +} + +SimpleLayerPotential::~SimpleLayerPotential() { +} + +template +double ComputeSimpleLayerPotentialEntry::exec( + const typename TMesh::Prop::Triangle& f1, + const typename TMesh::Prop::Triangle& f2) const { + TriangleIntegrator integrator = TriangleIntegrator(); + + if (f1.computeArea() < f2.computeArea()) { + return integrator.integrate(f1, f2, computeInnerIntegralForTriangles); + } else { + return integrator.integrate(f2, f1, computeInnerIntegralForTriangles); + } +} + +template +double ComputeSimpleLayerPotentialEntry::exec( + const typename TMesh::Prop::Parallelogram& f1, + const typename TMesh::Prop::Parallelogram& f2) const { + + // Zwischenvariable fuer die Loesung (kann fuer geschwindigkeit entfernt werden) + double sol = NAN; + + // Flaechenstueck 1 + const typename TMesh::UVertex& xa = f1.getB() - f1.getA(); + const typename TMesh::UVertex& xb = f1.getD() - f1.getA(); + const typename TMesh::UVertex& xn = TMesh::UVertex::crossProduct(xa, xb); + + // Flaechenstueck 2 + const typename TMesh::UVertex& ya = f2.getB() - f1.getA(); + const typename TMesh::UVertex& yb = f2.getD() - f1.getA(); + const typename TMesh::UVertex& yn = TMesh::UVertex::crossProduct(ya, yb); + + // Abstand zwischen den Stuecken (Achtung) abstand von den beiden "kleinsten" Ecken + typename TMesh::UVertex d; + + //Variablen fuer LageInformationen + int rx, rxa, rxb, ry, rya, ryb; + + // Lage des ersten Elements ermitteln + if (xn[2] != 0) + rx = 2; + else if (xn[1] != 0) + rx = 1; + else + rx = 0; + + if (xa[2] != 0) + rxa = 2; + else if (xa[1] != 0) + rxa = 1; + else + rxa = 0; + + if (xb[2] != 0) + rxb = 2; + else if (xb[1] != 0) + rxb = 1; + else + rxb = 0; + + //kleinste Ecke finden und fuer \delta verwenden + if (xa[rxa] > 0) { + if (xb[rxb] > 0) { + d -= f1.getA(); + } else { + d -= f1.getD(); + } + } else { + if (xb[rxb] > 0) { + d -= f1.getB(); + } else { + d -= f1.getC(); + } + } + + // Lage des zweiten Elements ermitteln + if (yn[2] != 0) + ry = 2; + else if (yn[1] != 0) + ry = 1; + else + ry = 0; + + if (ya[2] != 0) + rya = 2; + else if (ya[1] != 0) + rya = 1; + else + rya = 0; + + if (yb[2] != 0) + ryb = 2; + else if (yb[1] != 0) + ryb = 1; + else + ryb = 0; + + //kleinste Ecke finden und fuer \delta verwenden + if (ya[rya] > 0) { + if (yb[ryb] > 0) { + d += f2.getA(); //todo += definiert??? sonst d = d + ... + } else { + d += f2.getD(); //todo += definiert??? sonst d = d + ... + } + } else { + if (yb[ryb] > 0) { + d += f2.getB(); //todo += definiert??? sonst d = d + ... + } else { + d += f2.getC(); //todo += definiert??? sonst d = d + ... + } + } + + if (rx == ry) { // Flaechen sind parallel + if (rxa == rya) { // Elemente zeigen in gleiche Richtung + sol = quad0Int(F_par, fabs(xa[rxa]), fabs(xb[rxb]), fabs(ya[rxa]), + fabs(yb[rxb]), d[rxa], d[rxb], d[rx]); + } else { // Elemente zeigen nicht in gleiche Richtung + sol = quad0Int(F_par, fabs(xa[rxa]), fabs(xb[rxb]), fabs(yb[rxa]), + fabs(ya[rxb]), d[rxa], d[rxb], d[rx]); + } + } else { // Flaechen sind orthogonal + if (rxa == rya) { //Elmente richtig zuordnen + sol = quad0Int(F_ort, fabs(xb[rxb]), fabs(xa[rxa]), fabs(ya[rya]), + fabs(yb[ryb]), d[rxb], d[rxa], d[rx]); + } else if (rxa == ryb) { + sol = quad0Int(F_ort, fabs(xb[rxb]), fabs(xa[rxa]), fabs(yb[ryb]), + fabs(ya[rya]), d[rxb], d[rxa], d[rx]); + } else if (rxb == rya) { + sol = quad0Int(F_ort, fabs(xa[rxa]), fabs(xb[rxb]), fabs(ya[rya]), + fabs(yb[ryb]), d[rxa], d[rxb], d[rx]); + } else { + sol = quad0Int(F_ort, fabs(xa[rxa]), fabs(xb[rxb]), fabs(yb[ryb]), + fabs(ya[rya]), d[rxa], d[rxb], d[rx]); + } + sol /= 2.; + } + + return sol / (4. * M_PI); +} + +double SimpleLayerPotential::computeEntry(const space::P0Space::Element &e1, + const space::P0Space::Element &e2) { + typedef boundary_mesh::DoubleFaceDispatcher< + ComputeSimpleLayerPotentialEntry , BoundaryMesh, + double> ComputeEntry; + + return ComputeEntry::Exec(e1.getSupport(), e2.getSupport(), + ComputeSimpleLayerPotentialEntry ()); +} + +template +double ComputeSimpleLayerPotentialEntry::computeInnerIntegralForTriangles( + const typename TMesh::Prop::Triangle& tau, + const typename TMesh::UVertex& x) { + BoundaryMesh::Face::ConstVertexIterator vIt = tau.begin_v(); + const BoundaryMesh::UVertex& x1 = *vIt; + ++vIt; + const BoundaryMesh::UVertex& x2 = *vIt; + ++vIt; + const BoundaryMesh::UVertex& x3 = *vIt; + ++vIt; + + // determine a local orthogonal coordinate system (r1,r2,n) on the triangle tau + double t_tau = (x3 - x2).norm(); + BoundaryMesh::UVertex r2 = (x3 - x2) / t_tau; + double t_star = (x1 - x2) * r2; + + BoundaryMesh::UVertex r1 = (x2 + t_star * r2 - x1); + double s_tau = r1.norm(); + r1 = r1 / s_tau; + + BoundaryMesh::UVertex n = BoundaryMesh::Vertex::crossProduct(r1, r2); + + // determine necessary information + double sx = (x - x1) * r1; + double tx = (x - x1) * r2; + double ux = (x - x1) * n; + double a1 = -t_star / s_tau; + double a2 = (t_tau - t_star) / s_tau; + + // analytic computation of inner integral + return 0.25 * (F(s_tau, a2, sx, tx, ux) - F(0, a2, sx, tx, ux) - F(s_tau, + a1, sx, tx, ux) + F(0, a1, sx, tx, ux)) / M_PI; +} + +template +double ComputeSimpleLayerPotentialEntry::F(double s, double a, + double sx, double tx, double ux) { + double p = (a * tx + sx) / (1 + a * a); + double q = ux * ux + (tx - a * sx) * (tx - a * sx) / (1 + a * a); + + return (s - sx) * log( + a * s - tx + + sqrt( + (s - sx) * (s - sx) + (a * s - tx) * (a * s - tx) + + ux * ux)) - s + (a * sx - tx) * log( + sqrt(1 + a * a) * (s - p) + sqrt( + (1 + a * a) * (s - p) * (s - p) + q * q)) / sqrt(q + a * a) + + 2 * ux * atan( + ((q - (a * sx - tx) / (1 + a * a)) * sqrt( + (1 + a * a) * (s - p) * (s - p) + q * q) + (a * s + - tx - q) * q) / ((s - p) * ux)); +} + +void fill_supermatrix_aca_OLD(supermatrix* A, const cluster* row, + const cluster* col, void *data, + double(*compute_entry)(int i, int j, void* data), double aca_eps) { + // std::cerr << "*** fill_supermatrix_aca" << std::endl; + + fullmatrix* f = A->f; + rkmatrix* r = A->r; + int i, j; + int rank; + + if (f != NULL) { // fill fullmatrix block + // std::cerr << "*** full matrix block" << std::endl; + for (i = 0; i < row->size; i++) { + for (j = 0; j < col->size; j++) + f->e[i + j * row->size] = compute_entry(row->start + i, + col->start + j, data); + } + + return; + } + + if (r != NULL) { // fill rk-block with aca + // std::cerr << "*** rank k matrix block" << std::endl; + if (r->rows > r-> cols) + rank = r->cols; + else + rank = r->rows; + + if (rank > ACA_KMAX) + rank = ACA_KMAX; + + r->k = rank; + r->a = allocate_matrix(r->rows, rank); + r->b = allocate_matrix(r->cols, rank); + + r->kt = newaca_fill_block(r->a, r->b, r->rows, r->cols, row->start, + col->start, compute_entry, data, rank, aca_eps, ACA_STRATEGY); + + r->a = (double*) realloc(r->a, r->rows * r->kt * sizeof(double)); + r->b = (double*) realloc(r->b, r->cols * r->kt * sizeof(double)); + r->k = r->kt; + + return; + } + + if (row->sons > 0) { + if (col->sons > 0) { + for (int i = 0; i < row->sons; ++i) + for (int j = 0; j < col->sons; ++j) { + int s = i + j * row->sons; + fill_supermatrix_aca_OLD(A->s[s], row->son[i], col->son[j], + data, compute_entry, aca_eps); + } + } else { + for (int i = 0; i < row->sons; ++i) + fill_supermatrix_aca_OLD(A->s[i], row->son[i], col, data, + compute_entry, aca_eps); + } + } else { + for (int i = 0; i < col->sons; ++i) + fill_supermatrix_aca_OLD(A->s[i], row, col->son[i], data, + compute_entry, aca_eps); + } +} + diff --git a/src/bem3d/src/laplace/SimpleLayerPotential.cpp.REMOTE.2711.cpp b/src/bem3d/src/laplace/SimpleLayerPotential.cpp.REMOTE.2711.cpp new file mode 100644 index 0000000..a1ff2a0 --- /dev/null +++ b/src/bem3d/src/laplace/SimpleLayerPotential.cpp.REMOTE.2711.cpp @@ -0,0 +1,222 @@ +#include "SimpleLayerPotential.hpp" + +#include "../spaces/P0Space.hpp" +#include "TriangleIntegrator.hpp" + +//#include "SLPrecangle.hpp" + +#include +#include + +#define eps 1e-9 + +using namespace laplace; + +SimpleLayerPotential::SimpleLayerPotential(const space::P0Space& space) + : HLibOperator< space::P0Space, space::P0Space, SymmetricMatrix >( + space, space, SimpleLayerPotential::computeEntry) +{ +} + +SimpleLayerPotential::~SimpleLayerPotential() +{ +} + +template < class TMesh > +double ComputeSimpleLayerPotentialEntry< TMesh >::exec( + const typename TMesh::Prop::Triangle& f1, + const typename TMesh::Prop::Triangle& f2) const +{ + TriangleIntegrator integrator = TriangleIntegrator(); + + if ( f1.computeArea() < f2.computeArea() ) + { + return integrator.integrate( f1, f2, + computeInnerIntegralForTriangles); + } + else + { + return integrator.integrate( f2, f1, + computeInnerIntegralForTriangles); + } +} + +template < class TMesh > +double ComputeSimpleLayerPotentialEntry< TMesh >::exec( + const typename TMesh::Prop::Parallelogram& f1, + const typename TMesh::Prop::Parallelogram& f2) const +{ + + const typename TMesh::Vertex& a1 = f1.getA(); + const typename TMesh::Vertex& a2 = f2.getA(); + + + + + return NAN; +} + +double SimpleLayerPotential::computeEntry( + const space::P0Space::Element &e1, + const space::P0Space::Element &e2) +{ + typedef boundary_mesh::DoubleFaceDispatcher< + ComputeSimpleLayerPotentialEntry< BoundaryMesh >, BoundaryMesh, double > + ComputeEntry; + + return ComputeEntry::Exec( e1.getSupport(), e2.getSupport(), + ComputeSimpleLayerPotentialEntry< BoundaryMesh >() ); +} + +template < class TMesh > +double +ComputeSimpleLayerPotentialEntry< TMesh >::computeInnerIntegralForTriangles( + const typename TMesh::Prop::Triangle& tau, + const typename TMesh::UVertex& x) +{ + BoundaryMesh::Face::ConstVertexIterator vIt = tau.begin_v(); + const BoundaryMesh::UVertex& x1 = *vIt; ++vIt; + const BoundaryMesh::UVertex& x2 = *vIt; ++vIt; + const BoundaryMesh::UVertex& x3 = *vIt; ++vIt; + + // determine a local orthogonal coordinate system (r1,r2,n) on the triangle tau + double t_tau = (x3-x2).norm(); + BoundaryMesh::UVertex r2 = (x3-x2)/t_tau; + double t_star=(x1-x2)*r2; + + BoundaryMesh::UVertex r1 = (x2+(t_star*r2)-x1); + double s_tau = r1.norm(); + r1 = r1 / s_tau; + + BoundaryMesh::UVertex n = BoundaryMesh::Vertex::crossProduct(r1,r2); + + // determine necessary information + double sx = (x-x1)*r1; + double tx = (x-x1)*r2; + double ux = (x-x1)*n; + double a1 = -t_star/s_tau; + double a2 = (t_tau-t_star)/s_tau; + + // analytic computation of inner integral + //return tau.computeArea(); // this is the identity + return 0.25*(F(s_tau,a2,sx,tx,ux) - F(0.,a2,sx,tx,ux) + - F(s_tau,a1,sx,tx,ux) + F(0.,a1,sx,tx,ux))/M_PI; +} + +template < class TMesh > +double +ComputeSimpleLayerPotentialEntry< TMesh >::F( + double s, double a, double sx, double tx, double ux) +{ + double p = (a*tx+sx)/(1.+a*a); + double q = sqrt(ux*ux + ((tx-a*sx)*(tx-a*sx)/(1.+a*a))); + + double tmp = ((q-(a*sx-tx)/(1.+a*a))*sqrt((1.+a*a)*(s-p)*(s-p)+q*q) + + (a*s-tx-q)*q)/(s-p); + double aux1 = 0.; + double aux2 = 0.; + double aux3 = 0.; + + if ( fabs(ux) <= eps ) + aux1 = 0.; + else { + aux1 = tmp/ux; + if ( fabs(s-p) < eps ) + if ( aux1 > 0 ) + aux1 = ux*M_PI; + else + aux1 = -ux*M_PI; + else + aux1 = 2*ux*atan( aux1/(s-p) ); + + } + + if ( fabs(q) < eps ) + aux2 = 0.; + else + aux2 = (a*sx-tx)*log(sqrt(1.+a*a)*(s-p) + + sqrt((1.+a*a)*(s-p)*(s-p) + q*q))/sqrt(1.+a*a); + + if ( fabs(s-sx) < eps ) + aux3 = 0.; + else + aux3 = (s-sx)*log(a*s - tx + sqrt((s-sx)*(s-sx) + (a*s-tx)*(a*s-tx) + ux*ux)); + + return aux3 - s + aux2 + aux1; +} + +//space::DFunc SimpleLayerPotential::solve(space::DFunc& rhs) +//{ +// // TODO: test, if space of DFunc rhs is the same as testSpace_ of SLP +// +// space::DFunc result(ansatzSpace_); +// +// std::vector solution = solveGMRes(rhs.getCoeff()); +// result.setCoeff(solution); +// +// return result; +//} + +//void fill_supermatrix_aca_OLD(supermatrix* A, const cluster* row, const cluster* col, void *data, +// double (*compute_entry)(int i, int j, void* data), double aca_eps) +//{ +//// std::cerr << "*** fill_supermatrix_aca" << std::endl; +// +// fullmatrix* f = A->f; +// rkmatrix* r = A->r; +// int i, j; +// int rank; +// +// if ( f!= NULL ) { // fill fullmatrix block +//// std::cerr << "*** full matrix block" << std::endl; +// for ( i=0; isize; i++ ){ +// for ( j=0; jsize; j++ ) +// f->e[i+j*row->size] = compute_entry(row->start+i,col->start+j, data); +// } +// +// return; +// } +// +// if ( r!= NULL ) { // fill rk-block with aca +//// std::cerr << "*** rank k matrix block" << std::endl; +// if ( r->rows > r-> cols ) +// rank = r->cols; +// else +// rank = r->rows; +// +// if ( rank > ACA_KMAX ) +// rank = ACA_KMAX; +// +// r->k = rank; +// r->a = allocate_matrix(r->rows,rank); +// r->b = allocate_matrix(r->cols,rank); +// +// r->kt = newaca_fill_block(r->a, r->b, r->rows, r->cols, +// row->start, col->start, +// compute_entry, data, +// rank, aca_eps, ACA_STRATEGY); +// +// r->a = (double*) realloc(r->a,r->rows*r->kt*sizeof(double)); +// r->b = (double*) realloc(r->b,r->cols*r->kt*sizeof(double)); +// r->k = r->kt; +// +// return; +// } +// +// if(row->sons>0) { +// if(col->sons>0) { +// for(int i=0;isons;++i) +// for(int j=0;jsons;++j) { +// int s=i+j*row->sons; +// fill_supermatrix_aca_OLD(A->s[s],row->son[i],col->son[j],data,compute_entry,aca_eps); +// } +// } else { +// for(int i=0;isons;++i) +// fill_supermatrix_aca_OLD(A->s[i],row->son[i],col,data,compute_entry,aca_eps); +// } +// } else { +// for(int i=0;isons;++i) +// fill_supermatrix_aca_OLD(A->s[i],row,col->son[i],data,compute_entry,aca_eps); +// } +//} + diff --git a/src/bem3d/src/laplace/SimpleLayerPotential.hpp b/src/bem3d/src/laplace/SimpleLayerPotential.hpp index fe0e8f0..3630b0e 100644 --- a/src/bem3d/src/laplace/SimpleLayerPotential.hpp +++ b/src/bem3d/src/laplace/SimpleLayerPotential.hpp @@ -14,6 +14,8 @@ namespace laplace template < class TMesh = BoundaryMesh > class ComputeSimpleLayerPotentialEntry { + friend class testing::Tester< TMesh >; + public: double exec( const typename TMesh::Prop::Triangle& f1, const typename TMesh::Prop::Triangle& f2 ) const; @@ -39,14 +41,14 @@ namespace laplace SimpleLayerPotential(const space::P0Space &space); virtual ~SimpleLayerPotential(); + // TODO: what about an abstract base class for potentials? +// space::DFunc solve(space::DFunc& rhs); + private: static double computeEntry( const space::P0Space::Element& e1,const space::P0Space::Element &e2); }; -#if 0 - void fill_supermatrix_aca(supermatrix*, const cluster*, const cluster*, void*, double* (compute_entry)(int, int, void*), double); -#endif } #endif diff --git a/src/bem3d/src/laplace/TriangleIntegrator.cpp b/src/bem3d/src/laplace/TriangleIntegrator.cpp index c697415..bc29a12 100644 --- a/src/bem3d/src/laplace/TriangleIntegrator.cpp +++ b/src/bem3d/src/laplace/TriangleIntegrator.cpp @@ -85,6 +85,25 @@ TriangleIntegrator::integrate( return sum; } +double +TriangleIntegrator::integrate( + const BoundaryMesh::Prop::Triangle & triangle, + const boost::function& integrand) + const +{ + int gauss_order = m_r.size(); + double sum = 0.; + + for (int i = 0; i < gauss_order; ++i) + { + sum += m_weights[i] * integrand(computeIthEvaluationPoint( triangle, m_r[i], m_s[i] )); + } + + sum *= 2 * triangle.computeArea(); + // Factor 2 is becase gauss-weights sum up tp 0.5 + return sum; +} + BoundaryMesh::UVertex TriangleIntegrator::computeIthEvaluationPoint( const BoundaryMesh::Prop::Triangle & triangle, diff --git a/src/bem3d/src/laplace/TriangleIntegrator.hpp b/src/bem3d/src/laplace/TriangleIntegrator.hpp index 6f78276..9555725 100644 --- a/src/bem3d/src/laplace/TriangleIntegrator.hpp +++ b/src/bem3d/src/laplace/TriangleIntegrator.hpp @@ -2,6 +2,7 @@ #define HILBERT3D_LAPLACE_TRIANGLEINTEGRATOR_HPP_GUARD_ #include +#include #include "../hilbert.hpp" class TriangleIntegrator { @@ -51,6 +52,11 @@ class TriangleIntegrator { double (*integrand)(const BoundaryMesh::UVertex & point)) const; + double integrate( + const BoundaryMesh::Prop::Triangle& triangle, + const boost::function&) + const; + private: static BoundaryMesh::UVertex computeIthEvaluationPoint( diff --git a/src/bem3d/src/laplace/t.cpp b/src/bem3d/src/laplace/t.cpp index 83510f2..2651103 100644 --- a/src/bem3d/src/laplace/t.cpp +++ b/src/bem3d/src/laplace/t.cpp @@ -9,49 +9,104 @@ using namespace laplace; int main() { - const BoundaryMesh m = BoundaryMesh::Alg::loadFromObj("test_small.obj"); - std::cerr << "coarse mesh has " << m.getNumberOfFaces() << " faces" << std::endl; + BoundaryMesh m = BoundaryMesh::Alg::loadFromObj("Lshape.obj"); + std::cerr << "# coarse mesh has " << m.getNumberOfFaces() << " faces" << std::endl; clock_t commence, complete; - commence = clock(); - const BoundaryMesh refined = - BoundaryMesh::Alg::refineUniformly( - BoundaryMesh::Alg::refineUniformly( - BoundaryMesh::Alg::refineUniformly( - BoundaryMesh::Alg::refineUniformly( - BoundaryMesh::Alg::refineUniformly( m ) ) ) )); - complete = clock(); - long lTime = (complete-commence); - std::cerr << "fine mesh has " << refined.getNumberOfFaces() << " faces" << std::endl; - std::cerr << "Time for refinement: " - << lTime * 1000.0 / CLOCKS_PER_SEC << std::endl; - - commence = clock(); - P0Space s(refined); - complete = clock(); - lTime = (complete-commence); - std::cerr << "Time for setting up space: " - << lTime * 1000.0 / CLOCKS_PER_SEC << std::endl; - - commence = clock(); - SimpleLayerPotential V(s); - complete = clock(); - lTime = (complete-commence); - std::cerr << "Time for setting up Simple Layer Potential: " - << lTime * 1000.0 / CLOCKS_PER_SEC << std::endl; - - std::vector< double >rhs( s.getNumberOfElements(), 0. ); - for ( int i=0; irhs( s.getNumberOfElements(), 0. ); +// for ( int i=0; i solution = V.solveGMRes(rhs); +// P0Space::DFunc f(s,rhs); +// P0Space::DFunc phi = V.solve(f); +// complete = clock(); +// lTime = (complete-commence); +// std::cerr << "Time for solving: " +// << lTime * 1000.0 / CLOCKS_PER_SEC << std::endl; + + for ( int i=0; i<5; ++i) { + commence = clock(); + m = BoundaryMesh::Alg::refineUniformly(m); + complete = clock(); + long lTime = (complete - commence); + std::cerr << "# mesh has " << m.getNumberOfFaces() << " faces" << std::endl; + std::cerr << "Time for refinement: " + << lTime * 1000.0 / CLOCKS_PER_SEC << std::endl; + + commence = clock(); + P0Space s(m); + complete = clock(); + std::cerr << "Time for setting up space: " + << lTime * 1000.0 / CLOCKS_PER_SEC << std::endl; + + commence = clock(); + SimpleLayerPotential V(s); + complete = clock(); + lTime = (complete-commence); + std::cerr << "Time for setting up Simple Layer Potential: " + << lTime * 1000.0 / CLOCKS_PER_SEC << std::endl; + + std::vector< double >rhs( s.getNumberOfElements(), 0. ); + for ( int i=0; i solution = V.solveGMRes(rhs); - complete = clock(); - lTime = (complete-commence); - std::cerr << "Time for solving: " - << lTime * 1000.0 / CLOCKS_PER_SEC << std::endl; + commence = clock(); +// std::vector< double > solution = V.solveGMRes(rhs); + P0Space::DFunc f(s,rhs); + P0Space::DFunc phi = V.solve(f); + complete = clock(); + lTime = (complete-commence); + std::cerr << "Time for solving: " + << lTime * 1000.0 / CLOCKS_PER_SEC << std::endl; + + double energy = V.energy(phi); + std::cerr << "energy: " << energy << std::endl; + +// std::vector aux = phi.getCoeff(); + +// std::cerr << "# solution = "; +// for ( int j=0; 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

yNJF`-O-2|EOf-fFh! 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�KvBv>0bC! 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