diff --git a/Makefile b/Makefile
index 84050841bff781f0f72822b4758b8cd010dc2006..9e24091264cc02ed06ad9ef342f19292a3b96cda 100644
--- a/Makefile
+++ b/Makefile
@@ -235,7 +235,8 @@ tags:
 	htags
 
 etags:
-	etags `find . \( -name "*.cpp" -o -name "*.h" -o -name "*.y" -o -name "*.l" \)`
+	etags `find . \( -name "*.cpp" -o -name "*.c" -o -name "*.h" -o\
+                         -name "*.y" -o -name "*.l" \)`
 
 # Rules to package the sources
 
diff --git a/configure b/configure
index 30e2cfe9c261bdeb43a73aad8349e14f0902c349..a0f1b2aa6e87fb2d7ae070ab51af793f3a7e8f9e 100755
--- a/configure
+++ b/configure
@@ -1274,7 +1274,7 @@ Optional Features:
   --enable-netgen         compile Netgen if available (default=yes)
   --enable-ann            compile ANN if available (default=yes)
   --enable-metis          compile METIS partitioner (default=yes)
-  --enable-chaco          compile Chaco partitioner (default=no)
+  --enable-chaco          compile Chaco partitioner (default=yes)
   --enable-tetgen         compile Tetgen if available (default=yes)
   --enable-matheval       compile MathEval if available (default=yes)
   --enable-gmm            use gmm++ if available (default=yes)
@@ -4582,7 +4582,7 @@ _ACEOF
     fi
   fi
 
-    if test "x$enable_chaco" = "xyes"; then
+    if test "x$enable_chaco" != "xno"; then
     { echo "$as_me:$LINENO: checking for ./contrib/Chaco/main/interface.c" >&5
 echo $ECHO_N "checking for ./contrib/Chaco/main/interface.c... $ECHO_C" >&6; }
 if test "${ac_cv_file___contrib_Chaco_main_interface_c+set}" = set; then
diff --git a/configure.in b/configure.in
index 89667e7f8d75a3f8d8c6e9b280b7a568398cd789..33a246cbf76df166fcf0a7b93d8a73b797dd3bab 100644
--- a/configure.in
+++ b/configure.in
@@ -102,7 +102,7 @@ AC_ARG_ENABLE(metis,
                              [compile METIS partitioner (default=yes)]))
 AC_ARG_ENABLE(chaco,
               AC_HELP_STRING([--enable-chaco],
-                             [compile Chaco partitioner (default=no)]))
+                             [compile Chaco partitioner (default=yes)]))
 AC_ARG_ENABLE(tetgen,
               AC_HELP_STRING([--enable-tetgen],
                              [compile Tetgen if available (default=yes)]))
@@ -454,7 +454,7 @@ if test "x$enable_contrib" != "xno"; then
   fi
 
   dnl Check for Chaco partitionner
-  if test "x$enable_chaco" = "xyes"; then
+  if test "x$enable_chaco" != "xno"; then
     AC_CHECK_FILE(./contrib/Chaco/main/interface.c,CHACO="yes")
     if test "x${CHACO}" = "xyes"; then
       GMSH_DIRS="${GMSH_DIRS} contrib/Chaco"
diff --git a/contrib/Chaco/symmlq/symmlq.c b/contrib/Chaco/symmlq/symmlq.c
index 1448a0ec00e1951e65dca43be60983b2e28aca87..50ae65f10bc20a9c98c84072693820cf91a01199 100644
--- a/contrib/Chaco/symmlq/symmlq.c
+++ b/contrib/Chaco/symmlq/symmlq.c
@@ -35,16 +35,16 @@ integer *itnmin;
 
     /* Local variables */
     static doublereal alfa, diag, dbar, beta, gbar, oldb, epsa;
-    extern doublereal ddot_();
+    extern doublereal ddot_chaco_();
     static doublereal gmin, gmax, zbar, epsr, epsx, beta1;
-    extern doublereal dnrm2_();
+    extern doublereal dnrm2_chaco_();
     static integer i;
     static doublereal gamma, s, t, delta, z, denom;
     extern /* Subroutine */ int aprod_();
     static doublereal bstep;
