Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 8 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# General Utility Library for C++17
# General Utility Library for C++20

The General Utility Library for C++17 (GUL17) contains often-used utility functions and
The General Utility Library for C++20 (GUL20) contains often-used utility functions and
types that form the foundation for other libraries and programs. The main fields covered
by the library are:

Expand All @@ -15,7 +15,7 @@ by the library are:
* Backports from new standard library extensions

To get started, have a look at the
[documentation website](https://gul-cpp.github.io/gul17/).
[documentation website](https://gul-cpp.github.io/gul20/).

Here you find more detailed information on:

Expand All @@ -29,20 +29,13 @@ Here you find more detailed information on:
* [Versioning](#Versioning)
* [Version number examples](#Version-number-examples)

## Installing with vcpkg

GUL17 is available from the [vcpkg](https://vcpkg.io/) package manager. Once you have
vcpkg installed, just run:

vcpkg install gul17

## Building <a name="Building"></a>

Needless to say, GUL17 needs a C++17 compliant compiler. To get started, clone this
Needless to say, GUL20 needs a C++20 compliant compiler. To get started, clone this
repository:

git clone https://github.com/gul-cpp/gul17.git
cd gul17
git clone https://github.com/gul-cpp/gul20.git
cd gul20

Use meson to configure the build you want to have. A list of the
[build options](#Build-configuration-switches) is given below. Build directory name can be
Expand Down Expand Up @@ -181,9 +174,9 @@ generate the HTML pages.

## Versioning <a name="Versioning"></a>

The version number for GUL17 resides in the LIBNO file.
The version number for GUL20 resides in the LIBNO file.

GUL17 follows a calendar-oriented versioning scheme with a version number of the
GUL20 follows a calendar-oriented versioning scheme with a version number of the
form YY.M.minor where YY stands for the last two digits of the year, M is the
number of the month, and minor is a minor version number that starts from zero
for each release in that month.
Expand Down
4 changes: 2 additions & 2 deletions data/Doxyfile.in
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8
# title of most generated pages and in a few other places.
# The default value is: My Project.

PROJECT_NAME = "General Utility Library for C++17"
PROJECT_NAME = "General Utility Library for C++20"

# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
Expand Down Expand Up @@ -811,7 +811,7 @@ RECURSIVE = YES
# Note that relative paths are relative to the directory from which doxygen is
# run.

EXCLUDE = include/gul17/catch.h
EXCLUDE =

# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
Expand Down
95 changes: 40 additions & 55 deletions data/doxygen.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* \date Created on August 24, 2018
* \brief Doxygen input file for the General Utility Library.
*
* \copyright Copyright 2018-2025 Deutsches Elektronen-Synchrotron (DESY), Hamburg
* \copyright Copyright 2018-2026 Deutsches Elektronen-Synchrotron (DESY), Hamburg
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
Expand All @@ -23,7 +23,7 @@
/**
* Namespace gul17 contains all functions and classes of the General Utility Library.
*/
namespace gul17 {
namespace GULNS {

/**
* \mainpage
Expand All @@ -32,7 +32,7 @@ namespace gul17 {
*
* \section introduction Introduction
*
* The General Utility Library for C++17 (GUL17) contains often-used utility functions and
* The General Utility Library for C++20 (GUL20) contains often-used utility functions and
* types that form the foundation for other libraries and programs. The main fields
* covered by the library are:
*
Expand All @@ -58,9 +58,9 @@ namespace gul17 {
* We strive for a very high quality level. To ensure this, we follow a list of
* \ref quality_standards.
*
* \section who_is_using_the_library Who Is Using GUL17?
* \section who_is_using_the_library Who Is Using GUL20?
*
* GUL17 was developed at the German national particle accelerator laboratory
* GUL20 was developed at the German national particle accelerator laboratory
* <a href="https://www.desy.de">DESY</a>. It was originally meant to provide a modern and
* well-tested foundation for the <a href="https://doocs.desy.de/">DOOCS</a> control
* system which drives most of the lab's accelerators. It is still used mainly in this
Expand All @@ -71,27 +71,31 @@ namespace gul17 {
*
* To use the library:
*
* - Include the main header file \ref gul17/gul.h (or read more under
* - Include the main header file \ref gul20/gul.h (or read more under
* \ref how_to_include_gul_headers).
* - Link your code against the library (-lgul17).
* - Link your code against the library (-lgul20).
* - If you are on Windows, see \ref using_gul_on_windows.
*
* All functions and classes are enclosed in the namespace \ref gul17.
* All functions and classes are enclosed in the namespace \ref gul20.
*
* GUL17 requires at least C++17. It works fine with newer versions of the standard, but
* might use its own backport types (e.g. gul17::expected) in function interfaces.
* GUL20 requires at least C++20. It works fine with newer versions of the standard, but
* might use its own backport types (e.g. gul20::expected) in function interfaces.
*
* \section installation Installation
*
* \if GUL20_VCPKG_READY
* If you are using the [vcpkg](https://vcpkg.io/) package manager, you can install the
* library simply by running:
* \verbatim vcpkg install gul17\endverbatim
* Otherwise, you may have to build and install it manually. Have a look at the
* [readme file on GitHub](https://github.com/gul-cpp/gul17/blob/main/README.md).
* \verbatim vcpkg install gul20\endverbatim
* Otherwise, you may have to build and install it manually.
* \endif
*
* Have a look at the
* [readme file on GitHub](https://github.com/gul-cpp/gul20/blob/main/README.md).
*
* \section source_code Obtaining the Source Code
*
* You can browse or clone the source code at https://github.com/gul-cpp/gul17.git.
* You can browse or clone the source code at https://github.com/gul-cpp/gul20.git.
*
* \section contributing Contributing
*
Expand All @@ -112,38 +116,44 @@ namespace gul17 {
*/

/**
* \page how_to_include_gul_headers How to Include GUL17 Headers
* \page how_to_include_gul_headers How to Include GUL20 Headers
*
* All header files of the library reside under `gul17/` with no further subdirectories.
* To get access to almost all of GUL17's functionality, it is sufficient to include the
* All header files of the library reside under `gul20/` with no further subdirectories.
* To get access to almost all of GUL20's functionality, it is sufficient to include the
* all-in-one header:
* \code
* #include <gul17/gul.h>
* #include <gul20/gul.h>
* \endcode
*
* Howard Hinnant's `gul17/date.h` header for calendar date functionality is not included
* Howard Hinnant's `gul20/date.h` header for calendar date functionality is not included
* in this header file, chiefly because of its negative impact on compile times. Just
* include it directly where needed.
*
* If you prefer to shave the last seconds off your build times, you are of course free to
* include also the other GUL17 headers individually without going through `gul.h`. Just
* include also the other GUL20 headers individually without going through `gul.h`. Just
* follow the documentation of the classes and functions you use to find the associated
* header files.
*
* We do not guarantee that individual header file names will never change (except for
* `gul17/gul.h`), but we can assure you that this will happen rarely, if ever.
* `gul20/gul.h`), but we can assure you that this will happen rarely, if ever.
*/

/**
* \page release_notes Release Notes
*
* GUL17 releases follow a calendar-oriented versioning scheme with a version number of
* GUL20 releases follow a calendar-oriented versioning scheme with a version number of
* the form `YY.M.minor` where `YY` stands for the last two digits of the year, `M` is the
* number of the month, and `minor` is a minor version number that starts from zero for
* each release in that month. For instance, the first release in March 2025 was called
* 25.3.0, the second could have been called 24.3.1. This is <em>not</em> semantic
* each release in that month. For instance, the first release in February 2026 was called
* 26.2.0, the second could have been called 26.2.1. This is <em>not</em> semantic
* versioning.
*
* \section changelog_gul20 GUL20 Versions
*
* - Initial release of GUL20. Compared to GUL17, backports of C++20 standard library
* features (e.g. span, remove_cvref) are removed.
*
*
* \section changelog_gul17 GUL17 Versions
*
* \subsection V26_2_0 Version 26.2.0
Expand Down Expand Up @@ -176,6 +186,7 @@ namespace gul17 {
* features (e.g. string_view, optional) are removed, and the build system is
* simplified.
*
*
* \section changelog_2_x GUL14: 2.x Versions
*
* \subsection V2_13_0 Version 2.13.0
Expand Down Expand Up @@ -354,14 +365,14 @@ namespace gul17 {
*
* The following individuals contributed to the General Utility Library:
*
* > Lars Fröhlich, Sören Grunewald, Olaf Hensler, Fini Jastrow, Josef Wilgen
* > Jan Behrens, Lars Fröhlich, Sören Grunewald, Olaf Hensler, Fini Jastrow
*
* Additional code distributed with this library was written by authors listed under
* \ref additional_copyright_notices below.
*
* \section copyright_notice Copyright Notice
*
* Copyright 2018-2025 Deutsches Elektronen-Synchrotron (DESY), Hamburg
* Copyright 2018-2026 Deutsches Elektronen-Synchrotron (DESY), Hamburg
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
Expand Down Expand Up @@ -393,11 +404,6 @@ namespace gul17 {
* dedicated all copyright and related and neighboring rights to this software to the
* public domain worldwide. This software is distributed without any warranty.
* \ref license_cc0_public_domain and \ref expected.h for details).</dd>
*
* <dt>\ref span.h</dt>
* <dd>Copyright 2018 Tristan Brindle.
* Distributed under the Boost Software License, Version 1.0 (see
* \ref license_boost_1_0 and \ref span.h for details).</dd>
* </dl>
*/

Expand Down Expand Up @@ -536,7 +542,7 @@ namespace gul17 {
* Furthermore, the library includes Howard Hinnant's date.h header, which extends C++17's
* `<chrono>` library with types and functionality for handling calendar dates. Most of
* this functionality has been standardized in C++20. Documentation is available on
* [GitHub](https://howardhinnant.github.io/date/date.html); just note that the GUL17
* [GitHub](https://howardhinnant.github.io/date/date.html); just note that the GUL20
* version lives in the namespace `gul17::date`.
*/

Expand Down Expand Up @@ -667,12 +673,6 @@ namespace gul17 {
* \ref gul17::OverloadSet "OverloadSet":
* A class template that works like an overload set of functions, mainly for use with
* std::visit().
*
* \ref gul17::remove_cvref "remove_cvref":
* A metafunction to remove const, volatile, and reference qualifiers from a type.
* This is a backport of
* [std::remove_cvref](https://en.cppreference.com/w/cpp/types/remove_cvref) from
* C++20.
*/

/**
Expand All @@ -691,17 +691,6 @@ namespace gul17 {
* error value. It should behave like
* [std::expected](https://en.cppreference.com/w/cpp/utility/expected)
* from C++23 for almost all use cases.
*
* \ref gul17::remove_cvref "remove_cvref":
* A metafunction to remove const, volatile, and reference qualifiers from a type.
* This is a backport of
* [std::remove_cvref](https://en.cppreference.com/w/cpp/types/remove_cvref) from
* C++20.
*
* \ref gul17::span "span":
* A view to a contiguous sequence of objects. It should behave like
* [std::span](https://en.cppreference.com/w/cpp/container/span) from C++20 for almost
* all use cases.
*/

/**
Expand All @@ -711,10 +700,6 @@ namespace gul17 {
* version 3 for its unit tests. Please refer to
* https://github.com/catchorg/Catch2/blob/master/docs/tutorial.md for an introduction to
* Catch2.
*
* \note
* The predecessor library GUL14 included a header-only version of Catch2. This header is
* no longer available in GUL17. Catch2 must be installed separately.
*/

/**
Expand Down Expand Up @@ -980,9 +965,9 @@ namespace gul17 {
*/

/**
* \defgroup date_h gul17/date.h
* \defgroup date_h gul20/date.h
* \brief Calendar date library by Howard Hinnant.
* \see https://github.com/HowardHinnant/date
*/

} // namespace gul17
} // namespace GULNS
10 changes: 5 additions & 5 deletions data/how_to_create_a_vcpkg_port.txt
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
These are some notes on how to create a new vcpkg port for GUL17, e.g. after the
These are some notes on how to create a new vcpkg port for GUL20, e.g. after the
release of an update. This assumes that a fork of https://github.com/microsoft/vcpkg.git
is checked out.

1. Edit ports/gul17/portfile.cmake
1. Edit ports/gul20/portfile.cmake
Change REF to new version tag or git hash
Change SHA512 to 0
2. Edit ports/gul17/vcpkg.json
2. Edit ports/gul20/vcpkg.json
Change version number
3. Run vcpkg remove --outdated
This should remove the outdated GUL17 version (if any)
This should remove the outdated GUL20 version (if any)
4. Run vcpkg install gul17
It should fail and show you the new SHA512 hash
5. Edit ports/gul17/portfile.cmake
5. Edit ports/gul20/portfile.cmake
Change SHA512 to new hash
6. Add port to vcpkg repository
git add ports/gul17
Expand Down
41 changes: 3 additions & 38 deletions debian/copyright
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/

Files: *
Copyright: 2018-2024 libgul contributors
2018-2024 DESY
Copyright: 2018-2026 Deutsches Elektronen-Synchrotron (DESY)
License: LGPL-2.1+

Files: include/gul17/catch.h
Copyright: 2019 Two Blue Cubes Ltd.
License: BSL-1.0

Files: include/gul17/date.h
Files: include/gul20/date.h
Copyright: 2015-2017 Howard Hinnant
2016 Adrian Colomitchi
2017 Florian Dang
Expand All @@ -19,16 +14,11 @@ Copyright: 2015-2017 Howard Hinnant
2022 libgul contributors (L. Fröhlich)
License: Expat

Files: include/gul17/expected.h
Files: include/gul20/expected.h
Copyright: 2017 Sy Brand
2023-2024 libgul contributors (L. Fröhlich)
License: CC0

Files: include/gul17/span.h
Copyright: 2018 Tristan Brindle
2019 libgul contributors (L. Fröhlich)
License: BSL-1.0

License: LGPL-2.1+
This package is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
Expand All @@ -44,31 +34,6 @@ License: LGPL-2.1+
License along with this package; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

License: BSL-1.0
Boost Software License - Version 1.0 - August 17th, 2003
.
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:
.
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.
.
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, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

License: Expat
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
Expand Down
Loading
Loading