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?