diff --git a/configure b/configure
index 76e12f06d7335828c654ecf024c195534e77d9f2..53bd0e815f188216de75d2988c2cd5d205c97813 100755
--- a/configure
+++ b/configure
@@ -2669,10 +2669,12 @@ AR="${AR} ruvs"
 GMSH_DIRS="Common DataStr Geo Mesh Numeric Parallel Parser Plugin"
 
 if test "x$enable_gui" != "xno"; then
+
   GMSH_DIRS="${GMSH_DIRS} Graphics Fltk jpeg"
   GMSH_LIBS="-Llib -lGmshFltk -lGmshParser -lGmshGraphics -lGmshMesh -lGmshGeo -lGmshNumeric -lGmshCommon -lGmshDataStr -lGmshJpeg -lGmshPlugin -lGmshParallel"
   VERSION_FLAGS="-D_FLTK"
-  # Extract the first word of "fltk-config", so it can be a program name with args.
+  if test "x${FLTK_PREFIX}" != "x" ; then
+    # Extract the first word of "fltk-config", so it can be a program name with args.
 set dummy fltk-config; ac_word=$2
 echo "$as_me:$LINENO: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
@@ -2685,7 +2687,7 @@ else
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+for as_dir in ${FLTK_PREFIX}
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
@@ -2698,6 +2700,7 @@ do
 done
 done
 
+  test -z "$ac_cv_path_FLTKCONFIG" && ac_cv_path_FLTKCONFIG=""""
   ;;
 esac
 fi
@@ -2711,7 +2714,7 @@ else
 echo "${ECHO_T}no" >&6
 fi
 
-  if test "x${FLTKCONFIG}" = "x" -a "x${FLTK_PREFIX}" != "x" ; then
+  else
     # Extract the first word of "fltk-config", so it can be a program name with args.
 set dummy fltk-config; ac_word=$2
 echo "$as_me:$LINENO: checking for $ac_word" >&5
@@ -2725,7 +2728,7 @@ else
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in ${FLTK_PREFIX}
+for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
@@ -2738,7 +2741,6 @@ do
 done
 done
 
-  test -z "$ac_cv_path_FLTKCONFIG" && ac_cv_path_FLTKCONFIG=""""
   ;;
 esac
 fi
@@ -2754,18 +2756,21 @@ fi
 
   fi
   if test "x$FLTKCONFIG" = "x"; then
-    { { echo "$as_me:$LINENO: error: Could not find fltk-config. Try --with-prefix-fltk?" >&5
-echo "$as_me: error: Could not find fltk-config. Try --with-prefix-fltk?" >&2;}
+    { { echo "$as_me:$LINENO: error: Could not find fltk-config. Try --with-fltk-prefix?" >&5
+echo "$as_me: error: Could not find fltk-config. Try --with-fltk-prefix?" >&2;}
    { (exit 1); exit 1; }; }
   fi
   GUI_LIBS="`$FLTKCONFIG --use-gl --ldstaticflags`"
   GUI_INCLUDE="`$FLTKCONFIG --use-gl --cxxflags`"
+
 else
+
   GMSH_DIRS="${GMSH_DIRS} Box"
   GMSH_LIBS="-Llib -lGmshBox -lGmshParser -lGmshMesh -lGmshGeo -lGmshNumeric -lGmshPlugin -lGmshCommon -lGmshDataStr -lGmshParallel"
   VERSION_FLAGS="-D_BLACKBOX"
   GUI_LIBS=""
   GUI_INCLUDE=""
+
 fi
 
 echo "$as_me:$LINENO: checking for ./Triangle/triangle.c" >&5
@@ -2805,8 +2810,10 @@ fi
 
 
 OPT_FLAGS="${CXXFLAGS}"
+OS_FLAGS=""
 LINKER="${CXX}"
 POSTBUILD=""
+
 if test "x$enable_gui" != "xno"; then
   GMSH_LIBS="${GMSH_LIBS} ${GUI_LIBS}"
 else
@@ -2816,54 +2823,246 @@ fi
 case "$UNAME" in
 
   CYGWIN* | MINGW*)
-    OS_FLAGS="-mwindows -DWIN32 -D_LITTLE_ENDIAN"
-    LINKER="g++ -Wl,--subsystem,windows -mwindows"
+    LINKER="${LINKER} -Wl,--subsystem,windows -mwindows"
     if test "x$enable_gui" != "xno"; then
       GMSH_LIBS="${GMSH_LIBS} Fltk/Win32Icon.res"
     fi
     ;;
 
   Darwin*)
-    OS_FLAGS="-D_NODLL"
+    OS_FLAGS="${OS_FLAGS} -D_NODLL"
     POSTBUILD="/Developer/Tools/Rez -t APPL -o bin/gmsh Fltk/MacRes.r"
     ;;
 
