commit: 49e5f10191541079b8fe7201e478b9dcd6c1c400 Author: Nicolas PARLANT <nicolas.parlant <AT> parhuet <DOT> fr> AuthorDate: Thu Dec 4 05:22:53 2025 +0000 Commit: Miroslav Šulc <fordfrog <AT> gentoo <DOT> org> CommitDate: Sun Dec 14 18:47:43 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=49e5f101
media-sound/ardour: update live update deps from wscripts files remove plocale boost is now header only (since 6.0) fix cpp harcoded add test fix linking for few extra binaries like ardour-export fix prefix for configdir set cxx17 to fix building w/ gcc-16 remove check for (old)gold linker move appdata to metainfo instead of a patch because it causes fail otherwise with translation doc does nothing, doxygen must be called cpu_flags reworked : separate avx, avx512f, fma3 rm 3dnow, mmx (just added a cflag) rm altivec, not keyworded and no-fpu-optimization doesn't handle it patches: remove unwanted flags and hopefully clarify optimizations direct call to ffmpeg and ffprobe for transcoding Signed-off-by: Nicolas PARLANT <nicolas.parlant <AT> parhuet.fr> Part-of: https://github.com/gentoo/gentoo/pull/44943 Signed-off-by: Miroslav Šulc <fordfrog <AT> gentoo.org> media-sound/ardour/ardour-9999.ebuild | 194 ++++++++++++-------- .../ardour/files/ardour-8.12-fix_fftranscode.patch | 22 +++ media-sound/ardour/files/ardour-8.12-fix_fpu.patch | 196 +++++++++++++++++++++ 3 files changed, 334 insertions(+), 78 deletions(-) diff --git a/media-sound/ardour/ardour-9999.ebuild b/media-sound/ardour/ardour-9999.ebuild index 33c8a136294f..5a9fa6586de2 100644 --- a/media-sound/ardour/ardour-9999.ebuild +++ b/media-sound/ardour/ardour-9999.ebuild @@ -5,18 +5,23 @@ EAPI=8 PYTHON_COMPAT=( python3_{11..13} ) PYTHON_REQ_USE='threads(+)' -PLOCALES="ca cs de el en_GB es eu fr it ja ko nn pl pt pt_PT ru sv zh" -inherit toolchain-funcs flag-o-matic plocale python-any-r1 waf-utils desktop xdg +inherit desktop edo flag-o-matic optfeature python-any-r1 waf-utils toolchain-funcs xdg DESCRIPTION="Digital Audio Workstation" HOMEPAGE="https://ardour.org/" if [[ ${PV} == *9999* ]]; then - # Main repo disabled for now by upstream + # Main repo not stable #EGIT_REPO_URI="https://git.ardour.org/ardour/ardour.git" EGIT_REPO_URI="https://github.com/Ardour/ardour.git" inherit git-r3 else + # We previously had 8.12 instead of 8.12.0 despite SRC_URI + S + [[ ${PV} != 8.12 ]] && die "Please fix the version to be X.Y.Z instead of X.Y on this next bump!" + # upstream doesn't provide a release tarball in github repo + # see https://github.com/Ardour/ardour/blob/master/README-GITHUB.txt + # official link is available here, but with token/expiration: + # https://community.ardour.org/download?architecture=x86_64&type=source SRC_URI="https://dev.gentoo.org/~fordfrog/distfiles/Ardour-${PV}.0.tar.bz2" S="${WORKDIR}/Ardour-${PV}.0" KEYWORDS="~amd64 ~loong ~x86" @@ -24,101 +29,110 @@ fi LICENSE="GPL-2" SLOT="9" -IUSE="doc jack nls phonehome pulseaudio cpu_flags_ppc_altivec cpu_flags_x86_sse cpu_flags_x86_mmx cpu_flags_x86_3dnow" +IUSE="doc jack phonehome pulseaudio test" +CPU_USE=( + cpu_flags_x86_{avx,avx512f,fma3,sse} +) +IUSE+=" ${CPU_USE[@]}" +RESTRICT="!test? ( test )" RDEPEND=" - dev-cpp/cairomm:0 + app-arch/libarchive:= + dev-cpp/cairomm:0[X] dev-cpp/glibmm:2 dev-cpp/pangomm:1.4 - dev-libs/boost:= dev-libs/glib:2 dev-libs/libsigc++:2 dev-libs/libxml2:2= media-libs/alsa-lib - media-libs/aubio - media-libs/flac:= + media-libs/aubio:= + media-libs/flac + media-libs/fontconfig media-libs/freetype:2 media-libs/liblo media-libs/liblrdf + media-libs/libpng:= media-libs/libsamplerate media-libs/libsndfile - media-libs/libsoundtouch + media-libs/lilv + media-libs/lv2 media-libs/raptor:2 - media-libs/rubberband + media-libs/rubberband:= media-libs/taglib:= media-libs/vamp-plugin-sdk - net-libs/libwebsockets + net-libs/libwebsockets:= net-misc/curl + sys-apps/dbus sys-libs/readline:0= - sci-libs/fftw:3.0[threads] + sci-libs/fftw:3.0=[threads] virtual/libusb:1 - x11-libs/cairo + x11-libs/cairo[X] + x11-libs/libX11 + x11-libs/libXext + x11-libs/libXinerama + x11-libs/libXrandr x11-libs/pango + x11-themes/hicolor-icon-theme jack? ( virtual/jack ) pulseaudio? ( media-libs/libpulse ) - media-libs/lilv - media-libs/sratom - dev-libs/sord - media-libs/lv2" +" # media-libs/suil[X,gtk2] bundled suil is used, maybe probably because of ytk # !bundled-libs? ( media-sound/fluidsynth ) at least libltc is missing to be able to unbundle... - -DEPEND="${RDEPEND} - jack? ( virtual/jack )" -BDEPEND="${PYTHON_DEPS} +DEPEND=" + ${RDEPEND} + dev-libs/boost + dev-libs/sord + media-libs/sratom + x11-libs/libXi + test? ( dev-util/cppunit ) +" +BDEPEND=" + ${PYTHON_DEPS} dev-util/itstool sys-devel/gettext virtual/pkgconfig - doc? ( app-text/doxygen[dot] )" + doc? ( + app-text/doxygen + media-gfx/graphviz + ) +" PATCHES=( - "${FILESDIR}/${PN}-6.8-metadata.patch" + "${FILESDIR}/${PN}-8.12-fix_fpu.patch" + # see bug #966219 + "${FILESDIR}/${PN}-8.12-fix_fftranscode.patch" ) -pkg_pretend() { - [[ $(tc-getLD) == *gold* ]] && (has_version sci-libs/fftw[openmp] || has_version sci-libs/fftw[threads]) && \ - ewarn "Linking with gold linker might produce broken executable, see bug #733972" -} - src_prepare() { default - # delete optimization flags - sed 's/'full-optimization\'\ :\ \\[.*'/'full-optimization\'\ :\ \'\','/' -i "${S}"/wscript || die - - # handle arch - MARCH=$(get-flag march) - OPTFLAGS="" - if use cpu_flags_x86_sse; then - if [[ ${MARCH} == "i686" ]] || [[ ${MARCH} == "i486" ]]; then - elog "You enabled sse but use an march that does not support sse!" - elog "We add -msse to the flags now, but please consider switching your march in make.conf!" - fi - OPTFLAGS="sse" - fi - if use cpu_flags_x86_mmx; then - if [[ ${MARCH} == "i486" ]]; then - elog "You enabled mmx with i486 set as march! You have been warned!" - fi - OPTFLAGS="${OPTFLAGS} mmx" - fi - if use cpu_flags_x86_3dnow; then - OPTFLAGS="${OPTFLAGS} 3dnow" + local optflags=( + $(usev cpu_flags_x86_sse sse) + ) + # these flags imply sse and avx + if use cpu_flags_x86_sse && use cpu_flags_x86_avx; then + optflags+=( + avx + $(usev cpu_flags_x86_avx512f avx512f) + $(usev cpu_flags_x86_fma3 fma) + ) fi - sed 's/flag_line\ =\ o.*/flag_line\ =\ \": '"${OPTFLAGS}"' just some place holders\"/' \ - -i "${S}"/wscript || die - sed 's/cpu\ ==\ .*/cpu\ ==\ "LeaveMarchAsIs":/' -i "${S}"/wscript || die - - # boost and shebang - append-flags "-lboost_system" - python_fix_shebang "${S}"/wscript - python_fix_shebang "${S}"/waf - - # handle locales - my_lcmsg() { - rm -f {gtk2_ardour,gtk2_ardour/appdata,libs/ardour,libs/gtkmm2ext}/po/${1}.po - } - plocale_for_each_disabled_locale my_lcmsg + + # use only flags defined by users + sed 's/flag_line = o.*/flag_line = \": '"${optflags[*]}"'\"/' \ + -i wscript || die + + # shebang + python_fix_shebang wscript + python_fix_shebang waf + + # fix hardcoded cpp, apply `gcc -E` needs patching but will fail w/ clang + tc-export CPP + sed -e "[email protected] = 'cpp'@obj.command = '${CPP/-gcc -E/-cpp}'@" \ + -i gtk2_ardour/wscript || die + + # skip non-generic tests with failures + sed -e "\@'test/fpu_test.cc',@d" -i libs/ardour/wscript || die } src_configure() { @@ -130,22 +144,29 @@ src_configure() { # https://bugs.gentoo.org/917095 filter-lto - local backends="alsa,dummy" - use jack && backends+=",jack" - use pulseaudio && backends+=",pulseaudio" + append-ldflags -Wl,-rpath,"${EPREFIX}/usr/$(get_libdir)/ardour${SLOT}" + local backends=( + alsa + dummy + $(usev jack) + $(usev pulseaudio) + ) + + # VST support is enabled by default given --no-lxvst is not called. + # But please keep in mind the README (obsolete?) made by upstream. + # https://github.com/Ardour/ardour/blob/master/PACKAGER_README tc-export CC CXX local myconf=( - --configdir=/etc + --configdir="${EPREFIX}"/etc + --cxx17 --freedesktop --noconfirm --optimize - --with-backends=${backends} - $({ use cpu_flags_ppc_altivec || use cpu_flags_x86_sse; } && \ - echo '' || echo "--no-fpu-optimization") - $(usex doc "--docs" '') - $(usex nls '' "--no-nls") - $(usex phonehome '' "--no-phone-home") + --with-backends=$(IFS=','; echo "${backends[*]}") + $(usev !cpu_flags_x86_sse --no-fpu-optimization) + $(usev !phonehome --no-phone-home) + $(usev test --test) # not possible right now --use-external-libs # missing dependency: https://github.com/c4dm/qm-dsp ) @@ -155,24 +176,35 @@ src_configure() { src_compile() { waf-utils_src_compile - use nls && waf-utils_src_compile i18n + waf-utils_src_compile i18n + if use doc; then + pushd doc >/dev/null || die + doxygen -u Doxyfile || die + doxygen Doxyfile || die + find . \( -iname '*.map' -o -iname '*.md5' \) -delete || die + popd >/dev/null || die + fi +} + +src_test() { + pushd "${S}"/libs/ardour/ >/dev/null || die + edo ./run-tests.sh + popd >/dev/null || die } src_install() { - local s + use doc && local HTML_DOCS=( doc/html/. ) waf-utils_src_install mv ${PN}.1 ${PN}${SLOT}.1 || die doman ${PN}${SLOT}.1 + local s for s in 16 22 32 48 256 512; do newicon -s ${s} gtk2_ardour/resources/Ardour-icon_${s}px.png ardour${SLOT}.png done - # the build system still installs ardour6.png files so we get rid of those to not conflict with ardour:6 - find "${D}/usr/share/icons/" -name ardour6.png -delete - sed -i \ -e "s/\(^Name=\).*/\1Ardour ${SLOT}/" \ -e 's/;AudioEditing;/;X-AudioEditing;/' \ @@ -182,11 +214,17 @@ src_install() { insinto /usr/share/mime/packages newins build/gtk2_ardour/ardour.xml ardour${SLOT}.xml rm "${D}/usr/share/mime/packages/ardour.xml" || die + + # the appdata directory is deprecated + # no patch because this causes the translation fail + mv "${ED}"/usr/share/{appdata,metainfo} || die } pkg_postinst() { xdg_pkg_postinst + optfeature "exporting audio in mp3" media-video/ffmpeg[lame] + elog "Please do _not_ report problems with the package to ${PN} upstream." elog "If you think you've found a bug, check the upstream binary package" elog "before you report anything to upstream." diff --git a/media-sound/ardour/files/ardour-8.12-fix_fftranscode.patch b/media-sound/ardour/files/ardour-8.12-fix_fftranscode.patch new file mode 100644 index 000000000000..353d1402498e --- /dev/null +++ b/media-sound/ardour/files/ardour-8.12-fix_fftranscode.patch @@ -0,0 +1,22 @@ +see https://bugs.gentoo.org/966219 +direct call of ffmpeg binaries instead of harvid wrapper +--- a/libs/ardour/video_tools_paths.cc ++++ b/libs/ardour/video_tools_paths.cc +@@ -175,7 +175,7 @@ ArdourVideoToolPaths::transcoder_exe (std::string &ffmpeg_exe, std::string &ffpr + _ffprobe_exe = X_(""); + + std::string ff_file_path; +- if (find_file (Searchpath(Glib::getenv("PATH")), X_("ffmpeg_harvid"), ff_file_path)) { ++ if (find_file (Searchpath(Glib::getenv("PATH")), X_("ffmpeg"), ff_file_path)) { + _ffmpeg_exe = ff_file_path; + } + #ifdef PLATFORM_WINDOWS +@@ -203,7 +203,7 @@ ArdourVideoToolPaths::transcoder_exe (std::string &ffmpeg_exe, std::string &ffpr + } + #endif + +- if (find_file (Searchpath(Glib::getenv("PATH")), X_("ffprobe_harvid"), ff_file_path)) { ++ if (find_file (Searchpath(Glib::getenv("PATH")), X_("ffprobe"), ff_file_path)) { + _ffprobe_exe = ff_file_path; + } + #ifdef PLATFORM_WINDOWS diff --git a/media-sound/ardour/files/ardour-8.12-fix_fpu.patch b/media-sound/ardour/files/ardour-8.12-fix_fpu.patch new file mode 100644 index 000000000000..dd99e010fe41 --- /dev/null +++ b/media-sound/ardour/files/ardour-8.12-fix_fpu.patch @@ -0,0 +1,196 @@ +respect userflags for optimizations +files for test are patched, even if it's broken for now +--- a/wscript ++++ b/wscript +@@ -553,8 +553,7 @@ int main() { return 0; }''', + execute = False, + msg = 'Checking compiler for AVX512F intrinsics', + okmsg = 'Found', +- errmsg = 'Not supported', +- define_name = 'FPU_AVX512F_SUPPORT') ++ errmsg = 'Not supported') + + conf.check_cxx(fragment = "#include <immintrin.h>\nint main(void) { __m128 a; _mm_fmadd_ss(a, a, a); return 0; }\n", + features = ['cxx'], +@@ -563,8 +562,7 @@ int main() { return 0; }''', + execute = False, + msg = 'Checking compiler for AVX/FMA intrinsics', + okmsg = 'Found', +- errmsg = 'Not supported', +- define_name = 'FPU_AVX_FMA_SUPPORT') ++ errmsg = 'Not supported') + + if opt.use_libcpp or conf.env['build_host'] in [ 'yosemite', 'el_capitan', 'sierra', 'high_sierra', 'mojave', 'catalina' ]: + cxx_flags.append('--stdlib=libc++') +@@ -636,11 +634,12 @@ int main() { return 0; }''', + build_host_supports_sse = True + if "3dnow" in x86_flags: + compiler_flags.append ("-m3dnow") +- +- if cpu == "i586": +- compiler_flags.append ("-march=i586") +- elif cpu == "i686": +- compiler_flags.append ("-march=i686") ++ if "avx" in x86_flags: ++ conf.define ('FPU_AVX_SUPPORT', 1) ++ if "fma" in x86_flags: ++ conf.define ('FPU_AVX_FMA_SUPPORT', 1) ++ if "avx512f" in x86_flags: ++ conf.define ('FPU_AVX512F_SUPPORT', 1) + + if not is_clang and ((conf.env['build_target'] == 'i686') or (conf.env['build_target'] == 'x86_64')) and build_host_supports_sse: + compiler_flags.extend ([ flags_dict['sse'], flags_dict['fpmath-sse'], flags_dict['xmmintrinsics'] ]) +@@ -762,9 +761,6 @@ int main() { return 0; }''', + prepend_opt_flags = False + break + +- if prepend_opt_flags: +- optimization_flags[:0] = flags_dict['full-optimization'] +- + if opt.debug_symbols: + optimization_flags += flags_dict['debuggable'] + +--- a/libs/ardour/wscript ++++ b/libs/ardour/wscript +@@ -495,14 +495,8 @@ def build(bld): + if not Options.options.no_fpu_optimization: + if (bld.env['build_target'] == 'i386' or bld.env['build_target'] == 'i686'): + obj.source += [ 'sse_functions_xmm.cc', 'sse_functions.s', ] +- avx_sources = [ 'sse_functions_avx_linux.cc' ] +- fma_sources = [ 'x86_functions_fma.cc' ] +- avx512f_sources = [ 'x86_functions_avx512f.cc' ] + elif bld.env['build_target'] == 'x86_64': + obj.source += [ 'sse_functions_xmm.cc', 'sse_functions_64bit.s', ] +- avx_sources = [ 'sse_functions_avx_linux.cc' ] +- fma_sources = [ 'x86_functions_fma.cc' ] +- avx512f_sources = [ 'x86_functions_avx512f.cc' ] + elif bld.env['build_target'] == 'mingw': + # usability of the 64 bit windows assembler depends on the compiler target, + # not the build host, which in turn can only be inferred from the name +@@ -533,7 +527,8 @@ def build(bld): + obj.use += ['arm_neon_functions' ] + obj.defines += [ 'ARM_NEON_SUPPORT' ] + +- if avx_sources: ++ if bld.is_defined('FPU_AVX_SUPPORT'): ++ avx_sources = [ 'sse_functions_avx_linux.cc' ] + # as long as we want to use AVX intrinsics in this file, + # compile it with -mavx flag - append avx flag to the existing + avx_cxxflags = list(bld.env['CXXFLAGS']) +@@ -549,7 +544,8 @@ def build(bld): + + obj.use += ['sse_avx_functions' ] + +- if bld.is_defined('FPU_AVX_FMA_SUPPORT') and fma_sources: ++ if bld.is_defined('FPU_AVX_FMA_SUPPORT'): ++ fma_sources = [ 'x86_functions_fma.cc' ] + fma_cxxflags = list(bld.env['CXXFLAGS']) + fma_cxxflags.append (bld.env['compiler_flags_dict']['avx']) + fma_cxxflags.append (bld.env['compiler_flags_dict']['pic']) +@@ -566,7 +562,8 @@ def build(bld): + obj.use += ['sse_fma_functions' ] + obj.defines += [ 'FPU_AVX_FMA_SUPPORT' ] + +- if bld.is_defined('FPU_AVX512F_SUPPORT') and avx512f_sources: ++ if bld.is_defined('FPU_AVX512F_SUPPORT'): ++ avx512f_sources = [ 'x86_functions_avx512f.cc' ] + avx512f_cxxflags = list(bld.env['CXXFLAGS']) + avx512f_cxxflags.append (bld.env['compiler_flags_dict']['avx512f']) + avx512f_cxxflags.append (bld.env['compiler_flags_dict']['avx']) +--- a/libs/ardour/globals.cc ++++ b/libs/ardour/globals.cc +@@ -228,6 +228,8 @@ setup_hardware_optimization (bool try_optimization) + + } else + #endif ++ ++#ifdef FPU_AVX_SUPPORT + if (fpu->has_avx ()) { + info << "Using AVX optimized routines" << endmsg; + +@@ -241,7 +243,10 @@ setup_hardware_optimization (bool try_optimization) + + generic_mix_functions = false; + +- } else if (fpu->has_sse ()) { ++ } else ++#endif ++ ++ if (fpu->has_sse ()) { + info << "Using SSE optimized routines" << endmsg; + + // SSE SET +--- a/libs/ardour/ardour/mix.h ++++ b/libs/ardour/ardour/mix.h +@@ -37,6 +37,7 @@ LIBARDOUR_API void x86_sse_find_peaks (float const* buf, uint32_t n + + extern "C" { + /* AVX functions */ ++#ifdef FPU_AVX_SUPPORT + LIBARDOUR_API float x86_sse_avx_compute_peak (float const* buf, uint32_t nsamples, float current); + LIBARDOUR_API void x86_sse_avx_apply_gain_to_buffer (float* buf, uint32_t nframes, float gain); + LIBARDOUR_API void x86_sse_avx_mix_buffers_with_gain (float* dst, float const* src, uint32_t nframes, float gain); +@@ -45,6 +46,7 @@ extern "C" { + #ifndef PLATFORM_WINDOWS + LIBARDOUR_API void x86_sse_avx_find_peaks (float const* buf, uint32_t nsamples, float* min, float* max); + #endif ++#endif + } + #ifdef PLATFORM_WINDOWS + LIBARDOUR_API void x86_sse_avx_find_peaks (float const* buf, uint32_t nsamples, float* min, float* max); +--- a/libs/ardour/test/fpu_test.cc ++++ b/libs/ardour/test/fpu_test.cc +@@ -99,6 +99,7 @@ FPUTest::compare (std::string msg, size_t cnt, float max_diff) + + #if defined(ARCH_X86) && defined(BUILD_SSE_OPTIMIZATIONS) + ++#if defined FPU_AVX_SUPPORT + void + FPUTest::avxFmaTest () + { +@@ -125,7 +126,9 @@ FPUTest::avxFmaTest () + + run (align_max, FLT_EPSILON); + } ++#endif + ++#if defined FPU_AVX_SUPPORT + void + FPUTest::avxTest () + { +@@ -152,7 +155,9 @@ FPUTest::avxTest () + + run (align_max); + } ++#endif + ++#if defined FPU_AVX512F_SUPPORT + void + FPUTest::avx512fTest () + { +@@ -179,6 +184,7 @@ FPUTest::avx512fTest () + + run (align_max, FLT_EPSILON); + } ++#endif + + void + FPUTest::sseTest () +--- a/libs/ardour/test/fpu_test.h ++++ b/libs/ardour/test/fpu_test.h +@@ -8,9 +8,15 @@ class FPUTest : public CppUnit::TestFixture + CPPUNIT_TEST_SUITE (FPUTest); + #if defined(ARCH_X86) && defined(BUILD_SSE_OPTIMIZATIONS) + CPPUNIT_TEST (sseTest); ++#if defined FPU_AVX_SUPPORT + CPPUNIT_TEST (avxTest); ++#endif ++#if defined FPU_AVX_FMA_SUPPORT + CPPUNIT_TEST (avxFmaTest); ++#endif ++#if defined FPU_AVX512F_SUPPORT + CPPUNIT_TEST (avx512fTest); ++#endif + #elif defined ARM_NEON_SUPPORT + CPPUNIT_TEST (neonTest); + #elif defined(__APPLE__) && defined(BUILD_VECLIB_OPTIMIZATIONS)
