git: bd0186dbd4bd - main - multimedia/tenacity: Add port: Tenacity is an easy-to-use multi-track audio editor and recorder

From: Hiroki Tagato <tagattie_at_FreeBSD.org>
Date: Wed, 05 Nov 2025 07:45:41 UTC
The branch main has been updated by tagattie:

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

commit bd0186dbd4bd74456792ee9ef1a267dc982cef25
Author:     Martin Filla <freebsd@sysctl.cz>
AuthorDate: 2025-11-05 07:43:37 +0000
Commit:     Hiroki Tagato <tagattie@FreeBSD.org>
CommitDate: 2025-11-05 07:45:20 +0000

    multimedia/tenacity: Add port: Tenacity is an easy-to-use multi-track audio editor and recorder
    
    Tenacity is an easy-to-use, privacy-friendly, FLOSS,
    cross-platform multi-track audio editor.
    
    WWW: https://tenacityaudio.org/
    
    PR:             290531
    Reported by:    Martin Filla <freebsd@sysctl.cz> (new maintainer)
---
 multimedia/Makefile                                |   1 +
 multimedia/tenacity/Makefile                       |  84 ++++++++
 multimedia/tenacity/distinfo                       |   5 +
 multimedia/tenacity/files/patch-CMakeLists.txt     |  11 ++
 .../files/patch-libraries_lib-files_FileNames.cpp  |  11 ++
 multimedia/tenacity/pkg-descr                      |   2 +
 multimedia/tenacity/pkg-plist                      | 217 +++++++++++++++++++++
 7 files changed, 331 insertions(+)

diff --git a/multimedia/Makefile b/multimedia/Makefile
index ce03a9340bac..70dd15719c5b 100644
--- a/multimedia/Makefile
+++ b/multimedia/Makefile
@@ -367,6 +367,7 @@
     SUBDIR += syncplay
     SUBDIR += szap-s2
     SUBDIR += tautulli
+    SUBDIR += tenacity
     SUBDIR += termplay
     SUBDIR += tinyobjloader
     SUBDIR += tivodecode
