{"id":44881029,"url":"https://github.com/gul-cpp/gul17","last_synced_at":"2026-02-17T16:06:10.167Z","repository":{"id":175606275,"uuid":"654176289","full_name":"gul-cpp/gul17","owner":"gul-cpp","description":"General Utility Library for C++17","archived":false,"fork":false,"pushed_at":"2025-12-17T15:26:31.000Z","size":14917,"stargazers_count":4,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-12-18T08:51:39.842Z","etag":null,"topics":["cpp17","library"],"latest_commit_sha":null,"homepage":"https://gul-cpp.github.io/gul17/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gul-cpp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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":"2023-06-15T14:42:40.000Z","updated_at":"2025-11-24T09:38:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"dc661e17-c632-49ae-a0c2-66807341fb4c","html_url":"https://github.com/gul-cpp/gul17","commit_stats":null,"previous_names":["gul-cpp/gul17"],"tags_count":92,"template":false,"template_full_name":null,"purl":"pkg:github/gul-cpp/gul17","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gul-cpp%2Fgul17","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gul-cpp%2Fgul17/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gul-cpp%2Fgul17/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gul-cpp%2Fgul17/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gul-cpp","download_url":"https://codeload.github.com/gul-cpp/gul17/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gul-cpp%2Fgul17/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29549280,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T14:33:00.708Z","status":"ssl_error","status_checked_at":"2026-02-17T14:32:58.657Z","response_time":100,"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":["cpp17","library"],"created_at":"2026-02-17T16:06:09.408Z","updated_at":"2026-02-17T16:06:10.158Z","avatar_url":"https://github.com/gul-cpp.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# General Utility Library for C++17\n\nThe General Utility Library for C++17 (GUL17) contains often-used utility functions and\ntypes that form the foundation for other libraries and programs. The main fields covered\nby the library are:\n\n  * String handling\n  * Concurrency\n  * Time\n  * Statistics and numerics\n  * Debugging\n  * Containers\n  * Type traits\n  * Core guideline support library (GSL) excerpts\n  * Backports from new standard library extensions\n\nTo get started, have a look at the\n[documentation website](https://gul-cpp.github.io/gul17/).\n\nHere you find more detailed information on:\n\n* [Building](#Building)\n  * [Build configuration switches](#Build-configuration-switches)\n  * [Default Configurations](#Default-configurations)\n  * [Building on Windows with Visual C++](#Building-on-Windows-with-Visual-C)\n  * [Single header use](#Single-header-use)\n* [Testing](#Testing)\n* [Coverage report generation](#Coverage-report)\n* [Versioning](#Versioning)\n  * [Version number examples](#Version-number-examples)\n\n## Installing with vcpkg\n\nGUL17 is available from the [vcpkg](https://vcpkg.io/) package manager. Once you have\nvcpkg installed, just run:\n\nvcpkg install gul17\n\n## Building \u003ca name=\"Building\"\u003e\u003c/a\u003e\n\nNeedless to say, GUL17 needs a C++17 compliant compiler. To get started, clone this\nrepository:\n\n        git clone https://github.com/gul-cpp/gul17.git\n        cd gul17\n\nUse meson to configure the build you want to have. A list of the\n[build options](#Build-configuration-switches) is given below. Build directory name can be\nwhat you want and can even be located outside of the projecte directory. E.g. on Linux you\ncan place the build directory into a tmpfs mount (aka RAM disk).\nIf your build directories are inside the project root directory and starting with 'build'\nthey will be ignored by git.\nExamples:\n\n        meson setup \u003cbuild-dir\u003e\n        meson setup -D tests=false \u003cbuild-without-tests-dir\u003e\n        meson setup --prefix=/usr --buildtype=release \u003cbuild-rel-dir\u003e\n        meson setup --buildtype=release --unity=on \u003cbuild-rel-unity-dir\u003e\n        meson setup --buildtype=release -D docs=false \u003cbuild-nodocs-rel-dir\u003e\n        meson setup -Dcpp_args='-Wconversion -Wshadow' --buildtype=debug \u003cbuild-with-extra-warnings-dir\u003e\n        CXX=clang++ meson setup \u003cbuild-clang-dir\u003e\n\nTypical build configurations can be easily summoned as detailed in\n[Default configurations](#Default-configurations) below.\n\nAfterwards, enter the build directory – in this case, for the release build – and start\nthe build process:\n\n        cd \u003cbuild-dir\u003e\n        ninja\n        ninja test\n        ninja data/docs\n\n_Notes:_\n\n1. The configuration to be changed can immediately follow the ``-D`` for example\n   ``-Dwarning_level=1``\n2. ``debuild`` is the normal Debian packager. For DESY environments, consider using\n   ``makeDdeb`` instead.\n3. It is not necessary to call ``ninja`` before calling ``debuild``/``makeDdeb``. But of\n   course you usually want to run ``ninja test`` before you package.\n4. ``debuild``/``makeDdeb`` has to be called in the repo root directory.\n\n### Build configuration switches \u003ca name=\"Build-configuration-switches\"\u003e\u003c/a\u003e\n\nYou can list all possible build configuration switches with ``meson configure``\nin an existing build directory [1]. This command can also be used to change\nbuild configurations after the directory has been created. For example to\ndecrease the warning level after the build directory has already been created:\n``meson configure -D warning_level=1`` (Use ``mesonconf`` if your meson is too\nold.)\n\nIn addition to meson's standard switches there are:\n\n    Option         Default Value  Possible Values  Description\n    ------         -------------  ---------------  -----------\n    docs           true           [true, false]    Generate documentation via doxygen\n    tests          true           [true, false]    Generate tests\n\nOverview of standard project options that might be useful:\n\n    Option        Typical Value    Description\n    ------        -------------    -----------\n    prefix        /usr             Installation prefix\n    libdir        lib              Library directory\n    includedir    include          Header file directory\n    datadir       share            Data file (Doxygen website) directory\n\n### Building on Windows with Visual C++ \u003ca name=\"Building-on-Windows-with-Visual-C\"\u003e\u003c/a\u003e\n\nGUL can be built with Visual C++, although the integration with the Visual Studio IDE is\nsomewhat patchy. In principle, meson and ninja can be used as outlined above. However,\nthe devil is in the details:\n\n* For Meson, prefer the MSI installer from https://mesonbuild.com/. We found that Meson\n  versions packaged with the Anaconda Python distribution do not work, to name an\n  example.\n* For Ninja, the version from the Meson MSI installer works just as well as the one\n  distributed with Visual Studio 2019 (in the cmake workload).\n\nSetting up the PATH and calling the correct executable can be difficult. We distribute a\nWindows batch file ``tools\\make_vs.bat`` as an example. It may require some editing to\nadapt it to your system, but afterwards you can call it from the command line or directly\nfrom Visual Studio to initiate a build, cleanup, or to run the unit test suite.\n\n    Usage:\n    make_vs mrproper                    - Remove the entire build directory\n    make_vs release \u003cplatform\u003e          - Build the release version of the library for the specified platform\n    make_vs debug \u003cplatform\u003e            - Build the debug version of the library for the specified platform\n    make_vs test \u003cbuildtype\u003e \u003cplatform\u003e - Run the unit tests for the specified build type and platform\n    where:\n    \u003cbuildtype\u003e is one of \"release\" or \"debug\"\n    \u003cplatform\u003e is one of \"x86\" or \"x64\"\n\nThe files ``.vs\\tasks_vs.json`` and ``.vs\\launch_vs.json`` as well as\n``CppProperties.json`` in the root directory contain information for Visual Studio 2019\nthat should allow you to open the folder via \"open folder\" (i.e. without a project file)\nand still be able to build and debug GUL via the batch file.\n\nIt is not possible to build GUL with a version prior to Visual Studio 2017 version 15.7\n(a.k.a. 19.14), because basic language features are\n[missing](https://docs.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance)\n(e.g. two phase name lookup is needed, N3652 and N3653 are used in GUL code).\n\n### Single header use \u003ca name=\"Single-header-use\"\u003e\u003c/a\u003e\n\nUnder some circumstances it is nice to have all of GUL in only one header file that can\nbe included - and no library to link to. For example when doing experiments with online\ncompilers.\n\nThis is not the recommended way to use GUL, but you can use the script `tools/single_gul`\nto create such a complete header file.\n\n## Testing \u003ca name=\"Testing\"\u003e\u003c/a\u003e\n\nAfter configuring the build directory one can run all tests by\n\n        ninja test\n\nTo see which tests have failed and get other additional information you might want to do\ninstead\n\n        meson test --test-args '-r junit'\n\nOr for older meson versions\n\n        mesontest --test-args '-r junit'\n\n## Coverage report \u003ca name=\"Coverage-report\"\u003e\u003c/a\u003e\n\nTo generate a coverage report you need to specify ``-D b_coverage=true`` on the meson call\nfor the build configuration. Then after running the tests (see previous paragraph) the\ncoverage report is generated by\n\n        ninja coverage-html\n\nDepending on the installed coverage tool the targets ``coverage-text`` and\n``coverage-xml`` might also be there. To generate a coverage report the package ``gcov``\nmust be installed, and ``lcov/genhtml`` or *(recommended)* ``gcovr`` (\u003e= 3.1) is used to\ngenerate the HTML pages.\n\n## Versioning \u003ca name=\"Versioning\"\u003e\u003c/a\u003e\n\nThe version number for GUL17 resides in the LIBNO file.\n\nGUL17 follows a calendar-oriented versioning scheme with a version number of the\nform YY.M.minor where YY stands for the last two digits of the year, M is the\nnumber of the month, and minor is a minor version number that starts from zero\nfor each release in that month.\n\nFor instance, the first release in March 2025 is called `25.3.0`, the second one `25.3.1`.\n\nThis is not semantic versioning.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgul-cpp%2Fgul17","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgul-cpp%2Fgul17","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgul-cpp%2Fgul17/lists"}