# Copyright 2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI="7"

inherit readme.gentoo-r1

DESCRIPTION="Video game music (VGM) file command-line player"
HOMEPAGE="http://vgmrips.net/forum/viewtopic.php?t=112"

# VGMPlay licensing can only be referred to as "extreme." Frankly, the authors
# themselves do not appear to particularly care about licensing or even know
# which licenses apply and when to VGMPlay. The "VGMPlay/licenses/List.txt"
# file purports to be the canonical list of all licenses associated with
# third-party VGMPlay components but nonetheless lists three components for
# which the license is literally unknown:
#
#     Ootake - ?
#     MEKA - ?
#     in_wsr - ?
#
# VGMPlay itself appears to remain unlicensed.
#
# I've never encountered a licensing scenario this painfully disfunctional. If
# even the principal developers of VGMPlay cannot be bothered to either license
# their software *OR* attribute third-party software embedded in their
# software, we certainly cannot be expected to do so. We instead note that,
# since numerous VGMPlay components are GPL 2-licensed, the infectious virality
# of the GPL requires extending that license to VGMPlay itself. Ergo, GPL 2.
#
# See also the following outstanding VGMPlay issue:
#     https://github.com/vgmrips/vgmplay/issues/47
LICENSE="GPL-2"
SLOT="0"

IUSE="alsa ao debug opl pulseaudio"
REQUIRED_USE=""

DEPEND="
	sys-libs/zlib
	virtual/libc
	ao? ( media-libs/libao )
"

# VGMPlay indirectly supports ALSA and PulseAudio via OSS runtime emulation in
# the high-level "vgm-player" script. Something is better than nothing.
#
# Note that, although the "pulseaudio' package provides an "oss" USE flag, this
# flag has been deprecated; since this package now unconditionally installs
# "padsp", the PulseAudio OSS wrapper, merely installing "pulseaudio" suffices.
RDEPEND="${DEPEND}
	alsa? ( media-libs/alsa-oss )
	pulseaudio? ( media-sound/pulseaudio )
"

if [[ ${PV} == 9999 ]]; then
	inherit git-r3

	EGIT_REPO_URI="https://github.com/vgmrips/vgmplay"
	KEYWORDS=""
else
	SRC_URI="https://github.com/vgmrips/vgmplay/archive/${PV}.tar.gz"
	KEYWORDS="~amd64 ~x86"
fi

# Prevent the "readme.gentoo-r1" eclass from autoformatting documentation via
# the external "fmt" and "echo -e" commands for readability.
DISABLE_AUTOFORMATTING=1

#FIXME: Uncomment this line to test "readme.gentoo-r1" documentation.
#FORCE_PRINT_ELOG=1

src_prepare() {
	default

	# Remove the bundled "zlib" directory.
	rm -r VGMPlay/zlib || die '"rm" failed.'

	# Strip hardcoded ${CFLAGS}.
	sed -e '/CFLAGS := -O3/s~ -O3~~' \
		-i VGMPlay/Makefile || die '"sed" failed.'
}

src_compile() {
	# List of all options to be passed to VGMPlay's makefile, globalized to
	# allow reuse in the src_install() phase.
	declare -ga VGMPLAY_MAKE_OPTIONS
	VGMPLAY_MAKE_OPTIONS=(
		PREFIX="${EROOT}/"usr
		DESTDIR="${D}"
		USE_LIBAO=$(usex ao 1 0)
		DEBUG=$(usex debug 1 0)
		DISABLE_HWOPL_SUPPORT=$(usex opl 0 1)
	)

	# VGMPlay only provides a GNU "Makefile"; notably, no autotools-based
	# "configure" script is provided.
	emake --directory=VGMPlay "${VGMPLAY_MAKE_OPTIONS[@]}"
}

src_install() {
	# Absolute path of the system-wide VGMPlay directory.
	VGMPLAY_DIR="${EPREFIX}/usr/share/${PN}"

	# Absolute path of the system-wide VGMPlay configuration file.
	VGMPLAY_CFG_FILE="${EPREFIX}/etc/vgmplay.ini"

	# Create all directories assumed to exist by this makefile.
	exeinto usr/bin

	# Install all VGMPlay commands (e.g., "vgm-player") and manpages.
	emake --directory=VGMPlay play_install "${VGMPLAY_MAKE_OPTIONS[@]}"

	# Link this configuration file from its default non-standard path into a
	# more standard directory.
	dosym "${VGMPLAY_DIR}/vgmplay.ini" "${VGMPLAY_CFG_FILE}"

	# Install all remaining documentation.
	dodoc VGMPlay/VGMPlay*.txt

	# Contents of the "/usr/share/doc/${P}/README.gentoo" file to be installed.
	DOC_CONTENTS="VGMPlay supports audio files of filetype \"vgm\" and \"vgz\"
(gzip-compressed \"vgm\") and \"m3u\" playlists of these files, available for
effectively all sequenced video game music from the online archive at:

	http://vgmrips.net

To enable support for files ripped from devices containing OPL4 sound chips
(e.g., MSX), manually download and copy the \"yrw801.rom\" file into the
system-wide \"${VGMPLAY_DIR}\" directory:

	sudo mv yrw801.rom ${VGMPLAY_DIR}/

To play supported files, run the \"vgm-player\" wrapper:

	# See the \"vgmplay\" manpage for key bindings.
	vgm-player bubbleman.vgz

To convert supported files to another format, pipe the \"vgm2pcm\" command into
a suitable audio encoder:

	# Convert VGZ to MP3 via \"lame\".
	vgm2pcm bubbleman.vgz - | lame -r - -

VGMPlay is configurable via the system-wide \"${VGMPLAY_CFG_FILE}\" file."

	# Install this document.
	readme.gentoo_create_doc
}

pkg_postinst() {
	# Print the "README.gentoo" file installed above on first installation.
	readme.gentoo_print_elog
}