git: de28fc5f84fd - main - x11-toolkits/aquamarine: unbreak build with libc++ 16

From: Jan Beich <jbeich_at_FreeBSD.org>
Date: Sat, 20 Jul 2024 03:21:06 UTC
The branch main has been updated by jbeich:

URL: https://cgit.FreeBSD.org/ports/commit/?id=de28fc5f84fd79315a6fa7da33258ef98cf854e0

commit de28fc5f84fd79315a6fa7da33258ef98cf854e0
Author:     Jan Beich <jbeich@FreeBSD.org>
AuthorDate: 2024-07-20 03:18:53 +0000
Commit:     Jan Beich <jbeich@FreeBSD.org>
CommitDate: 2024-07-20 03:19:51 +0000

    x11-toolkits/aquamarine: unbreak build with libc++ 16
    
    In file included from src/allocator/GBM.cpp:1:
    In file included from ./include/aquamarine/allocator/GBM.hpp:3:
    In file included from ./include/aquamarine/allocator/Allocator.hpp:4:
    In file included from ./include/aquamarine/allocator/../buffer/Buffer.hpp:6:
    In file included from /usr/local/include/hyprutils/math/Region.hpp:5:
    /usr/local/include/hyprutils/math/Vector2D.hpp:141:5: error: no member named 'format_error' in namespace 'std'
        AQ_FORMAT_PARSE(AQ_FORMAT_FLAG('j', formatJson) //
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /usr/local/include/hyprutils/math/Vector2D.hpp:110:57: note: expanded from macro 'AQ_FORMAT_PARSE'
                switch (*it) { specs__ default : throw std::format_error("invalid format specification"); }                                                                            \
                                                       ~~~~~^
    /usr/local/include/hyprutils/math/Vector2D.hpp:148:68: error: no member named 'format' in namespace 'std'
            std::string formatString = precision.empty() ? "{}" : std::format("{{:.{}f}}", precision);
                                                                  ~~~~~^
    /usr/local/include/hyprutils/math/Vector2D.hpp:151:33: error: no member named 'format' in namespace 'std'
                formatString = std::format("[{0}, {0}]", formatString);
                               ~~~~~^
    /usr/local/include/hyprutils/math/Vector2D.hpp:153:33: error: no member named 'format' in namespace 'std'
                formatString = std::format("{0}x{0}", formatString);
                               ~~~~~^
    /usr/local/include/hyprutils/math/Vector2D.hpp:155:33: error: no member named 'format' in namespace 'std'
                formatString = std::format("[Vector2D: x: {0}, y: {0}]", formatString);
                               ~~~~~^
    /usr/local/include/hyprutils/math/Vector2D.hpp:157:31: error: no member named 'vformat' in namespace 'std'
                string buf = std::vformat(formatString, std::make_format_args(vec.x, vec.y));
                             ~~~~~^
    /usr/local/include/hyprutils/math/Vector2D.hpp:157:58: error: no member named 'make_format_args' in namespace 'std'
                string buf = std::vformat(formatString, std::make_format_args(vec.x, vec.y));
                                                        ~~~~~^
    /usr/local/include/hyprutils/math/Vector2D.hpp:158:25: error: no member named 'format_to' in namespace 'std'
                return std::format_to(ctx.out(), "{}", buf);
                       ~~~~~^
    /usr/local/include/hyprutils/math/Vector2D.hpp:159:23: error: no type named 'format_error' in namespace 'std'; did you mean 'domain_error'?
            } catch (std::format_error& e) { return std::format_to(ctx.out(), "[{}, {}]", vec.x, vec.y); }
                     ~~~~~^
    /usr/include/c++/v1/stdexcept:123:29: note: 'domain_error' declared here
    class _LIBCPP_EXCEPTION_ABI domain_error
                                ^
    In file included from src/allocator/GBM.cpp:1:
    In file included from ./include/aquamarine/allocator/GBM.hpp:3:
    In file included from ./include/aquamarine/allocator/Allocator.hpp:4:
    In file included from ./include/aquamarine/allocator/../buffer/Buffer.hpp:6:
    In file included from /usr/local/include/hyprutils/math/Region.hpp:5:
    /usr/local/include/hyprutils/math/Vector2D.hpp:159:54: error: no member named 'format_to' in namespace 'std'
            } catch (std::format_error& e) { return std::format_to(ctx.out(), "[{}, {}]", vec.x, vec.y); }
                                                    ~~~~~^
    src/allocator/GBM.cpp:68:40: error: no member named 'format' in namespace 'std'
                                      std::format("GBM: Allocating a buffer: size {}, format {}, cursor: {}, multigpu: {}", attrs.size, fourccToName(attrs.format), CURSOR, MULTIGPU)));
                                      ~~~~~^
    ./src/include/Shared.hpp:26:13: note: expanded from macro 'TRACE'
                expr;                                                                                                                                                                  \
                ^~~~
    src/allocator/GBM.cpp:77:56: error: no member named 'format' in namespace 'std'
                allocator->backend->log(AQ_LOG_DEBUG, std::format("GBM: Automatically selected format {} for new GBM buffer", fourccToName(attrs.format)));
                                                      ~~~~~^
    src/allocator/GBM.cpp:118:58: error: no member named 'format' in namespace 'std'
            TRACE(allocator->backend->log(AQ_LOG_TRACE, std::format("GBM: Using modifier-based allocation, modifiers: {}", explicitModifiers.size())));
                                                        ~~~~~^
    ./src/include/Shared.hpp:26:13: note: expanded from macro 'TRACE'
                expr;                                                                                                                                                                  \
                ^~~~
    src/allocator/GBM.cpp:120:62: error: no member named 'format' in namespace 'std'
                TRACE(allocator->backend->log(AQ_LOG_TRACE, std::format("GBM: | mod 0x{:x}", mod)));
                                                            ~~~~~^
    ./src/include/Shared.hpp:26:13: note: expanded from macro 'TRACE'
                expr;                                                                                                                                                                  \
                ^~~~
    src/allocator/GBM.cpp:144:56: error: no member named 'format' in namespace 'std'
                allocator->backend->log(AQ_LOG_ERROR, std::format("GBM: Failed to query fd for plane {}", i));
                                                      ~~~~~^
    src/allocator/GBM.cpp:158:34: error: no member named 'format' in namespace 'std'
                                std::format("GBM: Allocated a new buffer with size {} and format {} with modifier {} aka {}", attrs.size, fourccToName(attrs.format), attrs.modifier,
                                ~~~~~^
    src/allocator/GBM.cpp:236:38: error: no member named 'format' in namespace 'std'
        backend_->log(AQ_LOG_DEBUG, std::format("Created a GBM allocator with drm fd {}", drmfd_));
                                    ~~~~~^
    src/allocator/GBM.cpp:246:41: error: no member named 'format' in namespace 'std'
            backend->log(AQ_LOG_ERROR, std::format("Couldn't open a GBM device at fd {}", fd_));
                                       ~~~~~^
    src/allocator/GBM.cpp:258:41: error: no member named 'format' in namespace 'std'
            backend->log(AQ_LOG_ERROR, std::format("Couldn't allocate a gbm buffer with invalid size {}", params.size));
                                       ~~~~~^
    fatal error: too many errors emitted, stopping now [-ferror-limit=]
    
    Reported by:    pkg-fallout
---
 x11-toolkits/aquamarine/Makefile | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/x11-toolkits/aquamarine/Makefile b/x11-toolkits/aquamarine/Makefile
index d674fc287217..0389a8ca9abb 100644
--- a/x11-toolkits/aquamarine/Makefile
+++ b/x11-toolkits/aquamarine/Makefile
@@ -30,6 +30,11 @@ USE_XORG=	pixman
 GH_ACCOUNT=	hyprwm
 PLIST_SUB=	VERSION=${DISTVERSION:C/-.*//}
 
+# XXX Drop after FreeBSD 14.0 EOL around 2024-10-01
+.if exists(/usr/lib/libc++.so) && !exists(/usr/include/c++/v1/__format/write_escaped.h)
+CXXFLAGS+=	-fexperimental-library
+.endif
+
 # XXX Drop after FreeBSD 13.4 EOL around 2026-01-31
 # https://cgit.freebsd.org/src/commit/?id=af93fea71038
 .if !exists(/usr/include/sys/timerfd.h)