-    extern /* Subroutine */ int dcopy_();
+    extern /* Subroutine */ int dcopy_chaco_();
     static doublereal epsln;
-    extern /* Subroutine */ int daxpy_();
+    extern /* Subroutine */ int daxpy_chaco_();
     static doublereal tnorm, cs, ynorm2, sn, cgnorm;
     extern /* Subroutine */ int msolve_();
     static doublereal snprod, lqnorm, qrnorm, eps, rhs1, rhs2;
@@ -467,7 +467,7 @@ ist ) -rwl*/
 /*     Subroutines and functions */
 
 /*     USER       aprod, msolve */
-/*     BLAS       daxpy, dcopy, ddot , dnrm2 */
+/*     BLAS       daxpy_chaco, dcopy_chaco, ddot_chaco , dnrm2_chaco */
 
 
 /*     Intrinsics and local variables */
@@ -492,7 +492,7 @@ L10:
     eps /= 2.;
     x[1] = eps;
     y[1] = 1.;
-    daxpy_(&c__1, &c_b4, &x[1], &c__1, &y[1], &c__1);
+    daxpy_chaco_(&c__1, &c_b4, &x[1], &c__1, &y[1], &c__1);
     if (y[1] > 1.) {
 	goto L10;
     }
@@ -519,8 +519,8 @@ L10:
 /*     Set up y for the first Lanczos vector v1. */
 /*     y is really beta1 * P * v1  where  P = C**(-1). */
 /*     y and beta1 will be zero if b = 0. */
-    dcopy_(n, &b[1], &c__1, &y[1], &c__1);
-    dcopy_(n, &b[1], &c__1, &r1[1], &c__1);
+    dcopy_chaco_(n, &b[1], &c__1, &y[1], &c__1);
+    dcopy_chaco_(n, &b[1], &c__1, &r1[1], &c__1);
     if (*precon) {
 	msolve_(n, &r1[1], &y[1], a, &vwsqrt[1], &work[1]);
     }
@@ -529,12 +529,12 @@ L10:
 /*     else */
 /*        b1  = zero */
 /*     end if */
