From aab37bd2584bec70b0efd5d4e667310f8e92ffcd Mon Sep 17 00:00:00 2001 From: whispers Date: Thu, 11 Jun 2026 23:00:26 -0400 Subject: [PATCH] sourceHighlight: patch to fix build with gcc 16 The `ranges` name in the test here conflicts with the `namespace std::ranges { }` from GCC 16, causing this test to fail to build with "error: reference to 'ranges' is ambiguous". To avoid this, we simply rename the variable. --- ...gcc16-disambiguate-regex-ranges-test.patch | 57 +++++++++++++++++++ pkgs/by-name/so/sourceHighlight/package.nix | 5 ++ 2 files changed, 62 insertions(+) create mode 100644 pkgs/by-name/so/sourceHighlight/gcc16-disambiguate-regex-ranges-test.patch diff --git a/pkgs/by-name/so/sourceHighlight/gcc16-disambiguate-regex-ranges-test.patch b/pkgs/by-name/so/sourceHighlight/gcc16-disambiguate-regex-ranges-test.patch new file mode 100644 index 000000000000..2008304ca948 --- /dev/null +++ b/pkgs/by-name/so/sourceHighlight/gcc16-disambiguate-regex-ranges-test.patch @@ -0,0 +1,57 @@ +diff --git a/lib/tests/test_regexranges_main.cpp b/lib/tests/test_regexranges_main.cpp +index 567d79230c..e28bba47e5 100644 +--- a/lib/tests/test_regexranges_main.cpp ++++ b/lib/tests/test_regexranges_main.cpp +@@ -12,26 +12,26 @@ + using namespace std; + using namespace srchilite; + +-RegexRanges ranges; ++RegexRanges regexRanges; + + void check_range_regex(const string &s, bool expectedTrue = true) { + cout << "checking " << s << endl; + if (expectedTrue) +- assertTrue(ranges.addRegexRange(s)); ++ assertTrue(regexRanges.addRegexRange(s)); + else +- assertFalse(ranges.addRegexRange(s)); ++ assertFalse(regexRanges.addRegexRange(s)); + } + + void check_match(const string &line, const string &expected = "") { + cout << "searching inside " << line; + const boost::regex *matched = 0; + if (expected != "") { +- matched = ranges.matches(line); ++ matched = regexRanges.matches(line); + assertTrue(matched != 0); + assertEquals(expected, matched->str()); + cout << " found " << *matched << endl; + } else { +- assertTrue(ranges.matches(line) == 0); ++ assertTrue(regexRanges.matches(line) == 0); + cout << " not found" << endl; + } + } +@@ -39,9 +39,9 @@ + void check_in_range(const string &s, bool expectedTrue = true) { + cout << "checking " << s << "... "; + if (expectedTrue) { +- assertTrue(ranges.isInRange(s)); ++ assertTrue(regexRanges.isInRange(s)); + } else { +- assertFalse(ranges.isInRange(s)); ++ assertFalse(regexRanges.isInRange(s)); + } + cout << expectedTrue << endl; + } +@@ -57,7 +57,7 @@ + check_range_regex("{notclosed"); + + // reset regular expressions +- ranges.clear(); ++ regexRanges.clear(); + + check_range_regex("/// foo"); + check_range_regex("/// bar"); diff --git a/pkgs/by-name/so/sourceHighlight/package.nix b/pkgs/by-name/so/sourceHighlight/package.nix index 07eb5ac9f8d5..4f8099afee7f 100644 --- a/pkgs/by-name/so/sourceHighlight/package.nix +++ b/pkgs/by-name/so/sourceHighlight/package.nix @@ -37,6 +37,11 @@ stdenv.mkDerivation rec { url = "https://git.savannah.gnu.org/cgit/src-highlite.git/patch/?id=ab9fe5cb9b85c5afab94f2a7f4b6d7d473c14ee9"; hash = "sha256-wmSLgLnLuFE+IC6AjxzZp/HEnaOCS1VfY2cac0T7Y+w="; }) + + # GCC 16 detects ambiguity in the `ranges` name in a test (conflicts with + # `namespace std::range { }` from GCC), so we rename the variable to + # disambiguate. + ./gcc16-disambiguate-regex-ranges-test.patch ] ++ lib.optionals stdenv.cc.isClang [ # Adds compatibility with C++17 by removing the `register` storage class specifier.