git: 0ef520f32ee9 - main - audio/deadbeef: split GTK-based GUI plugins into separate port

From: Alexey Dokuchaev <danfe_at_FreeBSD.org>
Date: Sun, 27 Sep 2026 05:38:40 UTC
The branch main has been updated by danfe:

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

commit 0ef520f32ee9f4f28d1ae68eba8152ff51e912c0
Author:     Alexey Dokuchaev <danfe@FreeBSD.org>
AuthorDate: 2026-09-27 05:37:06 +0000
Commit:     Alexey Dokuchaev <danfe@FreeBSD.org>
CommitDate: 2026-09-27 05:37:06 +0000

    audio/deadbeef: split GTK-based GUI plugins into separate port
    
    - This allows to 1) simplify the main Makefile by removing
      fragile and incoherent logic to handle the codependencies
      between four GUI plugins; 2) consistently flavorize them
      against supported GTK versions.  Users can now switch GUI
      without having to reconfigure and rebuild the main port
    - Drop custom NOTIFY_DESC in favor of standard description
      which is shorter and less cryptic (more user-oriented)
---
 UPDATING                                           |  8 ++++
 audio/Makefile                                     |  1 +
 audio/deadbeef-gui-plugins/Makefile                | 48 +++++++++++++++++++++
 audio/deadbeef-gui-plugins/distinfo                |  3 ++
 audio/deadbeef-gui-plugins/files/patch-Makefile.in | 24 +++++++++++
 .../files/patch-plugins_gtkui_Makefile.in          |  0
 ...ch-plugins_gtkui_ddbcellrenderertextmultiline.c |  8 ++--
 audio/deadbeef-gui-plugins/pkg-descr               |  2 +
 audio/deadbeef-gui-plugins/pkg-plist               | 18 ++++++++
 audio/deadbeef/Makefile                            | 50 +++++-----------------
 audio/deadbeef/pkg-message                         |  9 ++++
 audio/deadbeef/pkg-plist                           | 19 +-------
 12 files changed, 127 insertions(+), 63 deletions(-)

diff --git a/UPDATING b/UPDATING
index 2d9671a7ab49..2806c5dc98c6 100644
--- a/UPDATING
+++ b/UPDATING
@@ -5,6 +5,14 @@ they are unavoidable.
 You should get into the habit of checking this file for changes each time
 you update your ports collection, before attempting any port upgrades.
 
