Added scaffolding
This is from https://github.com/TheLartians/ModernCppStarter/
This commit is contained in:
parent
504e2e3170
commit
044e38732d
8 changed files with 383 additions and 0 deletions
9
.clang-format
Normal file
9
.clang-format
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# SPDX-FileCopyrightText: 2023 Tobias Schmidl
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
---
|
||||||
|
BasedOnStyle: Mozilla
|
||||||
|
IndentWidth: 4
|
||||||
|
...
|
||||||
|
# vim: set filetype=yaml:
|
70
.cmake-format.yaml
Normal file
70
.cmake-format.yaml
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
# SPDX-FileCopyrightText: 2023 Tobias Schmidl
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
---
|
||||||
|
format:
|
||||||
|
line_width: 120
|
||||||
|
tab_size: 4
|
||||||
|
use_tabchars: true
|
||||||
|
fractional_tab_policy: round-up
|
||||||
|
max_subgroups_hwrap: 2
|
||||||
|
max_pargs_hwrap: 3
|
||||||
|
dangle_parens: true
|
||||||
|
dangle_align: prefix
|
||||||
|
min_prefix_chars: 0
|
||||||
|
max_prefix_chars: 16
|
||||||
|
keyword_case: upper
|
||||||
|
|
||||||
|
parse:
|
||||||
|
additional_commands:
|
||||||
|
cpmaddpackage:
|
||||||
|
pargs:
|
||||||
|
nargs: '*'
|
||||||
|
flags: []
|
||||||
|
spelling: CPMAddPackage
|
||||||
|
kwargs: &cpmaddpackagekwargs
|
||||||
|
NAME: 1
|
||||||
|
FORCE: 1
|
||||||
|
VERSION: 1
|
||||||
|
GIT_TAG: 1
|
||||||
|
DOWNLOAD_ONLY: 1
|
||||||
|
GITHUB_REPOSITORY: 1
|
||||||
|
GITLAB_REPOSITORY: 1
|
||||||
|
GIT_REPOSITORY: 1
|
||||||
|
SVN_REPOSITORY: 1
|
||||||
|
SVN_REVISION: 1
|
||||||
|
SOURCE_DIR: 1
|
||||||
|
DOWNLOAD_COMMAND: 1
|
||||||
|
FIND_PACKAGE_ARGUMENTS: 1
|
||||||
|
NO_CACHE: 1
|
||||||
|
GIT_SHALLOW: 1
|
||||||
|
URL: 1
|
||||||
|
URL_HASH: 1
|
||||||
|
URL_MD5: 1
|
||||||
|
DOWNLOAD_NAME: 1
|
||||||
|
DOWNLOAD_NO_EXTRACT: 1
|
||||||
|
HTTP_USERNAME: 1
|
||||||
|
HTTP_PASSWORD: 1
|
||||||
|
OPTIONS: +
|
||||||
|
cpmfindpackage:
|
||||||
|
pargs:
|
||||||
|
nargs: '*'
|
||||||
|
flags: []
|
||||||
|
spelling: CPMFindPackage
|
||||||
|
kwargs: *cpmaddpackagekwargs
|
||||||
|
packageproject:
|
||||||
|
pargs:
|
||||||
|
nargs: '*'
|
||||||
|
flags: []
|
||||||
|
spelling: packageProject
|
||||||
|
kwargs:
|
||||||
|
NAME: 1
|
||||||
|
VERSION: 1
|
||||||
|
NAMESPACE: 1
|
||||||
|
INCLUDE_DIR: 1
|
||||||
|
INCLUDE_DESTINATION: 1
|
||||||
|
BINARY_DIR: 1
|
||||||
|
COMPATIBILITY: 1
|
||||||
|
VERSION_HEADER: 1
|
||||||
|
DEPENDENCIES: +
|
||||||
|
...
|
121
LICENSES/CC0-1.0.txt
Normal file
121
LICENSES/CC0-1.0.txt
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
Creative Commons Legal Code
|
||||||
|
|
||||||
|
CC0 1.0 Universal
|
||||||
|
|
||||||
|
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||||
|
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||||
|
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||||
|
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||||
|
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||||
|
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||||
|
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||||
|
HEREUNDER.
|
||||||
|
|
||||||
|
Statement of Purpose
|
||||||
|
|
||||||
|
The laws of most jurisdictions throughout the world automatically confer
|
||||||
|
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||||
|
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||||
|
authorship and/or a database (each, a "Work").
|
||||||
|
|
||||||
|
Certain owners wish to permanently relinquish those rights to a Work for
|
||||||
|
the purpose of contributing to a commons of creative, cultural and
|
||||||
|
scientific works ("Commons") that the public can reliably and without fear
|
||||||
|
of later claims of infringement build upon, modify, incorporate in other
|
||||||
|
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||||
|
and for any purposes, including without limitation commercial purposes.
|
||||||
|
These owners may contribute to the Commons to promote the ideal of a free
|
||||||
|
culture and the further production of creative, cultural and scientific
|
||||||
|
works, or to gain reputation or greater distribution for their Work in
|
||||||
|
part through the use and efforts of others.
|
||||||
|
|
||||||
|
For these and/or other purposes and motivations, and without any
|
||||||
|
expectation of additional consideration or compensation, the person
|
||||||
|
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||||
|
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||||
|
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||||
|
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||||
|
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||||
|
|
||||||
|
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||||
|
protected by copyright and related or neighboring rights ("Copyright and
|
||||||
|
Related Rights"). Copyright and Related Rights include, but are not
|
||||||
|
limited to, the following:
|
||||||
|
|
||||||
|
i. the right to reproduce, adapt, distribute, perform, display,
|
||||||
|
communicate, and translate a Work;
|
||||||
|
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||||
|
iii. publicity and privacy rights pertaining to a person's image or
|
||||||
|
likeness depicted in a Work;
|
||||||
|
iv. rights protecting against unfair competition in regards to a Work,
|
||||||
|
subject to the limitations in paragraph 4(a), below;
|
||||||
|
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||||
|
in a Work;
|
||||||
|
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||||
|
European Parliament and of the Council of 11 March 1996 on the legal
|
||||||
|
protection of databases, and under any national implementation
|
||||||
|
thereof, including any amended or successor version of such
|
||||||
|
directive); and
|
||||||
|
vii. other similar, equivalent or corresponding rights throughout the
|
||||||
|
world based on applicable law or treaty, and any national
|
||||||
|
implementations thereof.
|
||||||
|
|
||||||
|
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||||
|
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||||
|
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||||
|
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||||
|
of action, whether now known or unknown (including existing as well as
|
||||||
|
future claims and causes of action), in the Work (i) in all territories
|
||||||
|
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||||
|
treaty (including future time extensions), (iii) in any current or future
|
||||||
|
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||||
|
including without limitation commercial, advertising or promotional
|
||||||
|
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||||
|
member of the public at large and to the detriment of Affirmer's heirs and
|
||||||
|
successors, fully intending that such Waiver shall not be subject to
|
||||||
|
revocation, rescission, cancellation, termination, or any other legal or
|
||||||
|
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||||
|
as contemplated by Affirmer's express Statement of Purpose.
|
||||||
|
|
||||||
|
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||||
|
be judged legally invalid or ineffective under applicable law, then the
|
||||||
|
Waiver shall be preserved to the maximum extent permitted taking into
|
||||||
|
account Affirmer's express Statement of Purpose. In addition, to the
|
||||||
|
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||||
|
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||||
|
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||||
|
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||||
|
maximum duration provided by applicable law or treaty (including future
|
||||||
|
time extensions), (iii) in any current or future medium and for any number
|
||||||
|
of copies, and (iv) for any purpose whatsoever, including without
|
||||||
|
limitation commercial, advertising or promotional purposes (the
|
||||||
|
"License"). The License shall be deemed effective as of the date CC0 was
|
||||||
|
applied by Affirmer to the Work. Should any part of the License for any
|
||||||
|
reason be judged legally invalid or ineffective under applicable law, such
|
||||||
|
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||||
|
of the License, and in such case Affirmer hereby affirms that he or she
|
||||||
|
will not (i) exercise any of his or her remaining Copyright and Related
|
||||||
|
Rights in the Work or (ii) assert any associated claims and causes of
|
||||||
|
action with respect to the Work, in either case contrary to Affirmer's
|
||||||
|
express Statement of Purpose.
|
||||||
|
|
||||||
|
4. Limitations and Disclaimers.
|
||||||
|
|
||||||
|
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||||
|
surrendered, licensed or otherwise affected by this document.
|
||||||
|
b. Affirmer offers the Work as-is and makes no representations or
|
||||||
|
warranties of any kind concerning the Work, express, implied,
|
||||||
|
statutory or otherwise, including without limitation warranties of
|
||||||
|
title, merchantability, fitness for a particular purpose, non
|
||||||
|
infringement, or the absence of latent or other defects, accuracy, or
|
||||||
|
the present or absence of errors, whether or not discoverable, all to
|
||||||
|
the greatest extent permissible under applicable law.
|
||||||
|
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||||
|
that may apply to the Work or any use thereof, including without
|
||||||
|
limitation any person's Copyright and Related Rights in the Work.
|
||||||
|
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||||
|
consents, permissions or other rights required for any use of the
|
||||||
|
Work.
|
||||||
|
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||||
|
party to this document and has no duty or obligation with respect to
|
||||||
|
this CC0 or use of the Work.
|
19
all/CMakeLists.txt
Normal file
19
all/CMakeLists.txt
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# SPDX-FileCopyrightText: 2023 github.com/TheLartians
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
# this script adds all subprojects to a single build to allow IDEs understand the full project
|
||||||
|
# structure.
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.14...3.22)
|
||||||
|
|
||||||
|
project(BuildAll LANGUAGES CXX)
|
||||||
|
|
||||||
|
include(../cmake/tools.cmake)
|
||||||
|
|
||||||
|
# needed to generate test target
|
||||||
|
enable_testing()
|
||||||
|
|
||||||
|
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../standalone ${CMAKE_BINARY_DIR}/standalone)
|
||||||
|
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../test ${CMAKE_BINARY_DIR}/test)
|
||||||
|
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../documentation ${CMAKE_BINARY_DIR}/documentation)
|
36
cmake/CPM.cmake
Normal file
36
cmake/CPM.cmake
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# SPDX-FileCopyrightText: 2023 github.com/TheLartians
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
set(CPM_DOWNLOAD_VERSION 0.37.0)
|
||||||
|
|
||||||
|
if(CPM_SOURCE_CACHE)
|
||||||
|
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||||
|
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
|
||||||
|
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||||
|
else()
|
||||||
|
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Expand relative path. This is important if the provided path contains a tilde (~)
|
||||||
|
get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE)
|
||||||
|
|
||||||
|
function(download_cpm)
|
||||||
|
message(STATUS "Downloading CPM.cmake to ${CPM_DOWNLOAD_LOCATION}")
|
||||||
|
file(DOWNLOAD
|
||||||
|
https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
|
||||||
|
${CPM_DOWNLOAD_LOCATION}
|
||||||
|
)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION}))
|
||||||
|
download_cpm()
|
||||||
|
else()
|
||||||
|
# resume download if it previously failed
|
||||||
|
file(READ ${CPM_DOWNLOAD_LOCATION} check)
|
||||||
|
if("${check}" STREQUAL "")
|
||||||
|
download_cpm()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(${CPM_DOWNLOAD_LOCATION})
|
70
cmake/tools.cmake
Normal file
70
cmake/tools.cmake
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
# SPDX-FileCopyrightText: 2023 github.com/TheLartians
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
# this file contains a list of tools that can be activated and downloaded on-demand each tool is
|
||||||
|
# enabled during configuration by passing an additional `-DUSE_<TOOL>=<VALUE>` argument to CMake
|
||||||
|
|
||||||
|
# only activate tools for top level project
|
||||||
|
if(NOT PROJECT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/CPM.cmake)
|
||||||
|
|
||||||
|
# enables sanitizers support using the the `USE_SANITIZER` flag available values are: Address,
|
||||||
|
# Memory, MemoryWithOrigins, Undefined, Thread, Leak, 'Address;Undefined'
|
||||||
|
if(USE_SANITIZER OR USE_STATIC_ANALYZER)
|
||||||
|
CPMAddPackage("gh:StableCoder/cmake-scripts#1f822d1fc87c8d7720c074cde8a278b44963c354")
|
||||||
|
|
||||||
|
if(USE_SANITIZER)
|
||||||
|
include(${cmake-scripts_SOURCE_DIR}/sanitizers.cmake)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(USE_STATIC_ANALYZER)
|
||||||
|
if("clang-tidy" IN_LIST USE_STATIC_ANALYZER)
|
||||||
|
set(CLANG_TIDY
|
||||||
|
ON
|
||||||
|
CACHE INTERNAL ""
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
set(CLANG_TIDY
|
||||||
|
OFF
|
||||||
|
CACHE INTERNAL ""
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
if("iwyu" IN_LIST USE_STATIC_ANALYZER)
|
||||||
|
set(IWYU
|
||||||
|
ON
|
||||||
|
CACHE INTERNAL ""
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
set(IWYU
|
||||||
|
OFF
|
||||||
|
CACHE INTERNAL ""
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
if("cppcheck" IN_LIST USE_STATIC_ANALYZER)
|
||||||
|
set(CPPCHECK
|
||||||
|
ON
|
||||||
|
CACHE INTERNAL ""
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
set(CPPCHECK
|
||||||
|
OFF
|
||||||
|
CACHE INTERNAL ""
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(${cmake-scripts_SOURCE_DIR}/tools.cmake)
|
||||||
|
|
||||||
|
clang_tidy(${CLANG_TIDY_ARGS})
|
||||||
|
include_what_you_use(${IWYU_ARGS})
|
||||||
|
cppcheck(${CPPCHECK_ARGS})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# enables CCACHE support through the USE_CCACHE flag possible values are: YES, NO or equivalent
|
||||||
|
if(USE_CCACHE)
|
||||||
|
CPMAddPackage("gh:TheLartians/Ccache.cmake@1.2.3")
|
||||||
|
endif()
|
35
documentation/Doxyfile
Normal file
35
documentation/Doxyfile
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
# SPDX-FileCopyrightText: 2023 github.com/TheLartians
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
# Configuration for Doxygen for use with CMake
|
||||||
|
# Only options that deviate from the default are included
|
||||||
|
# To create a new Doxyfile containing all available options, call `doxygen -g`
|
||||||
|
|
||||||
|
# Get Project name and version from CMake
|
||||||
|
PROJECT_NAME = @DOXYGEN_PROJECT_NAME@
|
||||||
|
PROJECT_NUMBER = @DOXYGEN_PROJECT_VERSION@
|
||||||
|
|
||||||
|
# Add sources
|
||||||
|
INPUT = @DOXYGEN_PROJECT_ROOT@/README.md @DOXYGEN_PROJECT_ROOT@/include @DOXYGEN_PROJECT_ROOT@/documentation/pages
|
||||||
|
EXTRACT_ALL = YES
|
||||||
|
RECURSIVE = YES
|
||||||
|
OUTPUT_DIRECTORY = @DOXYGEN_OUTPUT_DIRECTORY@
|
||||||
|
|
||||||
|
# Use the README as a main page
|
||||||
|
USE_MDFILE_AS_MAINPAGE = @DOXYGEN_PROJECT_ROOT@/README.md
|
||||||
|
|
||||||
|
# set relative include paths
|
||||||
|
FULL_PATH_NAMES = YES
|
||||||
|
STRIP_FROM_PATH = @DOXYGEN_PROJECT_ROOT@/include @DOXYGEN_PROJECT_ROOT@
|
||||||
|
|
||||||
|
# We use m.css to generate the html documentation, so we only need XML output
|
||||||
|
GENERATE_XML = YES
|
||||||
|
GENERATE_HTML = NO
|
||||||
|
GENERATE_LATEX = NO
|
||||||
|
XML_PROGRAMLISTING = NO
|
||||||
|
CREATE_SUBDIRS = NO
|
||||||
|
|
||||||
|
# Include all directories, files and namespaces in the documentation
|
||||||
|
# Disable to include only explicitly documented objects
|
||||||
|
M_SHOW_UNDOCUMENTED = YES
|
23
documentation/conf.py
Normal file
23
documentation/conf.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# SPDX-FileCopyrightText: 2023 github.com/TheLartians
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
DOXYFILE = 'Doxyfile'
|
||||||
|
|
||||||
|
LINKS_NAVBAR1 = [
|
||||||
|
(None, 'pages', [(None, 'about')]),
|
||||||
|
(None, 'namespaces', []),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Add your own navbar links using the code below.
|
||||||
|
# To find the valid link names, you can inspect the URL of a generated documentation site.
|
||||||
|
|
||||||
|
# LINKS_NAVBAR1 = [
|
||||||
|
# (None, 'pages', [(None, 'about')]),
|
||||||
|
# (None, 'namespaces', [(None, 'namespacegreeter')]),
|
||||||
|
# ]
|
||||||
|
#
|
||||||
|
# LINKS_NAVBAR2 = [
|
||||||
|
# (None, 'annotated', [(None, 'classgreeter_1_1_greeter')]),
|
||||||
|
# (None, 'files', [(None, 'greeter_8h')]),
|
||||||
|
# ]
|
Loading…
Add table
Add a link
Reference in a new issue