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.