commit: 76367ed3e2d0c4915db59bfa604f67c60d740001
Author: Miroslav Šulc <fordfrog <AT> gentoo <DOT> org>
AuthorDate: Mon Nov 4 19:27:59 2024 +0000
Commit: Miroslav Šulc <fordfrog <AT> gentoo <DOT> org>
CommitDate: Mon Nov 4 19:28:10 2024 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=76367ed3
media-sound/ardour: applied patch to 8.10-r2 to prevent crash on startup when
compiled with clang + dropped old c++11 flag
Signed-off-by: Miroslav Šulc <fordfrog <AT> gentoo.org>
...ardour-8.10-r1.ebuild => ardour-8.10-r2.ebuild} | 8 +-
.../files/ardour-9.0.0-fix-clang-crash.patch | 123 +++++++++++++++++++++
2 files changed, 124 insertions(+), 7 deletions(-)
diff --git a/media-sound/ardour/ardour-8.10-r1.ebuild
b/media-sound/ardour/ardour-8.10-r2.ebuild
similarity index 97%
rename from media-sound/ardour/ardour-8.10-r1.ebuild
rename to media-sound/ardour/ardour-8.10-r2.ebuild
index 0f3b1f15c091..bb6ece851b94 100644
--- a/media-sound/ardour/ardour-8.10-r1.ebuild
+++ b/media-sound/ardour/ardour-8.10-r2.ebuild
@@ -71,6 +71,7 @@ DEPEND="${RDEPEND}
PATCHES=(
"${FILESDIR}/${PN}-6.8-metadata.patch"
+ "${FILESDIR}/${PN}-9.0.0-fix-clang-crash.patch"
)
pkg_pretend() {
@@ -78,13 +79,6 @@ pkg_pretend() {
ewarn "Linking with gold linker might produce broken
executable, see bug #733972"
}
-pkg_setup() {
- if has_version \>=dev-libs/libsigc++-2.6 ; then
- append-cxxflags -std=c++11
- fi
- python-any-r1_pkg_setup
-}
-
src_prepare() {
default
diff --git a/media-sound/ardour/files/ardour-9.0.0-fix-clang-crash.patch
b/media-sound/ardour/files/ardour-9.0.0-fix-clang-crash.patch
new file mode 100644
index 000000000000..6162782d91f5
--- /dev/null
+++ b/media-sound/ardour/files/ardour-9.0.0-fix-clang-crash.patch
@@ -0,0 +1,123 @@
+From f17a6562174ccf658eb35ba7a425d3ac340c1607 Mon Sep 17 00:00:00 2001
+From: Robin Gareus <[email protected]>
+Date: Mon, 4 Nov 2024 18:46:21 +0100
+Subject: [PATCH] use modern C++ for snprintf (#9841)
+
+This replaces vector<char>::operator[] (which now
+a constexpr since C++20). We could use &vector::data(),
+but a unique_ptr seems more appropriate for the case at hand.
+--- a/libs/ardour/broadcast_info.cc
++++ b/libs/ardour/broadcast_info.cc
+@@ -39,15 +39,15 @@ namespace ARDOUR
+ static void
+ snprintf_bounded_null_filled (char* target, size_t target_size, char const *
fmt, ...)
+ {
+- std::vector<char> buf(target_size+1);
++ std::unique_ptr<char[]> buf (new char [target_size + 1]);
+ va_list ap;
+
+ va_start (ap, fmt);
+- vsnprintf (&buf[0], target_size+1, fmt, ap);
++ vsnprintf (buf.get (), target_size+1, fmt, ap);
+ va_end (ap);
+
+ memset (target, 0, target_size);
+- memcpy (target, &buf[0], target_size);
++ memcpy (target, buf.get (), target_size);
+
+ }
+
+--- a/libs/ardour/export_graph_builder.cc
++++ b/libs/ardour/export_graph_builder.cc
+@@ -796,9 +796,9 @@ ExportGraphBuilder::Intermediate::Intermediate
(ExportGraphBuilder & parent, Fil
+ int format = ExportFormatBase::F_RAW | ExportFormatBase::SF_Float;
+
+ if (parent._realtime) {
+- tmp_file.reset (new TmpFileRt<float> (&tmpfile_path_buf[0],
format, channels, config.format->sample_rate()));
++ tmp_file.reset (new TmpFileRt<float> (tmpfile_path_buf.data (),
format, channels, config.format->sample_rate()));
+ } else {
+- tmp_file.reset (new TmpFileSync<float> (&tmpfile_path_buf[0],
format, channels, config.format->sample_rate()));
++ tmp_file.reset (new TmpFileSync<float> (tmpfile_path_buf.data
(), format, channels, config.format->sample_rate()));
+ }
+
+ tmp_file->FileWritten.connect_same_thread (post_processing_connection,
+--- a/libs/ardour/io.cc
++++ b/libs/ardour/io.cc
+@@ -1338,7 +1338,6 @@ IO::bundle_changed (Bundle::Change /*c*/)
+ string
+ IO::build_legal_port_name (std::shared_ptr<PortSet const> ports, DataType
type)
+ {
+- const int name_size = AudioEngine::instance()->port_name_size();
+ int limit;
+ string suffix;
+
+@@ -1372,21 +1371,24 @@ IO::build_legal_port_name (std::shared_ptr<PortSet
const> ports, DataType type)
+
+ // allow up to 4 digits for the output port number, plus the slash,
suffix and extra space
+
++ uint32_t name_size = AudioEngine::instance()->port_name_size();
+ limit = name_size - AudioEngine::instance()->my_name().length() -
(suffix.length() + 5);
+
+- std::vector<char> buf1(name_size+1);
+- std::vector<char> buf2(name_size+1);
++ ++name_size; // allow for \0
++
++ std::unique_ptr<char[]> buf1 (new char[name_size]);
++ std::unique_ptr<char[]> buf2 (new char[name_size]);
+
+ /* colons are illegal in port names, so fix that */
+
+ string nom = legalize_io_name (_name.val());
+
+- snprintf (&buf1[0], name_size+1, ("%.*s/%s"), limit, nom.c_str(),
suffix.c_str());
++ std::snprintf (buf1.get(), name_size, ("%.*s/%s"), limit, nom.c_str(),
suffix.c_str());
+
+- int port_number = find_port_hole (ports, &buf1[0]);
+- snprintf (&buf2[0], name_size+1, "%s %d", &buf1[0], port_number);
++ int port_number = find_port_hole (ports, buf1.get ());
++ std::snprintf (buf2.get(), name_size, "%s %d", buf1.get (),
port_number);
+
+- return string (&buf2[0]);
++ return string (buf2.get ());
+ }
+
+ int32_t
+@@ -1400,17 +1402,17 @@ IO::find_port_hole (std::shared_ptr<PortSet const>
ports, const char* base)
+ return 1;
+ }
+
+- /* we only allow up to 4 characters for the port number
+- */
++ uint32_t const name_size = AudioEngine::instance()->port_name_size() +
1;
+
++ /* we only allow up to 4 characters for the port number */
+ for (n = 1; n < 9999; ++n) {
+- std::vector<char> buf
(AudioEngine::instance()->port_name_size());
+ PortSet::const_iterator i = ports->begin ();
+
+- snprintf (&buf[0], buf.size()+1, _("%s %u"), base, n);
++ std::unique_ptr<char[]> buf (new char[name_size]);
++ std::snprintf (buf.get (), name_size, "%s %u", base, n);
+
+ for ( ; i != ports->end (); ++i) {
+- if (string (i->name()) == string (&buf[0])) {
++ if (string (i->name()) == string (buf.get ())) {
+ break;
+ }
+ }
+@@ -1526,13 +1528,13 @@ IO::bundle_channel_name (uint32_t c, uint32_t n,
DataType t) const
+ case 2:
+ return c == 0 ? _("L") : _("R");
+ default:
+- snprintf (buf, sizeof(buf), "%d", (c + 1));
++ std::snprintf (buf, sizeof(buf), "%d", (c + 1));
+ return buf;
+ }
+
+ } else {
+
+- snprintf (buf, sizeof(buf), "%d", (c + 1));
++ std::snprintf (buf, sizeof(buf), "%d", (c + 1));
+ return buf;
+
+ }