1SUMMARY="Cross-Platform MIDI IO"
2DESCRIPTION="PortMidi is a cross-platform MIDI input/output library."
3HOMEPAGE="https://github.com/PortMidi/portmidi"
4COPYRIGHT="1999-2000 Ross Bencina and Phil Burk
5	2001-2009 Roger B. Dannenberg"
6LICENSE="MIT"
7REVISION="2"
8SOURCE_URI="https://github.com/PortMidi/portmidi/archive/refs/tags/v$portVersion.tar.gz"
9CHECKSUM_SHA256="64893e823ae146cabd3ad7f9a9a9c5332746abe7847c557b99b2577afa8a607c"
10SOURCE_DIR="portmidi-$portVersion"
11ADDITIONAL_FILES="pmdefaults.rdef.in"
12
13ARCHITECTURES="all"
14SECONDARY_ARCHITECTURES="x86"
15
16# This uses the wrong libVersion from upstream - change this back to $portVersion when fixed
17libVersion="2.0.3"
18libVersionCompat="$libVersion compat >= ${libVersion%%.*}"
19
20PROVIDES="
21	portmidi$secondaryArchSuffix = $portVersion
22	lib:libportmidi$secondaryArchSuffix = $libVersionCompat
23	"
24REQUIRES="
25	haiku${secondaryArchSuffix}
26	"
27
28PROVIDES_devel="
29	portmidi${secondaryArchSuffix}_devel = $portVersion
30	devel:libportmidi$secondaryArchSuffix = $libVersionCompat
31	"
32REQUIRES_devel="
33	portmidi$secondaryArchSuffix == $portVersion base
34	"
35
36PROVIDES_tools="
37	portmidi${secondaryArchSuffix}_tools = $portVersion
38	cmd:portmidi_fast$secondaryArchSuffix = $portVersion
39	cmd:portmidi_fastrcv$secondaryArchSuffix = $portVersion
40	cmd:portmidi_latency$secondaryArchSuffix = $portVersion
41	cmd:portmidi_midiclock$secondaryArchSuffix = $portVersion
42	cmd:portmidi_midithread$secondaryArchSuffix = $portVersion
43	cmd:portmidi_midithru$secondaryArchSuffix = $portVersion
44	cmd:portmidi_mm$secondaryArchSuffix = $portVersion
45	cmd:portmidi_multivirtual$secondaryArchSuffix = $portVersion
46	cmd:portmidi_pmlist$secondaryArchSuffix = $portVersion
47	cmd:portmidi_qtest$secondaryArchSuffix = $portVersion
48	cmd:portmidi_recvvirtual$secondaryArchSuffix = $portVersion
49	cmd:portmidi_sendvirtual$secondaryArchSuffix = $portVersion
50	cmd:portmidi_sysex$secondaryArchSuffix = $portVersion
51	cmd:portmidi_testio$secondaryArchSuffix = $portVersion
52	cmd:portmidi_virttest$secondaryArchSuffix = $portVersion
53	"
54REQUIRES_tools="
55	haiku$secondaryArchSuffix
56	portmidi$secondaryArchSuffix == $portVersion base
57	"
58
59BUILD_REQUIRES="
60	haiku${secondaryArchSuffix}_devel
61	"
62
63BUILD_PREREQUIRES="
64	cmd:cmake
65	cmd:gcc$secondaryArchSuffix
66	cmd:ld$secondaryArchSuffix
67	cmd:make
68	cmd:pkg_config$secondaryArchSuffix
69	"
70
71# the java bindings do not work with x86_gcc2 because java is not available for it
72# (it would build but fail at runtime with an "UnsatisfiedLinkError: missing library")
73if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
74	PROVIDES_devel+="
75		devel:libpmjni$secondaryArchSuffix = $libVersionCompat
76		"
77	REQUIRES_devel+="
78		portmidi${secondaryArchSuffix}_java == $portVersion
79		"
80
81	SUMMARY_java="Cross-Platform MIDI IO (Java bindings)"
82	PROVIDES_java="
83		portmidi${secondaryArchSuffix}_java = $portVersion
84		lib:libpmjni$secondaryArchSuffix = $libVersionCompat
85		"
86	REQUIRES_java="
87		haiku$secondaryArchSuffix
88		portmidi$secondaryArchSuffix == $portVersion base
89		java:runtime >= 17
90		"
91
92	BUILD_REQUIRES+="
93		java:environment >= 17
94		"
95
96	BUILD_PREREQUIRES+="
97		cmd:javac >= 17
98		"
99fi
100
101BUILD()
102{
103	mkdir -p build
104	cd build
105
106	extraCMakeArgs=
107	if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
108		source /system/data/profile.d/openjdk.sh
109		extraCMakeArgs="-DBUILD_JAVA_NATIVE_INTERFACE=ON -DBUILD_PMDEFAULTS=ON"
110	fi
111	cmake .. -DCMAKE_BUILD_TYPE=Release $cmakeDirArgs \
112		-DBUILD_PORTMIDI_TESTS=ON $extraCMakeArgs
113	make $jobArgs
114}
115
116INSTALL()
117{
118	cd build
119	make install
120	cd ..
121
122	if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
123		cp pm_java/pmdefaults/pmdefaults.jar $libDir
124
125		mkdir $preferencesDir
126
127		# the included pmdefaults script would need changes anyway, so we just create our own
128		cat <<- EOF > "$preferencesDir/PortMidi Setup"
129		#!/bin/sh
130		$JAVA_HOME/bin/java -Djava.library.path=$libDir -jar $libDir/pmdefaults.jar
131		EOF
132
133		chmod +x "$preferencesDir/PortMidi Setup"
134
135		local MAJOR="`echo "$portVersion" | cut -d. -f1`"
136		local MIDDLE="`echo "$portVersion" | cut -d. -f2`"
137		local MINOR="`echo "$portVersion" | cut -d. -f3 | cut -d~ -f1`"
138		sed \
139			-e "s|@MAJOR@|$MAJOR|" \
140			-e "s|@MIDDLE@|$MIDDLE|" \
141			-e "s|@MINOR@|$MINOR|" \
142			$portDir/additional-files/pmdefaults.rdef.in \
143				> pmdefaults.rdef
144
145		rc pmdefaults.rdef
146		settype -t application/x-vnd.Be-elfexecutable "$preferencesDir/PortMidi Setup"
147		resattr -o "$preferencesDir/PortMidi Setup" pmdefaults.rsrc
148
149		addPreferencesDeskbarSymlink "$preferencesDir/PortMidi Setup"
150
151		prepareInstalledDevelLib libpmjni
152
153		# the java bindings need an unversioned libpmjni.so
154		ln -s libpmjni.so.${portVersion%~*} $libDir/libpmjni.so
155	fi
156
157	# install test tools
158	mkdir -p $binDir
159	for tool in fast fastrcv latency midiclock midithread midithru mm multivirtual pmlist \
160		qtest recvvirtual sendvirtual sysex testio virttest
161	do
162		cp build/pm_test/$tool $binDir/portmidi-$tool
163	done
164
165	prepareInstalledDevelLib libportmidi
166
167	fixPkgconfig
168
169	packageEntries devel \
170		$developDir \
171		$libDir/cmake
172
173	packageEntries tools \
174		$binDir
175
176	if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
177		packageEntries java \
178			$libDir/libpmjni.so* \
179			$libDir/pmdefaults.jar \
180			"$preferencesDir/PortMidi Setup" \
181			$dataDir # this contains the Deskbar symlink
182	fi
183}
184
185TEST()
186{
187	# the tests are individual commands that need to be run interactively
188	true
189}
190