# Template file for 'cabbage'
pkgname=cabbage
version=2.5.0
revision=2
# specified in buildLinux.sh
_jucever=5.4.7
_vstsdkver=3611_22_10_2018_build_34
build_wrksrc="cabbage"
hostmakedepends="pkg-config xorg-server-xvfb"
makedepends="libfreeglut-devel libcurl-devel jack-devel libXcomposite-devel
 libXrandr-devel libXcursor-devel libX11-devel libXinerama-devel MesaLib-devel
 gtk+3-devel webkit2gtk-devel csound alsa-lib-devel libsndfile-devel xvfb-run"
depends="csound"
short_desc="Framework for audio software development"
maintainer="Olga U <me@laserbat.pw>"
license="GPL-3.0-or-later"
homepage="https://cabbageaudio.com/"
distfiles="https://github.com/WeAreROLI/JUCE/archive/${_jucever}.tar.gz
 https://github.com/rorywalsh/cabbage/archive/v${version}.tar.gz
 https://cabbageaudio.com/beta/heads.zip
 https://download.steinberg.net/sdk_downloads/vstsdk${_vstsdkver}.zip"
checksum="0f446cf09177e559d2f2e9a77a78faed611cc869e219a7dc859a6e9b72eca64d
 68d2868ee72092ff1f809d472f561f5317512be91f1274390386afea248e78a2
 6167199d752fa301e93f1383f9ad700ef646611db53c97d7433fffdb19765e29
 de64ff1b5b40a7fdc2de873e80d911ffa9fd6b82435a555dda1e8edc267d1fa3"
nocross="Projucer in template uses compiled binary"

# vsx accel stuff from libpng is not shipped
case "$XBPS_TARGET_MACHINE" in
	ppc*) CXXFLAGS="-DPNG_POWERPC_VSX_OPT=0" ;;
esac

if [ "$XBPS_TARGET_NO_ATOMIC8" ]; then
	LDFLAGS=" -latomic"
fi

# without TARGET_ARCH, the build system will assume -march=native,
# which is wrong as we're building a generic package and -march does
# not even always work
case "$XBPS_TARGET_MACHINE" in
	i686*) _tarch="-mtune=i686";;
	x86_64*) _tarch="-march=x86-64";;
	aarch64*) _tarch="-march=armv8-a";;
	armv5te*) _tarch="-march=armv5te";;
	armv6*) _tarch="-march=armv6";;
	armv7*) _tarch="-march=armv7-a";;
	ppc64le*) _tarch="-mcpu=powerpc64le";;
	ppc64*) _tarch="-mcpu=970";;
	ppc*) _tarch="-mcpu=powerpc";;
	mips*) _tarch="-mtune=mips32r2";;
	*) broken="Unsupported architecture";;
esac

case "$XBPS_TARGET_MACHINE" in
	*-musl) makedepends+=" libexecinfo-devel"
		broken="error: '_NL_IDENTIFICATION_LANGUAGE' was not declared in this scope" ;;
esac

Projucer() {
	# This is needed as a workaround for a bug in Projucer
	# https://github.com/WeAreROLI/JUCE/issues/422
	# The HOME variable is spoofed because it looks for headers in
	# ~/SDKs/ (path hardcoded)
	# TODO: use xvfb-run script for testing

	xvfb-run \
		"${wrksrc}/JUCE/extras/Projucer/Builds/LinuxMakefile/build/Projucer"  "$@"
}

post_extract() {
	mkdir SDKs
	mv VST_SDK SDKs
	mv vst2.x SDKs/VST_SDK/VST3_SDK/pluginterfaces
	mv cabbage-${version} cabbage
	mv JUCE-${_jucever} JUCE
	cd "${wrksrc}/cabbage"

	# There are lots of hardcoded paths that need to be rewritten
	vsed -e 's@sourcecode/@@' -i CabbageLite.jucer

	for f in *jucer; do
		vsed -e "s@/usr/local/include/csound@/usr/include/csound@g" \
			 -e "s@/usr/local/lib@/usr/lib@g" \
			 -i "$f"
	done

	vsed -e "s|/usr/local/include/csound|/usr/include/csound|g" \
		 -i Builds/LinuxMakefile/buildCabbage

	vsed -e '/opcodeFile\ +=/s#/#/../share/doc/cabbage/#' \
		 -i Source/CodeEditor/CabbageCodeEditor.cpp

	# Fix compilation on i686
	vsed -e 's/__sigemptyset/sigemptyset/' \
		 -i ../JUCE/modules/juce_audio_formats/codecs/flac/libFLAC/cpu.c

	vsed -e "s/JUCER_ENABLE_GPL_MODE 0/JUCER_ENABLE_GPL_MODE 1/" \
		 -i ../JUCE/extras/Projucer/JuceLibraryCode/AppConfig.h
}

do_build() {
	local oldhome=$HOME
	HOME=$wrksrc
	cd "${wrksrc}/JUCE/extras/Projucer/Builds/LinuxMakefile/"
	make ${makejobs} TARGET_ARCH="${_tarch}"

	cd "${wrksrc}/cabbage/Builds/LinuxMakefile"

	Projucer --resave ../../CabbageIDE.jucer
	mv Makefile MakeCabbageIDE
	make -f MakeCabbageIDE ${makejobs} CONFIG=Release TARGET_ARCH="${_tarch}"

	Projucer --resave ../../CabbagePlugin.jucer
	mv Makefile MakePluginEffect
	make -f MakePluginEffect ${makejobs} CONFIG=Release TARGET_ARCH="${_tarch}"
	mv ./build/CabbagePlugin.so ./build/CabbagePluginEffect.so

	Projucer --resave ../../CabbagePluginSynth.jucer
	mv Makefile MakePluginSynth
	make -f MakePluginSynth ${makejobs} CONFIG=Release TARGET_ARCH="${_tarch}"
	mv ./build/CabbagePlugin.so ./build/CabbagePluginSynth.so

	Projucer --resave ../../CabbageLite.jucer
	cp -r ../../../JUCE/modules/juce_audio_plugin_client/ ../../JuceLibraryCode/modules/
	mv Makefile MakeCabbageLite
	make -f MakeCabbageLite ${makejobs} CONFIG=Release TARGET_ARCH="${_tarch}"
	HOME=$oldhome
}

do_install() {
	cd "${wrksrc}/cabbage/Builds/LinuxMakefile"

	find ../../Examples -name '.DS_Store' -delete
	find ../../Examples -name '*_Log.txt' -delete

	vbin build/Cabbage
	vbin build/CabbageLite

	vmkdir usr/lib/vst
	vinstall build/CabbagePluginEffect.so 755 usr/lib/vst
	vinstall build/CabbagePluginSynth.so 755 usr/lib/vst

	vdoc ../opcodes.txt

	vinstall ../../Images/cabbage.png 644  usr/share/icons/hicolor/512x512/apps/
	vinstall Cabbage.desktop 644 usr/share/applications/
	vinstall CabbageLite.desktop 644 usr/share/applications/

	vmkdir usr/share/doc/cabbage/examples
	vcopy '../../Examples/*' usr/share/doc/cabbage/examples/
}
