From 3adb19d30adf45daa0cdce3b4fc7809c6d85e578 Mon Sep 17 00:00:00 2001 From: Template Janitor Date: Tue, 2 Jan 2024 12:25:06 +0000 Subject: [PATCH] Cleanup template and initialize repository --- .github/FUNDING.yml | 4 - .github/constants.env | 2 +- .github/template/README.md | 16 -- .github/template/removal-list | 2 - .github/template/template_name | 1 - .github/template/template_repository | 1 - .github/workflows/template-janitor.yml | 247 ------------------ CMakeLists.txt | 32 +-- Dependencies.cmake | 2 +- LICENSE | 24 -- ProjectOptions.cmake | 198 +++++++------- README.md | 59 +---- cmake/Cache.cmake | 2 +- cmake/CompilerWarnings.cmake | 2 +- cmake/Cuda.cmake | 2 +- cmake/Doxygen.cmake | 2 +- cmake/Hardening.cmake | 2 +- cmake/InterproceduralOptimization.cmake | 2 +- cmake/LibFuzzer.cmake | 2 +- cmake/Linker.cmake | 2 +- cmake/PackageProject.cmake | 2 +- cmake/PreventInSourceBuilds.cmake | 4 +- cmake/Sanitizers.cmake | 2 +- cmake/StaticAnalyzers.cmake | 6 +- cmake/Tests.cmake | 2 +- configured_files/config.hpp.in | 8 +- fuzz_test/CMakeLists.txt | 4 +- .../sample_library.hpp | 2 +- src/ftxui_sample/CMakeLists.txt | 4 +- src/ftxui_sample/main.cpp | 6 +- src/sample_library/CMakeLists.txt | 6 +- src/sample_library/sample_library.cpp | 2 +- test/CMakeLists.txt | 22 +- test/constexpr_tests.cpp | 2 +- test/tests.cpp | 2 +- 35 files changed, 168 insertions(+), 510 deletions(-) delete mode 100644 .github/FUNDING.yml delete mode 100644 .github/template/README.md delete mode 100644 .github/template/removal-list delete mode 100644 .github/template/template_name delete mode 100644 .github/template/template_repository delete mode 100644 .github/workflows/template-janitor.yml delete mode 100644 LICENSE rename include/{myproject => cmake_experiment}/sample_library.hpp (84%) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index c7270da..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,4 +0,0 @@ -# These are supported funding model platforms - -github: lefticus -patreon: lefticus diff --git a/.github/constants.env b/.github/constants.env index 5c8528a..c2ae8eb 100644 --- a/.github/constants.env +++ b/.github/constants.env @@ -1 +1 @@ -PROJECT_NAME=myproject +PROJECT_NAME=cmake_experiment diff --git a/.github/template/README.md b/.github/template/README.md deleted file mode 100644 index c7b5b7e..0000000 --- a/.github/template/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# %%myproject%% - -[![ci](https://github.com/%%myorg%%/%%myproject%%/actions/workflows/ci.yml/badge.svg)](https://github.com/%%myorg%%/%%myproject%%/actions/workflows/ci.yml) -[![codecov](https://codecov.io/gh/%%myorg%%/%%myproject%%/branch/main/graph/badge.svg)](https://codecov.io/gh/%%myorg%%/%%myproject%%) -[![CodeQL](https://github.com/%%myorg%%/%%myproject%%/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/%%myorg%%/%%myproject%%/actions/workflows/codeql-analysis.yml) - -## About %%myproject%% -%%description%% - - -## More Details - - * [Dependency Setup](README_dependencies.md) - * [Building Details](README_building.md) - * [Troubleshooting](README_troubleshooting.md) - * [Docker](README_docker.md) diff --git a/.github/template/removal-list b/.github/template/removal-list deleted file mode 100644 index 4f63e51..0000000 --- a/.github/template/removal-list +++ /dev/null @@ -1,2 +0,0 @@ -LICENSE -.github/FUNDING.yml \ No newline at end of file diff --git a/.github/template/template_name b/.github/template/template_name deleted file mode 100644 index eb23e25..0000000 --- a/.github/template/template_name +++ /dev/null @@ -1 +0,0 @@ -cmake_template diff --git a/.github/template/template_repository b/.github/template/template_repository deleted file mode 100644 index 5494e8a..0000000 --- a/.github/template/template_repository +++ /dev/null @@ -1 +0,0 @@ -cpp-best-practices/cmake_template diff --git a/.github/workflows/template-janitor.yml b/.github/workflows/template-janitor.yml deleted file mode 100644 index bc56ba0..0000000 --- a/.github/workflows/template-janitor.yml +++ /dev/null @@ -1,247 +0,0 @@ -# This workflow should cleanup everything unneeded from the template project - -name: Template Janitor - -on: - pull_request: - release: - types: [published] - push: - branches: - - main - - develop -permissions: - contents: write - -env: - TEMPLATES_PATH: ".github/template" - - -jobs: - - template-cleanup: - name: Cleanup after create - runs-on: ubuntu-latest - strategy: - matrix: - compiler: - - gcc-11 - generator: - - "Unix Makefiles" - build_type: - - Debug - developer_mode: - - OFF - - steps: - - uses: actions/checkout@v3 - - - name: Setup Cache - uses: ./.github/actions/setup_cache - with: - compiler: ${{ matrix.compiler }} - build_type: ${{ matrix.build_type }} - developer_mode: ${{ matrix.developer_mode }} - generator: ${{ matrix.generator }} - - - name: Get organization and project name - run: | - echo "NEW_ORG=${{ github.repository_owner }}" >> $GITHUB_ENV - echo "NEW_PROJECT=${{ github.event.repository.name }}" >> $GITHUB_ENV - echo "NEW_URL=${{ github.repositoryUrl }}" >> $GITHUB_ENV - - - uses: octokit/request-action@v2.x - id: get_repo_meta - with: - route: GET /repos/{owner}/{repo} - owner: ${{ env.NEW_ORG }} - repo: ${{ env.NEW_PROJECT }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Use testing variables if still a template - if: fromJson(steps.get_repo_meta.outputs.data).is_template == true - run: | - # This name is unsafe because it is not a valid C++ identifier - echo "NEW_PROJECT=my-unsafe.project" >> $GITHUB_ENV - - - name: Add safe replacement variable versions - run: | - # hyphens and dots in c++ identifiers are forbidden. Use underscores instead. - NEW_SAFE_PROJECT=$(echo ${{ env.NEW_PROJECT }} | sed "s/-/_/g" | sed "s/\./_/g" ) - echo "NEW_SAFE_PROJECT=$NEW_SAFE_PROJECT" >> $GITHUB_ENV - - # Rename all cpp_starter_project occurences to current repository and remove this workflow - - name: Insert new org and project - run: | - # rename the CMake project to match the github project - find src include test fuzz_test cmake -type f -exec sed -i "s/myproject/${{ env.NEW_SAFE_PROJECT }}/gi" .github/constants.env CMakeLists.txt Dependencies.cmake ProjectOptions.cmake .github/workflows/ci.yml .github/workflows/codeql-analysis.yml configured_files/config.hpp.in {} + - - # Update URL placeholders for project - sed -i "s|%%myurl%%|${{ fromJson(steps.get_repo_meta.outputs.data).html_url }}|gi" CMakeLists.txt - - # fill in placeholders of readme and move it into place - sed -i "s/%%myorg%%/${{ env.NEW_ORG }}/g" ${{ env.TEMPLATES_PATH }}/README.md - sed -i "s/%%myproject%%/${{ env.NEW_PROJECT }}/g" ${{ env.TEMPLATES_PATH }}/README.md - sed -i "s|%%description%%|${{ fromJson(steps.get_repo_meta.outputs.data).description }}|g" ${{ env.TEMPLATES_PATH }}/README.md - mv include/myproject include/${{ env.NEW_SAFE_PROJECT }} - cp ${{ env.TEMPLATES_PATH }}/README.md README.md - - - name: Print diff after replacement - run: | - # Exclude the README as that is checked separately! - git diff ':!README.md' - # following should not have any diffs - diff ${{ env.TEMPLATES_PATH }}/README.md README.md - - - name: Remove unwanted files - run: | - # No tests needed as this will fail if any file from the list is missing/misspelled - xargs rm -r < ${{ env.TEMPLATES_PATH }}/removal-list - - - name: Clean up before commit and push - run: | - rm -r ${{ env.TEMPLATES_PATH }} - - # Can we get that from a variable? - # Remove this workflow as it has fulfilled its purpose - rm .github/workflows/template-janitor.yml - - - name: Setup Cpp - uses: aminya/setup-cpp@v1 - with: - compiler: ${{ matrix.compiler }} - - cmake: true - ninja: false - vcpkg: false - ccache: false - clangtidy: false - - cppcheck: false - - gcovr: false - opencppcoverage: false - - - name: Project Name - uses: cardinalby/export-env-action@v2 - with: - envFile: '.github/constants.env' - - - - - name: Test simple configuration to make sure nothing broke - run: | - cmake -S . -B ./build -G "${{ matrix.generator }}" -DCMAKE_BUILD_TYPE:STRING=${{ matrix.build_type }} -D${{ env.NEW_SAFE_PROJECT }}_PACKAGING_MAINTAINER_MODE:BOOL=ON - # Build it because we may have broken something in the cpp/hpp files - cmake --build build - - - uses: EndBug/add-and-commit@v9 - # only commit and push if we are not a template project anymore! - if: fromJson(steps.get_repo_meta.outputs.data).is_template != true - with: - add: -A - author_name: Template Janitor - author_email: template.janitor@example.com - message: 'Cleanup template and initialize repository' - pathspec_error_handling: exitImmediately - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - - template-rename: - name: Renames template when a new name is detected - runs-on: ubuntu-latest - strategy: - matrix: - compiler: - - gcc-11 - generator: - - "Unix Makefiles" - build_type: - - Debug - developer_mode: - - OFF - - steps: - - uses: actions/checkout@v3 - - - name: Setup Cache - uses: ./.github/actions/setup_cache - with: - compiler: ${{ matrix.compiler }} - build_type: ${{ matrix.build_type }} - developer_mode: ${{ matrix.developer_mode }} - generator: ${{ matrix.generator }} - - - name: Get organization and project name - run: | - echo "TEST_RUN=false" >> $GITHUB_ENV - echo "NEW_ORG=${{ github.repository_owner }}" >> $GITHUB_ENV - echo "NEW_PROJECT=${{ github.event.repository.name }}" >> $GITHUB_ENV - echo "NEW_REPOSITORY=${{ github.repository }}" >> $GITHUB_ENV - echo "TEMPLATE_NAME=`cat ${{ env.TEMPLATES_PATH }}/template_name`" >> $GITHUB_ENV - echo "TEMPLATE_REPOSITORY=`cat ${{ env.TEMPLATES_PATH }}/template_repository`" >> $GITHUB_ENV - - - uses: octokit/request-action@v2.x - id: get_repo_meta - with: - route: GET /repos/{owner}/{repo} - owner: ${{ env.NEW_ORG }} - repo: ${{ env.NEW_PROJECT }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Setup fake test org/project names if project didn't change - if: env.TEMPLATE_NAME == env.NEW_PROJECT - run: | - echo "TEST_RUN=true" >> $GITHUB_ENV - echo "NEW_ORG=${{ github.repository_owner }}" >> $GITHUB_ENV - echo "NEW_PROJECT=TEST_PROJECT" >> $GITHUB_ENV - echo "NEW_REPOSITORY=TEST_REPOSITORY" >> $GITHUB_ENV - - - # Rename all cpp_starter_project occurrences to current repository and remove this workflow - - name: Update repository to match new template information - run: | - # Update the README and template files to match the new org / repository names - sed -i "s|${{ env.TEMPLATE_REPOSITORY }}|${{ env.NEW_REPOSITORY }}|g" README.md ${{ env.TEMPLATES_PATH }}/template_repository - sed -i "s|${{ env.TEMPLATE_NAME }}|${{ env.NEW_PROJECT }}|g" README.md ${{ env.TEMPLATES_PATH }}/template_name - - - name: Print diff after template name replacement - run: | - git diff - - - name: Setup Cpp - uses: aminya/setup-cpp@v1 - with: - compiler: gcc - - cmake: true - ninja: false - vcpkg: false - ccache: false - clangtidy: false - - cppcheck: false - - gcovr: false - opencppcoverage: false - - - - name: Test simple configuration to make sure nothing broke (default compiler,cmake,developer_mode OFF) - run: | - cmake -S . -B ./build -G "${{ matrix.generator }}" -DCMAKE_BUILD_TYPE:STRING=${{ matrix.build_type }} -D${{ env.PROJECT_NAME }}_PACKAGING_MAINTAINER_MODE:BOOL=ON - - - uses: EndBug/add-and-commit@v9 - # only commit and push if we are a template and project name has changed - if: fromJson(steps.get_repo_meta.outputs.data).is_template == true && env.TEST_RUN == 'false' - with: - add: -A - author_name: Template Janitor - author_email: template.janitor@example.com - message: 'Change Template Name' - pathspec_error_handling: exitImmediately - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/CMakeLists.txt b/CMakeLists.txt index 45e19f0..b9b62e0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,23 +16,23 @@ set(CMAKE_CXX_EXTENSIONS OFF) # Set the project name and language project( - myproject + cmake_experiment VERSION 0.0.1 DESCRIPTION "" - HOMEPAGE_URL "%%myurl%%" + HOMEPAGE_URL "https://github.com/pkp124/cmake_experiment" LANGUAGES CXX C) include(cmake/PreventInSourceBuilds.cmake) include(ProjectOptions.cmake) -myproject_setup_options() +cmake_experiment_setup_options() -myproject_global_options() +cmake_experiment_global_options() include(Dependencies.cmake) -myproject_setup_dependencies() +cmake_experiment_setup_dependencies() -myproject_local_options() +cmake_experiment_local_options() # don't know if this should be set globally from here or not... set(CMAKE_CXX_VISIBILITY_PRESET hidden) @@ -46,13 +46,13 @@ string( 8 GIT_SHORT_SHA) -target_compile_features(myproject_options INTERFACE cxx_std_${CMAKE_CXX_STANDARD}) +target_compile_features(cmake_experiment_options INTERFACE cxx_std_${CMAKE_CXX_STANDARD}) -add_library(myproject::myproject_options ALIAS myproject_options) -add_library(myproject::myproject_warnings ALIAS myproject_warnings) +add_library(cmake_experiment::cmake_experiment_options ALIAS cmake_experiment_options) +add_library(cmake_experiment::cmake_experiment_warnings ALIAS cmake_experiment_warnings) -#add_library(myproject::myproject_options INTERFACE IMPORTED) -#add_library(myproject::myproject_warnings INTERFACE IMPORTED) +#add_library(cmake_experiment::cmake_experiment_options INTERFACE IMPORTED) +#add_library(cmake_experiment::cmake_experiment_warnings INTERFACE IMPORTED) # configure files based on CMake configuration options add_subdirectory(configured_files) @@ -74,9 +74,9 @@ if(BUILD_TESTING) endif() -if(myproject_BUILD_FUZZ_TESTS) +if(cmake_experiment_BUILD_FUZZ_TESTS) message(AUTHOR_WARNING "Building Fuzz Tests, using fuzzing sanitizer https://www.llvm.org/docs/LibFuzzer.html") - if (NOT myproject_ENABLE_ADDRESS_SANITIZER AND NOT myproject_ENABLE_THREAD_SANITIZER) + if (NOT cmake_experiment_ENABLE_ADDRESS_SANITIZER AND NOT cmake_experiment_ENABLE_THREAD_SANITIZER) message(WARNING "You need asan or tsan enabled for meaningful fuzz testing") endif() add_subdirectory(fuzz_test) @@ -102,11 +102,11 @@ include(cmake/PackageProject.cmake) # Add other targets that you want installed here, by default we just package the one executable # we know we want to ship -myproject_package_project( +cmake_experiment_package_project( TARGETS intro - myproject_options - myproject_warnings + cmake_experiment_options + cmake_experiment_warnings # FIXME: this does not work! CK # PRIVATE_DEPENDENCIES_CONFIGURED project_options project_warnings ) diff --git a/Dependencies.cmake b/Dependencies.cmake index a84378d..42711ea 100644 --- a/Dependencies.cmake +++ b/Dependencies.cmake @@ -3,7 +3,7 @@ include(cmake/CPM.cmake) # Done as a function so that updates to variables like # CMAKE_CXX_FLAGS don't propagate out to other # targets -function(myproject_setup_dependencies) +function(cmake_experiment_setup_dependencies) # For each dependency, see if it's # already been provided to us by a parent project diff --git a/LICENSE b/LICENSE deleted file mode 100644 index fdddb29..0000000 --- a/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to diff --git a/ProjectOptions.cmake b/ProjectOptions.cmake index 2709aa1..a446bab 100644 --- a/ProjectOptions.cmake +++ b/ProjectOptions.cmake @@ -4,7 +4,7 @@ include(CMakeDependentOption) include(CheckCXXCompilerFlag) -macro(myproject_supports_sanitizers) +macro(cmake_experiment_supports_sanitizers) if((CMAKE_CXX_COMPILER_ID MATCHES ".*Clang.*" OR CMAKE_CXX_COMPILER_ID MATCHES ".*GNU.*") AND NOT WIN32) set(SUPPORTS_UBSAN ON) else() @@ -18,183 +18,183 @@ macro(myproject_supports_sanitizers) endif() endmacro() -macro(myproject_setup_options) - option(myproject_ENABLE_HARDENING "Enable hardening" ON) - option(myproject_ENABLE_COVERAGE "Enable coverage reporting" OFF) +macro(cmake_experiment_setup_options) + option(cmake_experiment_ENABLE_HARDENING "Enable hardening" ON) + option(cmake_experiment_ENABLE_COVERAGE "Enable coverage reporting" OFF) cmake_dependent_option( - myproject_ENABLE_GLOBAL_HARDENING + cmake_experiment_ENABLE_GLOBAL_HARDENING "Attempt to push hardening options to built dependencies" ON - myproject_ENABLE_HARDENING + cmake_experiment_ENABLE_HARDENING OFF) - myproject_supports_sanitizers() - - if(NOT PROJECT_IS_TOP_LEVEL OR myproject_PACKAGING_MAINTAINER_MODE) - option(myproject_ENABLE_IPO "Enable IPO/LTO" OFF) - option(myproject_WARNINGS_AS_ERRORS "Treat Warnings As Errors" OFF) - option(myproject_ENABLE_USER_LINKER "Enable user-selected linker" OFF) - option(myproject_ENABLE_SANITIZER_ADDRESS "Enable address sanitizer" OFF) - option(myproject_ENABLE_SANITIZER_LEAK "Enable leak sanitizer" OFF) - option(myproject_ENABLE_SANITIZER_UNDEFINED "Enable undefined sanitizer" OFF) - option(myproject_ENABLE_SANITIZER_THREAD "Enable thread sanitizer" OFF) - option(myproject_ENABLE_SANITIZER_MEMORY "Enable memory sanitizer" OFF) - option(myproject_ENABLE_UNITY_BUILD "Enable unity builds" OFF) - option(myproject_ENABLE_CLANG_TIDY "Enable clang-tidy" OFF) - option(myproject_ENABLE_CPPCHECK "Enable cpp-check analysis" OFF) - option(myproject_ENABLE_PCH "Enable precompiled headers" OFF) - option(myproject_ENABLE_CACHE "Enable ccache" OFF) + cmake_experiment_supports_sanitizers() + + if(NOT PROJECT_IS_TOP_LEVEL OR cmake_experiment_PACKAGING_MAINTAINER_MODE) + option(cmake_experiment_ENABLE_IPO "Enable IPO/LTO" OFF) + option(cmake_experiment_WARNINGS_AS_ERRORS "Treat Warnings As Errors" OFF) + option(cmake_experiment_ENABLE_USER_LINKER "Enable user-selected linker" OFF) + option(cmake_experiment_ENABLE_SANITIZER_ADDRESS "Enable address sanitizer" OFF) + option(cmake_experiment_ENABLE_SANITIZER_LEAK "Enable leak sanitizer" OFF) + option(cmake_experiment_ENABLE_SANITIZER_UNDEFINED "Enable undefined sanitizer" OFF) + option(cmake_experiment_ENABLE_SANITIZER_THREAD "Enable thread sanitizer" OFF) + option(cmake_experiment_ENABLE_SANITIZER_MEMORY "Enable memory sanitizer" OFF) + option(cmake_experiment_ENABLE_UNITY_BUILD "Enable unity builds" OFF) + option(cmake_experiment_ENABLE_CLANG_TIDY "Enable clang-tidy" OFF) + option(cmake_experiment_ENABLE_CPPCHECK "Enable cpp-check analysis" OFF) + option(cmake_experiment_ENABLE_PCH "Enable precompiled headers" OFF) + option(cmake_experiment_ENABLE_CACHE "Enable ccache" OFF) else() - option(myproject_ENABLE_IPO "Enable IPO/LTO" ON) - option(myproject_WARNINGS_AS_ERRORS "Treat Warnings As Errors" ON) - option(myproject_ENABLE_USER_LINKER "Enable user-selected linker" OFF) - option(myproject_ENABLE_SANITIZER_ADDRESS "Enable address sanitizer" ${SUPPORTS_ASAN}) - option(myproject_ENABLE_SANITIZER_LEAK "Enable leak sanitizer" OFF) - option(myproject_ENABLE_SANITIZER_UNDEFINED "Enable undefined sanitizer" ${SUPPORTS_UBSAN}) - option(myproject_ENABLE_SANITIZER_THREAD "Enable thread sanitizer" OFF) - option(myproject_ENABLE_SANITIZER_MEMORY "Enable memory sanitizer" OFF) - option(myproject_ENABLE_UNITY_BUILD "Enable unity builds" OFF) - option(myproject_ENABLE_CLANG_TIDY "Enable clang-tidy" ON) - option(myproject_ENABLE_CPPCHECK "Enable cpp-check analysis" ON) - option(myproject_ENABLE_PCH "Enable precompiled headers" OFF) - option(myproject_ENABLE_CACHE "Enable ccache" ON) + option(cmake_experiment_ENABLE_IPO "Enable IPO/LTO" ON) + option(cmake_experiment_WARNINGS_AS_ERRORS "Treat Warnings As Errors" ON) + option(cmake_experiment_ENABLE_USER_LINKER "Enable user-selected linker" OFF) + option(cmake_experiment_ENABLE_SANITIZER_ADDRESS "Enable address sanitizer" ${SUPPORTS_ASAN}) + option(cmake_experiment_ENABLE_SANITIZER_LEAK "Enable leak sanitizer" OFF) + option(cmake_experiment_ENABLE_SANITIZER_UNDEFINED "Enable undefined sanitizer" ${SUPPORTS_UBSAN}) + option(cmake_experiment_ENABLE_SANITIZER_THREAD "Enable thread sanitizer" OFF) + option(cmake_experiment_ENABLE_SANITIZER_MEMORY "Enable memory sanitizer" OFF) + option(cmake_experiment_ENABLE_UNITY_BUILD "Enable unity builds" OFF) + option(cmake_experiment_ENABLE_CLANG_TIDY "Enable clang-tidy" ON) + option(cmake_experiment_ENABLE_CPPCHECK "Enable cpp-check analysis" ON) + option(cmake_experiment_ENABLE_PCH "Enable precompiled headers" OFF) + option(cmake_experiment_ENABLE_CACHE "Enable ccache" ON) endif() if(NOT PROJECT_IS_TOP_LEVEL) mark_as_advanced( - myproject_ENABLE_IPO - myproject_WARNINGS_AS_ERRORS - myproject_ENABLE_USER_LINKER - myproject_ENABLE_SANITIZER_ADDRESS - myproject_ENABLE_SANITIZER_LEAK - myproject_ENABLE_SANITIZER_UNDEFINED - myproject_ENABLE_SANITIZER_THREAD - myproject_ENABLE_SANITIZER_MEMORY - myproject_ENABLE_UNITY_BUILD - myproject_ENABLE_CLANG_TIDY - myproject_ENABLE_CPPCHECK - myproject_ENABLE_COVERAGE - myproject_ENABLE_PCH - myproject_ENABLE_CACHE) - endif() - - myproject_check_libfuzzer_support(LIBFUZZER_SUPPORTED) - if(LIBFUZZER_SUPPORTED AND (myproject_ENABLE_SANITIZER_ADDRESS OR myproject_ENABLE_SANITIZER_THREAD OR myproject_ENABLE_SANITIZER_UNDEFINED)) + cmake_experiment_ENABLE_IPO + cmake_experiment_WARNINGS_AS_ERRORS + cmake_experiment_ENABLE_USER_LINKER + cmake_experiment_ENABLE_SANITIZER_ADDRESS + cmake_experiment_ENABLE_SANITIZER_LEAK + cmake_experiment_ENABLE_SANITIZER_UNDEFINED + cmake_experiment_ENABLE_SANITIZER_THREAD + cmake_experiment_ENABLE_SANITIZER_MEMORY + cmake_experiment_ENABLE_UNITY_BUILD + cmake_experiment_ENABLE_CLANG_TIDY + cmake_experiment_ENABLE_CPPCHECK + cmake_experiment_ENABLE_COVERAGE + cmake_experiment_ENABLE_PCH + cmake_experiment_ENABLE_CACHE) + endif() + + cmake_experiment_check_libfuzzer_support(LIBFUZZER_SUPPORTED) + if(LIBFUZZER_SUPPORTED AND (cmake_experiment_ENABLE_SANITIZER_ADDRESS OR cmake_experiment_ENABLE_SANITIZER_THREAD OR cmake_experiment_ENABLE_SANITIZER_UNDEFINED)) set(DEFAULT_FUZZER ON) else() set(DEFAULT_FUZZER OFF) endif() - option(myproject_BUILD_FUZZ_TESTS "Enable fuzz testing executable" ${DEFAULT_FUZZER}) + option(cmake_experiment_BUILD_FUZZ_TESTS "Enable fuzz testing executable" ${DEFAULT_FUZZER}) endmacro() -macro(myproject_global_options) - if(myproject_ENABLE_IPO) +macro(cmake_experiment_global_options) + if(cmake_experiment_ENABLE_IPO) include(cmake/InterproceduralOptimization.cmake) - myproject_enable_ipo() + cmake_experiment_enable_ipo() endif() - myproject_supports_sanitizers() + cmake_experiment_supports_sanitizers() - if(myproject_ENABLE_HARDENING AND myproject_ENABLE_GLOBAL_HARDENING) + if(cmake_experiment_ENABLE_HARDENING AND cmake_experiment_ENABLE_GLOBAL_HARDENING) include(cmake/Hardening.cmake) if(NOT SUPPORTS_UBSAN - OR myproject_ENABLE_SANITIZER_UNDEFINED - OR myproject_ENABLE_SANITIZER_ADDRESS - OR myproject_ENABLE_SANITIZER_THREAD - OR myproject_ENABLE_SANITIZER_LEAK) + OR cmake_experiment_ENABLE_SANITIZER_UNDEFINED + OR cmake_experiment_ENABLE_SANITIZER_ADDRESS + OR cmake_experiment_ENABLE_SANITIZER_THREAD + OR cmake_experiment_ENABLE_SANITIZER_LEAK) set(ENABLE_UBSAN_MINIMAL_RUNTIME FALSE) else() set(ENABLE_UBSAN_MINIMAL_RUNTIME TRUE) endif() - message("${myproject_ENABLE_HARDENING} ${ENABLE_UBSAN_MINIMAL_RUNTIME} ${myproject_ENABLE_SANITIZER_UNDEFINED}") - myproject_enable_hardening(myproject_options ON ${ENABLE_UBSAN_MINIMAL_RUNTIME}) + message("${cmake_experiment_ENABLE_HARDENING} ${ENABLE_UBSAN_MINIMAL_RUNTIME} ${cmake_experiment_ENABLE_SANITIZER_UNDEFINED}") + cmake_experiment_enable_hardening(cmake_experiment_options ON ${ENABLE_UBSAN_MINIMAL_RUNTIME}) endif() endmacro() -macro(myproject_local_options) +macro(cmake_experiment_local_options) if(PROJECT_IS_TOP_LEVEL) include(cmake/StandardProjectSettings.cmake) endif() - add_library(myproject_warnings INTERFACE) - add_library(myproject_options INTERFACE) + add_library(cmake_experiment_warnings INTERFACE) + add_library(cmake_experiment_options INTERFACE) include(cmake/CompilerWarnings.cmake) - myproject_set_project_warnings( - myproject_warnings - ${myproject_WARNINGS_AS_ERRORS} + cmake_experiment_set_project_warnings( + cmake_experiment_warnings + ${cmake_experiment_WARNINGS_AS_ERRORS} "" "" "" "") - if(myproject_ENABLE_USER_LINKER) + if(cmake_experiment_ENABLE_USER_LINKER) include(cmake/Linker.cmake) - configure_linker(myproject_options) + configure_linker(cmake_experiment_options) endif() include(cmake/Sanitizers.cmake) - myproject_enable_sanitizers( - myproject_options - ${myproject_ENABLE_SANITIZER_ADDRESS} - ${myproject_ENABLE_SANITIZER_LEAK} - ${myproject_ENABLE_SANITIZER_UNDEFINED} - ${myproject_ENABLE_SANITIZER_THREAD} - ${myproject_ENABLE_SANITIZER_MEMORY}) + cmake_experiment_enable_sanitizers( + cmake_experiment_options + ${cmake_experiment_ENABLE_SANITIZER_ADDRESS} + ${cmake_experiment_ENABLE_SANITIZER_LEAK} + ${cmake_experiment_ENABLE_SANITIZER_UNDEFINED} + ${cmake_experiment_ENABLE_SANITIZER_THREAD} + ${cmake_experiment_ENABLE_SANITIZER_MEMORY}) - set_target_properties(myproject_options PROPERTIES UNITY_BUILD ${myproject_ENABLE_UNITY_BUILD}) + set_target_properties(cmake_experiment_options PROPERTIES UNITY_BUILD ${cmake_experiment_ENABLE_UNITY_BUILD}) - if(myproject_ENABLE_PCH) + if(cmake_experiment_ENABLE_PCH) target_precompile_headers( - myproject_options + cmake_experiment_options INTERFACE ) endif() - if(myproject_ENABLE_CACHE) + if(cmake_experiment_ENABLE_CACHE) include(cmake/Cache.cmake) - myproject_enable_cache() + cmake_experiment_enable_cache() endif() include(cmake/StaticAnalyzers.cmake) - if(myproject_ENABLE_CLANG_TIDY) - myproject_enable_clang_tidy(myproject_options ${myproject_WARNINGS_AS_ERRORS}) + if(cmake_experiment_ENABLE_CLANG_TIDY) + cmake_experiment_enable_clang_tidy(cmake_experiment_options ${cmake_experiment_WARNINGS_AS_ERRORS}) endif() - if(myproject_ENABLE_CPPCHECK) - myproject_enable_cppcheck(${myproject_WARNINGS_AS_ERRORS} "" # override cppcheck options + if(cmake_experiment_ENABLE_CPPCHECK) + cmake_experiment_enable_cppcheck(${cmake_experiment_WARNINGS_AS_ERRORS} "" # override cppcheck options ) endif() - if(myproject_ENABLE_COVERAGE) + if(cmake_experiment_ENABLE_COVERAGE) include(cmake/Tests.cmake) - myproject_enable_coverage(myproject_options) + cmake_experiment_enable_coverage(cmake_experiment_options) endif() - if(myproject_WARNINGS_AS_ERRORS) + if(cmake_experiment_WARNINGS_AS_ERRORS) check_cxx_compiler_flag("-Wl,--fatal-warnings" LINKER_FATAL_WARNINGS) if(LINKER_FATAL_WARNINGS) # This is not working consistently, so disabling for now - # target_link_options(myproject_options INTERFACE -Wl,--fatal-warnings) + # target_link_options(cmake_experiment_options INTERFACE -Wl,--fatal-warnings) endif() endif() - if(myproject_ENABLE_HARDENING AND NOT myproject_ENABLE_GLOBAL_HARDENING) + if(cmake_experiment_ENABLE_HARDENING AND NOT cmake_experiment_ENABLE_GLOBAL_HARDENING) include(cmake/Hardening.cmake) if(NOT SUPPORTS_UBSAN - OR myproject_ENABLE_SANITIZER_UNDEFINED - OR myproject_ENABLE_SANITIZER_ADDRESS - OR myproject_ENABLE_SANITIZER_THREAD - OR myproject_ENABLE_SANITIZER_LEAK) + OR cmake_experiment_ENABLE_SANITIZER_UNDEFINED + OR cmake_experiment_ENABLE_SANITIZER_ADDRESS + OR cmake_experiment_ENABLE_SANITIZER_THREAD + OR cmake_experiment_ENABLE_SANITIZER_LEAK) set(ENABLE_UBSAN_MINIMAL_RUNTIME FALSE) else() set(ENABLE_UBSAN_MINIMAL_RUNTIME TRUE) endif() - myproject_enable_hardening(myproject_options OFF ${ENABLE_UBSAN_MINIMAL_RUNTIME}) + cmake_experiment_enable_hardening(cmake_experiment_options OFF ${ENABLE_UBSAN_MINIMAL_RUNTIME}) endif() endmacro() diff --git a/README.md b/README.md index 09384f9..cdc0c50 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,16 @@ -# cmake_template +# cmake_experiment -[![ci](https://github.com/cpp-best-practices/cmake_template/actions/workflows/ci.yml/badge.svg)](https://github.com/cpp-best-practices/cmake_template/actions/workflows/ci.yml) -[![codecov](https://codecov.io/gh/cpp-best-practices/cmake_template/branch/main/graph/badge.svg)](https://codecov.io/gh/cpp-best-practices/cmake_template) -[![CodeQL](https://github.com/cpp-best-practices/cmake_template/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/cpp-best-practices/cmake_template/actions/workflows/codeql-analysis.yml) +[![ci](https://github.com/pkp124/cmake_experiment/actions/workflows/ci.yml/badge.svg)](https://github.com/pkp124/cmake_experiment/actions/workflows/ci.yml) +[![codecov](https://codecov.io/gh/pkp124/cmake_experiment/branch/main/graph/badge.svg)](https://codecov.io/gh/pkp124/cmake_experiment) +[![CodeQL](https://github.com/pkp124/cmake_experiment/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/pkp124/cmake_experiment/actions/workflows/codeql-analysis.yml) -## About cmake_template +## About cmake_experiment -This is a C++ Best Practices GitHub template for getting up and running with C++ quickly. -By default (collectively known as `ENABLE_DEVELOPER_MODE`) - - * Address Sanitizer and Undefined Behavior Sanitizer enabled where possible - * Warnings as errors - * clang-tidy and cppcheck static analysis - * CPM for dependencies - -It includes - - * a basic CLI example - * examples for fuzz, unit, and constexpr testing - * large github action testing matrix - -It requires - - * cmake - * a compiler - - -This project gets you started with a simple example of using FTXUI, which happens to also be a game. - - -## Getting Started - -### Use the Github template -First, click the green `Use this template` button near the top of this page. -This will take you to Github's ['Generate Repository'](https://github.com/cpp-best-practices/cmake_template/generate) page. -Fill in a repository name and short description, and click 'Create repository from template'. -This will allow you to create a new repository in your Github account, -prepopulated with the contents of this project. - -After creating the project please wait until the cleanup workflow has finished -setting up your project and commited the changes. - -Now you can clone the project locally and get to work! - - git clone https://github.com//.git ## More Details * [Dependency Setup](README_dependencies.md) * [Building Details](README_building.md) + * [Troubleshooting](README_troubleshooting.md) * [Docker](README_docker.md) - -## Testing - -See [Catch2 tutorial](https://github.com/catchorg/Catch2/blob/master/docs/tutorial.md) - -## Fuzz testing - -See [libFuzzer Tutorial](https://github.com/google/fuzzing/blob/master/tutorial/libFuzzerTutorial.md) - - diff --git a/cmake/Cache.cmake b/cmake/Cache.cmake index 2164c10..33b6815 100644 --- a/cmake/Cache.cmake +++ b/cmake/Cache.cmake @@ -1,5 +1,5 @@ # Enable cache if available -function(myproject_enable_cache) +function(cmake_experiment_enable_cache) set(CACHE_OPTION "ccache" CACHE STRING "Compiler cache to be used") diff --git a/cmake/CompilerWarnings.cmake b/cmake/CompilerWarnings.cmake index edb526a..7ff8462 100644 --- a/cmake/CompilerWarnings.cmake +++ b/cmake/CompilerWarnings.cmake @@ -3,7 +3,7 @@ # https://github.com/lefticus/cppbestpractices/blob/master/02-Use_the_Tools_Available.md function( - myproject_set_project_warnings + cmake_experiment_set_project_warnings project_name WARNINGS_AS_ERRORS MSVC_WARNINGS diff --git a/cmake/Cuda.cmake b/cmake/Cuda.cmake index d784a88..3532c5d 100644 --- a/cmake/Cuda.cmake +++ b/cmake/Cuda.cmake @@ -7,7 +7,7 @@ # target_link_libraries(main_cuda PRIVATE project_options project_warnings) # target_link_cuda(main_cuda) # -macro(myproject_target_link_cuda target) +macro(cmake_experiment_target_link_cuda target) # optional named CUDA_WARNINGS set(oneValueArgs CUDA_WARNINGS) cmake_parse_arguments( diff --git a/cmake/Doxygen.cmake b/cmake/Doxygen.cmake index ed90c56..6004afd 100644 --- a/cmake/Doxygen.cmake +++ b/cmake/Doxygen.cmake @@ -1,5 +1,5 @@ # Enable doxygen doc builds of source -function(myproject_enable_doxygen DOXYGEN_THEME) +function(cmake_experiment_enable_doxygen DOXYGEN_THEME) # If not specified, use the top readme file as the first page if((NOT DOXYGEN_USE_MDFILE_AS_MAINPAGE) AND EXISTS "${PROJECT_SOURCE_DIR}/README.md") set(DOXYGEN_USE_MDFILE_AS_MAINPAGE "${PROJECT_SOURCE_DIR}/README.md") diff --git a/cmake/Hardening.cmake b/cmake/Hardening.cmake index 5f61d22..4c7647d 100644 --- a/cmake/Hardening.cmake +++ b/cmake/Hardening.cmake @@ -1,7 +1,7 @@ include(CheckCXXCompilerFlag) macro( - myproject_enable_hardening + cmake_experiment_enable_hardening target global ubsan_minimal_runtime) diff --git a/cmake/InterproceduralOptimization.cmake b/cmake/InterproceduralOptimization.cmake index 7ea4daf..ab04525 100644 --- a/cmake/InterproceduralOptimization.cmake +++ b/cmake/InterproceduralOptimization.cmake @@ -1,4 +1,4 @@ -macro(myproject_enable_ipo) +macro(cmake_experiment_enable_ipo) include(CheckIPOSupported) check_ipo_supported(RESULT result OUTPUT output) if(result) diff --git a/cmake/LibFuzzer.cmake b/cmake/LibFuzzer.cmake index 7ab5eea..3197e45 100644 --- a/cmake/LibFuzzer.cmake +++ b/cmake/LibFuzzer.cmake @@ -1,4 +1,4 @@ -function(myproject_check_libfuzzer_support var_name) +function(cmake_experiment_check_libfuzzer_support var_name) set(LibFuzzerTestSource " #include diff --git a/cmake/Linker.cmake b/cmake/Linker.cmake index 067aac6..0a4e5c9 100644 --- a/cmake/Linker.cmake +++ b/cmake/Linker.cmake @@ -1,4 +1,4 @@ -macro(myproject_configure_linker project_name) +macro(cmake_experiment_configure_linker project_name) include(CheckCXXCompilerFlag) set(USER_LINKER_OPTION diff --git a/cmake/PackageProject.cmake b/cmake/PackageProject.cmake index f831426..b6f9f31 100644 --- a/cmake/PackageProject.cmake +++ b/cmake/PackageProject.cmake @@ -1,6 +1,6 @@ # Uses ycm (permissive BSD-3-Clause license) and ForwardArguments (permissive MIT license) -function(myproject_package_project) +function(cmake_experiment_package_project) cmake_policy(SET CMP0103 NEW) # disallow multiple calls with the same NAME set(_options ARCH_INDEPENDENT # default to false diff --git a/cmake/PreventInSourceBuilds.cmake b/cmake/PreventInSourceBuilds.cmake index 302a0ba..750b01d 100644 --- a/cmake/PreventInSourceBuilds.cmake +++ b/cmake/PreventInSourceBuilds.cmake @@ -1,7 +1,7 @@ # # This function will prevent in-source builds # -function(myproject_assure_out_of_source_builds) +function(cmake_experiment_assure_out_of_source_builds) # make sure the user doesn't play dirty with symlinks get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH) get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH) @@ -16,4 +16,4 @@ function(myproject_assure_out_of_source_builds) endif() endfunction() -myproject_assure_out_of_source_builds() +cmake_experiment_assure_out_of_source_builds() diff --git a/cmake/Sanitizers.cmake b/cmake/Sanitizers.cmake index e238fa2..c59528a 100644 --- a/cmake/Sanitizers.cmake +++ b/cmake/Sanitizers.cmake @@ -1,5 +1,5 @@ function( - myproject_enable_sanitizers + cmake_experiment_enable_sanitizers project_name ENABLE_SANITIZER_ADDRESS ENABLE_SANITIZER_LEAK diff --git a/cmake/StaticAnalyzers.cmake b/cmake/StaticAnalyzers.cmake index eb3674e..6aa3757 100644 --- a/cmake/StaticAnalyzers.cmake +++ b/cmake/StaticAnalyzers.cmake @@ -1,4 +1,4 @@ -macro(myproject_enable_cppcheck WARNINGS_AS_ERRORS CPPCHECK_OPTIONS) +macro(cmake_experiment_enable_cppcheck WARNINGS_AS_ERRORS CPPCHECK_OPTIONS) find_program(CPPCHECK cppcheck) if(CPPCHECK) @@ -46,7 +46,7 @@ macro(myproject_enable_cppcheck WARNINGS_AS_ERRORS CPPCHECK_OPTIONS) endif() endmacro() -macro(myproject_enable_clang_tidy target WARNINGS_AS_ERRORS) +macro(cmake_experiment_enable_clang_tidy target WARNINGS_AS_ERRORS) find_program(CLANGTIDY clang-tidy) if(CLANGTIDY) @@ -99,7 +99,7 @@ macro(myproject_enable_clang_tidy target WARNINGS_AS_ERRORS) endif() endmacro() -macro(myproject_enable_include_what_you_use) +macro(cmake_experiment_enable_include_what_you_use) find_program(INCLUDE_WHAT_YOU_USE include-what-you-use) if(INCLUDE_WHAT_YOU_USE) set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE ${INCLUDE_WHAT_YOU_USE}) diff --git a/cmake/Tests.cmake b/cmake/Tests.cmake index e20c7d4..d444aca 100644 --- a/cmake/Tests.cmake +++ b/cmake/Tests.cmake @@ -1,4 +1,4 @@ -function(myproject_enable_coverage project_name) +function(cmake_experiment_enable_coverage project_name) if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") target_compile_options(${project_name} INTERFACE --coverage -O0 -g) target_link_libraries(${project_name} INTERFACE --coverage) diff --git a/configured_files/config.hpp.in b/configured_files/config.hpp.in index 86d5cb3..f7084b8 100644 --- a/configured_files/config.hpp.in +++ b/configured_files/config.hpp.in @@ -1,9 +1,9 @@ -#ifndef MYPROJECT_CONFIG_HPP -#define MYPROJECT_CONFIG_HPP +#ifndef cmake_experiment_CONFIG_HPP +#define cmake_experiment_CONFIG_HPP // this is a basic example of how a CMake configured file might look // in this particular case, we are using it to set the version number of our executable -namespace myproject::cmake { +namespace cmake_experiment::cmake { inline constexpr std::string_view project_name = "@PROJECT_NAME@"; inline constexpr std::string_view project_version = "@PROJECT_VERSION@"; inline constexpr int project_version_major { @PROJECT_VERSION_MAJOR@ }; @@ -11,6 +11,6 @@ inline constexpr int project_version_minor { @PROJECT_VERSION_MINOR@ }; inline constexpr int project_version_patch { @PROJECT_VERSION_PATCH@ }; inline constexpr int project_version_tweak { @PROJECT_VERSION_TWEAK@ }; inline constexpr std::string_view git_sha = "@GIT_SHA@"; -}// namespace myproject::cmake +}// namespace cmake_experiment::cmake #endif diff --git a/fuzz_test/CMakeLists.txt b/fuzz_test/CMakeLists.txt index 7a392f5..9f27858 100644 --- a/fuzz_test/CMakeLists.txt +++ b/fuzz_test/CMakeLists.txt @@ -6,8 +6,8 @@ find_package(fmt) add_executable(fuzz_tester fuzz_tester.cpp) target_link_libraries( fuzz_tester - PRIVATE myproject_options - myproject_warnings + PRIVATE cmake_experiment_options + cmake_experiment_warnings fmt::fmt -coverage -fsanitize=fuzzer) diff --git a/include/myproject/sample_library.hpp b/include/cmake_experiment/sample_library.hpp similarity index 84% rename from include/myproject/sample_library.hpp rename to include/cmake_experiment/sample_library.hpp index 1b2b177..8dfa291 100644 --- a/include/myproject/sample_library.hpp +++ b/include/cmake_experiment/sample_library.hpp @@ -1,7 +1,7 @@ #ifndef SAMPLE_LIBRARY_HPP #define SAMPLE_LIBRARY_HPP -#include +#include [[nodiscard]] SAMPLE_LIBRARY_EXPORT int factorial(int) noexcept; diff --git a/src/ftxui_sample/CMakeLists.txt b/src/ftxui_sample/CMakeLists.txt index fc5c65e..4e8d926 100644 --- a/src/ftxui_sample/CMakeLists.txt +++ b/src/ftxui_sample/CMakeLists.txt @@ -2,8 +2,8 @@ add_executable(intro main.cpp) target_link_libraries( intro - PRIVATE myproject::myproject_options - myproject::myproject_warnings) + PRIVATE cmake_experiment::cmake_experiment_options + cmake_experiment::cmake_experiment_warnings) target_link_system_libraries( intro diff --git a/src/ftxui_sample/main.cpp b/src/ftxui_sample/main.cpp index aa53bea..68e4322 100644 --- a/src/ftxui_sample/main.cpp +++ b/src/ftxui_sample/main.cpp @@ -14,7 +14,7 @@ #include // This file will be generated automatically when cur_you run the CMake -// configuration step. It creates a namespace called `myproject`. You can modify +// configuration step. It creates a namespace called `cmake_experiment`. You can modify // the source template at `configured_files/config.hpp.in`. #include @@ -313,7 +313,7 @@ void game_iteration_canvas() int main(int argc, const char **argv) { try { - CLI::App app{ fmt::format("{} version {}", myproject::cmake::project_name, myproject::cmake::project_version) }; + CLI::App app{ fmt::format("{} version {}", cmake_experiment::cmake::project_name, cmake_experiment::cmake::project_version) }; std::optional message; app.add_option("-m,--message", message, "A message to print back out"); @@ -333,7 +333,7 @@ int main(int argc, const char **argv) CLI11_PARSE(app, argc, argv); if (show_version) { - fmt::print("{}\n", myproject::cmake::project_version); + fmt::print("{}\n", cmake_experiment::cmake::project_version); return EXIT_SUCCESS; } diff --git a/src/sample_library/CMakeLists.txt b/src/sample_library/CMakeLists.txt index b75fe63..b3118d7 100644 --- a/src/sample_library/CMakeLists.txt +++ b/src/sample_library/CMakeLists.txt @@ -5,9 +5,9 @@ add_library(sample_library sample_library.cpp) -add_library(myproject::sample_library ALIAS sample_library) +add_library(cmake_experiment::sample_library ALIAS sample_library) -target_link_libraries(sample_library PRIVATE myproject_options myproject_warnings) +target_link_libraries(sample_library PRIVATE cmake_experiment_options cmake_experiment_warnings) target_include_directories(sample_library ${WARNING_GUARD} PUBLIC $ $) @@ -20,7 +20,7 @@ set_target_properties( CXX_VISIBILITY_PRESET hidden VISIBILITY_INLINES_HIDDEN YES) -generate_export_header(sample_library EXPORT_FILE_NAME ${PROJECT_BINARY_DIR}/include/myproject/sample_library_export.hpp) +generate_export_header(sample_library EXPORT_FILE_NAME ${PROJECT_BINARY_DIR}/include/cmake_experiment/sample_library_export.hpp) if(NOT BUILD_SHARED_LIBS) target_compile_definitions(sample_library PUBLIC SAMPLE_LIBRARY_STATIC_DEFINE) diff --git a/src/sample_library/sample_library.cpp b/src/sample_library/sample_library.cpp index 878deae..2bf9f37 100644 --- a/src/sample_library/sample_library.cpp +++ b/src/sample_library/sample_library.cpp @@ -1,4 +1,4 @@ -#include +#include int factorial(int input) noexcept { diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0739f42..f7d8407 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -7,9 +7,9 @@ project(CmakeConfigPackageTests LANGUAGES CXX) if(PROJECT_IS_TOP_LEVEL OR TEST_INSTALLED_VERSION) enable_testing() - find_package(myproject CONFIG REQUIRED) # for intro, project_options, ... + find_package(cmake_experiment CONFIG REQUIRED) # for intro, project_options, ... - if(NOT TARGET myproject_options) + if(NOT TARGET cmake_experiment_options) message(FATAL_ERROR "Requiered config package not found!") return() # be strictly paranoid for Template Janitor github action! CK endif() @@ -32,9 +32,9 @@ set_tests_properties(cli.version_matches PROPERTIES PASS_REGULAR_EXPRESSION "${P add_executable(tests tests.cpp) target_link_libraries( tests - PRIVATE myproject::myproject_warnings - myproject::myproject_options - myproject::sample_library + PRIVATE cmake_experiment::cmake_experiment_warnings + cmake_experiment::cmake_experiment_options + cmake_experiment::sample_library Catch2::Catch2WithMain) if(WIN32 AND BUILD_SHARED_LIBS) @@ -64,9 +64,9 @@ catch_discover_tests( add_executable(constexpr_tests constexpr_tests.cpp) target_link_libraries( constexpr_tests - PRIVATE myproject::myproject_warnings - myproject::myproject_options - myproject::sample_library + PRIVATE cmake_experiment::cmake_experiment_warnings + cmake_experiment::cmake_experiment_options + cmake_experiment::sample_library Catch2::Catch2WithMain) catch_discover_tests( @@ -87,9 +87,9 @@ catch_discover_tests( add_executable(relaxed_constexpr_tests constexpr_tests.cpp) target_link_libraries( relaxed_constexpr_tests - PRIVATE myproject::myproject_warnings - myproject::myproject_options - myproject::sample_library + PRIVATE cmake_experiment::cmake_experiment_warnings + cmake_experiment::cmake_experiment_options + cmake_experiment::sample_library Catch2::Catch2WithMain) target_compile_definitions(relaxed_constexpr_tests PRIVATE -DCATCH_CONFIG_RUNTIME_STATIC_REQUIRE) diff --git a/test/constexpr_tests.cpp b/test/constexpr_tests.cpp index fe36db5..701b4d0 100644 --- a/test/constexpr_tests.cpp +++ b/test/constexpr_tests.cpp @@ -1,6 +1,6 @@ #include -#include +#include TEST_CASE("Factorials are computed with constexpr", "[factorial]") { diff --git a/test/tests.cpp b/test/tests.cpp index 5b632e2..fcc6afd 100644 --- a/test/tests.cpp +++ b/test/tests.cpp @@ -1,7 +1,7 @@ #include -#include +#include TEST_CASE("Factorials are computed", "[factorial]")