Changelog#

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

4.7.0 (2024-01-29)#

Features#

  • add build option to enable or disable docs targets (481c240)

  • comprehensive macos builds for CI (084ae86)

  • comprehensive ubuntu builds for CI (27fce46)

  • comprehensive windows builds for CI (e46196f)

  • custom index.html should be optional in project doc root (9f906fd)

  • upgrade CPM to 0.38.1 (b333b38)

Bug Fixes#

  • always include CTest even when ASAP_BUILD_TESTS is OFF (4c5ef88)

Documentation#

  • configure project folders for esbonio extension (3adbff4)

  • there are no library modules anymore (53e34e2)

  • update for in-module or in-root sphinx docs (d2c0fe4)

  • update sphinx theme option to new name (a78e49a)

  • update url for executable books logo (8b4dd17)

4.6.3 (2023-03-25)#

Enhancements#

  • Simplify devcontainer setup by using features and additional container lifecycle commands.

Bug Fixes#

  • enable profiling for test coverage for MSVC (7348d0a), closes #22

4.6.2 (2022-11-28)#

Features#

  • increase ccache hit rate (a22a912)

  • more robust handling of contract checking mode (304e9ae)

    When linking against the contract checking and enforcement library asap-contract (https://github.com/asap-projects/asap-contract), it is possible to control the contract checking mode by passing a value for the CONTRACTS option when adding any type of target with asap_add_xxx API (e.g. asap_add_library. asap_add_test, etc):

    • CONTRACTS OFF : set contract checking mode to OFF

    • CONTRACTS AUDIT : set contract checking mode to AUDIT

    • CONTRACTS DEFAULT : set contract checking mode to DEFAULT

    • CONTRACTS AUTO : set contract checking mode using as a first priority the value passed in the cmake option OPTION_CONTRACT_MODE. If none is present, automatically set the mode based on the build configuration. For Debug -> AUDIT, For Release and RelMinSize -> OFF, and for RelWithDebInfo -> DEFAULT.

    • CONTRACTS TESTING : indicates that contracts are being testing and the target needs to have full control on the contract checking mode. Nothing will be done here.

    The default setting is AUTO.

Bug Fixes#

  • build: #21 target option WARNING not propagated properly (432cdaf)

    By default, for every target we build, a compiler option will be added to treat warnings as errors, unless the target is added with WARNING as an option.

    When that option is used, we now properly propagate it to set the corresponding compiler option to NOT treat warnings as errors.

    This is useful when 3rd party dependencies have include files that generate warnings.

4.6.1 (2022-09-20)#

Bug Fixes#

  • always add code coverage ‘all’ targets (d7309a0)

  • version-info test was added even when ASAP_BUILD_TESTS is OFF (b566e7b)

4.6.0 (2022-09-20)#

Features#

  • option to control the use of ccache, default is OFF (49a17a9)

    More robust implementation of fatser builds with ccache. Caching is enabled in GitHub CI builds and can be enabled in development environments by simply setting the cmake variable USE_CCACHE to ‘ON’/’TRUE’ or equivalent.

    A precondition for the environment is of course to have ccache installed, which gets done automatically in GitHub workflows, but needs to be done in development environments. It is recommended to use brew/choco for MacOS/Windows, but to install from the pre-built binaries for Linux as the version that comes with most distros is quite old.

    It is to be noted that ccache with MSVC on Windows may have some issues and if that is the case, simply do not use it.

4.5.2 (2022-09-20)#

Bug Fixes#

  • sub-projects with tests fail due to coverage all target not being setup early enough (400b2cc)

4.5.1 (2022-09-19)#

Bug Fixes#

  • contract mode definition should only be added when not testing asap_contract (c6d5e34)

  • use correct path for the version include file (7997b68)

4.5.0 (2022-09-19)#

Features#

  1. version-info tool

    Add the version-info tool to print the project info (cb228e8)

    This tool uses the generated version.h file in a small C++ program to print the project’s info, as defined in the project’s master CMakeLists.txt.

    It also constitutes an example of how to use the version.h file and a simple test to check that the asap infrastructure for defining and building targets is working.

  2. More visibility on project/module nesting

    Enhance configure logs with project/module nesting hierarchy (f6c13f2)

    Track the projects/modules nesting level with a hierarchy stack updated when we enter/exit a project/module. Most of the management is done automatically as helper functions get called to add modules or external packages. Some of the boilerplate (minimal) is still manual:

    • In the top-level CMakeLists.txt, the project needs to pushed at the beginning and popped at the end.

    • In each module CMakeLists.txt, the module needs to be pushed at the start and popped at the end.

    Use the ASAP_LOG_PROJECT_HIERARCHY to get a string that contains the nesting hierarchy.

  3. Formatting

    Implement robust project-wide formatting (afcaebe)

    Now we can format cmake files with cmake-format and any of the file types supported by clang-format (including C++, JavaScript and Json) with clang-format.

    The following additional targets are defined:

    • format Shows which files are affected by clang-format

    • check-format errors if files are affected by clang-format (for CI)

    • fix-format Applies clang-format to all affected files

    Dedicated targets for each of cmake-format and clang-format are also added (e.g. cmake-format, clang-format, check-clang-format,…)

Bug Fixes#

  • generated version.h should follow project naming (329bcdf)

  • install master project generated header files (3c5c162)

Documentation#

  • add example output from version-info tool (3a5515e)

  • update after new formatting system (082e513)

4.4.8 (2022-09-18)#

Bug Fixes#

  • restore test setup deleted by mistake (cec7b9d)

4.4.7 (2022-09-18)#

  • Refactor cmake common modules and the master cmake script to better work with sub-projects built with asap.

  • Reduce the verbosity of some actions and avoid re-running things when not needed.

4.4.6 (2022-09-18)#

Bug Fixes#

  • top level install not working properly (4ac4a31)

    CMAKE_MODULE_PATH should be reset at the top level project to make sure that every sub-project uses its own version of the cmake files. Additionally, refactor the top-level install code to simplify it and remove the need to call a function in the top-level project cmake script.

4.4.5 (2022-09-18)#

Bug Fixes#

  • #20 local install should use CMAKE_INSTALL_PREFIX to set variables (2e1f1d4)

  • #20 use CMAKE_INSTALL_PREFIX to set variables (2fffd96)

  • wrong variable used of target name (04b5343)

4.4.4 (2022-09-18)#

Bug Fixes#

  • wrong variable used for target name (04b5343)

4.4.3 (2022-09-18)#

Bug Fixes#

  • #19 use generator expressions instead of CMAKE_BUILD_TYPE (857d299)

    Code that checks CMAKE_BUILD_TYPE to set specific compiler flags or defines is problematic. Generator expressions should be used instead to handle configuration-specific logic correctly, regardless of the generator used.

  • use cmake-format extension default behavior (a5d5c5e)

    No need to force the cmake-format config file location as the command is run in the workspace root by default and it will look for and find the config file named cmake-format.yaml.

4.4.2 (2022-09-16)#

Bug Fixes#

  • #13 move “caexcludepath” to dev-windows and exclude CPM cache (0571714)

  • #14 upgrade CPM to 0.35.6 (695414b)

  • #15 get target type before testing it (b8bd378)

  • #16 use CMAKE_CURRENT_SOURCE_DIR instead of CMAKE_SOURCE_DIR for cmake includes (4ac6928)

  • #17 git should not be required (2c76104)

  • #18 enforce end of line to LF (943ae47)

4.4.1 (2022-08-20)#

Bug Fixes#

  • #12 disable used-but-marked-unused (6d42d83)

    For clang-tidy, this check generates many errors with google test framework and as such is not worth the trouble.

4.4.0 (2022-08-20)#

Bug Fixes#

  • #10 no more template export header (dd8ffd5).

    Simply include the asap_<module>_export.h which defines the ASAP_<MODULE>_API macros for symbol visibility. As a general rule, do not add explicit visibility for inline methods/functions and for template classes/functions as they are included in each compilation unit.

  • #11 refactor compiler options management. (78ae493)

    In general, asap target helpers, such as asap_add_library, will seamlessly manage compiler options behind the scenes, relaying first to cmake/common modules and then overriding/adding/removing options based on asap preferences. Such options can further be customized by the calling module using the asap_set_compile_options() function and passing ADD, REMOVE and relevant options as appropriate.

  • #9 remove no longer used function (5a7416f)

4.3.6 (2022-08-11)#

Minor update to directly use the cmake/common submodule from swift-nav/cmake now that all asap fixes have been merged over there.

4.3.5 (2022-08-11)#

Bug Fixes#

  • #6: properly setup install layout (71fd5d5), closes #6

    When the install prefix matches a system install directory (i.e. /usr or /usr/local), the project will be installed according to the conventions of GnuInstallDirs, otherwise, it will be installed using a simplified local layout as following:

    # Install into local directory
    set(ASAP_INSTALL_ROOT      ".")                                           # ./
    set(ASAP_INSTALL_LIB       "lib")                                         # ./lib
    set(ASAP_INSTALL_SHARED    "${ASAP_INSTALL_LIB}")                         # ./lib
    set(ASAP_INSTALL_CMAKE     "${ASAP_INSTALL_ROOT}/share/cmake/${META_PROJECT_NAME}") # ./share/cmake/<project>
    set(ASAP_INSTALL_PKGCONFIG "${ASAP_INSTALL_ROOT}/share/pkgconfig")        # ./share/pkgconfig
    set(ASAP_INSTALL_EXAMPLES  "${ASAP_INSTALL_ROOT}")                        # ./
    set(ASAP_INSTALL_DATA      "${ASAP_INSTALL_ROOT}")                        # ./data
    set(ASAP_INSTALL_BIN       "bin")                                         # ./bin
    set(ASAP_INSTALL_INCLUDE   "include")                                     # ./include
    set(ASAP_INSTALL_DOC       "doc")                                         # ./doc
    set(ASAP_INSTALL_SHORTCUTS "misc")                                        # ./misc
    set(ASAP_INSTALL_ICONS     "misc")                                        # ./misc
    set(ASAP_INSTALL_INIT      "misc")                                        # ./misc
  • #7: add build and ops commit types (0d9187e), closes #7

    Added the following two commit types:

    • build Commits, that affect build components like build tool, ci pipeline, dependencies, project version, …

    • ops Commits, that affect operational components like infrastructure, deployment, backup, recovery, …

  • #8: add standard ccov excluded directories by default (a8aabb3), closes #8

    The standard exclusions are:

    • anything matching */test/* in its path, i.e. files used to write tests,

    • anything located inside */.cache/CPM/*, i.e. third party modules included using CPM,

    • anything under /usr, i.e. system files

4.3.4 (2022-08-04)#

Bug Fixes#

  • alias variable to enable/disable building tests (3992b0f)

  • typo in variable name to enable/disable building tests (9950fe2)

4.3.3 (2022-08-04)#

Bug Fixes#

  • add aliases used by cmake common functions (9c33906)

4.3.2 (2022-08-04)#

Bug Fixes#

4.3.1 (2022-05-01)#

Features#

  • add ccache support to dev container (202c27a)

4.3.0 (2022-04-07)#

Documentation#

  • add badge for OpenSSF best practices (26c01c8)

  • add CPM as preferred way of managing third party deps (5a33f70)

  • add tutorial videos (cb13248)

  • fix thumbnail and links of project docs video (1a6269e)

  • how to report security vulnerabilities (46426e9)

  • improve the key features section (79119ba)

  • include build status badges for all branches (2b98ae1)

  • revamp the project README (e72c4c3)

  • rewrite the contributing section (c7e39c4)

  • update instructions for repo from template scenario (1cafdb5)

  • update project docs video (c7f79fc)

4.2.0 (2022-04-03)#

Features#

  • make ccache usable on all platforms (412730f)

Bug Fixes#

  • use only white-listed properties for interface library (227de02)

4.1.8 (2022-03-15)#

  • chore: use CPM for dependency management

  • chore: use ccache to speedup build

4.1.7 (2022-03-06)#

docs: add last-updated-on timestamp

4.1.6 (2022-03-06)#

Bug Fixes#

  • define asap_top_level_install as empty when project install should be skipped (616deed)

  • use correct links for documentation (486144c), closes #4

4.1.5 (2022-03-06)#

chore: force shell to bash on all platforms

4.1.4 (2022-03-06)#

chore: adjust command for windows powershell

4.1.3 (2022-03-06)#

Update artifact names in build matrix for automatic release.

4.1.2 (2022-03-06)#

This is a refactoring release to trim down the template project to the minimum and streamline the generated targets.

Bug Fixes#

  • always use top level build dir for output (1b01db2)

  • doxygen and sphinx target conflict with modules (02375ff)

  • generate doc only if project is master (82190fa)

  • make doxygen targets sub-project friendly (546fe73)

  • make gtest work again (3ce658c)

  • make sphinx targets sub-project friendly (024cc77)

  • only add clang-format/tidy targets if master project (060f082)

  • only install files if requested to install (9caaf9b)

  • reorganize third_party modules for use of FetchContent (cc65bc2)

  • use correct tagets for doc builds (559558e)

  • use correct url for logo image (96d1e01)

  • use correct url for master index page (a56c327)

  • use lower case META_PROJECT_ID (311e433)

  • wrong variable used for target name (829f351)

4.1.1 (2022-02-18)#

  • docs: use submodule documentation deployment urls for inter-sphinx configuration. using the local build directory will result in the deployed documentation to still be dependent on the build paths.

4.1.0 (2022-02-18)#

  • improvements and bug fixes in the documentation

  • update GSL to 4.0.0

4.0.2 (2022-02-17)#

This is a patch update to fix minor issues in the documentation files and to refactor the docs for easier maintenance and use in forked projects.

Bug Fixes#

  • contract api docs now in contract module (d3366bd)

  • keep src even when empty for doxygen not to complain (be28f42)

4.0.1 (2022-02-17)#

  • update the GitHub action for windows build to 2022

4.0.0 (2022-02-17)#

Features#

  • overload pattern for variant visitation on the fly (53ea7cc)

  • refactor: trim the project to the bare minimum(8d48a56)

    The intention from the asap base project is to be a template starter repo that can be cloned and used for new projects. The bare minimum is the cmake build infrastructure, documentation, the common submodule and the contract checking assertions submodule.

    Contract checking library is now in a separate submodule to keep the common module as minimal as possible. Projects that do not intend to use contract checking will not have to depend on it.

Bug Fixes#

  • use separate sphinx cache dir for each module (03f36fc)

3.1.2 (2021-12-19)#

Features#

  • doxygen snippets from test or examples source directories (85b8000)

Bug Fixes#

  • doc: wrong chapter title in logging module page (5966912)

  • doxygen doc generation uses wrong module info (8833474)

  • need to hardcode asap when linking common (e038a70)

3.1.1 (2021-12-19)#

Documentation#

  • minor tweaks to the sphinx config

3.1.0 (2021-12-18)#

⚠ BREAKING CHANGES#

  • The logging Registry is now implemented as a singleton class and therefore it needs to be accessed via its instance() method. All other methods in its interface are not static anymore.

  • Prefix the build options with ASAP_ to make them unique and avoid clashing with other projects that may use the generic OPTION_xxx names. Additionally, the build presets now always activate building of tests and examples except in release builds where examples are not built.

  • The cmake option OPTION_SELF_CONTAINED is no longer relevant as we believe that 3rd party dependencies should be installed using their own projects. In the worst case scenario, they should be explicitly added as install instructions to the project in a visible and documented way.

Features#

  • add support for .editorconfig (5a7a689)

  • provide a way to distinguish between debug and release builds via preprocessor define (bbd84a2)

Bug Fixes#

  • adjust doc target names to work in renamed projects (60acc65)

  • cmake option was placed in the wrong command (b634b15)

  • clean the logging API implementation (25535c7)

3.0.0 (2021-12-08)#

⚠ BREAKING CHANGES#

  • The project requires C++17 as it is widely available in compilers now. Logical traits such as conjunction, disjunction and negation are available from the <type_traits> standard include.

  • major redesign of the cmake build system, many macros and functions have been changed and the build system overall has been simplified.

  • catch2 has been replaced by Google Test/Mock, which provides more features, less compiler warnings and is more popular. Catch2 or any other framework can still be easily added to an asap based project.

  • hedely was removed from common and was replaced by a much lighter new file compilers.h.

  • nowide was removed from common and will be replaced by the standalone boost nowide library when needed.

  • filesystem footprint is too large to be included by default in asap starter project. It will be provided separately and a mechanism to easily add it into an asap based project will be implemented in a future update.

Features#

  • add gsl library (9b982f1)

  • add support for CMake presets (bdcfa4d)

  • add contract checking api (assertions) (c691446)

  • convert git submodule to local module (4e32e8a)

  • redesign cmake build system (31ce14a)

  • remove filesystem submodule (e2089ae)

  • remove logical traits backport (5ed0fe6)

  • significantly enhance the documentation, both doxygen based for APIs and sphinx based for the project docs

Bug Fixes#

  • configure compilation database for clangd when using cmake presets (7493c24)

  • hardcode asap in places where we should not use the custom project name (7f81298)

  • match Clang and Apple Clang for compiler options (7e1e123)

  • convert unit testing to gtest/gmock (b99c8d0)

2.0.1 (2021-11-06)#

Bug Fixes#

  • “-Wreserved-identifier” only if not APPLE (05fac12)

  • cmake require c++ 14 in all modules (f05c9a6)

  • use lower-case name for sphinx (f3005b5)

2.0.0 (2021-11-06)#

Features#

  • Cleanup the code to remove most compiler and linter warnings.

  • Refactor cmake build files to have robust support for sanitizers and linters.

  • Rationalize the compiler options to strictly stick to those options that won’t conflict with application decisions.

  • Enhanced the documentation

To be continued#

  • Refactoring of cmake build files.

  • Remove additional warnings from code.

  • Documentation.

⚠ BREAKING CHANGES#

  • logging is in a new module: asap::logging.

Many modules would want to only get the basic common functionality without pulling extra 3rd party dependencies such as spdlog, fmt etc… For this reason, the logging functionality is taken out of the common submodule and moved to logging submodule.

  • move logging functionality to separate module (46f4dd9)

1.0.0 (2021-11-03)#

Features#

  • add support for Conventional Commits and auto Changelog (7b827fa)

  • replace cmake compiler detection with hedley (8bf0a3d)