PORTNAME=	cmus
DISTVERSIONPREFIX=	v
DISTVERSION=	2.12.0
PORTREVISION=	3
CATEGORIES=	audio

MAINTAINER=	eduardo@FreeBSD.org
COMMENT=	Console-based music player with really cool features
WWW=		https://cmus.github.io/

LICENSE=	GPLv2+
LICENSE_FILE=	${WRKSRC}/COPYING

USES=		compiler:c11 cpe gmake iconv ncurses pkgconfig
USE_GITHUB=	yes

HAS_CONFIGURE=	yes
CONFIGURE_ARGS=	prefix=${PREFIX} mandir=${PREFIX}/share/man \
		exampledir=${EXAMPLESDIR}
# So the build does not use gcc for compiling ttman
CONFIGURE_ARGS+=	HOSTCC=${CC}

# Verbose build makes it easier to spot problems
MAKE_ARGS=	ICONV_CFLAGS="-I${ICONV_INCLUDE_PATH}" \
		ICONV_LIBS="-L${ICONV_PREFIX}/lib ${ICONV_LIB}" \
		V=2

# Disable all configure options first.  These will be overwritten by
# enabled port options later.  The args to cmus' configure script
# follow shell value semantics i.e. later assignments overwrite
# previous assignments.  The options here appear in the same order as
# ${WRKSRC}/configure --help.  Please keep it that way.
_CMUS_CONFIGURE_OPTS=	AAC ALSA AO ARTS CDDB CDIO COREAUDIO CUE DISCID	\
	FFMPEG FLAC JACK MAD MIKMOD BASS MODPLUG MP4 MPC MPRIS OPUS OSS	\
	PULSE ROAR SAMPLERATE SNDIO SUN TREMOR VORBIS VTX WAVEOUT	\
	WAVPACK WAV
.for opt in ${_CMUS_CONFIGURE_OPTS}
CONFIGURE_ARGS+=	CONFIG_${opt}=n
.endfor

# AAC, FLAC, MP4, OPUS, VORBIS and WAV handled by FFMPEG
# MPRIS (BASU) error:	https://github.com/cmus/cmus/issues/1124
#			https://github.com/cmus/cmus/issues/609

OPTIONS_DEFINE=		BASU EXAMPLES
OPTIONS_DEFAULT=	BASU FFMPEG MODPLUG OSS SNDIO
OPTIONS_SUB=	yes

OPTIONS_GROUP=	OUT IN
OPTIONS_GROUP_OUT=	AO JACK OSS PULSEAUDIO SNDIO
OPTIONS_GROUP_IN=	AAC CDIO CUE DISCID FFMPEG FLAC MAD MIKMOD	\
			MODPLUG MP4 OPUS SAMPLERATE TREMOR	\
			VORBIS WAV WAVPACK

BASU_DESC=	MPRIS protocol support via basu
DISCID_DESC=	libdiscid CDDA identification support
IN_DESC=	Input plugins
OUT_DESC=	Output plugins

AAC_CONFIGURE_ON=	CONFIG_AAC=y
AAC_LIB_DEPENDS=	libfaad.so:audio/faad

AO_CONFIGURE_ON=	CONFIG_AO=y
AO_LIB_DEPENDS=	libao.so:audio/libao

BASU_CONFIGURE_ON=	CONFIG_MPRIS=y
BASU_LIB_DEPENDS=	libbasu.so:devel/basu

CDIO_CONFIGURE_ON=	CONFIG_CDIO=y
CDIO_LIB_DEPENDS=	libcdio_cdda.so:sysutils/libcdio-paranoia \
			libcdio.so:sysutils/libcdio

CUE_CONFIGURE_ON=	CONFIG_CUE=y
CUE_LIB_DEPENDS=	libcue.so:textproc/libcue

DISCID_CONFIGURE_ON=	CONFIG_DISCID=y
DISCID_LIB_DEPENDS=	libdiscid.so:audio/libdiscid

FFMPEG_LIB_DEPENDS=	libavcodec.so:multimedia/ffmpeg
FFMPEG_CONFIGURE_ON=	CONFIG_FFMPEG=y

FLAC_CONFIGURE_ON=	CONFIG_FLAC=y
FLAC_LIB_DEPENDS=	libFLAC.so:audio/flac

