diff --git a/.clang-format b/.clang-format index f0a9aa9..092125a 100644 --- a/.clang-format +++ b/.clang-format @@ -1,9 +1,9 @@ -# SPDX-FileCopyrightText: 2023 Tobias Schmidl +# SPDX-FileCopyrightText: 2025 Tobias Schmidl # # SPDX-License-Identifier: AGPL-3.0-or-later --- -BasedOnStyle: Mozilla +BasedOnStyle: Microsoft +AlwaysBreakTemplateDeclarations: true IndentWidth: 4 ... -# vim: set filetype=yaml: diff --git a/.cmake-format.yaml b/.cmake-format.yaml index 51a8fd3..8be1643 100644 --- a/.cmake-format.yaml +++ b/.cmake-format.yaml @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023 Tobias Schmidl +# SPDX-FileCopyrightText: 2025 Tobias Schmidl # # SPDX-License-Identifier: AGPL-3.0-or-later --- diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..88864c7 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,54 @@ +// SPDX-FileCopyrightText: 2025 Tobias Schmidl +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/cpp +{ + "name": "glimpses-devcontainer", + "image": "mcr.microsoft.com/devcontainers/cpp:1", + // Features to add to the dev container. More info: https://containers.dev/features. + "features": { + "ghcr.io/devcontainers-extra/features/cmake:1": {}, + "ghcr.io/devcontainers-extra/features/pre-commit:2": {}, + "ghcr.io/devcontainers/features/common-utils:2": { + "username": "vscode", + "uid": "${localEnv:UID}", + "gid": "${localEnv:GID}" + }, + "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}, + "ghcr.io/devcontainers/features/git:1": {}, + "ghcr.io/devcontainers/features/python:1": {} + }, + // Configure tool-specific properties. + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + "settings": {}, + "extensions": [ + "editorconfig.editorconfig", + "elagil.pre-commit-helper", + "llvm-vs-code-extensions.vscode-clangd", + "ms-vscode.cmake-tools", + "ms-vscode.cpptools", + "streetsidesoftware.code-spell-checker", + "vivaxy.vscode-conventional-commits" + ] + } + }, + "containerEnv": { + "CC": "clang", + "CXX": "clang++", + "CMAKE_BUILD_PARALLEL_LEVEL": "${localEnv:NUMBER_OF_PROCESSORS}", + "CMAKE_C_COMPILER": "clang", + "CMAKE_CXX_COMPILER": "clang++", + "CMAKE_EXPORT_COMPILE_COMMANDS": "1", + "CMAKE_PREFIX_PATH": "/usr/local/cmake" + }, + "mounts": [ + "source=${localEnv:HOME}/.ssh,target=/home/vscode/.ssh,type=bind,readonly", + "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind" + ], + "workspaceMount": "source=${localWorkspaceFolder},target=${localWorkspaceFolder},type=bind", + "workspaceFolder": "${localWorkspaceFolder}" +} diff --git a/.ecrc.license b/.ecrc.license index 37bf852..10da8d0 100644 --- a/.ecrc.license +++ b/.ecrc.license @@ -1,3 +1,3 @@ -SPDX-FileCopyrightText: 2023 Tobias Schmidl +SPDX-FileCopyrightText: 2025 Tobias Schmidl SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/.editorconfig b/.editorconfig index 35187b6..e61dfae 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023 Tobias Schmidl +# SPDX-FileCopyrightText: 2025 Tobias Schmidl # # SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/.gitignore b/.gitignore index 6211f64..bab7360 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023 Tobias Schmidl +# SPDX-FileCopyrightText: 2025 Tobias Schmidl # # SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 22e4933..babb286 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1,10 @@ -# SPDX-FileCopyrightText: 2023 Tobias Schmidl +# SPDX-FileCopyrightText: 2025 Tobias Schmidl # # SPDX-License-Identifier: AGPL-3.0-or-later --- repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v5.0.0 hooks: - id: check-yaml - id: end-of-file-fixer @@ -13,7 +13,7 @@ repos: - id: check-ast - id: check-byte-order-marker - repo: https://github.com/fsfe/reuse-tool - rev: v2.1.0 + rev: v5.0.2 hooks: - id: reuse - repo: https://github.com/cheshirekow/cmake-format-precommit @@ -31,14 +31,22 @@ repos: - id: clang-format - id: clang-tidy - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: '2.7.2' + rev: '3.2.1' hooks: - id: editorconfig-checker alias: ec - stages: [commit] + stages: [pre-commit] +- repo: https://github.com/shellcheck-py/shellcheck-py + rev: v0.10.0.1 + hooks: + - id: shellcheck - repo: https://github.com/compilerla/conventional-pre-commit - rev: v2.4.0 + rev: v4.2.0 hooks: - id: conventional-pre-commit stages: [commit-msg] +- repo: https://github.com/igorshubovych/markdownlint-cli + rev: v0.45.0 + hooks: + - id: markdownlint ... diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 94d2355..5364ee4 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,11 +1,12 @@ { "recommendations": [ - "bbenoist.doxygen", + "cschlosser.doxdocgen", "editorconfig.editorconfig", "elagil.pre-commit-helper", + "llvm-vs-code-extensions.vscode-clangd", "ms-vscode.cmake-tools", "ms-vscode.cpptools", - "vivaxy.vscode-conventional-commits", - "xaver.clang-format", + "streetsidesoftware.code-spell-checker", + "vivaxy.vscode-conventional-commits" ] } diff --git a/.vscode/extensions.json.license b/.vscode/extensions.json.license index 37bf852..10da8d0 100644 --- a/.vscode/extensions.json.license +++ b/.vscode/extensions.json.license @@ -1,3 +1,3 @@ -SPDX-FileCopyrightText: 2023 Tobias Schmidl +SPDX-FileCopyrightText: 2025 Tobias Schmidl SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/.woodpecker.yml b/.woodpecker.yml deleted file mode 100644 index dde54e0..0000000 --- a/.woodpecker.yml +++ /dev/null @@ -1,16 +0,0 @@ -# SPDX-FileCopyrightText: 2023 Tobias Schmidl -# -# SPDX-License-Identifier: AGPL-3.0-or-later - ---- -steps: - - editor-config: - image: mstruebing/editorconfig-checker - group: lint - - reuse: - image: fsfe/reuse:latest - group: lint - -... diff --git a/CMakeLists.txt b/CMakeLists.txt index d6b0c47..cd80f65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023 Tobias Schmidl +# SPDX-FileCopyrightText: 2025 Tobias Schmidl # # SPDX-License-Identifier: AGPL-3.0-or-later @@ -18,17 +18,11 @@ endif() # ---- Add dependencies via CPM ---- # see https://github.com/TheLartians/CPM.cmake for more info -include(cmake/CPM.cmake) +include(cmake/get_cpm.cmake) # PackageProject.cmake will be used to make our target installable CPMAddPackage("gh:TheLartians/PackageProject.cmake@1.8.0") -find_package(PkgConfig REQUIRED) -pkg_check_modules(LIBPROC2 REQUIRED IMPORTED_TARGET libproc2>=4.0.0) - -find_package(PkgConfig REQUIRED) -pkg_check_modules(LIBPROC2 REQUIRED IMPORTED_TARGET libproc2>=4.0.0) - # CPMAddPackage( NAME fmt GIT_TAG 9.1.0 GITHUB_REPOSITORY fmtlib/fmt OPTIONS "FMT_INSTALL YES" # create an installable target ) # ---- Add source files ---- @@ -63,5 +57,5 @@ packageProject( INCLUDE_DESTINATION include/${PROJECT_NAME}-${PROJECT_VERSION} VERSION_HEADER "${VERSION_HEADER_LOCATION}" COMPATIBILITY SameMajorVersion - DEPENDENCIES "${LIBPROC2}" + DEPENDENCIES "" ) diff --git a/README.md b/README.md index d638f7d..fce155d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ @@ -9,5 +9,3 @@ SPDX-License-Identifier: AGPL-3.0-or-later [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://pre-commit.com/) T.B.D. -libproc2-dev -pkg-config diff --git a/cmake/CPM.cmake b/cmake/get_cpm.cmake similarity index 87% rename from cmake/CPM.cmake rename to cmake/get_cpm.cmake index f606c11..58aa4d0 100644 --- a/cmake/CPM.cmake +++ b/cmake/get_cpm.cmake @@ -2,8 +2,8 @@ # # SPDX-FileCopyrightText: Copyright (c) 2019-2023 Lars Melchior and contributors -set(CPM_DOWNLOAD_VERSION 0.38.5) -set(CPM_HASH_SUM "192aa0ccdc57dfe75bd9e4b176bf7fb5692fd2b3e3f7b09c74856fc39572b31c") +set(CPM_DOWNLOAD_VERSION 0.42.0) +set(CPM_HASH_SUM "2020b4fc42dba44817983e06342e682ecfc3d2f484a581f11cc5731fbe4dce8a") if(CPM_SOURCE_CACHE) set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake") diff --git a/cmake/tools.cmake b/cmake/tools.cmake index 027609b..b7d70f6 100644 --- a/cmake/tools.cmake +++ b/cmake/tools.cmake @@ -10,7 +10,7 @@ if(NOT PROJECT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) return() endif() -include(${CMAKE_CURRENT_LIST_DIR}/CPM.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/get_cpm.cmake) # enables sanitizers support using the the `USE_SANITIZER` flag available values are: Address, Memory, MemoryWithOrigins, Undefined, Thread, # Leak, 'Address;Undefined' diff --git a/documentation/CMakeLists.txt b/documentation/CMakeLists.txt index 9652aa6..50b2ee1 100644 --- a/documentation/CMakeLists.txt +++ b/documentation/CMakeLists.txt @@ -8,9 +8,9 @@ project(GlimpsesDocs) # ---- Dependencies ---- -include(../cmake/CPM.cmake) +include(../cmake/get_cpm.cmake) -CPMAddPackage("gh:mosra/m.css#a0d292ec311b97fefd21e93cdefb60f88d19ede6") +CPMAddPackage("gh:mosra/m.css#0a460a7a9973a41db48f735e7b49e4da9a876325") CPMAddPackage(NAME Glimpses SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/..) # ---- Doxygen variables ---- diff --git a/include/glimpses/glimpses.hpp b/include/glimpses/glimpses.hpp index 7d8fc02..eeed973 100644 --- a/include/glimpses/glimpses.hpp +++ b/include/glimpses/glimpses.hpp @@ -4,22 +4,39 @@ #pragma once +#include +#include #include -namespace glimpses { +#include "glimpses/version.h" -/** - * @brief A class for saying hello in multiple languages - */ -class Glimpses +namespace glimpses { +/** @brief A class for saying retrieving system information */ +class Glimpses +{ public: - /** - * @brief Creates a new glimpses - * @param name the name to greet - */ + /** @brief Type for representing the number of CPU cores. */ + using CPUCount = uint32_t; + + /** @brief Type for representing a set of CPU cores, mapped by their names. */ + using CPUSet = std::map; + + /** @brief Maximum number of CPU cores supported by Glimpses. */ + constexpr static CPUCount MAX_CPU_COUNT = 1024; + + /** @brief Version of the Glimpses library. */ + constexpr static const char *VERSION = GLIMPSES_VERSION; + + /** @brief Creates a new glimpses */ Glimpses(); + + /** + * @brief Returns the number of CPU cores available on the system. + * @return The number of CPU cores available on the system. + */ + CPUSet getCPUCount() const; }; } // namespace glimpses diff --git a/source/glimpses.cpp b/source/glimpses.cpp index 7c38b49..b7071c0 100644 --- a/source/glimpses.cpp +++ b/source/glimpses.cpp @@ -3,8 +3,25 @@ // SPDX-License-Identifier: AGPL-3.0-or-later #include -#include +#include +#include +#include using namespace glimpses; -Glimpses::Glimpses() {} +Glimpses::Glimpses() +{ +} + +Glimpses::CPUSet Glimpses::getCPUCount() const +{ + cpu_set_t cpuset; + auto minmax = [](int64_t min, int64_t value, int64_t max) -> CPUCount { + return std::min(std::max(value, min), max); + }; + sched_getaffinity(0, sizeof(cpuset), &cpuset); + return CPUSet{{"configured", minmax(0, sysconf(_SC_NPROCESSORS_CONF), MAX_CPU_COUNT)}, + {"logical", minmax(0, std::thread::hardware_concurrency(), MAX_CPU_COUNT)}, + {"online", minmax(0, sysconf(_SC_NPROCESSORS_ONLN), MAX_CPU_COUNT)}, + {"allowed", minmax(0, CPU_COUNT(&cpuset), MAX_CPU_COUNT)}}; +} diff --git a/standalone/CMakeLists.txt b/standalone/CMakeLists.txt index bf9e55d..3af0e8b 100644 --- a/standalone/CMakeLists.txt +++ b/standalone/CMakeLists.txt @@ -12,7 +12,7 @@ include(../cmake/tools.cmake) # ---- Dependencies ---- -include(../cmake/CPM.cmake) +include(../cmake/get_cpm.cmake) CPMAddPackage(NAME Glimpses SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/..) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 21dc941..29beb72 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -16,10 +16,10 @@ include(../cmake/tools.cmake) # ---- Dependencies ---- -include(../cmake/CPM.cmake) +include(../cmake/get_cpm.cmake) -# CPMAddPackage("gh:doctest/doctest@2.4.9") -CPMAddPackage("gh:TheLartians/Format.cmake@1.7.3") +CPMAddPackage(NAME Catch2 GITHUB_REPOSITORY catchorg/Catch2 VERSION 3.8.1) +CPMAddPackage("gh:TheLartians/Format.cmake@1.8.3") if(TEST_INSTALLED_VERSION) find_package(Glimpses REQUIRED) @@ -31,11 +31,7 @@ endif() file(GLOB sources CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp) add_executable(${PROJECT_NAME} ${sources}) -target_link_libraries( - ${PROJECT_NAME} - # doctest::doctest - Glimpses::Glimpses -) +target_link_libraries(${PROJECT_NAME} Catch2::Catch2WithMain Glimpses::Glimpses) set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 17) # enable compiler warnings @@ -52,6 +48,9 @@ endif() enable_testing() +include(CTest) +add_test(GlimpsesTests GlimpsesTests) + # Note: doctest and similar testing frameworks can automatically configure CMake tests. For other testing frameworks add the tests target # instead: add_test(NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME}) diff --git a/test/source/glimpses.cpp b/test/source/glimpses.cpp index 82e9090..29caf68 100644 --- a/test/source/glimpses.cpp +++ b/test/source/glimpses.cpp @@ -2,24 +2,21 @@ // // SPDX-License-Identifier: AGPL-3.0-or-later +#include #include #include - #include -/* -TEST_CASE("Glimpses") { - using namespace greeter; - Glimpses greeter("Tests"); +TEST_CASE("CPU count") +{ - CHECK(greeter.greet(LanguageCode::EN) == "Hello, Tests!"); - CHECK(greeter.greet(LanguageCode::DE) == "Hallo Tests!"); - CHECK(greeter.greet(LanguageCode::ES) == "¡Hola Tests!"); - CHECK(greeter.greet(LanguageCode::FR) == "Bonjour Tests!"); + glimpses::Glimpses glimpses{}; + + CHECK(glimpses.getCPUCount().size() > 0); } -TEST_CASE("Glimpses version") { - static_assert(std::string_view(GREETER_VERSION) == std::string_view("1.0")); +/* +TEST_CASE("Glimpses version") { static_assert(std::string_view(GREETER_VERSION) == std::string_view("0.1.0")); CHECK(std::string(GREETER_VERSION) == std::string("1.0")); } */ diff --git a/test/source/main.cpp b/test/source/main.cpp deleted file mode 100644 index ef34b77..0000000 --- a/test/source/main.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-FileCopyrightText: 2023 Tobias Schmidl -// -// SPDX-License-Identifier: AGPL-3.0-or-later -#if 0 -#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN - -#include -#endif - -int -main() -{ - return 0; -}