All notable changes to this project will be documented in this file. See standard-version for commit guidelines.
4.7.0 (2024-01-29)
- 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)
- always include CTest even when ASAP_BUILD_TESTS is OFF (4c5ef88)
- 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)
- Simplify
devcontainer
setup by using features and additional container lifecycle commands.
4.6.2 (2022-11-28)
-
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 theCONTRACTS
option when adding any type of target withasap_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.
-
-
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)
- 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)
-
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 variableUSE_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)
- sub-projects with tests fail due to coverage all target not being setup early enough (400b2cc)
4.5.1 (2022-09-19)
- 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)
-
version-info
toolAdd 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 masterCMakeLists.txt
.It also constitutes an example of how to use the
version.h
file and a simple test to check that theasap
infrastructure for defining and building targets is working. -
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. - In the top-level
-
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
andclang-format
are also added (e.g. cmake-format, clang-format, check-clang-format,...)
- generated
version.h
should follow project naming (329bcdf) - install master project generated header files (3c5c162)
4.4.8 (2022-09-18)
- 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)
-
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 thecmake
files. Additionally, refactor the top-level install code to simplify it and remove the need to call a function in the top-level projectcmake
script.
4.4.5 (2022-09-18)
- #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)
- wrong variable used for target name (04b5343)
4.4.3 (2022-09-18)
-
#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 namedcmake-format.yaml
.
4.4.2 (2022-09-16)
- #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)
-
#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)
-
#10 no more template export header (dd8ffd5).
Simply include the
asap_<module>_export.h
which defines theASAP_<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 theasap_set_compile_options()
function and passingADD
,REMOVE
and relevant options as appropriate.
4.3.6 (2022-08-11)
Minor update to directly use the cmake/common
submodule from
https://github.com/swift-nav/cmake now that all asap fixes have been merged over
there.
4.3.5 (2022-08-11)
-
#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
andops
commit types (0d9187e), closes #7Added 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
- anything matching
4.3.4 (2022-08-04)
- alias variable to enable/disable building tests (3992b0f)
- typo in variable name to enable/disable building tests (9950fe2)
4.3.3 (2022-08-04)
- add aliases used by cmake common functions (9c33906)
4.3.2 (2022-08-04)
4.3.1 (2022-05-01)
- add ccache support to dev container (202c27a)
4.3.0 (2022-04-07)
- 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)
- make ccache usable on all platforms (412730f)
- 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)
- 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.
- 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.
- 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)
-
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.
- use separate sphinx cache dir for each module (03f36fc)
3.1.2 (2021-12-19)
- doxygen snippets from
test
orexamples
source directories (85b8000)
- doc: wrong chapter title in logging module page (5966912)
- doxygen doc generation uses wrong module info (8833474)
- need to hardcode
asap
when linkingcommon
(e038a70)
3.1.1 (2021-12-19)
- minor tweaks to the sphinx config
3.1.0 (2021-12-18)
- 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 genericOPTION_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.
- add support for .editorconfig (5a7a689)
- provide a way to distinguish between debug and release builds via preprocessor define (bbd84a2)
- 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)
- 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 anasap
based project.hedely
was removed fromcommon
and was replaced by a much lighter new filecompilers.h
.nowide
was removed fromcommon
and will be replaced by the standalone boost nowide library when needed.filesystem
footprint is too large to be included by default inasap
starter project. It will be provided separately and a mechanism to easily add it into anasap
based project will be implemented in a future update.
-
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
- 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)
- "-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)
- 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
- Refactoring of cmake build files.
- Remove additional warnings from code.
- Documentation.
- 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)