JACK_CONFIGURE_ON=	CONFIG_JACK=y
JACK_LIB_DEPENDS=	libjack.so:audio/jack

MAD_CONFIGURE_ON=	CONFIG_MAD=y
MAD_LIB_DEPENDS=	libmad.so:audio/libmad

MIKMOD_CONFIGURE_ON=	CONFIG_MIKMOD=y
MIKMOD_LIB_DEPENDS=	libmikmod.so:audio/libmikmod

MODPLUG_CONFIGURE_ON=	CONFIG_MODPLUG=y
MODPLUG_LIB_DEPENDS=	libmodplug.so:audio/libmodplug

MP4_CONFIGURE_ON=	CONFIG_MP4=y
MP4_LIB_DEPENDS=	libfaad.so:audio/faad \
			libmp4v2.so:multimedia/mp4v2

OPUS_CONFIGURE_ON=	CONFIG_OPUS=y
OPUS_LIB_DEPENDS=	libopusfile.so:audio/opusfile

OSS_CONFIGURE_ON=	CONFIG_OSS=y

PULSEAUDIO_CONFIGURE_ON=	CONFIG_PULSE=y
PULSEAUDIO_LIB_DEPENDS=	libpulse.so:audio/pulseaudio

# Requires a port of RoarAudio
#ROAR_CONFIGURE_ON=	CONFIG_ROAR=y
#ROAR_LIB_DEPENDS=	????:????

SAMPLERATE_IMPLIES=	JACK
SAMPLERATE_CONFIGURE_ON=	CONFIG_SAMPLERATE=y
SAMPLERATE_LIB_DEPENDS=	libsamplerate.so:audio/libsamplerate

SNDIO_CONFIGURE_ON=	CONFIG_SNDIO=y
SNDIO_LIB_DEPENDS=	libsndio.so:audio/sndio

TREMOR_IMPLIES=	VORBIS
TREMOR_CONFIGURE_ON=	CONFIG_TREMOR=y
TREMOR_LIB_DEPENDS=	libvorbisidec.so:audio/libtremor

VORBIS_CONFIGURE_ON=	CONFIG_VORBIS=y
VORBIS_LIB_DEPENDS=	libvorbisfile.so:audio/libvorbis

# VTX requires libayemu which isn't ported yet
#VTX_CONFIGURE_ON=	CONFIG_VTX=y
#VTX_LIB_DEPENDS=	libayemu.so:?????

WAV_CONFIGURE_ON=	CONFIG_WAV=y

WAVPACK_CONFIGURE_ON=	CONFIG_WAVPACK=y
WAVPACK_LIB_DEPENDS=	libwavpack.so:audio/wavpack

post-patch:
# Doc/cmus.txt is used to generate the man pages.  Fix paths to point
# to the correct directories.
	@${REINPLACE_CMD} \
		-e 's,/usr/share/doc/cmus/examples,${EXAMPLESDIR},g' \
		-e 's,/usr/share/cmus,${DATADIR},g' \
		${WRKSRC}/Doc/cmus.txt

post-configure:
# Prevent passing wrong flags from devel/ncurses' pkg-config file to the build
	@${REINPLACE_CMD} -e 's|-D_POSIX_C_SOURCE=200112L||g; s|-D_XOPEN_SOURCE=600||g' \
		${WRKSRC}/config.mk

post-install:
	@${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/cmus*
	@${FIND} ${STAGEDIR}${PREFIX}/lib -path '${STAGEDIR}${PREFIX}/lib/cmus/*' \
		-name '*.so*' -exec ${STRIP_CMD} {} +
# Install bash and zsh completion files
	${MKDIR} ${STAGEDIR}${PREFIX}/etc/bash_completion.d
	${INSTALL_DATA} ${WRKSRC}/contrib/cmus.bash-completion \
		${STAGEDIR}${PREFIX}/etc/bash_completion.d/_cmus.bash
	${MKDIR} ${STAGEDIR}${PREFIX}/share/zsh/site-functions
	${INSTALL_DATA} ${WRKSRC}/contrib/_cmus \
		${STAGEDIR}${PREFIX}/share/zsh/site-functions/_cmus

.include <bsd.port.mk>
