#! /bin/bash
#
# this script automatically downloads and copies the portmidi library for Pd
#
# uses svn trunk version by default, set checkout revision # using
# first argument:
#
# ./update.sh 239
#
# Dan Wilcox danomatika.com 2018
#
# exit on error
set -e
##### VARIABLES
SRC=portmidi-svn
DEST=portmidi
# commandline arg: version is svn revision #
VERSION=""
##### FUNCTIONS
# copy .h & .c files from $SRC to $DEST, ignore missing file errors
function copysrc {
mkdir -p $DEST/$1
cp -v $SRC/$1/*.h $DEST/$1 2>/dev/null || :
cp -v $SRC/$1/*.c $DEST/$1 2>/dev/null || :
}
##### GO
# append revision number to checkout rule ala @###
if [ $# -gt 0 ] ; then
VERSION="@$1"
fi
# move to this scripts dir
cd $(dirname $0)
# checkout source
echo "==== Downloading portmidi $VERSION"
if [ -d $SRC ] ; then
rm -rf $SRC
fi
svn checkout https://svn.code.sf.net/p/portmedia/code/portmidi/trunk${VERSION} $SRC
# apply patches, note: this probably can't handle filenames with spaces
# temp disable exit on error since the exit value of patch --dry-run is used
echo "==== Applying any patches"
for p in $(find ./patches -type f -name "*.patch") ; do
cd $SRC
set +e
(patch -p0 -N --silent --dry-run --input "../${p}" > /dev/null 2>&1)
set -e
if [[ $? == 0 ]] ; then
patch -p0 < "../${p}"
fi
cd ../
done
echo "==== Copying"
# copy what we need, namely the main headers and relevant sources
copysrc pm_common
copysrc pm_linux
copysrc pm_mac
copysrc pm_win
copysrc porttime
cp -v $SRC/license.txt $DEST/
# make sure the source-code is not executable
find "${DEST}" -type f -perm -u+x "(" -name "*.h" -or -name "*-c" ")" -exec chmod -x {} +
# cleanup
rm -rf $SRC