+20260927:
+  AFFECTS: audio/deadbeef
+  AUTHOR: danfe@FreeBSD.org
+
+  GTK-based GUI plugins had been split from the main port into its own,
+  `audio/deadbeef-gui-plugins', flavorized by the GTK version.  Please
+  install the preferred one together with the main program.
+
 20260924:
   AFFECTS: users of net/openldap25-client, net/openldap25-server,
     net/openldap26-client, net/openldap26-server
diff --git a/audio/Makefile b/audio/Makefile
index 2404f30d91be..37e6e8f59269 100644
--- a/audio/Makefile
+++ b/audio/Makefile
@@ -100,6 +100,7 @@
     SUBDIR += darkice
     SUBDIR += dcd
     SUBDIR += deadbeef
+    SUBDIR += deadbeef-gui-plugins
     SUBDIR += deadbeef-jack-plugin
     SUBDIR += deadbeef-mpris2-plugin
     SUBDIR += deadbeef-musical-spectrum-plugin
diff --git a/audio/deadbeef-gui-plugins/Makefile b/audio/deadbeef-gui-plugins/Makefile
new file mode 100644
index 000000000000..27e5b926b789
--- /dev/null
+++ b/audio/deadbeef-gui-plugins/Makefile
@@ -0,0 +1,48 @@
+PORTNAME=	deadbeef
+PORTVERSION=	0.7.2
+CATEGORIES=	audio misc
+MASTER_SITES=	SF/${PORTNAME}/Archive
+PKGNAMESUFFIX=	-${FLAVOR}-gui-plugins
+
+MAINTAINER=	danfe@FreeBSD.org
+COMMENT=	GUI plugins for DeaDBeeF audio player
+WWW=		https://deadbeef.sourceforge.io/
+
+LICENSE=	GPLv2 LGPL21
+LICENSE_COMB=	dual
+
+LIB_DEPENDS=	libjansson.so:devel/jansson
+RUN_DEPENDS=	${PORTNAME}:${CATEGORIES:[1]}/${PORTNAME}
+
+USES=		gettext-tools gmake gnome libtool pkgconfig tar:bzip2
+GNU_CONFIGURE=	yes
+CONFIGURE_ARGS=	${_DISABLE_UNNEEDED_PLUGINS:sh}
+USE_GNOME=	intltool
+INSTALL_TARGET=	install-strip
+
+FLAVORS=	gtk2 gtk3
+
+.if ${FLAVOR:U} == gtk3
+CONFIGURE_ARGS+=	--disable-gtk2
+USE_GNOME+=	gtk30
+PLIST_SUB+=	GTK_VER=3
+.else
+CONFIGURE_ARGS+=	--disable-gtk3
+USE_GNOME+=	gtk20
+PLIST_SUB+=	GTK_VER=2
+.endif
+
+OPTIONS_DEFINE=	NLS
+
+NLS_CONFIGURE_OFF=	--disable-nls
+
+post-patch:
+	@${REINPLACE_CMD} -e 's, -a.*shellexec.*",,' ${WRKSRC}/configure
+
+_FILTER_OUT_ENTRIES=	abstract-socket converter gtk pltbrowser \
+			portable shellexecui staticlink
+_DISABLE_UNNEEDED_PLUGINS=	${SED} -n "/^enable_nullout/,/^'/ { \
+	s,^en,--dis,; s,_,-,g p; }" ${WRKSRC}/configure | \
+	${EGREP} -v '${_FILTER_OUT_ENTRIES:ts|}'
+
+.include <bsd.port.mk>
diff --git a/audio/deadbeef-gui-plugins/distinfo b/audio/deadbeef-gui-plugins/distinfo
new file mode 100644
index 000000000000..16fbb8bdd949
--- /dev/null
+++ b/audio/deadbeef-gui-plugins/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1466336082
+SHA256 (deadbeef-0.7.2.tar.bz2) = 8a63abdf00c2f37c33e018ae0b39d391873e037434074b84bb47381bf283c884
+SIZE (deadbeef-0.7.2.tar.bz2) = 4736472
diff --git a/audio/deadbeef-gui-plugins/files/patch-Makefile.in b/audio/deadbeef-gui-plugins/files/patch-Makefile.in
new file mode 100644
index 000000000000..562d6ce77907
--- /dev/null
+++ b/audio/deadbeef-gui-plugins/files/patch-Makefile.in
@@ -0,0 +1,24 @@
+--- Makefile.in.orig	2016-06-19 11:30:46 UTC
++++ Makefile.in
+@@ -460,11 +460,7 @@ target_alias = @target_alias@
+ top_build_prefix = @top_build_prefix@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+-SUBDIRS = pixmaps\
+-		  icons\
+-		  ${PLUGINS_DIRS}\
+-		  po\
+-		  intl
++SUBDIRS = ${PLUGINS_DIRS}
+ 
+ INTLTOOL_FILES = \
+ 		intltool-extract.in \
+@@ -786,7 +782,7 @@ $(RECURSIVE_TARGETS):
+ 	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ 	  || eval $$failcom; \
+ 	done; \
+-	if test "$$dot_seen" = "no"; then \
++	exit; if test "$$dot_seen" = "no"; then \
+ 	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ 	fi; test -z "$$fail"
+ 
diff --git a/audio/deadbeef/files/patch-plugins_gtkui_Makefile.in b/audio/deadbeef-gui-plugins/files/patch-plugins_gtkui_Makefile.in
similarity index 100%
rename from audio/deadbeef/files/patch-plugins_gtkui_Makefile.in
rename to audio/deadbeef-gui-plugins/files/patch-plugins_gtkui_Makefile.in
diff --git a/audio/deadbeef/files/patch-plugins_gtkui_ddbcellrenderertextmultiline.c b/audio/deadbeef-gui-plugins/files/patch-plugins_gtkui_ddbcellrenderertextmultiline.c
similarity index 89%
rename from audio/deadbeef/files/patch-plugins_gtkui_ddbcellrenderertextmultiline.c
rename to audio/deadbeef-gui-plugins/files/patch-plugins_gtkui_ddbcellrenderertextmultiline.c
index 626a62d44816..ee93203fa67a 100644
--- a/audio/deadbeef/files/patch-plugins_gtkui_ddbcellrenderertextmultiline.c
+++ b/audio/deadbeef-gui-plugins/files/patch-plugins_gtkui_ddbcellrenderertextmultiline.c
@@ -1,6 +1,6 @@
 --- plugins/gtkui/ddbcellrenderertextmultiline.c.orig	2016-06-19 11:26:18 UTC
 +++ plugins/gtkui/ddbcellrenderertextmultiline.c
-@@ -30,7 +30,13 @@
+@@ -30,6 +30,11 @@
  #include "support.h"
  #include "ddbcellrenderertextmultiline.h"
  
@@ -10,11 +10,9 @@
 +#define GTK3_CONST
 +#endif
  
-+
  #define _g_free0(var) (var = (g_free (var), NULL))
  
- #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
-@@ -70,7 +76,7 @@ static gboolean ddb_cell_renderer_text_multiline_gtk_c
+@@ -70,7 +75,7 @@ enum  {
  };
  static void ddb_cell_renderer_text_multiline_gtk_cell_renderer_text_editing_done (DdbCellEditableTextView* entry, DdbCellRendererTextMultiline* _self_);
  static gboolean ddb_cell_renderer_text_multiline_gtk_cell_renderer_focus_out_event (DdbCellEditableTextView* entry, GdkEvent* event, DdbCellRendererTextMultiline* _self_);
@@ -23,7 +21,7 @@
  DdbCellRendererTextMultiline* ddb_cell_renderer_text_multiline_new (void);
  DdbCellRendererTextMultiline* ddb_cell_renderer_text_multiline_construct (GType object_type);
  static void ddb_cell_renderer_text_multiline_finalize (GObject* obj);
-@@ -409,7 +415,7 @@ ddb_cell_renderer_text_multiline_populate_popup (GtkEn
+@@ -409,7 +414,7 @@ ddb_cell_renderer_text_multiline_populate_popup (GtkEn
              G_CALLBACK (ddb_cell_renderer_text_multiline_popup_unmap), data);
  }
  
diff --git a/audio/deadbeef-gui-plugins/pkg-descr b/audio/deadbeef-gui-plugins/pkg-descr
new file mode 100644
index 000000000000..562b27615d48
--- /dev/null
+++ b/audio/deadbeef-gui-plugins/pkg-descr
@@ -0,0 +1,2 @@
+GUI plugins for DeaDBeeF audio player, including main interface,
+shell commands execution, audio converter, and playlist browser.
diff --git a/audio/deadbeef-gui-plugins/pkg-plist b/audio/deadbeef-gui-plugins/pkg-plist
new file mode 100644
index 000000000000..1bda8badd1c9
--- /dev/null
+++ b/audio/deadbeef-gui-plugins/pkg-plist
@@ -0,0 +1,18 @@
+@comment include/deadbeef/gtkui_api.h
+lib/deadbeef/converter.so
+lib/deadbeef/converter_gtk%%GTK_VER%%.so
+lib/deadbeef/convpresets/AAC_(Nero_FAAC).txt
+lib/deadbeef/convpresets/ALAC.txt
+lib/deadbeef/convpresets/FLAC_(compression_level_5).txt
+lib/deadbeef/convpresets/MP3_CBR_320_Kbps_(Lame).txt
+lib/deadbeef/convpresets/MP3_VBR_192Kbps_(Lame).txt
+lib/deadbeef/convpresets/MS_RIFF_WAV.txt
+lib/deadbeef/convpresets/MusePack.txt
+lib/deadbeef/convpresets/Ogg_FLAC.txt
+lib/deadbeef/convpresets/Ogg_Vorbis_(-q_5).txt
+lib/deadbeef/convpresets/Opus.txt
+lib/deadbeef/convpresets/TTA.txt
+lib/deadbeef/convpresets/WavPack.txt
+lib/deadbeef/ddb_gui_GTK%%GTK_VER%%.so
+lib/deadbeef/pltbrowser_gtk%%GTK_VER%%.so
+lib/deadbeef/shellexecui_gtk%%GTK_VER%%.so
diff --git a/audio/deadbeef/Makefile b/audio/deadbeef/Makefile
index d85e6aaf8733..da8c9246fbbe 100644
--- a/audio/deadbeef/Makefile
+++ b/audio/deadbeef/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	deadbeef
 PORTVERSION=	0.7.2
-PORTREVISION=	33
+PORTREVISION=	34
 CATEGORIES=	audio
 MASTER_SITES=	SF/${PORTNAME}/Archive
 
@@ -15,7 +15,9 @@ GNU_CONFIGURE=	yes
 USES=		compiler:c11 desktop-file-utils gettext gmake gnome iconv \
 		libtool localbase pkgconfig shebangfix tar:bzip2
 USE_LDCONFIG=	yes
-CONFIGURE_ARGS=	--disable-alsa --disable-nullout --disable-static
+CONFIGURE_ARGS=	--disable-alsa --disable-nullout --disable-static \
+		--disable-gtk2 --disable-gtk3 --disable-converter \
+		--disable-pltbrowser --disable-shellexecui
 CPPFLAGS+=	-I../dumb/dumb-kode54/include -I../../plugins/libmp4ff \
 		-I../../plugins/gme/game-music-emu-0.6pre \
 		-I./sidplay-libs/libsidplay/include/sidplay
@@ -26,20 +28,19 @@ USE_GNOME=	intltool
 SHEBANG_FILES=	yasmwrapper.sh
 INSTALL_TARGET=	install-strip
 
-OPTIONS_DEFINE=	AAC ADPLUG ALAC ART CDDA CONVERTER DCA DSP DUMB FFAP \
-		FFMPEG FLAC GME GUI HOTKEYS LASTFM M3U MMS MONO2STEREO \
-		MUSEPACK NLS NOTIFY OGG PLTBROWSER PSF PULSEAUDIO SC68 \
+OPTIONS_DEFINE=	AAC ADPLUG ALAC ART CDDA DCA DSP DUMB FFAP \
+		FFMPEG FLAC GME HOTKEYS LASTFM M3U MMS MONO2STEREO \
+		MUSEPACK NLS NOTIFY OGG PSF PULSEAUDIO SC68 \
 		SHELLEXEC SHN SID SNDFILE SUPEREQ TTA VFS VFS_ZIP VTX \
 		WAVPACK WILDMIDI WMA
 
-OPTIONS_DEFAULT=AAC ADPLUG ALAC ART CONVERTER DCA DSP DUMB FFAP FLAC GME \
-		GTK2 HOSTKEYS HOTKEYS LASTFM M3U MAD MMS MONO2STEREO \
-		MPG123 MUSEPACK NOTIFY OGG PLTBROWSER PSF SC68 SHELLEXEC \
+OPTIONS_DEFAULT=AAC ADPLUG ALAC ART DCA DSP DUMB FFAP FLAC GME \
+		HOTKEYS LASTFM M3U MAD MMS MONO2STEREO \
+		MPG123 MUSEPACK NOTIFY OGG PSF SC68 SHELLEXEC \
 		SHN SID SNDFILE SUPEREQ TTA VFS VFS_ZIP VTX WAVPACK \
 		WILDMIDI WMA
 
 PULSEAUDIO_DESC=	PulseAudio output plugin (unsupported)
-GUI_DESC=		Standard GUI plugin
 VFS_DESC=		HTTP streaming VFS plugin
 LASTFM_DESC=		Last.fm/Libre.fm scrobbler plugin
 ART_DESC=		Cover artwork loader plugin
@@ -51,7 +52,6 @@ ADPLUG_DESC=		AdPlug audio format (OPL2/OPL3) support
 HOTKEYS_DESC=		Local and global hotkeys support
 GME_DESC=		Chiptune music support (based on GME)
 DUMB_DESC=		D.U.M.B. plugin for MOD, S3M, etc.
-NOTIFY_DESC=		OSD notification support in GTKUI plugin
 WILDMIDI_DESC=		WildMIDI synthesizer plugin
 SC68_DESC=		sc68 Atari ST and Amiga player
 SHN_DESC=		Shorten waveform encoder support
@@ -60,14 +60,9 @@ M3U_DESC=		M3U and PLS playlist format support
 PSF_DESC=		AOSDK-based PSF(,QSF,SSF,DSF) plugin
 DSP_DESC=		High-quality sample rate conversion support
 MONO2STEREO_DESC=	Mono to stereo converter DSP plugin
-CONVERTER_DESC=		Plugin for converting files from/to any formats
 VFS_ZIP_DESC=		Play files directly from ZIP archives
-PLTBROWSER_DESC=	Playlist browser GUI plugin
 
 OPTIONS_SUB=		yes
-OPTIONS_RADIO+=		GUI
-OPTIONS_RADIO_GUI=	GTK2 GTK3
-GUI_IMPLIES=		CONVERTER
 
 OPTIONS_GROUP+=		MP3
 OPTIONS_GROUP_MP3=	MAD MPG123
@@ -81,23 +76,6 @@ MPG123_CONFIGURE_OFF=	--disable-libmpg123
 PULSEAUDIO_LIB_DEPENDS=	libpulse.so:audio/pulseaudio
 PULSEAUDIO_CONFIGURE_OFF=	--disable-pulse
 
-GTK2_USE=		gnome=gtk20,glib20
-GTK2_CONFIGURE_OFF=	--disable-gtk2
-GTK2_CONFIGURE_ON=	--enable-gtk2
-GTK2_VARS=		GTK_VER=2
-GTK2_IMPLIES=		GUI
-
-GTK3_USE=		gnome=gtk30
-GTK3_CONFIGURE_OFF=	--disable-gtk3
-GTK3_CONFIGURE_ON=	--enable-gtk3
-GTK3_VARS=		GTK_VER=3
-GTK3_IMPLIES=		GUI
-
-PLIST_SUB+=		GTK_VER=${GTK_VER}
-
-GUI_CONFIGURE_OFF=	--disable-gtk2 --disable-gtk3
-GUI_LIB_DEPENDS=	libjansson.so:devel/jansson
-
 VFS_LIB_DEPENDS=	libcurl.so:ftp/curl
 VFS_CONFIGURE_OFF=	--disable-vfs-curl
 
@@ -184,23 +162,15 @@ DSP_CONFIGURE_OFF=	--disable-src
 
 MONO2STEREO_CONFIGURE_OFF=	--disable-mono2stereo
 
-CONVERTER_CONFIGURE_OFF=	--disable-converter
-
 VFS_ZIP_LIB_DEPENDS=	libzip.so:archivers/libzip
 VFS_ZIP_CONFIGURE_OFF=	--disable-vfs-zip
 
 ALAC_CONFIGURE_OFF=		--disable-alac
 
-PLTBROWSER_CONFIGURE_OFF=	--disable-pltbrowser
-
 WMA_CONFIGURE_OFF=		--disable-wma
 
 .include <bsd.port.options.mk>
 
-.if !${PORT_OPTIONS:MGTK2} && !${PORT_OPTIONS:MGTK3}
-PORT_OPTIONS:=		${PORT_OPTIONS:NGUI}
-.endif
-
 .if !${PORT_OPTIONS:MMAD} && !${PORT_OPTIONS:MMPG123}
 CONFIGURE_ARGS+=	--disable-mp3
 PLIST_SUB+=		MP3="@comment "
diff --git a/audio/deadbeef/pkg-message b/audio/deadbeef/pkg-message
new file mode 100644
index 000000000000..211a665d6111
--- /dev/null
+++ b/audio/deadbeef/pkg-message
@@ -0,0 +1,9 @@
+[
+{ type: install
+  message: <<EOM
+This package installs core program only, GUI plugin is required for normal
+operation.  Please install the `audio/deadbeef-gui-plugins' port or package
+of desired GTK version flavor.
+EOM
+}
+]
diff --git a/audio/deadbeef/pkg-plist b/audio/deadbeef/pkg-plist
index cf5b645723d3..c932f30c47fd 100644
--- a/audio/deadbeef/pkg-plist
+++ b/audio/deadbeef/pkg-plist
@@ -1,7 +1,7 @@
 bin/deadbeef
 %%ART%%include/deadbeef/artwork.h
 include/deadbeef/deadbeef.h
