PortMidi: new recipe (#7262)

This commit is contained in:
Joachim Mairböck
2022-10-19 19:26:41 +02:00
committed by GitHub
parent 62629b5b9b
commit cd1370fc95
2 changed files with 201 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
resource app_version {
major = @MAJOR@,
middle = @MIDDLE@,
minor = @MINOR@,
variety = B_APPV_FINAL,
internal = 0,
short_info = "Preferences app to set default PortMidi devices",
long_info = "PortMidi is a cross-platform MIDI input/output library."
};
resource app_signature "application/x-vnd.PortMidi.pmdefaults";

View File

@@ -0,0 +1,189 @@
SUMMARY="Cross-Platform MIDI IO"
DESCRIPTION="PortMidi is a cross-platform MIDI input/output library."
HOMEPAGE="https://github.com/PortMidi/portmidi"
COPYRIGHT="1999-2000 Ross Bencina and Phil Burk
2001-2009 Roger B. Dannenberg"
LICENSE="MIT"
REVISION="1"
srcGitRev="7db20989f1571b27bd01cf9418361e988bdcf99a"
SOURCE_URI="https://github.com/PortMidi/portmidi/archive/$srcGitRev.tar.gz"
CHECKSUM_SHA256="96872e3c89339c9cbe44d5d86de1745ced7d803563a3ef71840aa9b120497e60"
SOURCE_DIR="portmidi-$srcGitRev"
ADDITIONAL_FILES="pmdefaults.rdef.in"
ARCHITECTURES="all"
SECONDARY_ARCHITECTURES="x86"
portVersionCompat="$portVersion compat >= ${portVersion%%.*}"
PROVIDES="
portmidi$secondaryArchSuffix = $portVersion
lib:libportmidi$secondaryArchSuffix = $portVersionCompat
"
REQUIRES="
haiku${secondaryArchSuffix}
"
PROVIDES_devel="
portmidi${secondaryArchSuffix}_devel = $portVersion
devel:libportmidi$secondaryArchSuffix = $portVersionCompat
"
REQUIRES_devel="
portmidi$secondaryArchSuffix == $portVersion base
"
PROVIDES_tools="
portmidi${secondaryArchSuffix}_tools = $portVersion
cmd:portmidi_fast$secondaryArchSuffix = $portVersion
cmd:portmidi_fastrcv$secondaryArchSuffix = $portVersion
cmd:portmidi_latency$secondaryArchSuffix = $portVersion
cmd:portmidi_midiclock$secondaryArchSuffix = $portVersion
cmd:portmidi_midithread$secondaryArchSuffix = $portVersion
cmd:portmidi_midithru$secondaryArchSuffix = $portVersion
cmd:portmidi_mm$secondaryArchSuffix = $portVersion
cmd:portmidi_multivirtual$secondaryArchSuffix = $portVersion
cmd:portmidi_pmlist$secondaryArchSuffix = $portVersion
cmd:portmidi_qtest$secondaryArchSuffix = $portVersion
cmd:portmidi_recvvirtual$secondaryArchSuffix = $portVersion
cmd:portmidi_sendvirtual$secondaryArchSuffix = $portVersion
cmd:portmidi_sysex$secondaryArchSuffix = $portVersion
cmd:portmidi_testio$secondaryArchSuffix = $portVersion
cmd:portmidi_virttest$secondaryArchSuffix = $portVersion
"
REQUIRES_tools="
haiku$secondaryArchSuffix
portmidi$secondaryArchSuffix == $portVersion base
"
BUILD_REQUIRES="
haiku${secondaryArchSuffix}_devel
"
BUILD_PREREQUIRES="
cmd:cmake
cmd:gcc$secondaryArchSuffix
cmd:ld$secondaryArchSuffix
cmd:make
cmd:pkg_config$secondaryArchSuffix
"
# the java bindings do not work with x86_gcc2 because java is not available for it
# (it would build but fail at runtime with an "UnsatisfiedLinkError: missing library")
if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
PROVIDES_devel+="
devel:libpmjni$secondaryArchSuffix = $portVersionCompat
"
REQUIRES_devel+="
portmidi${secondaryArchSuffix}_java == $portVersion
"
SUMMARY_java="Cross-Platform MIDI IO (Java bindings)"
PROVIDES_java="
portmidi${secondaryArchSuffix}_java = $portVersion
lib:libpmjni$secondaryArchSuffix = $portVersionCompat
"
REQUIRES_java="
haiku$secondaryArchSuffix
portmidi$secondaryArchSuffix == $portVersion base
cmd:java
java:runtime
"
BUILD_REQUIRES+="
java:environment
"
BUILD_PREREQUIRES+="
cmd:javac
"
fi
BUILD()
{
mkdir -p build
cd build
extraCMakeArgs=
if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
source /system/data/profile.d/openjdk.sh
extraCMakeArgs="-DBUILD_JAVA_NATIVE_INTERFACE=ON -DBUILD_PMDEFAULTS=ON"
fi
cmake .. -DCMAKE_BUILD_TYPE=Release $cmakeDirArgs \
-DBUILD_PORTMIDI_TESTS=ON $extraCMakeArgs
make $jobArgs
}
INSTALL()
{
cd build
make install
cd ..
if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
cp pm_java/pmdefaults/pmdefaults.jar $libDir
mkdir $preferencesDir
# the included pmdefaults script would need changes anyway, so we just create our own
cat <<- EOF > "$preferencesDir/PortMidi Setup"
#!/bin/sh
java -Djava.library.path=$libDir -jar $libDir/pmdefaults.jar > /dev/null
EOF
chmod +x "$preferencesDir/PortMidi Setup"
local MAJOR="`echo "$portVersion" | cut -d. -f1`"
local MIDDLE="`echo "$portVersion" | cut -d. -f2`"
local MINOR="`echo "$portVersion" | cut -d. -f3 | cut -d~ -f1`"
sed \
-e "s|@MAJOR@|$MAJOR|" \
-e "s|@MIDDLE@|$MIDDLE|" \
-e "s|@MINOR@|$MINOR|" \
$portDir/additional-files/pmdefaults.rdef.in \
> pmdefaults.rdef
rc pmdefaults.rdef
settype -t application/x-vnd.Be-elfexecutable "$preferencesDir/PortMidi Setup"
resattr -o "$preferencesDir/PortMidi Setup" pmdefaults.rsrc
addPreferencesDeskbarSymlink "$preferencesDir/PortMidi Setup"
prepareInstalledDevelLib libpmjni
# the java bindings need an unversioned libpmjni.so
ln -s libpmjni.so.${portVersion%~*} $libDir/libpmjni.so
fi
# install test tools
mkdir -p $binDir
for tool in fast fastrcv latency midiclock midithread midithru mm multivirtual pmlist \
qtest recvvirtual sendvirtual sysex testio virttest
do
cp build/pm_test/$tool $binDir/portmidi-$tool
done
prepareInstalledDevelLib libportmidi
fixPkgconfig
packageEntries devel \
$developDir \
$libDir/cmake
packageEntries tools \
$binDir
if [ "$effectiveTargetArchitecture" != x86_gcc2 ]; then
packageEntries java \
$libDir/libpmjni.so* \
$libDir/pmdefaults.jar \
"$preferencesDir/PortMidi Setup" \
$dataDir # this contains the Deskbar symlink
fi
}
TEST()
{
# the tests are individual commands that need to be run interactively
true
}