pure-data/portmidi/update.sh

#! /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