Skip to content
Snippets Groups Projects
version.hh 5.22 KiB
Newer Older
  • Learn to ignore specific revisions
  • // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
    // vi: set et ts=4 sw=2 sts=2:
    #ifndef DUNE_VERSION_HH
    #define DUNE_VERSION_HH
    
    
    /** \file
     * \brief Various macros to work with %Dune module version numbers
     */
    
    /** \brief Constructs the preprocessor name used in config.h to hold version numbers
    
     *
     * For the DUNE core modules you need to use the following module names:
     *  - DUNE_COMMON for dune-common
     *  - DUNE_GRID for dune-grid
    
     *  - DUNE_GEOMETRY for dune-geometry
    
     *  - DUNE_ISTL for dune-istl
     *  - DUNE_LOCALFUNCTIONS for dune-localfunctions
     *
     * For external DUNE modules, you should capitalize the name and
     * replace '-' by underscores. For example for the module foo-bar you
     * need to use FOO_BAR as module name in the context of this macro.
     *
    
     * \param module The name of the Dune module
     * \param type The version number type, one of MAJOR, MINOR, or REVISION
     */
    
    #define DUNE_VERSION_JOIN(module,type) module ## _VERSION_ ## type
    
    /**
     * \brief True if 'module' has the version major.minor
     *
     * For the DUNE core modules you need to use the following module names:
     *  - DUNE_COMMON for dune-common
     *  - DUNE_GRID for dune-grid
    
     *  - DUNE_GEOMETRY for dune-geometry
    
     *  - DUNE_ISTL for dune-istl
     *  - DUNE_LOCALFUNCTIONS for dune-localfunctions
     *
     * For external DUNE modules, you should capitalize the name and
     * replace '-' by underscores. For example for the module foo-bar you
     * need to use FOO_BAR as module name in the context of this macro.
     */
    
    #define DUNE_VERSION_EQUAL(module,major,minor) \
      ((DUNE_VERSION_JOIN(module,MAJOR) == major) && \
       (DUNE_VERSION_JOIN(module,MINOR) == minor))
    
    
    /**
     * \brief True if 'module' has the version major.minor.revision
     *
     * For the DUNE core modules you need to use the following module names:
     *  - DUNE_COMMON for dune-common
     *  - DUNE_GRID for dune-grid
    
     *  - DUNE_GEOMETRY for dune-geometry
    
     *  - DUNE_ISTL for dune-istl
     *  - DUNE_LOCALFUNCTIONS for dune-localfunctions
     *
     * For external DUNE modules, you should capitalize the name and
     * replace '-' by underscores. For example for the module foo-bar you
     * need to use FOO_BAR as module name in the context of this macro.
     */
    
    #define DUNE_VERSION_EQUAL_REV(module,major,minor,revision) \
      ( DUNE_VERSION_EQUAL(module,major,minor) && \
        (DUNE_VERSION_JOIN(module,REVISION) == revision))
    
    
    /**
     * \brief True if 'module' has the version major.minor or newer
     *
     * For the DUNE core modules you need to use the following module names:
     *  - DUNE_COMMON for dune-common
     *  - DUNE_GRID for dune-grid
    
     *  - DUNE_GEOMETRY for dune-geometry
    
     *  - DUNE_ISTL for dune-istl
     *  - DUNE_LOCALFUNCTIONS for dune-localfunctions
     *
     * For external DUNE modules, you should capitalize the name and
     * replace '-' by underscores. For example for the module foo-bar you
     * need to use FOO_BAR as module name in the context of this macro.
     */
    
    #define DUNE_VERSION_NEWER(module,major,minor) \
    
      ((DUNE_VERSION_JOIN(module,MAJOR) > major) \
       || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) >= minor)))
    
    
    /**
     * \brief True if 'module' has the version major.minor.revision or newer
     *
     * For the DUNE core modules you need to use the following module names:
     *  - DUNE_COMMON for dune-common
     *  - DUNE_GRID for dune-grid
    
     *  - DUNE_GEOMETRY for dune-geometry
    
     *  - DUNE_ISTL for dune-istl
     *  - DUNE_LOCALFUNCTIONS for dune-localfunctions
     *
     * For external DUNE modules, you should capitalize the name and
     * replace '-' by underscores. For example for the module foo-bar you
     * need to use FOO_BAR as module name in the context of this macro.
     */
    
    #define DUNE_VERSION_NEWER_REV(module,major,minor,revision) \
      ((DUNE_VERSION_JOIN(module,MAJOR) > major) \
       || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) > minor)) \
       || ((DUNE_VERSION_JOIN(module,MAJOR) == major) && (DUNE_VERSION_JOIN(module,MINOR) == minor) \
           && (DUNE_VERSION_JOIN(module,REVISION) >= revision)))
    
    
    /**
     * \brief Compute a unique uint id from the major, minor, and revision numbers
     *
     * For the DUNE core modules you need to use the following module names:
     *  - DUNE_COMMON for dune-common
     *  - DUNE_GRID for dune-grid
    
     *  - DUNE_GEOMETRY for dune-geometry
    
     *  - DUNE_ISTL for dune-istl
     *  - DUNE_LOCALFUNCTIONS for dune-localfunctions
     *
     * For external DUNE modules, you should capitalize the name and
     * replace '-' by underscores. For example for the module foo-bar you
     * need to use FOO_BAR as module name in the context of this macro.
     */
    
    #define DUNE_VERSION_ID(major,minor,revision) \
      ((unsigned int)((major << 24) + (minor << 16) + revision))
    
    
    /**
     * \brief Compute a unique uint id for the given module
     *
     * For the DUNE core modules you need to use the following module names:
     *  - DUNE_COMMON for dune-common
     *  - DUNE_GRID for dune-grid
    
     *  - DUNE_GEOMETRY for dune-geometry
    
     *  - DUNE_ISTL for dune-istl
     *  - DUNE_LOCALFUNCTIONS for dune-localfunctions
     *
     * For external DUNE modules, you should capitalize the name and
     * replace '-' by underscores. For example for the module foo-bar you
     * need to use FOO_BAR as module name in the context of this macro.
     */
    
    #define DUNE_MODULE_VERSION_ID(module) \
      DUNE_VERSION_ID( DUNE_VERSION_JOIN(module,MAJOR), DUNE_VERSION_JOIN(module,MINOR), DUNE_VERSION_JOIN(module,REVISION) )