From 859ee7b40790821253429da9e5784176125a9ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Wed, 25 Sep 2024 17:02:07 +0200 Subject: [PATCH 1/4] Point to my SC project --- sonar-project.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index b8c3e73..3f6734d 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,8 +1,8 @@ -sonar.projectKey=sonarsource-cfamily-examples_linux-cmake-compdb-gh-actions-sc -sonar.organization=sonarsource-cfamily-examples +sonar.projectKey=alejandro-alvarez-sonarsource_linux-cmake-compdb-gh-actions-sc +sonar.organization=alejandro-alvarez-sonarsource sonar.projectName=linux-cmake-compdb-gh-actions-sc -sonar.projectVersion=1.0-SNAPSHOT +sonar.projectVersion=2.0-MODULES # ===================================================== # Properties that will be shared amongst all modules From eb0fec1857a22363ee2c0b21305a4270a5be832a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Wed, 25 Sep 2024 17:12:15 +0200 Subject: [PATCH 2/4] Enable modules analysis --- CMakeLists.txt | 16 ++++++++++++---- sonar-project.properties | 5 +++++ src/args.cppm | 40 ++++++++++++++++++++++++++++++++++++++++ src/main.cpp | 32 ++++++++++++++------------------ 4 files changed, 71 insertions(+), 22 deletions(-) create mode 100644 src/args.cppm diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c9b676..834bf70 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,16 @@ -cmake_minimum_required(VERSION 3.9) -project(sonar_scanner_example) +cmake_minimum_required(VERSION 3.30) + +project(sonar_scanner_example LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") -set(CMAKE_CXX_STANDARD 17) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) add_executable(sonar_scanner_example src/main.cpp) - +target_sources(sonar_scanner_example + PRIVATE + FILE_SET CXX_MODULES FILES src/args.cppm +) diff --git a/sonar-project.properties b/sonar-project.properties index 3f6734d..a25a9d6 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -10,3 +10,8 @@ sonar.projectVersion=2.0-MODULES # SQ standard properties sonar.sources=src +# Enable C++20 modules +# TODO: Remove internal +sonar.cfamily.internal.enableModules=true +# TODO: Remove +sonar.cfamily.analysisCache.mode=internal.off diff --git a/src/args.cppm b/src/args.cppm new file mode 100644 index 0000000..998ec9d --- /dev/null +++ b/src/args.cppm @@ -0,0 +1,40 @@ +module; +#include +#include +#include + +export module args; + +export namespace args { + +enum class Error { + Ok, + TooLong, + TooManyArgs, + NullPtr, +}; + +std::variant process_args(int argc, char *argv[]) { + int num = argc - 1; + + if (num == 0) { + std::cout << "No arguments provided\n"; + } else if (num == 0) { // intentional mistake + std::cout << "1 argument provided\n"; + } else if (num == 2) { + std::cout << "2 arguments provided\n"; + } else { + std::cout << num << " arguments provided\n"; + } + if (argv != 0) { + std::cout << "argv not null\n"; + ; // intentional extra-semicolon + } + + if (argv == nullptr) { + return std::string_view(*argv); // intentional nullptr dereference + } + + return std::string_view(argv[0]); +} +} // namespace args diff --git a/src/main.cpp b/src/main.cpp index 9c8748d..dadb93f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,26 +1,22 @@ #include +#include -using namespace std; +import args; -int main(int argc, char* argv[]) { - int num = argc - 1; +using namespace std; - if (num == 0) { - cout << "No arguments provided\n"; - } else if (num == 0) { // intentional mistake - cout << "1 argument provided\n"; - } else if (num == 2) { - cout << "2 arguments provided\n"; - } else { - cout << num << " arguments provided\n"; - } - if (argv != 0) { - cout << "argv not null\n";; // intentional extra-semicolon - } - if (argv == nullptr) { - return **argv; // intentional nullptr dereference +int main(int argc, char *argv[]) { + auto get_proc_name = args::process_args(argc, argv); + if (std::holds_alternative(get_proc_name)) { + switch (std::get(get_proc_name)) { + case args::Error::TooLong: + std::cout << "Proc name too long\n"; + return 1; + } + return 0; } + auto &&value = std::get(get_proc_name); + std::cout << value << '\n'; return 0; } - From 73b8f7b069a22046db525d55c1cb0d4a71f2b7f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Thu, 26 Sep 2024 15:45:33 +0200 Subject: [PATCH 3/4] Use Ninja --- .github/workflows/build.yml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0e260ed..1c722f5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -5,6 +5,8 @@ on: - main pull_request: types: [opened, synchronize, reopened] +env: + CLANG_VERSION: 18 jobs: build: name: Build @@ -15,10 +17,22 @@ jobs: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - name: Install sonar-scanner uses: sonarsource/sonarcloud-github-c-cpp@v3 - - name: Generate compilation database + - name: Install Ninja + run: | + wget https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-linux.zip + sudo unzip ninja-linux.zip -d /usr/local/bin + - name: Install clang + run: | + sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ${{env.CLANG_VERSION}} + sudo apt install -y clang-tools-${{env.CLANG_VERSION}} libc++-${{env.CLANG_VERSION}}-dev + - name: Generate compilation database and build run: | mkdir build - cmake -S . -B build + cmake -S . -B build -G Ninja \ + -DCMAKE_CXX_COMPILER=clang++-${{env.CLANG_VERSION}} \ + -DCMAKE_CXX_COMPILER_CLANG_SCAN_DEPS=clang-scan-deps-${{env.CLANG_VERSION}} + # The project needs to be built so the `.modmap` files are generated + cmake --build build --target all - name: Run sonar-scanner env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 4adf05d4a44eea1a01a87cc4dc7af5a60ca985f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20=C3=81lvarez=20Ayll=C3=B3n?= Date: Thu, 24 Oct 2024 10:24:06 +0200 Subject: [PATCH 4/4] Update sonar-project.properties --- sonar-project.properties | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index a25a9d6..816c7d4 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,8 +1,8 @@ -sonar.projectKey=alejandro-alvarez-sonarsource_linux-cmake-compdb-gh-actions-sc -sonar.organization=alejandro-alvarez-sonarsource +sonar.projectKey=sonarsource-cfamily-examples_linux-cmake-compdb-gh-actions-sc +sonar.organization=sonarsource-cfamily-examples sonar.projectName=linux-cmake-compdb-gh-actions-sc -sonar.projectVersion=2.0-MODULES +sonar.projectVersion=1.0-SNAPSHOT # ===================================================== # Properties that will be shared amongst all modules @@ -11,7 +11,4 @@ sonar.projectVersion=2.0-MODULES # SQ standard properties sonar.sources=src # Enable C++20 modules -# TODO: Remove internal -sonar.cfamily.internal.enableModules=true -# TODO: Remove -sonar.cfamily.analysisCache.mode=internal.off +sonar.cfamily.enableModules=true