diff --git a/utils/nightly/gmsh.ctest b/utils/nightly/gmsh.ctest
new file mode 100644
index 0000000000000000000000000000000000000000..67b5f8fdfa1dee1462810bc4be0455a1559f8d1c
--- /dev/null
+++ b/utils/nightly/gmsh.ctest
@@ -0,0 +1,70 @@
+# Gmsh - Copyright (C) 1997-2012 C. Geuzaine, J.-F. Remacle
+#
+# See the LICENSE.txt file for license information. Please report all
+# bugs and problems to <gmsh@geuz.org>.
+
+# this is the common ctest script used by all gmsh nightly (and experimental)
+# builds, on all architectures
+
+set(CTEST_SOURCE_DIRECTORY "$ENV{HOME}/src/gmsh")
+set(CTEST_BINARY_DIRECTORY "$ENV{HOME}/src/gmsh/bin")
+set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
+set(CTEST_BUILD_CONFIGURATION "RelWithDebInfo")
+
+set(CTEST_SVN_REPOS https://geuz.org/svn/gmsh/trunk)
+
+find_program(CTEST_SVN_COMMAND NAMES svn)
+find_program(CTEST_COVERAGE_COMMAND NAMES gcov)
+find_program(CTEST_MEMORYCHECK_COMMAND NAMES valgrind)
+
+if(NOT EXISTS "${CTEST_SOURCE_DIRECTORY}")
+  set(CTEST_CHECKOUT_COMMAND 
+      "${CTEST_SVN_COMMAND} co ${CTEST_SVN_REPOS} ${CTEST_SOURCE_DIRECTORY}")
+endif(NOT EXISTS "${CTEST_SOURCE_DIRECTORY}")
+set(CTEST_UPDATE_COMMAND "${CTEST_SVN_COMMAND}")
+
+set(CTEST_CONFIGURE_COMMAND 
+    "${CTEST_CMAKE_COMMAND} -DCMAKE_BUILD_TYPE:STRING=${CTEST_BUILD_CONFIGURATION}")
+set(CTEST_CONFIGURE_COMMAND "${CTEST_CONFIGURE_COMMAND} ${CTEST_BUILD_OPTIONS}")
+set(CTEST_CONFIGURE_COMMAND "${CTEST_CONFIGURE_COMMAND} \"-G${CTEST_CMAKE_GENERATOR}\"")
+set(CTEST_CONFIGURE_COMMAND "${CTEST_CONFIGURE_COMMAND} \"${CTEST_SOURCE_DIRECTORY}\"")
+
+# make sure everybody outputs messages in english
+set($ENV{LC_MESSAGES} "en_US")
+
+# select Experimental dashboard if none is selected
+if(NOT CDASH_MODEL)
+  set(CDASH_MODEL "Experimental")
+endif(NOT CDASH_MODEL)
+
+ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})
+ctest_start(${CDASH_MODEL})
+ctest_update()
+ctest_configure()
+ctest_build(TARGET html)
+ctest_build(TARGET package)
+if(WITH_TEST)
+  ctest_test()
+endif(WITH_TEST)
+if (WITH_COVERAGE AND CTEST_COVERAGE_COMMAND)
+  ctest_coverage()
+endif (WITH_COVERAGE AND CTEST_COVERAGE_COMMAND)
+if (WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND)
+  ctest_memcheck()
+endif (WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND)
+ctest_submit()
+
+macro(upload_package WEB ARCH EXTRA EXT1 EXT2)
+  file(GLOB FILE ${CTEST_BINARY_DIRECTORY}/gmsh-*${EXT1})
+  if(FILE)
+    if(${FILE} MATCHES "-svn")
+      execute_process(COMMAND scp -C ${FILE} ${WEB}/gmsh-svn-${ARCH}${EXTRA}${EXT2}
+                      TIMEOUT 60)
+    else(${FILE} MATCHES "-svn")
+      get_filename_component(NAME ${FILE} NAME)
+      string(REPLACE ${EXT1} "" BASE ${NAME})
+      execute_process(COMMAND scp -C ${FILE} ${WEB}/${BASE}${EXTRA}${EXT2}
+                      TIMEOUT 60)
+    endif(${FILE} MATCHES "-svn")
+  endif(FILE)
+endmacro(upload_package)
diff --git a/utils/nightly/gmsh_linux.ctest b/utils/nightly/gmsh_linux.ctest
new file mode 100644
index 0000000000000000000000000000000000000000..66274edaa00c23a135fe7acc787de67f491b72db
--- /dev/null
+++ b/utils/nightly/gmsh_linux.ctest
@@ -0,0 +1,25 @@
+# Gmsh - Copyright (C) 1997-2012 C. Geuzaine, J.-F. Remacle
+#
+# See the LICENSE.txt file for license information. Please report all
+# bugs and problems to <gmsh@geuz.org>.
+
+set(CTEST_SITE "ace25 (Debian 32 bits)")
+set(CTEST_CMAKE_COMMAND "/usr/local/bin/cmake")
+
+set(WEB_BIN "geuzaine@geuz.org:/home/www/geuz.org/gmsh/bin/Linux")
+
+set(WITH_TEST TRUE)      # run the tests?
+set(WITH_COVERAGE FALSE) # check code coverage?
+set(WITH_MEMCHECK FALSE) # check memory with valgrind?
+
+#################################################################################
+set(CTEST_BUILD_NAME "Linux32")
+set(OPT "-DGMSH_EXTRA_VERSION=${EXTRA_VERSION}")
+set(OPT "${OPT} -DCMAKE_PREFIX_PATH:path=/usr/local/med;/usr/local/opencascade;/usr/local")
+set(OPT "${OPT} -DENABLE_NATIVE_FILE_CHOOSER:bool=FALSE")
+set(OPT "${OPT} -DPETSC_ARCH=linux_complex_umfpack")
+set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.0.0-p12")
+set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.0.0-p7")
+set(CTEST_BUILD_OPTIONS ${OPT})
+include(gmsh.ctest)
+upload_package(${WEB_BIN} Linux "" .tar.gz .tgz)
diff --git a/utils/nightly/gmsh_linux_nightly.cron b/utils/nightly/gmsh_linux_nightly.cron
new file mode 100644
index 0000000000000000000000000000000000000000..f6fc903585f66405fee3999a9657da7c408baa6e
--- /dev/null
+++ b/utils/nightly/gmsh_linux_nightly.cron
@@ -0,0 +1,4 @@
+#
+# this will launch a new build every night at 1h01
+#
+1 1 * * * cd ${HOME}/src/gmsh/utils/nightly && /usr/local/bin/ctest -S gmsh_linux_nightly.ctest
diff --git a/utils/nightly/gmsh_linux_nightly.ctest b/utils/nightly/gmsh_linux_nightly.ctest
new file mode 100644
index 0000000000000000000000000000000000000000..8fd4a693e54315fb673227c5cec54911ab56327c
--- /dev/null
+++ b/utils/nightly/gmsh_linux_nightly.ctest
@@ -0,0 +1,9 @@
+# Gmsh - Copyright (C) 1997-2012 C. Geuzaine, J.-F. Remacle
+#
+# See the LICENSE.txt file for license information. Please report all
+# bugs and problems to <gmsh@geuz.org>.
+
+set(CTEST_NIGHTLY_START_TIME "00:00:00 UTC")
+set(CDASH_MODEL "Nightly")
+set(EXTRA_VERSION "-svn")
+include(gmsh_linux.ctest)
diff --git a/utils/nightly/gmsh_mac.ctest b/utils/nightly/gmsh_mac.ctest
new file mode 100644
index 0000000000000000000000000000000000000000..126a78d7b7f5489aa95fb583e6f961e138826e39
--- /dev/null
+++ b/utils/nightly/gmsh_mac.ctest
@@ -0,0 +1,24 @@
+# Gmsh - Copyright (C) 1997-2012 C. Geuzaine, J.-F. Remacle
+#
+# See the LICENSE.txt file for license information. Please report all
+# bugs and problems to <gmsh@geuz.org>.
+
+set(CTEST_SITE "ace25 (OSX 10.5)")
+set(CTEST_CMAKE_COMMAND "cmake")
+
+set(WEB_BIN "geuzaine@geuz.org:/home/www/geuz.org/gmsh/bin/MacOSX")
+
+set(WITH_TEST TRUE)      # run the tests?
+set(WITH_COVERAGE FALSE) # check code coverage?
+set(WITH_MEMCHECK FALSE) # check memory with valgrind?
+
+#################################################################################
+set(CTEST_BUILD_NAME "MacOSX32")
+set(OPT "-DGMSH_EXTRA_VERSION=${EXTRA_VERSION}")
+set(OPT "${OPT} -DCMAKE_PREFIX_PATH:path=/usr/local/opencascade;/usr/local/med;/usr/local")
+set(OPT "${OPT} -DPETSC_ARCH=umfpack-cxx-opt")
+set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.0.0-p7")
+set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.0.0-p7")
+set(CTEST_BUILD_OPTIONS ${OPT})
+include(gmsh.ctest)
+upload_package(${WEB_BIN} MacOSX "" .tar.gz .tgz)
diff --git a/utils/nightly/gmsh_mac_nightly.cron b/utils/nightly/gmsh_mac_nightly.cron
new file mode 100644
index 0000000000000000000000000000000000000000..d065a88737332ce5c881fb2d49933d5500b1cf12
--- /dev/null
+++ b/utils/nightly/gmsh_mac_nightly.cron
@@ -0,0 +1,4 @@
+#
+# this will launch a new build every night at 0h01
+#
+1 0 * * * cd ${HOME}/src/gmsh/utils/nightly && /usr/local/bin/ctest -S gmsh_mac_nightly.ctest
diff --git a/utils/nightly/gmsh_mac_nightly.ctest b/utils/nightly/gmsh_mac_nightly.ctest
new file mode 100644
index 0000000000000000000000000000000000000000..dd455a3c8e21d6c6b08d9b4abce04bb315b30fb6
--- /dev/null
+++ b/utils/nightly/gmsh_mac_nightly.ctest
@@ -0,0 +1,9 @@
+# Gmsh - Copyright (C) 1997-2012 C. Geuzaine, J.-F. Remacle
+#
+# See the LICENSE.txt file for license information. Please report all
+# bugs and problems to <gmsh@geuz.org>.
+
+set(CTEST_NIGHTLY_START_TIME "00:00:00 UTC")
+set(CDASH_MODEL "Nightly")
+set(EXTRA_VERSION "-svn")
+include(gmsh_mac.ctest)
diff --git a/utils/nightly/gmsh_win.ctest b/utils/nightly/gmsh_win.ctest
new file mode 100644
index 0000000000000000000000000000000000000000..900563e902c59c0024176487c97ed6b2a1d02810
--- /dev/null
+++ b/utils/nightly/gmsh_win.ctest
@@ -0,0 +1,27 @@
+# Gmsh - Copyright (C) 1997-2012 C. Geuzaine, J.-F. Remacle
+#
+# See the LICENSE.txt file for license information. Please report all
+# bugs and problems to <gmsh@geuz.org>.
+
+set(CTEST_SITE "ace25 (Windows XP)")
+set(CTEST_CMAKE_COMMAND "cmake")
+
+set(WEB_BIN "geuzaine@geuz.org:/home/www/geuz.org/gmsh/bin/Windows")
+
+set(WITH_TEST TRUE)      # run the tests?
+set(WITH_COVERAGE FALSE) # check code coverage?
+set(WITH_MEMCHECK FALSE) # check memory with valgrind?
+
+#################################################################################
+set(CTEST_BUILD_NAME "Win32")
+set(OPT "-DGMSH_EXTRA_VERSION=${EXTRA_VERSION}")
+set(OPT "${OPT} -DCMAKE_PREFIX_PATH:path=/usr/local/med;/usr/local/opencascade;/usr/local;/usr/i686-w64-mingw32/sys-root/mingw")
+set(OPT "${OPT} -DCMAKE_C_COMPILER=/usr/bin/i686-w64-mingw32-gcc.exe")
+set(OPT "${OPT} -DCMAKE_CXX_COMPILER=/usr/bin/i686-w64-mingw32-g++.exe")
+set(OPT "${OPT} -DCMAKE_Fortran_COMPILER=/usr/bin/i686-w64-mingw32-gfortran.exe")
+set(OPT "${OPT} -DPETSC_ARCH=win32_complex_umfpack")
+set(OPT "${OPT} -DPETSC_DIR=$ENV{HOME}/src/petsc-3.0.0-p12")
+set(OPT "${OPT} -DSLEPC_DIR=$ENV{HOME}/src/slepc-3.0.0-p7")
+set(CTEST_BUILD_OPTIONS ${OPT})
+include(gmsh.ctest)
+upload_package(${WEB_BIN} Win "" .zip .zip)
diff --git a/utils/nightly/gmsh_win_nightly.bat b/utils/nightly/gmsh_win_nightly.bat
new file mode 100755
index 0000000000000000000000000000000000000000..911aa46457fe8171c6b89e2baead3da28bd844c4
--- /dev/null
+++ b/utils/nightly/gmsh_win_nightly.bat
@@ -0,0 +1,6 @@
+@echo off
+
+C:
+chdir C:\cygwin\bin
+
+bash --login -c "cd ${HOME}/src/gmsh/utils/nightly && ctest -S gmsh_win_nightly.ctest"
diff --git a/utils/nightly/gmsh_win_nightly.ctest b/utils/nightly/gmsh_win_nightly.ctest
new file mode 100644
index 0000000000000000000000000000000000000000..b4b6eeaa9ec578c616bd184b67a0d6a3db9885e2
--- /dev/null
+++ b/utils/nightly/gmsh_win_nightly.ctest
@@ -0,0 +1,9 @@
+# Gmsh - Copyright (C) 1997-2012 C. Geuzaine, J.-F. Remacle
+#
+# See the LICENSE.txt file for license information. Please report all
+# bugs and problems to <gmsh@geuz.org>.
+
+set(CTEST_NIGHTLY_START_TIME "00:00:00 UTC")
+set(CDASH_MODEL "Nightly")
+set(EXTRA_VERSION "-svn")
+include(gmsh_win.ctest)