Skip to content

Releases: helly25/mbo

0.10.0

15 Nov 09:37
0.10.0
2d9fdc4

Choose a tag to compare

Version 0.10.0

Changelog

  • Bumped minimum GCC to 13.
  • Added mbo/json which adds JSon write support for almost any structured type. If anything is missing it can easily be added on the client side.
  • Added direct support for -fno-exceptions irrespective of config setting.
  • Added support for ASAN symbolizer with --config=clang.
  • Added AbslStringify and hash support to NoDestruct, RefWrap, Required.
  • Added struct OptionalDataOrRef similar to std::optional but can hold std::nullopt, a type T or a reference T&/const T&.
  • Added struct OptionalDataOrConstRef similar to std::optional but can hold std::nullopt, a type T or a const reference const T&.
  • Added struct OptionalRef similar to std::optional but can hold std::nullopt or a reference T&/const T&.
  • Improved Stringify (breaking change):
    • Improved control for Stringify with Json output.
    • Updated StringifyOptions (breaking change).
    • Updated StringifyWithFieldNames (breaking change).
    • Moved StringifyOptions factories to Stringify so they can be constexpr even in C++20.
    • Modified MboTypesStringifyOptions (breaking change) to be more flexible - but users must deal with the change.
    • Added ability to detect bad MboTypesStringifyOptions signatures.
    • Added StringifyFieldOptions which holds outer and inner StringifyOptions.
    • Added Stringify::AsJsonPretty() and StringifyOptions::AsJsonPretty().
    • Added API extension point functoin MboTypesStringifyValueAccess which allows to replace a struct with a single value in Stringify processing.
    • Added Stringify support for empty types and types that match IsStringKeyedContainer.
    • Fixed Stringify null* representations to stream as 'null' as opposed to 0.
    • Added ability to sort string keyed containers.
    • Added function SetStringifyOstreamOutputMode which sets global Stringify stream options by mode.
    • Added function SetStringifyOstreamOptions which sets global Stringify stream options.
    • Changed Stringify::ToString and Stringify::Stream to not depend on any mutable member of Stringify.
  • Improved traits:
    • Added concept ConstructibleFrom implements a variant of std::constructible_from that works around its limitations to deal with array args.
    • Added concept IsEmptyType determines whether a type is empty (calls std::is_empty_v).
    • Fixed concept IsAggregate (breaking change).
    • Added concept IsStringKeyedContainer which determines whether a type is a container whose elements are pairs and whose keys are convertible to a std::string_view.
    • Added concept IsReferenceWrapper determines whether a type is a std::reference_wrapper.
    • Added concept IsSameAsAnyOf which determines whether a type is the same as one of a list of types. Similar to IsSameAsAnyOfRaw but using exact types.
    • Added template struct TypedView a wrapper for STL views that provides type definitions, most importantly value_type. That allows such views to be used with GoogleTest container matchers.
    • Added concept IsOptionalDataOrRef which determines whether a type is a OptionalDataOrRef.
    • Added concept IsOptionalRef which determines whether a type is a OptionalRef.
    • Added function CompareArithmetic which compares two values that are scalar-numbers (including foat/double, excluding pointers and references).
    • Added function CompareIntegral which compares two values that are integral-numbers (no float/double, no pointers, no references).
    • Added function CompareScalar which compares two values that are scalar-numbers (including float/double and pointers, excluding references).
    • Added concept IsArithmetic uses std::is_arithmetic_v<T>.
    • Added concept IsIntegral uses std::integral<T>.
    • Added concept IsScalar uses std::is_scalar_v<T>.
    • Added concept IsFloatingPoint determines whether a type is a floating point type (uses std::floating_point).
    • Added concept ThreeWayComparableTo which is similar to std::three_way_comparable_with but we only verify that L <=> R can be interpreted as Cat in the presented argument order.
  • Added Demangle to log de-mangled typeid names.
  • Added struct Overloaded which implements an Overload handler for std::visit(std::variant<...>) and std::variant::visit (technically moved).
  • Added function CompareFloat which can compare two float, double or long double values returning std::strong_ordering.
  • Added function WeakToStrong which converts a std::weak_ordering to a std::strong_ordering.
  • Fixed some IWYU pragmas.
  • Fixed some template requirements.
  • Fixed bug in mbo::strings::ParseString with access past end of string_view for illegal hex and oct escape sequences (introduced in 0.9.0).
  • Updated various dependencies.
  • Renamed old dependency naming styles to new (matching bzlmod and other deps' needs) styles where possible.
  • Removed WORKSPACE support.

For Bazel MODULES.bazel

bazel_dep(name = "helly25_mbo", version = "0.10.0")

Using the provided LLVM

Copy llvm.MODULE.bazel to your repository's root directory and add the following line to your MODULES.bazel file or paste the whole contents into it.

include("//:llvm.MODULE.bazel")

For Bazel WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_helly25_mbo",
  url = "https://github.com/helly25/mbo/releases/download/0.10.0/mbo-0.10.0.tar.gz",
  sha256 = "52d2cfe222244092688b06793d44dec4f8c551b5589f730bb251bc18b8c06b47",
  strip_prefix = "mbo-0.10.0",
)