-%%GUI%%include/deadbeef/gtkui_api.h
+include/deadbeef/gtkui_api.h
 %%ADPLUG%%lib/deadbeef/adplug.so
 %%CDDA%%lib/deadbeef/cdda.so
 %%FFAP%%lib/deadbeef/ffap.so
@@ -23,7 +23,6 @@ lib/deadbeef/oss.so
 %%MMS%%lib/deadbeef/mms.so
 %%SHN%%lib/deadbeef/ddb_shn.so
 %%SHELLEXEC%%lib/deadbeef/shellexec.so
-%%SHELLEXEC%%lib/deadbeef/shellexecui_gtk%%GTK_VER%%.so
 %%LASTFM%%lib/deadbeef/lastfm.so
 %%ART%%lib/deadbeef/artwork.so
 %%SID%%lib/deadbeef/sid.so
@@ -44,28 +43,12 @@ share/applications/deadbeef.desktop
 %%DOCSDIR%%/translators.txt
 %%DOCSDIR%%/help.ru.txt
 %%DOCSDIR%%/help.pt_BR.txt
-%%GUI%%lib/deadbeef/ddb_gui_GTK%%GTK_VER%%.so
 %%DSP%%lib/deadbeef/dsp_libsrc.so
 %%MONO2STEREO%%lib/deadbeef/ddb_mono2stereo.so
 %%M3U%%lib/deadbeef/m3u.so
 %%PSF%%lib/deadbeef/ddb_ao.so
