├── .codedocs
├── .editorconfig
├── .gitignore
├── .travis.yml
├── CMakeLists.txt
├── LICENSE
├── README.md
├── appveyor.yml
├── cmake
└── Modules
│ └── CodeCoverage.cmake
├── codecov.yml
├── doc
├── CMakeLists.txt
├── Doxyfile.in
├── directory_structure.md
├── main_page.md
├── setting_up_ci.md
├── setting_up_documentation.md
└── variables_and_targets.md
├── include
└── project-abbr
│ ├── config.hpp.in
│ ├── factorial.hpp
│ └── hello_world.hpp
├── src
├── factorial.cpp
├── hello_world.cpp
└── main.cpp
├── test
├── CMakeLists.txt
├── factorial_test.cpp
├── hello_world_test.cpp
└── test_runner.cpp
└── third_party
└── doctest
└── doctest.h
/.codedocs:
--------------------------------------------------------------------------------
1 | # CodeDocs.xyz Configuration File
2 | #
3 | # Rename this example to '.codedocs' and put it in the root directory of your
4 | # repository. This file is optional, documentation will still be generated
5 | # without it using sensible defaults.
6 |
7 | #---------------------------------------------------------------------------
8 | # CodeDocs Configuration
9 | #---------------------------------------------------------------------------
10 |
11 | # Include the Doxygen configuration from another file.
12 | # The file must be a relative path with respect to the root of the repository.
13 | # If any of the options in this doxyfile include a path (ie, INPUT), these
14 | # paths will be considered relative to the root of the repository, not the
15 | # location of the DOXYFILE.
16 |
17 | DOXYFILE = doc/Doxyfile.in
18 |
19 | # Specify external repository to link documentation with.
20 | # This is similar to Doxygen's TAGFILES option, but will automatically link to
21 | # tags of other repositories already using CodeDocs. List each repository to
22 | # link with by giving its location in the form of owner/repository.
23 | # For example:
24 | # TAGLINKS = doxygen/doxygen CodeDocs/osg
25 | # Note: these repositories must already be built on CodeDocs.
26 |
27 | TAGLINKS =
28 |
29 | #---------------------------------------------------------------------------
30 | # Doxygen Configuration
31 | #---------------------------------------------------------------------------
32 |
33 | # These variables have to be redefined since codedocs cannot run CMake
34 | PROJECT_NAME = "Project Name"
35 | PROJECT_NUMBER = 0.1.0
36 | PROJECT_BRIEF = "A cross-platform C++14 project template"
37 | OUTPUT_DIRECTORY = doc/
38 | INPUT = doc/ include/
39 | USE_MDFILE_AS_MAINPAGE = doc/main_page.md
40 | EXTRACT_ALL = NO
41 |
42 | # Doxygen configuration may also be placed in this file.
43 | # Currently, the following Doxygen configuration options are available. Refer
44 | # to http://doxygen.org/manual/config.html for detailed explanation of the
45 | # options. To request support for more options, contact support@codedocs.xyz.
46 | #
47 | # ABBREVIATE_BRIEF =
48 | # ALIASES =
49 | # ALLEXTERNALS =
50 | # ALLOW_UNICODE_NAMES =
51 | # ALPHABETICAL_INDEX =
52 | # ALWAYS_DETAILED_SEC =
53 | # AUTOLINK_SUPPORT =
54 | # BRIEF_MEMBER_DESC =
55 | # BUILTIN_STL_SUPPORT =
56 | # CALLER_GRAPH =
57 | # CALL_GRAPH =
58 | # CASE_SENSE_NAMES =
59 | # CITE_BIB_FILES =
60 | # CLASS_DIAGRAMS =
61 | # CLASS_GRAPH =
62 | # COLLABORATION_GRAPH =
63 | # COLS_IN_ALPHA_INDEX =
64 | # CPP_CLI_SUPPORT =
65 | # DIAFILE_DIRS =
66 | # DIRECTORY_GRAPH =
67 | # DISABLE_INDEX =
68 | # DISTRIBUTE_GROUP_DOC =
69 | # DOTFILE_DIRS =
70 | # DOT_FONTNAME =
71 | # DOT_FONTSIZE =
72 | # DOT_GRAPH_MAX_NODES =
73 | # DOT_IMAGE_FORMAT =
74 | # DOT_TRANSPARENT =
75 | # DOXYFILE_ENCODING =
76 | # ENABLED_SECTIONS =
77 | # ENABLE_PREPROCESSING =
78 | # ENUM_VALUES_PER_LINE =
79 | # EXAMPLE_PATH =
80 | # EXAMPLE_PATTERNS =
81 | # EXAMPLE_RECURSIVE =
82 | # EXCLUDE =
83 | # EXCLUDE_PATTERNS =
84 | # EXCLUDE_SYMBOLS =
85 | # EXPAND_AS_DEFINED =
86 | # EXPAND_ONLY_PREDEF =
87 | # EXTENSION_MAPPING =
88 | # EXTERNAL_GROUPS =
89 | # EXTERNAL_PAGES =
90 | # EXTRACT_ALL =
91 | # EXTRACT_ANON_NSPACES =
92 | # EXTRACT_LOCAL_CLASSES =
93 | # EXTRACT_LOCAL_METHODS =
94 | # EXTRACT_PACKAGE =
95 | # EXTRACT_PRIVATE =
96 | # EXTRACT_STATIC =
97 | # EXT_LINKS_IN_WINDOW =
98 | # FILE_PATTERNS =
99 | # FORCE_LOCAL_INCLUDES =
100 | # FORMULA_FONTSIZE =
101 | # FORMULA_TRANSPARENT =
102 | # FULL_PATH_NAMES =
103 | # GENERATE_BUGLIST =
104 | # GENERATE_DEPRECATEDLIST =
105 | # GENERATE_LEGEND =
106 | # GENERATE_TESTLIST =
107 | # GENERATE_TODOLIST =
108 | # GENERATE_TREEVIEW =
109 | # GRAPHICAL_HIERARCHY =
110 | # GROUP_GRAPHS =
111 | # GROUP_NESTED_COMPOUNDS =
112 | # HIDE_COMPOUND_REFERENCE= =
113 | # HIDE_FRIEND_COMPOUNDS =
114 | # HIDE_IN_BODY_DOCS =
115 | # HIDE_SCOPE_NAMES =
116 | # HIDE_UNDOC_CLASSES =
117 | # HIDE_UNDOC_MEMBERS =
118 | # HIDE_UNDOC_RELATIONS =
119 | # HTML_COLORSTYLE_GAMMA =
120 | # HTML_COLORSTYLE_HUE =
121 | # HTML_COLORSTYLE_SAT =
122 | # HTML_DYNAMIC_SECTIONS =
123 | # HTML_EXTRA_FILES =
124 | # HTML_EXTRA_STYLESHEET =
125 | # HTML_FOOTER =
126 | # HTML_HEADER =
127 | # HTML_INDEX_NUM_ENTRIES =
128 | # HTML_STYLESHEET =
129 | # HTML_TIMESTAMP =
130 | # IDL_PROPERTY_SUPPORT =
131 | # IGNORE_PREFIX =
132 | # IMAGE_PATH =
133 | # INCLUDED_BY_GRAPH =
134 | # INCLUDE_FILE_PATTERNS =
135 | # INCLUDE_GRAPH =
136 | # INCLUDE_PATH =
137 | # INHERIT_DOCS =
138 | # INLINE_GROUPED_CLASSES =
139 | # INLINE_INFO =
140 | # INLINE_INHERITED_MEMB =
141 | # INLINE_SIMPLE_STRUCTS =
142 | # INLINE_SOURCES =
143 | # INPUT =
144 | # INPUT_ENCODING =
145 | # INTERACTIVE_SVG =
146 | # INTERNAL_DOCS =
147 | # JAVADOC_AUTOBRIEF =
148 | # LAYOUT_FILE =
149 | # MACRO_EXPANSION =
150 | # MARKDOWN_SUPPORT =
151 | # MAX_DOT_GRAPH_DEPTH =
152 | # MSCFILE_DIRS =
153 | # MULTILINE_CPP_IS_BRIEF =
154 | # OPTIMIZE_FOR_FORTRAN =
155 | # OPTIMIZE_OUTPUT_FOR_C =
156 | # OPTIMIZE_OUTPUT_JAVA =
157 | # OPTIMIZE_OUTPUT_VHDL =
158 | # OUTPUT_LANGUAGE =
159 | # PLANTUML_JAR_PATH =
160 | # PREDEFINED =
161 | # PROJECT_BRIEF =
162 | # PROJECT_LOGO =
163 | # PROJECT_NAME =
164 | # PROJECT_NUMBER =
165 | # QT_AUTOBRIEF =
166 | # RECURSIVE =
167 | # REFERENCED_BY_RELATION =
168 | # REFERENCES_LINK_SOURCE =
169 | # REFERENCES_RELATION =
170 | # REPEAT_BRIEF =
171 | # SEARCHENGINE =
172 | # SEARCH_INCLUDES =
173 | # SEPARATE_MEMBER_PAGES =
174 | # SHORT_NAMES =
175 | # SHOW_FILES =
176 | # SHOW_GROUPED_MEMB_INC =
177 | # SHOW_INCLUDE_FILES =
178 | # SHOW_NAMESPACES =
179 | # SHOW_USED_FILES =
180 | # SIP_SUPPORT =
181 | # SKIP_FUNCTION_MACROS =
182 | # SORT_BRIEF_DOCS =
183 | # SORT_BY_SCOPE_NAME =
184 | # SORT_GROUP_NAMES =
185 | # SORT_MEMBERS_CTORS_1ST =
186 | # SORT_MEMBER_DOCS =
187 | # SOURCE_BROWSER =
188 | # SOURCE_TOOLTIPS =
189 | # STRICT_PROTO_MATCHING =
190 | # STRIP_CODE_COMMENTS =
191 | # STRIP_FROM_INC_PATH =
192 | # STRIP_FROM_PATH =
193 | # SUBGROUPING =
194 | # TAB_SIZE =
195 | # TEMPLATE_RELATIONS =
196 | # TREEVIEW_WIDTH =
197 | # TYPEDEF_HIDES_STRUCT =
198 | # UML_LIMIT_NUM_FIELDS =
199 | # UML_LOOK =
200 | # USE_MDFILE_AS_MAINPAGE =
201 | # VERBATIM_HEADERS =
202 | #
203 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | end_of_line = lf
5 | insert_final_newline = true
6 | indent_style = space
7 | indent_size = 4
8 |
9 | [*.yml]
10 | indent_size = 2
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.gitignore.io/api/c++,cmake
2 |
3 | ### C++ ###
4 | # Prerequisites
5 | *.d
6 |
7 | # Compiled Object files
8 | *.slo
9 | *.lo
10 | *.o
11 | *.obj
12 |
13 | # Precompiled Headers
14 | *.gch
15 | *.pch
16 |
17 | # Compiled Dynamic libraries
18 | *.so
19 | *.dylib
20 | *.dll
21 |
22 | # Fortran module files
23 | *.mod
24 | *.smod
25 |
26 | # Compiled Static libraries
27 | *.lai
28 | *.la
29 | *.a
30 | *.lib
31 |
32 | # Executables
33 | *.exe
34 | *.out
35 | *.app
36 |
37 | ### CMake ###
38 | CMakeCache.txt
39 | CMakeFiles
40 | CMakeScripts
41 | Testing
42 | Makefile
43 | cmake_install.cmake
44 | install_manifest.txt
45 | compile_commands.json
46 | CTestTestfile.cmake
47 | build
48 |
49 |
50 | # End of https://www.gitignore.io/api/c++,cmake
51 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: cpp
2 |
3 | sudo: required
4 |
5 | branches:
6 | only:
7 | - master
8 | - coverity_scan
9 |
10 | env:
11 | global:
12 | # The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
13 | # via the "travis encrypt" command using the project repo's public key
14 | secure: "veAdPtCJipVm1byxjBdwEAmFrTkvPeQTFh2+F+HGoCpzKJloQA3r7TcUSvkw3VKCSdc7fim6YKei3w57N9lR8wjlOdM+HScWims4i9n9t7zFQCbsaOuxxK7nmoFDuRx/9HPoi4px7famfhqRbYDQKcX4wX4XWeO5Ic364oGfXSc5loKSiu40ruseEeSAAyf96QYRRYvfbg2ifQTPTc1mMrE7KXDtyRQPnIWMHE3vFGdmcekqjRuVotUHbkoTZOElnA5dfXIctfJfDIv6ZMF1fLOcqoGqQrBiGqNtZvGZf0vGjmqwURZZOCkmIeBroyQSlneB6uhkes52vjbYMs+3NF7Y7D1kyPFiMaoK4WfjlQ5Z9k6JoBupkOhMLwyklxkks/scZXuI+H0V285fl2E5tdiowCBXn68J5yn1RjiAOLOS20oExLhPwd5cNsUKOmrWbNBlvEq37MKTVyBfu0h2gCVF3xo+H3b2RLzgn39hKppSK0iReVEfOmzhk6yP5QUBZUjemruJeZFp0CG3On8EdUQgIY9gOsFBoAsYkm6ahwvNSdL3Am8zpQMBBjS/WqJ3nNaPKQWqqL4eWG2y4cItjrRiIlczNh+LsJEP5vescEdiF+fx0hpCBy0B7LrOLUn7bGcPSOPV3XmqPesK5HaDE1bwgZ1ZjebdioTHfk+YHEs="
15 |
16 | matrix:
17 | include:
18 | # Coverity Scan (Linux Debug)
19 | - os: linux
20 | compiler: gcc
21 | before_install:
22 | - echo -n | openssl s_client -connect https://scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-
23 | addons:
24 | apt:
25 | sources:
26 | - ubuntu-toolchain-r-test
27 | packages:
28 | - g++-5
29 | - cmake
30 | coverity_scan:
31 | project:
32 | name: "arnavb/cpp14-project-template"
33 | description: "A cross-platform C++14 project template"
34 | notification_email: arnavborborah11@gmail.com
35 | build_command_prepend: "cov-configure --comptype gcc --compiler g++-5 --template && cmake -DCMAKE_CXX_COMPILER=g++-5 -DGEN_DOCS=OFF ."
36 | build_command: "cmake --build ."
37 | branch_pattern: coverity_scan
38 | if: branch = coverity_scan
39 | before_script: echo "Coverity Scan"
40 | script: echo "Coverity Scan"
41 | # Code coverage (Linux Debug)
42 | - os: linux
43 | compiler: gcc
44 | addons:
45 | apt:
46 | sources:
47 | - ubuntu-toolchain-r-test
48 | packages:
49 | - g++-5
50 | - cmake
51 | - lcov
52 | before_script:
53 | - mkdir -p build && cd build
54 | - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=g++-5 -DBUILD_TESTS=ON -DENABLE_COVERAGE=ON -DGEN_DOCS=OFF ..
55 | script:
56 | - cmake --build . -- -j2
57 | - cmake --build . --target coverage
58 | after_success:
59 | - bash <(curl -s https://codecov.io/bash) || echo "Codecov did not collect coverage reports"
60 | if: branch != coverity_scan
61 | # Linux Release
62 | - os: linux
63 | compiler: gcc
64 | addons:
65 | apt:
66 | sources:
67 | - ubuntu-toolchain-r-test
68 | packages:
69 | - g++-5
70 | - cmake
71 | env:
72 | - MATRIX_EVAL="COMPILER=g++-5 && BUILD_TYPE=Release"
73 | if: branch != coverity_scan
74 | # OSX Debug
75 | - os: osx
76 | osx_image: xcode9.2
77 | compiler: clang
78 | env:
79 | - MATRIX_EVAL="COMPILER=clang++ && BUILD_TYPE=Debug"
80 | if: branch != coverity_scan
81 | # OSX Release
82 | - os: osx
83 | osx_image: xcode9.2
84 | compiler: clang
85 | env:
86 | - MATRIX_EVAL="COMPILER=clang++ && BUILD_TYPE=Release"
87 | if: branch != coverity_scan
88 |
89 | before_install:
90 | - eval "${MATRIX_EVAL}"
91 |
92 | before_script:
93 | - mkdir -p build && cd build
94 | - cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_CXX_COMPILER=$COMPILER -DBUILD_TESTS=ON -DGEN_DOCS=OFF ..
95 |
96 | script:
97 | - cmake --build . -- -j2 # Build the code
98 | - ctest --output-on-failure
99 | - sudo cmake --build . --target install # Install the necessary files
100 |
--------------------------------------------------------------------------------
/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.1)
2 |
3 | project(Project-Name)
4 |
5 | set(Project-Name_VERSION_MAJOR 0)
6 | set(Project-Name_VERSION_MINOR 1)
7 | set(Project-Name_VERSION_PATCH 0)
8 | set(Project-Name_VERSION "${Project-Name_VERSION_MAJOR}.${Project-Name_VERSION_MINOR}.${Project-Name_VERSION_PATCH}")
9 |
10 | set(PROJ_NAME "\"Project Name\"") # PROJECT_NAME is a predefined variable
11 | set(PROJECT_DESCRIPTION "\"A cross-platform C++14 project template\"")
12 |
13 | configure_file(include/project-abbr/config.hpp.in
14 | ${CMAKE_BINARY_DIR}/include/project-abbr/config.hpp
15 | )
16 |
17 | set(CMAKE_CXX_STANDARD 14)
18 | set(CMAKE_CXX_STANDARD_REQUIRED ON)
19 | set(CMAKE_CXX_EXTENSIONS OFF)
20 |
21 | # Options
22 | option(BUILD_TESTS "Build test executable" OFF)
23 | option(GEN_DOCS "Generate documentation" ON)
24 | option(ENABLE_COVERAGE "Enable code coverage" OFF)
25 |
26 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
27 |
28 | if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
29 | message(STATUS "Setting build type to 'Release' as no build type was specified")
30 | set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the build type (Debug/Release)" FORCE)
31 | endif (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
32 |
33 | if (ENABLE_COVERAGE AND NOT CMAKE_CONFIGURATION_TYPES)
34 | if (NOT BUILD_TESTS)
35 | message(FATAL_ERROR "Tests must be enabled for code coverage!")
36 | endif (NOT BUILD_TESTS)
37 |
38 | include(CodeCoverage)
39 |
40 | append_coverage_compiler_flags()
41 | set(COVERAGE_EXCLUDES "/usr/include/\\*;${CMAKE_SOURCE_DIR}/src/main.cpp;${CMAKE_SOURCE_DIR}/test/*;${CMAKE_SOURCE_DIR}/third_party/doctest/*")
42 |
43 | setup_target_for_coverage(NAME coverage EXECUTABLE ctest DEPENDENCIES coverage)
44 | else (ENABLE_COVERAGE AND NOT CMAKE_CONFIGURATION_TYPES)
45 | if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
46 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror")
47 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
48 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2")
49 | elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
50 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /WX")
51 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2")
52 | endif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
53 | endif (ENABLE_COVERAGE AND NOT CMAKE_CONFIGURATION_TYPES)
54 |
55 | set(LIBRARY_SOURCES
56 | src/factorial.cpp
57 | src/hello_world.cpp
58 | )
59 |
60 | add_library(Project-Name-lib ${LIBRARY_SOURCES}) # A library
61 | set_target_properties(Project-Name-lib PROPERTIES PREFIX "") # Remove the lib prefix
62 | target_include_directories(Project-Name-lib PUBLIC ${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/include)
63 |
64 | add_executable(Project-Name src/main.cpp) # The main executable
65 | target_link_libraries(Project-Name Project-Name-lib) # Link our sources to the executable
66 |
67 | if (BUILD_TESTS)
68 | include(CTest)
69 | enable_testing()
70 | add_subdirectory(test)
71 | endif (BUILD_TESTS)
72 |
73 | if (GEN_DOCS)
74 | add_subdirectory(doc)
75 | endif (GEN_DOCS)
76 |
77 | # Install the built library and executable into the appropriate directory
78 | install(TARGETS Project-Name DESTINATION bin)
79 | install(TARGETS Project-Name-lib
80 | ARCHIVE DESTINATION lib
81 | LIBRARY DESTINATION lib
82 | RUNTIME DESTINATION bin
83 | )
84 |
85 | # Install the project header files into the appropriate directory
86 | install(DIRECTORY include/ DESTINATION include PATTERN "config.hpp.in" EXCLUDE) # Install our main header files
87 | install(FILES ${CMAKE_BINARY_DIR}/include/project-abbr/config.hpp DESTINATION include/project-abbr) # Install our configuration file
88 |
89 | # Install the project's extra files
90 | install(FILES README.md LICENSE DESTINATION share/project-abbr)
91 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | CC0 1.0 Universal
2 |
3 | Statement of Purpose
4 |
5 | The laws of most jurisdictions throughout the world automatically confer
6 | exclusive Copyright and Related Rights (defined below) upon the creator and
7 | subsequent owner(s) (each and all, an "owner") of an original work of
8 | authorship and/or a database (each, a "Work").
9 |
10 | Certain owners wish to permanently relinquish those rights to a Work for the
11 | purpose of contributing to a commons of creative, cultural and scientific
12 | works ("Commons") that the public can reliably and without fear of later
13 | claims of infringement build upon, modify, incorporate in other works, reuse
14 | and redistribute as freely as possible in any form whatsoever and for any
15 | purposes, including without limitation commercial purposes. These owners may
16 | contribute to the Commons to promote the ideal of a free culture and the
17 | further production of creative, cultural and scientific works, or to gain
18 | reputation or greater distribution for their Work in part through the use and
19 | efforts of others.
20 |
21 | For these and/or other purposes and motivations, and without any expectation
22 | of additional consideration or compensation, the person associating CC0 with a
23 | Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
24 | and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
25 | and publicly distribute the Work under its terms, with knowledge of his or her
26 | Copyright and Related Rights in the Work and the meaning and intended legal
27 | effect of CC0 on those rights.
28 |
29 | 1. Copyright and Related Rights. A Work made available under CC0 may be
30 | protected by copyright and related or neighboring rights ("Copyright and
31 | Related Rights"). Copyright and Related Rights include, but are not limited
32 | to, the following:
33 |
34 | i. the right to reproduce, adapt, distribute, perform, display, communicate,
35 | and translate a Work;
36 |
37 | ii. moral rights retained by the original author(s) and/or performer(s);
38 |
39 | iii. publicity and privacy rights pertaining to a person's image or likeness
40 | depicted in a Work;
41 |
42 | iv. rights protecting against unfair competition in regards to a Work,
43 | subject to the limitations in paragraph 4(a), below;
44 |
45 | v. rights protecting the extraction, dissemination, use and reuse of data in
46 | a Work;
47 |
48 | vi. database rights (such as those arising under Directive 96/9/EC of the
49 | European Parliament and of the Council of 11 March 1996 on the legal
50 | protection of databases, and under any national implementation thereof,
51 | including any amended or successor version of such directive); and
52 |
53 | vii. other similar, equivalent or corresponding rights throughout the world
54 | based on applicable law or treaty, and any national implementations thereof.
55 |
56 | 2. Waiver. To the greatest extent permitted by, but not in contravention of,
57 | applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
58 | unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
59 | and Related Rights and associated claims and causes of action, whether now
60 | known or unknown (including existing as well as future claims and causes of
61 | action), in the Work (i) in all territories worldwide, (ii) for the maximum
62 | duration provided by applicable law or treaty (including future time
63 | extensions), (iii) in any current or future medium and for any number of
64 | copies, and (iv) for any purpose whatsoever, including without limitation
65 | commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
66 | the Waiver for the benefit of each member of the public at large and to the
67 | detriment of Affirmer's heirs and successors, fully intending that such Waiver
68 | shall not be subject to revocation, rescission, cancellation, termination, or
69 | any other legal or equitable action to disrupt the quiet enjoyment of the Work
70 | by the public as contemplated by Affirmer's express Statement of Purpose.
71 |
72 | 3. Public License Fallback. Should any part of the Waiver for any reason be
73 | judged legally invalid or ineffective under applicable law, then the Waiver
74 | shall be preserved to the maximum extent permitted taking into account
75 | Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
76 | is so judged Affirmer hereby grants to each affected person a royalty-free,
77 | non transferable, non sublicensable, non exclusive, irrevocable and
78 | unconditional license to exercise Affirmer's Copyright and Related Rights in
79 | the Work (i) in all territories worldwide, (ii) for the maximum duration
80 | provided by applicable law or treaty (including future time extensions), (iii)
81 | in any current or future medium and for any number of copies, and (iv) for any
82 | purpose whatsoever, including without limitation commercial, advertising or
83 | promotional purposes (the "License"). The License shall be deemed effective as
84 | of the date CC0 was applied by Affirmer to the Work. Should any part of the
85 | License for any reason be judged legally invalid or ineffective under
86 | applicable law, such partial invalidity or ineffectiveness shall not
87 | invalidate the remainder of the License, and in such case Affirmer hereby
88 | affirms that he or she will not (i) exercise any of his or her remaining
89 | Copyright and Related Rights in the Work or (ii) assert any associated claims
90 | and causes of action with respect to the Work, in either case contrary to
91 | Affirmer's express Statement of Purpose.
92 |
93 | 4. Limitations and Disclaimers.
94 |
95 | a. No trademark or patent rights held by Affirmer are waived, abandoned,
96 | surrendered, licensed or otherwise affected by this document.
97 |
98 | b. Affirmer offers the Work as-is and makes no representations or warranties
99 | of any kind concerning the Work, express, implied, statutory or otherwise,
100 | including without limitation warranties of title, merchantability, fitness
101 | for a particular purpose, non infringement, or the absence of latent or
102 | other defects, accuracy, or the present or absence of errors, whether or not
103 | discoverable, all to the greatest extent permissible under applicable law.
104 |
105 | c. Affirmer disclaims responsibility for clearing rights of other persons
106 | that may apply to the Work or any use thereof, including without limitation
107 | any person's Copyright and Related Rights in the Work. Further, Affirmer
108 | disclaims responsibility for obtaining any necessary consents, permissions
109 | or other rights required for any use of the Work.
110 |
111 | d. Affirmer understands and acknowledges that Creative Commons is not a
112 | party to this document and has no duty or obligation with respect to this
113 | CC0 or use of the Work.
114 |
115 | For more information, please see
116 |
117 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Project Name
2 |
3 | [](https://travis-ci.org/arnavb/cpp14-project-template)
4 | [](https://ci.appveyor.com/project/arnavb/cpp14-project-template/branch/master)
5 | [](https://scan.coverity.com/projects/arnavb-cpp14-project-template)
6 | [](https://codecov.io/gh/arnavb/cpp14-project-template)
7 | [](https://www.codacy.com/app/arnavb/cpp14-project-template?utm_source=github.com&utm_medium=referral&utm_content=arnavb/cpp14-project-template&utm_campaign=Badge_Grade)
8 | [](https://codedocs.xyz/arnavb/cpp14-project-template/)
9 |
10 | A simple, cross-platform, and continuously integrated C++14 project template.
11 |
12 | Making cross platform C++ projects is widely known to be a troublesome ambition. This project attempts to demystify many of the common problems related to creating such a structure by providing a simple template that achieves this purpose.
13 |
14 | ## Getting Started
15 |
16 | ### Configuring the Template
17 |
18 | (Unfortunately, a setup script isn't currently available but is being worked on in [#3](https://github.com/arnavb/cpp14-project-template/pull/3). Until it is, however, these steps have to be followed manually.)
19 |
20 | In order to use this project, all you have to do is follow a few (Ok, more than a few) simple steps:
21 |
22 | 1. `git clone` this project into a directory of choice.
23 | 2. Open the file `.codedocs` and replace the variables `PROJECT_NAME`, `PROJECT_NUMBER`, and `PROJECT_NUMBER` with their corresponding values.
24 | 3. Open the file `.travis.yml`, and replace the encrypted Coverity Scan token with the one for your project. In addition, modify the variables in the following section with their corresponding values:
25 | ```
26 | project:
27 | name: "arnavb/cpp14-project-template"
28 | description: "A cross-platform C++14 project template"
29 | notification_email: arnavborborah11@gmail.com
30 | ```
31 | 4. In `./CMakeLists.txt`, modify:
32 | 1. `Project-Name` to match your project name.
33 | 2. `Project-Name_VERSION_MAJOR`, `Project-Name_VERSION_MINOR`, and `Project-Name_VERSION_PATCH` to match the versioning of your project. Make sure to modify the names of the variables as well!
34 | 3. Modify `PROJ_NAME` to be the name of your project.
35 | 4. Do the same for `PROJECT_DESCRIPTION`.
36 | 5. If you are building just a library, then remove `${CMAKE_SOURCE_DIR}/src/main.cpp` from `COVERAGE_EXCLUDES`.
37 | 6. Modify the `LIBRARY_SOURCES` variable to match your project sources. Exclude `main.cpp`, if it exists.
38 | 7. If you are building a standalone library, then remove the following lines:
39 | ```
40 | add_executable(Project-Name main.cpp) # The main executable
41 | target_link_libraries(Project-Name Project-Name-lib) # Link our sources to the executable
42 | ```
43 | And later on in the file, remove:
44 | ```
45 | # Install the built library and executable into the appropriate directory
46 | install(TARGETS Project-Name DESTINATION bin)
47 | ```
48 | 8. Change the name `Project-Name` and `Project-Name-lib` to match your project name.
49 | 9. Change:
50 | ```
51 | install(FILES ${CMAKE_BINARY_DIR}/include/project-abbr/config.hpp DESTINATION include/project-abbr) # Install our configuration file
52 | ```
53 | to match the new folder name for your project, as described in step 8.
54 | 5. Modify `LICENSE` to match your software license.
55 | 6. Modify this file (`README.md`) to match the details of your project. You may want to keep the build steps, however.
56 | 7. Open the folder `doc`. Then:
57 | 1. Delete all the markdown pages from this directory and replace them with your own.
58 | 2. If a main page is needed, it needs to be in a file called `main_page.md`.
59 | 8. Open the folder `include`. Then:
60 | 1. Change the name of the folder `project-abbr` to something that matches your project (name or abbreviation). Delete all the files _except_ `config.hpp.in` in this directory and replace them with your public include files, if they exist.
61 | 9. Open the folder `src`. Then:
62 | 1. Remove all of the `.cpp` files in this folder and replace them with your source files and private includes.
63 | 10. Open the folder `test`. Then:
64 | 1. Replace all the files in this directory _except_ for `test_runner.cpp` with your doctest unit testing files.
65 | 2. In `test/CMakeLists.txt`, change `Project-Name-lib` to match the new name of your library. In addition, modify the `TEST_SOURCES` variable to match your new test files.
66 | 11. Delete the _by default hidden_ `.git` folder and then run `git init` to get a new repository!
67 |
68 | For details on how to set up the various continuous integration tools used in this project, check the [documentation](https://codedocs.xyz/arnavb/cpp14-project-template/setting_up_documentation.html).
69 |
70 | ### Building the Code
71 |
72 | #### Prerequisites
73 | The following tools must be preinstalled before using this template:
74 | - [`CMake`](https://cmake.org/install/) (At least v3.1): For building the code.
75 | - [`Doxygen`](https://www.stack.nl/~dimitri/doxygen/manual/install.html): For generating documentation.
76 | - [`LCOV`](http://ltp.sourceforge.net/coverage/lcov.php): For generating code coverage.
77 |
78 | In the snippets below, `CONFIGURATION` needs to be a valid [CMake configuration](https://cmake.org/cmake/help/v3.11/variable/CMAKE_BUILD_TYPE.html).
79 |
80 | #### Linux/OSX
81 |
82 | mkdir build && cd build
83 | cmake -D -DCMAKE_BUILD_TYPE=CONFIGURATION ..
84 | make
85 | make install
86 |
87 | #### Windows
88 |
89 | mkdir build && cd build
90 | cmake -D ..
91 | cmake --build --config CONFIGURATION .
92 | cmake --build --target INSTALL --config CONFIGURATION .
93 |
94 | For more details on configuration options and build targets, see the [documentation](https://codedocs.xyz/arnavb/cpp14-project-template/variables_and_targets.html).
95 |
96 | ## Running the Tests
97 |
98 | In order to run the tests, the option `BUILD_TESTS` needs to be set to `ON` during configuration. Then, invoking the tests is as simple as running:
99 |
100 | ctest
101 |
102 | ### Code Coverage
103 |
104 | In order to get the test coverage of the code, the option `ENABLE_COVERAGE` needs to be set to `ON` during configuration. In addition, `CMAKE_BUILD_TYPE` should be set to `Debug` (code coverage isn't supported for multi-config generators yet). Then, a coverage report can be generated by running:
105 |
106 | make coverage
107 |
108 | The resulting coverage will be placed in a directory called `coverage` in the build folder.
109 |
110 | ## Documentation
111 |
112 | The documentation for this project (sample code and usage of this project) is hosted on [codedocs.xyz](https://codedocs.xyz/arnavb/cpp14-project-template/index.html).
113 |
114 | Documentation about build targets, CMake options, the directory structure used, and documentation are all available in the link above.
115 |
116 | ## License
117 |
118 | 
119 |
120 | To the extent possible under law, [Arnav Borborah](https://github.com/arnavb/cpp14-project-template) has waived all copyright and related or neighboring rights to C++14 Project Template. This work is published from: United States.
121 |
122 | The above basically means that while you do not have to give me attribution for this template, it would be gladly appreciated!
123 |
--------------------------------------------------------------------------------
/appveyor.yml:
--------------------------------------------------------------------------------
1 | version: "{branch}-build-{build}"
2 |
3 | branches:
4 | only:
5 | - master
6 |
7 | os:
8 | - Visual Studio 2017
9 |
10 | init:
11 | - git config --global core.autocrlf input
12 |
13 | install:
14 | - git submodule update --init --recursive
15 |
16 | platform:
17 | - Win32
18 | - x64
19 |
20 | configuration:
21 | - Debug
22 | - Release
23 |
24 | before_build:
25 | - mkdir build && cd build
26 | - cmake -A%PLATFORM% -DBUILD_TESTS=ON -DGEN_DOCS=OFF ..
27 |
28 | build_script:
29 | - cmake --build . --config %CONFIGURATION% -- %MSBUILD_ARGS% # Build the code
30 | - ctest -C %CONFIGURATION% # Run tests
31 | - cmake --build . --config %CONFIGURATION% --target INSTALL -- %MSBUILD_ARGS% # Install the necessary files
32 |
--------------------------------------------------------------------------------
/cmake/Modules/CodeCoverage.cmake:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2012 - 2017, Lars Bilke
2 | # All rights reserved.
3 | #
4 | # Redistribution and use in source and binary forms, with or without modification,
5 | # are permitted provided that the following conditions are met:
6 | #
7 | # 1. Redistributions of source code must retain the above copyright notice, this
8 | # list of conditions and the following disclaimer.
9 | #
10 | # 2. Redistributions in binary form must reproduce the above copyright notice,
11 | # this list of conditions and the following disclaimer in the documentation
12 | # and/or other materials provided with the distribution.
13 | #
14 | # 3. Neither the name of the copyright holder nor the names of its contributors
15 | # may be used to endorse or promote products derived from this software without
16 | # specific prior written permission.
17 | #
18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19 | # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
22 | # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 | # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 | # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25 | # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 | # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 | #
29 | # CHANGES:
30 | #
31 | # 2012-01-31, Lars Bilke
32 | # - Enable Code Coverage
33 | #
34 | # 2013-09-17, Joakim Söderberg
35 | # - Added support for Clang.
36 | # - Some additional usage instructions.
37 | #
38 | # 2016-02-03, Lars Bilke
39 | # - Refactored functions to use named parameters
40 | #
41 | # 2017-06-02, Lars Bilke
42 | # - Merged with modified version from github.com/ufz/ogs
43 | #
44 | #
45 | # USAGE:
46 | #
47 | # 1. Copy this file into your cmake modules path.
48 | #
49 | # 2. Add the following line to your CMakeLists.txt:
50 | # include(CodeCoverage)
51 | #
52 | # 3. Append necessary compiler flags:
53 | # APPEND_COVERAGE_COMPILER_FLAGS()
54 | #
55 | # 4. If you need to exclude additional directories from the report, specify them
56 | # using the COVERAGE_EXCLUDES variable before calling SETUP_TARGET_FOR_COVERAGE.
57 | # Example:
58 | # set(COVERAGE_EXCLUDES 'dir1/*' 'dir2/*')
59 | #
60 | # 5. Use the functions described below to create a custom make target which
61 | # runs your test executable and produces a code coverage report.
62 | #
63 | # 6. Build a Debug build:
64 | # cmake -DCMAKE_BUILD_TYPE=Debug ..
65 | # make
66 | # make my_coverage_target
67 | #
68 |
69 | include(CMakeParseArguments)
70 |
71 | # Check prereqs
72 | find_program( GCOV_PATH gcov )
73 | find_program( LCOV_PATH NAMES lcov lcov.bat lcov.exe lcov.perl)
74 | find_program( GENHTML_PATH NAMES genhtml genhtml.perl genhtml.bat )
75 | find_program( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test)
76 | find_program( SIMPLE_PYTHON_EXECUTABLE python )
77 |
78 | if(NOT GCOV_PATH)
79 | message(FATAL_ERROR "gcov not found! Aborting...")
80 | endif() # NOT GCOV_PATH
81 |
82 | if("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
83 | if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3)
84 | message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...")
85 | endif()
86 | elseif(NOT CMAKE_COMPILER_IS_GNUCXX)
87 | message(FATAL_ERROR "Compiler is not GNU gcc! Aborting...")
88 | endif()
89 |
90 | set(COVERAGE_COMPILER_FLAGS "-g -O0 --coverage -fprofile-arcs -ftest-coverage"
91 | CACHE INTERNAL "")
92 |
93 | set(CMAKE_CXX_FLAGS_COVERAGE
94 | ${COVERAGE_COMPILER_FLAGS}
95 | CACHE STRING "Flags used by the C++ compiler during coverage builds."
96 | FORCE )
97 | set(CMAKE_C_FLAGS_COVERAGE
98 | ${COVERAGE_COMPILER_FLAGS}
99 | CACHE STRING "Flags used by the C compiler during coverage builds."
100 | FORCE )
101 | set(CMAKE_EXE_LINKER_FLAGS_COVERAGE
102 | ""
103 | CACHE STRING "Flags used for linking binaries during coverage builds."
104 | FORCE )
105 | set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
106 | ""
107 | CACHE STRING "Flags used by the shared libraries linker during coverage builds."
108 | FORCE )
109 | mark_as_advanced(
110 | CMAKE_CXX_FLAGS_COVERAGE
111 | CMAKE_C_FLAGS_COVERAGE
112 | CMAKE_EXE_LINKER_FLAGS_COVERAGE
113 | CMAKE_SHARED_LINKER_FLAGS_COVERAGE )
114 |
115 | if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
116 | message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading")
117 | endif() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug"
118 |
119 | if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
120 | link_libraries(gcov)
121 | else()
122 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
123 | endif()
124 |
125 | # Defines a target for running and collection code coverage information
126 | # Builds dependencies, runs the given executable and outputs reports.
127 | # NOTE! The executable should always have a ZERO as exit code otherwise
128 | # the coverage generation will not complete.
129 | #
130 | # SETUP_TARGET_FOR_COVERAGE(
131 | # NAME testrunner_coverage # New target name
132 | # EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
133 | # DEPENDENCIES testrunner # Dependencies to build first
134 | # )
135 | function(SETUP_TARGET_FOR_COVERAGE)
136 |
137 | set(options NONE)
138 | set(oneValueArgs NAME)
139 | set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
140 | cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
141 |
142 | if(NOT LCOV_PATH)
143 | message(FATAL_ERROR "lcov not found! Aborting...")
144 | endif() # NOT LCOV_PATH
145 |
146 | if(NOT GENHTML_PATH)
147 | message(FATAL_ERROR "genhtml not found! Aborting...")
148 | endif() # NOT GENHTML_PATH
149 |
150 | # Setup target
151 | add_custom_target(${Coverage_NAME}
152 |
153 | # Cleanup lcov
154 | COMMAND ${LCOV_PATH} --directory . --zerocounters
155 | # Create baseline to make sure untouched files show up in the report
156 | COMMAND ${LCOV_PATH} -c -i -d . -o ${Coverage_NAME}.base
157 |
158 | # Run tests
159 | COMMAND ${Coverage_EXECUTABLE}
160 |
161 | # Capturing lcov counters and generating report
162 | COMMAND ${LCOV_PATH} --directory . --capture --output-file ${Coverage_NAME}.info
163 | # add baseline counters
164 | COMMAND ${LCOV_PATH} -a ${Coverage_NAME}.base -a ${Coverage_NAME}.info --output-file ${Coverage_NAME}.total
165 | COMMAND ${LCOV_PATH} --remove ${Coverage_NAME}.total ${COVERAGE_EXCLUDES} --output-file ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned
166 | COMMAND ${GENHTML_PATH} -o ${Coverage_NAME} ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned
167 | COMMAND ${CMAKE_COMMAND} -E remove ${Coverage_NAME}.base ${Coverage_NAME}.total ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned
168 |
169 | WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
170 | DEPENDS ${Coverage_DEPENDENCIES}
171 | COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report."
172 | )
173 |
174 | # Show where to find the lcov info report
175 | add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
176 | COMMAND ;
177 | COMMENT "Lcov code coverage info report saved in ${Coverage_NAME}.info."
178 | )
179 |
180 | # Show info where to find the report
181 | add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
182 | COMMAND ;
183 | COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report."
184 | )
185 |
186 | endfunction() # SETUP_TARGET_FOR_COVERAGE
187 |
188 | # Defines a target for running and collection code coverage information
189 | # Builds dependencies, runs the given executable and outputs reports.
190 | # NOTE! The executable should always have a ZERO as exit code otherwise
191 | # the coverage generation will not complete.
192 | #
193 | # SETUP_TARGET_FOR_COVERAGE_COBERTURA(
194 | # NAME ctest_coverage # New target name
195 | # EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
196 | # DEPENDENCIES executable_target # Dependencies to build first
197 | # )
198 | function(SETUP_TARGET_FOR_COVERAGE_COBERTURA)
199 |
200 | set(options NONE)
201 | set(oneValueArgs NAME)
202 | set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
203 | cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
204 |
205 | if(NOT SIMPLE_PYTHON_EXECUTABLE)
206 | message(FATAL_ERROR "python not found! Aborting...")
207 | endif() # NOT SIMPLE_PYTHON_EXECUTABLE
208 |
209 | if(NOT GCOVR_PATH)
210 | message(FATAL_ERROR "gcovr not found! Aborting...")
211 | endif() # NOT GCOVR_PATH
212 |
213 | # Combine excludes to several -e arguments
214 | set(COBERTURA_EXCLUDES "")
215 | foreach(EXCLUDE ${COVERAGE_EXCLUDES})
216 | set(COBERTURA_EXCLUDES "-e ${EXCLUDE} ${COBERTURA_EXCLUDES}")
217 | endforeach()
218 |
219 | add_custom_target(${Coverage_NAME}
220 |
221 | # Run tests
222 | ${Coverage_EXECUTABLE}
223 |
224 | # Running gcovr
225 | COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} ${COBERTURA_EXCLUDES}
226 | -o ${Coverage_NAME}.xml
227 | WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
228 | DEPENDS ${Coverage_DEPENDENCIES}
229 | COMMENT "Running gcovr to produce Cobertura code coverage report."
230 | )
231 |
232 | # Show info where to find the report
233 | add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
234 | COMMAND ;
235 | COMMENT "Cobertura code coverage report saved in ${Coverage_NAME}.xml."
236 | )
237 |
238 | endfunction() # SETUP_TARGET_FOR_COVERAGE_COBERTURA
239 |
240 | function(APPEND_COVERAGE_COMPILER_FLAGS)
241 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
242 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
243 | message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}")
244 | endfunction() # APPEND_COVERAGE_COMPILER_FLAGS
245 |
--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
1 | ignore:
2 | - "test/"
3 | - "third_party/**/*"
4 |
5 | comment:
6 | layout: "header, diff, files"
7 | behavior: default
8 | require_changes: true
9 |
--------------------------------------------------------------------------------
/doc/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | find_package(Doxygen)
2 |
3 | if (DOXYGEN_FOUND)
4 | set(DOXYGEN_IN Doxyfile.in)
5 | set(DOXYGEN_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
6 |
7 | configure_file(${DOXYGEN_IN} ${DOXYGEN_OUT} @ONLY)
8 |
9 | add_custom_target(doc
10 | COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_OUT}
11 | WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
12 | VERBATIM
13 | )
14 |
15 | # Install the project's HTML documentation
16 | install(DIRECTORY ${CMAKE_BINARY_DIR}/doc/html/ DESTINATION share/project-abbr/doc)
17 | else (DOXYGEN_FOUND)
18 | message(FATAL_ERROR "Doxygen needs to be installed to generate documentation!")
19 | endif (DOXYGEN_FOUND)
20 |
--------------------------------------------------------------------------------
/doc/Doxyfile.in:
--------------------------------------------------------------------------------
1 | # Doxyfile 1.8.8
2 |
3 | # This file describes the settings to be used by the documentation system
4 | # doxygen (www.doxygen.org) for a project.
5 | #
6 | # All text after a double hash (##) is considered a comment and is placed in
7 | # front of the TAG it is preceding.
8 | #
9 | # All text after a single hash (#) is considered a comment and will be ignored.
10 | # The format is:
11 | # TAG = value [value, ...]
12 | # For lists, items can also be appended using:
13 | # TAG += value [value, ...]
14 | # Values that contain spaces should be placed between quotes (\" \").
15 |
16 | #---------------------------------------------------------------------------
17 | # Project related configuration options
18 | #---------------------------------------------------------------------------
19 |
20 | # This tag specifies the encoding used for all characters in the config file
21 | # that follow. The default is UTF-8 which is also the encoding used for all text
22 | # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
23 | # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
24 | # for the list of possible encodings.
25 | # The default value is: UTF-8.
26 |
27 | DOXYFILE_ENCODING = UTF-8
28 |
29 | # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
30 | # double-quotes, unless you are using Doxywizard) that should identify the
31 | # project for which the documentation is generated. This name is used in the
32 | # title of most generated pages and in a few other places.
33 | # The default value is: My Project.
34 |
35 | PROJECT_NAME = @PROJ_NAME@
36 |
37 | # The PROJECT_NUMBER tag can be used to enter a project or revision number. This
38 | # could be handy for archiving the generated documentation or if some version
39 | # control system is used.
40 |
41 | PROJECT_NUMBER = @Project-Name_VERSION@
42 |
43 | # Using the PROJECT_BRIEF tag one can provide an optional one line description
44 | # for a project that appears at the top of each page and should give viewer a
45 | # quick idea about the purpose of the project. Keep the description short.
46 |
47 | PROJECT_BRIEF = @PROJECT_DESCRIPTION@
48 |
49 | # With the PROJECT_LOGO tag one can specify an logo or icon that is included in
50 | # the documentation. The maximum height of the logo should not exceed 55 pixels
51 | # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
52 | # to the output directory.
53 |
54 | PROJECT_LOGO =
55 |
56 | # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
57 | # into which the generated documentation will be written. If a relative path is
58 | # entered, it will be relative to the location where doxygen was started. If
59 | # left blank the current directory will be used.
60 |
61 | OUTPUT_DIRECTORY = @CMAKE_BINARY_DIR@/doc/
62 |
63 | # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
64 | # directories (in 2 levels) under the output directory of each output format and
65 | # will distribute the generated files over these directories. Enabling this
66 | # option can be useful when feeding doxygen a huge amount of source files, where
67 | # putting all generated files in the same directory would otherwise causes
68 | # performance problems for the file system.
69 | # The default value is: NO.
70 |
71 | CREATE_SUBDIRS = NO
72 |
73 | # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
74 | # characters to appear in the names of generated files. If set to NO, non-ASCII
75 | # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
76 | # U+3044.
77 | # The default value is: NO.
78 |
79 | ALLOW_UNICODE_NAMES = NO
80 |
81 | # The OUTPUT_LANGUAGE tag is used to specify the language in which all
82 | # documentation generated by doxygen is written. Doxygen will use this
83 | # information to generate all constant output in the proper language.
84 | # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
85 | # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
86 | # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
87 | # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
88 | # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
89 | # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
90 | # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
91 | # Ukrainian and Vietnamese.
92 | # The default value is: English.
93 |
94 | OUTPUT_LANGUAGE = English
95 |
96 | # If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
97 | # descriptions after the members that are listed in the file and class
98 | # documentation (similar to Javadoc). Set to NO to disable this.
99 | # The default value is: YES.
100 |
101 | BRIEF_MEMBER_DESC = YES
102 |
103 | # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
104 | # description of a member or function before the detailed description
105 | #
106 | # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
107 | # brief descriptions will be completely suppressed.
108 | # The default value is: YES.
109 |
110 | REPEAT_BRIEF = YES
111 |
112 | # This tag implements a quasi-intelligent brief description abbreviator that is
113 | # used to form the text in various listings. Each string in this list, if found
114 | # as the leading text of the brief description, will be stripped from the text
115 | # and the result, after processing the whole list, is used as the annotated
116 | # text. Otherwise, the brief description is used as-is. If left blank, the
117 | # following values are used ($name is automatically replaced with the name of
118 | # the entity):The $name class, The $name widget, The $name file, is, provides,
119 | # specifies, contains, represents, a, an and the.
120 |
121 | ABBREVIATE_BRIEF =
122 |
123 | # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
124 | # doxygen will generate a detailed section even if there is only a brief
125 | # description.
126 | # The default value is: NO.
127 |
128 | ALWAYS_DETAILED_SEC = NO
129 |
130 | # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
131 | # inherited members of a class in the documentation of that class as if those
132 | # members were ordinary class members. Constructors, destructors and assignment
133 | # operators of the base classes will not be shown.
134 | # The default value is: NO.
135 |
136 | INLINE_INHERITED_MEMB = NO
137 |
138 | # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
139 | # before files name in the file list and in the header files. If set to NO the
140 | # shortest path that makes the file name unique will be used
141 | # The default value is: YES.
142 |
143 | FULL_PATH_NAMES = YES
144 |
145 | # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
146 | # Stripping is only done if one of the specified strings matches the left-hand
147 | # part of the path. The tag can be used to show relative paths in the file list.
148 | # If left blank the directory from which doxygen is run is used as the path to
149 | # strip.
150 | #
151 | # Note that you can specify absolute paths here, but also relative paths, which
152 | # will be relative from the directory where doxygen is started.
153 | # This tag requires that the tag FULL_PATH_NAMES is set to YES.
154 |
155 | STRIP_FROM_PATH =
156 |
157 | # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
158 | # path mentioned in the documentation of a class, which tells the reader which
159 | # header file to include in order to use a class. If left blank only the name of
160 | # the header file containing the class definition is used. Otherwise one should
161 | # specify the list of include paths that are normally passed to the compiler
162 | # using the -I flag.
163 |
164 | STRIP_FROM_INC_PATH =
165 |
166 | # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
167 | # less readable) file names. This can be useful is your file systems doesn't
168 | # support long names like on DOS, Mac, or CD-ROM.
169 | # The default value is: NO.
170 |
171 | SHORT_NAMES = NO
172 |
173 | # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
174 | # first line (until the first dot) of a Javadoc-style comment as the brief
175 | # description. If set to NO, the Javadoc-style will behave just like regular Qt-
176 | # style comments (thus requiring an explicit @brief command for a brief
177 | # description.)
178 | # The default value is: NO.
179 |
180 | JAVADOC_AUTOBRIEF = NO
181 |
182 | # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
183 | # line (until the first dot) of a Qt-style comment as the brief description. If
184 | # set to NO, the Qt-style will behave just like regular Qt-style comments (thus
185 | # requiring an explicit \brief command for a brief description.)
186 | # The default value is: NO.
187 |
188 | QT_AUTOBRIEF = NO
189 |
190 | # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
191 | # multi-line C++ special comment block (i.e. a block of //! or /// comments) as
192 | # a brief description. This used to be the default behavior. The new default is
193 | # to treat a multi-line C++ comment block as a detailed description. Set this
194 | # tag to YES if you prefer the old behavior instead.
195 | #
196 | # Note that setting this tag to YES also means that rational rose comments are
197 | # not recognized any more.
198 | # The default value is: NO.
199 |
200 | MULTILINE_CPP_IS_BRIEF = NO
201 |
202 | # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
203 | # documentation from any documented member that it re-implements.
204 | # The default value is: YES.
205 |
206 | INHERIT_DOCS = YES
207 |
208 | # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
209 | # new page for each member. If set to NO, the documentation of a member will be
210 | # part of the file/class/namespace that contains it.
211 | # The default value is: NO.
212 |
213 | SEPARATE_MEMBER_PAGES = NO
214 |
215 | # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
216 | # uses this value to replace tabs by spaces in code fragments.
217 | # Minimum value: 1, maximum value: 16, default value: 4.
218 |
219 | TAB_SIZE = 4
220 |
221 | # This tag can be used to specify a number of aliases that act as commands in
222 | # the documentation. An alias has the form:
223 | # name=value
224 | # For example adding
225 | # "sideeffect=@par Side Effects:\n"
226 | # will allow you to put the command \sideeffect (or @sideeffect) in the
227 | # documentation, which will result in a user-defined paragraph with heading
228 | # "Side Effects:". You can put \n's in the value part of an alias to insert
229 | # newlines.
230 |
231 | ALIASES =
232 |
233 | # This tag can be used to specify a number of word-keyword mappings (TCL only).
234 | # A mapping has the form "name=value". For example adding "class=itcl::class"
235 | # will allow you to use the command class in the itcl::class meaning.
236 |
237 | TCL_SUBST =
238 |
239 | # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
240 | # only. Doxygen will then generate output that is more tailored for C. For
241 | # instance, some of the names that are used will be different. The list of all
242 | # members will be omitted, etc.
243 | # The default value is: NO.
244 |
245 | OPTIMIZE_OUTPUT_FOR_C = NO
246 |
247 | # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
248 | # Python sources only. Doxygen will then generate output that is more tailored
249 | # for that language. For instance, namespaces will be presented as packages,
250 | # qualified scopes will look different, etc.
251 | # The default value is: NO.
252 |
253 | OPTIMIZE_OUTPUT_JAVA = NO
254 |
255 | # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
256 | # sources. Doxygen will then generate output that is tailored for Fortran.
257 | # The default value is: NO.
258 |
259 | OPTIMIZE_FOR_FORTRAN = NO
260 |
261 | # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
262 | # sources. Doxygen will then generate output that is tailored for VHDL.
263 | # The default value is: NO.
264 |
265 | OPTIMIZE_OUTPUT_VHDL = NO
266 |
267 | # Doxygen selects the parser to use depending on the extension of the files it
268 | # parses. With this tag you can assign which parser to use for a given
269 | # extension. Doxygen has a built-in mapping, but you can override or extend it
270 | # using this tag. The format is ext=language, where ext is a file extension, and
271 | # language is one of the parsers supported by doxygen: IDL, Java, Javascript,
272 | # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
273 | # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
274 | # Fortran. In the later case the parser tries to guess whether the code is fixed
275 | # or free formatted code, this is the default for Fortran type files), VHDL. For
276 | # instance to make doxygen treat .inc files as Fortran files (default is PHP),
277 | # and .f files as C (default is Fortran), use: inc=Fortran f=C.
278 | #
279 | # Note For files without extension you can use no_extension as a placeholder.
280 | #
281 | # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
282 | # the files are not read by doxygen.
283 |
284 | EXTENSION_MAPPING =
285 |
286 | # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
287 | # according to the Markdown format, which allows for more readable
288 | # documentation. See http://daringfireball.net/projects/markdown/ for details.
289 | # The output of markdown processing is further processed by doxygen, so you can
290 | # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
291 | # case of backward compatibilities issues.
292 | # The default value is: YES.
293 |
294 | MARKDOWN_SUPPORT = YES
295 |
296 | # When enabled doxygen tries to link words that correspond to documented
297 | # classes, or namespaces to their corresponding documentation. Such a link can
298 | # be prevented in individual cases by by putting a % sign in front of the word
299 | # or globally by setting AUTOLINK_SUPPORT to NO.
300 | # The default value is: YES.
301 |
302 | AUTOLINK_SUPPORT = YES
303 |
304 | # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
305 | # to include (a tag file for) the STL sources as input, then you should set this
306 | # tag to YES in order to let doxygen match functions declarations and
307 | # definitions whose arguments contain STL classes (e.g. func(std::string);
308 | # versus func(std::string) {}). This also make the inheritance and collaboration
309 | # diagrams that involve STL classes more complete and accurate.
310 | # The default value is: NO.
311 |
312 | BUILTIN_STL_SUPPORT = NO
313 |
314 | # If you use Microsoft's C++/CLI language, you should set this option to YES to
315 | # enable parsing support.
316 | # The default value is: NO.
317 |
318 | CPP_CLI_SUPPORT = NO
319 |
320 | # Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
321 | # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
322 | # will parse them like normal C++ but will assume all classes use public instead
323 | # of private inheritance when no explicit protection keyword is present.
324 | # The default value is: NO.
325 |
326 | SIP_SUPPORT = NO
327 |
328 | # For Microsoft's IDL there are propget and propput attributes to indicate
329 | # getter and setter methods for a property. Setting this option to YES will make
330 | # doxygen to replace the get and set methods by a property in the documentation.
331 | # This will only work if the methods are indeed getting or setting a simple
332 | # type. If this is not the case, or you want to show the methods anyway, you
333 | # should set this option to NO.
334 | # The default value is: YES.
335 |
336 | IDL_PROPERTY_SUPPORT = YES
337 |
338 | # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
339 | # tag is set to YES, then doxygen will reuse the documentation of the first
340 | # member in the group (if any) for the other members of the group. By default
341 | # all members of a group must be documented explicitly.
342 | # The default value is: NO.
343 |
344 | DISTRIBUTE_GROUP_DOC = NO
345 |
346 | # Set the SUBGROUPING tag to YES to allow class member groups of the same type
347 | # (for instance a group of public functions) to be put as a subgroup of that
348 | # type (e.g. under the Public Functions section). Set it to NO to prevent
349 | # subgrouping. Alternatively, this can be done per class using the
350 | # \nosubgrouping command.
351 | # The default value is: YES.
352 |
353 | SUBGROUPING = YES
354 |
355 | # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
356 | # are shown inside the group in which they are included (e.g. using \ingroup)
357 | # instead of on a separate page (for HTML and Man pages) or section (for LaTeX
358 | # and RTF).
359 | #
360 | # Note that this feature does not work in combination with
361 | # SEPARATE_MEMBER_PAGES.
362 | # The default value is: NO.
363 |
364 | INLINE_GROUPED_CLASSES = NO
365 |
366 | # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
367 | # with only public data fields or simple typedef fields will be shown inline in
368 | # the documentation of the scope in which they are defined (i.e. file,
369 | # namespace, or group documentation), provided this scope is documented. If set
370 | # to NO, structs, classes, and unions are shown on a separate page (for HTML and
371 | # Man pages) or section (for LaTeX and RTF).
372 | # The default value is: NO.
373 |
374 | INLINE_SIMPLE_STRUCTS = NO
375 |
376 | # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
377 | # enum is documented as struct, union, or enum with the name of the typedef. So
378 | # typedef struct TypeS {} TypeT, will appear in the documentation as a struct
379 | # with name TypeT. When disabled the typedef will appear as a member of a file,
380 | # namespace, or class. And the struct will be named TypeS. This can typically be
381 | # useful for C code in case the coding convention dictates that all compound
382 | # types are typedef'ed and only the typedef is referenced, never the tag name.
383 | # The default value is: NO.
384 |
385 | TYPEDEF_HIDES_STRUCT = NO
386 |
387 | # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
388 | # cache is used to resolve symbols given their name and scope. Since this can be
389 | # an expensive process and often the same symbol appears multiple times in the
390 | # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
391 | # doxygen will become slower. If the cache is too large, memory is wasted. The
392 | # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
393 | # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
394 | # symbols. At the end of a run doxygen will report the cache usage and suggest
395 | # the optimal cache size from a speed point of view.
396 | # Minimum value: 0, maximum value: 9, default value: 0.
397 |
398 | LOOKUP_CACHE_SIZE = 0
399 |
400 | #---------------------------------------------------------------------------
401 | # Build related configuration options
402 | #---------------------------------------------------------------------------
403 |
404 | # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
405 | # documentation are documented, even if no documentation was available. Private
406 | # class members and static file members will be hidden unless the
407 | # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
408 | # Note: This will also disable the warnings about undocumented members that are
409 | # normally produced when WARNINGS is set to YES.
410 | # The default value is: NO.
411 |
412 | EXTRACT_ALL = NO
413 |
414 | # If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
415 | # be included in the documentation.
416 | # The default value is: NO.
417 |
418 | EXTRACT_PRIVATE = NO
419 |
420 | # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
421 | # scope will be included in the documentation.
422 | # The default value is: NO.
423 |
424 | EXTRACT_PACKAGE = NO
425 |
426 | # If the EXTRACT_STATIC tag is set to YES all static members of a file will be
427 | # included in the documentation.
428 | # The default value is: NO.
429 |
430 | EXTRACT_STATIC = NO
431 |
432 | # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
433 | # locally in source files will be included in the documentation. If set to NO
434 | # only classes defined in header files are included. Does not have any effect
435 | # for Java sources.
436 | # The default value is: YES.
437 |
438 | EXTRACT_LOCAL_CLASSES = YES
439 |
440 | # This flag is only useful for Objective-C code. When set to YES local methods,
441 | # which are defined in the implementation section but not in the interface are
442 | # included in the documentation. If set to NO only methods in the interface are
443 | # included.
444 | # The default value is: NO.
445 |
446 | EXTRACT_LOCAL_METHODS = NO
447 |
448 | # If this flag is set to YES, the members of anonymous namespaces will be
449 | # extracted and appear in the documentation as a namespace called
450 | # 'anonymous_namespace{file}', where file will be replaced with the base name of
451 | # the file that contains the anonymous namespace. By default anonymous namespace
452 | # are hidden.
453 | # The default value is: NO.
454 |
455 | EXTRACT_ANON_NSPACES = NO
456 |
457 | # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
458 | # undocumented members inside documented classes or files. If set to NO these
459 | # members will be included in the various overviews, but no documentation
460 | # section is generated. This option has no effect if EXTRACT_ALL is enabled.
461 | # The default value is: NO.
462 |
463 | HIDE_UNDOC_MEMBERS = NO
464 |
465 | # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
466 | # undocumented classes that are normally visible in the class hierarchy. If set
467 | # to NO these classes will be included in the various overviews. This option has
468 | # no effect if EXTRACT_ALL is enabled.
469 | # The default value is: NO.
470 |
471 | HIDE_UNDOC_CLASSES = NO
472 |
473 | # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
474 | # (class|struct|union) declarations. If set to NO these declarations will be
475 | # included in the documentation.
476 | # The default value is: NO.
477 |
478 | HIDE_FRIEND_COMPOUNDS = NO
479 |
480 | # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
481 | # documentation blocks found inside the body of a function. If set to NO these
482 | # blocks will be appended to the function's detailed documentation block.
483 | # The default value is: NO.
484 |
485 | HIDE_IN_BODY_DOCS = NO
486 |
487 | # The INTERNAL_DOCS tag determines if documentation that is typed after a
488 | # \internal command is included. If the tag is set to NO then the documentation
489 | # will be excluded. Set it to YES to include the internal documentation.
490 | # The default value is: NO.
491 |
492 | INTERNAL_DOCS = NO
493 |
494 | # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
495 | # names in lower-case letters. If set to YES upper-case letters are also
496 | # allowed. This is useful if you have classes or files whose names only differ
497 | # in case and if your file system supports case sensitive file names. Windows
498 | # and Mac users are advised to set this option to NO.
499 | # The default value is: system dependent.
500 |
501 | CASE_SENSE_NAMES = YES
502 |
503 | # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
504 | # their full class and namespace scopes in the documentation. If set to YES the
505 | # scope will be hidden.
506 | # The default value is: NO.
507 |
508 | HIDE_SCOPE_NAMES = NO
509 |
510 | # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
511 | # the files that are included by a file in the documentation of that file.
512 | # The default value is: YES.
513 |
514 | SHOW_INCLUDE_FILES = YES
515 |
516 | # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
517 | # grouped member an include statement to the documentation, telling the reader
518 | # which file to include in order to use the member.
519 | # The default value is: NO.
520 |
521 | SHOW_GROUPED_MEMB_INC = NO
522 |
523 | # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
524 | # files with double quotes in the documentation rather than with sharp brackets.
525 | # The default value is: NO.
526 |
527 | FORCE_LOCAL_INCLUDES = NO
528 |
529 | # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
530 | # documentation for inline members.
531 | # The default value is: YES.
532 |
533 | INLINE_INFO = YES
534 |
535 | # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
536 | # (detailed) documentation of file and class members alphabetically by member
537 | # name. If set to NO the members will appear in declaration order.
538 | # The default value is: YES.
539 |
540 | SORT_MEMBER_DOCS = YES
541 |
542 | # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
543 | # descriptions of file, namespace and class members alphabetically by member
544 | # name. If set to NO the members will appear in declaration order. Note that
545 | # this will also influence the order of the classes in the class list.
546 | # The default value is: NO.
547 |
548 | SORT_BRIEF_DOCS = NO
549 |
550 | # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
551 | # (brief and detailed) documentation of class members so that constructors and
552 | # destructors are listed first. If set to NO the constructors will appear in the
553 | # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
554 | # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
555 | # member documentation.
556 | # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
557 | # detailed member documentation.
558 | # The default value is: NO.
559 |
560 | SORT_MEMBERS_CTORS_1ST = NO
561 |
562 | # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
563 | # of group names into alphabetical order. If set to NO the group names will
564 | # appear in their defined order.
565 | # The default value is: NO.
566 |
567 | SORT_GROUP_NAMES = NO
568 |
569 | # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
570 | # fully-qualified names, including namespaces. If set to NO, the class list will
571 | # be sorted only by class name, not including the namespace part.
572 | # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
573 | # Note: This option applies only to the class list, not to the alphabetical
574 | # list.
575 | # The default value is: NO.
576 |
577 | SORT_BY_SCOPE_NAME = NO
578 |
579 | # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
580 | # type resolution of all parameters of a function it will reject a match between
581 | # the prototype and the implementation of a member function even if there is
582 | # only one candidate or it is obvious which candidate to choose by doing a
583 | # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
584 | # accept a match between prototype and implementation in such cases.
585 | # The default value is: NO.
586 |
587 | STRICT_PROTO_MATCHING = NO
588 |
589 | # The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
590 | # todo list. This list is created by putting \todo commands in the
591 | # documentation.
592 | # The default value is: YES.
593 |
594 | GENERATE_TODOLIST = YES
595 |
596 | # The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
597 | # test list. This list is created by putting \test commands in the
598 | # documentation.
599 | # The default value is: YES.
600 |
601 | GENERATE_TESTLIST = YES
602 |
603 | # The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
604 | # list. This list is created by putting \bug commands in the documentation.
605 | # The default value is: YES.
606 |
607 | GENERATE_BUGLIST = YES
608 |
609 | # The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
610 | # the deprecated list. This list is created by putting \deprecated commands in
611 | # the documentation.
612 | # The default value is: YES.
613 |
614 | GENERATE_DEPRECATEDLIST= YES
615 |
616 | # The ENABLED_SECTIONS tag can be used to enable conditional documentation
617 | # sections, marked by \if ... \endif and \cond
618 | # ... \endcond blocks.
619 |
620 | ENABLED_SECTIONS =
621 |
622 | # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
623 | # initial value of a variable or macro / define can have for it to appear in the
624 | # documentation. If the initializer consists of more lines than specified here
625 | # it will be hidden. Use a value of 0 to hide initializers completely. The
626 | # appearance of the value of individual variables and macros / defines can be
627 | # controlled using \showinitializer or \hideinitializer command in the
628 | # documentation regardless of this setting.
629 | # Minimum value: 0, maximum value: 10000, default value: 30.
630 |
631 | MAX_INITIALIZER_LINES = 30
632 |
633 | # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
634 | # the bottom of the documentation of classes and structs. If set to YES the list
635 | # will mention the files that were used to generate the documentation.
636 | # The default value is: YES.
637 |
638 | SHOW_USED_FILES = YES
639 |
640 | # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
641 | # will remove the Files entry from the Quick Index and from the Folder Tree View
642 | # (if specified).
643 | # The default value is: YES.
644 |
645 | SHOW_FILES = YES
646 |
647 | # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
648 | # page. This will remove the Namespaces entry from the Quick Index and from the
649 | # Folder Tree View (if specified).
650 | # The default value is: YES.
651 |
652 | SHOW_NAMESPACES = YES
653 |
654 | # The FILE_VERSION_FILTER tag can be used to specify a program or script that
655 | # doxygen should invoke to get the current version for each file (typically from
656 | # the version control system). Doxygen will invoke the program by executing (via
657 | # popen()) the command command input-file, where command is the value of the
658 | # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
659 | # by doxygen. Whatever the program writes to standard output is used as the file
660 | # version. For an example see the documentation.
661 |
662 | FILE_VERSION_FILTER =
663 |
664 | # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
665 | # by doxygen. The layout file controls the global structure of the generated
666 | # output files in an output format independent way. To create the layout file
667 | # that represents doxygen's defaults, run doxygen with the -l option. You can
668 | # optionally specify a file name after the option, if omitted DoxygenLayout.xml
669 | # will be used as the name of the layout file.
670 | #
671 | # Note that if you run doxygen from a directory containing a file called
672 | # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
673 | # tag is left empty.
674 |
675 | LAYOUT_FILE =
676 |
677 | # The CITE_BIB_FILES tag can be used to specify one or more bib files containing
678 | # the reference definitions. This must be a list of .bib files. The .bib
679 | # extension is automatically appended if omitted. This requires the bibtex tool
680 | # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
681 | # For LaTeX the style of the bibliography can be controlled using
682 | # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
683 | # search path. See also \cite for info how to create references.
684 |
685 | CITE_BIB_FILES =
686 |
687 | #---------------------------------------------------------------------------
688 | # Configuration options related to warning and progress messages
689 | #---------------------------------------------------------------------------
690 |
691 | # The QUIET tag can be used to turn on/off the messages that are generated to
692 | # standard output by doxygen. If QUIET is set to YES this implies that the
693 | # messages are off.
694 | # The default value is: NO.
695 |
696 | QUIET = NO
697 |
698 | # The WARNINGS tag can be used to turn on/off the warning messages that are
699 | # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
700 | # this implies that the warnings are on.
701 | #
702 | # Tip: Turn warnings on while writing the documentation.
703 | # The default value is: YES.
704 |
705 | WARNINGS = YES
706 |
707 | # If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
708 | # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
709 | # will automatically be disabled.
710 | # The default value is: YES.
711 |
712 | WARN_IF_UNDOCUMENTED = YES
713 |
714 | # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
715 | # potential errors in the documentation, such as not documenting some parameters
716 | # in a documented function, or documenting parameters that don't exist or using
717 | # markup commands wrongly.
718 | # The default value is: YES.
719 |
720 | WARN_IF_DOC_ERROR = YES
721 |
722 | # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
723 | # are documented, but have no documentation for their parameters or return
724 | # value. If set to NO doxygen will only warn about wrong or incomplete parameter
725 | # documentation, but not about the absence of documentation.
726 | # The default value is: NO.
727 |
728 | WARN_NO_PARAMDOC = NO
729 |
730 | # The WARN_FORMAT tag determines the format of the warning messages that doxygen
731 | # can produce. The string should contain the $file, $line, and $text tags, which
732 | # will be replaced by the file and line number from which the warning originated
733 | # and the warning text. Optionally the format may contain $version, which will
734 | # be replaced by the version of the file (if it could be obtained via
735 | # FILE_VERSION_FILTER)
736 | # The default value is: $file:$line: $text.
737 |
738 | WARN_FORMAT = "$file:$line: $text"
739 |
740 | # The WARN_LOGFILE tag can be used to specify a file to which warning and error
741 | # messages should be written. If left blank the output is written to standard
742 | # error (stderr).
743 |
744 | WARN_LOGFILE =
745 |
746 | #---------------------------------------------------------------------------
747 | # Configuration options related to the input files
748 | #---------------------------------------------------------------------------
749 |
750 | # The INPUT tag is used to specify the files and/or directories that contain
751 | # documented source files. You may enter file names like myfile.cpp or
752 | # directories like /usr/src/myproject. Separate the files or directories with
753 | # spaces.
754 | # Note: If this tag is empty the current directory is searched.
755 |
756 | INPUT = @CMAKE_SOURCE_DIR@/doc/ \
757 | @CMAKE_SOURCE_DIR@/include/
758 |
759 | # This tag can be used to specify the character encoding of the source files
760 | # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
761 | # libiconv (or the iconv built into libc) for the transcoding. See the libiconv
762 | # documentation (see: http://www.gnu.org/software/libiconv) for the list of
763 | # possible encodings.
764 | # The default value is: UTF-8.
765 |
766 | INPUT_ENCODING = UTF-8
767 |
768 | # If the value of the INPUT tag contains directories, you can use the
769 | # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
770 | # *.h) to filter out the source-files in the directories. If left blank the
771 | # following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
772 | # *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
773 | # *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
774 | # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
775 | # *.qsf, *.as and *.js.
776 |
777 | FILE_PATTERNS =
778 |
779 | # The RECURSIVE tag can be used to specify whether or not subdirectories should
780 | # be searched for input files as well.
781 | # The default value is: NO.
782 |
783 | RECURSIVE = YES
784 |
785 | # The EXCLUDE tag can be used to specify files and/or directories that should be
786 | # excluded from the INPUT source files. This way you can easily exclude a
787 | # subdirectory from a directory tree whose root is specified with the INPUT tag.
788 | #
789 | # Note that relative paths are relative to the directory from which doxygen is
790 | # run.
791 |
792 | EXCLUDE =
793 |
794 | # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
795 | # directories that are symbolic links (a Unix file system feature) are excluded
796 | # from the input.
797 | # The default value is: NO.
798 |
799 | EXCLUDE_SYMLINKS = NO
800 |
801 | # If the value of the INPUT tag contains directories, you can use the
802 | # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
803 | # certain files from those directories.
804 | #
805 | # Note that the wildcards are matched against the file with absolute path, so to
806 | # exclude all test directories for example use the pattern */test/*
807 |
808 | EXCLUDE_PATTERNS =
809 |
810 | # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
811 | # (namespaces, classes, functions, etc.) that should be excluded from the
812 | # output. The symbol name can be a fully qualified name, a word, or if the
813 | # wildcard * is used, a substring. Examples: ANamespace, AClass,
814 | # AClass::ANamespace, ANamespace::*Test
815 | #
816 | # Note that the wildcards are matched against the file with absolute path, so to
817 | # exclude all test directories use the pattern */test/*
818 |
819 | EXCLUDE_SYMBOLS =
820 |
821 | # The EXAMPLE_PATH tag can be used to specify one or more files or directories
822 | # that contain example code fragments that are included (see the \include
823 | # command).
824 |
825 | EXAMPLE_PATH =
826 |
827 | # If the value of the EXAMPLE_PATH tag contains directories, you can use the
828 | # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
829 | # *.h) to filter out the source-files in the directories. If left blank all
830 | # files are included.
831 |
832 | EXAMPLE_PATTERNS =
833 |
834 | # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
835 | # searched for input files to be used with the \include or \dontinclude commands
836 | # irrespective of the value of the RECURSIVE tag.
837 | # The default value is: NO.
838 |
839 | EXAMPLE_RECURSIVE = NO
840 |
841 | # The IMAGE_PATH tag can be used to specify one or more files or directories
842 | # that contain images that are to be included in the documentation (see the
843 | # \image command).
844 |
845 | IMAGE_PATH =
846 |
847 | # The INPUT_FILTER tag can be used to specify a program that doxygen should
848 | # invoke to filter for each input file. Doxygen will invoke the filter program
849 | # by executing (via popen()) the command:
850 | #
851 | #
852 | #
853 | # where is the value of the INPUT_FILTER tag, and is the
854 | # name of an input file. Doxygen will then use the output that the filter
855 | # program writes to standard output. If FILTER_PATTERNS is specified, this tag
856 | # will be ignored.
857 | #
858 | # Note that the filter must not add or remove lines; it is applied before the
859 | # code is scanned, but not when the output code is generated. If lines are added
860 | # or removed, the anchors will not be placed correctly.
861 |
862 | INPUT_FILTER =
863 |
864 | # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
865 | # basis. Doxygen will compare the file name with each pattern and apply the
866 | # filter if there is a match. The filters are a list of the form: pattern=filter
867 | # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
868 | # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
869 | # patterns match the file name, INPUT_FILTER is applied.
870 |
871 | FILTER_PATTERNS =
872 |
873 | # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
874 | # INPUT_FILTER ) will also be used to filter the input files that are used for
875 | # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
876 | # The default value is: NO.
877 |
878 | FILTER_SOURCE_FILES = NO
879 |
880 | # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
881 | # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
882 | # it is also possible to disable source filtering for a specific pattern using
883 | # *.ext= (so without naming a filter).
884 | # This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
885 |
886 | FILTER_SOURCE_PATTERNS =
887 |
888 | # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
889 | # is part of the input, its contents will be placed on the main page
890 | # (index.html). This can be useful if you have a project on for instance GitHub
891 | # and want to reuse the introduction page also for the doxygen output.
892 |
893 | USE_MDFILE_AS_MAINPAGE = @CMAKE_SOURCE_DIR@/doc/main_page.md
894 |
895 | #---------------------------------------------------------------------------
896 | # Configuration options related to source browsing
897 | #---------------------------------------------------------------------------
898 |
899 | # If the SOURCE_BROWSER tag is set to YES then a list of source files will be
900 | # generated. Documented entities will be cross-referenced with these sources.
901 | #
902 | # Note: To get rid of all source code in the generated output, make sure that
903 | # also VERBATIM_HEADERS is set to NO.
904 | # The default value is: NO.
905 |
906 | SOURCE_BROWSER = NO
907 |
908 | # Setting the INLINE_SOURCES tag to YES will include the body of functions,
909 | # classes and enums directly into the documentation.
910 | # The default value is: NO.
911 |
912 | INLINE_SOURCES = NO
913 |
914 | # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
915 | # special comment blocks from generated source code fragments. Normal C, C++ and
916 | # Fortran comments will always remain visible.
917 | # The default value is: YES.
918 |
919 | STRIP_CODE_COMMENTS = YES
920 |
921 | # If the REFERENCED_BY_RELATION tag is set to YES then for each documented
922 | # function all documented functions referencing it will be listed.
923 | # The default value is: NO.
924 |
925 | REFERENCED_BY_RELATION = NO
926 |
927 | # If the REFERENCES_RELATION tag is set to YES then for each documented function
928 | # all documented entities called/used by that function will be listed.
929 | # The default value is: NO.
930 |
931 | REFERENCES_RELATION = NO
932 |
933 | # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
934 | # to YES, then the hyperlinks from functions in REFERENCES_RELATION and
935 | # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
936 | # link to the documentation.
937 | # The default value is: YES.
938 |
939 | REFERENCES_LINK_SOURCE = YES
940 |
941 | # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
942 | # source code will show a tooltip with additional information such as prototype,
943 | # brief description and links to the definition and documentation. Since this
944 | # will make the HTML file larger and loading of large files a bit slower, you
945 | # can opt to disable this feature.
946 | # The default value is: YES.
947 | # This tag requires that the tag SOURCE_BROWSER is set to YES.
948 |
949 | SOURCE_TOOLTIPS = YES
950 |
951 | # If the USE_HTAGS tag is set to YES then the references to source code will
952 | # point to the HTML generated by the htags(1) tool instead of doxygen built-in
953 | # source browser. The htags tool is part of GNU's global source tagging system
954 | # (see http://www.gnu.org/software/global/global.html). You will need version
955 | # 4.8.6 or higher.
956 | #
957 | # To use it do the following:
958 | # - Install the latest version of global
959 | # - Enable SOURCE_BROWSER and USE_HTAGS in the config file
960 | # - Make sure the INPUT points to the root of the source tree
961 | # - Run doxygen as normal
962 | #
963 | # Doxygen will invoke htags (and that will in turn invoke gtags), so these
964 | # tools must be available from the command line (i.e. in the search path).
965 | #
966 | # The result: instead of the source browser generated by doxygen, the links to
967 | # source code will now point to the output of htags.
968 | # The default value is: NO.
969 | # This tag requires that the tag SOURCE_BROWSER is set to YES.
970 |
971 | USE_HTAGS = NO
972 |
973 | # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
974 | # verbatim copy of the header file for each class for which an include is
975 | # specified. Set to NO to disable this.
976 | # See also: Section \class.
977 | # The default value is: YES.
978 |
979 | VERBATIM_HEADERS = YES
980 |
981 | #---------------------------------------------------------------------------
982 | # Configuration options related to the alphabetical class index
983 | #---------------------------------------------------------------------------
984 |
985 | # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
986 | # compounds will be generated. Enable this if the project contains a lot of
987 | # classes, structs, unions or interfaces.
988 | # The default value is: YES.
989 |
990 | ALPHABETICAL_INDEX = YES
991 |
992 | # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
993 | # which the alphabetical index list will be split.
994 | # Minimum value: 1, maximum value: 20, default value: 5.
995 | # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
996 |
997 | COLS_IN_ALPHA_INDEX = 5
998 |
999 | # In case all classes in a project start with a common prefix, all classes will
1000 | # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
1001 | # can be used to specify a prefix (or a list of prefixes) that should be ignored
1002 | # while generating the index headers.
1003 | # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1004 |
1005 | IGNORE_PREFIX =
1006 |
1007 | #---------------------------------------------------------------------------
1008 | # Configuration options related to the HTML output
1009 | #---------------------------------------------------------------------------
1010 |
1011 | # If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
1012 | # The default value is: YES.
1013 |
1014 | GENERATE_HTML = YES
1015 |
1016 | # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
1017 | # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1018 | # it.
1019 | # The default directory is: html.
1020 | # This tag requires that the tag GENERATE_HTML is set to YES.
1021 |
1022 | HTML_OUTPUT = html
1023 |
1024 | # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
1025 | # generated HTML page (for example: .htm, .php, .asp).
1026 | # The default value is: .html.
1027 | # This tag requires that the tag GENERATE_HTML is set to YES.
1028 |
1029 | HTML_FILE_EXTENSION = .html
1030 |
1031 | # The HTML_HEADER tag can be used to specify a user-defined HTML header file for
1032 | # each generated HTML page. If the tag is left blank doxygen will generate a
1033 | # standard header.
1034 | #
1035 | # To get valid HTML the header file that includes any scripts and style sheets
1036 | # that doxygen needs, which is dependent on the configuration options used (e.g.
1037 | # the setting GENERATE_TREEVIEW). It is highly recommended to start with a
1038 | # default header using
1039 | # doxygen -w html new_header.html new_footer.html new_stylesheet.css
1040 | # YourConfigFile
1041 | # and then modify the file new_header.html. See also section "Doxygen usage"
1042 | # for information on how to generate the default header that doxygen normally
1043 | # uses.
1044 | # Note: The header is subject to change so you typically have to regenerate the
1045 | # default header when upgrading to a newer version of doxygen. For a description
1046 | # of the possible markers and block names see the documentation.
1047 | # This tag requires that the tag GENERATE_HTML is set to YES.
1048 |
1049 | HTML_HEADER =
1050 |
1051 | # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
1052 | # generated HTML page. If the tag is left blank doxygen will generate a standard
1053 | # footer. See HTML_HEADER for more information on how to generate a default
1054 | # footer and what special commands can be used inside the footer. See also
1055 | # section "Doxygen usage" for information on how to generate the default footer
1056 | # that doxygen normally uses.
1057 | # This tag requires that the tag GENERATE_HTML is set to YES.
1058 |
1059 | HTML_FOOTER =
1060 |
1061 | # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
1062 | # sheet that is used by each HTML page. It can be used to fine-tune the look of
1063 | # the HTML output. If left blank doxygen will generate a default style sheet.
1064 | # See also section "Doxygen usage" for information on how to generate the style
1065 | # sheet that doxygen normally uses.
1066 | # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
1067 | # it is more robust and this tag (HTML_STYLESHEET) will in the future become
1068 | # obsolete.
1069 | # This tag requires that the tag GENERATE_HTML is set to YES.
1070 |
1071 | HTML_STYLESHEET =
1072 |
1073 | # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1074 | # cascading style sheets that are included after the standard style sheets
1075 | # created by doxygen. Using this option one can overrule certain style aspects.
1076 | # This is preferred over using HTML_STYLESHEET since it does not replace the
1077 | # standard style sheet and is therefor more robust against future updates.
1078 | # Doxygen will copy the style sheet files to the output directory.
1079 | # Note: The order of the extra stylesheet files is of importance (e.g. the last
1080 | # stylesheet in the list overrules the setting of the previous ones in the
1081 | # list). For an example see the documentation.
1082 | # This tag requires that the tag GENERATE_HTML is set to YES.
1083 |
1084 | HTML_EXTRA_STYLESHEET =
1085 |
1086 | # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
1087 | # other source files which should be copied to the HTML output directory. Note
1088 | # that these files will be copied to the base HTML output directory. Use the
1089 | # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
1090 | # files. In the HTML_STYLESHEET file, use the file name only. Also note that the
1091 | # files will be copied as-is; there are no commands or markers available.
1092 | # This tag requires that the tag GENERATE_HTML is set to YES.
1093 |
1094 | HTML_EXTRA_FILES =
1095 |
1096 | # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
1097 | # will adjust the colors in the stylesheet and background images according to
1098 | # this color. Hue is specified as an angle on a colorwheel, see
1099 | # http://en.wikipedia.org/wiki/Hue for more information. For instance the value
1100 | # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
1101 | # purple, and 360 is red again.
1102 | # Minimum value: 0, maximum value: 359, default value: 220.
1103 | # This tag requires that the tag GENERATE_HTML is set to YES.
1104 |
1105 | HTML_COLORSTYLE_HUE = 220
1106 |
1107 | # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
1108 | # in the HTML output. For a value of 0 the output will use grayscales only. A
1109 | # value of 255 will produce the most vivid colors.
1110 | # Minimum value: 0, maximum value: 255, default value: 100.
1111 | # This tag requires that the tag GENERATE_HTML is set to YES.
1112 |
1113 | HTML_COLORSTYLE_SAT = 100
1114 |
1115 | # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
1116 | # luminance component of the colors in the HTML output. Values below 100
1117 | # gradually make the output lighter, whereas values above 100 make the output
1118 | # darker. The value divided by 100 is the actual gamma applied, so 80 represents
1119 | # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
1120 | # change the gamma.
1121 | # Minimum value: 40, maximum value: 240, default value: 80.
1122 | # This tag requires that the tag GENERATE_HTML is set to YES.
1123 |
1124 | HTML_COLORSTYLE_GAMMA = 80
1125 |
1126 | # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
1127 | # page will contain the date and time when the page was generated. Setting this
1128 | # to NO can help when comparing the output of multiple runs.
1129 | # The default value is: YES.
1130 | # This tag requires that the tag GENERATE_HTML is set to YES.
1131 |
1132 | HTML_TIMESTAMP = YES
1133 |
1134 | # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
1135 | # documentation will contain sections that can be hidden and shown after the
1136 | # page has loaded.
1137 | # The default value is: NO.
1138 | # This tag requires that the tag GENERATE_HTML is set to YES.
1139 |
1140 | HTML_DYNAMIC_SECTIONS = NO
1141 |
1142 | # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
1143 | # shown in the various tree structured indices initially; the user can expand
1144 | # and collapse entries dynamically later on. Doxygen will expand the tree to
1145 | # such a level that at most the specified number of entries are visible (unless
1146 | # a fully collapsed tree already exceeds this amount). So setting the number of
1147 | # entries 1 will produce a full collapsed tree by default. 0 is a special value
1148 | # representing an infinite number of entries and will result in a full expanded
1149 | # tree by default.
1150 | # Minimum value: 0, maximum value: 9999, default value: 100.
1151 | # This tag requires that the tag GENERATE_HTML is set to YES.
1152 |
1153 | HTML_INDEX_NUM_ENTRIES = 100
1154 |
1155 | # If the GENERATE_DOCSET tag is set to YES, additional index files will be
1156 | # generated that can be used as input for Apple's Xcode 3 integrated development
1157 | # environment (see: http://developer.apple.com/tools/xcode/), introduced with
1158 | # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
1159 | # Makefile in the HTML output directory. Running make will produce the docset in
1160 | # that directory and running make install will install the docset in
1161 | # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
1162 | # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
1163 | # for more information.
1164 | # The default value is: NO.
1165 | # This tag requires that the tag GENERATE_HTML is set to YES.
1166 |
1167 | GENERATE_DOCSET = NO
1168 |
1169 | # This tag determines the name of the docset feed. A documentation feed provides
1170 | # an umbrella under which multiple documentation sets from a single provider
1171 | # (such as a company or product suite) can be grouped.
1172 | # The default value is: Doxygen generated docs.
1173 | # This tag requires that the tag GENERATE_DOCSET is set to YES.
1174 |
1175 | DOCSET_FEEDNAME = "Doxygen generated docs"
1176 |
1177 | # This tag specifies a string that should uniquely identify the documentation
1178 | # set bundle. This should be a reverse domain-name style string, e.g.
1179 | # com.mycompany.MyDocSet. Doxygen will append .docset to the name.
1180 | # The default value is: org.doxygen.Project.
1181 | # This tag requires that the tag GENERATE_DOCSET is set to YES.
1182 |
1183 | DOCSET_BUNDLE_ID = org.doxygen.Project
1184 |
1185 | # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
1186 | # the documentation publisher. This should be a reverse domain-name style
1187 | # string, e.g. com.mycompany.MyDocSet.documentation.
1188 | # The default value is: org.doxygen.Publisher.
1189 | # This tag requires that the tag GENERATE_DOCSET is set to YES.
1190 |
1191 | DOCSET_PUBLISHER_ID = org.doxygen.Publisher
1192 |
1193 | # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
1194 | # The default value is: Publisher.
1195 | # This tag requires that the tag GENERATE_DOCSET is set to YES.
1196 |
1197 | DOCSET_PUBLISHER_NAME = Publisher
1198 |
1199 | # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
1200 | # additional HTML index files: index.hhp, index.hhc, and index.hhk. The
1201 | # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
1202 | # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
1203 | # Windows.
1204 | #
1205 | # The HTML Help Workshop contains a compiler that can convert all HTML output
1206 | # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
1207 | # files are now used as the Windows 98 help format, and will replace the old
1208 | # Windows help format (.hlp) on all Windows platforms in the future. Compressed
1209 | # HTML files also contain an index, a table of contents, and you can search for
1210 | # words in the documentation. The HTML workshop also contains a viewer for
1211 | # compressed HTML files.
1212 | # The default value is: NO.
1213 | # This tag requires that the tag GENERATE_HTML is set to YES.
1214 |
1215 | GENERATE_HTMLHELP = NO
1216 |
1217 | # The CHM_FILE tag can be used to specify the file name of the resulting .chm
1218 | # file. You can add a path in front of the file if the result should not be
1219 | # written to the html output directory.
1220 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1221 |
1222 | CHM_FILE =
1223 |
1224 | # The HHC_LOCATION tag can be used to specify the location (absolute path
1225 | # including file name) of the HTML help compiler ( hhc.exe). If non-empty
1226 | # doxygen will try to run the HTML help compiler on the generated index.hhp.
1227 | # The file has to be specified with full path.
1228 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1229 |
1230 | HHC_LOCATION =
1231 |
1232 | # The GENERATE_CHI flag controls if a separate .chi index file is generated (
1233 | # YES) or that it should be included in the master .chm file ( NO).
1234 | # The default value is: NO.
1235 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1236 |
1237 | GENERATE_CHI = NO
1238 |
1239 | # The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
1240 | # and project file content.
1241 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1242 |
1243 | CHM_INDEX_ENCODING =
1244 |
1245 | # The BINARY_TOC flag controls whether a binary table of contents is generated (
1246 | # YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
1247 | # enables the Previous and Next buttons.
1248 | # The default value is: NO.
1249 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1250 |
1251 | BINARY_TOC = NO
1252 |
1253 | # The TOC_EXPAND flag can be set to YES to add extra items for group members to
1254 | # the table of contents of the HTML help documentation and to the tree view.
1255 | # The default value is: NO.
1256 | # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1257 |
1258 | TOC_EXPAND = NO
1259 |
1260 | # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
1261 | # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
1262 | # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
1263 | # (.qch) of the generated HTML documentation.
1264 | # The default value is: NO.
1265 | # This tag requires that the tag GENERATE_HTML is set to YES.
1266 |
1267 | GENERATE_QHP = NO
1268 |
1269 | # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
1270 | # the file name of the resulting .qch file. The path specified is relative to
1271 | # the HTML output folder.
1272 | # This tag requires that the tag GENERATE_QHP is set to YES.
1273 |
1274 | QCH_FILE =
1275 |
1276 | # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
1277 | # Project output. For more information please see Qt Help Project / Namespace
1278 | # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
1279 | # The default value is: org.doxygen.Project.
1280 | # This tag requires that the tag GENERATE_QHP is set to YES.
1281 |
1282 | QHP_NAMESPACE = org.doxygen.Project
1283 |
1284 | # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
1285 | # Help Project output. For more information please see Qt Help Project / Virtual
1286 | # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
1287 | # folders).
1288 | # The default value is: doc.
1289 | # This tag requires that the tag GENERATE_QHP is set to YES.
1290 |
1291 | QHP_VIRTUAL_FOLDER = doc
1292 |
1293 | # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
1294 | # filter to add. For more information please see Qt Help Project / Custom
1295 | # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
1296 | # filters).
1297 | # This tag requires that the tag GENERATE_QHP is set to YES.
1298 |
1299 | QHP_CUST_FILTER_NAME =
1300 |
1301 | # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
1302 | # custom filter to add. For more information please see Qt Help Project / Custom
1303 | # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
1304 | # filters).
1305 | # This tag requires that the tag GENERATE_QHP is set to YES.
1306 |
1307 | QHP_CUST_FILTER_ATTRS =
1308 |
1309 | # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
1310 | # project's filter section matches. Qt Help Project / Filter Attributes (see:
1311 | # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
1312 | # This tag requires that the tag GENERATE_QHP is set to YES.
1313 |
1314 | QHP_SECT_FILTER_ATTRS =
1315 |
1316 | # The QHG_LOCATION tag can be used to specify the location of Qt's
1317 | # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
1318 | # generated .qhp file.
1319 | # This tag requires that the tag GENERATE_QHP is set to YES.
1320 |
1321 | QHG_LOCATION =
1322 |
1323 | # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
1324 | # generated, together with the HTML files, they form an Eclipse help plugin. To
1325 | # install this plugin and make it available under the help contents menu in
1326 | # Eclipse, the contents of the directory containing the HTML and XML files needs
1327 | # to be copied into the plugins directory of eclipse. The name of the directory
1328 | # within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
1329 | # After copying Eclipse needs to be restarted before the help appears.
1330 | # The default value is: NO.
1331 | # This tag requires that the tag GENERATE_HTML is set to YES.
1332 |
1333 | GENERATE_ECLIPSEHELP = NO
1334 |
1335 | # A unique identifier for the Eclipse help plugin. When installing the plugin
1336 | # the directory name containing the HTML and XML files should also have this
1337 | # name. Each documentation set should have its own identifier.
1338 | # The default value is: org.doxygen.Project.
1339 | # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
1340 |
1341 | ECLIPSE_DOC_ID = org.doxygen.Project
1342 |
1343 | # If you want full control over the layout of the generated HTML pages it might
1344 | # be necessary to disable the index and replace it with your own. The
1345 | # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
1346 | # of each HTML page. A value of NO enables the index and the value YES disables
1347 | # it. Since the tabs in the index contain the same information as the navigation
1348 | # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
1349 | # The default value is: NO.
1350 | # This tag requires that the tag GENERATE_HTML is set to YES.
1351 |
1352 | DISABLE_INDEX = NO
1353 |
1354 | # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
1355 | # structure should be generated to display hierarchical information. If the tag
1356 | # value is set to YES, a side panel will be generated containing a tree-like
1357 | # index structure (just like the one that is generated for HTML Help). For this
1358 | # to work a browser that supports JavaScript, DHTML, CSS and frames is required
1359 | # (i.e. any modern browser). Windows users are probably better off using the
1360 | # HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
1361 | # further fine-tune the look of the index. As an example, the default style
1362 | # sheet generated by doxygen has an example that shows how to put an image at
1363 | # the root of the tree instead of the PROJECT_NAME. Since the tree basically has
1364 | # the same information as the tab index, you could consider setting
1365 | # DISABLE_INDEX to YES when enabling this option.
1366 | # The default value is: NO.
1367 | # This tag requires that the tag GENERATE_HTML is set to YES.
1368 |
1369 | GENERATE_TREEVIEW = YES
1370 |
1371 | # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
1372 | # doxygen will group on one line in the generated HTML documentation.
1373 | #
1374 | # Note that a value of 0 will completely suppress the enum values from appearing
1375 | # in the overview section.
1376 | # Minimum value: 0, maximum value: 20, default value: 4.
1377 | # This tag requires that the tag GENERATE_HTML is set to YES.
1378 |
1379 | ENUM_VALUES_PER_LINE = 4
1380 |
1381 | # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
1382 | # to set the initial width (in pixels) of the frame in which the tree is shown.
1383 | # Minimum value: 0, maximum value: 1500, default value: 250.
1384 | # This tag requires that the tag GENERATE_HTML is set to YES.
1385 |
1386 | TREEVIEW_WIDTH = 250
1387 |
1388 | # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
1389 | # external symbols imported via tag files in a separate window.
1390 | # The default value is: NO.
1391 | # This tag requires that the tag GENERATE_HTML is set to YES.
1392 |
1393 | EXT_LINKS_IN_WINDOW = NO
1394 |
1395 | # Use this tag to change the font size of LaTeX formulas included as images in
1396 | # the HTML documentation. When you change the font size after a successful
1397 | # doxygen run you need to manually remove any form_*.png images from the HTML
1398 | # output directory to force them to be regenerated.
1399 | # Minimum value: 8, maximum value: 50, default value: 10.
1400 | # This tag requires that the tag GENERATE_HTML is set to YES.
1401 |
1402 | FORMULA_FONTSIZE = 10
1403 |
1404 | # Use the FORMULA_TRANPARENT tag to determine whether or not the images
1405 | # generated for formulas are transparent PNGs. Transparent PNGs are not
1406 | # supported properly for IE 6.0, but are supported on all modern browsers.
1407 | #
1408 | # Note that when changing this option you need to delete any form_*.png files in
1409 | # the HTML output directory before the changes have effect.
1410 | # The default value is: YES.
1411 | # This tag requires that the tag GENERATE_HTML is set to YES.
1412 |
1413 | FORMULA_TRANSPARENT = YES
1414 |
1415 | # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
1416 | # http://www.mathjax.org) which uses client side Javascript for the rendering
1417 | # instead of using prerendered bitmaps. Use this if you do not have LaTeX
1418 | # installed or if you want to formulas look prettier in the HTML output. When
1419 | # enabled you may also need to install MathJax separately and configure the path
1420 | # to it using the MATHJAX_RELPATH option.
1421 | # The default value is: NO.
1422 | # This tag requires that the tag GENERATE_HTML is set to YES.
1423 |
1424 | USE_MATHJAX = NO
1425 |
1426 | # When MathJax is enabled you can set the default output format to be used for
1427 | # the MathJax output. See the MathJax site (see:
1428 | # http://docs.mathjax.org/en/latest/output.html) for more details.
1429 | # Possible values are: HTML-CSS (which is slower, but has the best
1430 | # compatibility), NativeMML (i.e. MathML) and SVG.
1431 | # The default value is: HTML-CSS.
1432 | # This tag requires that the tag USE_MATHJAX is set to YES.
1433 |
1434 | MATHJAX_FORMAT = HTML-CSS
1435 |
1436 | # When MathJax is enabled you need to specify the location relative to the HTML
1437 | # output directory using the MATHJAX_RELPATH option. The destination directory
1438 | # should contain the MathJax.js script. For instance, if the mathjax directory
1439 | # is located at the same level as the HTML output directory, then
1440 | # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
1441 | # Content Delivery Network so you can quickly see the result without installing
1442 | # MathJax. However, it is strongly recommended to install a local copy of
1443 | # MathJax from http://www.mathjax.org before deployment.
1444 | # The default value is: http://cdn.mathjax.org/mathjax/latest.
1445 | # This tag requires that the tag USE_MATHJAX is set to YES.
1446 |
1447 | MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
1448 |
1449 | # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
1450 | # extension names that should be enabled during MathJax rendering. For example
1451 | # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
1452 | # This tag requires that the tag USE_MATHJAX is set to YES.
1453 |
1454 | MATHJAX_EXTENSIONS =
1455 |
1456 | # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
1457 | # of code that will be used on startup of the MathJax code. See the MathJax site
1458 | # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
1459 | # example see the documentation.
1460 | # This tag requires that the tag USE_MATHJAX is set to YES.
1461 |
1462 | MATHJAX_CODEFILE =
1463 |
1464 | # When the SEARCHENGINE tag is enabled doxygen will generate a search box for
1465 | # the HTML output. The underlying search engine uses javascript and DHTML and
1466 | # should work on any modern browser. Note that when using HTML help
1467 | # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
1468 | # there is already a search function so this one should typically be disabled.
1469 | # For large projects the javascript based search engine can be slow, then
1470 | # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
1471 | # search using the keyboard; to jump to the search box use + S
1472 | # (what the is depends on the OS and browser, but it is typically
1473 | # , /