-    beta1 = ddot_(n, &r1[1], &c__1, &y[1], &c__1);
+    beta1 = ddot_chaco_(n, &r1[1], &c__1, &y[1], &c__1);
 /*     See if msolve is symmetric. */
     if (*checka && *precon) {
 	msolve_(n, &y[1], &r2[1], a, &vwsqrt[1], &work[1]);
-	s = ddot_(n, &y[1], &c__1, &y[1], &c__1);
-	t = ddot_(n, &r1[1], &c__1, &r2[1], &c__1);
+	s = ddot_chaco_(n, &y[1], &c__1, &y[1], &c__1);
+	t = ddot_chaco_(n, &r1[1], &c__1, &r2[1], &c__1);
 	z = (d__1 = s - t, abs(d__1));
 	epsa = (s + eps) * pow_dd(&eps, &c_b18);
 	if (z > epsa) {
@@ -563,8 +563,8 @@ L10:
     aprod_(n, &v[1], &y[1], a, &vwsqrt[1], &work[1], orthlist);
     if (*checka) {
 	aprod_(n, &y[1], &r2[1], a, &vwsqrt[1], &work[1], orthlist);
-	s = ddot_(n, &y[1], &c__1, &y[1], &c__1);
-	t = ddot_(n, &v[1], &c__1, &r2[1], &c__1);
+	s = ddot_chaco_(n, &y[1], &c__1, &y[1], &c__1);
+	t = ddot_chaco_(n, &v[1], &c__1, &r2[1], &c__1);
 	z = (d__1 = s - t, abs(d__1));
 	epsa = (s + eps) * pow_dd(&eps, &c_b18);
 	if (z > epsa) {
@@ -576,21 +576,21 @@ L10:
 /*     Again, y is beta * P * v2  where  P = C**(-1). */
 /*     y and beta will be zero or very small if b is an eigenvector. */
     d__1 = -(*shift);
-    daxpy_(n, &d__1, &v[1], &c__1, &y[1], &c__1);
-    alfa = ddot_(n, &v[1], &c__1, &y[1], &c__1);
+    daxpy_chaco_(n, &d__1, &v[1], &c__1, &y[1], &c__1);
+    alfa = ddot_chaco_(n, &v[1], &c__1, &y[1], &c__1);
     d__1 = -alfa / beta1;
-    daxpy_(n, &d__1, &r1[1], &c__1, &y[1], &c__1);
+    daxpy_chaco_(n, &d__1, &r1[1], &c__1, &y[1], &c__1);
 /*     Make sure  r2  will be orthogonal to the first  v. */
-    z = ddot_(n, &v[1], &c__1, &y[1], &c__1);
-    s = ddot_(n, &v[1], &c__1, &v[1], &c__1);
+    z = ddot_chaco_(n, &v[1], &c__1, &y[1], &c__1);
+    s = ddot_chaco_(n, &v[1], &c__1, &v[1], &c__1);
     d__1 = -z / s;
-    daxpy_(n, &d__1, &v[1], &c__1, &y[1], &c__1);
-    dcopy_(n, &y[1], &c__1, &r2[1], &c__1);
+    daxpy_chaco_(n, &d__1, &v[1], &c__1, &y[1], &c__1);
+    dcopy_chaco_(n, &y[1], &c__1, &r2[1], &c__1);
     if (*precon) {
 	msolve_(n, &r2[1], &y[1], a, &vwsqrt[1], &work[1]);
     }
     oldb = beta1;
-    beta = ddot_(n, &r2[1], &c__1, &y[1], &c__1);
+    beta = ddot_chaco_(n, &r2[1], &c__1, &y[1], &c__1);
     if (beta < 0.) {
 	*istop = 8;
 	goto L900;
@@ -601,9 +601,9 @@ L10:
 	*istop = -1;
     }
 /*     See if the local reorthogonalization achieved anything. */
-    denom = sqrt(s) * dnrm2_(n, &r2[1], &c__1) + eps;
+    denom = sqrt(s) * dnrm2_chaco_(n, &r2[1], &c__1) + eps;
     s = z / denom;
-    t = ddot_(n, &v[1], &c__1, &r2[1], &c__1) / denom;
+    t = ddot_chaco_(n, &v[1], &c__1, &r2[1], &c__1) / denom;
 /*     if (nout .gt. 0  .and.  goodb) then */
 /*        write(nout, 1100) beta1, alfa, s, t */
 /*     end if */
@@ -628,7 +628,7 @@ L10:
 /* L200: */
 	}
     } else {
-	dcopy_(n, &v[1], &c__1, &w[1], &c__1);
+	dcopy_chaco_(n, &v[1], &c__1, &w[1], &c__1);
     }
 /*     ------------------------------------------------------------------ 
 */
@@ -746,24 +746,24 @@ L600:
     }
     aprod_(n, &v[1], &y[1], a, &vwsqrt[1], &work[1], orthlist);
     d__1 = -(*shift);
-    daxpy_(n, &d__1, &v[1], &c__1, &y[1], &c__1);
+    daxpy_chaco_(n, &d__1, &v[1], &c__1, &y[1], &c__1);
     d__1 = -beta / oldb;
-    daxpy_(n, &d__1, &r1[1], &c__1, &y[1], &c__1);
-    alfa = ddot_(n, &v[1], &c__1, &y[1], &c__1);
+    daxpy_chaco_(n, &d__1, &r1[1], &c__1, &y[1], &c__1);
+    alfa = ddot_chaco_(n, &v[1], &c__1, &y[1], &c__1);
 /* Computing 2nd power */
     d__1 = alfa;
 /* Computing 2nd power */
     d__2 = beta;
     tnorm = tnorm + d__1 * d__1 + d__2 * d__2 * 2.;
     d__1 = -alfa / beta;
-    daxpy_(n, &d__1, &r2[1], &c__1, &y[1], &c__1);
-    dcopy_(n, &r2[1], &c__1, &r1[1], &c__1);
-    dcopy_(n, &y[1], &c__1, &r2[1], &c__1);
+    daxpy_chaco_(n, &d__1, &r2[1], &c__1, &y[1], &c__1);
+    dcopy_chaco_(n, &r2[1], &c__1, &r1[1], &c__1);
+    dcopy_chaco_(n, &y[1], &c__1, &r2[1], &c__1);
     if (*precon) {
 	msolve_(n, &r2[1], &y[1], a, &vwsqrt[1], &work[1]);
     }
     oldb = beta;
-    beta = ddot_(n, &r2[1], &c__1, &y[1], &c__1);
+    beta = ddot_chaco_(n, &r2[1], &c__1, &y[1], &c__1);
     if (beta < 0.) {
 	*istop = 6;
 	goto L800;
@@ -821,18 +821,18 @@ L800:
 	d__1 = zbar;
 	*ynorm = sqrt(ynorm2 + d__1 * d__1);
 	*rnorm = cgnorm;
-	daxpy_(n, &zbar, &w[1], &c__1, &x[1], &c__1);
+	daxpy_chaco_(n, &zbar, &w[1], &c__1, &x[1], &c__1);
     } else {
 	*rnorm = lqnorm;
     }
     if (*goodb) {
 /*        Add the step along  b. */
 	bstep /= beta1;
-	dcopy_(n, &b[1], &c__1, &y[1], &c__1);
+	dcopy_chaco_(n, &b[1], &c__1, &y[1], &c__1);
 	if (*precon) {
 	    msolve_(n, &b[1], &y[1], a, &vwsqrt[1], &work[1]);
 	}
-	daxpy_(n, &bstep, &y[1], &c__1, &x[1], &c__1);
+	daxpy_chaco_(n, &bstep, &y[1], &c__1, &x[1], &c__1);
     }
 /*     ================================================================== 
 */
diff --git a/contrib/Chaco/symmlq/symmlqblas.c b/contrib/Chaco/symmlq/symmlqblas.c
index 80fa878979d03a1a6612c97492c656ef823f0dd7..b4f5fea7324f5d31ffd60e163e294322a70e488e 100644
--- a/contrib/Chaco/symmlq/symmlqblas.c
+++ b/contrib/Chaco/symmlq/symmlqblas.c
@@ -9,14 +9,14 @@
 
 /*     symmlqblas  fortran */
 
-/*     daxpy    dcopy    ddot     dnrm2 */
+/*     daxpy_chaco    dcopy_chaco    ddot_chaco     dnrm2_chaco_chaco */
 
 /* ** from netlib, Thu May 16 21:00:13 EDT 1991 *** */
 /* ** Declarations of the form dx(1) changed to dx(*) */
 
 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
- /* Subroutine */ int daxpy_(n, da, dx, incx, dy, incy)
+ /* Subroutine */ int daxpy_chaco_(n, da, dx, incx, dy, incy)
 integer  *n;
 doublereal *da, *dx;
 integer  *incx;
@@ -99,10 +99,10 @@ L40:
 /* L50: */
     }
     return 0;
