diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3d4b069d2e7339a6b81140ba7a0b3c9c42637f13..5bb163bfc22ba2ce4ccf54d4fe578920fef1a49f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -87,7 +87,7 @@ opt(SALOME "Enable Salome routines for CAD healing" ${DEFAULT})
 opt(SGEOM "Enable SGEOM interface to OCC (experimental)" OFF)
 opt(SLEPC "Enable SLEPc eigensolvers (required for conformal compounds)" ${DEFAULT})
 opt(SOLVER "Enable built-in finite element solvers (required for compounds)" ${DEFAULT})
-opt(TAUCS "Enable Taucs linear solver (alternative to PETSc)" OFF)
+opt(TAUCS "Enable Taucs linear solver" ${DEFAULT})
 opt(TCMALLOC "Enable libtcmalloc, a fast malloc implementation but that does not release memory" OFF)
 opt(TETGEN "Enable Tetgen 3D initial mesh generator" ${DEFAULT})
 opt(TETGEN_OLD "Enable older version of Tetgen" OFF)
@@ -901,7 +901,24 @@ if(HAVE_SOLVER)
     if(HAVE_METIS)
       add_subdirectory(contrib/taucs)
       include_directories(contrib/taucs/src contrib/taucs/config)
-      list(APPEND EXTERNAL_LIBRARIES taucs)
+      if(WIN32)
+        add_definitions(-DOSTYPE_win32)
+      elseif(APPLE)
+        add_definitions(-DOSTYPE_darwin)
+      else(WIN32)
+        add_definitions(-DOSTYPE_linux)
+      endif(WIN32)
+      file(GLOB_RECURSE TAUCS_D ${CMAKE_CURRENT_BINARY_DIR}/contrib/taucs/D/*.c)
+      file(GLOB_RECURSE TAUCS_S ${CMAKE_CURRENT_BINARY_DIR}/contrib/taucs/S/*.c)
+      file(GLOB_RECURSE TAUCS_Z ${CMAKE_CURRENT_BINARY_DIR}/contrib/taucs/Z/*.c)
+      file(GLOB_RECURSE TAUCS_C ${CMAKE_CURRENT_BINARY_DIR}/contrib/taucs/C/*.c)
+      file(GLOB_RECURSE TAUCS_G ${CMAKE_CURRENT_BINARY_DIR}/contrib/taucs/G/*.c)
+      list(APPEND GMSH_SRC ${TAUCS_D};${TAUCS_S};${TAUCS_Z};${TAUCS_C};${TAUCS_G})
+      set_source_files_properties(${TAUCS_D} PROPERTIES COMPILE_FLAGS -DTAUCS_CORE_DOUBLE)
+      set_source_files_properties(${TAUCS_S} PROPERTIES COMPILE_FLAGS -DTAUCS_CORE_SINGLE)
+      set_source_files_properties(${TAUCS_Z} PROPERTIES COMPILE_FLAGS -DTAUCS_CORE_DCOMPLEX)
+      set_source_files_properties(${TAUCS_C} PROPERTIES COMPILE_FLAGS -DTAUCS_CORE_SCOMPLEX)
+      set_source_files_properties(${TAUCS_G} PROPERTIES COMPILE_FLAGS -DTAUCS_CORE_GENERAL)
       set_config_option(HAVE_TAUCS "Taucs")
     else(HAVE_METIS)
       message(STATUS "Warning: Disabling Taucs (requires METIS)")
@@ -1298,22 +1315,35 @@ if(WALL AND NOT MSVC)
     # FIXME: remove this when we have fixed the deprecated GLU code for OpenGL3
     set(WF "${WF} -Wno-deprecated-declarations")
   endif(WDEPREC)
-  set_source_files_properties(${WALL_SRC} PROPERTIES COMPILE_FLAGS ${WF})
+  foreach(FILE ${WALL_SRC})
+    get_source_file_property(PROP ${FILE} COMPILE_FLAGS)
+    if(PROP)
+      set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "${PROP} ${WF}")
+    else(PROP)
+      set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "${WF}")
+    endif(PROP)
+  endforeach(FILE)        
 endif(WALL AND NOT MSVC)
 
 # don't issue warnings for contributed libraries
 check_cxx_compiler_flag("-w" NOWARN)
 if(NOWARN)
-  file(GLOB_RECURSE NOWARN_SRC contrib/*.cpp contrib/*.cc contrib/*.cxx
-                               contrib/*.c)
-  set_source_files_properties(${NOWARN_SRC} PROPERTIES COMPILE_FLAGS "-w")
+  file(GLOB_RECURSE NOWARN_SRC contrib/*.cpp contrib/*.cc contrib/*.cxx contrib/*.c)
+  foreach(FILE ${NOWARN_SRC})
+    get_source_file_property(PROP ${FILE} COMPILE_FLAGS)
+    if(PROP)
+      set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "${PROP} -w")
+    else(PROP)
+      set_source_files_properties(${FILE} PROPERTIES COMPILE_FLAGS "-w")
+    endif(PROP)
+  endforeach(FILE)
 endif(NOWARN)
 
 # disable compile optimization on some known problematic files
 check_cxx_compiler_flag("-O0" NOOPT)
 if(NOOPT)
-  file(GLOB_RECURSE NOOPT_SRC Mesh/BDS.cpp
-                              Parser/Gmsh.tab.cpp contrib/Tetgen*/predicates.cxx)
+  file(GLOB_RECURSE NOOPT_SRC Mesh/BDS.cpp Parser/Gmsh.tab.cpp
+       contrib/Tetgen*/predicates.cxx)
   foreach(FILE ${NOOPT_SRC})
     get_source_file_property(PROP ${FILE} COMPILE_FLAGS)
     if(PROP)
