From 0f8bdb417a379b063bd95099608a7e8bf40283e8 Mon Sep 17 00:00:00 2001 From: Matthias Maier Date: Thu, 28 Nov 2013 23:07:17 +0000 Subject: [PATCH] Documentation: Reformat
 environment, unify and cleanup
 documentation

git-svn-id: https://svn.dealii.org/trunk@31825 0785d39b-7218-0410-832d-ea1e28bc413d
---
 deal.II/doc/developers/cmake-internals.html   | 789 +++++++++---------
 deal.II/doc/developers/svn.html               |  19 +-
 deal.II/doc/developers/toc.html               | 183 ++--
 .../doc/developers/writing-documentation.html | 110 +--
 deal.II/doc/documentation.html                |  75 +-
 deal.II/doc/navbar.html                       |   2 +-
 deal.II/doc/screen.css                        | 156 ++--
 deal.II/doc/users/cmake.html                  | 579 ++++++-------
 deal.II/doc/users/cmakelists.html             |  52 +-
 deal.II/doc/users/doxygen.html                |   4 +-
 deal.II/doc/users/navbar.html                 |   2 +-
 deal.II/doc/users/toc.html                    | 234 +++---
 12 files changed, 1072 insertions(+), 1133 deletions(-)

diff --git a/deal.II/doc/developers/cmake-internals.html b/deal.II/doc/developers/cmake-internals.html
index 9d985da5e6..b2308511d2 100644
--- a/deal.II/doc/developers/cmake-internals.html
+++ b/deal.II/doc/developers/cmake-internals.html
@@ -160,52 +160,51 @@ SET_TARGET_PROPERTIES(${DEAL_II_BASE_NAME}${DEAL_II_${build}_SUFFIX}
       flags or compiler support, please respect the following note
 
 
-
-    #
-    # (./cmake/setup_compiler_flags.cmake)
-    #
-    # ####################
-    # #     FAT NOTE:    #
-    # ####################
-    #
-    # All configuration in setup_compiler_flags.cmake and
-    # setup_compiler_flags_.cmake shall ONLY modify:
-    #
-    #   CMAKE_CXX_FLAGS
-    #   DEAL_II_CXX_FLAGS_DEBUG
-    #   DEAL_II_CXX_FLAGS_RELEASE
-    #   DEAL_II_LINKER_FLAGS
-    #   DEAL_II_LINKER_FLAGS_DEBUG
-    #   DEAL_II_LINKER_FLAGS_RELEASE
-    #
-    # All modifications shall be guarded with the ENABLE_IF_SUPPORTED
-    # or ENABLE_IF_LINKS macro, e.g.
-    #
-    #   ENABLE_IF_SUPPORTED(CMAKE_CXX_FLAGS "-fpic")
-    #   ENABLE_IF_LINKS(DEAL_II_LINKER_FLAGS "-Wl,--as-needed")
-    #
-    # Compiler flags for platform dependent optimization (such as
-    # -march=native) must always be guarded with
-    # DEAL_II_ALLOW_PLATFORM_INTROSPECTION:
-    #
-    #   IF(DEAL_II_ALLOW_PLATFORM_INTROSPECTION)
-    #     ENABLE_IF_SUPPORTED(CMAKE_CXX_FLAGS "-march=native")
-    #   ENDIF()
-    #
-    # Checks for compiler features (such as C++11 support) and compiler
-    # specific bugs that
-    #   - usually set up further configuration (such as preprocessor
-    #     definitions)
-    #   - disable a specific flag for a specific compiler version.
-    #
-    # belong the corresponding file:
-    #
-    #   ./cmake/checks/check_01_compiler_features.cmake
-    #   ./cmake/checks/check_01_cpu_features.cmake
-    #   ./cmake/checks/check_01_cxx_features.cmake
-    #   ./cmake/checks/check_01_system_features.cmake
-    #   ./cmake/checks/check_02_compiler_bugs.cmake
-    #
+#
+# (./cmake/setup_compiler_flags.cmake)
+#
+# ####################
+# #     FAT NOTE:    #
+# ####################
+#
+# All configuration in setup_compiler_flags.cmake and
+# setup_compiler_flags_.cmake shall ONLY modify:
+#
+#   CMAKE_CXX_FLAGS
+#   DEAL_II_CXX_FLAGS_DEBUG
+#   DEAL_II_CXX_FLAGS_RELEASE
+#   DEAL_II_LINKER_FLAGS
+#   DEAL_II_LINKER_FLAGS_DEBUG
+#   DEAL_II_LINKER_FLAGS_RELEASE
+#
+# All modifications shall be guarded with the ENABLE_IF_SUPPORTED
+# or ENABLE_IF_LINKS macro, e.g.
+#
+#   ENABLE_IF_SUPPORTED(CMAKE_CXX_FLAGS "-fpic")
+#   ENABLE_IF_LINKS(DEAL_II_LINKER_FLAGS "-Wl,--as-needed")
+#
+# Compiler flags for platform dependent optimization (such as
+# -march=native) must always be guarded with
+# DEAL_II_ALLOW_PLATFORM_INTROSPECTION:
+#
+#   IF(DEAL_II_ALLOW_PLATFORM_INTROSPECTION)
+#     ENABLE_IF_SUPPORTED(CMAKE_CXX_FLAGS "-march=native")
+#   ENDIF()
+#
+# Checks for compiler features (such as C++11 support) and compiler
+# specific bugs that
+#   - usually set up further configuration (such as preprocessor
+#     definitions)
+#   - disable a specific flag for a specific compiler version.
+#
+# belong the corresponding file:
+#
+#   ./cmake/checks/check_01_compiler_features.cmake
+#   ./cmake/checks/check_01_cpu_features.cmake
+#   ./cmake/checks/check_01_cxx_features.cmake
+#   ./cmake/checks/check_01_system_features.cmake
+#   ./cmake/checks/check_02_compiler_bugs.cmake
+#
 

@@ -220,26 +219,24 @@ SET_TARGET_PROPERTIES(${DEAL_II_BASE_NAME}${DEAL_II_${build}_SUFFIX} there are:
-    
-    ./cmake/checks/check_01_compiler_features.cmake
-      - Search for support for compiler dependent features such as stack
-        trace support, demangler support, etc.
-
-    ./cmake/checks/check_01_cpu_features.cmake
-      - Platform introspection for CPU features goes here and must be
-        guarded with DEAL_II_ALLOW_PLATFORM_INTROSPECTION
+./cmake/checks/check_01_compiler_features.cmake
+  - Search for support for compiler dependent features such as stack
+    trace support, demangler support, etc.
 
-    ./cmake/checks/check_01_cxx_features.cmake
-      - Check for supported C++ language features such as sufficient C++11
-        support
+./cmake/checks/check_01_cpu_features.cmake
+  - Platform introspection for CPU features goes here and must be
+    guarded with DEAL_II_ALLOW_PLATFORM_INTROSPECTION
 
-    ./cmake/checks/check_01_system_features.cmake
-      - Checks for specific platform (Linux/Darwin/CYGWIN/Windows..)
-        features and support
+./cmake/checks/check_01_cxx_features.cmake
+  - Check for supported C++ language features such as sufficient C++11
+    support
 
-    ./cmake/checks/check_02_compiler_bugs.cmake
-      - Check for compiler bugs
+./cmake/checks/check_01_system_features.cmake
+  - Checks for specific platform (Linux/Darwin/CYGWIN/Windows..)
+    features and support
 
+./cmake/checks/check_02_compiler_bugs.cmake
+  - Check for compiler bugs
 

@@ -353,16 +346,15 @@ SET_TARGET_PROPERTIES(${DEAL_II_BASE_NAME}${DEAL_II_${build}_SUFFIX} If successful, the following uncached variables might be set:
-	
-    FEATURE_FOUND
-    FEATURE_LIBRARIES
-    FEATURE_INCLUDE_DIRS
-    FEATURE_LINKER_FLAGS
-
-    FEATURE_VERSION
-    FEATURE_VERSION_MAJOR
-    FEATURE_VERSION_MINOR
-    FEATURE_VERSION_SUBMINOR
+FEATURE_FOUND
+FEATURE_LIBRARIES
+FEATURE_INCLUDE_DIRS
+FEATURE_LINKER_FLAGS
+
+FEATURE_VERSION
+FEATURE_VERSION_MAJOR
+FEATURE_VERSION_MINOR
+FEATURE_VERSION_SUBMINOR
 
There are obviously valid exceptions from this rule, though. @@ -375,321 +367,312 @@ There are obviously valid exceptions from this rule, though. A hint with FEATURE_DIR can be set up for convenience. It is best to start the Find module by -
-
-    SET_IF_EMPTY(FEATURE_DIR "$ENV{FEATURE_DIR}")
+
+SET_IF_EMPTY(FEATURE_DIR "$ENV{FEATURE_DIR}")
 
and use FEATURE_DIR as a hint. If the external library could be found, hide it via MARK_AS_ADVANCED, if the external library could not be found, set a cache value: -
-  
-    SET(FEATURE_DIR "" CACHE PATH "An optional hint to a FEATURE directory")
+
+SET(FEATURE_DIR "" CACHE PATH "An optional hint to a FEATURE directory")
 
- -

./cmake/configure/configure_*.cmake

- + +

./cmake/configure/configure_*.cmake

+

The final step in the configuration phase is the setup of features (which refer to external or bundled libraries deal.II can optionally interface with.) -

-

- At bare minimum configure_<feature>.cmake - file for a feature just consists of a call to the - CONFIGURE_FEATURE(<FEATURE>) macro which is - implemented in - ./cmake/macros/macro_configure_feature.cmake. - In this case the corresponding Find<FEATURE>.cmake - module is used to determine whether an external dependency can be - resolved or not. Depending on the current state of - DEAL_II_WITH_<FEATURE> (see - here) the variables -

-
-    FEATURE_LIBRARIES
-    FEATURE_INCLUDE_DIRS
-    FEATURE_LINKER_FLAGS
-          
- are appended to the set of global variables - and DEAL_II_WITH_<FEATURE> is set to - TRUE. -

- -

- It is possible to override this default behaviour with the following - variables and macros (all of them are optional and will be replaced - by an appropriate default action if unset): +

+ At bare minimum configure_<feature>.cmake + file for a feature just consists of a call to the + CONFIGURE_FEATURE(<FEATURE>) macro which is + implemented in + ./cmake/macros/macro_configure_feature.cmake. + In this case the corresponding Find<FEATURE>.cmake + module is used to determine whether an external dependency can be + resolved or not. Depending on the current state of + DEAL_II_WITH_<FEATURE> (see + here) the variables +

+FEATURE_LIBRARIES
+FEATURE_INCLUDE_DIRS
+FEATURE_LINKER_FLAGS
+
+ are appended to the set of global variables + and DEAL_II_WITH_<FEATURE> is set to + TRUE. +

+ +

+ It is possible to override this default behaviour with the following + variables and macros (all of them are optional and will be replaced + by an appropriate default action if unset): +

    +
  • + <FEATURE> means all caps, + <feature> means all lowercase + +
  • + In ./cmake/configure/configure_<feature>.cmake: +
    +FEATURE_<FEATURE>_DEPENDS              (a variable)
    +  - a variable which contains an optional list of other features
    +    this feature depends on (and which have to be enabled for this feature
    +    to work.) The features must be given with the full option toggle:
    +    DEAL_II_WITH_[...]
    +
    +FEATURE_<FEATURE>_FIND_EXTERNAL(var)   (a macro)
    +  - which should set var to TRUE if all dependencies for the feature are
    +    fulfilled. In this case all necessary variables for
    +    FEATURE_<FEATURE>_CONFIGURE_EXTERNAL must be set.
    +    Otherwise var should remain unset.
    +    If this macro is undefined, FIND_PACKAGE(<FEATURES>) is
    +    called directly instead.
    +
    +FEATURE_<FEATURE>_CONFIGURE_EXTERNAL()  (a macro)
    +  - which should setup all necessary configuration for the feature with
    +    external dependencies. If something goes wrong this macro must
    +    issue a FATAL_ERROR.
    +    If this macro is undefined, the information provided in
    +    <FEATURES>_LIBRARIES, <FEATURES>_INCLUDE_DIRS and
    +    <FEATURES>_LINKER_FLAGS is used for the build.
    +
    +FEATURE_<FEATURE>_CONFIGURE_BUNDLED()  (a macro)
    +  - which should setup all necessary configuration for the feature with
    +    bundled source dependencies. If something goes wrong this macro must
    +    issue a FATAL_ERROR.
    +
    +FEATURE_<FEATURE>_ERROR_MESSAGE()      (macro)
    +  - which should print a meaningful error message (with FATAL_ERROR) for
    +    the case that no external library was found (and bundled is not
    +    allowed to be used.) If not defined, a suitable default error message
    +    will be printed.
    +
    + +
  • + In ./bundled/CMakeLists.txt: +
    +FEATURE_<FEATURE>_HAVE_BUNDLED         (a boolean)
    +  - which should either be set to TRUE if all necessary libraries of the
    +    features comes bundled with deal.II and hence can be supported
    +    without external dependencies, or unset.
    +
    +DEAL_II_FORCE_BUNDLED_<FEATURE>        (an option)
    +  - If <feature> can be set up by bundled libraries, this
    +    configuration option must be present to force a use of bundled
    +    dependencies
    +
    + +
  • + Furthermore, if + FEATURE_<FEATURE>_BUNDLED_CONFIGURED is set to + TRUE the file ./bundled/CMakeLists.txt + must compile and install the bundled package appropriately. +
+

+ + + + +

Global variables controlling the build process

+ +

+ The following list describes all global variables controlling the + build process and the visibility associated with it (internal use for + compiling deal.Ii, externally used variables will get exported in + deal.IIConfig.cmake). Lists should be manipulated with + LIST(APPEND ...), flags with ADD_FLAGS(...) + (or if it is necessary to guard them with + ENABLE_IF_SUPPORTED(...).) +

    +
  • + The general (internal) logic for variables applies:
      -
    • - <FEATURE> means all caps, - <feature> means all lowercase - -
    • - In ./cmake/configure/configure_<feature>.cmake: -
      -
      -    FEATURE_<FEATURE>_DEPENDS              (a variable)
      -      - a variable which contains an optional list of other features
      -        this feature depends on (and which have to be enabled for this feature
      -        to work.) The features must be given with the full option toggle:
      -        DEAL_II_WITH_[...]
      -
      -    FEATURE_<FEATURE>_FIND_EXTERNAL(var)   (a macro)
      -      - which should set var to TRUE if all dependencies for the feature are
      -        fulfilled. In this case all necessary variables for
      -        FEATURE_<FEATURE>_CONFIGURE_EXTERNAL must be set.
      -        Otherwise var should remain unset.
      -        If this macro is undefined, FIND_PACKAGE(<FEATURES>) is
      -        called directly instead.
      -
      -    FEATURE_<FEATURE>_CONFIGURE_EXTERNAL()  (a macro)
      -      - which should setup all necessary configuration for the feature with
      -        external dependencies. If something goes wrong this macro must
      -        issue a FATAL_ERROR.
      -        If this macro is undefined, the information provided in
      -        <FEATURES>_LIBRARIES, <FEATURES>_INCLUDE_DIRS and
      -        <FEATURES>_LINKER_FLAGS is used for the build.
      -
      -    FEATURE_<FEATURE>_CONFIGURE_BUNDLED()  (a macro)
      -      - which should setup all necessary configuration for the feature with
      -        bundled source dependencies. If something goes wrong this macro must
      -        issue a FATAL_ERROR.
      -
      -    FEATURE_<FEATURE>_ERROR_MESSAGE()      (macro)
      -      - which should print a meaningful error message (with FATAL_ERROR) for
      -        the case that no external library was found (and bundled is not
      -        allowed to be used.) If not defined, a suitable default error message
      -        will be printed.
      -	  
      - -
    • - In ./bundled/CMakeLists.txt: -
      -
      -    FEATURE_<FEATURE>_HAVE_BUNDLED         (a boolean)
      -      - which should either be set to TRUE if all necessary libraries of the
      -        features comes bundled with deal.II and hence can be supported
      -        without external dependencies, or unset.
      -
      -    DEAL_II_FORCE_BUNDLED_<FEATURE>        (an option)
      -      - If <feature> can be set up by bundled libraries, this
      -        configuration option must be present to force a use of bundled
      -        dependencies
      -	  
      - -
    • - Furthermore, if - FEATURE_<FEATURE>_BUNDLED_CONFIGURED is set to - TRUE the file ./bundled/CMakeLists.txt - must compile and install the bundled package appropriately. +
    • A variable name without _DEBUG or + _RELEASE: Used for all targets +
    • <...>_DEBUG: additionally used for debug targets +
    • <...>_RELEASE: additionally used for release targets
    -

    - +
  • + For internal use, for setting necessary linker flags for the deal.II library: +
      +
    • DEAL_II_LINKER_FLAGS +
    • DEAL_II_LINKER_FLAGS_DEBUG +
    • DEAL_II_LINKER_FLAGS_RELEASE +
    +
  • + For internal use, for setting necessary compiler flags, e.g. + -std=c++11 (if available): +
      +
    • CMAKE_CXX_FLAGS +
    • DEAL_II_CXX_FLAGS_DEBUG +
    • DEAL_II_CXX_FLAGS_RELEASE +
    +
  • + For internal use, for setting necessary include dirs for the compilation of the + deal.II library: +
      +
    • INCLUDE_DIRECTORIES(...) +
    - -

    Global variables controlling the build process

    +
  • + For internal use, for setting necessary preprocessor definitions + (-D<...>) for the compilation of the + deal.II library: +
      +
    • DEAL_II_DEFINITIONS +
    • DEAL_II_DEFINITIONS_DEBUG +
    • DEAL_II_DEFINITIONS_RELEASE +
    -

    - The following list describes all global variables controlling the - build process and the visibility associated with it (internal use for - compiling deal.Ii, externally used variables will get exported in - deal.IIConfig.cmake). Lists should be manipulated with - LIST(APPEND ...), flags with ADD_FLAGS(...) - (or if it is necessary to guard them with - ENABLE_IF_SUPPORTED(...).) +

  • + For internal and external use, used to keep track of external + libraries, the deal.II library and user + programs have to be linked against:
      -
    • - The general (internal) logic for variables applies: -
        -
      • A variable name without _DEBUG or - _RELEASE: Used for all targets -
      • <...>_DEBUG: additionally used for debug targets -
      • <...>_RELEASE: additionally used for release targets -
      - -
    • - For internal use, for setting necessary linker flags for the deal.II library: -
        -
      • DEAL_II_LINKER_FLAGS -
      • DEAL_II_LINKER_FLAGS_DEBUG -
      • DEAL_II_LINKER_FLAGS_RELEASE -
      - -
    • - For internal use, for setting necessary compiler flags, e.g. - -std=c++11 (if available): -
        -
      • CMAKE_CXX_FLAGS -
      • DEAL_II_CXX_FLAGS_DEBUG -
      • DEAL_II_CXX_FLAGS_RELEASE -
      - -
    • - For internal use, for setting necessary include dirs for the compilation of the - deal.II library: -
        -
      • INCLUDE_DIRECTORIES(...) -
      - -
    • - For internal use, for setting necessary preprocessor definitions - (-D<...>) for the compilation of the - deal.II library: -
        -
      • DEAL_II_DEFINITIONS -
      • DEAL_II_DEFINITIONS_DEBUG -
      • DEAL_II_DEFINITIONS_RELEASE -
      - -
    • - For internal and external use, used to keep track of external - libraries, the deal.II library and user - programs have to be linked against: -
        -
      • DEAL_II_EXTERNAL_LIBRARIES -
      • DEAL_II_EXTERNAL_LIBRARIES_DEBUG -
      • DEAL_II_EXTERNAL_LIBRARIES_RELEASE -
      - -
    • - For external use, used to keep track of external preprocessor - definitions, necessary for the compilation of user programs: -
        -
      • DEAL_II_USER_DEFINITIONS -
      • DEAL_II_USER_DEFINITIONS_DEBUG -
      • DEAL_II_USER_DEFINITIONS_RELEASE -
      - -
    • - Used to keep track of external include dirs, necessary for the - compilation of user programs: -
        -
      • DEAL_II_USER_INCLUDE_DIRS -
      +
    • DEAL_II_EXTERNAL_LIBRARIES +
    • DEAL_II_EXTERNAL_LIBRARIES_DEBUG +
    • DEAL_II_EXTERNAL_LIBRARIES_RELEASE
    -

    - -

    Target definition and installation

    - -

    ./include/deal.II/base/config.h.in

    +
  • + For external use, used to keep track of external preprocessor + definitions, necessary for the compilation of user programs: +
      +
    • DEAL_II_USER_DEFINITIONS +
    • DEAL_II_USER_DEFINITIONS_DEBUG +
    • DEAL_II_USER_DEFINITIONS_RELEASE +
    - In contrast to autoconf there is no intermediate step any more that - automatically generates config.h.in. The setup in this file has to be - done by hand. Please note: +
  • + Used to keep track of external include dirs, necessary for the + compilation of user programs:
      -
    • config.h.in should only contain a minimum of - necessary compile definitions to avoid unnecessary recompilation if - configuration changes. -
    • Definition toggles in config.h.in should have a - prominent comment explaining it and should be grouped by file - exporting the definition. +
    • DEAL_II_USER_INCLUDE_DIRS
    +
+

+ + +

Target definition and installation

+ +

./include/deal.II/base/config.h.in

+ +In contrast to autoconf there is no intermediate step any more that +automatically generates config.h.in. The setup in this file has to be +done by hand. Please note: +
    +
  • config.h.in should only contain a minimum of + necessary compile definitions to avoid unnecessary recompilation if + configuration changes. +
  • Definition toggles in config.h.in should have a + prominent comment explaining it and should be grouped by file + exporting the definition. +
+ + +

./source/CMakeLists.txt

+ +

+ All parts of the library are organized into logical object libraries + with their respective sources lying under + ./source/<foo>, or + ./bundled/<foo>/<...>. The actual setup of + an object library happens within that subdirectories with the help of + two macros: +

+#
+# Glob for all header files associated with the object target:
+# As this list is only for cosmetic reasons, so that associated header
+# files show up in IDEs, we don't manage an explicit list (with the
+# trade-off to have to run "make rebuild_cache" when a new header file
+# emerges...)
+#
+FILE(GLOB _header
+  ${CMAKE_SOURCE_DIR}/include/deal.II/dofs/*.h
+  )
+
+#
+# A list of source files forming the object target:
+#
+SET(_src
+  ...
+  dof_tools.cc
+  )
+
+#
+# A list of instantiations that must be expanded:
+#
+SET(_inst
+  ...
+  dof_tools.inst.in
+  )
+
+#
+# The following macro will set up an obj_dofs.debug and
+# obj_dofs.release target  with appropriate compile flags and
+# definitions for a simultaneous build of debug and release library.
+# Furthermore, the object name will be stored in
+#   ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/deal_ii_objects_(debug/release)
+# so that it is available in global scope.
+#
+# Header files and instatiation files (${_header}, ${_inst}) are added
+# for cosmetic reasons, so that they show up in IDEs.
+#
+DEAL_II_ADD_LIBRARY(obj_dofs OBJECT ${_src} ${_header} ${_inst})
+
+#
+# This macro will set up an obj_dofs.inst target for expanding all
+# files listed in ${inst_in_files}. Appropriate target dependencies
+# will be added to obj_dofs.debug and obj_dofs.release.
+#
+EXPAND_INSTANTIATIONS(obj_dofs "${inst_in_files}")
+
+

+ +

+ Later, all object targets are collected in + ./source/CMakeLists.txt to define the actual debug and + releases libraries. For further details, see + ./source/CMakelists.txt and + ./cmake/macros/macro_deal_ii_add_library.cmake. +

+ + +

./cmake/config/CMakeLists.txt

+ +

+ The final bits of configuration happens in + ./cmake/config/CMakeLists.txt where the templates for + the project configuration deal.IIConfig.cmake and the + compatibility file Make.global_options get expanded. + Furthermore, the configuration for the template expansion mechanism + resides under ./cmake/config/template_arguments.in. +

+ +
+
+ The deal.II Authors + $Date$ +
+
+ + Valid HTML 4.01! + + Valid CSS! +
- -

./source/CMakeLists.txt

- -

- All parts of the library are organized into logical object libraries - with their respective sources lying under - ./source/<foo>, or - ./bundled/<foo>/<...>. The actual setup of - an object library happens within that subdirectories with the help of - two macros: -

-
-    #
-    # Glob for all header files associated with the object target:
-    # As this list is only for cosmetic reasons, so that associated header
-    # files show up in IDEs, we don't manage an explicit list (with the
-    # trade-off to have to run "make rebuild_cache" when a new header file
-    # emerges...)
-    #
-    FILE(GLOB _header
-      ${CMAKE_SOURCE_DIR}/include/deal.II/dofs/*.h
-      )
-
-    #
-    # A list of source files forming the object target:
-    #
-    SET(_src
-      ...
-      dof_tools.cc
-      )
-
-    #
-    # A list of instantiations that must be expanded:
-    #
-    SET(_inst
-      ...
-      dof_tools.inst.in
-      )
-
-    #
-    # The following macro will set up an obj_dofs.debug and
-    # obj_dofs.release target  with appropriate compile flags and
-    # definitions for a simultaneous build of debug and release library.
-    # Furthermore, the object name will be stored in
-    #   ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/deal_ii_objects_(debug/release)
-    # so that it is available in global scope.
-    #
-    # Header files and instatiation files (${_header}, ${_inst}) are added
-    # for cosmetic reasons, so that they show up in IDEs.
-    #
-    DEAL_II_ADD_LIBRARY(obj_dofs OBJECT ${_src} ${_header} ${_inst})
-
-    #
-    # This macro will set up an obj_dofs.inst target for expanding all
-    # files listed in ${inst_in_files}. Appropriate target dependencies
-    # will be added to obj_dofs.debug and obj_dofs.release.
-    #
-    EXPAND_INSTANTIATIONS(obj_dofs "${inst_in_files}")
-      
-

- -

- Later, all object targets are collected in - ./source/CMakeLists.txt to define the actual debug and - releases libraries. For further details, see - ./source/CMakelists.txt and - ./cmake/macros/macro_deal_ii_add_library.cmake. -

- - -

./cmake/config/CMakeLists.txt

- -

- The final bits of configuration happens in - ./cmake/config/CMakeLists.txt where the templates for - the project configuration deal.IIConfig.cmake and the - compatibility file Make.global_options get expanded. - Furthermore, the configuration for the template expansion mechanism - resides under ./cmake/config/template_arguments.in. -

- -
-
- The deal.II Authors - $Date$ -
-
- - Valid HTML 4.01! - - Valid CSS! -
- - + diff --git a/deal.II/doc/developers/svn.html b/deal.II/doc/developers/svn.html index 50350032a2..7adc81d831 100644 --- a/deal.II/doc/developers/svn.html +++ b/deal.II/doc/developers/svn.html @@ -60,23 +60,22 @@
  1. Create the branch using -
    -	    svn copy https://svn.dealii.org/trunk/ https://svn.dealii.org/branches/new-branch-name
    -	  
    +
    +$ svn copy https://svn.dealii.org/trunk/ https://svn.dealii.org/branches/new-branch-name
    +
  2. Either check out the new branch or switch your working copy by -
    -	    svn switch https://svn.dealii.org/branches/new-branch-name
    -	  
    +
    +$ svn switch https://svn.dealii.org/branches/new-branch-name
    +
    This command assumes you are in the top level directory, the one containing deal.II and tests
  3. After some development of the branch, if you want to merge changes that have been made on mainline in the meantime, you can use this command: -
    -
    -	    svn merge ^/trunk
    -	  
    +
    +$ svn merge ^/trunk
    +
    This command will only run if you have no local changes in your working directory for the branch, and will modify all of your files by merging the changes made on mainline. If there are no conflicts that need to be diff --git a/deal.II/doc/developers/toc.html b/deal.II/doc/developers/toc.html index 2e7da24f67..ca6902a604 100644 --- a/deal.II/doc/developers/toc.html +++ b/deal.II/doc/developers/toc.html @@ -11,94 +11,97 @@ - - -

    -
    - This page provides documentation for deal.II developers. At present, we - have the following resources available: -

    - -

    Documentation

    - -
      -
    • Documentation of the SVN Archive and - information on recent changes to the library. - -

    • - Build system internals: - This page provides implementation and development details about - the CMake build system. - -

    • Writing - documentation: To document the library and our - application programs, we use - doxygen. - This page documents the basics of the format in - which the documentation needs to be written in order to - enable automatic documentation generation. -

      - -
    • Porting - deal.II to a new system: - - deal.II uses CMake as build system - and is fairly ISO (1998) C++ Standard compliant. - So, porting to a reasonably POSIX compliant - system with a reasonably ISO C++ compliant compiler shouldn't be - much work. Other (mostly proprietary) systems might require more - work. See the ReadMe - file for more information on already supported systems. This - resource gives some hints for porting to unknown platforms. -

      - -
    • Coding conventions: We try to adhere to a - set of coding conventions to ensure that the use of different - parts of the library is as uniform as possible. Please read - through them if you think about contributing code. - -

    • Running the testsuite: - deal.II has a testsuite that we run to - make sure that our tests don't break any existing - functionality. This page explains its use. -

      -
    - -

    Resources

    - -
      -
    • Results of regression tests: Every night, - the regression tests are run on some of our machines. The log of the - results can be seen here. -

      - -
    • - Results of build tests: We also build the library each night on - a variety of computers, using different compilers. The results of - these builds is listed as well. -

      - -
    • - Results of benchmarks: We run a certain number of tests - and track the performance over time. -

      -
    - -
    -
    - The deal.II Authors - $Date$ -
    -
    - - Valid HTML 4.01! - - Valid CSS! -
    - - + + +

    + +

    Information for Developers

    + +
    +This page provides documentation for deal.II developers. At present, we +have the following resources available: +

    + +

    Documentation

    + +
      +
    • Documentation of the SVN Archive and + information on recent changes to the library. + +

    • + Build system internals: + This page provides implementation and development details about + the CMake build system. + +

    • Writing + documentation: To document the library and our + application programs, we use + doxygen. + This page documents the basics of the format in + which the documentation needs to be written in order to + enable automatic documentation generation. +

      + +
    • Porting + deal.II to a new system: + + deal.II uses CMake as build system + and is fairly ISO (1998) C++ Standard compliant. + So, porting to a reasonably POSIX compliant + system with a reasonably ISO C++ compliant compiler shouldn't be + much work. Other (mostly proprietary) systems might require more + work. See the ReadMe + file for more information on already supported systems. This + resource gives some hints for porting to unknown platforms. +

      + +
    • Coding conventions: We try to adhere to a + set of coding conventions to ensure that the use of different + parts of the library is as uniform as possible. Please read + through them if you think about contributing code. + +

    • Running the testsuite: + deal.II has a testsuite that we run to + make sure that our tests don't break any existing + functionality. This page explains its use. +

      +
    + +

    Resources

    + +
      +
    • Results of regression tests: Every night, + the regression tests are run on some of our machines. The log of the + results can be seen here. +

      + +
    • + Results of build tests: We also build the library each night on + a variety of computers, using different compilers. The results of + these builds is listed as well. +

      + +
    • + Results of benchmarks: We run a certain number of tests + and track the performance over time. +

      +
    + +
    +
    + The deal.II Authors + $Date$ +
    +
    + + Valid HTML 4.01! + + Valid CSS! +
    + + diff --git a/deal.II/doc/developers/writing-documentation.html b/deal.II/doc/developers/writing-documentation.html index 30a938abc1..249194b52c 100644 --- a/deal.II/doc/developers/writing-documentation.html +++ b/deal.II/doc/developers/writing-documentation.html @@ -74,31 +74,31 @@ function/variable declaration, global function or namespace, may be preceded by a comment of the following form:

    -
    -      /**
    -       * This is an example documentation.
    -       *
    -       * @author Wolfgang Bangerth, 2000
    -       */
    -      class TestClass
    -      {
    -        public:
    -                 /**
    -                  * Constructor
    -                  */
    -          TestClass ();
    -
    -                 /**
    -                  * Example function
    -                  */
    -          virtual void test () const = 0;
    -
    -                 /**
    -                  * Member variable
    -                  */
    -          const unsigned int abc;
    -      };
    -    
    +
    +/**
    + * This is an example documentation.
    + *
    + * @author Wolfgang Bangerth, 2000
    + */
    +class TestClass
    +{
    +  public:
    +           /**
    +            * Constructor
    +            */
    +    TestClass ();
    +
    +           /**
    +            * Example function
    +            */
    +    virtual void test () const = 0;
    +
    +           /**
    +            * Member variable
    +            */
    +    const unsigned int abc;
    +};
    +

    doxygen will then generate a page for the class TestClass and document each of the member functions @@ -128,14 +128,14 @@

  4. Itemized lists: By writing comments like the following, -
    -           /**
    -            * <ul>
    -            *   <li> foo
    -            *   <li> bar
    -            * </ul>
    -            */
    -         
    +
    +/**
    + * <ul>
    + *   <li> foo
    + *   <li> bar
    + * </ul>
    + */
    +
    you can get itemized lists both in the online and printed documentation:
      @@ -153,24 +153,24 @@

      If you write comments like this,

      -
      -           /**
      -            * @verbatim
      -            *   void foobar ()
      -            *   {
      -            *     i = 0;
      -            *   }
      -            * @endverbatim
      -            */
      -         
      +
      +/**
      + * @verbatim
      + *   void foobar ()
      + *   {
      + *     i = 0;
      + *   }
      + * @endverbatim
      + */
      +
      you will get the lines between the verbatim environment with the same formatting and in typewriter font: -
      -     void foobar ()
      -     {
      -       i = 0;
      -     }
      -         
      +
      +void foobar ()
      +{
      +  i = 0;
      +}
      +
      This is useful if you want to include small sample code snippets into your documentation. In particular, it is important that the formatting is preserved, which is not the case for all @@ -232,15 +232,15 @@ preprocessor symbol DOXYGEN when running doxygen. Therefore, the following template can be used to avoid documentation:

      -
      -         documented code here
      +
      +/* documented code here */
       
      -         #ifndef DOXYGEN
      +#ifndef DOXYGEN
       
      -         code here is compiled, but ignored by doxygen
      +/* code here is compiled, but ignored by doxygen */
       
      -         #endif // DOXYGEN
      -         
      +#endif // DOXYGEN +

    Code examples for the usage of single classes

    diff --git a/deal.II/doc/documentation.html b/deal.II/doc/documentation.html index 6ba9d79a25..564bf7288b 100644 --- a/deal.II/doc/documentation.html +++ b/deal.II/doc/documentation.html @@ -18,53 +18,45 @@ documentation. It can be grouped into the following categories:

    - - - - - - - - - - - - + - - -
    Information for usersInformation for developers
    + +
    - -
    -
    + + + +
    +

    The deal.II Authors @@ -76,6 +68,7 @@ Valid CSS!
    + diff --git a/deal.II/doc/navbar.html b/deal.II/doc/navbar.html index 68c14b59cf..9fe716955d 100644 --- a/deal.II/doc/navbar.html +++ b/deal.II/doc/navbar.html @@ -30,7 +30,7 @@ Tutorial
    Manual
    Video lectures
    + target="_top">Wolfgang's lectures


    diff --git a/deal.II/doc/screen.css b/deal.II/doc/screen.css index 66e3fdeec9..2abc65f177 100644 --- a/deal.II/doc/screen.css +++ b/deal.II/doc/screen.css @@ -3,33 +3,33 @@ // body { - background-image: none; - background-color: #ECF0F4; - color: Black; - margin: 10px; - padding: 0; - font-family: sans-serif; - counter-reset: section; + background-image: none; + background-color: #ECF0F4; + color: Black; + margin: 10px; + padding: 0; + font-family: sans-serif; + counter-reset: section; } body.title { - background-color: #CCD8E8; - margin: 0; - padding: 2px; + background-color: #CCD8E8; + margin: 0; + padding: 2px; } body.gallery { - background-color: #CCD8E8; - margin: 0; - padding: 2px; + background-color: #CCD8E8; + margin: 0; + padding: 2px; } body.navbar { - background-color: #CCD8E8; - margin: 2px; - padding: 2px; - font-family: sans-serif; - font-size: 12px; + background-color: #CCD8E8; + margin: 2px; + padding: 2px; + font-family: sans-serif; + font-size: 12px; } div.toc { @@ -67,9 +67,9 @@ div.quick:before { } frameset { - background-color: white; - border-color: black; - border: 2px; + background-color: white; + border-color: black; + border: 2px; } a:hover { text-decoration: underline; } @@ -102,13 +102,13 @@ div.fixedhead { } h1.head { - position:relative; + position:relative; text-align:center; - font-weight: bold; - color:black; - padding-top: 0; - padding-bottom: 0; - border-bottom: 0; + font-weight: bold; + color:black; + padding-top: 0; + padding-bottom: 0; + border-bottom: 0; } h1, h2, h3, h4, h5, h6 { @@ -207,52 +207,52 @@ q { } .figure { font-weight: bold; - font-size: larger; - } + font-size: larger; + } .pagetoc {} .chapter_title {} span.parhead { - font-weight: bold; -} + font-weight: bold; +} span.example { - font-weight: bold; - font-style: italic; + font-weight: bold; + font-style: italic; } pre { - padding: 0em; - text-align: left; - text-indent: 0; - border: 1px dashed #2f6fab; - color: Black; - background-color: #f9f9f9; - line-height: 1.1em; -} - + padding: 1em; + text-align: left; + text-indent: 0; + border: 1px dashed #2f6fab; + color: Black; + background-color: #f9f9f9; + line-height: 1.1em; +} + pre.cmake { - padding: 1em; - text-align: left; - text-indent: 0; - border: 1px solid #d06fab; - color: Black; - background-color: #f9f9f9; - line-height: 1.1em; -} - + padding: 1em; + text-align: left; + text-indent: 0; + border: 1px solid #d06fab; + color: Black; + background-color: #f9f9f9; + line-height: 1.1em; +} + pre.sample { - padding: 1em; - text-align: left; - text-indent: 0; - border: 1px dashed #2f6fab; - color: Black; - background-color: #f9f9f9; - line-height: 1.1em; -} - + padding: 1em; + text-align: left; + text-indent: 0; + border: 1px dashed #2f6fab; + color: Black; + background-color: #f9f9f9; + line-height: 1.1em; +} + table.navbar { } table.tutorial { color: black; @@ -281,9 +281,9 @@ code { } td.build { - text-align: center; - vertical-align: middle; - font-size: small; + text-align: center; + vertical-align: middle; + font-size: small; } @@ -308,8 +308,8 @@ td.build { } .weak { - color: #808080; - text-decoration: line-through; + color: #808080; + text-decoration: line-through; } .todo:before { @@ -321,16 +321,30 @@ td.build { } .deprecated { - text-decoration: line-through; + text-decoration: line-through; } .attention { - color: #f00080; - font-weight: bold; + color: #f00080; + font-weight: bold; } .shout { - color: #e000ff; - text-decoration: blink; - font-weight: bold; + color: #e000ff; + text-decoration: blink; + font-weight: bold; +} + +div.border { + clear: both; + margin: auto; +} + +div.infobox { + float: left; + width: 250px; + text-align: center; + margin-top: 1em; + margin-left: 20px; + margin-right: 20px; } diff --git a/deal.II/doc/users/cmake.html b/deal.II/doc/users/cmake.html index c4df8f5d04..7a571607ef 100644 --- a/deal.II/doc/users/cmake.html +++ b/deal.II/doc/users/cmake.html @@ -80,13 +80,12 @@ necessary; values for variables that are already in the cache are not re-evaluated. This means that calling cmake a second time without any arguments at all in a situation like this -
    -
    -    mkdir build
    -    cd build
    -    cmake -DCMAKE_INSTALL_PREFIX=/path/install/dir ../deal.II
    -    cmake ../deal.II
    -      
    +
    +mkdir build
    +cd build
    +cmake -DCMAKE_INSTALL_PREFIX=/path/install/dir ../deal.II
    +cmake ../deal.II
    +
    has no effect: In particular, the CMAKE_INSTALL_PREFIX specified on the first invocation of cmake is cached and therefore still valid after the second invocation @@ -99,33 +98,30 @@ configuration parameters and thereby interact with the configuration system in rather powerful (and, possibly, destructive) ways. For example, the following commands -
    -
    -    mkdir build
    -    cd build
    -    cmake  ../deal.II
    -    ccmake
    -      
    +
    +mkdir build
    +cd build
    +cmake  ../deal.II
    +ccmake
    +
    first configure a bare-bone setup and then call the ccmake program -- an interactive editor for the cached variables. Similarly, -
    -
    -    mkdir build
    -    cd build
    -    cmake  ../deal.II
    -    cmake -D<OPTION>=<VALUE> [...] ../deal.II
    -      
    +
    +mkdir build
    +cd build
    +cmake  ../deal.II
    +cmake -D<OPTION>=<VALUE> [...] ../deal.II
    +
    sets a variable the second time around without destroying all the configuration that has happened the first time around. Likewise, -
    -
    -    mkdir build
    -    cd build
    -    cmake  ../deal.II
    -    cmake -DDEAL_II_WITH_METIS=OFF .
    -    cmake -DDEAL_II_WITH_TRILINOS=ON -DTRILINOS_DIR=/path/to/trilinos .
    -      
    +
    +mkdir build
    +cd build
    +cmake  ../deal.II
    +cmake -DDEAL_II_WITH_METIS=OFF .
    +cmake -DDEAL_II_WITH_TRILINOS=ON -DTRILINOS_DIR=/path/to/trilinos .
    +
    switches off support for the METIS library that may have been automatically detected during the first invocation of cmake and enables support for Trilinos by enabling @@ -138,23 +134,20 @@

    A cached variable can be set on the command line via -

    -
    -    cmake -D<VARIABLE>=<VALUE> .
    -      
    +
    +cmake -D<VARIABLE>=<VALUE> .
    +
    Cached variables can be removed from the cache via -
    -
    -    cmake -U<VARIABLE> .
    -      
    +
    +cmake -U<VARIABLE> .
    +
    It is possible to use -U together with a globbing expression. E.g. to remove the current feature configuration and rerun the autodetection one can invoke -
    -
    -    cmake -U"DEAL_II_WITH_*" .
    -      
    +
    +cmake -U"DEAL_II_WITH_*" .
    +

    @@ -164,21 +157,18 @@ A very convenient way to alter the configuration is to use the graphical user interface ccmake to the variables cmake stores upon running. It can be invoked via -
    -
    -    ccmake .
    -      
    +
    +ccmake .
    +
    or by -
    -
    -    make edit_cache
    -      
    +
    +make edit_cache
    +
    A reconfiguration (without editing the cache) can be run via -
    -
    -    make rebuild_cache
    -      
    +
    +make rebuild_cache
    +

    @@ -187,15 +177,13 @@

    All variables starting with WITH_ will be automatically renamed to DEAL_II_WITH_*. So, it suffices to specify -

    -
    -    cmake -DWITH_MPI=ON <...>
    -    
    +
    +cmake -DWITH_MPI=ON <...>
    +
    instead of the longer -
    -
    -    cmake -DDEAL_II_WITH_MPI=ON <...>
    -    
    +
    +cmake -DDEAL_II_WITH_MPI=ON <...>
    +
    The same holds for all variables starting with COMPONENT_ and all individual component names: COMPAT_FILES, DOCUMENTATION, EXAMPLES, @@ -219,37 +207,36 @@

    The current list of primary build targets can be queried via make info: -

    -
    -    ###
    -    #
    -    #  The following targets are available (invoke via $ make <target>):
    -    #
    -    #    all            - compiles the library and all enabled components
    -    #    clean          - removes all generated files
    -    #    install        - installs into CMAKE_INSTALL_PREFIX
    -    #    help           - prints a list of valid top level targets
    -    #    info           - prints this help message
    -    #
    -    #    edit_cache     - runs ccmake for changing (cached) configuration variables
    -    #                     and reruns the configure and generate phases of CMake
    -    #    rebuild_cache  - reruns the configure and generate phases of CMake
    -    #
    -    #    compat_files   - builds and installs the 'compat_files' component
    -    #    documentation  - builds and installs the 'documentation' component
    -    #    examples       - builds and installs the 'examples' component
    -    #    library        - builds and installs the 'library' component
    -    #    mesh_converter - builds and installs the 'mesh_converter' component
    -    #    parameter_gui  - builds and installs the 'parameter_gui' component
    -    #
    -    #    test           - runs a minimal set of tests
    -    #
    -    #    setup_test     - sets up the testsuite subprojects
    -    #    clean_test     - runs the 'clean' target in every testsuite subproject
    -    #    prune_test     - removes all testsuite subprojects
    -    #
    -    ###
    -      
    +
    +###
    +#
    +#  The following targets are available (invoke via $ make <target>):
    +#
    +#    all            - compiles the library and all enabled components
    +#    clean          - removes all generated files
    +#    install        - installs into CMAKE_INSTALL_PREFIX
    +#    help           - prints a list of valid top level targets
    +#    info           - prints this help message
    +#
    +#    edit_cache     - runs ccmake for changing (cached) configuration variables
    +#                     and reruns the configure and generate phases of CMake
    +#    rebuild_cache  - reruns the configure and generate phases of CMake
    +#
    +#    compat_files   - builds and installs the 'compat_files' component
    +#    documentation  - builds and installs the 'documentation' component
    +#    examples       - builds and installs the 'examples' component
    +#    library        - builds and installs the 'library' component
    +#    mesh_converter - builds and installs the 'mesh_converter' component
    +#    parameter_gui  - builds and installs the 'parameter_gui' component
    +#
    +#    test           - runs a minimal set of tests
    +#
    +#    setup_test     - sets up the testsuite subprojects
    +#    clean_test     - runs the 'clean' target in every testsuite subproject
    +#    prune_test     - removes all testsuite subprojects
    +#
    +###
    +
    @@ -259,38 +246,37 @@ A configuration run of cmake (or ccmake) writes a short summary of the current configuration into CMAKE_BUILD_DIR/summary.log: -
    -
    -    ###
    -    #
    -    #  deal.II configuration:
    -    #        CMAKE_BUILD_TYPE:       DebugRelease
    -    #        BUILD_SHARED_LIBS:      ON
    -    #        CMAKE_INSTALL_PREFIX:   /tmp/deal.II/install
    -    #        CMAKE_SOURCE_DIR:       /tmp/deal.II/deal.II (Version 8.1.pre)
    -    #        CMAKE_BINARY_DIR:       /tmp/deal.II/build
    -    #        CMAKE_CXX_COMPILER:     GNU 4.7.3 on platform Linux x86_64
    -    #                                /usr/bin/c++
    -    #
    -    #  Configured Features (DEAL_II_ALLOW_BUNDLED = ON, DEAL_II_ALLOW_AUTODETECTION = ON):
    -    #      ( DEAL_II_WITH_64BIT_INDICES = OFF )
    -    #        DEAL_II_WITH_ARPACK set up with external dependencies
    -    #        DEAL_II_WITH_BOOST set up with external dependencies
    -    #        [...]
    -    #
    -    #  Component configuration:
    -    #        DEAL_II_COMPONENT_COMPAT_FILES
    -    #      ( DEAL_II_COMPONENT_DOCUMENTATION = OFF )
    -    #        DEAL_II_COMPONENT_EXAMPLES
    -    #        DEAL_II_COMPONENT_MESH_CONVERTER
    -    #      ( DEAL_II_COMPONENT_PARAMETER_GUI = OFF )
    -    #
    -    #  Detailed information (compiler flags, feature configuration) can be found in detailed.log
    -    #
    -    #  Run  $ make info  to print a help message with a list of top level targets
    -    #
    -    ###
    -      
    +
    +###
    +#
    +#  deal.II configuration:
    +#        CMAKE_BUILD_TYPE:       DebugRelease
    +#        BUILD_SHARED_LIBS:      ON
    +#        CMAKE_INSTALL_PREFIX:   /tmp/deal.II/install
    +#        CMAKE_SOURCE_DIR:       /tmp/deal.II/deal.II (Version 8.1.pre)
    +#        CMAKE_BINARY_DIR:       /tmp/deal.II/build
    +#        CMAKE_CXX_COMPILER:     GNU 4.7.3 on platform Linux x86_64
    +#                                /usr/bin/c++
    +#
    +#  Configured Features (DEAL_II_ALLOW_BUNDLED = ON, DEAL_II_ALLOW_AUTODETECTION = ON):
    +#      ( DEAL_II_WITH_64BIT_INDICES = OFF )
    +#        DEAL_II_WITH_ARPACK set up with external dependencies
    +#        DEAL_II_WITH_BOOST set up with external dependencies
    +#        [...]
    +#
    +#  Component configuration:
    +#        DEAL_II_COMPONENT_COMPAT_FILES
    +#      ( DEAL_II_COMPONENT_DOCUMENTATION = OFF )
    +#        DEAL_II_COMPONENT_EXAMPLES
    +#        DEAL_II_COMPONENT_MESH_CONVERTER
    +#      ( DEAL_II_COMPONENT_PARAMETER_GUI = OFF )
    +#
    +#  Detailed information (compiler flags, feature configuration) can be found in detailed.log
    +#
    +#  Run  $ make info  to print a help message with a list of top level targets
    +#
    +###
    +
    This summary is also printed at the end of the configuration phase. It tells you about build and install directory locations, feature configuration (whether a feature is enabled with external/internal @@ -298,15 +284,14 @@ A more detailed version can be found in CMAKE_BUILD_DIR/detailed.log that also includes detailed information about feature configuration, e.g. -
    -
    -    #        DEAL_II_WITH_BOOST set up with external dependencies
    -    #            BOOST_VERSION = 1.52.0
    -    #            BOOST_DIR = 
    -    #            Boost_INCLUDE_DIRS = /usr/include
    -    #            Boost_LIBRARIES = /usr/lib64/libboost_serialization-mt.so;/usr/lib64/libboost_system-mt.so;
    -    # [...]
    -      
    +
    +#        DEAL_II_WITH_BOOST set up with external dependencies
    +#            BOOST_VERSION = 1.52.0
    +#            BOOST_DIR = 
    +#            Boost_INCLUDE_DIRS = /usr/include
    +#            Boost_LIBRARIES = /usr/lib64/libboost_serialization-mt.so;/usr/lib64/libboost_system-mt.so;
    +# [...]
    +
    If this information is not sufficient, you might want to have a look at the following files in CMAKE_BUILD_DIR
      @@ -332,12 +317,11 @@ cmake (or ccmake) from the designated build directory, so for example (a build directory under the source directory): -
      -
      -      $ mkdir build
      -      $ cd build
      -      $ cmake ..
      -      
      +
      +$ mkdir build
      +$ cd build
      +$ cmake ..
      +
      The big advantage is that source files and intermediate files are strictly separated (highly desired for version control) and that you can have multiple build directories (with different configuration) at @@ -347,10 +331,9 @@

      Note: However, under rare occasions an in-source build might be useful or needed , so it is supported -

      -
      -      $ cmake .
      -      
      +
      +$ cmake .
      +
      But we highly discourage it!

      @@ -361,10 +344,9 @@ Cmake is a Makefile Generator. This allows to switch the generator that is used to something different. If you for example want to automatically generate an Eclipse project of deal.II, you can run -
      -
      -      $ cmake -G"Eclipse CDT4 - Unix Makefiles" [...]
      -      
      +
      +$ cmake -G"Eclipse CDT4 - Unix Makefiles" [...]
      +
      and load up the build directory as a project directly into Eclipse. Have a look at the Wiki for more information. @@ -373,10 +355,9 @@

      An interesting alternative to (GNU) Make might also be Ninja. Configure via -

      -
      -      $ cmake -GNinja [...]
      -      
      +
      +$ cmake -GNinja [...]
      +
      and run ninja instead of make.

      @@ -421,15 +402,14 @@ If you want to only generate, compile and install a specific component (most notably the documentation) you can use one of the following top level targets: -
      -
      -    compat_files   - builds and installs the 'compat_files' component
      -    documentation  - builds and installs the 'documentation' component
      -    examples       - builds and installs the 'examples' component
      -    library        - builds and installs the 'library' component
      -    mesh_converter - builds and installs the 'mesh_converter' component
      -    parameter_gui  - builds and installs the 'parameter_gui' component
      -      
      +
      +compat_files   - builds and installs the 'compat_files' component
      +documentation  - builds and installs the 'documentation' component
      +examples       - builds and installs the 'examples' component
      +library        - builds and installs the 'library' component
      +mesh_converter - builds and installs the 'mesh_converter' component
      +parameter_gui  - builds and installs the 'parameter_gui' component
      +
      @@ -462,25 +442,24 @@

      Specifically, the following variables exist (the list may grow over time, but names are standardized): -

      -
      -    DEAL_II_WITH_ARPACK
      -    DEAL_II_WITH_BOOST
      -    DEAL_II_WITH_FUNCTIONPARSER
      -    DEAL_II_WITH_LAPACK
      -    DEAL_II_WITH_METIS
      -    DEAL_II_WITH_MUMPS
      -    DEAL_II_WITH_MPI
      -    DEAL_II_WITH_NETCDF
      -    DEAL_II_WITH_P4EST
      -    DEAL_II_WITH_PETSC
      -    DEAL_II_WITH_SLEPC
      -    DEAL_II_WITH_THREADS
      -    DEAL_II_WITH_TRILINOS
      -    DEAL_II_WITH_UMFPACK
      -    DEAL_II_WITH_ZLIB
      -    DEAL_II_WITH_64BIT_INDICES
      -      
      +
      +DEAL_II_WITH_ARPACK
      +DEAL_II_WITH_BOOST
      +DEAL_II_WITH_FUNCTIONPARSER
      +DEAL_II_WITH_LAPACK
      +DEAL_II_WITH_METIS
      +DEAL_II_WITH_MUMPS
      +DEAL_II_WITH_MPI
      +DEAL_II_WITH_NETCDF
      +DEAL_II_WITH_P4EST
      +DEAL_II_WITH_PETSC
      +DEAL_II_WITH_SLEPC
      +DEAL_II_WITH_THREADS
      +DEAL_II_WITH_TRILINOS
      +DEAL_II_WITH_UMFPACK
      +DEAL_II_WITH_ZLIB
      +DEAL_II_WITH_64BIT_INDICES
      +
      They all have standard meaning with the exception of two:
        @@ -584,10 +563,9 @@

        Paths specified via CMAKE_PREFIX_PATH take precedence, e.g. with -

        -
        -    cmake -DCMAKE_PREFIX_PATH=~/workspace/local ../deal.II
        -	    
        +
        +make -DCMAKE_PREFIX_PATH=~/workspace/local ../deal.II
        +
        libraries from ~/workspace/local will be preferred for dependency resolution.

        @@ -596,37 +574,34 @@

        Hints given by <library>_DIR via command line or environment for some libraries: -

        -
        -    cmake -DP4EST_DIR=~/workspace/p4est-install/ ../deal.II
        -	    
        +
        +make -DP4EST_DIR=~/workspace/p4est-install/ ../deal.II
        +
        or -
        -
        -    export P4EST_DIR=~/workspace/p4est-install/
        -    cmake ../deal.II
        -	    
        +
        +export P4EST_DIR=~/workspace/p4est-install/
        +cmake ../deal.II
        +
        where -D<library>_DIR takes precedence over environment.

        Currently, the following variables will be considered: -

        -
        -    ARPACK_DIR,
        -    BOOST_DIR,
        -    HDF5_DIR,
        -    LAPACK_DIR (and BLAS_DIR),
        -    METIS_DIR,
        -    MUMPS_DIR (and SCALAPACK_DIR, BLACS_DIR),
        -    P4EST_DIR (and SC_DIR),
        -    PETSC_DIR and PETSC_ARCH (forming ${PETSC_DIR}/${PETSC_ARCH}),
        -    SLEPC_DIR (forming ${SLEPC_DIR}/${PETSC_ARCH}),
        -    TBB_DIR,
        -    TRILINOS_DIR,
        -    UMFPACK_DIR and SUITESPARSE_DIR (AMD_DIR, CHOLMOD_DIR, COLAMD_DIR, SUITESPARSECONFIG_DIR)
        -	    
        +
        +ARPACK_DIR,
        +BOOST_DIR,
        +HDF5_DIR,
        +LAPACK_DIR (and BLAS_DIR),
        +METIS_DIR,
        +MUMPS_DIR (and SCALAPACK_DIR, BLACS_DIR),
        +P4EST_DIR (and SC_DIR),
        +PETSC_DIR and PETSC_ARCH (forming ${PETSC_DIR}/${PETSC_ARCH}),
        +SLEPC_DIR (forming ${SLEPC_DIR}/${PETSC_ARCH}),
        +TBB_DIR,
        +TRILINOS_DIR,
        +UMFPACK_DIR and SUITESPARSE_DIR (AMD_DIR, CHOLMOD_DIR, COLAMD_DIR, SUITESPARSECONFIG_DIR)
        +

      • @@ -641,10 +616,9 @@ Find<Module> mechanism may be set, hinted or overwritten directly (variable names are highly dependent on the actual library). You can get a list via -
        -
        -    make edit_cache
        -      
        +
        +make edit_cache
        +
        and entering advanced configuration mode by pressing [t]. Variables that could not be determined are suffixed with -NOTFOUND and may be set by hand. @@ -657,18 +631,16 @@ need different revisions sometimes, in your own library directory, you may receive an error message of the form:

        -
        -
        -    CMake Warning at source/CMakeLists.txt:65 (ADD_LIBRARY):
        -      Cannot generate a safe runtime search path for target deal_II.g because
        -      files in some directories may conflict with libraries in implicit
        -      directories:
        -
        -        runtime library [libtbb.so.2] in /usr/lib may be hidden by files in:
        -          /my/private/lib
        +
        +CMake Warning at source/CMakeLists.txt:65 (ADD_LIBRARY):
        +  Cannot generate a safe runtime search path for target deal_II.g because
        +  files in some directories may conflict with libraries in implicit
        +  directories:
         
        -      Some of these libraries may not be found correctly.
        +    runtime library [libtbb.so.2] in /usr/lib may be hidden by files in:
        +      /my/private/lib
         
        +  Some of these libraries may not be found correctly.
         

        This is not a problem of CMake or deal.II, but rather a general @@ -689,14 +661,13 @@ FIND_PACKAGE(...) mechanism. In this case you can set by hand: -

        -
        -    cmake -D<feature>_FOUND=true \
        -          -D<feature>_LIBRARIES="library;and;complete;link;interface" \
        -        ( -D<feature>_INCLUDE_DIRS="semicolon;separated;list;of;include;dirs" \
        -          -D<feature>_LINKER_FLAGS="..." \
        -          -D<feature>_<...depending on library...> )
        -      
        +
        +cmake -D<feature>_FOUND=true \
        +      -D<feature>_LIBRARIES="library;and;complete;link;interface" \
        +    ( -D<feature>_INCLUDE_DIRS="semicolon;separated;list;of;include;dirs" \
        +      -D<feature>_LINKER_FLAGS="..." \
        +      -D<feature>_<...depending on library...> )
        +
        The first define ensures that cmake does not call the corresponding Find<lib>.cmake module. @@ -710,12 +681,11 @@ configuration: (Here, these libraries have been compiled with the gfortran compiler and need its support library): -
        -
        -    cmake -DLAPACK_FOUND=true \
        -          -DLAPACK_LIBRARIES="/tmp/petsc-3.3-p6/arch-linux2-c-debug/lib/libflapack.a;/tmp/petsc-3.3-p6/arch-linux2-c-debug/lib/libfblas.a" \
        -          -DLAPACK_LINKER_FLAGS="-lgfortran -lm"
        -      
        +
        +cmake -DLAPACK_FOUND=true \
        +      -DLAPACK_LIBRARIES="/tmp/petsc-3.3-p6/arch-linux2-c-debug/lib/libflapack.a;/tmp/petsc-3.3-p6/arch-linux2-c-debug/lib/libfblas.a" \
        +      -DLAPACK_LINKER_FLAGS="-lgfortran -lm"
        +
        You can set these values on the command line, with ccmake or by providing an initial cache file, see @@ -864,12 +834,11 @@

        Compilers can be switched either by command line or by setting CMAKE_(C|CXX|Fortran)_COMPILER: -
        +
        +CC=mpicc CXX=mpicxx FC=mpif90 cmake <...>
         
        -     CC=mpicc CXX=mpicxx cmake <...>
        -
        -     cmake -DCMAKE_C_COMPILER="mpicc" -DCMAKE_CXX_COMPILER="mpicxx" -DCMAKE_Fortran_COMPILER="mpif90" <...>
        -      
        +cmake -DCMAKE_C_COMPILER="mpicc" -DCMAKE_CXX_COMPILER="mpicxx" -DCMAKE_Fortran_COMPILER="mpif90" <...> +
        Please note that
        • @@ -890,22 +859,20 @@
        • Override the default configuration by setting the following cached variables: -
          -
          -    CMAKE_CXX_FLAGS           - used during all builds
          -    DEAL_II_CXX_FLAGS_DEBUG   - additional flags for the debug library
          -    DEAL_II_CXX_FLAGS_RELEASE - additional flags for the release library
          -	  
          +
          +CMAKE_CXX_FLAGS           - used during all builds
          +DEAL_II_CXX_FLAGS_DEBUG   - additional flags for the debug library
          +DEAL_II_CXX_FLAGS_RELEASE - additional flags for the release library
          +
          The content of the cached variables will be preserved and added to the end of the default compiler flags, hence providing the possibility for overriding a flag. E.g.: -Wsign-compare, set by the build system, can be overwritten by specifying: -
          -
          -    cmake -DCMAKE_CXX_FLAGS="-Wno-sign-compare" <...>
          -	  
          +
          +cmake -DCMAKE_CXX_FLAGS="-Wno-sign-compare" <...>
          +
        • Set the corresponding environment variables: CFLAGS, @@ -934,10 +901,9 @@ the location, where the deal.II library will be installed when invoking make install to is set with the help of -
          -
          -    CMAKE_INSTALL_PREFIX
          -      
          +
          +CMAKE_INSTALL_PREFIX
          +
          Please note that depending on whether DEAL_II_COMPONENT_COMPAT_FILES is set, there will be @@ -945,52 +911,49 @@
          • With DEAL_II_COMPONENT_COMPAT_FILES=ON: -
            -
            -    ${CMAKE_INSTALL_PREFIX}/
            -        bin
            -        cmake/macros
            -        common
            -        common/scripts
            -        doc
            -        examples
            -        include
            -        lib
            -        lib/cmake/deal.II
            -	  
            +
            +${CMAKE_INSTALL_PREFIX}/
            +    bin
            +    cmake/macros
            +    common
            +    common/scripts
            +    doc
            +    examples
            +    include
            +    lib
            +    lib/cmake/deal.II
            +
          • With DEAL_II_COMPONENT_COMPAT_FILES=OFF: -
            -
            -    ${CMAKE_INSTALL_PREFIX}/
            -        bin
            -        include
            -        lib${LIB_SUFFIX}
            -        lib${LIB_SUFFIX}/cmake/deal.II
            -        share/deal.II/
            -        share/deal.II/cmake/macros
            -        share/deal.II/examples
            -        share/doc/deal.II/html
            -	  
            +
            +${CMAKE_INSTALL_PREFIX}/
            +    bin
            +    include
            +    lib${LIB_SUFFIX}
            +    lib${LIB_SUFFIX}/cmake/deal.II
            +    share/deal.II/
            +    share/deal.II/cmake/macros
            +    share/deal.II/examples
            +    share/doc/deal.II/html
            +

          The default directory structure can be changed by by setting the following variables: -

          -
          -    DEAL_II_CMAKE_MACROS_RELDIR
          -    DEAL_II_COMMON_RELDIR
          -    DEAL_II_DOCHTML_RELDIR
          -    DEAL_II_DOCREADME_RELDIR
          -    DEAL_II_EXAMPLES_RELDIR
          -    DEAL_II_EXECUTABLE_RELDIR
          -    DEAL_II_INCLUDE_RELDIR
          -    DEAL_II_LIBRARY_RELDIR
          -    DEAL_II_PROJECT_CONFIG_RELDIR
          -      
          +
          +DEAL_II_CMAKE_MACROS_RELDIR
          +DEAL_II_COMMON_RELDIR
          +DEAL_II_DOCHTML_RELDIR
          +DEAL_II_DOCREADME_RELDIR
          +DEAL_II_EXAMPLES_RELDIR
          +DEAL_II_EXECUTABLE_RELDIR
          +DEAL_II_INCLUDE_RELDIR
          +DEAL_II_LIBRARY_RELDIR
          +DEAL_II_PROJECT_CONFIG_RELDIR
          +

          @@ -998,10 +961,9 @@

          Initial cache file and advanced options

          A sample configuration file for preloading the CMake cache with -
          -
          -    $ cmake -C Config.sample <...>
          -    
          +
          +$ cmake -C Config.sample <...>
          +
          can be found here. This sample configuration covers all options mentioned in this documentation as well as some advanced aspects in feature @@ -1019,32 +981,29 @@ A common scenario is that you only want to build debug or optimized libraries. This can be achieved using the following commands in the build directory: -
          +
          +make  deal_II.g        # only debug library
          +make  deal_II          # only release (optimized) library
          +make  all              # both
           
          -    make  deal_II.g        # only debug library
          -    make  deal_II          # only release (optimized) library
          -    make  all              # both
          -
          -    make  obj_grid.release # all objects in ./source/grid in release configuration
          -      
          +make obj_grid.release # all objects in ./source/grid in release configuration +

          For a complete list of possible targets that allow even finer-grained control, do -

          -
          -    make  help
          -      
          +
          +make  help
          +

          It is frequently useful to be able to see what a particular command does. In that case, use the following: -

          -
          -    make  deal_II.g VERBOSE=ON
          -      
          +
          +make  deal_II.g VERBOSE=ON
          +
          This will show, for every command executed, the exact command line with which it was invoked, including compiler arguments, etc. Every command cmake executes starts with diff --git a/deal.II/doc/users/cmakelists.html b/deal.II/doc/users/cmakelists.html index 60e5b260f4..19d5686899 100644 --- a/deal.II/doc/users/cmakelists.html +++ b/deal.II/doc/users/cmakelists.html @@ -14,6 +14,16 @@

          How to use CMake to configure your projects with deal.II

          +

          + cmake is controlled by input files that by convention are + called CMakeLists.txt, listing both configuration commands + as well as dependencies between source files and targets. + This page presents some CMakeLists.txt examples for + potential use in your projects. (A detailed description of the + deal.II project configuration is given in the + deal.II CMake ReadMe.) +

          +
          1. Simple CMakeLists.txt @@ -43,26 +53,6 @@
          -

          - cmake is the configuration and build tool we use - in deal.II. Its advantage is not only that it makes - configuration of deal.II itself simpler across - platforms (compared to the older autoconf/make combination) - but also that it exports information about the deal.II - configuration that makes it particularly simple for projects - using deal.II to configure and link against it. -

          - -

          - cmake is controlled by input files that by convention are - called CMakeLists.txt, listing both configuration commands - as well as dependencies between source files and targets. - This page presents some CMakeLists.txt examples for - potential use in your projects. (A detailed description of the - deal.II project configuration is given in the - deal.II CMake ReadMe.) -

          -

          Simple CMakeLists.txt

          @@ -827,21 +817,19 @@ DEAL_II_WITH_ZLIB the deal.II directory tree. The CMake build system sets up the following compatibility files (if DEAL_II_COMPONENT_COMPAT_FILES is set, which is default): -
          -
          -    ${CMAKE_INSTALL_PREFIX}
          -        ./common/Make.global_options
          -        ./common/scripts/expand_instantiations
          -        ./common/scripts/make_dependencies
          -        ./common/scripts/report_features
          -      
          +
          +${CMAKE_INSTALL_PREFIX}/
          +    common/Make.global_options
          +    common/scripts/expand_instantiations
          +    common/scripts/make_dependencies
          +    common/scripts/report_features
          +
          Therefore, it should be sufficient to set D in the old user Makefiles to: -
          -
          -    D=/path/install/dir
          -      
          +
          +D=/path/install/dir
          +
          where /path/install/dir is the directory set up via CMAKE_INSTALL_PREFIX (the path deal.II was installed to). diff --git a/deal.II/doc/users/doxygen.html b/deal.II/doc/users/doxygen.html index 26f102d3ef..3b226823ba 100644 --- a/deal.II/doc/users/doxygen.html +++ b/deal.II/doc/users/doxygen.html @@ -41,10 +41,8 @@
        • Once your deal.tag file is in a location where Doxygen can find it, add the following line to your Doxygen configuration file: -
          -
          +
           TAGFILES = deal.tag=http://www.dealii.org/X.Y.Z/doxygen/deal.II
          -
           
          where X.Y.Z refers to the release number for which you downloaded the tag file. diff --git a/deal.II/doc/users/navbar.html b/deal.II/doc/users/navbar.html index 079a515a9f..8b55b4c263 100644 --- a/deal.II/doc/users/navbar.html +++ b/deal.II/doc/users/navbar.html @@ -43,7 +43,7 @@ Tutorial
          Manual
          Video lectures
          + target="_top">Wolfgang's lectures


          diff --git a/deal.II/doc/users/toc.html b/deal.II/doc/users/toc.html index b9ff5b4ee4..417b838e03 100644 --- a/deal.II/doc/users/toc.html +++ b/deal.II/doc/users/toc.html @@ -12,120 +12,122 @@ - - -

          -
          - This page gathers some information on developing programs based on - deal.II, as well as on how to configure and use - deal.II. At present, we have the following resources - available: -

          - - -

          Documentation

          - -
            - -
          • - deal.II CMake documentation: - This page provides extensive information about configuration and - installation with the CMake build system. - -

          • Using CMake and - deal.II in a user project: - This page covers how to use CMake in your own project. - An overview of how to retrieve necessary information - from a deal.II installation as well as how to - write a CMakeLists.txt for a client project is given. -

            - -
          • Linking your online documentation - to the deal.II online manual: After spending a lot of time - writing good documentation for your code and putting it online, - here we explain how to put links to the deal.II online manual into - your documentation, so that readers can click through. -

            - -
          • Bugs: - Though well tested, deal.II certainly has - bugs. If you want to report a bug (or enhancement request), - go to the bug tracking system and enter a new ticket - for your issue. -

            - -
          - - -

          Tutorials

          - -

          - The tutorial is for new users of the - library. It explains the basic elements of finite element - programs based on the library, and provides small example - programs. You can also reach the tutorial link from the - menu bar at the left. There is also an extensive set of - Youtube-hosted video lectures that provide both the - context of the mathematical and computational methods of - deal.II as well as demonstrate parts of the - tutorial. These video lectures are also reachable from - the menu bar at the left. -

          - -

          - As all other documentation, the HTML pages - of the tutorials can be generated locally on your computer and - can then be read offline. Please follow the - instructions in the - ReadMe on how to - generate them locally. -

          - - -

          Programming interface

          - -

          - The programming - interface/manual pages are what you will need most often as a - reference of all classes, functions and variables in the library. They - are extensively documented (presently more than 5000 pages if - printed), and generated by Doxygen. There is also a quick link to these pages from - the menu bar at the left. -

          - -

          - The documentation uses many of the features of Doxygen. In particular, - the link takes you straight to a page that lists modules, a way - to group classes with similar purposes. This may be what you are probably - interested in when you are not yet familiar with the library. If you - already know your way around and want to look up the signature of a - particular member function, for example, you may go to the class view or - choose any of the other ways in which Doxygen allows you to navigate - through the documentation. -

          - -

          - Just as for the tutorials, the API docs need to be generated first, - if you download deal.II. Please follow the - instructions in the - ReadMe on how to do - this. -

          - -
          -
          - The deal.II Authors - $Date$ -
          -
          - - Valid HTML 4.01! - - Valid CSS! -
          - - + + +

          Information for Users

          + +

          +
          +This page gathers some information on developing programs based on +deal.II, as well as on how to configure and use +deal.II. At present, we have the following resources +available: +

          + + +

          Documentation

          + +
            + +
          • + deal.II CMake documentation: + This page provides extensive information about configuration and + installation with the CMake build system. + +

          • Using CMake and + deal.II in a user project: + This page covers how to use CMake in your own project. + An overview of how to retrieve necessary information + from a deal.II installation as well as how to + write a CMakeLists.txt for a client project is given. +

            + +
          • Linking your online documentation + to the deal.II online manual: After spending a lot of time + writing good documentation for your code and putting it online, + here we explain how to put links to the deal.II online manual into + your documentation, so that readers can click through. +

            + +
          • Bugs: + Though well tested, deal.II certainly has + bugs. If you want to report a bug (or enhancement request), + go to the bug tracking system and enter a new ticket + for your issue. +

            + +
          + + +

          Tutorials

          + +

          + The tutorial is for new users of the + library. It explains the basic elements of finite element + programs based on the library, and provides small example + programs. You can also reach the tutorial link from the + menu bar at the left. There is also an extensive set of + Youtube-hosted video lectures that provide both the + context of the mathematical and computational methods of + deal.II as well as demonstrate parts of the + tutorial. These video lectures are also reachable from + the menu bar at the left. +

          + +

          + As all other documentation, the HTML pages + of the tutorials can be generated locally on your computer and + can then be read offline. Please follow the + instructions in the + ReadMe on how to + generate them locally. +

          + + +

          Programming interface

          + +

          +The programming + interface/manual pages are what you will need most often as a +reference of all classes, functions and variables in the library. They +are extensively documented (presently more than 5000 pages if +printed), and generated by Doxygen. There is also a quick link to these pages from +the menu bar at the left. +

          + +

          +The documentation uses many of the features of Doxygen. In particular, +the link takes you straight to a page that lists modules, a way +to group classes with similar purposes. This may be what you are probably +interested in when you are not yet familiar with the library. If you +already know your way around and want to look up the signature of a +particular member function, for example, you may go to the class view or +choose any of the other ways in which Doxygen allows you to navigate +through the documentation. +

          + +

          +Just as for the tutorials, the API docs need to be generated first, +if you download deal.II. Please follow the +instructions in the +ReadMe on how to do +this. +

          + +
          +
          + The deal.II Authors + $Date$ +
          +
          + + Valid HTML 4.01! + + Valid CSS! +
          + + -- 2.39.5