Initializing the required modules

The project depends on some additional external repositories that can be added
manually of by calling the support functions in the user' WORKSPACE file:

load("@com_helly25_mbo//bzl/workspace:load_modules.bzl", "helly25_mbo_load_modules")

helly25_mbo_load_modules()

load("@com_helly25_mbo//bzl/workspace:init_modules.bzl", "helly25_mbo_init_modules")

helly25_mbo_init_modules()

Initializing optional extra modules

The project further has some re-usable external components:

load("@com_helly25_mbo//bzl/workspace:load_extras.bzl", "helly25_mbo_load_extras")

helly25_mbo_load_extras()  # Adds Hedron + LLVM

load("@com_helly25_mbo//bzl/workspace:init_extras.bzl", "helly25_mbo_init_extras")

helly25_mbo_init_extras()  # Init Hedron + LLVM

load("@com_helly25_mbo//bzl/workspace:init_extras_llvm.bzl", "helly25_mbo_init_extras_llvm")

helly25_mbo_init_extras_llvm()  # Init LLVM/Part 2

What's Changed

Full Changelog: 0.9.0...0.10.0

0.9.0

04 Jun 07:11
1c50ead

Choose a tag to compare

Version 0.9.0

Changelog

  • Added gmomck-matcher mbo::testing::EqualsText which compares text using line by line unified text diff.
  • Added gmock-matcher-modifier mbo::testing::WithDropIndent which modifies EqualsText so that mbo::strings::DropIndent will be applied to the expected text.

For Bazel MODULES.bazel

bazel_dep(name = "helly25_mbo", version = "0.9.0")

Using the provided LLVM

Copy llvm.MODULE.bazel to your repository's root directory and add the following line to your MODULES.bazel file or paste the whole contents into it.

include("//:llvm.MODULE.bazel")

For Bazel WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_helly25_mbo",
  url = "https://github.com/helly25/mbo/releases/download/0.9.0/mbo-0.9.0.tar.gz",
  sha256 = "3c856c7f457cec9a59f89c48ff6f26966d6f4ef97a16cf7a96f4e612add6b72e",
  strip_prefix = "mbo-0.9.0",
)

Initializing the required modules

The project depends on some additional external repositories that can be added
manually of by calling the support functions in the user' WORKSPACE file:

load("@com_helly25_mbo//bzl/workspace:load_modules.bzl", "helly25_mbo_load_modules")

helly25_mbo_load_modules()

load("@com_helly25_mbo//bzl/workspace:init_modules.bzl", "helly25_mbo_init_modules")

helly25_mbo_init_modules()

Initializing optional extra modules

The project further has some re-usable external components:

load("@com_helly25_mbo//bzl/workspace:load_extras.bzl", "helly25_mbo_load_extras")

helly25_mbo_load_extras()  # Adds Hedron + LLVM

load("@com_helly25_mbo//bzl/workspace:init_extras.bzl", "helly25_mbo_init_extras")

helly25_mbo_init_extras()  # Init Hedron + LLVM

load("@com_helly25_mbo//bzl/workspace:init_extras_llvm.bzl", "helly25_mbo_init_extras_llvm")

helly25_mbo_init_extras_llvm()  # Init LLVM/Part 2

What's Changed

Full Changelog: 0.8.0...0.9.0

