{"id":46344815,"url":"https://github.com/aremmell/libsir","last_synced_at":"2026-03-04T21:09:10.827Z","repository":{"id":10028992,"uuid":"12070982","full_name":"aremmell/libsir","owner":"aremmell","description":"The Standard Incident Reporter library: A lightweight, cross-platform library for information distribution.","archived":false,"fork":false,"pushed_at":"2025-12-04T04:27:35.000Z","size":10968,"stargazers_count":34,"open_issues_count":20,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-12-06T00:58:31.268Z","etag":null,"topics":["ansi-colors","c","c17","cpp20","cross-platform","log-to-anywhere","log-to-console","log-to-multiple-files","log-to-syslog","logging-library","no-dependencies","plugins","thread-safe"],"latest_commit_sha":null,"homepage":"https://libsir.rml.dev/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aremmell.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2013-08-13T02:12:28.000Z","updated_at":"2025-12-04T00:48:58.000Z","dependencies_parsed_at":"2023-09-23T09:50:13.073Z","dependency_job_id":"ab647b30-5e81-4c06-9afd-80abd442e900","html_url":"https://github.com/aremmell/libsir","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/aremmell/libsir","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aremmell%2Flibsir","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aremmell%2Flibsir/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aremmell%2Flibsir/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aremmell%2Flibsir/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aremmell","download_url":"https://codeload.github.com/aremmell/libsir/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aremmell%2Flibsir/sbom","scorecard":{"id":1240279,"data":{"date":"2025-12-04T00:54:06Z","repo":{"name":"github.com/aremmell/libsir","commit":"0ae01738c93ee6784c431ac70f6322b55e7aacc0"},"scorecard":{"version":"v4.13.1","commit":"49c0eed3a423f00c872b5c3c9f1bbca9e8aae799"},"score":6.4,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":0,"reason":"0 out of 30 merged PRs checked by a CI test -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":5,"reason":"badge detected: passing","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#code-review"}},{"name":"Contributors","score":10,"reason":"10 different organizations found -- score normalized to 10","details":["Info: contributors work for AdventOfVim,BAN-AI-Communications,BAN-AI-Multics,BAN-AI-X25,TI-S1500,ban ai systems,lizardpersons,mulle-objc,reduce-algebra,thehighnibble"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":0,"reason":"no update tool detected","details":["Warn: tool 'RenovateBot' is not used: Follow the instructions from https://docs.renovatebot.com/configuration-options/. (Low effort)","Warn: tool 'Dependabot' is not used: Follow the instructions from https://docs.github.com/code-security/dependabot/dependabot-version-updates/about-dependabot-version-updates. (Low effort)","Warn: tool 'PyUp' is not used: Follow the instructions from https://docs.pyup.io/docs. (Low effort)","Warn: tool 'Sonatype Lift' is not used: Follow the instructions from https://help.sonatype.com/lift/getting-started. (Low effort)"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no OSSFuzz integration found: Follow the steps in https://github.com/google/oss-fuzz to integrate fuzzing for your project.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no OneFuzz integration found: Follow the steps in https://github.com/microsoft/onefuzz to start fuzzing for your project.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no GoBuiltInFuzzer integration found: Follow the steps in https://go.dev/doc/fuzz/ to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no PythonAtherisFuzzer integration found: Follow the steps in https://github.com/google/atheris to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no CLibFuzzer integration found: Follow the steps in https://llvm.org/docs/LibFuzzer.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no CppLibFuzzer integration found: Follow the steps in https://llvm.org/docs/LibFuzzer.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no SwiftLibFuzzer integration found: Follow the steps in https://google.github.io/oss-fuzz/getting-started/new-project-guide/swift-lang/ to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no RustCargoFuzzer integration found: Follow the steps in https://rust-fuzz.github.io/book/cargo-fuzz.html to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no JavaJazzerFuzzer integration found: Follow the steps in https://github.com/CodeIntelligenceTesting/jazzer to enable fuzzing on your project.\nOver time, try to add fuzzing for more functionalities of your project. (Medium effort)","Warn: no ClusterFuzzLite integration found: Follow the steps in https://github.com/google/clusterfuzzlite to integrate fuzzing as part of CI.\nOver time, try to add fuzzing for more functionalities of your project. (High effort)","Warn: no HaskellPropertyBasedTesting integration found: Use one of the following frameworks to fuzz your project:\nQuickCheck: https://hackage.haskell.org/package/QuickCheck\nhedgehog: https://hedgehog.qa/\nvalidity: https://github.com/NorfairKing/validity\nsmallcheck: https://hackage.haskell.org/package/smallcheck\nhspec: https://hspec.github.io/\ntasty: https://hackage.haskell.org/package/tasty (High effort)","Warn: no TypeScriptPropertyBasedTesting integration found: Use fast-check: https://github.com/dubzzz/fast-check (High effort)","Warn: no JavaScriptPropertyBasedTesting integration found: Use fast-check: https://github.com/dubzzz/fast-check (High effort)"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: License file found in expected location: LICENSE:1","Info: FSF or OSI recognized license: LICENSE:1"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#license"}},{"name":"Maintained","score":2,"reason":"3 commit(s) out of 30 and 0 issue activity out of 30 found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"no published package detected","details":["Warn: no GitHub/GitLab publishing workflow detected"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: .gitlab-ci/anaconda/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/ao64/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/base/Dockerfile:30: pin your Docker image by updating quay.io/fedora/fedora:42 to quay.io/fedora/fedora:42@sha256:1890c0f9c40d7f5ef290952d2af57f21361822ea3929ae24eb17d2c319c57fcd","Warn: containerImage not pinned by hash: .gitlab-ci/ch/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/chamois-compcert/Dockerfile:4","Warn: containerImage not pinned by hash: .gitlab-ci/dmd/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/embarcadero/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/embarcadero23/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/emscripten/Dockerfile:35","Warn: containerImage not pinned by hash: .gitlab-ci/intel/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/kefir/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/llvm-mingw/Dockerfile:30: pin your Docker image by updating mstorsjo/llvm-mingw:latest to mstorsjo/llvm-mingw:latest@sha256:2d88dffcd0a98e3b58d5e269a9d2fa30d4e38cf994cdd8529c937dc5e8cfbea8","Warn: containerImage not pinned by hash: .gitlab-ci/msvc/Dockerfile:27","Warn: containerImage not pinned by hash: .gitlab-ci/msvc/msvc-wine/Dockerfile:1: pin your Docker image by updating ubuntu:22.04 to ubuntu:22.04@sha256:104ae83764a5119017b8e8d6218fa0832b09df65aae7d5a6de29a85d813da2fb","Warn: containerImage not pinned by hash: .gitlab-ci/msvc/msvc-wine/Dockerfile.clang:2","Warn: containerImage not pinned by hash: .gitlab-ci/msvc/msvc-wine/Dockerfile.hello:2","Warn: containerImage not pinned by hash: .gitlab-ci/ndk/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/nvhpc/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/openosc/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/oracle/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/orangec/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/pcc/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/pvs/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/style/Dockerfile:30","Warn: containerImage not pinned by hash: .gitlab-ci/uclibc-ng/Dockerfile:30","Warn: downloadThenRun not pinned by hash: .gitlab-ci/anaconda/Dockerfile:36-51","Warn: downloadThenRun not pinned by hash: .gitlab-ci/base/Dockerfile:38-254","Warn: goCommand not pinned by hash: .gitlab-ci/style/Dockerfile:37-46","Info:   3 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of  25 containerImage dependencies pinned","Info:   0 out of   2 downloadThenRun dependencies pinned","Info:   0 out of   1 goCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":3,"reason":"SAST tool is not run on all commits -- score normalized to 3","details":["Warn: 10 commits out of 30 are checked with a SAST tool","Warn: CodeQL tool not detected"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#sast"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":["Warn: no GitHub releases found"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:50","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"no vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/49c0eed3a423f00c872b5c3c9f1bbca9e8aae799/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-12-08T07:24:52.435Z","repository_id":10028992,"created_at":"2025-12-08T07:24:52.436Z","updated_at":"2025-12-08T07:24:52.436Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30093076,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T20:42:30.420Z","status":"ssl_error","status_checked_at":"2026-03-04T20:42:30.057Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansi-colors","c","c17","cpp20","cross-platform","log-to-anywhere","log-to-console","log-to-multiple-files","log-to-syslog","logging-library","no-dependencies","plugins","thread-safe"],"created_at":"2026-03-04T21:09:10.310Z","updated_at":"2026-03-04T21:09:10.814Z","avatar_url":"https://github.com/aremmell.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# libsir\n\nlibsir\u0026mdash;a lightweight, cross-platform library for information distribution\n\n\u003c!-- Version: 2.2.6 --\u003e\n\u003c!-- --\u003e\n\u003c!-- SPDX-License-Identifier: MIT --\u003e\n\u003c!-- --\u003e\n\u003c!-- Copyright (c) 2018-2025 Ryan M. Lederman \u003clederman@gmail.com\u003e --\u003e\n\u003c!-- Copyright (c) 2018-2025 Jeffrey H. Johnson \u003cjohnsonjh.dev@gmail.com\u003e --\u003e\n\u003c!-- --\u003e\n\u003c!-- Permission is hereby granted, free of charge, to any person obtaining a copy of --\u003e\n\u003c!-- this software and associated documentation files (the \"Software\"), to deal in --\u003e\n\u003c!-- the Software without restriction, including without limitation the rights to --\u003e\n\u003c!-- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of --\u003e\n\u003c!-- the Software, and to permit persons to whom the Software is furnished to do so, --\u003e\n\u003c!-- subject to the following conditions: --\u003e\n\u003c!-- --\u003e\n\u003c!-- The above copyright notice and this permission notice shall be included in all --\u003e\n\u003c!-- copies or substantial portions of the Software. --\u003e\n\u003c!-- --\u003e\n\u003c!-- THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR --\u003e\n\u003c!-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS --\u003e\n\u003c!-- FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR --\u003e\n\u003c!-- COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER --\u003e\n\u003c!-- IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN --\u003e\n\u003c!-- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --\u003e\n\n[![Release](https://img.shields.io/github/v/release/aremmell/libsir?color=%2340b900\u0026cacheSeconds=60)](https://github.com/aremmell/libsir/releases/latest)\n[![Commits](https://img.shields.io/github/commits-since/aremmell/libsir/latest?cacheSeconds=60\u0026color=%2340b900)](https://github.com/aremmell/libsir/commits/master)\n[![License](https://img.shields.io/github/license/aremmell/libsir?color=%2340b900\u0026cacheSeconds=60)](https://github.com/aremmell/libsir/blob/master/LICENSE)\n[![OpenHub](https://img.shields.io/badge/openhub-libsir-ok.svg?color=%2340b900\u0026cacheSeconds=60)](https://www.openhub.net/p/libsir/)\n[![GitLab](https://gitlab.com/libsir/libsir/badges/master/pipeline.svg?)](https://gitlab.com/libsir/libsir/pipelines/master/latest)\n[![Coverage](https://img.shields.io/coverallsCoverage/github/aremmell/libsir?color=%2340b900\u0026cacheSeconds=60)](https://coveralls.io/github/aremmell/libsir)\n[![Coverity](https://img.shields.io/coverity/scan/28843.svg?color=%2340b900\u0026cacheSeconds=60)](https://scan.coverity.com/projects/aremmell-libsir)\n[![REUSE](https://img.shields.io/reuse/compliance/github.com%2Faremmell%2Flibsir?label=REUSE3\u0026color=%2340b900\u0026cacheSeconds=60)](https://api.reuse.software/info/github.com/aremmell/libsir)\n[![Maintainability](https://sonarcloud.io/api/project_badges/measure?project=aremmell_libsir\u0026metric=sqale_rating)](https://sonarcloud.io/component_measures?id=aremmell_libsir\u0026metric=new_maintainability_rating\u0026view=list)\n[![Reliability](https://sonarcloud.io/api/project_badges/measure?project=aremmell_libsir\u0026metric=reliability_rating)](https://sonarcloud.io/component_measures?id=aremmell_libsir\u0026metric=new_reliability_rating\u0026view=list)\n[![Security](https://sonarcloud.io/api/project_badges/measure?project=aremmell_libsir\u0026metric=security_rating)](https://sonarcloud.io/component_measures?id=aremmell_libsir\u0026metric=new_security_rating\u0026view=list)\n[![Scorecard](https://img.shields.io/ossf-scorecard/github.com/aremmell/libsir?label=openssf%20scorecard\u0026style=flat\u0026color=%2340b900\u0026cacheSeconds=60)](https://securityscorecards.dev/viewer/?uri=github.com/aremmell/libsir)\n[![Practices](https://img.shields.io/cii/level/7861?label=openssf%20best%20practices\u0026color=2340b900\u0026cacheSeconds=60)](https://www.bestpractices.dev/en/projects/7861)\n\n## \u003ca id=\"overview\" /\u003e Overview\n\n\u003c!-- toc --\u003e\n\n- [Synopsis](#synopsis)\n- [Notables](#notables)\n- [Cross-platform compatibility](#cross-platform-compatibility)\n  - [System Loggers](#system-loggers)\n  - [C++ compatibility](#c---compatibility)\n  - [Language Bindings](#language-bindings)\n- [An example](#an-example)\n- [Building from source](#building-from-source)\n  - [Unix Makefile](#unix-makefile)\n    - [Environment Variables](#unix-makefile-envvars)\n    - [Recipes](#unix-makefile-recipes)\n  - [Visual Studio Code](#visual-studio-code)\n    - [Build Tasks](#vs-code-build-tasks)\n  - [Visual Studio 2022](#visual-studio-2022)\n    - [MSBuild](#ms-build-tools)\n- [Dig in](#dig-in)\n  - [GNU Global](#gnu-global)\n- [SAST Tools](#sast-tools)\n- [Other Tools](#other-tools)\n\n\u003c!-- tocstop --\u003e\n\n## \u003ca id=\"synopsis\" /\u003e Synopsis\n\nlibsir is a cross-platform, thread-safe logging library written in C (*ISO/IEC 9899:2011 C11*) that is designed to simplify and streamline the generation and distribution of human-readable information in software.\n\nUsing libsir, you can make a single call that simultaneously sends information to multiple destinations, *each with their own individual preference for format and levels*.\n\nEach 'level' or 'priority' of output can be visually styled however you wish for `stdio` destinations. This allows for immediate visual confirmation that a message appeared in the terminal that you should pay attention to, while less pressing information is more subtle in appearance.\n\n![libsir visual graph](./docs/res/libsir-alpha.png)\n\n## \u003ca id=\"notables\" /\u003e Notables\n\n- No dependencies (other than `libc` and `pthreads`). On Windows, libsir uses the native synchronization API.\n- Accompanied by a robust test suite to ensure dependable behavior, even if you make modifications to the source.\n- Won't fail silently\u0026mdash;C library or platform level errors are captured and stored for posterity, on a per-thread basis. The *function, file, and line number from which it originated* are also captured. Additionally, libsir defines its own set of error messages to aid in troubleshooting.\n- Hardened\u0026mdash;every function contains sanity checks for internal state as well as arguments passed in through the external interfaces. libsir's standard make recipes use *‑Wall ‑Wextra ‑Wpedantic* (and pass with *‑Wmissing‑prototypes ‑Wdouble‑promotion ‑Wfloat‑conversion ‑Wmissing‑declarations ‑Wswitch‑enum ‑Wformat‑nonliteral ‑Wformat‑truncation ‑Wbad‑function‑cast ‑Wextra‑semi‑stmt*, too.)\n- [Full documentation](https://libsir.rml.dev), thanks to Doxygen.\n- Lightweight\u0026mdash;the shared library comes in at around 70\u0026nbsp;KiB, and the static library around 50\u0026nbsp;KiB.\n\n## \u003ca id=\"cross-platform-compatibility\" /\u003e Cross-platform compatibility\n\nAt this time, libsir is supported (*that is, it compiles and passes the test suites*) on at least the following operating system and toolchain combinations:\n\n| System | Toolchain |\n| ------:|:--------- |\n| **Linux**\u0026nbsp;≳2.6.32\u003cbr\u003e(glibc\u0026nbsp;≳2.4, musl\u0026nbsp;≳1.2.3, uClibc‑ng\u0026nbsp;≳1.0.43) | **GCC**\u0026nbsp;(4.4.7\u0026nbsp;‑\u0026nbsp;15.0.1),\u0026nbsp; **Clang**\u0026nbsp;(3.8\u0026nbsp;‑\u0026nbsp;20.1.1),\u0026nbsp; **Oracle\u0026nbsp;Studio\u0026nbsp;C/C++**\u0026nbsp;(≳12.6),\u0026nbsp; **Circle**\u0026nbsp;(1.0.0‑210\u0026nbsp;‑\u0026nbsp;1.0.0‑226),\u0026nbsp; **IBM\u0026nbsp;Advance\u0026nbsp;Toolchain**\u0026nbsp;(14\u0026nbsp;‑\u0026nbsp;17),\u0026nbsp; **IBM\u0026nbsp;XL\u0026nbsp;C/C++**\u0026nbsp;(16.1.1.2\u0026nbsp;‑\u0026nbsp;16.1.1.15),\u0026nbsp; **IBM\u0026nbsp;Open\u0026nbsp;XL\u0026nbsp;C/C++**\u0026nbsp;(17.1.1\u0026nbsp;‑\u0026nbsp;17.1.1.2),\u0026nbsp; **NVIDIA\u0026nbsp;HPC\u0026nbsp;SDK\u0026nbsp;C/C++**\u0026nbsp;(23.5\u0026nbsp;‑\u0026nbsp;25.3),\u0026nbsp; **Arm\u0026nbsp;HPC\u0026nbsp;C/C++**\u0026nbsp;(22.1\u0026nbsp;‑\u0026nbsp;24.10.1),\u0026nbsp; **DMD\u0026nbsp;ImportC**\u0026nbsp;(2.104.2\u0026nbsp;‑\u0026nbsp;2.111.0),\u0026nbsp; **AMD\u0026nbsp;Optimizing\u0026nbsp;C/C++**\u0026nbsp;(4.0.0\u0026nbsp;‑\u0026nbsp;5.0.0),\u0026nbsp; **Intel\u0026nbsp;oneAPI\u0026nbsp;DPC++/C++**\u0026nbsp;(2023.1\u0026nbsp;‑\u0026nbsp;2025.1.0),\u0026nbsp; **Open64**\u0026nbsp;(5,\u0026nbsp;AMD\u0026nbsp;4.5.2.1),\u0026nbsp; **Intel\u0026nbsp;C++\u0026nbsp;Compiler\u0026nbsp;Classic**\u0026nbsp;(2021.9.0\u0026nbsp;‑\u0026nbsp;2021.10.0),\u0026nbsp; **Portable\u0026nbsp;C\u0026nbsp;Compiler**\u0026nbsp;(1.2.0.DEVEL‑20230730),\u0026nbsp; **Kefir**\u0026nbsp;(≳0.3.0),\u0026nbsp; **Chibicc**\u0026nbsp;(2020.12.6),\u0026nbsp; **CompCert\u0026nbsp;C**\u0026nbsp;(3.11\u0026nbsp;‑\u0026nbsp;3.15,\u0026nbsp;no‑TLS),\u0026nbsp; **Chamois‑CompCert\u0026nbsp;C**\u0026nbsp;(3.14‑20231130+,\u0026nbsp;TLS),\u0026nbsp; **МЦСТ\u0026nbsp;LCC**\u0026nbsp;(1.25\u0026nbsp;‑\u0026nbsp;1.29) |\n| **Android**\u0026nbsp;≳5 | **Android\u0026nbsp;NDK**\u0026nbsp;(r25c\u0026nbsp;‑\u0026nbsp;r28) |\n| **QNX**\u0026nbsp;8.0 | **QCC**\u0026nbsp;(GCC\u0026nbsp;12.2) |\n| **IBM AIX**\u0026nbsp;7.2,\u0026nbsp;7.3 | **GCC**\u0026nbsp;(8.3\u0026nbsp;‑\u0026nbsp;12.3),\u0026nbsp; **Clang**\u0026nbsp;(18.1.2\u0026nbsp;‑\u0026nbsp;20.1.0),\u0026nbsp; **IBM\u0026nbsp;XL\u0026nbsp;C/C++**\u0026nbsp;(16.1.0.3\u0026nbsp;‑\u0026nbsp;16.1.0.20),\u0026nbsp; **IBM\u0026nbsp;Open\u0026nbsp;XL\u0026nbsp;C/C++**\u0026nbsp;(17.1.1.1\u0026nbsp;‑\u0026nbsp;17.1.3.1) |\n| **IBM i**\u0026nbsp;(**PASE**)\u0026nbsp;7.5 | **GCC**\u0026nbsp;(10.3\u0026nbsp;‑\u0026nbsp;10.5),\u0026nbsp; **IBM\u0026nbsp;XL\u0026nbsp;C/C++**\u0026nbsp;(16.1.0.15\u0026nbsp;‑\u0026nbsp;16.1.0.20) |\n| **macOS**\u0026nbsp;≳10.15 | **Xcode**\u0026nbsp;(11.7\u0026nbsp;‑\u0026nbsp;16.3),\u0026nbsp; **GCC**\u0026nbsp;(10.4\u0026nbsp;‑\u0026nbsp;14.2),\u0026nbsp; **Clang**\u0026nbsp;(11.0.3\u0026nbsp;‑\u0026nbsp;19.1.7),\u0026nbsp; **DMD\u0026nbsp;ImportC**\u0026nbsp;(2.105.0\u0026nbsp;‑\u0026nbsp;2.111.0),\u0026nbsp; **Intel\u0026nbsp;C++\u0026nbsp;Compiler\u0026nbsp;Classic**\u0026nbsp;(2021.9.0\u0026nbsp;‑\u0026nbsp;2021.10.0) |\n| **Windows**\u0026nbsp;≳10,\u0026nbsp;11 | **Microsoft\u0026nbsp;Visual\u0026nbsp;C/C++**\u0026nbsp;(17.6\u0026nbsp;‑\u0026nbsp;17.13.5),\u0026nbsp; **Clang‑CL**\u0026nbsp;(16.0.6\u0026nbsp;‑\u0026nbsp;20.1.1),\u0026nbsp; **GCC‑MinGW**\u0026nbsp;(12.2.1\u0026nbsp;‑\u0026nbsp;14.2.1),\u0026nbsp; **LLVM‑MinGW**\u0026nbsp;(15.0\u0026nbsp;‑\u0026nbsp;20.1.1),\u0026nbsp; **Embarcadero\u0026nbsp;C++**\u0026nbsp;(7.20\u0026nbsp;‑\u0026nbsp;7.70),\u0026nbsp; **OrangeC**\u0026nbsp;(≳6.71.10) |\n| **Cygwin**\u0026nbsp;3.4 | **GCC**\u0026nbsp;(11.2\u0026nbsp;‑\u0026nbsp;15.0) |\n| **FreeBSD**\u0026nbsp;≳11.3 | **GCC**\u0026nbsp;(11.4\u0026nbsp;‑\u0026nbsp;14.2),\u0026nbsp; **Clang**\u0026nbsp;(10\u0026nbsp;‑\u0026nbsp;19.1.7),\u0026nbsp; **DMD\u0026nbsp;ImportC**\u0026nbsp;(2.105.0\u0026nbsp;‑\u0026nbsp;2.111.0) |\n| **NetBSD**\u0026nbsp;9.2,\u0026nbsp;10 | **GCC**\u0026nbsp;(7.5\u0026nbsp;‑\u0026nbsp;14.2),\u0026nbsp; **Clang**\u0026nbsp;(15.0.7\u0026nbsp;‑\u0026nbsp;18.1.8) |\n| **OpenBSD**\u0026nbsp;7.3 | **GCC**\u0026nbsp;(11.2),\u0026nbsp; **Clang**\u0026nbsp;(13\u0026nbsp;‑\u0026nbsp;18.1.8),\u0026nbsp; **DMD\u0026nbsp;ImportC**\u0026nbsp;(2.106.0\u0026nbsp;‑\u0026nbsp;2.111.0) |\n| **DragonFly**\u0026nbsp;**BSD**\u0026nbsp;6.4 | **GCC**\u0026nbsp;(8.3\u0026nbsp;‑\u0026nbsp;13),\u0026nbsp; **Clang**\u0026nbsp;(10.0.1\u0026nbsp;‑\u0026nbsp;17.0.6) |\n| **GNU/Hurd** | **GCC**\u0026nbsp;(9.5\u0026nbsp;‑\u0026nbsp;13.2),\u0026nbsp; **Clang**\u0026nbsp;(9.0.1\u0026nbsp;‑\u0026nbsp;13.0.1) |\n| **Haiku**\u0026nbsp;R1b4 | **GCC**\u0026nbsp;(11.2\u0026nbsp;‑\u0026nbsp;13.3),\u0026nbsp; **Clang**\u0026nbsp;(12.0.1\u0026nbsp;‑\u0026nbsp;20.1.0) |\n| **Solaris**\u0026nbsp;11.4 | **GCC**\u0026nbsp;(10.3\u0026nbsp;‑\u0026nbsp;11.2),\u0026nbsp; **Clang**\u0026nbsp;(6\u0026nbsp;‑\u0026nbsp;18.1.8),\u0026nbsp; **Oracle\u0026nbsp;Studio\u0026nbsp;C/C++**\u0026nbsp;(≳12.6) |\n| **illumos** | **GCC**\u0026nbsp;(7.5\u0026nbsp;‑\u0026nbsp;14.2),\u0026nbsp; **Clang**\u0026nbsp;(15.0.7\u0026nbsp;‑\u0026nbsp;19.1.7),\u0026nbsp; **Oracle\u0026nbsp;Studio\u0026nbsp;C/C++**\u0026nbsp;(≳12.6) |\n| **SerenityOS** | **GCC**\u0026nbsp;(13.1) |\n| **Managarm** | **GCC**\u0026nbsp;(14.2) |\n| **WebAssembly/JS** | **Emscripten**\u0026nbsp;(3.1.45\u0026nbsp;‑\u0026nbsp;4.0.5),\u0026nbsp; **Node.js**\u0026nbsp;(20.5.0\u0026nbsp;‑\u0026nbsp;23.10.0) |\n\n* libsir is known to work on most common (and many uncommon) architectures. It has been built and tested on **Intel** (x86\\_64, i686, x32), **ARM** (ARMv6, ARMv7HF, ARMv8‑A), **POWER** (PowerPC, PPC64, PPC64le), **MIPS** (MIPS64, MIPS32, 74Kc), **SPARC** (SPARC64, V8, LEON3), **z/Architecture** (S390X), **SuperH** (SH‑4A), **RISC‑V** (RV32, RV64), **OpenRISC** (OR1200), **Kalray MPPA®** (Coolidge™, KVX), **МЦСТ Эльбрус** (E2K), and **m68k** (ColdFire, 68020+).\n* This table only lists toolchains that have been tested and is by no means exhaustive\u0026mdash;newer (or older) versions are likely to work without fanfare. In fact, if it *doesn't* work on your machine, it's probably a bug.\n\n### \u003ca id=\"system-loggers\" /\u003e System Loggers\n\nlibsir currently supports the following system logging facilities:\n\n| **Log\u0026nbsp;Facility** | **System** | **Description**                                        |\n|----------------------:|:-----------|:-------------------------------------------------------|\n|    **Event\u0026nbsp;Log** |  Windows   | System log viewable with **Event Viewer**              |\n|            **os_log** |  macOS     | System log viewable with **Console** (*or `log`*)      |\n|            **syslog** | (*many*)   | BSD-style system logging via `syslog()` (*local only*) |\n\n### \u003ca id=\"c---compatibility\" /\u003e C++ compatibility\n\n* A C++20 [header-only wrapper](https://github.com/aremmell/libsir/blob/master/include/sir.hh) is available which allows for easy integration with C++ projects, including optional support for popular formatting libraries:\n\n  \u003ctable align=\"center\"\u003e\n  \u003ctbody\u003e\n  \u003ctr\u003e\n   \u003ctd align=\"center\"\u003e\u003ccenter\u003e\u0026nbsp;\u003ca href=\"https://fmt.dev\"\u003e\u003cb\u003e{fmt}\u003c/b\u003e\u003c/a\u003e\u0026nbsp;\u003c/center\u003e\u003c/td\u003e\n   \u003ctd align=\"center\"\u003e\u003ccenter\u003e\u0026nbsp;\u003ca href=\"https://en.cppreference.com/w/cpp/utility/format/format\"\u003e\u003cb\u003estd\u003c/b\u003e::\u003cb\u003eformat\u003c/b\u003e\u003c/a\u003e\u0026nbsp;\u003c/center\u003e\u003c/td\u003e\n   \u003ctd align=\"center\"\u003e\u003ccenter\u003e\u0026nbsp;\u003ca href=\"https://www.boost.org/libs/format\"\u003e\u003cb\u003eBoost\u003c/b\u003e.\u003cb\u003eFormat\u003c/b\u003e\u003c/a\u003e\u0026nbsp;\u003c/center\u003e\u003c/td\u003e\n   \u003ctd align=\"center\"\u003e\u003ccenter\u003e\u0026nbsp;\u003ca href=\"https://cplusplus.com/reference/istream/iostream\"\u003e\u003cb\u003estd\u003c/b\u003e::\u003cb\u003eiostream\u003c/b\u003e\u003c/a\u003e\u0026nbsp;\u003c/center\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003c/tbody\u003e\n  \u003c/table\u003e\n\n### \u003ca id=\"language-bindings\" /\u003e Language Bindings\n\n* [Bindings](https://github.com/aremmell/libsir/tree/master/bindings) for scripting tools and other high-level programming languages are available, including support for:\n\n  \u003ctable align=\"center\"\u003e\n  \u003ctbody\u003e\n  \u003ctr\u003e\n   \u003ctd align=\"center\"\u003e\u003ccenter\u003e\u0026nbsp;\u003ca href=\"https://www.softintegration.com\"\u003e\u003cb\u003eCh\u003c/b\u003e\u003c/a\u003e\u0026nbsp;\u003c/center\u003e\u003c/td\u003e\n   \u003ctd align=\"center\"\u003e\u003ccenter\u003e\u0026nbsp;\u003ca href=\"https://www.python.org\"\u003e\u003cb\u003ePython\u003c/b\u003e\u003c/a\u003e\u0026nbsp;\u003c/center\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003c/tbody\u003e\n  \u003c/table\u003e\n\n## \u003ca id=\"an-example\" /\u003e An example\n\nSome sample terminal output from libsir demonstrating the default text styling settings for stdio (*note that this is just a sample; libsir supports 4, 8, and 24-bit color modes, so a virtually limitless number of configurations are possible*):\n\n![sample terminal output](./docs/res/sample-terminal.png)\n\nThis output is from the `example` application, whose source code can be located in the [example](https://github.com/aremmell/libsir/tree/master/example) directory. If you're curious about a very basic implementation of libsir in a practical context, that's a good place to start.\n\n**Coming soon:** A C++20 version of the example program.\n\n## \u003ca id=\"building-from-source\" /\u003e Building from source\n\nThere are several options available for building libsir from source:\n\n### \u003ca id=\"unix-makefile\" /\u003e Unix Makefile\n\nThe Makefiles are compatible with **GNU Make** version **3.81** and later (**4.4** *recommended*) and support both native and cross-compilation builds on most Unix-like operating systems: AIX, Solaris, illumos, Linux, macOS, Cygwin, BSD, GNU/Hurd, Haiku, QNX, etc.\n\n#### \u003ca id=\"unix-makefile-envvars\" /\u003e Environment variables\n\nA number of environment variables are available which affect the way in which libsir and its various build artifacts are created (*e.g., turning off optimizations and enabling debug symbols*). Information about these variables and how to use them with GNU make can be found in the [online documentation](https://libsir.rml.dev/config.html).\n\n#### \u003ca id=\"unix-makefile-recipes\" /\u003e Recipes\n\n|           Recipe Type |     Command      | \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Output file(s)         |\n|----------------------:|:----------------:|:-----------------------------------------------|\n|   Test\u0026nbsp;suite (C) |  `make tests`    | \u003cul\u003e\u003cli\u003e*build/bin/sirtests[.exe]*\u003c/li\u003e\u003c/ul\u003e   |\n| Test\u0026nbsp;suite (C++) |  `make tests++`  | \u003cul\u003e\u003cli\u003e*build/bin/sirtests++[.exe]*\u003c/li\u003e\u003c/ul\u003e |\n|      Example\u0026nbsp;app |  `make example`  | \u003cul\u003e\u003cli\u003e*build/bin/sirexample[.exe]*\u003c/li\u003e\u003c/ul\u003e |\n|   Static\u0026nbsp;library |  `make static`   | \u003cul\u003e\u003cli\u003e*build/lib/libsir_s.a*\u003c/li\u003e\u003c/ul\u003e       |\n|  nShared\u0026nbsp;library |  `make shared`   | \u003cul\u003e\u003cli\u003e*build/lib/libsir.so*\u003c/li\u003e\u003c/ul\u003e        |\n|          Installation |  `make install`  | \u003cul\u003e\u003cli\u003e*$PREFIX/lib/libsir_s.a*\u003c/li\u003e\u003cli\u003e*$PREFIX/lib/libsir.so*\u003c/li\u003e\u003cli\u003e*$PREFIX/include/sir.h*\u003c/li\u003e\u003cli\u003e*$PREFIX/include/sir/\\*.h*\u003c/li\u003e\u003c/ul\u003e |\n\n- See the [CI configuration file](https://github.com/aremmell/libsir/blob/master/.gitlab-ci.yml) for practical examples.\n\n### \u003ca id=\"visual-studio-code\" /\u003e Visual Studio Code\n\nA VS Code workspace file is located in the root of the repository (`sir.code-workspace`). Build tasks are only configured for macOS and Linux. On other platforms, use the integrated terminal to run GNU [`make`](#unix-makefile) manually.\n\n#### \u003ca id=\"vs-code-build-tasks\" /\u003e Build Tasks\nTo run a task, open the command list (\u003ckbd\u003e\u0026#8984;\u003c/kbd\u003e + \u003ckbd\u003e\u0026#8679;\u003c/kbd\u003e + \u003ckbd\u003eP\u003c/kbd\u003e on macOS, \u003ckbd\u003e\u0026#8963;\u003c/kbd\u003e + \u003ckbd\u003e\u0026#8679;\u003c/kbd\u003e + \u003ckbd\u003eP\u003c/kbd\u003e on Linux), then start typing `\"run task\"` until you see `\"Tasks: Run Task\"`. Click the item or press the key combination listed next to it. You should then see a drop-down menu containing all of the build tasks for libsir, which are listed here:\n\n|           Build Task | Description                                                      |\n|---------------------:|:-----------------------------------------------------------------|\n| Clean                | Deletes all intermediate files and previously compiled binaries. |\n| Static Library       | Compiles libsir as a static library.                             |\n| Static Library [DBG] | Compiles libsir as a static library with debug symbols.          |\n| Shared Library       | Compiles libsir as a shared library.                             |\n| Shared Library [DBG] | Compiles libsir as a shared library with debug symbols.          |\n| C Test Suite         | Compiles the C test suite.                                       |\n| C Test Suite [DBG]   | Compiles the C test suite with debug symbols.                    |\n| C++ Test Suite       | Compiles the C++ test suite.                                     |\n| C++ Test Suite [DBG] | Compiles the C++ test suite with debug symbols.                  |\n| C Example App        | Compiles the C sample application.                               |\n\nThe VS Code build tasks execute `make` under the hood\u0026mdash;the non-debug tasks map directly to the [recipes](#unix-makefile-recipes) listed under Unix Makefile; the debug tasks utilize libsir's custom [environment variables](#unix-makefile-envvars) to control the build process.\n\n### \u003ca id=\"visual-studio-2022\" /\u003e Visual Studio 2022\n\nA Visual Studio 2022 solution containing appropriate project files can be found in the [msvs](https://github.com/aremmell/libsir/tree/master/msvs) directory. Tested on Windows 11 (*x86, x64, and Arm64*) with Visual Studio 17.6+. See the [README](https://github.com/aremmell/libsir/tree/master/msvs/README.md) for more information.\n\n#### \u003ca id=\"ms-build-tools\" /\u003e MSBuild\n\nVisual Studio is technically not required in order to build the Visual Studio 2022 solution; this may also be accomplished using \"Build Tools for Visual Studio 2022\" ([download](https://aka.ms/vs/17/release/vs_BuildTools.exe), [reference](https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild-command-line-reference?view=vs-2022)). This is a stand-alone toolchain that does *not* require Visual Studio 2022 and includes compilers and MSBuild.\n\n**Using MSBuild from the command-line**\n\nUsing MSBuild is pretty straightforward. Start a Developer Command Prompt, and then just supply the path to the `.sln` file, task (*e.g. `build`*), configuration (*e.g. `release`*), and platform (*e.g. `x64`*). Here's an example that builds libsir in release mode for x86_64 when executed from the root of the libsir repository:\n\n```ps\nMSBuild .\\msvs\\libsir.sln -t:Rebuild -p:Configuration=Release -p:Platform=x64\n```\n\n## \u003ca id=\"dig-in\" /\u003e Dig in\n\nIf you are genuinely interested in utilizing libsir, you are encouraged to read the [full online documentation](https://libsir.rml.dev) to get a better understanding of the library's capabilities and interfaces.\n\nSuggested initial sections:\n * [Public Functions](https://libsir.rml.dev/group__publicfuncs.html)\n * [Public Types](https://libsir.rml.dev/group__publictypes.html)\n * [Configuration](https://libsir.rml.dev/config.html)\n * [Test suite](https://libsir.rml.dev/testsuite.html)\n\n### \u003ca id=\"gnu-global\" /\u003e GNU Global\n\n* [A GNU Global-generated tagged and cross-referenced hypertext source code listing is available.](https://libsir.gitlab.io/libsir)\n* This tagged listing is a valuable aid for new developers seeking an understanding of the libsir source code.\n\n## \u003ca id=\"sast-tools\" /\u003e SAST Tools\n\nThe developers are obsessed with the quality, reliability, and correctness of libsir.\n\nThe following **SAST** (*static application*/*analysis security*/*software testing*) and dynamic verification tools are used\u0026mdash;on **every commit**\u0026mdash;as part of our comprehensive [continuous integration](https://gitlab.com/libsir/libsir/-/pipelines) testing process:\n\n| Tool | Usage |\n|-----:|:------|\n| [**PVS-Studio**](https://pvs-studio.com/pvs-studio/?utm_source=website\u0026utm_medium=github\u0026utm_campaign=open_source) | Static analysis tool for C, C++, C#, and Java code                                 |\n| [Clang Analyzer](https://clang-analyzer.llvm.org/), [Sanitizers](https://github.com/google/sanitizers)             | Static and dynamic analysis tools for C, C++, and Objective-C code                 |\n| [Coveralls](https://coveralls.io/github/aremmell/libsir), [gcovr](https://gcovr.com/)                              | Line-by-line test coverage reporting and statistical analysis                      |\n| [Coverity® Scan](https://scan.coverity.com/projects/aremmell-libsir)                                               | Find and fix defects in Java, C/C++, C#, JS, Ruby, and Python code                 |\n| [Cppcheck](https://cppchecksolutions.com/)                                                                         | Static analysis tool for C and C++ code                                            |\n| [DUMA](https://github.com/johnsonjh/duma)                                                                          | Detect Unintended Memory Access, a memory debugger                                 |\n| [Flawfinder](https://dwheeler.com/flawfinder/)                                                                     | Scans C and C++ source code for potential security weaknesses                      |\n| [GCC Static Analyzer](https://gcc.gnu.org/onlinedocs/gcc/Static-Analyzer-Options.html)                             | Coverage-guided symbolic execution static analyzer for C code                      |\n| [GNU Cppi](https://www.gnu.org/software/cppi/)                                                                     | C preprocessor directive linting, indenting, and regularization                    |\n| [GNU Global](https://www.gnu.org/software/global/)                                                                 | Source code indexing and tagging system                                            |\n| [OpenOSC](https://github.com/cisco/OpenOSC)                                                                        | Object size checking library to detect buffer overflows in C/C++ code              |\n| [Oracle Developer Studio](https://www.oracle.com/application-development/developerstudio/)                         | Performance, security, and thread analysis tools for C, C++, and Fortran           |\n| [REUSE](https://api.reuse.software/info/github.com/aremmell/libsir)                                                | Verifies compliance with the [REUSE](https://reuse.software/) licensing guidelines |\n| [Semgrep](https://semgrep.dev/)                                                                                    | A fast, open-source, static analysis engine for many languages                     |\n| [SonarCloud](https://sonarcloud.io/project/overview?id=aremmell_libsir)                                            | Cloud-based code quality and security analysis tools                               |\n| [Valgrind](https://valgrind.org/)                                                                                  | Tools for memory debugging, memory leak detection, and profiling                   |\n| [Visual Studio Code Analyzer](https://learn.microsoft.com/en-us/cpp/code-quality/)                                 | Tools to analyze and improve C/C++ source code quality                             |\n\n## \u003ca id=\"other-tools\" /\u003e Other Tools\n\nAdditional tools used for libsir development and testing include:\n\n| Tool | Usage |\n|-----:|:------|\n| [CBMC](http://www.cprover.org/cbmc/), [ESBMC](http://esbmc.org/)                                             | Bounded Model Checkers for C and C++ programs                       |\n| [Dr. Memory](https://drmemory.org/)                                                                          | Memory debugging tool for Windows, Linux, macOS, and Android        |\n| [Funcheck](https://github.com/tmatis/funcheck)                                                               | A tool for checking function call return protections                |\n| [Frama-C](https://frama-c.com/)                                                                              | Framework for Modular Analysis of C programs                        |\n| [Intel® VTune™ Profiler](https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler.html) | Performance analysis and profiling tools for Intel systems          |\n| [Luke Stackwalker](https://lukestackwalker.sf.net/)                                                          | Sampling C/C++ code profiler for Microsoft Windows                  |\n| [NetBSD lint(1)](https://man.netbsd.org/lint.1)                                                              | A C (C90/C99/C11/C17/C23) program verifier                          |\n| [PurifyPlus™](https://www.teamblue.unicomsi.com/products/purifyplus/)                                        | Run-time analysis tools for application reliability and performance |\n| [ShellCheck](https://www.shellcheck.net/)                                                                    | A static analysis tool for Unix shell scripts                       |\n| [Smatch](https://repo.or.cz/w/smatch.git)                                                                    | Smatch (Source Matcher) is a static analysis tool for C code        |\n| [SoftIntegration Ch](https://www.softintegration.com/)                                                       | C/C++ interpreter and interactive platform for scientific computing |\n| [Very Sleepy](http://www.codersnotes.com/sleepy/)                                                            | Sampling CPU profiler for Microsoft Windows applications            |\n| [Vftrace](https://github.com/SX-Aurora/Vftrace)                                                              | A performance profiling library with a focus on HPC applications    |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faremmell%2Flibsir","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faremmell%2Flibsir","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faremmell%2Flibsir/lists"}