diff --git a/multimedia/tenacity/Makefile b/multimedia/tenacity/Makefile
new file mode 100644
index 000000000000..4a89fe6b144e
--- /dev/null
+++ b/multimedia/tenacity/Makefile
@@ -0,0 +1,84 @@
+PORTNAME=	tenacity
+DISTVERSIONPREFIX=	v
+DISTVERSION=	1.4-alpha1
+CATEGORIES=	multimedia
+
+MAINTAINER=	freebsd@sysctl.cz
+COMMENT=	Tenacity is an easy-to-use multi-track audio editor and recorder
+WWW=		https://tenacityaudio.org/
+
+LICENSE=	GPLv2
+LICENSE_FILE=	${WRKSRC}/LICENSE.txt
+
+BUILD_DEPENDS=	expat>0:textproc/expat2 \
+		ffmpeg>0:multimedia/ffmpeg \
+		flac>0:audio/flac \
+		glib>0:devel/glib20 \
+		lame>0:audio/lame \
+		libid3tag>0:audio/libid3tag \
+		libmatroska>0:multimedia/libmatroska \
+		libsndfile>0:audio/libsndfile \
+		libsoxr>0:audio/libsoxr \
+		libzip>0:archivers/libzip \
+		lilv>0:audio/lilv \
+		lv2>0:audio/lv2 \
+		mpg123>0:audio/mpg123 \
+		nasm>=0:devel/nasm \
+		opus>0:audio/opus \
+		opusfile>0:audio/opusfile \
+		portaudio>0:audio/portaudio \
+		portmidi>0:audio/portmidi \
+		rapidjson>0:devel/rapidjson \
+		soundtouch>0:audio/soundtouch \
+		suil>0:audio/suil \
+		twolame>0:audio/twolame \
+		vamp-plugin-sdk>0:audio/vamp-plugin-sdk \
+		wavpack>0:audio/wavpack \
+		wx32-gtk3>0:x11-toolkits/wxgtk32 \
+		zam-plugins-lv2>0:audio/zam-plugins-lv2
+
+LIB_DEPENDS=	libatk-1.0.so:accessibility/at-spi2-core \
+		libexpat.so:textproc/expat2 \
+		libharfbuzz.so:print/harfbuzz \
+		liblilv-0.so:audio/lilv \
+		libportaudio.so:audio/portaudio \
+		libsndfile.so:audio/libsndfile \
+		libSoundTouch.so:audio/soundtouch \
+		libsoxr.so:audio/libsoxr \
+		libsuil-0.so:audio/suil \
+		libvamp-hostsdk.so:audio/vamp-plugin-sdk \
+		libwx_baseu-3.2.so:x11-toolkits/wxgtk32 \
+		libwx_baseu_net-3.2.so:x11-toolkits/wxgtk32 \
+		libwx_gtk3u_core-3.2.so:x11-toolkits/wxgtk32 \
+		libwx_gtk3u_html-3.2.so:x11-toolkits/wxgtk32 \
+		libwx_gtk3u_qa-3.2.so:x11-toolkits/wxgtk32
+
+USES=		cmake desktop-file-utils gettext-runtime gnome localbase \
+		pkgconfig sqlite
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	tenacityteam
+GH_TUPLE=	Martinfx:libnyquist:a76cd38:libnyquist/lib-src/libnyquist
+
+USE_GNOME=	cairo gdkpixbuf glib20 gtk30 pango
+
+CMAKE_OFF=	LIBNYQUIST_BUILD_EXAMPLE
+
+OPTIONS_DEFINE_amd64=	AVX AVX2 AVX512
+
+AVX_DESC=	Enable AVX (x86_64 only)
+AVX2_DESC=	Enable AVX2 (x86_64 only)
+AVX512_DESC=	Enable AVX512 (x86_64 only)
+
+AVX_CMAKE_BOOL=		AVX
+AVX2_CMAKE_BOOL=	AVX2
+AVX512_CMAKE_BOOL=	AVX512
+
+.include <bsd.port.options.mk>
+
+.if ${ARCH} == i386
+CFLAGS+=	-msse2
+CXXFLAGS+=	-msse2 # fixes error: always_inline function '_mm_unpacklo_ps' requires target feature 'sse', but would be inlined into function 'pffft_zreorder' that is compiled without support for 'sse'
+.endif
+
+.include <bsd.port.mk>
diff --git a/multimedia/tenacity/distinfo b/multimedia/tenacity/distinfo
new file mode 100644
index 000000000000..9c5ca399baf0
--- /dev/null
+++ b/multimedia/tenacity/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1761465715
+SHA256 (tenacityteam-tenacity-v1.4-alpha1_GH0.tar.gz) = c371b9f341504904f3de3925e3c392def319b4c99112bad0c4bba67c1800530b
+SIZE (tenacityteam-tenacity-v1.4-alpha1_GH0.tar.gz) = 46967863
+SHA256 (Martinfx-libnyquist-a76cd38_GH0.tar.gz) = 8fcaa6df7d91a38a0f1721d927eba004a37361d6c1b5335ba4e67ac5a97e767a
+SIZE (Martinfx-libnyquist-a76cd38_GH0.tar.gz) = 705780
diff --git a/multimedia/tenacity/files/patch-CMakeLists.txt b/multimedia/tenacity/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..9bf4027dede3
--- /dev/null
+++ b/multimedia/tenacity/files/patch-CMakeLists.txt
@@ -0,0 +1,11 @@
+--- CMakeLists.txt.orig	2025-10-12 15:38:58 UTC
++++ CMakeLists.txt
+@@ -412,7 +412,7 @@ endif()
+     set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$<CONFIG:Debug,RelWithDebInfo>:Embedded>")
+ endif()
+ 
+-if (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
++if (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
+     # Allow AVX2 or AVX512 to be enabled if desired
+     option(AVX    "Enable the usage of AVX in builds instead of SSE4.")
+     option(AVX2   "Enable the usage of AVX2 in builds instead of SSE4 or AVX." OFF)
diff --git a/multimedia/tenacity/files/patch-libraries_lib-files_FileNames.cpp b/multimedia/tenacity/files/patch-libraries_lib-files_FileNames.cpp
new file mode 100644
index 000000000000..272d8d34ab12
--- /dev/null
+++ b/multimedia/tenacity/files/patch-libraries_lib-files_FileNames.cpp
@@ -0,0 +1,11 @@
+--- libraries/lib-files/FileNames.cpp.orig	2025-10-26 07:26:25 UTC
++++ libraries/lib-files/FileNames.cpp
+@@ -737,6 +737,8 @@ bool FileNames::IsOnFATFileSystem(const FilePath &path
+    return 0 == strcmp(fs.f_fstypename, "msdos");
+ }
+ #elif defined(__FreeBSD__)
++#include <sys/param.h>
++#include <sys/mount.h>
+ bool FileNames::IsOnFATFileSystem(const FilePath &path)
+ {
+    struct statfs fs;
diff --git a/multimedia/tenacity/pkg-descr b/multimedia/tenacity/pkg-descr
new file mode 100644
index 000000000000..e207b0a88344
--- /dev/null
+++ b/multimedia/tenacity/pkg-descr
@@ -0,0 +1,2 @@
+Tenacity is an easy-to-use, privacy-friendly, FLOSS,
+cross-platform multi-track audio editor.
diff --git a/multimedia/tenacity/pkg-plist b/multimedia/tenacity/pkg-plist
new file mode 100644
index 000000000000..c374978e3487
--- /dev/null
+++ b/multimedia/tenacity/pkg-plist
@@ -0,0 +1,217 @@
+bin/tenacity
+lib/libnyquist.a
+lib/tenacity/lib-audacity-application-logic.so
+lib/tenacity/lib-audio-devices.so
+lib/tenacity/lib-audio-graph.so
+lib/tenacity/lib-audio-io.so
+lib/tenacity/lib-basic-ui.so
+lib/tenacity/lib-builtin-effects.so
+lib/tenacity/lib-channel.so
+lib/tenacity/lib-command-parameters.so
+lib/tenacity/lib-components.so
+lib/tenacity/lib-concurrency.so
+lib/tenacity/lib-dynamic-range-processor.so
+lib/tenacity/lib-effects.so
+lib/tenacity/lib-exceptions.so
+lib/tenacity/lib-export-ui.so
+lib/tenacity/lib-ffmpeg-support.so
+lib/tenacity/lib-fft.so
+lib/tenacity/lib-file-formats.so
+lib/tenacity/lib-files.so
+lib/tenacity/lib-graphics.so
+lib/tenacity/lib-import-export.so
+lib/tenacity/lib-ipc.so
+lib/tenacity/lib-label-track.so
+lib/tenacity/lib-ladspa.so
+lib/tenacity/lib-lv2.so
+lib/tenacity/lib-math.so
+lib/tenacity/lib-menus.so
+lib/tenacity/lib-mixer.so
+lib/tenacity/lib-module-manager.so
+lib/tenacity/lib-music-information-retrieval.so
+lib/tenacity/lib-numeric-formats.so
+lib/tenacity/lib-nyquist-effects.so
+lib/tenacity/lib-playable-track.so
+lib/tenacity/lib-preference-pages.so
+lib/tenacity/lib-preferences.so
+lib/tenacity/lib-project-file-io.so
+lib/tenacity/lib-project-history.so
+lib/tenacity/lib-project-rate.so
+lib/tenacity/lib-project.so
+lib/tenacity/lib-realtime-effects.so
+lib/tenacity/lib-registries.so
+lib/tenacity/lib-sample-track.so
+lib/tenacity/lib-screen-geometry.so
+lib/tenacity/lib-shuttlegui.so
+lib/tenacity/lib-snapping.so
+lib/tenacity/lib-sqlite-helpers.so
+lib/tenacity/lib-stretching-sequence.so
+lib/tenacity/lib-string-utils.so
+lib/tenacity/lib-strings.so
+lib/tenacity/lib-tags.so
+lib/tenacity/lib-theme-resources.so
+lib/tenacity/lib-theme.so
+lib/tenacity/lib-time-and-pitch.so
+lib/tenacity/lib-time-frequency-selection.so
+lib/tenacity/lib-time-track.so
+lib/tenacity/lib-track-selection.so
+lib/tenacity/lib-track.so
+lib/tenacity/lib-transactions.so
+lib/tenacity/lib-utility.so
+lib/tenacity/lib-viewport.so
+lib/tenacity/lib-vst.so
+lib/tenacity/lib-wave-track-fft.so
+lib/tenacity/lib-wave-track-paint.so
+lib/tenacity/lib-wave-track-settings.so
+lib/tenacity/lib-wave-track.so
+lib/tenacity/lib-wx-init.so
+lib/tenacity/lib-wx-wrappers.so
+lib/tenacity/lib-xml.so
+share/applications/tenacity.desktop
+share/icons/hicolor/16x16/tenacity.png
+share/icons/hicolor/22x22/tenacity.png
+share/icons/hicolor/24x24/tenacity.png
+share/icons/hicolor/32x32/tenacity.png
+share/icons/hicolor/48x48/tenacity.png
+share/icons/hicolor/scalable/apps/tenacity.svg
+share/locale/af/LC_MESSAGES/tenacity.mo
+share/locale/ar/LC_MESSAGES/tenacity.mo
+share/locale/be/LC_MESSAGES/tenacity.mo
+share/locale/bg/LC_MESSAGES/tenacity.mo
+share/locale/bn/LC_MESSAGES/tenacity.mo
+share/locale/bs/LC_MESSAGES/tenacity.mo
+share/locale/ca/LC_MESSAGES/tenacity.mo
+share/locale/ca_ES@valencia/LC_MESSAGES/tenacity.mo
+share/locale/co/LC_MESSAGES/tenacity.mo
+share/locale/cs/LC_MESSAGES/tenacity.mo
+share/locale/cy/LC_MESSAGES/tenacity.mo
+share/locale/da/LC_MESSAGES/tenacity.mo
+share/locale/de/LC_MESSAGES/tenacity.mo
+share/locale/el/LC_MESSAGES/tenacity.mo
+share/locale/es/LC_MESSAGES/tenacity.mo
+share/locale/eu_ES/LC_MESSAGES/tenacity.mo
+share/locale/fa/LC_MESSAGES/tenacity.mo
+share/locale/fi/LC_MESSAGES/tenacity.mo
+share/locale/fr/LC_MESSAGES/tenacity.mo
+share/locale/ga/LC_MESSAGES/tenacity.mo
+share/locale/gl/LC_MESSAGES/tenacity.mo
+share/locale/he/LC_MESSAGES/tenacity.mo
+share/locale/hi/LC_MESSAGES/tenacity.mo
+share/locale/hr/LC_MESSAGES/tenacity.mo
+share/locale/hu/LC_MESSAGES/tenacity.mo
+share/locale/hy/LC_MESSAGES/tenacity.mo
+share/locale/id/LC_MESSAGES/tenacity.mo
+share/locale/it/LC_MESSAGES/tenacity.mo
+share/locale/ja/LC_MESSAGES/tenacity.mo
+share/locale/ka/LC_MESSAGES/tenacity.mo
+share/locale/km/LC_MESSAGES/tenacity.mo
+share/locale/ko/LC_MESSAGES/tenacity.mo
+share/locale/lt/LC_MESSAGES/tenacity.mo
+share/locale/mk/LC_MESSAGES/tenacity.mo
+share/locale/mr/LC_MESSAGES/tenacity.mo
+share/locale/my/LC_MESSAGES/tenacity.mo
+share/locale/nb/LC_MESSAGES/tenacity.mo
+share/locale/nl/LC_MESSAGES/tenacity.mo
+share/locale/oc/LC_MESSAGES/tenacity.mo
+share/locale/pl/LC_MESSAGES/tenacity.mo
+share/locale/pt_BR/LC_MESSAGES/tenacity.mo
+share/locale/pt_PT/LC_MESSAGES/tenacity.mo
+share/locale/ro/LC_MESSAGES/tenacity.mo
+share/locale/ru/LC_MESSAGES/tenacity.mo
+share/locale/sk/LC_MESSAGES/tenacity.mo
+share/locale/sl/LC_MESSAGES/tenacity.mo
+share/locale/sr_RS/LC_MESSAGES/tenacity.mo
+share/locale/sr_RS@latin/LC_MESSAGES/tenacity.mo
+share/locale/sv/LC_MESSAGES/tenacity.mo
+share/locale/ta/LC_MESSAGES/tenacity.mo
+share/locale/tg/LC_MESSAGES/tenacity.mo
+share/locale/tr/LC_MESSAGES/tenacity.mo
+share/locale/uk/LC_MESSAGES/tenacity.mo
+share/locale/vi/LC_MESSAGES/tenacity.mo
+share/locale/zh_CN/LC_MESSAGES/tenacity.mo
+share/locale/zh_TW/LC_MESSAGES/tenacity.mo
+share/man/man1/tenacity.1.gz
+share/metainfo/tenacity.metainfo.xml
+share/mime/packages/audacity.xml
+share/pixmaps/gnome-mime-application-x-audacity-project.xpm
+share/pixmaps/tenacity.xpm
+share/pixmaps/tenacity16.xpm
+share/pixmaps/tenacity32.xpm
+%%DATADIR%%/EffectsMenuDefaults.xml
+%%DATADIR%%/help/CMakeLists.txt
+%%DATADIR%%/help/tenacity.1
+%%DATADIR%%/help/tenacity.metainfo.xml.in
+%%DATADIR%%/nyquist/aud-do-support.lsp
+%%DATADIR%%/nyquist/dspprims.lsp
+%%DATADIR%%/nyquist/envelopes.lsp
+%%DATADIR%%/nyquist/equalizer.lsp
+%%DATADIR%%/nyquist/evalenv.lsp
+%%DATADIR%%/nyquist/fileio.lsp
+%%DATADIR%%/nyquist/init.lsp
+%%DATADIR%%/nyquist/misc.lsp
+%%DATADIR%%/nyquist/nyinit-dbg.lsp
+%%DATADIR%%/nyquist/nyinit.lsp
+%%DATADIR%%/nyquist/nyqmisc.lsp
+%%DATADIR%%/nyquist/nyquist-plot.txt
+%%DATADIR%%/nyquist/nyquist.lsp
+%%DATADIR%%/nyquist/printrec.lsp
+%%DATADIR%%/nyquist/profile.lsp
+%%DATADIR%%/nyquist/rawwaves/mand1.raw
+%%DATADIR%%/nyquist/rawwaves/mand10.raw
+%%DATADIR%%/nyquist/rawwaves/mand11.raw
+%%DATADIR%%/nyquist/rawwaves/mand12.raw
+%%DATADIR%%/nyquist/rawwaves/mand2.raw
+%%DATADIR%%/nyquist/rawwaves/mand3.raw
+%%DATADIR%%/nyquist/rawwaves/mand4.raw
+%%DATADIR%%/nyquist/rawwaves/mand5.raw
+%%DATADIR%%/nyquist/rawwaves/mand6.raw
+%%DATADIR%%/nyquist/rawwaves/mand7.raw
+%%DATADIR%%/nyquist/rawwaves/mand8.raw
+%%DATADIR%%/nyquist/rawwaves/mand9.raw
+%%DATADIR%%/nyquist/rawwaves/mandpluk.raw
+%%DATADIR%%/nyquist/rawwaves/marmstk1.raw
+%%DATADIR%%/nyquist/rawwaves/sinewave.raw
+%%DATADIR%%/nyquist/sal-parse.lsp
+%%DATADIR%%/nyquist/sal.lsp
+%%DATADIR%%/nyquist/seq.lsp
+%%DATADIR%%/nyquist/seqfnint.lsp
+%%DATADIR%%/nyquist/seqmidi.lsp
+%%DATADIR%%/nyquist/sliders.lsp
+%%DATADIR%%/nyquist/sndfnint.lsp
+%%DATADIR%%/nyquist/spec-plot.lsp
+%%DATADIR%%/nyquist/spectral-analysis.lsp
+%%DATADIR%%/nyquist/stk.lsp
+%%DATADIR%%/nyquist/system.lsp
+%%DATADIR%%/nyquist/test.lsp
+%%DATADIR%%/nyquist/velocity.lsp
+%%DATADIR%%/nyquist/xlinit.lsp
+%%DATADIR%%/nyquist/xm.lsp
+%%DATADIR%%/plug-ins/SpectralEditMulti.ny
+%%DATADIR%%/plug-ins/SpectralEditParametricEQ.ny
+%%DATADIR%%/plug-ins/SpectralEditShelves.ny
+%%DATADIR%%/plug-ins/StudioFadeOut.ny
+%%DATADIR%%/plug-ins/adjustable-fade.ny
+%%DATADIR%%/plug-ins/beat.ny
+%%DATADIR%%/plug-ins/clipfix.ny
+%%DATADIR%%/plug-ins/crossfadeclips.ny
+%%DATADIR%%/plug-ins/crossfadetracks.ny
+%%DATADIR%%/plug-ins/delay.ny
+%%DATADIR%%/plug-ins/eq-xml-to-txt-converter.ny
+%%DATADIR%%/plug-ins/equalabel.ny
+%%DATADIR%%/plug-ins/highpass.ny
+%%DATADIR%%/plug-ins/label-sounds.ny
+%%DATADIR%%/plug-ins/limiter.ny
+%%DATADIR%%/plug-ins/lowpass.ny
+%%DATADIR%%/plug-ins/noisegate.ny
+%%DATADIR%%/plug-ins/notch.ny
+%%DATADIR%%/plug-ins/nyquist-plug-in-installer.ny
+%%DATADIR%%/plug-ins/pluck.ny
+%%DATADIR%%/plug-ins/rhythmtrack.ny
+%%DATADIR%%/plug-ins/rissetdrum.ny
+%%DATADIR%%/plug-ins/rms.ny
+%%DATADIR%%/plug-ins/sample-data-export.ny
+%%DATADIR%%/plug-ins/sample-data-import.ny
+%%DATADIR%%/plug-ins/spectral-delete.ny
+%%DATADIR%%/plug-ins/tremolo.ny
+%%DATADIR%%/plug-ins/vocalrediso.ny
+%%DATADIR%%/plug-ins/vocoder.ny