diff --git a/.travis.yml b/.travis.yml
index 284c7a9..714a538 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -43,6 +43,13 @@ jobs:
services:
- xvfb
+ # macOS native build
+ - os: osx
+ compiler: gcc
+ env:
+ - TARGET="macos"
+ - PLUGINS="abgate artyfx blop caps fomp mda"
+
before_install:
- bash ${TRAVIS_BUILD_DIR}/.travis/before_install.sh
@@ -62,6 +69,7 @@ deploy:
secure: "xKXvMWEvj92IsFINpGlYEJeidLRoTeLIwrWVO06UrNNVCPiWC9z64Xthx/0xqQEv+2PA5GLkh9lnTm7aqQKbMNiVj4sQCcg3sVXEhkGkr27KNjHuQiFao+IeotU6bVTObzGhNR+US3LkRK9RSSvnmDBSUQB16+YgG6PZyXH7mQfoLycQQ8z24hLc4P2gGXbgd23viqZVxBh15HBm8jSm0q5Y5JZ2D/ETQWIijv+Cd7f3Q4j989Q4ZULiDyPs6gMR6Klr85Z8iNXEZRCw/dJ800IrWV9tetJFZFVOG2nWATPSFD9L1DLlJtD0tPJjk/n7DpUEivdrrLgm2C1MaTfDWQU7OOktkcNv6oUB++hWqD/d9bj1teSu9lrUkAS4QPWGWgsMQH/eWquoS6vQOE7ERAHTDgbsS1aPxnuWyG2lyefbSEJCXBOpbcWLAfAr3cdkS+QhFHZzKvZLwJZFkKR0FEKKPkt+CViLmtSbeM7uFRhX3B4uA9EByZonlvupgKfyt/WKoqpsb1hF16tVrZOmTFf2/btLOw8PUD1opAx0aXjH+XcWH6y93wsP41E3VMO/gc8jc7npa+JsMDXaHFf/DMQvj9rVF8deHoshx8Sl3n0RpEhMyV+lXKKfewryqnfWNGak7wNQQhFr4Xqv6mleBFAX1Miy12KkzYxltfwi53o="
file_glob: true
file: setup/inno/PawPaw-*.exe
+ file: setup/macos/PawPaw-*.pkg
skip_cleanup: true
on:
tags: true
diff --git a/.travis/before_install.sh b/.travis/before_install.sh
index 0ca94eb..c062885 100644
--- a/.travis/before_install.sh
+++ b/.travis/before_install.sh
@@ -2,6 +2,11 @@
set -e
+# nothing to do for macOS native
+if [ "${TARGET}" = "macos" ]; then
+ exit 0
+fi
+
sudo add-apt-repository -y ppa:kxstudio-debian/kxstudio
sudo add-apt-repository -y ppa:kxstudio-debian/toolchain
diff --git a/.travis/install.sh b/.travis/install.sh
index bf17525..caaf399 100755
--- a/.travis/install.sh
+++ b/.travis/install.sh
@@ -2,6 +2,12 @@
set -e
+# Special macOS native handling
+if [ "${TARGET}" = "macos" ]; then
+ brew install cmake jq || true
+ exit 0
+fi
+
# Special handling for caching deb archives
if [ "$(ls ${HOME}/PawPawBuilds/debs | wc -l)" -ne 0 ]; then
sudo cp ${HOME}/PawPawBuilds/debs/*.deb /var/cache/apt/archives/
diff --git a/pack-plugins.sh b/pack-plugins.sh
index 8e34e29..96f8f15 100755
--- a/pack-plugins.sh
+++ b/pack-plugins.sh
@@ -16,6 +16,8 @@ fi
shift
+VERSION=$(cat VERSION)
+
# ---------------------------------------------------------------------------------------------------------------------
source setup/check_target.sh
@@ -45,19 +47,25 @@ function create_innosetup_exe {
local pkgdir="${PAWPAW_BUILDDIR}/innosetup-6.0.5"
local iscc="${pkgdir}/drive_c/InnoSeup/ISCC.exe"
- echo "#define VERSION \"$(cat VERSION)\"" > /tmp/pawpaw/version.iss
+ echo "#define VERSION \"${VERSION}\"" > /tmp/pawpaw/version.iss
env WINEARCH="${PAWPAW_TARGET}" WINEPREFIX="${pkgdir}" wine "${iscc}" "setup/inno/${PAWPAW_TARGET}.iss"
}
# ---------------------------------------------------------------------------------------------------------------------
+rm -rf /tmp/pawpaw
+mkdir /tmp/pawpaw
+
if [ "${WIN32}" -eq 1 ]; then
download_and_install_innosetup
- rm -rf /tmp/pawpaw
- mkdir /tmp/pawpaw
touch /tmp/pawpaw/components.iss
touch /tmp/pawpaw/lv2bundles.iss
PAWPAW_WINE_LV2DIR="Z:$(echo ${PAWPAW_PREFIX} | tr -t '/' '\\')\\lib\\lv2\\"
+
+elif [ "${MACOS}" -eq 1 ] && [ "${MACOS_OLD}" -eq 0 ]; then
+ touch /tmp/pawpaw/choices.xml
+ touch /tmp/pawpaw/outlines.xml
+
fi
# ---------------------------------------------------------------------------------------------------------------------
@@ -71,23 +79,60 @@ for plugin in ${@}; do
fi
name=$(jq -crM .name ${pfile})
- sname=$(echo ${name} | tr -t '-' '_')
+ sname=$(echo ${name} | tr -ds '-' '_')
lv2bundles=($(jq -crM .lv2bundles[] ${pfile}))
if [ "${WIN32}" -eq 1 ]; then
echo "Name: ${sname}; Description: \"${name}\"; Types: full;" >> /tmp/pawpaw/components.iss
+
+ elif [ "${MACOS}" -eq 1 ] && [ "${MACOS_OLD}" -eq 0 ]; then
+ echo " " >> /tmp/pawpaw/choices.xml
+ echo " " >> /tmp/pawpaw/outlines.xml
fi
for lv2bundle in ${lv2bundles[@]}; do
if [ "${WIN32}" -eq 1 ]; then
echo "Source: \"${PAWPAW_WINE_LV2DIR}${lv2bundle}\\*\"; DestDir: \"{commoncf}\\LV2\\${lv2bundle}\"; Components: ${sname}; Flags: recursesubdirs" >> /tmp/pawpaw/lv2bundles.iss
+
+ elif [ "${MACOS}" -eq 1 ] && [ "${MACOS_OLD}" -eq 0 ]; then
+ bundleref="pawpaw-bundle-${sname}-${lv2bundle}.pkg"
+ echo " ${bundleref}" >> /tmp/pawpaw/choices.xml
+ pkgbuild \
+ --identifier "studio.kx.distrho.pawpaw.${sname}_${lv2bundle}" \
+ --install-location "/Library/Audio/Plug-Ins/LV2/${lv2bundle}/" \
+ --root "${PAWPAW_PREFIX}/lib/lv2/${lv2bundle}/" \
+ "setup/macos/${bundleref}"
fi
done
+
+ if [ "${MACOS}" -eq 1 ] && [ "${MACOS_OLD}" -eq 0 ]; then
+ echo " " >> /tmp/pawpaw/choices.xml
+ fi
done
if [ "${WIN32}" -eq 1 ]; then
create_innosetup_exe
- rm -rf /tmp/pawpaw
+
+elif [ "${MACOS}" -eq 1 ] && [ "${MACOS_OLD}" -eq 0 ]; then
+ pushd setup/macos
+ python -c "
+with open('package.xml.in', 'r') as fh:
+ packagexml = fh.read()
+with open('/tmp/pawpaw/choices.xml', 'r') as fh:
+ choicesxml = fh.read().strip()
+with open('/tmp/pawpaw/outlines.xml', 'r') as fh:
+ outlinesxml = fh.read().strip()
+print(packagexml.replace('@CURDIR@','${PWD}').replace('@CHOICES@',choicesxml).replace('@OUTLINES@',outlinesxml))" > package.xml
+ productbuild \
+ --distribution package.xml \
+ --identifier studio.kx.distrho.pawpaw \
+ --package-path "${PWD}" \
+ --version ${VERSION} \
+ PawPaw-macOS-v${VERSION}.pkg
+ rm package.xml pawpaw-bundle-*
+ popd
fi
+rm -rf /tmp/pawpaw
+
# ---------------------------------------------------------------------------------------------------------------------
diff --git a/patches/artyfx/macos/01_use-dylib-in-ttl.patch b/patches/artyfx/macos/01_use-dylib-in-ttl.patch
new file mode 100644
index 0000000..0c7b30c
--- /dev/null
+++ b/patches/artyfx/macos/01_use-dylib-in-ttl.patch
@@ -0,0 +1,262 @@
+diff --git a/artyfx.lv2/bitta.ttl b/artyfx.lv2/bitta.ttl
+index 8bb0109..e1f5ef4 100644
+--- a/artyfx.lv2/bitta.ttl
++++ b/artyfx.lv2/bitta.ttl
+@@ -28,7 +28,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
+diff --git a/artyfx.lv2/capta.ttl b/artyfx.lv2/capta.ttl
+index 891ce5d..681d716 100644
+--- a/artyfx.lv2/capta.ttl
++++ b/artyfx.lv2/capta.ttl
+@@ -27,7 +27,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
+diff --git a/artyfx.lv2/della.ttl b/artyfx.lv2/della.ttl
+index 333d341..e4b6105 100644
+--- a/artyfx.lv2/della.ttl
++++ b/artyfx.lv2/della.ttl
+@@ -29,7 +29,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface ;
+ lv2:extensionData ui:idleInterface .
+diff --git a/artyfx.lv2/driva.ttl b/artyfx.lv2/driva.ttl
+index 9eaced1..111c792 100644
+--- a/artyfx.lv2/driva.ttl
++++ b/artyfx.lv2/driva.ttl
+@@ -30,7 +30,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
+diff --git a/artyfx.lv2/ducka.ttl b/artyfx.lv2/ducka.ttl
+index bde2763..fdfe9cd 100644
+--- a/artyfx.lv2/ducka.ttl
++++ b/artyfx.lv2/ducka.ttl
+@@ -25,7 +25,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
+diff --git a/artyfx.lv2/filta.ttl b/artyfx.lv2/filta.ttl
+index 5acf869..327f4ff 100644
+--- a/artyfx.lv2/filta.ttl
++++ b/artyfx.lv2/filta.ttl
+@@ -25,7 +25,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
+diff --git a/artyfx.lv2/friza.ttl b/artyfx.lv2/friza.ttl
+index 263e031..c4ff0e5 100644
+--- a/artyfx.lv2/friza.ttl
++++ b/artyfx.lv2/friza.ttl
+@@ -24,7 +24,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
+diff --git a/artyfx.lv2/kuiza.ttl b/artyfx.lv2/kuiza.ttl
+index 99e5dab..d3439cd 100644
+--- a/artyfx.lv2/kuiza.ttl
++++ b/artyfx.lv2/kuiza.ttl
+@@ -24,7 +24,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
+diff --git a/artyfx.lv2/manifest.ttl b/artyfx.lv2/manifest.ttl
+index 6a76ea1..0b3b8b1 100644
+--- a/artyfx.lv2/manifest.ttl
++++ b/artyfx.lv2/manifest.ttl
+@@ -5,61 +5,61 @@
+ @prefix rdfs: .
+
+ a lv2:Plugin ;
+- lv2:binary ;
++ lv2:binary ;
+ rdfs:seeAlso .
+
+ # Not tested to standard yet - do not package
+ # a lv2:Plugin ;
+-# lv2:binary ;
++# lv2:binary ;
+ # rdfs:seeAlso .
+
+ a lv2:Plugin ;
+- lv2:binary ;
++ lv2:binary ;
+ rdfs:seeAlso .
+
+ # Unfinished for this release - NOT ready for testing / usage.
+ # a lv2:Plugin ;
+-# lv2:binary ;
++# lv2:binary ;
+ # rdfs:seeAlso .
+
+ a lv2:Plugin ;
+- lv2:binary ;
++ lv2:binary ;
+ rdfs:seeAlso .
+
+ a lv2:Plugin ;
+- lv2:binary ;
++ lv2:binary ;
+ rdfs:seeAlso .
+
+ # Unfinished for this release - NOT ready for testing / usage.
+ # a lv2:Plugin ;
+-# lv2:binary ;
++# lv2:binary ;
+ # rdfs:seeAlso .
+
+ a lv2:Plugin ;
+- lv2:binary ;
++ lv2:binary ;
+ rdfs:seeAlso .
+
+ a lv2:Plugin ;
+- lv2:binary ;
++ lv2:binary ;
+ rdfs:seeAlso .
+
+ a lv2:Plugin ;
+- lv2:binary ;
++ lv2:binary ;
+ rdfs:seeAlso .
+
+ a lv2:Plugin ;
+- lv2:binary ;
++ lv2:binary ;
+ rdfs:seeAlso .
+
+ a lv2:Plugin ;
+- lv2:binary ;
++ lv2:binary ;
+ rdfs:seeAlso .
+
+ a lv2:Plugin ;
+- lv2:binary ;
++ lv2:binary ;
+ rdfs:seeAlso .
+
+ a lv2:Plugin ;
+- lv2:binary ;
++ lv2:binary ;
+ rdfs:seeAlso .
+
+diff --git a/artyfx.lv2/masha.ttl b/artyfx.lv2/masha.ttl
+index 95fdb29..0d683c7 100644
+--- a/artyfx.lv2/masha.ttl
++++ b/artyfx.lv2/masha.ttl
+@@ -26,7 +26,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
+diff --git a/artyfx.lv2/panda.ttl b/artyfx.lv2/panda.ttl
+index 4d76bcf..8b3b3ba 100644
+--- a/artyfx.lv2/panda.ttl
++++ b/artyfx.lv2/panda.ttl
+@@ -27,7 +27,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
+diff --git a/artyfx.lv2/roomy.ttl b/artyfx.lv2/roomy.ttl
+index 155b484..9160a34 100644
+--- a/artyfx.lv2/roomy.ttl
++++ b/artyfx.lv2/roomy.ttl
+@@ -23,7 +23,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
+diff --git a/artyfx.lv2/satma.ttl b/artyfx.lv2/satma.ttl
+index c07cb79..01d8410 100644
+--- a/artyfx.lv2/satma.ttl
++++ b/artyfx.lv2/satma.ttl
+@@ -24,7 +24,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
+diff --git a/artyfx.lv2/vihda.ttl b/artyfx.lv2/vihda.ttl
+index f162bdc..3fd3489 100644
+--- a/artyfx.lv2/vihda.ttl
++++ b/artyfx.lv2/vihda.ttl
+@@ -27,7 +27,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
+diff --git a/artyfx.lv2/whaaa.ttl b/artyfx.lv2/whaaa.ttl
+index 1251072..8981b0b 100644
+--- a/artyfx.lv2/whaaa.ttl
++++ b/artyfx.lv2/whaaa.ttl
+@@ -27,7 +27,7 @@
+
+
+ a ui:X11UI;
+- ui:binary ;
++ ui:binary ;
+ lv2:optionalFeature ui:noUserResize ;
+ lv2:extensionData ui:idleInterface .
+
diff --git a/setup/macos/package.xml.in b/setup/macos/package.xml.in
new file mode 100644
index 0000000..92e68d9
--- /dev/null
+++ b/setup/macos/package.xml.in
@@ -0,0 +1,12 @@
+
+
+ PawPaw LV2 plugins
+
+
+
+
+ @CHOICES@
+
+ @OUTLINES@
+
+
diff --git a/setup/macos/welcome.txt b/setup/macos/welcome.txt
new file mode 100644
index 0000000..8779f12
--- /dev/null
+++ b/setup/macos/welcome.txt
@@ -0,0 +1,4 @@
+PawPaw LV2 plugins
+
+This package installs open-source LV2 plugins, pre-compiled for macOS.
+All plugins are 100% free and open-source.