@@ -1849,7 +1879,7 @@ message(STATUS "")
 
 mark_as_advanced(GMSH_EXTRA_VERSION
                  ACIS_LIB ANN_INC ANN_LIB CAIRO_LIB CAIRO_INC CGNS_INC GMM_INC
-                 GMP_INC GMP_LIB MMG3D_INC MMG3D_LIB TAUCS_INC TAUCS_LIB HDF5_LIB
+                 GMP_INC GMP_LIB MMG3D_INC MMG3D_LIB HDF5_LIB
                  MED_LIB OCC_INC OCC_CONFIG_H SZ_LIB
                  PETSC_LIBS SLEPC_INC SLEPC_INC2 SLEPC_LIB
                  BISON FLEX MAKEINFO TEXI2PDF FLTK_CONFIG_SCRIPT
diff --git a/contrib/taucs/CMakeLists.txt b/contrib/taucs/CMakeLists.txt
index c977af31d7099cb4094b99447b7fb32fb45937fd..11afb67ebb1dc682e8beb8d10b635cf01ccd11e4 100644
--- a/contrib/taucs/CMakeLists.txt
+++ b/contrib/taucs/CMakeLists.txt
@@ -6,39 +6,39 @@
 # contributor : Jonathan Lambrechts
 
 set(SRC_MULTI
-  taucs_sn_llt
-  taucs_ccs_base
-  taucs_vec_base
-  taucs_ccs_ops
-  taucs_ccs_io
-  taucs_ccs_factor_llt
-  taucs_ccs_solve_llt
-  taucs_complex
-  taucs_ccs_ooc_llt
-  taucs_ccs_ooc_lu
+  src/taucs_sn_llt.c
+  src/taucs_ccs_base.c
+  src/taucs_vec_base.c
+  src/taucs_ccs_ops.c
+  src/taucs_ccs_io.c
+  src/taucs_ccs_factor_llt.c
+  src/taucs_ccs_solve_llt.c
+  src/taucs_complex.c
+  src/taucs_ccs_ooc_llt.c
+  src/taucs_ccs_ooc_lu.c
 )
 
 set(SRC_DOUBLE
-  taucs_iter
-  taucs_vaidya
-  taucs_recvaidya
-  taucs_gremban
-  taucs_ccs_xxt
-  taucs_ccs_generators
+  src/taucs_iter.c
+  src/taucs_vaidya.c
+  src/taucs_recvaidya.c
+  src/taucs_gremban.c
+  src/taucs_ccs_xxt.c
+  src/taucs_ccs_generators.c
 )
 
 set(SRC_GENERAL
-  taucs_linsolve
-  taucs_ccs_order
-  taucs_memory
-  taucs_logging
-  taucs_timer
-  taucs_ooc_io
-  taucs_malloc
+  src/taucs_linsolve.c
+  src/taucs_ccs_order.c
+  src/taucs_memory.c
+  src/taucs_logging.c
+  src/taucs_timer.c
+  src/taucs_ooc_io.c
+  src/taucs_malloc.c
 )
 
 set(SRC
-  external/src/readhb.c
+  # external/src/readhb.c
   external/src/amdatr.c
   external/src/amdbar.c
   external/src/amdexa.c
@@ -50,45 +50,21 @@ set(SRC
   external/src/colamd.c
 )
 
-function (build_variant SFILE FLAG DNAME)
-  file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/src/${SFILE}.c" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${DNAME}")
-  set(DEST "${CMAKE_CURRENT_BINARY_DIR}/${DNAME}/${SFILE}.c")
-  set_property(SOURCE ${DEST} PROPERTY COMPILE_FLAGS " ${FLAG}")
-  list(APPEND SRC ${DEST})
-  set(SRC ${SRC} PARENT_SCOPE)
-endfunction(build_variant)
+file(GLOB_RECURSE HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h)
+append_gmsh_src(contrib/taucs "${SRC};${HDR}")
 
-foreach(SFILE ${SRC_MULTI})
-  build_variant(${SFILE} "-DTAUCS_CORE_DOUBLE" "D")
-  build_variant(${SFILE} "-DTAUCS_CORE_SINGLE" "S")
-  build_variant(${SFILE} "-DTAUCS_CORE_DCOMPLEX" "Z")
-  build_variant(${SFILE} "-DTAUCS_CORE_SCOMPLEX" "C")
-  build_variant(${SFILE} "-DTAUCS_CORE_GENERAL" "G")
-endforeach(SFILE)
+foreach(FILE ${SRC_MULTI})
+  file(COPY ${FILE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/D)
+  file(COPY ${FILE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/S)
+  file(COPY ${FILE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/Z)
+  file(COPY ${FILE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/C)
+  file(COPY ${FILE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/G)
+endforeach(FILE)
 
-foreach(SFILE ${SRC_DOUBLE})
-  build_variant(${SFILE} "-DTAUCS_CORE_DOUBLE" "D")
-endforeach(SFILE)
+foreach(FILE ${SRC_DOUBLE})
+  file(COPY ${FILE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/D)
+endforeach(FILE)
 
-foreach(SFILE ${SRC_GENERAL})
-  build_variant(${SFILE} "-DTAUCS_CORE_GENERAL" "G")
-endforeach(SFILE)
-
-include_directories(src config)
-
-set (FLAGS "-std=c99 -fPIC")
-
-if(UNIX)
-  if(APPLE)
-    set(FLAGS "${FLAGS} -DOSTYPE_darwin")
-  else(APPLE)
-    set(FLAGS "${FLAGS} -DOSTYPE_linux")
-  endif(APPLE)
-endif(UNIX)
-
-if(WIN32)
-  set(FLAGS "${FLAGS} -DOSTYPE_win32")
-endif(WIN32)
-
-add_library(taucs STATIC ${SRC})
-set_property(TARGET taucs PROPERTY COMPILE_FLAGS ${FLAGS})
+foreach(FILE ${SRC_GENERAL})
+  file(COPY ${FILE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/G)
+endforeach(FILE)
diff --git a/contrib/taucs/src/taucs_ccs_io.c b/contrib/taucs/src/taucs_ccs_io.c
index 18498b0be5febb32ab0c04dc550f546b229281ce..1e73880b49d76c03ae5ba76ec28924b207da3801 100644
--- a/contrib/taucs/src/taucs_ccs_io.c
+++ b/contrib/taucs/src/taucs_ccs_io.c
@@ -30,7 +30,7 @@
 
 #ifdef TAUCS_CORE_GENERAL
 
-taucs_ccs_matrix* 
+taucs_ccs_matrix*
 taucs_ccs_read_binary(char* filename)
 {
   taucs_ccs_matrix* A = NULL; /* warning*/
@@ -40,7 +40,7 @@ taucs_ccs_read_binary(char* filename)
   int*    colptr;
 
   taucs_printf("taucs_ccs_binary: reading binary matrix %s\n",filename);
-  
+
 #ifdef OSTYPE_win32
   f = open(filename,_O_RDONLY |_O_BINARY);
 #else
@@ -57,7 +57,7 @@ taucs_ccs_read_binary(char* filename)
 
   colptr = (int*) taucs_malloc((ncols+1) * sizeof(int));
   assert(colptr);
-  
+
   bytes_read = read(f,colptr,(ncols+1)*sizeof(int));
 
   taucs_printf("colptr = [");
@@ -107,7 +107,7 @@ taucs_ccs_read_binary(char* filename)
   }
 
   A->flags = flags;
-  
+
   for (j=0; j<=ncols; j++) (A->colptr)[j] = colptr[j];
 
   taucs_free(colptr);
@@ -124,14 +124,15 @@ taucs_ccs_read_binary(char* filename)
 /*********************************************************/
 
 
-taucs_ccs_matrix* 
+taucs_ccs_matrix*
 taucs_ccs_read_hb(char* filename,int flags)
 {
+#if 0 // Gmsh - to remove dependencies
   taucs_ccs_matrix* A = NULL;
   int  nrows,ncols,nnz,j;
   char fname[256];
   char type[3];
-  
+
   for (j=0; j<256; j++) fname[j] = ' ';
   strcpy(fname,filename);
 
@@ -273,6 +274,9 @@ taucs_ccs_read_hb(char* filename,int flags)
   taucs_printf("taucs_ccs_read_hb: done reading\n");
 
   return A;
+#else
+  return 0;
+#endif
 }
 
 
@@ -304,7 +308,7 @@ taucs_ccs_write_ijv(taucs_ccs_matrix* m, char* ijvfilename)
   if (m->flags & TAUCS_SCOMPLEX)
     return taucs_cccs_write_ijv(m,ijvfilename);
 #endif
-  
+
   assert(0);
   /*added omer*/
   return -1;
@@ -315,7 +319,7 @@ taucs_ccs_write_ijv(taucs_ccs_matrix* m, char* ijvfilename)
 
 #ifndef TAUCS_CORE_GENERAL
 int
-taucs_dtl(ccs_write_ijv)(taucs_ccs_matrix* m, 
+taucs_dtl(ccs_write_ijv)(taucs_ccs_matrix* m,
 			 char* ijvfilename)
 {
   int i,ip,j,n;
@@ -330,7 +334,7 @@ taucs_dtl(ccs_write_ijv)(taucs_ccs_matrix* m,
   }
 
   n = m->n;
-  
+
   for (j=0; j<n; j++) {
     for (ip = (m->colptr)[j]; ip < (m->colptr[j+1]); ip++) {
       i   = (m->rowind)[ip];
@@ -347,18 +351,18 @@ taucs_dtl(ccs_write_ijv)(taucs_ccs_matrix* m,
       if (i != j && ((m->flags) & TAUCS_SYMMETRIC))
 	fprintf(f,"%d %d %0.9e\n",j+1,i+1,Aij);
 #endif
-      
+
 #ifdef TAUCS_CORE_DCOMPLEX
       fprintf(f,"%d %d %0.17e+%0.17ei\n",i+1,j+1,taucs_re(Aij),taucs_im(Aij));
       if (i != j && ((m->flags) & TAUCS_SYMMETRIC))
 	fprintf(f,"%d %d %0.17e+%0.17ei\n",j+1,i+1,taucs_re(Aij),taucs_re(Aij));
 #endif
-      
+
 #ifdef TAUCS_CORE_SCOMPLEX
       fprintf(f,"%d %d %0.9e+%0.9ei\n",i+1,j+1,taucs_re(Aij),taucs_im(Aij));
       if (i != j && ((m->flags) & TAUCS_SYMMETRIC))
 	fprintf(f,"%d %d %0.9e+%0.9ei\n",j+1,i+1,taucs_re(Aij),taucs_im(Aij));
-#endif      
+#endif
 
     }
   }
@@ -366,7 +370,7 @@ taucs_dtl(ccs_write_ijv)(taucs_ccs_matrix* m,
   fclose(f);
 
   return 0;
-} 
+}
 
 #endif /*#ifndef TAUCS_CORE_GENERAL*/
 
@@ -376,7 +380,7 @@ taucs_dtl(ccs_write_ijv)(taucs_ccs_matrix* m,
 
 #ifdef TAUCS_CORE_GENERAL
 
-taucs_ccs_matrix* 
+taucs_ccs_matrix*
 taucs_ccs_read_ijv(char* ijvfilename,int flags)
 {
 
@@ -399,7 +403,7 @@ taucs_ccs_read_ijv(char* ijvfilename,int flags)
   if (flags & TAUCS_SCOMPLEX)
     return taucs_cccs_read_ijv(ijvfilename,flags);
 #endif
-  
+
   assert(0);
   /*added omer*/
   return NULL;
@@ -409,13 +413,13 @@ taucs_ccs_read_ijv(char* ijvfilename,int flags)
 
 #ifndef TAUCS_CORE_GENERAL
 
-taucs_ccs_matrix* 
+taucs_ccs_matrix*
 taucs_dtl(ccs_read_ijv)(char* ijvfilename,int flags)
 {
   FILE* f;
   taucs_ccs_matrix*  m;
-  int*    clen; 
-  int*    is; 
+  int*    clen;
+  int*    is;
   int*    js;
   taucs_datatype* vs;
   int ncols, nrows, nnz;
@@ -436,8 +440,8 @@ taucs_dtl(ccs_read_ijv)(char* ijvfilename,int flags)
   vs = (taucs_datatype*) taucs_malloc(n*sizeof(taucs_datatype));
   if (!is || !js || !vs) {
     taucs_printf("symccs_read_ijv: out of memory\n");
-    taucs_free(is); taucs_free(js); taucs_free(vs); 
-    return NULL; 
+    taucs_free(is); taucs_free(js); taucs_free(vs);
+    return NULL;
   }
 
   nnz = 0;
@@ -449,10 +453,10 @@ taucs_dtl(ccs_read_ijv)(char* ijvfilename,int flags)
       is = (int*)    taucs_realloc(is,n*sizeof(int));
       js = (int*)    taucs_realloc(js,n*sizeof(int));
       vs = (taucs_datatype*) taucs_realloc(vs,n*sizeof(taucs_datatype));
-      if (!is || !js || !vs) { 
+      if (!is || !js || !vs) {
 	taucs_printf("taucs_ccs_read_ijv: out of memory\n");
-	taucs_free(is); taucs_free(js); taucs_free(vs); 
-	return NULL; 
+	taucs_free(is); taucs_free(js); taucs_free(vs);
+	return NULL;
       }
     }
 
@@ -481,8 +485,8 @@ taucs_dtl(ccs_read_ijv)(char* ijvfilename,int flags)
 
     is[nnz] = (int)di; js[nnz] = (int)dj; vs[nnz] = dv;/*omer*/
     /* we read the lower part */
-    if ((flags & TAUCS_SYMMETRIC) && is[nnz] < js[nnz]) continue; 
-    if ((flags & TAUCS_HERMITIAN) && is[nnz] < js[nnz]) continue; 
+    if ((flags & TAUCS_SYMMETRIC) && is[nnz] < js[nnz]) continue;
+    if ((flags & TAUCS_HERMITIAN) && is[nnz] < js[nnz]) continue;
     nrows = max(is[nnz],nrows);
     ncols = max(js[nnz],ncols);
     nnz++;
@@ -491,17 +495,17 @@ taucs_dtl(ccs_read_ijv)(char* ijvfilename,int flags)
   fclose ( f );
 
   m = (taucs_ccs_matrix*) taucs_malloc(sizeof(taucs_ccs_matrix));
-  if (!m) { 
+  if (!m) {
     taucs_printf("taucs_ccs_read_ijv: out of memory\n");
-    taucs_free(is); taucs_free(js); taucs_free(vs); 
-    return NULL; 
+    taucs_free(is); taucs_free(js); taucs_free(vs);
+    return NULL;
   }
   m->n      = nrows;
   m->m      = ncols;
   m->flags  = 0;
-  if (flags & TAUCS_SYMMETRIC) 
+  if (flags & TAUCS_SYMMETRIC)
     m->flags  = TAUCS_SYMMETRIC | TAUCS_LOWER;
-  if (flags & TAUCS_HERMITIAN) 
+  if (flags & TAUCS_HERMITIAN)
     m->flags  = TAUCS_HERMITIAN | TAUCS_LOWER;
 
 #ifdef TAUCS_CORE_DOUBLE
@@ -526,10 +530,10 @@ taucs_dtl(ccs_read_ijv)(char* ijvfilename,int flags)
   m->taucs_values = (taucs_datatype*) taucs_malloc(nnz * sizeof(taucs_datatype));
   if (!clen || !(m->colptr) || !(m->rowind) || !(m->rowind)) {
     taucs_printf("taucs_ccs_read_ijv: out of memory: ncols=%d nnz=%d\n",ncols,nnz);
-    taucs_free(clen); taucs_free(m->colptr); taucs_free(m->rowind); 
+    taucs_free(clen); taucs_free(m->colptr); taucs_free(m->rowind);
     taucs_free(m->taucs_values);
-    taucs_free (m); taucs_free(is); taucs_free(js); taucs_free(vs); 
-    return NULL; 
+    taucs_free (m); taucs_free(is); taucs_free(js); taucs_free(vs);
+    return NULL;
   }
 
   for (j=0; j<ncols; j++) clen[j] = 0;
@@ -540,12 +544,12 @@ taucs_dtl(ccs_read_ijv)(char* ijvfilename,int flags)
   }
   /* just check */
   k = 0;
-  for (j=0; j<ncols; j++) 
+  for (j=0; j<ncols; j++)
     k += clen[j];
   assert(k == nnz);
 
   /* now compute column pointers */
-  
+
   k = 0;
   for (j=0; j<ncols; j++) {
     int tmp;
@@ -555,7 +559,7 @@ taucs_dtl(ccs_read_ijv)(char* ijvfilename,int flags)
   }
   clen[ncols] = (m->colptr[ncols]) = k;
   assert(clen[ncols] == nnz);
-  
+
   /* now read matrix into data structure */
 
   for (k=0; k<nnz; k++) {
@@ -567,16 +571,16 @@ taucs_dtl(ccs_read_ijv)(char* ijvfilename,int flags)
     (m->rowind)[ clen[j] ] = i;
     clen[j] ++;
   }
-  
+
   taucs_free(clen);
   taucs_free(vs);
   taucs_free(js);
   taucs_free(is);
-  
+
   taucs_printf("taucs_ccs_read_ijv: read %s, n=%d\n",ijvfilename,m->n);
 
   return m;
-} 
+}
 
 #endif /*#ifndef TAUCS_CORE_GENERAL*/
 
@@ -586,7 +590,7 @@ taucs_dtl(ccs_read_ijv)(char* ijvfilename,int flags)
 
 #ifdef TAUCS_CORE_GENERAL
 
-taucs_ccs_matrix* 
+taucs_ccs_matrix*
 taucs_ccs_read_mtx(char* mtxfilename,int flags)
 {
 
@@ -608,8 +612,8 @@ taucs_ccs_read_mtx(char* mtxfilename,int flags)
 #ifdef TAUCS_SCOMPLEX_IN_BUILD
   if (flags & TAUCS_SCOMPLEX)
     return taucs_cccs_read_mtx(mtxfilename,flags);
-#endif  
-	
+#endif
+
   assert(0);
   /*added omer*/
   return NULL;
@@ -619,13 +623,13 @@ taucs_ccs_read_mtx(char* mtxfilename,int flags)
 
 #ifndef TAUCS_CORE_GENERAL
 
-taucs_ccs_matrix* 
+taucs_ccs_matrix*
 taucs_dtl(ccs_read_mtx)(char* filename,int flags)
 {
   FILE* f;
   taucs_ccs_matrix*  m;
-  int*    clen; 
-  int*    is; 
+  int*    clen;
+  int*    is;
   int*    js;
   taucs_datatype* vs;
   int ncols, nrows, nnz;
@@ -651,8 +655,8 @@ taucs_dtl(ccs_read_mtx)(char* filename,int flags)
   vs = (taucs_datatype*) taucs_malloc(n*sizeof(taucs_datatype));
   if (!is || !js || !vs) {
     taucs_printf("taucs_ccs_read_mtx: out of memory\n");
-    taucs_free(is); taucs_free(js); taucs_free(vs); 
-    return NULL; 
+    taucs_free(is); taucs_free(js); taucs_free(vs);
+    return NULL;
   }
 
   nnz = 0;
@@ -664,10 +668,10 @@ taucs_dtl(ccs_read_mtx)(char* filename,int flags)
       is = (int*)    taucs_realloc(is,n*sizeof(int));
       js = (int*)    taucs_realloc(js,n*sizeof(int));
       vs = (taucs_datatype*) taucs_realloc(vs,n*sizeof(taucs_datatype));
-      if (!is || !js || !vs) { 
+      if (!is || !js || !vs) {
 	taucs_printf("taucs_ccs_read_mtx: out of memory\n");
-	taucs_free(is); taucs_free(js); taucs_free(vs); 
-	return NULL; 
+	taucs_free(is); taucs_free(js); taucs_free(vs);
+	return NULL;
       }
     }
 
@@ -728,14 +732,14 @@ taucs_dtl(ccs_read_mtx)(char* filename,int flags)
   fclose ( f );
 
   m = (taucs_ccs_matrix*) taucs_malloc(sizeof(taucs_ccs_matrix));
-  if (!m) { 
+  if (!m) {
     taucs_printf("taucs_ccs_read_mtx: out of memory\n");
-    taucs_free(is); taucs_free(js); taucs_free(vs); 
-    return NULL; 
+    taucs_free(is); taucs_free(js); taucs_free(vs);
+    return NULL;
   }
   m->n      = nrows;
   m->m      = ncols;
-  if (flags & TAUCS_SYMMETRIC) 
+  if (flags & TAUCS_SYMMETRIC)
     m->flags  = TAUCS_SYMMETRIC | TAUCS_LOWER;
   else
     m->flags  = 0;
@@ -762,10 +766,10 @@ taucs_dtl(ccs_read_mtx)(char* filename,int flags)
   m->taucs_values = (taucs_datatype*) taucs_malloc(nnz * sizeof(taucs_datatype));
   if (!clen || !(m->colptr) || !(m->rowind) || !(m->rowind)) {
     taucs_printf("taucs_ccs_read_mtx: out of memory: ncols=%d nnz=%d\n",ncols,nnz);
-    taucs_free(clen); taucs_free(m->colptr); taucs_free(m->rowind); 
+    taucs_free(clen); taucs_free(m->colptr); taucs_free(m->rowind);
     taucs_free(m->taucs_values);
-    taucs_free (m); taucs_free(is); taucs_free(js); taucs_free(vs); 
-    return NULL; 
+    taucs_free (m); taucs_free(is); taucs_free(js); taucs_free(vs);
+    return NULL;
   }
 
   for (j=0; j<ncols; j++) clen[j] = 0;
@@ -776,12 +780,12 @@ taucs_dtl(ccs_read_mtx)(char* filename,int flags)
   }
   /* just check */
   k = 0;
-  for (j=0; j<ncols; j++) 
+  for (j=0; j<ncols; j++)
     k += clen[j];
   assert(k == nnz);
 
   /* now compute column pointers */
-  
+
   k = 0;
   for (j=0; j<ncols; j++) {
     int tmp;
@@ -791,7 +795,7 @@ taucs_dtl(ccs_read_mtx)(char* filename,int flags)
   }
   clen[ncols] = (m->colptr[ncols]) = k;
   assert(clen[ncols] == nnz);
-  
+
   /* now read matrix into data structure */
 
   for (k=0; k<nnz; k++) {
@@ -803,16 +807,16 @@ taucs_dtl(ccs_read_mtx)(char* filename,int flags)
     (m->rowind)[ clen[j] ] = i;
     clen[j] ++;
   }
-  
+
   taucs_free(clen);
   taucs_free(vs);
   taucs_free(js);
   taucs_free(is);
-  
+
   taucs_printf("taucs_ccs_read_mtx: read %s, n=%d\n",filename,m->n);
 
   return m;
-} 
+}
 
 #endif /* #ifndef TAUCS_CORE_GENERAL */
 
@@ -822,7 +826,7 @@ taucs_dtl(ccs_read_mtx)(char* filename,int flags)
 
 #ifdef TAUCS_CORE_GENERAL
 
-taucs_ccs_matrix* 
+taucs_ccs_matrix*
 taucs_ccs_read_ccs(char* ccsfilename,int flags)
 {
 
@@ -844,8 +848,8 @@ taucs_ccs_read_ccs(char* ccsfilename,int flags)
 #ifdef TAUCS_SCOMPLEX_IN_BUILD
   if (flags & TAUCS_SCOMPLEX)
     return taucs_cccs_read_ccs(ccsfilename,flags);
-#endif  
-	
+#endif
+
   assert(0);
   /*added omer*/
   return NULL;
@@ -855,15 +859,15 @@ taucs_ccs_read_ccs(char* ccsfilename,int flags)
 
 #ifndef TAUCS_CORE_GENERAL
 
-taucs_ccs_matrix* 
+taucs_ccs_matrix*
 taucs_dtl(ccs_read_ccs)(char* filename,int flags)
 {
   FILE* f;
   taucs_ccs_matrix*  m;
 
   /*
-  int*    clen; 
-  int*    is; 
+  int*    clen;
+  int*    is;
   int*    js;
   taucs_datatype* vs;
   int ncols, nrows, nnz;
@@ -894,17 +898,17 @@ taucs_dtl(ccs_read_ccs)(char* filename,int flags)
   for(i=0; i<pointers[N]; ++i)
     fscanf(f,"%d",(m->rowind)+i);
 
-#ifdef TAUCS_CORE_DOUBLE  
+#ifdef TAUCS_CORE_DOUBLE
   for(i=0; i<pointers[N]; ++i)
     fscanf(f,"%lg",(m->taucs_values)+i);
 #endif
-  
-#ifdef TAUCS_CORE_SINGLE  
+
+#ifdef TAUCS_CORE_SINGLE
   for(i=0; i<pointers[N]; ++i)
     fscanf(f,"%g",(m->taucs_values)+i);
 #endif
-  
-#ifdef TAUCS_CORE_DCOMPLEX  
+
+#ifdef TAUCS_CORE_DCOMPLEX
   for(i=0; i<pointers[N]; ++i) {
     taucs_real_datatype dv_r;
     taucs_real_datatype dv_i;
@@ -912,7 +916,7 @@ taucs_dtl(ccs_read_ccs)(char* filename,int flags)
     (m->taucs_values)[i] = taucs_complex_create(dv_r,dv_i);
   }
 #endif
-  
+
 #ifdef TAUCS_CORE_SCOMPLEX
   for(i=0; i<pointers[N]; ++i) {
     taucs_real_datatype dv_r;
@@ -921,7 +925,7 @@ taucs_dtl(ccs_read_ccs)(char* filename,int flags)
     (m->taucs_values)[i] = taucs_complex_create(dv_r,dv_i);
   }
 #endif
-  
+
   if (flags & TAUCS_SYMMETRIC) {
     m->flags  = TAUCS_SYMMETRIC | TAUCS_LOWER;
     for (j=0; j<N; j++) {
@@ -950,11 +954,11 @@ taucs_dtl(ccs_read_ccs)(char* filename,int flags)
 #endif
 
   taucs_free(pointers);
-  
+
   taucs_printf("taucs_ccs_read_ccs: read %s, n=%d\n",filename,m->n);
 
   return m;
-} 
+}
 
 #endif /*#ifndef TAUCS_CORE_GENERAL*/
 
@@ -964,7 +968,7 @@ taucs_dtl(ccs_read_ccs)(char* filename,int flags)
 
 #ifdef TAUCS_CORE_GENERAL
 
-void* 
+void*
 taucs_vec_read_binary(int n, int flags, char* filename)
 {
   void* v = NULL; /* warning */
@@ -973,7 +977,7 @@ taucs_vec_read_binary(int n, int flags, char* filename)
   int f;
 
   taucs_printf("taucs_vec_read_binary: reading binary vector %s\n",filename);
-  
+
 #ifdef OSTYPE_win32
   f = open(filename,_O_RDONLY |_O_BINARY);
 #else
@@ -1016,10 +1020,10 @@ taucs_vec_write_binary(int n, int flags, void* v, char* filename)
   int f;
 
   taucs_printf("taucs_vec_write_binary: writing binary vector %s\n",filename);
-  
+
 #ifdef OSTYPE_win32
   f = open(filename,
-	   _O_WRONLY | _O_CREAT | _O_BINARY, 
+	   _O_WRONLY | _O_CREAT | _O_BINARY,
 	   _S_IREAD | _S_IWRITE | _S_IEXEC);
 #else
   f = open(filename,O_WRONLY | O_CREAT | O_TRUNC, S_IRWXO | S_IRWXG | S_IRWXU);
@@ -1049,4 +1053,3 @@ taucs_vec_write_binary(int n, int flags, void* v, char* filename)
 /*********************************************************/
 /*                                                       */
 /*********************************************************/
-