-  Linux*)
-    OS_FLAGS="-D_LITTLE_ENDIAN"
-    GMSH_LIBS="${GMSH_LIBS} -ldl"
-    ;;
-
-  OSF1*)
-    OS_FLAGS="-D_LITTLE_ENDIAN"
-    ;;
-
   AIX*)
-    OS_FLAGS="-D_BSD -D_NODLL"
+    OS_FLAGS="${OS_FLAGS} -D_BSD -D_NODLL"
     ;;
 
   IRIX*)
-    OS_FLAGS="-mips3 -n32"
     CXX="CC"
     CC="cc"
+    OS_FLAGS="${OS_FLAGS} -mips3 -n32"
     OPT_FLAGS="-O2 -OPT:Olimit=0 -LANG:std"
     AR="CC -mips3 -n32 -ar -o"
     LINKER="CC -O2 -mips3 -n32"
     ;;
 
   SunOS*)
-    OS_FLAGS="-D_NODLL"
-    CXX="g++"
-    CC="gcc"
+    OS_FLAGS="${OS_FLAGS} -D_NODLL"
     GMSH_LIBS="${GMSH_LIBS} -lsocket -lnsl -ldl"
     ;;
 
-  *)
+  HP-UX*)
     OS_FLAGS="-D_NODLL"
     ;;
 
 esac
 
 
+echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6
+if test "${ac_cv_c_bigendian+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # See if sys/param.h defines the BYTE_ORDER macro.
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/param.h>
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
+ bogus endian macros
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/param.h>
+
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_bigendian=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_c_bigendian=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+# It does not; compile a test program.
+if test "$cross_compiling" = yes; then
+  # try to guess the endianess by grep'ing values into an object file
+  ac_cv_c_bigendian=unknown
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
+short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+#ifdef F77_DUMMY_MAIN
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int F77_DUMMY_MAIN() { return 1; }
+#endif
+int
+main ()
+{
+ _ascii (); _ebcdic ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  if fgrep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
+  ac_cv_c_bigendian=yes
+fi
+if fgrep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+  if test "$ac_cv_c_bigendian" = unknown; then
+    ac_cv_c_bigendian=no
+  else
+    # finding both strings is unlikely to happen, but who knows?
+    ac_cv_c_bigendian=unknown
+  fi
+fi
+else
+  echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+else
+  cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+int
+main ()
+{
+  /* Are we little or big endian?  From Harbison&Steele.  */
+  union
+  {
+    long l;
+    char c[sizeof (long)];
+  } u;
+  u.l = 1;
+  exit (u.c[sizeof (long) - 1] == 1);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_bigendian=no
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+( exit $ac_status )
+ac_cv_c_bigendian=yes
+fi
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+echo "${ECHO_T}$ac_cv_c_bigendian" >&6
+case $ac_cv_c_bigendian in
+  yes)
+
+cat >>confdefs.h <<\_ACEOF
+#define WORDS_BIGENDIAN 1
+_ACEOF
+ ;;
+  no)
+    OS_FLAGS="-D_LITTLE_ENDIAN ${OS_FLAGS}" ;;
+  *)
+    { { echo "$as_me:$LINENO: error: unknown endianess
+presetting ac_cv_c_bigendian=no (or yes) will help" >&5
+echo "$as_me: error: unknown endianess
+presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+
+
+
 
 
 
@@ -2876,7 +3075,6 @@ if test "x${GSL_PREFIX}" = "x"; then
 else
   LDFLAGS="-L${GSL_PREFIX}/lib -lgslcblas"
 fi
-
 echo "$as_me:$LINENO: checking for gsl_vector_alloc in -lgsl" >&5
 echo $ECHO_N "checking for gsl_vector_alloc in -lgsl... $ECHO_C" >&6
 if test "${ac_cv_lib_gsl_gsl_vector_alloc+set}" = set; then
diff --git a/configure.in b/configure.in
index 40e59608d02a5f791dbf2791d01052b3aaef5424..f65c87678f716dda8986d0e19c4510f86f2c01b8 100644
--- a/configure.in
+++ b/configure.in
@@ -1,4 +1,4 @@
-dnl "$Id: configure.in,v 1.6 2003-02-11 22:09:53 geuzaine Exp $"
+dnl "$Id: configure.in,v 1.7 2003-02-12 00:27:06 geuzaine Exp $"
 dnl
 dnl Machine independent configuration script for Gmsh.
 dnl
@@ -83,24 +83,29 @@ GMSH_DIRS="Common DataStr Geo Mesh Numeric Parallel Parser Plugin"
 
 dnl Choose blackbox or GUI version
 if test "x$enable_gui" != "xno"; then
+
   GMSH_DIRS="${GMSH_DIRS} Graphics Fltk jpeg"
   GMSH_LIBS="-Llib -lGmshFltk -lGmshParser -lGmshGraphics -lGmshMesh -lGmshGeo -lGmshNumeric -lGmshCommon -lGmshDataStr -lGmshJpeg -lGmshPlugin -lGmshParallel"
   VERSION_FLAGS="-D_FLTK"
-  AC_PATH_PROG(FLTKCONFIG,fltk-config)
-  if test "x${FLTKCONFIG}" = "x" -a "x${FLTK_PREFIX}" != "x" ; then
+  if test "x${FLTK_PREFIX}" != "x" ; then
     AC_PATH_PROG(FLTKCONFIG,fltk-config,"",${FLTK_PREFIX})
+  else
+    AC_PATH_PROG(FLTKCONFIG,fltk-config)
   fi
   if test "x$FLTKCONFIG" = "x"; then
-    AC_MSG_ERROR(Could not find fltk-config. Try --with-prefix-fltk?)
+    AC_MSG_ERROR(Could not find fltk-config. Try --with-fltk-prefix?)
   fi
   GUI_LIBS="`$FLTKCONFIG --use-gl --ldstaticflags`"
   GUI_INCLUDE="`$FLTKCONFIG --use-gl --cxxflags`"
+
 else
+
   GMSH_DIRS="${GMSH_DIRS} Box"
   GMSH_LIBS="-Llib -lGmshBox -lGmshParser -lGmshMesh -lGmshGeo -lGmshNumeric -lGmshPlugin -lGmshCommon -lGmshDataStr -lGmshParallel"
   VERSION_FLAGS="-D_BLACKBOX"
   GUI_LIBS=""
   GUI_INCLUDE=""
+
 fi
 
 dnl Check if Triangle is installed
@@ -119,10 +124,13 @@ fi
 AC_SUBST(VERSION_FLAGS)
 AC_SUBST(GUI_INCLUDE)
 
-dnl default flags and linker
+dnl Default flags, linker and post build action
 OPT_FLAGS="${CXXFLAGS}"
+OS_FLAGS=""
 LINKER="${CXX}"
 POSTBUILD=""
+
+dnl Set libs to link against
 if test "x$enable_gui" != "xno"; then
   GMSH_LIBS="${GMSH_LIBS} ${GUI_LIBS}"
 else
@@ -133,53 +141,44 @@ dnl Modify defaults according to OS
 case "$UNAME" in
 
   CYGWIN* | MINGW*)
-    OS_FLAGS="-mwindows -DWIN32 -D_LITTLE_ENDIAN"
-    LINKER="g++ -Wl,--subsystem,windows -mwindows"
+    LINKER="${LINKER} -Wl,--subsystem,windows -mwindows"
     if test "x$enable_gui" != "xno"; then
       GMSH_LIBS="${GMSH_LIBS} Fltk/Win32Icon.res"
     fi
     ;;
 
   Darwin*)
