From 696fb5ada9b658fc5a8d998f7b0dd3cec35c563b Mon Sep 17 00:00:00 2001 From: acrovato <a.crovato@uliege.be> Date: Fri, 26 Jun 2020 14:59:17 +0200 Subject: [PATCH] Basic setup and dummy test --- .editorconfig | 8 + .gitignore | 45 + .gitlab-ci.yml | 49 + CMake/FindEIGEN.cmake | 78 ++ CMake/FindTBB.cmake | 277 +++++ CMake/fpmMacros.cmake | 41 + CMakeLists.txt | 124 ++ Doxyfile.in | 2487 +++++++++++++++++++++++++++++++++++++++ LICENSE | 504 ++++++++ README.md | 9 + dox/img.png | Bin 0 -> 154189 bytes dox/logo.jpg | Bin 0 -> 10837 bytes fpm/CMakeLists.txt | 23 + fpm/__init__.py | 8 + fpm/_src/CMakeLists.txt | 44 + fpm/_src/fpmw.h | 17 + fpm/_src/fpmw.i | 69 ++ fpm/_src/fpmw.swg | 80 ++ fpm/src/CMakeLists.txt | 36 + fpm/src/fObject.cpp | 45 + fpm/src/fObject.h | 75 ++ fpm/src/fpm.h | 54 + fpm/tests/basic.py | 32 + run_fpm.py | 26 + 24 files changed, 4131 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 CMake/FindEIGEN.cmake create mode 100644 CMake/FindTBB.cmake create mode 100644 CMake/fpmMacros.cmake create mode 100644 CMakeLists.txt create mode 100644 Doxyfile.in create mode 100644 LICENSE create mode 100644 dox/img.png create mode 100644 dox/logo.jpg create mode 100644 fpm/CMakeLists.txt create mode 100644 fpm/__init__.py create mode 100644 fpm/_src/CMakeLists.txt create mode 100644 fpm/_src/fpmw.h create mode 100644 fpm/_src/fpmw.i create mode 100644 fpm/_src/fpmw.swg create mode 100644 fpm/src/CMakeLists.txt create mode 100644 fpm/src/fObject.cpp create mode 100644 fpm/src/fObject.h create mode 100644 fpm/src/fpm.h create mode 100644 fpm/tests/basic.py create mode 100755 run_fpm.py diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..de6044b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +# EditorConfig is awesome: https://EditorConfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a82686 --- /dev/null +++ b/.gitignore @@ -0,0 +1,45 @@ +# Compiled Object files +*.slo +*.lo +*.o + +# Compiled Dynamic libraries +*.so +*.dylib + +# Compiled Static libraries +*.lai +*.la +*.a + +# Misc +core +*.pyc +*.*~ + +# OS +.DS_Store +*.swp +*.bak + +# Workspace +workspace +workspace.tar.gz +*.tar.gz +*.tgz + +# build dir +build + +# Gmsh +*.pos +*.msh # do not commit the mesh... +!*_lfs.msh # ... except in the lfs +#*.opt + +# IDE +.project +.pydevproject +.settings +.vscode +.vscode/* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..6e1c814 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,49 @@ +# gitlab-ci file for fpm + +default: + image: rboman/waves-py3:2020.1 + before_script: + - source /opt/intel/mkl/bin/mklvars.sh intel64 + - source /opt/intel/tbb/bin/tbbvars.sh intel64 + +stages: + - build + - test + +build: + image: rboman/waves-py3:2020.1 + stage: build + script: + - printenv | sort + - rm -rf build workspace + - mkdir build + - cd build + - cmake -Wno-dev .. + - make -j $(nproc) + artifacts: + paths: + - build/ + expire_in: 1 hour + +doxygen: + stage: test + script: + - cd build + - make dox + artifacts: + paths: + - build/doxygen/ + expire_in: 1 day + dependencies: + - build + +ctest-py3: + image: rboman/waves-py3:2020.1 + stage: test + script: + - cd build + - ctest -j $(nproc) --output-on-failure #--verbose + #timeout: 10 hours # will be available in 12.3 + dependencies: + - build + diff --git a/CMake/FindEIGEN.cmake b/CMake/FindEIGEN.cmake new file mode 100644 index 0000000..6ac879e --- /dev/null +++ b/CMake/FindEIGEN.cmake @@ -0,0 +1,78 @@ +# Copyright 2020 University of Liège +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# FindEIGEN.cmake - try to find Eigen 3 headers +# The logic that checks the version comes from FindEigen3.cmake (source dir) +# ---------------------------------------------------------------------------- +# output: +# EIGEN_FOUND : TRUE/FALSE +# EIGEN_INCLUDE_DIRS : where the Eigen/*.h are [cached] +# EIGEN_VERSION : version number of Eigen +# ---------------------------------------------------------------------------- +# autodetection: +# utiliser "CMAKE_PREFIX_PATH=c:\local" +# ou "CMAKE_INCLUDE_PATH=c:\local\include" +# ou "INCLUDE=c:\local\include" +# ---------------------------------------------------------------------------- + +# Check version (only for Eigen 3) +macro(_eigen3_check_version) + file(READ "${EIGEN_INCLUDE_DIRS}/Eigen/src/Core/util/Macros.h" _eigen3_version_header) + + string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}") + set(EIGEN_WORLD_VERSION "${CMAKE_MATCH_1}") + string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}") + set(EIGEN_MAJOR_VERSION "${CMAKE_MATCH_1}") + string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}") + set(EIGEN_MINOR_VERSION "${CMAKE_MATCH_1}") + + set(EIGEN_VERSION ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION}) + + if(${EIGEN_VERSION} VERSION_LESS ${EIGEN_FIND_VERSION}) + message(FATAL_ERROR "Eigen version ${EIGEN_VERSION} found in ${EIGEN_INCLUDE_DIRS}, but at least version ${EIGEN_FIND_VERSION} is required!") + endif() +endmacro() + +# Set a dummy version if not provided +if(NOT EIGEN_FIND_VERSION) + if(NOT EIGEN_FIND_VERSION_MAJOR) + set(EIGEN_FIND_VERSION_MAJOR 3) + endif() + if(NOT EIGEN_FIND_VERSION_MINOR) + set(EIGEN_FIND_VERSION_MINOR 3) + endif() + if(NOT EIGEN_FIND_VERSION_PATCH) + set(EIGEN_FIND_VERSION_PATCH 4) + endif() + + set(EIGEN_FIND_VERSION "${EIGEN_FIND_VERSION_MAJOR}.${EIGEN_FIND_VERSION_MINOR}.${EIGEN_FIND_VERSION_PATCH}") +endif() + +# Find the header and check the version +find_path(EIGEN_INCLUDE_DIRS "Eigen/Dense" PATHS "/usr/include/eigen3") +if (EIGEN_INCLUDE_DIRS) + _eigen3_check_version() +else() + message(FATAL_ERROR "Eigen3 headers not found! Define the path in the INCLUDE environment variable.") +endif() + +# handle the QUIETLY and REQUIRED arguments and set EIGEN_FOUND to TRUE +# if all listed variables are TRUE +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(EIGEN + FOUND_VAR EIGEN_FOUND + REQUIRED_VARS EIGEN_INCLUDE_DIRS + VERSION_VAR EIGEN_VERSION) + +#MESSAGE(STATUS "EIGEN_FOUND = ${EIGEN_FOUND}") diff --git a/CMake/FindTBB.cmake b/CMake/FindTBB.cmake new file mode 100644 index 0000000..bbe3a4f --- /dev/null +++ b/CMake/FindTBB.cmake @@ -0,0 +1,277 @@ +# Copyright 2020 University of Liège +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# FindTBB.cmake - try to find Intel Threading Building Blocks libraries +# (RoBo) +# ---------------------------------------------------------------------------- +# input: +# ENABLE_TBBMALLOC : ON/OFF +# output: +# TBB_FOUND : TRUE/FALSE +# TBB_LIBRARIES : list of tbb libraries to link with +# TBB_LIB_PATH : where the optimized .so/.lib are [cached] +# TBB_LIB_PATH_DEBUG : where the debug .so/.lib are [cached] +# TBB_INCLUDE_DIRS : where the tbb/*.h are [cached] +# TBB_VERSION_INTERFACE : +# TBB_VERSION_MAJOR : +# TBB_VERSION_MINOR : +# TBB_VERSION_STRING : version such as "4.2" +# TBB_CXX_FLAGS_DEBUG : to be added to +# ---------------------------------------------------------------------------- +# todo: +# TBB_DEFINITIONS ? (args suppl en debug) +# +# autodetection: +# succeeds if tbb.dll/tbb_debug.dll are in the PATH/LD_LIBRARY_PATH +# otherwise, you may set TBB_LIB_PATH, TBB_LIB_PATH_DEBUG manually +# +# main advantage: +# the link will be always performed with the library corresponding +# to dynamic lib the PATH +# => avoids problem when 2 sets of libs are installed in the system +# +# remarks: +# $ENV{TBBROOT} is *not* used here because it is rather difficult +# to guess the wanted target architecture +# +# tested on: +# win7-msvc + official tbb binaries +# winxp-mingw32 + tbb compiled from src +# linux + installed parallel studio +# +# memo: +# http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries#Writing_find_modules +# ---------------------------------------------------------------------------- + +set (_VERB 0) # set to 1 for debugging + +OPTION(ENABLE_TBBMALLOC "Use TBBMALLOC" OFF) + +IF(_VERB) # Debug + MESSAGE(STATUS "-------------------------------------") + MESSAGE(STATUS " FindTBB") + MESSAGE(STATUS "-------------------------------------") + + MESSAGE(STATUS "CMAKE_SHARED_LIBRARY_SUFFIX=${CMAKE_SHARED_LIBRARY_SUFFIX}") + MESSAGE(STATUS "CMAKE_SHARED_MODULE_SUFFIX=${CMAKE_SHARED_MODULE_SUFFIX}") + MESSAGE(STATUS "CMAKE_FIND_LIBRARY_SUFFIX=${CMAKE_FIND_LIBRARY_SUFFIX}") + MESSAGE(STATUS "TBB_FIND_REQUIRED=${TBB_FIND_REQUIRED}") # automatiquement à 1 si REQUIRED + MESSAGE(STATUS "TBB_USE_TBBMALLOC=${TBB_USE_TBBMALLOC}") + MESSAGE(STATUS "WIN32=${WIN32}") + MESSAGE(STATUS "MSVC=${MSVC}") + MESSAGE(STATUS "MINGW=${MINGW}") + MESSAGE(STATUS "TBBROOT=$ENV{TBBROOT}") +ENDIF() + +SET(TBB_CXX_FLAGS_DEBUG "-DTBB_USE_THREADING_TOOLS=1 -DTBB_USE_DEBUG=1") + +# --- List of libraries to be found --- + +set(_TBB_TBBLIB_NAME "tbb") +set(_TBB_PROXYLIB_NAME "tbbmalloc_proxy") +set(_TBB_MALLOCLIB_NAME "tbbmalloc") + +set(_TBB_LIBSET1 ${_TBB_TBBLIB_NAME}) +set(_TBB_LIBSET2 ${_TBB_PROXYLIB_NAME} ${_TBB_MALLOCLIB_NAME}) + +# ---------------------------------------------------------------------------- +# --- TBB_LIB_PATH --- +# ---------------------------------------------------------------------------- +# method: +# - look for the dynamic lib in the PATH/LD_LIBRARY_PATH +# on linux or win/mingw; this path is correct +# - on win/msvc, replace "bin" => "lib" in the path previously found + +SET(_TBB_LIB_PATH ${TBB_LIB_PATH}) # copy cached value +IF(NOT _TBB_LIB_PATH) # work on copy + # try to find "(lib)tbb.dll/so" from the env variables + IF(MSVC) + find_file(_TBB_TBBDLL "tbb.dll" PATHS "$ENV{TBBROOT}/lib/$ENV{TBB_ARCH_PLATFORM}" ) + ELSEIF(APPLE) + find_library(_TBB_TBBDLL "tbb" PATHS "" ENV DYLD_LIBRARY_PATH) + ELSE() + find_library(_TBB_TBBDLL "tbb" PATHS "" ENV LD_LIBRARY_PATH) + ENDIF() + #MESSAGE(STATUS "_TBB_TBBDLL=${_TBB_TBBDLL}") + IF(_TBB_TBBDLL) + get_filename_component(_TBB_DLL_PATH ${_TBB_TBBDLL} PATH CACHE) + unset(_TBB_TBBDLL CACHE) + + IF(MSVC) + STRING(REPLACE "/bin/" "/lib/" _TBB_LIB_PATH ${_TBB_DLL_PATH}) + ELSE() + SET(_TBB_LIB_PATH ${_TBB_DLL_PATH}) + ENDIF() + unset(_TBB_DLL_PATH CACHE) + #MESSAGE(STATUS "_TBB_LIB_PATH=${_TBB_LIB_PATH}") + ELSE() + MESSAGE(WARNING "!!!!!!!! ${CMAKE_SHARED_LIBRARY_PREFIX}${_TBB_TBBLIB_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX} should be in PATH/LD_LIBRARY_PATH !!!!!!!!!") + ENDIF() + unset(_TBB_TBBDLL CACHE) +ENDIF() +IF(NOT TBB_LIB_PATH) # set cache if needed + SET(TBB_LIB_PATH "${_TBB_LIB_PATH}" CACHE PATH "where the optimized .so/.lib are" FORCE) +ENDIF() + +# ---------------------------------------------------------------------------- +# --- TBB_LIB_PATH_DEBUG --- +# ---------------------------------------------------------------------------- +# same method for debug libs + +SET(_TBB_LIB_PATH_DEBUG ${TBB_LIB_PATH_DEBUG}) # copy cached value +IF(NOT _TBB_LIB_PATH_DEBUG) # work on copy + # try to find "(lib)tbb_debug.dll/so" from the env variables + IF(MSVC) + find_file(_TBB_TBBDLL_DEBUG "tbb_debug.dll" "tbb.dll" PATHS "$ENV{TBBROOT}/lib/$ENV{TBB_ARCH_PLATFORM}" ) + ELSEIF(APPLE) + find_library(_TBB_TBBDLL_DEBUG "tbb_debug" "tbb" PATHS "" ENV DYLD_LIBRARY_PATH) + ELSE() + find_library(_TBB_TBBDLL_DEBUG "tbb_debug" "tbb" PATHS "" ENV LD_LIBRARY_PATH) + ENDIF() + #MESSAGE(STATUS "_TBB_TBBDLL_DEBUG=${_TBB_TBBDLL_DEBUG}") + IF(_TBB_TBBDLL_DEBUG) + get_filename_component(_TBB_DLL_PATH_DEBUG ${_TBB_TBBDLL_DEBUG} PATH CACHE) + unset(_TBB_TBBDLL_DEBUG CACHE) + + IF(MSVC) + STRING(REPLACE "/bin/" "/lib/" _TBB_LIB_PATH_DEBUG ${_TBB_DLL_PATH_DEBUG}) + ELSE() + SET(_TBB_LIB_PATH_DEBUG ${_TBB_DLL_PATH_DEBUG}) + ENDIF() + unset(_TBB_DLL_PATH_DEBUG CACHE) + #MESSAGE(STATUS "_TBB_LIB_PATH_DEBUG=${_TBB_LIB_PATH_DEBUG}") + ELSE() + MESSAGE(WARNING "!!!!!!!! ${CMAKE_SHARED_LIBRARY_PREFIX}${_TBB_TBBLIB_NAME}_debug${CMAKE_SHARED_LIBRARY_SUFFIX} should be in PATH/LD_LIBRARY_PATH !!!!!!!!!") + ENDIF() + unset(_TBB_TBBDLL_DEBUG CACHE) +ENDIF() +IF(NOT TBB_LIB_PATH_DEBUG) # set cache if needed + SET(TBB_LIB_PATH_DEBUG ${_TBB_LIB_PATH_DEBUG} CACHE PATH "where the debug .so/.lib are" FORCE) +ENDIF() + +# ---------------------------------------------------------------------------- +# TBB_LIBRARIES: search full path of all libraries +# ---------------------------------------------------------------------------- + +macro(resolveLibs VARNAME LISTNAME) + foreach(LIB ${${LISTNAME}}) + # look for optimized version + find_library(FOUND_LIB ${LIB} PATHS ${TBB_LIB_PATH} "$ENV{TBBROOT}/lib/$ENV{TBB_ARCH_PLATFORM}") + #MESSAGE(STATUS "FOUND_LIB=${FOUND_LIB}") + if(FOUND_LIB) + list(APPEND ${VARNAME} "optimized" ${FOUND_LIB}) + endif() + unset(FOUND_LIB CACHE) + # look for debug version + find_library(FOUND_LIB ${LIB}_debug PATHS ${TBB_LIB_PATH_DEBUG} "$ENV{TBBROOT}/lib/$ENV{TBB_ARCH_PLATFORM}") + #MESSAGE(STATUS "FOUND_LIB=${FOUND_LIB}") + if(FOUND_LIB) + list(APPEND ${VARNAME} "debug" ${FOUND_LIB}) + endif() + unset(FOUND_LIB CACHE) + endforeach() +endmacro() + +# search for all libs +IF( TBB_LIB_PATH AND TBB_LIB_PATH_DEBUG) + resolveLibs(_TBB_LIBSET1_DIRS _TBB_LIBSET1) + resolveLibs(_TBB_LIBSET2_DIRS _TBB_LIBSET2) +ENDIF() + +# build full list of libs +set(TBB_LIBRARIES ${_TBB_LIBSET1_DIRS}) +IF(ENABLE_TBBMALLOC) + LIST(APPEND TBB_LIBRARIES ${_TBB_LIBSET2_DIRS} ) +ENDIF() + +# print for debug +IF(_VERB) + foreach(LIB ${TBB_LIBRARIES}) + MESSAGE(STATUS "lib=${LIB}") + endforeach() +ENDIF() + +# ---------------------------------------------------------------------------- +# TBB_INCLUDE_DIRS: search include dir +# ---------------------------------------------------------------------------- + +SET(_TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIRS}) +IF( (NOT _TBB_INCLUDE_DIRS) AND (TBB_LIB_PATH)) + SET(_VAR1 ${TBB_LIB_PATH}) + SET(_BASENAME ${_VAR1}) + SET(_TBB_TBBROOT "_TBB_TBBROOT-NOTFOUND") + WHILE( (NOT _TBB_TBBROOT) AND (_BASENAME) ) + get_filename_component(_DIRNAME ${_VAR1} PATH) + #MESSAGE(STATUS "_DIRNAME=${_DIRNAME}") + get_filename_component(_BASENAME ${_VAR1} NAME) + #MESSAGE(STATUS "_BASENAME=${_BASENAME}") # on remonte jusqu'à un "lib" ou "build" + + IF( ("${_BASENAME}" STREQUAL "lib") OR ("${_BASENAME}" STREQUAL "build") OR ("${_BASENAME}" STREQUAL "bin") ) + SET(_TBB_TBBROOT ${_DIRNAME}) + ELSE() + SET(_VAR1 ${_DIRNAME}) + ENDIF() + ENDWHILE() + #MESSAGE(STATUS "_TBB_TBBROOT=${_TBB_TBBROOT}") + + FIND_PATH(_TBB_INCLUDE_DIRS + NAMES tbb/parallel_for.h + PATHS "${_TBB_TBBROOT}" "$ENV{TBBROOT}" + PATH_SUFFIXES include + ) + #MESSAGE(STATUS "_TBB_INCLUDE_DIRS=${_TBB_INCLUDE_DIRS}") +ENDIF() +IF(NOT TBB_INCLUDE_DIRS) # set cache if needed + SET(TBB_INCLUDE_DIRS ${_TBB_INCLUDE_DIRS} CACHE PATH "where the tbb/*.h are" FORCE) +ENDIF() +unset(_TBB_INCLUDE_DIRS CACHE) + +# ---------------------------------------------------------------------------- +# Versions +# ---------------------------------------------------------------------------- + +SET(_TBB_VERSION_INTERFACE ${TBB_VERSION_INTERFACE}) +IF( (NOT TBB_VERSION_INTERFACE) AND TBB_INCLUDE_DIRS ) + FILE(READ "${TBB_INCLUDE_DIRS}/tbb/tbb_stddef.h" _FILE) + set(_TBB_VERSION_MAJOR 0) + set(_TBB_VERSION_MINOR 0) + STRING(REGEX REPLACE ".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1" _TBB_VERSION_INTERFACE "${_FILE}") + STRING(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1" _TBB_VERSION_MAJOR "${_FILE}") + STRING(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1" _TBB_VERSION_MINOR "${_FILE}") + set(_TBB_VERSION_STRING "${_TBB_VERSION_MAJOR}.${_TBB_VERSION_MINOR}") + unset(_FILE) +ENDIF() +IF(NOT TBB_VERSION_INTERFACE) + SET(TBB_VERSION_INTERFACE ${_TBB_VERSION_INTERFACE} CACHE STRING "" FORCE) + SET(TBB_VERSION_MAJOR ${_TBB_VERSION_MAJOR} CACHE INTERNAL "" FORCE) + SET(TBB_VERSION_MINOR ${_TBB_VERSION_MINOR} CACHE INTERNAL "" FORCE) + SET(TBB_VERSION_STRING ${_TBB_VERSION_STRING} CACHE STRING "" FORCE) + mark_as_advanced(TBB_VERSION_INTERFACE) + mark_as_advanced(TBB_VERSION_MAJOR) + mark_as_advanced(TBB_VERSION_MINOR) + mark_as_advanced(TBB_VERSION_STRING) +ENDIF() +# ---------------------------------------------------------------------------- + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set TBB_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(TBB DEFAULT_MSG + TBB_LIBRARIES TBB_INCLUDE_DIRS + TBB_LIB_PATH TBB_LIB_PATH_DEBUG) + +#MESSAGE(STATUS "TBB_FOUND = ${TBB_FOUND}") +# ---------------------------------------------------------------------------- + +unset(_VERB) diff --git a/CMake/fpmMacros.cmake b/CMake/fpmMacros.cmake new file mode 100644 index 0000000..53075b9 --- /dev/null +++ b/CMake/fpmMacros.cmake @@ -0,0 +1,41 @@ +# Copyright 2020 University of Liège +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# useful macros/fcts + +MACRO(MACRO_AddTest srcDir) + FILE(GLOB tfiles RELATIVE ${srcDir} ${srcDir}/*) + FOREACH(tfile ${tfiles}) + SET(spath ${srcDir}/${tfile}) + IF(NOT IS_DIRECTORY ${spath} AND + ${spath} MATCHES ".+\\.py$" AND + NOT ${tfile} STREQUAL "__init__.py") + STRING(REPLACE "${PROJECT_SOURCE_DIR}/" "" strip ${spath}) + MESSAGE(STATUS "Adding test ${strip}") + ADD_TEST(NAME ${strip} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + COMMAND ${PYTHON_EXECUTABLE} run_fpm.py --nogui --clean ${strip}) + ELSE() + MACRO_AddTest(${srcDir}/${tfile}) + ENDIF() + ENDFOREACH() +ENDMACRO() + + +MACRO(MACRO_DebugPostfix libname) + IF(MSVC) + SET_TARGET_PROPERTIES(${libname} PROPERTIES DEBUG_POSTFIX "_d") + ENDIF(MSVC) +ENDMACRO() + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..9df63d9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,124 @@ +# Copyright 2020 University of Liège +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ---------------------------------------------------------------------------- +PROJECT(fpm) +# ---------------------------------------------------------------------------- +CMAKE_MINIMUM_REQUIRED(VERSION 3.1) +IF(${CMAKE_VERSION} VERSION_GREATER "3.14.0") # we might want to update the project and use the NEW behavior here + cmake_policy(SET CMP0078 OLD) + cmake_policy(SET CMP0086 OLD) +ENDIF() + +SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH + "Single output directory for building all libraries.") +SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH + "Single output directory for building all executables.") +MARK_AS_ADVANCED(LIBRARY_OUTPUT_PATH EXECUTABLE_OUTPUT_PATH) + +IF(NOT CMAKE_BUILD_TYPE) + SET( CMAKE_BUILD_TYPE "Release" CACHE STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." + FORCE) +ENDIF(NOT CMAKE_BUILD_TYPE) +MESSAGE(STATUS "Build type: ${CMAKE_BUILD_TYPE}") + +LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake") + +# -- GENERAL OPTIONS + +# print OS +MESSAGE(STATUS "CMAKE_SYSTEM_NAME=\"${CMAKE_SYSTEM_NAME}\"") +MESSAGE(STATUS "CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}") + +# -- macros/fcts +INCLUDE(fpmMacros) + +# -- C++11 +SET(CMAKE_CXX_STANDARD 11) # newer way to set C++11 (requires cmake>=3.1) +SET(CMAKE_CXX_STANDARD_REQUIRED ON) + +# Set specific compiler flags +IF((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Intel")) + IF(NOT APPLE) + SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-as-needed") + ENDIF() + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") # add verbosity + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -Wno-unknown-pragmas -Wno-sign-compare") # merge trilinos +ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE) + ADD_DEFINITIONS(-D_USE_MATH_DEFINES) # otherwise M_PI is undefined + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") # parallel build with MSVC + #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") # add verbosity +ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-register") + #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weverything") # add verbosity +ENDIF() + +# -- Search for Python +IF (CMAKE_VERSION VERSION_LESS 3.12.0) + FIND_PACKAGE(PythonInterp 3.6 REQUIRED) + FIND_PACKAGE(PythonLibs 3.6 REQUIRED) +ELSE() + find_package (Python3 COMPONENTS Interpreter Development) + # use Python3_ROOT_DIR if wrong python found (e.g. anaconda) + SET(PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) + SET(PYTHON_LIBRARIES ${Python3_LIBRARIES}) + SET(PYTHON_INCLUDE_PATH ${Python3_INCLUDE_DIRS}) + SET(PYTHONLIBS_VERSION_STRING ${Python3_VERSION}) +ENDIF() +MESSAGE(STATUS "PYTHON_EXECUTABLE:FILEPATH=${PYTHON_EXECUTABLE}") +MESSAGE(STATUS "PYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY}") +MESSAGE(STATUS "PYTHON_INCLUDE_DIR:FILEPATH=${PYTHON_INCLUDE_DIR}") +MESSAGE(STATUS "PYTHON_FRAMEWORK_INCLUDES=${PYTHON_FRAMEWORK_INCLUDES}") +MESSAGE(STATUS "PYTHONLIBS_VERSION_STRING=${PYTHONLIBS_VERSION_STRING}") +MESSAGE(STATUS "Python_FRAMEWORKS=${Python_FRAMEWORKS}") + +# -- Search for SWIG +FIND_PACKAGE(SWIG REQUIRED) +IF(CMAKE_GENERATOR MATCHES "Visual Studio") # not MSVC because of nmake & jom + SET(CMAKE_SWIG_OUTDIR "${EXECUTABLE_OUTPUT_PATH}/$(Configuration)/") +ELSE() + SET(CMAKE_SWIG_OUTDIR "${EXECUTABLE_OUTPUT_PATH}") +ENDIF() + +# -- Doxygen (https://vicrucann.github.io/tutorials/quick-cmake-doxygen/) +# check if Doxygen is installed +FIND_PACKAGE(Doxygen) +IF(DOXYGEN_FOUND) + # set input and output files + SET(DOXYGEN_IN ${PROJECT_SOURCE_DIR}/Doxyfile.in) + SET(DOXYGEN_OUT ${PROJECT_BINARY_DIR}/Doxyfile) + + # request to configure the file + CONFIGURE_FILE(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY) + #message("Doxygen build started") + + # note the option ALL which allows to build the docs together with the application + # "make dox" rebuilds the doc + ADD_CUSTOM_TARGET( dox #ALL + COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating API documentation with Doxygen" + VERBATIM ) +ELSE() + MESSAGE("Doxygen need to be installed to generate the doxygen documentation") +ENDIF() + +# -- CTest +ENABLE_TESTING() + +# -- Modules +ADD_SUBDIRECTORY( fpm ) + diff --git a/Doxyfile.in b/Doxyfile.in new file mode 100644 index 0000000..ac19f6e --- /dev/null +++ b/Doxyfile.in @@ -0,0 +1,2487 @@ +# Doxyfile 1.8.11 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = fpm + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "Field panel method" + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = @PROJECT_SOURCE_DIR@/dox/logo.jpg + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = @PROJECT_BINARY_DIR@/doxygen + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if <section_label> ... \endif and \cond <section_label> +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = @PROJECT_SOURCE_DIR@/README.md \ + @PROJECT_SOURCE_DIR@/src + + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl, +# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js. + +FILE_PATTERNS = *.c \ + *.cpp \ + *.h \ + *.hpp \ + *.md + +#FILE_PATTERNS = *.c \ +# *.cc \ +# *.cxx \ +# *.cpp \ +# *.c++ \ +# *.java \ +# *.ii \ +# *.ixx \ +# *.ipp \ +# *.i++ \ +# *.inl \ +# *.idl \ +# *.ddl \ +# *.odl \ +# *.h \ +# *.hh \ +# *.hxx \ +# *.hpp \ +# *.h++ \ +# *.cs \ +# *.d \ +# *.php \ +# *.php4 \ +# *.php5 \ +# *.phtml \ +# *.inc \ +# *.m \ +# *.markdown \ +# *.md \ +# *.mm \ +# *.dox \ +# *.py \ +# *.pyw \ +# *.f90 \ +# *.f \ +# *.for \ +# *.tcl \ +# *.vhd \ +# *.vhdl \ +# *.ucf \ +# *.qsf \ +# *.as \ +# *.js + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = @PROJECT_SOURCE_DIR@/dox/ + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# <filter> <input-file> +# +# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = README.md + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse-libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = NO + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = YES + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use <access key> + S +# (what the <access key> is depends on the OS and browser, but it is typically +# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down +# key> to jump into the search results window, the results can be navigated +# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel +# the search. The filter options can be selected when the cursor is inside the +# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> +# to select a filter and <Enter> or <escape> to activate or cancel the filter +# option. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a web server instead of a web client using Javascript. There +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SERVER_BASED_SEARCH = NO + +# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP +# script for searching. Instead the search results are written to an XML file +# which needs to be processed by an external indexer. Doxygen will invoke an +# external search engine pointed to by the SEARCHENGINE_URL option to obtain the +# search results. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). +# +# See the section "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH = NO + +# The SEARCHENGINE_URL should point to a search engine hosted by a web server +# which will return the search results when EXTERNAL_SEARCH is enabled. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). See the section "External Indexing and +# Searching" for details. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHENGINE_URL = + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed +# search data is written to a file for indexing by an external tool. With the +# SEARCHDATA_FILE tag the name of this file can be specified. +# The default file is: searchdata.xml. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHDATA_FILE = searchdata.xml + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the +# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is +# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple +# projects and redirect the results back to the right project. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH_ID = + +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# projects other than the one defined by this configuration file, but that are +# all added to the same external search index. Each project needs to have a +# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of +# to a relative location where the documentation can be found. The format is: +# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTRA_SEARCH_MAPPINGS = + +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. +# The default value is: YES. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. +# +# Note that when enabling USE_PDFLATEX this option is only used for generating +# bitmaps for formulas in the HTML output, but not in the Makefile that is +# written to the output directory. +# The default file is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate +# index for LaTeX. +# The default file is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used by the +# printer. +# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x +# 14 inches) and executive (7.25 x 10.5 inches). +# The default value is: a4. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} +# If left blank no extra packages will be included. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +EXTRA_PACKAGES = amsmath + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the +# generated LaTeX document. The header should contain everything until the first +# chapter. If it is left blank doxygen will generate a standard header. See +# section "Doxygen usage" for information on how to let doxygen write the +# default header to a separate file. +# +# Note: Only use a user-defined header if you know what you are doing! The +# following commands have a special meaning inside the header: $title, +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty +# string, for the replacement values of the other commands the user is referred +# to HTML_HEADER. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the +# generated LaTeX document. The footer should contain everything after the last +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. +# +# Note: Only use a user-defined footer if you know what you are doing! +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_FOOTER = + +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# LaTeX style sheets that are included after the standard style sheets created +# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_STYLESHEET = + +# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the LATEX_OUTPUT output +# directory. Note that the files will be copied as-is; there are no commands or +# markers available. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_FILES = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is +# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will +# contain links (just like the HTML output) instead of page references. This +# makes the output suitable for online browsing using a PDF viewer. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate +# the PDF file directly from the LaTeX files. Set this option to YES, to get a +# higher quality PDF documentation. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode +# command to the generated LaTeX files. This will instruct LaTeX to keep running +# if errors occur, instead of asking the user for help. This option is also used +# when generating formulas in HTML. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BATCHMODE = NO + +# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the +# index chapters (such as File Index, Compound Index, etc.) in the output. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HIDE_INDICES = NO + +# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source +# code with syntax highlighting in the LaTeX output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. See +# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# The default value is: plain. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BIB_STYLE = plain + +# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_TIMESTAMP = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The +# RTF output is optimized for Word 97 and may not look too pretty with other RTF +# readers/editors. +# The default value is: NO. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: rtf. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will +# contain hyperlink fields. The RTF file will contain links (just like the HTML +# output) instead of page references. This makes the output suitable for online +# browsing using Word or some other Word compatible readers that support those +# fields. +# +# Note: WordPad (write) and others do not support links. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's config +# file, i.e. a series of assignments. You only have to provide replacements, +# missing definitions are set to their default value. +# +# See also section "Doxygen usage" for information on how to generate the +# default style sheet that doxygen normally uses. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an RTF document. Syntax is +# similar to doxygen's config file. A template extensions file can be generated +# using doxygen -e rtf extensionFile. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_EXTENSIONS_FILE = + +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code +# with syntax highlighting in the RTF output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for +# classes and files. +# The default value is: NO. + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. A directory man3 will be created inside the directory specified by +# MAN_OUTPUT. +# The default directory is: man. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to the generated +# man pages. In case the manual section does not start with a number, the number +# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is +# optional. +# The default value is: .3. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_EXTENSION = .3 + +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_SUBDIR = + +# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it +# will generate one additional man file for each entity documented in the real +# man page(s). These additional files only source the real man page, but without +# them the man command would be unable to find the correct page. +# The default value is: NO. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that +# captures the structure of the code including all documentation. +# The default value is: NO. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: xml. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_OUTPUT = xml + +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program +# listings (including syntax highlighting and cross-referencing information) to +# the XML output. Note that enabling this will significantly increase the size +# of the XML output. +# The default value is: YES. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- + +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files +# that can be used to generate PDF. +# The default value is: NO. + +GENERATE_DOCBOOK = NO + +# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in +# front of it. +# The default directory is: docbook. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_OUTPUT = docbook + +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_PROGRAMLISTING = NO + +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# AutoGen Definitions (see http://autogen.sf.net) file that captures the +# structure of the code including all documentation. Note that this feature is +# still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module +# file that captures the structure of the code including all documentation. +# +# Note that this feature is still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary +# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI +# output from the Perl module output. +# The default value is: NO. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely +# formatted so it can be parsed by a human reader. This is useful if you want to +# understand what is going on. On the other hand, if this tag is set to NO, the +# size of the Perl module output will be much smaller and Perl will parse it +# just the same. +# The default value is: YES. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file are +# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful +# so different doxyrules.make files included by the same Makefile don't +# overwrite each other's variables. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all +# C-preprocessor directives found in the sources and include files. +# The default value is: YES. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# in the source code. If set to NO, only conditional compilation will be +# performed. Macro expansion can be done in a controlled way by setting +# EXPAND_ONLY_PREDEF to YES. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then +# the macro expansion is limited to the macros specified with the PREDEFINED and +# EXPAND_AS_DEFINED tags. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES, the include files in the +# INCLUDE_PATH will be searched if a #include is found. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by the +# preprocessor. +# This tag requires that the tag SEARCH_INCLUDES is set to YES. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will be +# used. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that are +# defined before the preprocessor is started (similar to the -D option of e.g. +# gcc). The argument of the tag is a list of macros of the form: name or +# name=definition (no spaces). If the definition and the "=" are omitted, "=1" +# is assumed. To prevent a macro definition from being undefined via #undef or +# recursively expanded use the := operator instead of the = operator. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this +# tag can be used to specify a list of macro names that should be expanded. The +# macro definition that is found in the sources will be used. Use the PREDEFINED +# tag if you want to use a different macro definition that overrules the +# definition found in the source code. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will +# remove all references to function-like macros that are alone on a line, have +# an all uppercase name, and do not end with a semicolon. Such function macros +# are typically used for boiler-plate code, and will confuse the parser if not +# removed. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES tag can be used to specify one or more tag files. For each tag +# file the location of the external documentation should be added. The format of +# a tag file without this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where loc1 and loc2 can be relative or absolute paths or URLs. See the +# section "Linking to external documentation" for more information about the use +# of tag files. +# Note: Each tag file must have a unique name (where the name does NOT include +# the path). If a tag file is not located in the directory in which doxygen is +# run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create a +# tag file that is based on the input files it reads. See section "Linking to +# external documentation" for more information about the usage of tag files. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in +# the class index. If set to NO, only the inherited external classes will be +# listed. +# The default value is: NO. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will be +# listed. +# The default value is: YES. + +EXTERNAL_GROUPS = YES + +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in +# the related pages index. If set to NO, only the current project's pages will +# be listed. +# The default value is: YES. + +EXTERNAL_PAGES = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of 'which perl'). +# The default file (with absolute path) is: /usr/bin/perl. + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram +# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to +# NO turns the diagrams off. Note that this option also works with HAVE_DOT +# disabled, but it is recommended to install and use dot, since it yields more +# powerful graphs. +# The default value is: YES. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see: +# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. + +DIA_PATH = + +# If set to YES the inheritance and collaboration graphs will hide inheritance +# and usage relations if the target is undocumented or is not a class. +# The default value is: YES. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz (see: +# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# Bell Labs. The other options in this section have no effect if this option is +# set to NO +# The default value is: YES. + +HAVE_DOT = YES + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed +# to run in parallel. When set to 0 doxygen will base this on the number of +# processors available in the system. You can set it explicitly to a value +# larger than 0 to get control over the balance between CPU load and processing +# speed. +# Minimum value: 0, maximum value: 32, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_NUM_THREADS = 0 + +# When you want a differently looking font in the dot files that doxygen +# generates you can specify the font name using DOT_FONTNAME. You need to make +# sure dot is able to find the font, which can be done by putting it in a +# standard location or by setting the DOTFONTPATH environment variable or by +# setting DOT_FONTPATH to the directory containing the font. +# The default value is: Helvetica. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of +# dot graphs. +# Minimum value: 4, maximum value: 24, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the default font as specified with +# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set +# the path where dot can find it using this tag. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTPATH = + +# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for +# each documented class showing the direct and indirect inheritance relations. +# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a +# graph for each documented class showing the direct and indirect implementation +# dependencies (inheritance, containment, and class references variables) of the +# class with other documented classes. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for +# groups, showing the direct groups dependencies. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside the +# class node. If there are many fields or methods and many nodes the graph may +# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the +# number of items for each type to make the size more manageable. Set this to 0 +# for no limit. Note that the threshold may be exceeded by 50% before the limit +# is enforced. So when you set the threshold to 10, up to 15 fields may appear, +# but if the number exceeds 15, the total amount of fields shown is limited to +# 10. +# Minimum value: 0, maximum value: 100, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LIMIT_NUM_FIELDS = 10 + +# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and +# collaboration graphs will show the relations between templates and their +# instances. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +TEMPLATE_RELATIONS = NO + +# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to +# YES then doxygen will generate a graph for each documented file showing the +# direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDE_GRAPH = YES + +# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are +# set to YES then doxygen will generate a graph for each documented file showing +# the direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH tag is set to YES then doxygen will generate a call +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical +# hierarchy of all classes instead of a textual one. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the +# dependencies a directory has on other directories in a graphical way. The +# dependency relations are determined by the #include relations between the +# files in the directories. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). +# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order +# to make the SVG files visible in IE 9+ (other browsers do not have this +# requirement). +# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd, +# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo, +# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. +# The default value is: png. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# +# Note that this requires a modern browser other than Internet Explorer. Tested +# and working are Firefox, Chrome, Safari, and Opera. +# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make +# the SVG files visible. Older versions of IE do not have SVG support. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +INTERACTIVE_SVG = NO + +# The DOT_PATH tag can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the \dotfile +# command). +# This tag requires that the tag HAVE_DOT is set to YES. + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = + +# The DIAFILE_DIRS tag can be used to specify one or more directories that +# contain dia files that are included in the documentation (see the \diafile +# command). + +DIAFILE_DIRS = + +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. + +PLANTUML_JAR_PATH = + +# When using plantuml, the specified paths are searched for files specified by +# the !include statement in a plantuml block. + +PLANTUML_INCLUDE_PATH = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes +# that will be shown in the graph. If the number of nodes in a graph becomes +# larger than this value, doxygen will truncate the graph, which is visualized +# by representing a node as a red box. Note that doxygen if the number of direct +# children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that +# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. +# Minimum value: 0, maximum value: 10000, default value: 50. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs +# generated by dot. A depth value of 3 means that only nodes reachable from the +# root by following a path via at most 3 edges will be shown. Nodes that lay +# further from the root node will be omitted. Note that setting this option to 1 +# or 2 may greatly reduce the computation time needed for large code bases. Also +# note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. +# Minimum value: 0, maximum value: 1000, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not seem +# to support this out of the box. +# +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) support +# this, this feature is disabled by default. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page +# explaining the meaning of the various boxes and arrows in the dot generated +# graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# files that are used to generate the various graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_CLEANUP = YES diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..86cd459 --- /dev/null +++ b/LICENSE @@ -0,0 +1,504 @@ +GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +(This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.) + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random + Hacker. + + {signature of Ty Coon}, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! \ No newline at end of file diff --git a/README.md b/README.md index f4cb02f..d306603 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,11 @@ # fpm +Field panel method for solving transonic flows using the full potential equation + + +## Features + +## Build +Depends on python3, swig, tbb, eigen. + +## References diff --git a/dox/img.png b/dox/img.png new file mode 100644 index 0000000000000000000000000000000000000000..0fd3ab84749e1471a68c7d2eef825d1d9b9ed67d GIT binary patch literal 154189 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�!{*b@*iheEg#kLLY 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ö-;ozdUV~0~~6r@qRfooMg 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 literal 0 HcmV?d00001 diff --git a/dox/logo.jpg b/dox/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17aeb3377b96b8ec85fed719dd8b3fdc25bd6913 GIT binary patch literal 10837 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 literal 0 HcmV?d00001 diff --git a/fpm/CMakeLists.txt b/fpm/CMakeLists.txt new file mode 100644 index 0000000..25a1abe --- /dev/null +++ b/fpm/CMakeLists.txt @@ -0,0 +1,23 @@ +# Copyright 2020 University of Liège +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# CMake input file of fwk.so + +# Add source dir +ADD_SUBDIRECTORY( src ) +ADD_SUBDIRECTORY( _src ) + +# Add test dir +MACRO_AddTest(${CMAKE_CURRENT_SOURCE_DIR}/tests) + diff --git a/fpm/__init__.py b/fpm/__init__.py new file mode 100644 index 0000000..0bc207d --- /dev/null +++ b/fpm/__init__.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# fpm module initialization file + +import fwk +fwk.wutils.findbins('fpm', verb=False) + +from fpmw import * + diff --git a/fpm/_src/CMakeLists.txt b/fpm/_src/CMakeLists.txt new file mode 100644 index 0000000..059425a --- /dev/null +++ b/fpm/_src/CMakeLists.txt @@ -0,0 +1,44 @@ +# Copyright 2020 University of Liège +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# CMake file for the SWIG interface of fpm.so + +INCLUDE(${SWIG_USE_FILE}) + +FILE(GLOB SRCS *.h *.cpp *.inl *.swg) +FILE(GLOB ISRCS *.i) + +SET(CMAKE_SWIG_FLAGS "") +SET_SOURCE_FILES_PROPERTIES(${ISRCS} PROPERTIES CPLUSPLUS ON) + +SET(SWINCFLAGS +-I${PROJECT_SOURCE_DIR}/fpm/src +) +SET_SOURCE_FILES_PROPERTIES(${ISRCS} PROPERTIES SWIG_FLAGS "${SWINCFLAGS}") + +if (${CMAKE_VERSION} VERSION_LESS "3.8.0") + SWIG_ADD_MODULE(fpmw python ${ISRCS} ${SRCS}) +else() + SWIG_ADD_LIBRARY(fpmw LANGUAGE python SOURCES ${ISRCS} ${SRCS}) +endif() +MACRO_DebugPostfix(_fpmw) + +TARGET_INCLUDE_DIRECTORIES(_fpmw PRIVATE ${PROJECT_SOURCE_DIR}/fpm/_src + ${PYTHON_INCLUDE_PATH} +) + +SWIG_LINK_LIBRARIES(fpmw + fpm ${PYTHON_LIBRARIES} +) + diff --git a/fpm/_src/fpmw.h b/fpm/_src/fpmw.h new file mode 100644 index 0000000..5967301 --- /dev/null +++ b/fpm/_src/fpmw.h @@ -0,0 +1,17 @@ +/* + * Copyright 2020 University of Liège + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "fObject.h" diff --git a/fpm/_src/fpmw.i b/fpm/_src/fpmw.i new file mode 100644 index 0000000..2da4432 --- /dev/null +++ b/fpm/_src/fpmw.i @@ -0,0 +1,69 @@ +/* + * Copyright 2020 University of Liège + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// fpm.i: SWIG input file of the fpm python interface + +%feature("autodoc","1"); + +%module(docstring= +"'fpmw' module: field panel method +(c) ULg - A&M", +directors="1", +threads="1" +) fpmw +%{ + +//#if defined(_WIN32) && defined(__GNUC__) +#undef _hypot +#include <cmath> +//#endif + +#include <memory> +#include <string> +#include <sstream> +#include <typeinfo> + +#include "fpm.h" +#include "fpmw.h" + +%} + +%include "fpmw.swg" + +%include "fpm.h" + +%include <std_shared_ptr.i> + +%shared_ptr(fpm::fSharedObject); +%include "fObject.h" + +namespace fpm { + +%extend fObject { + std::string __str__() { + std::stringstream str; str << *self; + return str.str(); + } +} + +%extend fSharedObject { + std::string __str__() { + std::stringstream str; str << *self; + return str.str(); + } +} +}; + diff --git a/fpm/_src/fpmw.swg b/fpm/_src/fpmw.swg new file mode 100644 index 0000000..169ce32 --- /dev/null +++ b/fpm/_src/fpmw.swg @@ -0,0 +1,80 @@ +/* + * Copyright 2020 University of Liège + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + // common includes + +// !! mingw + c++11 + python: +// cmath doit être inclus AVANT Python.h (et en particulier pyconfig.h) +// car il renomme hypot en _hypoth (bidouille liée au visual) +%begin %{ +#if defined(_WIN32) && defined(__GNUC__) +#include <cmath> +#endif +%} + +// petite bidouille pour pouvoir compiler avec "threads=1" et iterer sur des std_vector +// (sinon ca explose � la destruction de l'iterateur) +%nothread swig::SwigPyIterator::~SwigPyIterator(); + +%include "std_string.i" +%include "exception.i" +%include "std_vector.i" +%include "std_list.i" +%include "std_map.i" + +// from: http://swig.10945.n7.nabble.com/Trapping-Swig-DirectorException-td6013.html +// le code suivant permet de voir la call stack dans les appels C++ => python + +%{ + static void handle_exception(void) { + try { + throw; + } catch (std::exception &e) { + std::stringstream txt; + txt << e.what(); // << ' ' << typeid(e).name(); + PyErr_SetString(PyExc_RuntimeError, e.what()); + } + catch(...) + { + PyErr_SetString(PyExc_RuntimeError, "Unknown C++ Runtime Error"); + } + } +%} + +%exception { + try { + $action + } catch (...) { + // Note that if a director method failed, the Python error indicator + // already contains full details of the exception, and it will be + // reraised when we go to SWIG_fail; so no need to convert the C++ + // exception back to a Python one + if (!PyErr_Occurred()) { + handle_exception(); + } + SWIG_fail; + } +} + +%feature("director:except") { + if ($error != NULL) { + throw Swig::DirectorMethodException(); + } +} + + +%ignore operator<<; + diff --git a/fpm/src/CMakeLists.txt b/fpm/src/CMakeLists.txt new file mode 100644 index 0000000..e19d83a --- /dev/null +++ b/fpm/src/CMakeLists.txt @@ -0,0 +1,36 @@ +# Copyright 2020 University of Liège +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# CMake input file of fpm.so + +FILE(GLOB SRCS *.h *.cpp *.inl *.hpp) + +ADD_LIBRARY(fpm SHARED ${SRCS}) +MACRO_DebugPostfix(fpm) + +TARGET_INCLUDE_DIRECTORIES(fpm PUBLIC ${PROJECT_SOURCE_DIR}/fpm/src) + +# -- TBB +FIND_PACKAGE(TBB REQUIRED) +SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${TBB_CXX_FLAGS_DEBUG}") +TARGET_INCLUDE_DIRECTORIES(fpm PUBLIC ${TBB_INCLUDE_DIRS}) +TARGET_LINK_LIBRARIES(fpm ${TBB_LIBRARIES}) + +# -- Eigen +FIND_PACKAGE(EIGEN 3.3.4 REQUIRED) +TARGET_INCLUDE_DIRECTORIES(fpm PUBLIC ${EIGEN_INCLUDE_DIRS}) +TARGET_COMPILE_DEFINITIONS(fpm PUBLIC EIGEN_DONT_PARALLELIZE) + +SOURCE_GROUP(base REGULAR_EXPRESSION ".*\\.(cpp|inl|hpp|h)") + diff --git a/fpm/src/fObject.cpp b/fpm/src/fObject.cpp new file mode 100644 index 0000000..55e8ca7 --- /dev/null +++ b/fpm/src/fObject.cpp @@ -0,0 +1,45 @@ +/* + * Copyright 2020 University of Liège + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "fObject.h" + +namespace fpm +{ + +FPM_API std::ostream & +operator<<(std::ostream &out, fObject const &obj) +{ + obj.write(out); + return out; +} + +void fObject::write(std::ostream &out) const +{ +} + +FPM_API std::ostream & +operator<<(std::ostream &out, fSharedObject const &obj) +{ + obj.write(out); + return out; +} + +void fSharedObject::write(std::ostream &out) const +{ +} + +} // namespace fpm + diff --git a/fpm/src/fObject.h b/fpm/src/fObject.h new file mode 100644 index 0000000..27a6948 --- /dev/null +++ b/fpm/src/fObject.h @@ -0,0 +1,75 @@ +/* + * Copyright 2020 University of Liège + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOBJECT_H +#define FOBJECT_H + +#include "fpm.h" +#include <iostream> + +namespace fpm +{ + +/** + * @brief Base class of all virtual objects + * + * The only purpose of this class is that it avoids many copy/paste for + * the print function (__str__() fct) in SWIG/python + */ + +class FPM_API fObject +{ +public: + fObject() = default; + virtual ~fObject() {} + fObject(const fObject &) = delete; + fObject &operator=(const fObject &) = delete; + +#ifndef SWIG + friend FPM_API std::ostream &operator<<(std::ostream &out, fObject const &obj); + virtual void write(std::ostream &out) const; +#endif +}; + +/** + * @brief Base class of smart-pointed objects (shared_ptr) + * + * This base class is only required for "print" in SWIG/python. + * std::cout << *o works from C++ (it calls "write") even if the object inherits from wObject + * which is not defined in SWIG as shared_ptr-managed object + * However "print o" fails in python if the shared object inherits from wObject. + * This class also avoids a warning in SWIG telling that some derived or base classes are not + * managed by shared_ptr. + */ + +class FPM_API fSharedObject +{ +public: + fSharedObject() = default; + virtual ~fSharedObject() {} + fSharedObject(const fSharedObject &) = delete; + fSharedObject &operator=(const fSharedObject &) = delete; + +#ifndef SWIG + friend FPM_API std::ostream &operator<<(std::ostream &out, fSharedObject const &obj); + virtual void write(std::ostream &out) const; +#endif +}; + +} // namespace fpm + +#endif //FOBJECT_H + diff --git a/fpm/src/fpm.h b/fpm/src/fpm.h new file mode 100644 index 0000000..e925020 --- /dev/null +++ b/fpm/src/fpm.h @@ -0,0 +1,54 @@ +/* + * Copyright 2020 University of Liège + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// fpm global header + +#ifndef FPM_H +#define FPM_H + +#if defined(WIN32) +#ifdef fpm_EXPORTS +#define FPM_API __declspec(dllexport) +#else +#define FPM_API __declspec(dllimport) +#endif +#else +#define FPM_API +#endif + +#ifdef _MSC_VER +#if !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS 1 +#endif + +#pragma warning(disable : 4251) // DLL/templates non exportes +#pragma warning(disable : 4275) // non - DLL-interface classkey 'identifier' used as base for DLL-interface classkey 'identifier' + +#define NOMINMAX // avoids the definition of "min/max" macro in <minwindef.h> (which could shadow std::max) + +#endif //_MSC_VER + + +namespace fpm +{ + +class fObject; + +} // namespace fpm + + +#endif //FPM_H + diff --git a/fpm/tests/basic.py b/fpm/tests/basic.py new file mode 100644 index 0000000..6da436c --- /dev/null +++ b/fpm/tests/basic.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright 2020 University of Liège +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# basic test + +import fpm +from fwk.testing import * +from fwk.coloring import ccolors + +def main(): + a = 10.0 + print(ccolors.ANSI_BLUE + 'PyTesting...' + ccolors.ANSI_RESET) + tests = CTests() + tests.add(CTest('test', a, 10., 1e-2)) + +if __name__ == '__main__': + main() + diff --git a/run_fpm.py b/run_fpm.py new file mode 100755 index 0000000..a63a0ec --- /dev/null +++ b/run_fpm.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# -*- coding: utf8 -*- +# test encoding: à -é-è-ô-ï-€ +# +# runs a test as if it was installed +# - fixes the python path in a dev environment +# - creates a workspace folder + +if __name__ == "__main__": + import sys + import os + + thisdir = os.path.split(os.path.abspath(__file__))[0] + + # look for fwk + fwkdir = os.path.abspath(os.path.join(thisdir, '..', 'waves')) + if not os.path.isdir(fwkdir): + raise Exception( + "'waves' not found - clone it next to fpm (from https://gitlab.uliege.be/am-dept/waves)") + sys.path.append(fwkdir) + + # adds "." to the pythonpath (after waves so that waves is found first) + sys.path.append(thisdir) + + import run # maybe we should put the code of run in fwk.... + run.main(thisdir) -- GitLab