-}				/* daxpy_ */
+}				/* daxpy_chaco_ */
 
 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
- /* Subroutine */ int dcopy_(n, dx, incx, dy, incy)
+ /* Subroutine */ int dcopy_chaco_(n, dx, incx, dy, incy)
 integer  *n;
 doublereal *dx;
 integer  *incx;
@@ -185,10 +185,10 @@ L40:
 /* L50: */
     }
     return 0;
-}				/* dcopy_ */
+}				/* dcopy_chaco_ */
 
 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
-doublereal ddot_(n, dx, incx, dy, incy)
+doublereal ddot_chaco_(n, dx, incx, dy, incy)
 integer  *n;
 doublereal *dx;
 integer  *incx;
@@ -274,10 +274,10 @@ L40:
 L60:
     ret_val = dtemp;
     return ret_val;
-}				/* ddot_ */
+}				/* ddot_chaco_ */
 
 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
-doublereal dnrm2_(n, dx, incx)
+doublereal dnrm2_chaco_(n, dx, incx)
 integer  *n;
 doublereal *dx;
 integer  *incx;
@@ -473,4 +473,4 @@ L200:
     ret_val = xmax * sqrt(sum);
 L300:
     return ret_val;
-}				/* dnrm2_ */
+}				/* dnrm2_chaco_ */