Skip to content

Contributing

Guidelines 📐

  • Discussions: Discussions are concentrated on our GitHub discussions page. Don't refrain from asking questions and proposing ideas. If this library helps you create something interesting, please divulge it with the community.
  • Sharing Ideas: If you are a programmer with good ideas, please share these ideas with us.
  • Academic collaboration is more than welcome. It'd be great to see this library help people write papers.

Developer mode 👨‍💻

Build system targets that are only useful for developers of this project are hidden if the DOXYBOOK_DEVELOPER_MODE CMake option is disabled. Enabling this option makes tests and other developer targets and options available.

Not enabling this option means that you are a consumer of this project, and thus you have no need for these targets and options.

CMake Developer Options

The following options are available only when building the library in developer mode:

Option Description Default
DOXYBOOK_DEVELOPER_MODE Enable developer mode OFF
BUILD_SHARED_LIBS Build shared libs. OFF
DOXYBOOK_BUILD_TESTS Build tests ON
DOXYBOOK_BUILD_SINGLE_TARGET_TESTS Build tests OFF
DOXYBOOK_BUILD_EXAMPLES Build examples ON
DOXYBOOK_BUILD_DOCS Build documentation ON
DOXYBOOK_BUILD_COVERAGE_REPORT Enable coverage support OFF
DOXYBOOK_BUILD_LINT Enable linting OFF
DOXYBOOK_PEDANTIC_WARNINGS Use pedantic warnings. ON
DOXYBOOK_WARNINGS_AS_ERRORS Treat warnings as errors. ON
DOXYBOOK_SANITIZERS Build with sanitizers. ON if compiling in Debug mode
DOXYBOOK_CATCH2_REPORTER Reporter Catch2 should use when invoked from ctest. console
DOXYBOOK_TIME_TRACE Enable clang time-trace. ON
DOXYBOOK_BUILD_WITH_UTF8 Accept utf-8 in MSVC by default. ON

PRs 💡

Feel free to contribute new features to this library. For complex features and changes, consider getting feedback from the community first. Contributing to an existing code base with its conventions might seem obscure at first but please don't let that discourage you from sharing your ideas.

There are many ways in which you can contribute to this library:

  • Testing the library in new environments see 1 , 2 , 3
  • Contributing with interesting examples see 1
  • Finding problems in this documentation see 1
  • Finding bugs in general see 1 , 2 , 3 , 4
  • Whatever idea seems interesting to you

Constructive contributions

The only thing we ask you is to make sure your contribution is not destructive. Some contributions in which we are not interested are:

  • "I don't like this optional feature, so I removed/deprecated it"
  • "I removed this feature to support older versions of C++" but have not provided an equivalent alternative
  • "I removed this feature, so I don't have to install/update ______" but have not provided an equivalent alternative
  • "I'm creating this high-cost promise that we'll support __ forever" but I'm not sticking around to keep that promise

In doubt, please open a discussion first