-    OS_FLAGS="-D_NODLL"
+    OS_FLAGS="${OS_FLAGS} -D_NODLL"
     POSTBUILD="/Developer/Tools/Rez -t APPL -o bin/gmsh Fltk/MacRes.r"
     ;;
 
-  Linux*)
-    OS_FLAGS="-D_LITTLE_ENDIAN"
-    GMSH_LIBS="${GMSH_LIBS} -ldl"
-    ;;
-
-  OSF1*)
-    OS_FLAGS="-D_LITTLE_ENDIAN"
-    ;;
-
   AIX*)
-    OS_FLAGS="-D_BSD -D_NODLL"
+    OS_FLAGS="${OS_FLAGS} -D_BSD -D_NODLL"
     ;;
 
   IRIX*)
-    OS_FLAGS="-mips3 -n32" 
     CXX="CC"
     CC="cc"
+    OS_FLAGS="${OS_FLAGS} -mips3 -n32" 
     OPT_FLAGS="-O2 -OPT:Olimit=0 -LANG:std"
     AR="CC -mips3 -n32 -ar -o"
     LINKER="CC -O2 -mips3 -n32"
     ;;
 
   SunOS*)
-    OS_FLAGS="-D_NODLL"
-    CXX="g++"
-    CC="gcc"
+    OS_FLAGS="${OS_FLAGS} -D_NODLL"
     GMSH_LIBS="${GMSH_LIBS} -lsocket -lnsl -ldl"
     ;;
 
-  *)
+  HP-UX*)
     OS_FLAGS="-D_NODLL"
     ;;
 
 esac
 
+dnl Is the machine big or littke endian?
+AC_C_BIGENDIAN(,OS_FLAGS="-D_LITTLE_ENDIAN ${OS_FLAGS}")
+
 AC_SUBST(OPT_FLAGS)
 AC_SUBST(OS_FLAGS)
 AC_SUBST(LINKER)