0.8.0

05 May 17:23
b5eecc5

Choose a tag to compare

Version 0.8.0

Changelog

  • Renamed diff tooling options ignore_space_change to `ignore_trailing_space.
  • Renamed lhs_regex_replace and rhs_regex_replace to regex_replace_lhs and regex_replace_rhs respectively.
  • Added regex_replace_lhs and regex_replace_rhs to bzl rules //mbo/diff:diff_test and //mbo/diff/tests:diff_test_test.
  • Renamed mbo::diff::UnifiedDiff to mbo::diff::Diff.
  • Implemented diff algorithm kDirect which performs a direct side by side comparison.
  • Renamed //mbo/diff/unified_diff(_main).cc/h to //mbo/diff/diff(_main).cc/h.
  • Renamed //mbo/diff:unified_diff to //mbo/diff.
  • Renamed unified to context for flags and attributes.
  • Reorganized files and rules in directory mbo/diff.

For Bazel MODULES.bazel

bazel_dep(name = "helly25_mbo", version = "0.8.0")

Using the provided LLVM

Copy llvm.MODULE.bazel to your repository's root directory and add the following line to your MODULES.bazel file or paste the whole contents into it.

include("//:llvm.MODULE.bazel")

For Bazel WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_helly25_mbo",
  url = "https://github.com/helly25/mbo/releases/download/0.8.0/mbo-0.8.0.tar.gz",
  sha256 = "d7eb28285e16ca6e5bea9261bad7064b12c457991fbb70f9fd65444649133dae",
  strip_prefix = "mbo-0.8.0",
)

Initializing the required modules

The project depends on some additional external repositories that can be added
manually of by calling the support functions in the user' WORKSPACE file:

load("@com_helly25_mbo//bzl/workspace:load_modules.bzl", "helly25_mbo_load_modules")

helly25_mbo_load_modules()

load("@com_helly25_mbo//bzl/workspace:init_modules.bzl", "helly25_mbo_init_modules")

helly25_mbo_init_modules()

Initializing optional extra modules

The project further has some re-usable external components:

load("@com_helly25_mbo//bzl/workspace:load_extras.bzl", "helly25_mbo_load_extras")

helly25_mbo_load_extras()  # Adds Hedron + LLVM

load("@com_helly25_mbo//bzl/workspace:init_extras.bzl", "helly25_mbo_init_extras")

helly25_mbo_init_extras()  # Init Hedron + LLVM

load("@com_helly25_mbo//bzl/workspace:init_extras_llvm.bzl", "helly25_mbo_init_extras_llvm")

helly25_mbo_init_extras_llvm()  # Init LLVM/Part 2

What's Changed

Full Changelog: 0.7.0...0.8.0

0.7.0

02 May 16:53
e9a6652

Choose a tag to compare

Version 0.7.0

Changelog

  • Added caching for unified mbo::diff::UnifiedDiff algorithm.
  • Added --lhs_regex_replace and --rhs_regex_replace flags to //mbo/diff:unified_diff.
  • Dropped all using std::size_t declarations.

For Bazel MODULES.bazel

bazel_dep(name = "helly25_mbo", version = "0.7.0")

Using the provided LLVM

Copy llvm.MODULE.bazel to your repository's root directory and add the following line to your MODULES.bazel file or paste the whole contents into it.

include("//:llvm.MODULE.bazel")

For Bazel WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_helly25_mbo",
  url = "https://github.com/helly25/mbo/releases/download/0.7.0/mbo-0.7.0.tar.gz",
  sha256 = "ab19eff848929f97b3a57a04a7121ba914bd49ee4f4142a11a9b6b43abc46fa7",
  strip_prefix = "mbo-0.7.0",
)

Initializing the required modules

The project depends on some additional external repositories that can be added
manually of by calling the support functions in the user' WORKSPACE file:

load("@com_helly25_mbo//bzl/workspace:load_modules.bzl", "helly25_mbo_load_modules")

helly25_mbo_load_modules()

load("@com_helly25_mbo//bzl/workspace:init_modules.bzl", "helly25_mbo_init_modules")

helly25_mbo_init_modules()

Initializing optional extra modules

The project further has some re-usable external components:

load("@com_helly25_mbo//bzl/workspace:load_extras.bzl", "helly25_mbo_load_extras")

helly25_mbo_load_extras()  # Adds Hedron + LLVM

load("@com_helly25_mbo//bzl/workspace:init_extras.bzl", "helly25_mbo_init_extras")

helly25_mbo_init_extras()  # Init Hedron + LLVM

load("@com_helly25_mbo//bzl/workspace:init_extras_llvm.bzl", "helly25_mbo_init_extras_llvm")

helly25_mbo_init_extras_llvm()  # Init LLVM/Part 2

What's Changed

Full Changelog: 0.6.0...0.7.0

0.6.0

29 Mar 01:34
f276ae7

Choose a tag to compare

Version 0.6.0

Changelog

  • Moved bashtest out into @com_helly25_bashtest and used it from there.
  • Added dependency on @com_helly25_bashtest.
  • Dropped all remaining bashtest components.
  • Added concept ConstructibleInto determined whether one type can be constructed from another. Similar to std::convertible_to but with the argument order of std::constructible_from.

For Bazel MODULES.bazel

bazel_dep(name = "helly25_mbo", version = "0.6.0")

Using the provided LLVM

Copy llvm.MODULE.bazel to your repository's root directory and add the following line to your MODULES.bazel file or paste the whole contents into it.

include("//:llvm.MODULE.bazel")

For Bazel WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_helly25_mbo",
  url = "https://github.com/helly25/mbo/releases/download/0.6.0/mbo-0.6.0.tar.gz",
  sha256 = "44ed70cb5094ae6aeba4f80c6bb19ec72140ed9df491e64bf837e428867b35bb",
  strip_prefix = "mbo-0.6.0",
)

Initializing the required modules

The project depends on some additional external repositories that can be added
manually of by calling the support functions in the user' WORKSPACE file:

load("@com_helly25_mbo//bzl/workspace:load_modules.bzl", "helly25_mbo_load_modules")

helly25_mbo_load_modules()

load("@com_helly25_mbo//bzl/workspace:init_modules.bzl", "helly25_mbo_init_modules")

helly25_mbo_init_modules()

Initializing optional extra modules

The project further has some re-usable external components:

load("@com_helly25_mbo//bzl/workspace:load_extras.bzl", "helly25_mbo_load_extras")

helly25_mbo_load_extras()  # Adds Hedron + LLVM

load("@com_helly25_mbo//bzl/workspace:init_extras.bzl", "helly25_mbo_init_extras")

helly25_mbo_init_extras()  # Init Hedron + LLVM

load("@com_helly25_mbo//bzl/workspace:init_extras_llvm.bzl", "helly25_mbo_init_extras_llvm")

helly25_mbo_init_extras_llvm()  # Init LLVM/Part 2

What's Changed

Full Changelog: 0.5.0...0.6.0

0.5.0

23 Mar 18:53
9fe70bb

Choose a tag to compare

Version 0.5.0

Changelog

  • Added CI config LLVM-20.1.0 for Linux-Arm64 and MacOs-Arm64 platforms.
  • Applied DWYU cleanup.
  • Added field mbo::file::GlobOptions::recursive to select between recursive and flat globbing.
  • Added function mbo::file::GlobSplit that splits a pattern into root and pattern.
  • Improved program //mbo/file:glob to automatically split a single arg pattern.
  • Added API extension point function MboTypesStringifyConvert(I, T, V) which allows to control conversion based on field types via a static call to the owning type, receiving the field index, the object and the field value.
  • Added (experimental) sh_library bashtest which provides a test runner for complex shell tests involving golden files that provides built-in golden update functionality (see (. mbo/testing/bashtest.sh --help)).

For Bazel MODULES.bazel

bazel_dep(name = "helly25_mbo", version = "0.5.0")

Using the provided LLVM

Copy llvm.MODULE.bazel to your repository's root directory and add the following line to your MODULES.bazel file or paste the whole contents into it.

include("//:llvm.MODULE.bazel")

For Bazel WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_helly25_mbo",
  url = "https://github.com/helly25/mbo/releases/download/0.5.0/mbo-0.5.0.tar.gz",
  sha256 = "aca8b6521609a528b7cb00e01066e31b00abb1119e74de53da69903cbf3b7a28",
)

What's Changed

Full Changelog: 0.4.3...0.5.0

0.4.4

10 Mar 21:10
3a9632a

Choose a tag to compare

Version 0.4.4

Changelog

  • Added --config=cpp23 for -std=c++23 to bazelrc and CI testing.
  • Updated code to comply with current clang-tidy warnings.
  • Enabled Bazel layering_check.

For Bazel WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_helly25_mbo",
  url = "https://github.com/helly25/mbo/releases/download/0.4.4/mbo-0.4.4.tar.gz",
  sha256 = "c2981dd351a7af49176eb00cd8cde33f61b152000199d8d1c2173b6d29d79ead",
)

For Bazel MODULES.bazel

bazel_dep(name = "helly25_mbo", version = "0.4.4")

Using the provided LLVM

Copy llvm.MODULE.bazel to your repository's root directory and add the following line to your MODULES.bazel file or paste the whole contents into it.

include("//:llvm.MODULE.bazel")

What's Changed

Full Changelog: 0.4.3...0.4.4

0.4.3

05 Mar 13:12
a3ae64d

Choose a tag to compare

Version 0.4.3

Changelog

  • Address const-ness issues in constexpr functions found by Clang 20.1.0.
  • Drop space in front of string-literal notation found by Clang 20.1.0.

For Bazel WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_helly25_mbo",
  url = "https://github.com/helly25/mbo/releases/download/0.4.3/mbo-0.4.3.tar.gz",
  sha256 = "f073f2a22547a7cc2bd99dbd66b931b1ed0dce42c383c84e1339003517e01b61",
)

For Bazel MODULES.bazel

bazel_dep(name = "helly25_mbo", version = "0.4.3")

Using the provided LLVM

Copy llvm.MODULE.bazel to your repository's root directory and add the following line to your MODULES.bazel file or paste the whole contents into it.

include("//:llvm.MODULE.bazel")

What's Changed

  • Cache naming: Both LLVM and GCC versions need to be part of the cache name. by @helly25 in #106
  • Add BCR specific testing to CI. by @helly25 in #107
  • Support Clang 20.1.0 by @helly25 in #108

Full Changelog: 0.4.2...0.4.3

0.4.2

04 Mar 18:11
49a9ac4

Choose a tag to compare

Version 0.4.2

Changelog

  • Tweaked automated release tooling.
  • Use matrix for merge testing that verifies various GCC and Clang setups.
  • Fixed mbo::types::ContainerProxy for GCC opt builds (issue with aliasing interpretation).
  • Added mbo::strings::StripPrefix and mbo::strings::StripSuffix for temp std::string&&.

For Bazel WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_helly25_mbo",
  url = "https://github.com/helly25/mbo/releases/download/0.4.2/mbo-0.4.2.tar.gz",
  sha256 = "aebb24c31a6478ef728c31cc3601c2050078ac59a7abb432ef0a049a9efcf5ee",
)

For Bazel MODULES.bazel

bazel_dep(name = "helly25_mbo", version = "0.4.2")

Using the provided LLVM

Copy llvm.MODULE.bazel to your repository's root directory and add the following line to your MODULES.bazel file or paste the whole contents into it.

include("//:llvm.MODULE.bazel")

What's Changed

Full Changelog: 0.4.0...0.4.2

0.4.1

01 Mar 22:42
33f68b8

Choose a tag to compare

Version 0.4.1

Changelog

  • Added load statements for all cc_binary, cc_library, cc_test functions in all bazel files.
  • Added mbo::strings::ConsumePrefix and mbo::strings::ConsumeSuffix.

For Bazel WORKSPACE

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
  name = "com_helly25_mbo",
  url = "https://github.com/helly25/mbo/releases/download/0.4.1/mbo-0.4.1.tar.gz",
  sha256 = "d0be78bdbd11cbfe3dfe199bb30cc42ecd5e0c51aa6f9219025dc49231065573",
)

For Bazel MODULES.bazel

bazel_dep(name = "helly25_mbo", version = "0.4.1")

Using the provided LLVM

Copy llvm.MODULE.bazel to your repository's root directory and add the following line to your MODULES.bazel file or paste the whole contents into it.

include("//:llvm.MODULE.bazel")

What's Changed

Full Changelog: 0.4.0...0.4.1