git: 8fedf8cd90cc - main - audio/spiralsynthmodular: Fix "undefined symbol" errors at runtime
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 06 Mar 2026 21:02:56 UTC
The branch main has been updated by vvd:
URL: https://cgit.FreeBSD.org/ports/commit/?id=8fedf8cd90ccc775af0f5e2a203f4c94f233bdd1
commit 8fedf8cd90ccc775af0f5e2a203f4c94f233bdd1
Author: Valery <valery@vslash.com>
AuthorDate: 2026-03-06 20:55:38 +0000
Commit: Vladimir Druzenko <vvd@FreeBSD.org>
CommitDate: 2026-03-06 21:02:13 +0000
audio/spiralsynthmodular: Fix "undefined symbol" errors at runtime
* Behavior *
- At runtime, for each synth plugin, we got:
dlerror() output:
/usr/local/lib/SpiralPlugins/AmpPlugin.so: Undefined symbol "_ZN10SpiralInfo6LOCALEE"
* Why *
- It seems this comes from the way newer compiler manage static
properties. (SSM is 25yo).
- This error has already been reported long times ago on Linux distro.
* Fix *
- A way to fix it without rewriting the wheel is to inline static
properties in the header.
While here improve port:
- Add LICENSE.
- Register dependiencies.
- Replace CPPFLAGS and LIBS with USES=localbase.
- Parametrize version in WRKSRC.
- Remove unnecessary REINPLACE_CMD in
SpiralSound/Plugins/LADSPAPlugin/Makefile.in.
- Merge STRIP_CMD.
PR: 293552
MFH: 2026Q1
---
audio/spiralsynthmodular/Makefile | 24 ++++----
.../files/patch-SpiralSound_SpiralInfo.C | 64 ++++++++++++++++++++
.../files/patch-SpiralSound_SpiralInfo.h | 70 ++++++++++++++++++++++
3 files changed, 146 insertions(+), 12 deletions(-)
diff --git a/audio/spiralsynthmodular/Makefile b/audio/spiralsynthmodular/Makefile
index dfd4c5cb42a8..2dceb8fa932a 100644
--- a/audio/spiralsynthmodular/Makefile
+++ b/audio/spiralsynthmodular/Makefile
@@ -1,6 +1,6 @@
PORTNAME= spiralsynthmodular
PORTVERSION= 0.2.2a
-PORTREVISION= 13
+PORTREVISION= 14
CATEGORIES= audio
MASTER_SITES= SF/spiralmodular/spiralmodular/${PORTVERSION}%20%28Latest%20Version%29
DISTNAME= spiralmodular-${PORTVERSION}
@@ -9,19 +9,21 @@ MAINTAINER= ports@FreeBSD.org
COMMENT= Object-oriented modular softsynth/sequencer/sampler
WWW= https://www.pawfal.org/Software/SSM/
-BUILD_DEPENDS= ${LOCALBASE}/include/ladspa.h:audio/ladspa \
- jackd:audio/jack
+LICENSE= GPLv2
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+BUILD_DEPENDS= ${LOCALBASE}/include/ladspa.h:audio/ladspa
LIB_DEPENDS= libfltk.so:x11-toolkits/fltk \
+ libfontconfig.so:x11-fonts/fontconfig \
+ libjack.so:audio/jack \
libsndfile.so:audio/libsndfile
-USES= xorg
-USE_XORG= x11
+USES= localbase xorg
+USE_XORG= x11 xcursor xext xfixes xft xinerama xrender
GNU_CONFIGURE= yes
CONFIGURE_ENV= FLTK_CONFIG="${FLTK_CONFIG}"
-CPPFLAGS+= -I${LOCALBASE}/include
-LIBS+= -L${LOCALBASE}/lib
-WRKSRC= ${WRKDIR}/spiralmodular-0.2.2
+WRKSRC= ${WRKDIR}/spiralmodular-${PORTVERSION:C|[a-z]+||}
OPTIONS_DEFINE= OPTIMIZED_CFLAGS
@@ -35,8 +37,6 @@ post-patch:
s|^SpiralSound/Plugins/MidiPlugin/Makefile||; \
s|MidiPlugin||' \
${CONFIGURE_WRKSRC}/${CONFIGURE_SCRIPT}
- @${REINPLACE_CMD} -e 's|-I/usr/X11R6/include|-I${LOCALBASE}/include|' \
- ${WRKSRC}/SpiralSound/Plugins/LADSPAPlugin/Makefile.in
@${REINPLACE_CMD} -e 's|O_SYNC|O_FSYNC|' \
${WRKSRC}/SpiralSound/Midi.C
@${REINPLACE_CMD} -e 's|True|true|; s|False|false|' \
@@ -58,7 +58,7 @@ post-patch:
s|fl_file_chooser.H|Fl_File_Chooser.H|g'
post-install:
- ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/${PORTNAME}
- ${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/SpiralPlugins/*.so
+ ${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/${PORTNAME} \
+ ${STAGEDIR}${PREFIX}/lib/SpiralPlugins/*.so
.include <bsd.port.mk>
diff --git a/audio/spiralsynthmodular/files/patch-SpiralSound_SpiralInfo.C b/audio/spiralsynthmodular/files/patch-SpiralSound_SpiralInfo.C
new file mode 100644
index 000000000000..b02b173350a1
--- /dev/null
+++ b/audio/spiralsynthmodular/files/patch-SpiralSound_SpiralInfo.C
@@ -0,0 +1,64 @@
+--- SpiralSound/SpiralInfo.C.orig 2003-08-16 06:16:08 UTC
++++ SpiralSound/SpiralInfo.C
+@@ -31,25 +31,25 @@ float RandFloat (float s, float e) {
+
+
+
+-string SpiralInfo::LOCALE = "EN";
+-int SpiralInfo::BUFSIZE = 512;
+-int SpiralInfo::FRAGSIZE = 256;
+-int SpiralInfo::FRAGCOUNT = 8;
+-int SpiralInfo::SAMPLERATE = 44100;
+-long SpiralInfo::MAXSAMPLE = 32767;
+-float SpiralInfo::VALUECONV = 1.0f/MAXSAMPLE;
+-bool SpiralInfo::WANTMIDI = false;
+-int SpiralInfo::FILTERGRAN = 50;
+-string SpiralInfo::OUTPUTFILE = "/dev/dsp";
+-string SpiralInfo::MIDIFILE = "/dev/midi";
+-int SpiralInfo::POLY = 1;
+-bool SpiralInfo::USEPLUGINLIST = false;
+-unsigned SpiralInfo::GUI_COLOUR = 179;
+-unsigned SpiralInfo::SCOPE_BG_COLOUR = fl_rgb_color (20, 60, 20);
+-unsigned SpiralInfo::SCOPE_FG_COLOUR = fl_rgb_color (100, 200, 100);
+-unsigned SpiralInfo::SCOPE_SEL_COLOUR = FL_WHITE;
+-unsigned SpiralInfo::SCOPE_IND_COLOUR = fl_rgb_color (203, 255, 0);
+-unsigned SpiralInfo::SCOPE_MRK_COLOUR = fl_rgb_color (155, 155, 50);
++//string SpiralInfo::LOCALE = "EN";
++//int SpiralInfo::BUFSIZE = 512;
++//int SpiralInfo::FRAGSIZE = 256;
++//int SpiralInfo::FRAGCOUNT = 8;
++//int SpiralInfo::SAMPLERATE = 44100;
++//long SpiralInfo::MAXSAMPLE = 32767;
++//float SpiralInfo::VALUECONV = 1.0f/MAXSAMPLE;
++//bool SpiralInfo::WANTMIDI = false;
++//int SpiralInfo::FILTERGRAN = 50;
++//string SpiralInfo::OUTPUTFILE = "/dev/dsp";
++//string SpiralInfo::MIDIFILE = "/dev/midi";
++//int SpiralInfo::POLY = 1;
++//bool SpiralInfo::USEPLUGINLIST = false;
++//unsigned SpiralInfo::GUI_COLOUR = 179;
++//unsigned SpiralInfo::SCOPE_BG_COLOUR = fl_rgb_color (20, 60, 20);
++//unsigned SpiralInfo::SCOPE_FG_COLOUR = fl_rgb_color (100, 200, 100);
++//unsigned SpiralInfo::SCOPE_SEL_COLOUR = FL_WHITE;
++//unsigned SpiralInfo::SCOPE_IND_COLOUR = fl_rgb_color (203, 255, 0);
++//unsigned SpiralInfo::SCOPE_MRK_COLOUR = fl_rgb_color (155, 155, 50);
+
+ /*int SpiralInfo::GUICOL_Tool=179;
+ int SpiralInfo::GUICOL_Button=181;
+@@ -57,11 +57,11 @@ int SpiralInfo::GUIDEVICE_Box=30;*/
+ int SpiralInfo::GUICOL_Device=181;
+ int SpiralInfo::GUIDEVICE_Box=30;*/
+
+-int SpiralInfo::GUICOL_Tool=48;
+-int SpiralInfo::GUICOL_Button=42;
+-int SpiralInfo::GUICOL_Canvas=50;
+-int SpiralInfo::GUICOL_Device=52;
+-int SpiralInfo::GUIDEVICE_Box=30;
++//int SpiralInfo::GUICOL_Tool=48;
++//int SpiralInfo::GUICOL_Button=42;
++//int SpiralInfo::GUICOL_Canvas=50;
++//int SpiralInfo::GUICOL_Device=52;
++//int SpiralInfo::GUIDEVICE_Box=30;
+
+ vector<string> SpiralInfo::PLUGINVEC;
+
diff --git a/audio/spiralsynthmodular/files/patch-SpiralSound_SpiralInfo.h b/audio/spiralsynthmodular/files/patch-SpiralSound_SpiralInfo.h
new file mode 100644
index 000000000000..c29b654c9ea1
--- /dev/null
+++ b/audio/spiralsynthmodular/files/patch-SpiralSound_SpiralInfo.h
@@ -0,0 +1,70 @@
+--- SpiralSound/SpiralInfo.h.orig 2003-07-22 22:08:41 UTC
++++ SpiralSound/SpiralInfo.h
+@@ -23,6 +23,8 @@
+ #include <string>
+ #include <vector>
+ #include <stdlib.h>
++#include "FL/fl_draw.H"
++#include "FL/fl_message.H"
+ #include "Sample.h"
+
+ using namespace std;
+@@ -40,34 +42,34 @@ class SpiralInfo {
+ void SavePrefs();
+ static void Alert (string Text);
+ static void Log (string Text);
+- static int BUFSIZE;
+- static int FRAGSIZE;
+- static int FRAGCOUNT;
+- static int SAMPLERATE;
+- static long MAXSAMPLE;
+- static float VALUECONV;
+- static bool WANTMIDI;
+- static int FILTERGRAN;
+- static string OUTPUTFILE;
+- static string MIDIFILE;
+- static bool USEPLUGINLIST;
+- static int POLY;
+- static string LOCALE;
+- static unsigned GUI_COLOUR;
+- static unsigned SCOPE_BG_COLOUR;
+- static unsigned SCOPE_FG_COLOUR;
+- static unsigned SCOPE_SEL_COLOUR;
+- static unsigned SCOPE_IND_COLOUR;
+- static unsigned SCOPE_MRK_COLOUR;
++ inline static int BUFSIZE=512;
++ inline static int FRAGSIZE=256;
++ inline static int FRAGCOUNT=8;
++ inline static int SAMPLERATE=44100;
++ inline static long MAXSAMPLE=32767;
++ inline static float VALUECONV=1.0f/MAXSAMPLE;
++ inline static bool WANTMIDI=false;
++ inline static int FILTERGRAN=50;
++ inline static string OUTPUTFILE="/dev/dsp";
++ inline static string MIDIFILE="/dev/midi";
++ inline static bool USEPLUGINLIST=false;
++ inline static int POLY=1;
++ inline static string LOCALE="EN";
++ inline static unsigned GUI_COLOUR=179;
++ inline static unsigned SCOPE_BG_COLOUR=fl_rgb_color (20, 60, 20);
++ inline static unsigned SCOPE_FG_COLOUR=fl_rgb_color (100, 200, 100);
++ inline static unsigned SCOPE_SEL_COLOUR= FL_WHITE;
++ inline static unsigned SCOPE_IND_COLOUR= fl_rgb_color (203, 255, 0);
++ inline static unsigned SCOPE_MRK_COLOUR= fl_rgb_color (155, 155, 50);
+ static SpiralInfo* Get();
+ void SetColours();
+ static string PLUGIN_PATH;
+ static vector<string> PLUGINVEC;
+- static int GUICOL_Tool;
+- static int GUICOL_Button;
+- static int GUICOL_Canvas;
+- static int GUICOL_Device;
+- static int GUIDEVICE_Box;
++ inline static int GUICOL_Tool=48;
++ inline static int GUICOL_Button=42;
++ inline static int GUICOL_Canvas=50;
++ inline static int GUICOL_Device=52;
++ inline static int GUIDEVICE_Box=30;
+ private:
+ string m_ResFileName;
+ int m_Version;