-%%CONVERTER%%lib/deadbeef/converter.so
-%%CONVERTER%%lib/deadbeef/converter_gtk%%GTK_VER%%.so
-%%CONVERTER%%lib/deadbeef/convpresets/AAC_(Nero_FAAC).txt
-%%CONVERTER%%lib/deadbeef/convpresets/ALAC.txt
-%%CONVERTER%%lib/deadbeef/convpresets/FLAC_(compression_level_5).txt
-%%CONVERTER%%lib/deadbeef/convpresets/MP3_CBR_320_Kbps_(Lame).txt
-%%CONVERTER%%lib/deadbeef/convpresets/MP3_VBR_192Kbps_(Lame).txt
-%%CONVERTER%%lib/deadbeef/convpresets/MS_RIFF_WAV.txt
-%%CONVERTER%%lib/deadbeef/convpresets/MusePack.txt
-%%CONVERTER%%lib/deadbeef/convpresets/Ogg_FLAC.txt
-%%CONVERTER%%lib/deadbeef/convpresets/Ogg_Vorbis_(-q_5).txt
-%%CONVERTER%%lib/deadbeef/convpresets/Opus.txt
-%%CONVERTER%%lib/deadbeef/convpresets/TTA.txt
-%%CONVERTER%%lib/deadbeef/convpresets/WavPack.txt
 %%VFS_ZIP%%lib/deadbeef/vfs_zip.so
 %%ALAC%%lib/deadbeef/alac.so
-%%PLTBROWSER%%lib/deadbeef/pltbrowser_gtk%%GTK_VER%%.so
 %%MP3%%lib/deadbeef/mp3.so
 %%SC68%%lib/deadbeef/in_sc68.so
 %%WMA%%lib/deadbeef/wma.so