diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1c8545af65f29525320501628892c51192d810fe..b8dd53f25e433cd8c9d5cd3d4ada67d339a9f9a1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,61 +24,66 @@ project(gmsh CXX C)
 # e.g. "cmake -DDEFAULT=0 -DENABLE_POST=1 -DENABLE_PARSER=1")
 set(DEFAULT ON CACHE INTERNAL "Default value for enabled-by-default options")
 
-option(ENABLE_3M "Enable 3M" OFF)
-option(ENABLE_ACIS "Enable ACIS geometrical models" ${DEFAULT})
-option(ENABLE_ANN "Enable ANN to compute Approximate Nearest Neighbors" ${DEFAULT})
-option(ENABLE_BAMG "Enable Bamg mesh generator" ${DEFAULT})
-option(ENABLE_BFGS "Enable BFGS" ${DEFAULT})
-option(ENABLE_BLAS_LAPACK "Use BLAS and Lapack for linear algebra" ON)
-option(ENABLE_BLOSSOM "Enable Blossom algo (based on MATCH and concorde97)" ${DEFAULT})
-option(ENABLE_BUILD_LIB "Build static Gmsh library" OFF)
-option(ENABLE_BUILD_SHARED "Build shared Gmsh library" OFF)
-option(ENABLE_BUILD_DYNAMIC "Build dynamically linked Gmsh binary" OFF)
-option(ENABLE_BUILD_ANDROID "Build Gmsh library for Android NDK" OFF)
-option(ENABLE_BUILD_IOS "Build Gmsh library for iOS (ARM)" OFF)
-option(ENABLE_CGNS "Enable CGNS mesh export" OFF)
-option(ENABLE_CAIRO "Enable Cairo to render fonts" ${DEFAULT})
-option(ENABLE_CHACO "Enable Chaco mesh partitioner" ${DEFAULT})
-option(ENABLE_DINTEGRATION "Enable discrete integration and levelsets" ${DEFAULT})
-option(ENABLE_FLTK "Build FLTK GUI" ${DEFAULT})
-option(ENABLE_FOURIER_MODEL "Enable Fourier geometrical models" OFF)
-option(ENABLE_GMM "Enable GMM linear algebra solvers" ${DEFAULT})
-option(ENABLE_GRAPHICS "Compile-in OpenGL graphics even if there is no GUI" OFF)
-option(ENABLE_KBIPACK "Enable Kbipack for homology solver" ${DEFAULT})
-option(ENABLE_MATHEX "Enable MathEx expression parser" ${DEFAULT})
-option(ENABLE_MED "Enable MED mesh and post-processing file formats" ${DEFAULT})
-option(ENABLE_MESH "Build the mesh module" ${DEFAULT})
-option(ENABLE_METIS "Enable Metis mesh partitioner" ${DEFAULT})
-option(ENABLE_MMG3D "Enable 3D Mobile Mesh Generation" ${DEFAULT})
-option(ENABLE_MPEG_ENCODE "Enable built-in MPEG encoder" ${DEFAULT})
-option(ENABLE_MPI "Enable MPI parallelization" OFF)
-option(ENABLE_MSVC_STATIC_RUNTIME "Use static Visual C++ runtime" OFF)
-option(ENABLE_NATIVE_FILE_CHOOSER "Enable native file chooser in GUI" ${DEFAULT})
-option(ENABLE_NETGEN "Enable Netgen mesh generator" ${DEFAULT})
-option(ENABLE_OCC "Enable Open CASCADE geometrical models" ${DEFAULT})
-option(ENABLE_ONELAB "Enable OneLab solver interface" ${DEFAULT})
-option(ENABLE_ONELAB_METAMODEL "Enable OneLab metamodel" ${DEFAULT})
-option(ENABLE_OPENMP "Enable OpenMP" OFF)
-option(ENABLE_OPTHOM "Enable optimization tool for high order meshes" ${DEFAULT})
-option(ENABLE_OS_SPECIFIC_INSTALL "Use OS-specific (e.g. app bundle) install" ${DEFAULT})
-option(ENABLE_OSMESA "Use OSMesa for offscreen rendering" OFF)
-option(ENABLE_PARSER "Build the GEO file parser" ${DEFAULT})
-option(ENABLE_PETSC "Enable PETSc linear algebra solvers" ${DEFAULT})
-option(ENABLE_PLUGINS "Build the post-processing plugins" ${DEFAULT})
-option(ENABLE_POST "Build the post-processing module" ${DEFAULT})
-option(ENABLE_POPPLER "Enable POPPLER package for displaying PDF documents" OFF)
-option(ENABLE_QT "Build proof-of-concept QT GUI" OFF)
-option(ENABLE_RTREE "Enable RTREE" ${DEFAULT})
-option(ENABLE_SALOME "Enable Salome routines for CAD healing" ${DEFAULT})
-option(ENABLE_SGEOM "Enable SGEOM interface to OCC" OFF)
-option(ENABLE_SLEPC "Enable SLEPc eigensolvers" ${DEFAULT})
-option(ENABLE_SOLVER "Enable solver components" ${DEFAULT})
-option(ENABLE_TAUCS "Enable Taucs linear algebra solver" ${DEFAULT})
-option(ENABLE_TETGEN "Enable Tetgen mesh generator" ${DEFAULT})
-option(ENABLE_TETGEN_OLD "Use old version of Tetgen" OFF)
-option(ENABLE_VORO3D "Enable Voro3D" ${DEFAULT})
-option(ENABLE_WRAP_JAVA "Build Java wrappers" OFF)
-option(ENABLE_WRAP_PYTHON "Build Python wrappers" OFF)
+macro(opt OPTION HELP VALUE)
+  option(ENABLE_${OPTION} ${HELP} ${VALUE})
+  set(OPT_TEXI "${OPT_TEXI}\n@item ENABLE_${OPTION}\n${HELP} (default: ${VALUE})")
+endmacro(opt)
+
+opt(3M "Enable 3M extension (experimental)" OFF)
+opt(ACIS "Enable ACIS geometrical models (experimental)" ${DEFAULT})
+opt(ANN "Enable ANN (used for fast point search in mesh/post)" ${DEFAULT})
+opt(BAMG "Enable Bamg 2D anisotropic mesh generator" ${DEFAULT})
+opt(BFGS "Enable BFGS (used by some mesh optimizers)" ${DEFAULT})
+opt(BLAS_LAPACK "Enable BLAS/Lapack for linear algebra (required for meshing)" ON)
+opt(BLOSSOM "Enable Blossom algorithm (needed for full quad meshing)" ${DEFAULT})
+opt(BUILD_LIB "Enable 'lib' target for buildin static Gmsh library" OFF)
+opt(BUILD_SHARED "Enable 'shared' target for building shared Gmsh library" OFF)
+opt(BUILD_DYNAMIC "Enable dynamic Gmsh executable (linked with shared lib)" OFF)
+opt(BUILD_ANDROID "Enable Android NDK library target (experimental)" OFF)
+opt(BUILD_IOS "Enable iOS (ARM) library target (experimental)" OFF)
+opt(CGNS "Enable CGNS mesh export (experimental)" OFF)
+opt(CAIRO "Enable Cairo to render fonts (experimental)" ${DEFAULT})
+opt(CHACO "Enable Chaco mesh partitioner (alternative to Metis)" ${DEFAULT})
+opt(DINTEGRATION "Enable discrete integration (needed for levelsets)" ${DEFAULT})
+opt(FLTK "Enable FLTK graphical user interface (requires mesh/post)" ${DEFAULT})
+opt(FOURIER_MODEL "Enable Fourier geometrical models (experimental)" OFF)
+opt(GMM "Enable GMM linear solvers (simple alternative to PETSc)" ${DEFAULT})
+opt(GRAPHICS "Enable building graphics lib even without GUI (advanced)" OFF)
+opt(KBIPACK "Enable Kbipack (neeeded by homology solver)" ${DEFAULT})
+opt(MATHEX "Enable math expression parser (used by plugins and options)" ${DEFAULT})
+opt(MED "Enable MED mesh and post file formats" ${DEFAULT})
+opt(MESH "Enable mesh module" ${DEFAULT})
+opt(METIS "Enable Metis mesh partitioner" ${DEFAULT})
+opt(MMG3D "Enable MMG3D 3D anisotropic mesh refinement" ${DEFAULT})
+opt(MPEG_ENCODE "Enable built-in MPEG movie encoder" ${DEFAULT})
+opt(MPI "Enable MPI (mostly for parser and solver - mesh generation is sequential)" OFF)
+opt(MSVC_STATIC_RUNTIME "Enable static Visual C++ runtime" OFF)
+opt(NATIVE_FILE_CHOOSER "Enable native file chooser in GUI" ${DEFAULT})
+opt(NETGEN "Enable Netgen 3D frontal mesh generator" ${DEFAULT})
+opt(OCC "Enable Open CASCADE geometrical models" ${DEFAULT})
+opt(ONELAB "Enable OneLab solver interface" ${DEFAULT})
+opt(ONELAB_METAMODEL "Enable OneLab metamodels (experimental)" ${DEFAULT})
+opt(OPENMP "Enable OpenMP (experimental)" OFF)
+opt(OPTHOM "Enable high-order mesh optimization tools" ${DEFAULT})
+opt(OS_SPECIFIC_INSTALL "Enable OS-specific (e.g. app bundle) installation" ${DEFAULT})
+opt(OSMESA "Enable OSMesa for offscreen rendering (experimental)" OFF)
+opt(PARSER "Enable GEO file parser (required for .geo/.pos files)" ${DEFAULT})
+opt(PETSC "Enable PETSc linear solvers (required for SLEPc)" ${DEFAULT})
+opt(PLUGINS "Enable post-processing plugins" ${DEFAULT})
+opt(POST "Enable post-processing module" ${DEFAULT})
+opt(POPPLER "Enable Poppler for displaying PDF documents (experimental)" OFF)
+opt(QT "Enable dummy QT graphical interface proof-of-concept" OFF)
+opt(RTREE "Enable RTREE (used for quad/hex mesh generation)" ${DEFAULT})
+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 solver components (required e.g. for compounds)" ${DEFAULT})
+opt(TAUCS "Enable Taucs linear solver (alternative to PETSc)" ${DEFAULT})
+opt(TETGEN "Enable Tetgen 3D initial mesh generator" ${DEFAULT})
+opt(TETGEN_OLD "Enable older version of Tetgen" OFF)
+opt(VORO3D "Enable Voro3D (experimental)" ${DEFAULT})
+opt(WRAP_JAVA "Enable building of Java wrappers" OFF)
+opt(WRAP_PYTHON "Enable building of Python wrappers" OFF)
 
 set(GMSH_MAJOR_VERSION 2)
 set(GMSH_MINOR_VERSION 8)
@@ -1406,6 +1411,9 @@ if(TEXI2PDF)
   install(FILES ${TEX_DIR}/gmsh.pdf DESTINATION ${GMSH_DOC} OPTIONAL)
 endif(TEXI2PDF)
 
+execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${OPT_TEXI}"
+                OUTPUT_FILE cmake_options.texi)
+
 if(MAKEINFO AND TEXI2PDF)
   add_custom_target(doc COMMAND ${CMAKE_COMMAND} -E tar zcf 
                     ${CMAKE_CURRENT_BINARY_DIR}/gmsh-${GMSH_VERSION}-doc.tgz
diff --git a/README.txt b/README.txt
index 723fc4f2378f8ad0486548fb7a22dadab54f6b33..9c75d5496faf78d92009459ccc79948c8e0acf0b 100644
--- a/README.txt
+++ b/README.txt
@@ -51,7 +51,8 @@ Build Gmsh from the command line
 
     cmake -DENABLE_FLTK=0 ..
 
-  to build a version of Gmsh without the FLTK graphical interface.
+  to build a version of Gmsh without the FLTK graphical interface. The list of
+  all available configuration options is given in the reference manual.
 
 * You can keep multiple builds with different build options at the same
   time. For example, you could configure a debug graphical build in a "bin"
diff --git a/doc/texinfo/cmake_options.texi b/doc/texinfo/cmake_options.texi
new file mode 100644
index 0000000000000000000000000000000000000000..c95e7bad54a206bf21f911a3732ab278243b5ae1
--- /dev/null
+++ b/doc/texinfo/cmake_options.texi
@@ -0,0 +1,111 @@
+
+@item ENABLE_3M
+Enable 3M extension (experimental) (default: OFF)
+@item ENABLE_ACIS
+Enable ACIS geometrical models (experimental) (default: ON)
+@item ENABLE_ANN
+Enable ANN (used for fast point search in mesh/post) (default: ON)
+@item ENABLE_BAMG
+Enable Bamg 2D anisotropic mesh generator (default: ON)
+@item ENABLE_BFGS
+Enable BFGS (used by some mesh optimizers) (default: ON)
+@item ENABLE_BLAS_LAPACK
+Enable BLAS/Lapack for linear algebra (required for meshing) (default: ON)
+@item ENABLE_BLOSSOM
+Enable Blossom algorithm (needed for full quad meshing) (default: ON)
+@item ENABLE_BUILD_LIB
+Enable 'lib' target for buildin static Gmsh library (default: OFF)
+@item ENABLE_BUILD_SHARED
+Enable 'shared' target for building shared Gmsh library (default: OFF)
+@item ENABLE_BUILD_DYNAMIC
+Enable dynamic Gmsh executable (linked with shared lib) (default: OFF)
+@item ENABLE_BUILD_ANDROID
+Enable Android NDK library target (experimental) (default: OFF)
+@item ENABLE_BUILD_IOS
+Enable iOS (ARM) library target (experimental) (default: OFF)
+@item ENABLE_CGNS
+Enable CGNS mesh export (experimental) (default: OFF)
+@item ENABLE_CAIRO
+Enable Cairo to render fonts (experimental) (default: ON)
+@item ENABLE_CHACO
+Enable Chaco mesh partitioner (alternative to Metis) (default: ON)
+@item ENABLE_DINTEGRATION
+Enable discrete integration (needed for levelsets) (default: ON)
+@item ENABLE_FLTK
+Enable FLTK graphical user interface (requires mesh/post) (default: ON)
+@item ENABLE_FOURIER_MODEL
+Enable Fourier geometrical models (experimental) (default: OFF)
+@item ENABLE_GMM
+Enable GMM linear solvers (simple alternative to PETSc) (default: ON)
+@item ENABLE_GRAPHICS
+Enable building graphics lib even without GUI (advanced) (default: OFF)
+@item ENABLE_KBIPACK
+Enable Kbipack (neeeded by homology solver) (default: ON)
+@item ENABLE_MATHEX
+Enable math expression parser (used by plugins and options) (default: ON)
+@item ENABLE_MED
+Enable MED mesh and post file formats (default: ON)
+@item ENABLE_MESH
+Enable mesh module (default: ON)
+@item ENABLE_METIS
+Enable Metis mesh partitioner (default: ON)
+@item ENABLE_MMG3D
+Enable MMG3D 3D anisotropic mesh refinement (default: ON)
+@item ENABLE_MPEG_ENCODE
+Enable built-in MPEG movie encoder (default: ON)
+@item ENABLE_MPI
+Enable MPI (mostly for parser and solver - mesh generation is sequential) (default: OFF)
+@item ENABLE_MSVC_STATIC_RUNTIME
+Enable static Visual C++ runtime (default: OFF)
+@item ENABLE_NATIVE_FILE_CHOOSER
+Enable native file chooser in GUI (default: ON)
+@item ENABLE_NETGEN
+Enable Netgen 3D frontal mesh generator (default: ON)
+@item ENABLE_OCC
+Enable Open CASCADE geometrical models (default: ON)
+@item ENABLE_ONELAB
+Enable OneLab solver interface (default: ON)
+@item ENABLE_ONELAB_METAMODEL
+Enable OneLab metamodels (experimental) (default: ON)
+@item ENABLE_OPENMP
+Enable OpenMP (experimental) (default: OFF)
+@item ENABLE_OPTHOM
+Enable high-order mesh optimization tools (default: ON)
+@item ENABLE_OS_SPECIFIC_INSTALL
+Enable OS-specific (e.g. app bundle) installation (default: ON)
+@item ENABLE_OSMESA
+Enable OSMesa for offscreen rendering (experimental) (default: OFF)
+@item ENABLE_PARSER
+Enable GEO file parser (required for .geo/.pos files) (default: ON)
+@item ENABLE_PETSC
+Enable PETSc linear solvers (required for SLEPc) (default: ON)
+@item ENABLE_PLUGINS
+Enable post-processing plugins (default: ON)
+@item ENABLE_POST
+Enable post-processing module (default: ON)
+@item ENABLE_POPPLER
+Enable Poppler for displaying PDF documents (experimental) (default: OFF)
+@item ENABLE_QT
+Enable dummy QT graphical interface proof-of-concept (default: OFF)
+@item ENABLE_RTREE
+Enable RTREE (used for quad/hex mesh generation) (default: ON)
+@item ENABLE_SALOME
+Enable Salome routines for CAD healing (default: ON)
+@item ENABLE_SGEOM
+Enable SGEOM interface to OCC (experimental) (default: OFF)
+@item ENABLE_SLEPC
+Enable SLEPc eigensolvers (required for conformal compounds) (default: ON)
+@item ENABLE_SOLVER
+Enable solver components (required e.g. for compounds) (default: ON)
+@item ENABLE_TAUCS
+Enable Taucs linear solver (alternative to PETSc) (default: ON)
+@item ENABLE_TETGEN
+Enable Tetgen 3D initial mesh generator (default: ON)
+@item ENABLE_TETGEN_OLD
+Enable older version of Tetgen (default: OFF)
+@item ENABLE_VORO3D
+Enable Voro3D (experimental) (default: ON)
+@item ENABLE_WRAP_JAVA
+Enable building of Java wrappers (default: OFF)
+@item ENABLE_WRAP_PYTHON
+Enable building of Python wrappers (default: OFF)
diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi
index f0a94b0c159734f32c259a0fb8ae054d3240dbf1..768cc295b8ccfed850e7faf601492c6000cfae7f 100644
--- a/doc/texinfo/gmsh.texi
+++ b/doc/texinfo/gmsh.texi
@@ -120,6 +120,7 @@ for Gmsh @value{GMSH-VERSION} (@today{}).
 * File formats::                Input and output file formats
 * Tutorial::                    A step-by-step tutorial
 * Options::                     List of all available options
+* Compiling the source code::   Information on how to comile Gmsh from source
 * Information for developers::  Info for Gmsh developers
 * Frequently asked questions::  The Gmsh FAQ
 * Version history::             Changelog
@@ -249,7 +250,6 @@ Options
 
 Information for developers
 
-* Getting the source::          
 * Source code structure::       
 * Coding style::                
 * Adding a new option::         
@@ -519,9 +519,10 @@ formats (@pxref{General options list}), and can generate complex
 animations (see @ref{General tools}, and @ref{t8.geo});
 @item
 run on low end machines and/or machines with no graphical
-interface. Gmsh can be compiled with or without the GUI, and all
-versions can be used either interactively or directly from the command
-line (@pxref{Running Gmsh on your system});
+interface. Gmsh can be compiled with or without the GUI
+(@pxref{Compiling the source code}), and all versions can be used either
+interactively or directly from the command line (@pxref{Running Gmsh on
+your system});
 @item
 configure your preferred options. Gmsh has a large number of
 configuration options that can be set interactively using the GUI,
@@ -654,11 +655,9 @@ Application Programming Interface (API). No complete documentation of
 this API is available yet; a good starting point is @ref{Source code
 structure}, which gives a short introduction to Gmsh's internal source
 code structure. Then have a look e.g. at the examples in the
-@file{utils/api_demos/} directory in the source code. Due to the many
-possible configuration options (and associated external dependencies),
-we currently do not distibute precompiled versions of the Gmsh
-library. To build the library see the instructions in the top-level
-@file{README.txt} file in the source distribution.
+@file{utils/api_demos/} directory in the source code.  To build the
+library see the instructions in @ref{Compiling the source code} and in
+the top-level @file{README.txt} file in the source distribution.
 
 @c -------------------------------------------------------------------------
 @c Syntactic rules used in the manual
@@ -817,9 +816,9 @@ menu.
 @cindex Non-interactive mode
 
 Gmsh can be run non-interactively in `batch' mode, without
-GUI@footnote{If you compile Gmsh without the GUI, this is the only mode
-you have access to.}. For example, to mesh the first tutorial in batch
-mode, just type:
+GUI@footnote{If you compile Gmsh without the GUI (@pxref{Compiling the
+source code}), this is the only mode you have access to.}. For example,
+to mesh the first tutorial in batch mode, just type:
 
 @example
 > gmsh t1.geo -2
@@ -1480,8 +1479,9 @@ Returns Gmsh's minor version number.
 Returns Gmsh's patch version number.
 
 @item MPI_Size
-Returns the number of processors on which Gmsh is running (always 1, except
-if you compiled Gmsh's parallel extensions).
+Returns the number of processors on which Gmsh is running. It is always
+1, except if you compiled Gmsh with @code{ENABLE_MPI}
+(@pxref{Compiling the source code}).
 
 @item MPI_Rank
 Returns the rank of the current processor.
@@ -3705,7 +3705,7 @@ for(i = 0; i < number_of_triangles; i++)@{
 
 @cindex Nodes, ordering
 
-Historically, Gmsh developpers have started by implementing linear elements (lines,
+Historically, Gmsh developers have started by implementing linear elements (lines,
 triangles, quads, tets, prisms and hexes). Then, second and sometimes third
 order elements have been hardcoded. We here distinguish ``low order elements'' that
 have been hardcoded initially and ``high order elements'' that have been coded in
@@ -4424,7 +4424,7 @@ system}. Screencasts that show how to use the GUI are available on
 @c Options
 @c =========================================================================
 
-@node Options, Information for developers, Tutorial, Top
+@node Options, Compiling the source code, Tutorial, Top
 @appendix Options
 
 This appendix lists all the available options.  Gmsh's default behavior
@@ -4510,41 +4510,15 @@ by hand.
 @c The @code{ColorTable} is defined as a list...
 
 @c =========================================================================
-@c Information for developers
+@c Compiling the source code
 @c =========================================================================
 
-@node Information for developers, Frequently asked questions, Options, Top
-@appendix Information for developers
-
-@cindex Developer, information
-@cindex Programming, notes
-
-Gmsh is written in C++, the scripting language is parsed using Lex and
-Yacc (actually, Flex and Bison), and the GUI relies on OpenGL for the 3D
-graphics and FLTK (@uref{http://www.fltk.org}) for the widget
-set. Gmsh's build system is based on CMake
-(@uref{http://www.cmake.org}). Practical notes on how to compile Gmsh's
-source code are included in the distribution. See @ref{Frequently asked
-questions}, for more information.
-
-@menu
-* Getting the source::          
-* Source code structure::       
-* Coding style::                
-* Adding a new option::         
-@end menu
-
-@c -------------------------------------------------------------------------
-@c Getting the source
-@c -------------------------------------------------------------------------
-
-@node Getting the source, Source code structure, Information for developers, Information for developers
-@section Getting the source
+@node Compiling the source code, Information for developers, Options, Top
+@appendix Compiling the source code
 
 Stable releases and nightly source snapshots are available from
-@uref{http://geuz.org/gmsh/src/}.
-
-You can also access the subversion repository directly:
+@uref{http://geuz.org/gmsh/src/}. You can also access the subversion
+repository directly:
 
 @enumerate
 @item
@@ -4575,11 +4549,47 @@ svn commit
 
 @end enumerate
 
+Once you have the source code, you need to run CMake to configure your
+build (see the @file{README.txt} file in the top-level source directory
+for detailed information on how to run CMake). Each build can be
+configured using a series of options, to selectively enable optional
+modules or features. Here is the list of CMake options:
+
+@ftable @code
+
+@include cmake_options.texi
+
+@end ftable
+
+@c =========================================================================
+@c Information for developers
+@c =========================================================================
+
+@node Information for developers, Frequently asked questions, Compiling the source code, Top
+@appendix Information for developers
+
+@cindex Developer, information
+@cindex Programming, notes
+
+Gmsh is written in C++, the scripting language is parsed using Lex and
+Yacc (actually, Flex and Bison), and the GUI relies on OpenGL for the 3D
+graphics and FLTK (@uref{http://www.fltk.org}) for the widget
+set. Gmsh's build system is based on CMake
+(@uref{http://www.cmake.org}). Practical notes on how to compile Gmsh's
+source code is provided in @ref{Compiling the source code} (see also
+@ref{Frequently asked questions}).
+
+@menu
+* Source code structure::       
+* Coding style::                
+* Adding a new option::         
+@end menu
+
 @c -------------------------------------------------------------------------
 @c Source code structure
 @c -------------------------------------------------------------------------
 
-@node Source code structure, Coding style, Getting the source, Information for developers
+@node Source code structure, Coding style, Information for developers, Information for developers
 @section Source code structure
 
 Gmsh's code is structured in several subdirectories, roughly separated
@@ -4866,9 +4876,9 @@ found at @url{http://www.mesa3d.org}.
 
 @item How do I compile Gmsh from the source code?
 
-You need cmake (@url{http://www.cmake.org}) and a C++ compiler. See the
-@file{README.txt} file in the top-level source directory for more
-information.
+You need cmake (@url{http://www.cmake.org}) and a C++ compiler. See
+@ref{Compiling the source code} and the @file{README.txt} file in the
+top-level source directory for more information.
 
 @item Where does Gmsh save its configuration files?