summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Hülsmann2022-03-29 19:19:19 +0200
committerFlorian Hülsmann2022-03-29 19:25:02 +0200
commitcd6602f11a92f4f2b12fb442788e047767ecb475 (patch)
treea45c72ce4d20089e945d5de3f8d9688e3ca372f4
parentc0ef0f7eab40c7f055b0f08849cf56175c9e448a (diff)
downloadaur-cd6602f11a92f4f2b12fb442788e047767ecb475.tar.gz
Lots of changes that were made during the course of packaging this for a binary repo.
Most importantly, we're now bundling the Fundamental plugins and installing to proper paths according to the packaging guidelines. Some plugins from AUR may not be found anymore due to this, but they'll hopefully follow soon and install to /usr/lib/vcvrack/plugins. For full context see https://github.com/osam-cologne/archlinux-proaudio/pull/5
-rw-r--r--.SRCINFO91
-rw-r--r--.gitignore9
-rw-r--r--PKGBUILD189
-rw-r--r--plugins.patch47
-rw-r--r--profile.sh1
-rwxr-xr-xsubmodule_commits.sh7
-rwxr-xr-xvcvrack.sh6
7 files changed, 222 insertions, 128 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 3c9fb4d5e955..c5172d7fdb98 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,46 +1,71 @@
pkgbase = vcvrack
pkgdesc = Open-source Eurorack modular synthesizer simulator
pkgver = 2.1.0
- pkgrel = 1
+ pkgrel = 2
url = https://vcvrack.com/
arch = x86_64
+ groups = pro-audio
license = custom
license = CCPL
license = GPL3
- makedepends = git
- makedepends = wget
- makedepends = cmake
- makedepends = unzip
+ makedepends = curl
+ makedepends = glew
+ makedepends = glfw-x11
+ makedepends = jansson
+ makedepends = libarchive
+ makedepends = openssl
+ makedepends = rtaudio
+ makedepends = rtmidi
+ makedepends = speexdsp
+ makedepends = zstd
makedepends = gendesk
- depends = curl
- depends = glew
- depends = glfw
- depends = jack
+ makedepends = jq
+ provides = libRack.so
+ provides = vcvrack-fundamental
+ conflicts = vcvrack-fundamental
+ noextract = filesystem-7e37433.tar.gz
+ noextract = fuzzysearchdatabase-fe62479.tar.gz
+ noextract = nanosvg-25241c5.tar.gz
+ noextract = nanovg-0bebdb3.tar.gz
+ noextract = osdialog-21b9dcc.tar.gz
+ noextract = oui-blendish-2fc6405.tar.gz
+ noextract = pffft-74d7261.tar.gz
+ source = vcvrack-2.1.0.tar.gz::https://github.com/VCVRack/Rack/archive/v2.1.0.tar.gz
+ source = https://github.com/VCVRack/Rack/commit/ac73ef4.patch
+ source = filesystem-7e37433.tar.gz::https://github.com/gulrak/filesystem/archive/7e37433.tar.gz
+ source = fuzzysearchdatabase-fe62479.tar.gz::https://bitbucket.org/j_norberg/fuzzysearchdatabase/get/fe62479.tar.gz
+ source = nanosvg-25241c5.tar.gz::https://github.com/memononen/nanosvg/archive/25241c5.tar.gz
+ source = nanovg-0bebdb3.tar.gz::https://github.com/VCVRack/nanovg/archive/0bebdb3.tar.gz
+ source = osdialog-21b9dcc.tar.gz::https://github.com/AndrewBelt/osdialog/archive/21b9dcc.tar.gz
+ source = oui-blendish-2fc6405.tar.gz::https://github.com/VCVRack/oui-blendish/archive/2fc6405.tar.gz
+ source = pffft-74d7261.tar.gz::https://bitbucket.org/jpommier/pffft/get/74d7261.tar.gz
+ source = vcvrack-fundamental-2.1.0.tar.gz::https://github.com/VCVRack/Fundamental/archive/v2.1.0.tar.gz
+ source = plugins.patch
+ source = vcvrack.sh
+ source = profile.sh
+ sha256sums = c3a30105d673733698fca934a4287728c1eb49d76204f76d6e8152b4cc940594
+ sha256sums = ad431dfed9655e5af202403ef9e61d4b68d0861b2fe5de5a724242cac0a3eef5
+ sha256sums = 15e1dacd2a52d7cf67afcc548cc92b218f88a2726488e50887922e86c1493f68
+ sha256sums = 31cb6aa73ab52347ea56f7eb47947bad154cee588a0780df18e9523975bfb971
+ sha256sums = d957259360bf108858388bb01686a8cb0fc31d90db2d996ddf65575b37bb20d4
+ sha256sums = 043d67b2fd81d52b80c5db366292a8d1910a70abdf0b3cc7750bd8705cf5fb96
+ sha256sums = da6c2b5cd661dd1875af867e02bac4dee4e2db7ea6ed3e8a7fd840223d7ce642
+ sha256sums = f5c5a814b3302ac865ab648ec69f586b67cc0e9d2e51f77bcd4f495e75af6930
+ sha256sums = ca077ad436bcb5ffe579ee886b8e61c87e2ebd81fc762be02a9ca07235e219ff
+ sha256sums = a81220cd78a29b7897597860f6d9d4af21fc28a15873e14dff66eb7b0ca17f17
+ sha256sums = b5b33ecb74123bd24029a7936d48d93c8be441dac8258c81f07c780a2efa692f
+ sha256sums = 21ac35c6ad4e5a29c32939b17baaf7ac1936077eda2214e28675eefcf2021db8
+ sha256sums = e1da6ccf04bae3a2101151fec7ddd32e48ff92b0a1146b559fd3221c778d521f
+
+pkgname = vcvrack
+ depends = libcurl.so
+ depends = libGLEW.so
+ depends = glfw-x11
depends = jansson
- depends = libpulse
+ depends = libarchive.so
depends = openssl
- depends = rtaudio
- depends = rtmidi
+ depends = librtaudio.so
+ depends = librtmidi.so
+ depends = libsamplerate.so
depends = speexdsp
depends = zenity
- depends = zstd
- source = vcvrack-2.1.0::git+https://github.com/vcvrack/Rack.git#tag=v2.1.0
- source = git+https://github.com/VCVRack/nanovg.git
- source = git+https://github.com/memononen/nanosvg.git
- source = git+https://github.com/AndrewBelt/osdialog.git
- source = git+https://github.com/VCVRack/oui-blendish.git
- source = git+https://bitbucket.org/j_norberg/fuzzysearchdatabase.git
- source = git+https://github.com/gulrak/filesystem.git
- source = git+https://bitbucket.org/jpommier/pffft.git
- source = vcvrack.sh
- sha512sums = SKIP
- sha512sums = SKIP
- sha512sums = SKIP
- sha512sums = SKIP
- sha512sums = SKIP
- sha512sums = SKIP
- sha512sums = SKIP
- sha512sums = SKIP
- sha512sums = 8ca3fbc790fa5d311ce41b5b9e84a79fe51db73cbf0f56f04d0429b28f0c4c0646e2d0c081b584161356ec24b06cc0181b115b865d564ff1452c64a57135acf6
-
-pkgname = vcvrack
diff --git a/.gitignore b/.gitignore
index a1f97ab1a580..ee1dd866b00b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,4 @@
-*
-!/.gitignore
-!/PKGBUILD
-!/SRCINFO
-!/vcvrack.sh
+*.tar.*
+/src
+/pkg
+/ac73ef4.patch
diff --git a/PKGBUILD b/PKGBUILD
index 0d34c3bf371c..414b1403721a 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,115 +1,132 @@
# Maintainer: Phil A. <flying-sheep@web.de>
+# Maintainer: Florian Hülsmann <fh@cbix.de>
# Contributor: David Runge <dave@sleepmap.de>
# Contributor: Adrain Sinclair <adrian at adrusi dot com>
# Contributor: Miroslav Koškár <http://mkoskar.com/>
-# Contributor: Florian Hülsmann <fh@cbix.de>
_name=Rack
pkgname=vcvrack
pkgver=2.1.0
-pkgrel=1
+pkgrel=2
pkgdesc='Open-source Eurorack modular synthesizer simulator'
url='https://vcvrack.com/'
license=(custom CCPL GPL3)
arch=(x86_64)
-depends=(
- curl
- glew
- glfw
- jack
- jansson
- libpulse
- openssl
- rtaudio
- rtmidi
- speexdsp
- zenity
- zstd
-)
-makedepends=(git wget cmake unzip gendesk)
-_submodule_deps=(nanovg nanosvg osdialog oui-blendish fuzzysearchdatabase filesystem pffft)
+_plugin_name=Fundamental
+_plugin_ver=$pkgver
+_plugin_pkg=${pkgname}-${_plugin_name,,}
+makedepends=(curl glew glfw-x11 jansson libarchive openssl rtaudio rtmidi speexdsp zstd gendesk jq)
+provides=(libRack.so $_plugin_pkg)
+conflicts=($_plugin_pkg)
+groups=(pro-audio)
+# use submodule_commits.sh to update this
+_submodules=(filesystem fuzzysearchdatabase nanosvg nanovg osdialog oui-blendish pffft)
+_commits=(7e37433 fe62479 25241c5 0bebdb3 21b9dcc 2fc6405 74d7261)
source=(
- "$pkgname-$pkgver::git+https://github.com/$pkgname/$_name.git#tag=v$pkgver"
- 'git+https://github.com/VCVRack/nanovg.git'
- 'git+https://github.com/memononen/nanosvg.git'
- 'git+https://github.com/AndrewBelt/osdialog.git'
- 'git+https://github.com/VCVRack/oui-blendish.git'
- 'git+https://bitbucket.org/j_norberg/fuzzysearchdatabase.git'
- 'git+https://github.com/gulrak/filesystem.git'
- 'git+https://bitbucket.org/jpommier/pffft.git'
- "$pkgname.sh"
-)
-sha512sums=(
- SKIP SKIP SKIP SKIP SKIP SKIP SKIP SKIP
- '8ca3fbc790fa5d311ce41b5b9e84a79fe51db73cbf0f56f04d0429b28f0c4c0646e2d0c081b584161356ec24b06cc0181b115b865d564ff1452c64a57135acf6'
+ "${pkgname}-${pkgver}.tar.gz::https://github.com/VCVRack/${_name}/archive/v${pkgver}.tar.gz"
+ 'https://github.com/VCVRack/Rack/commit/ac73ef4.patch'
+ "filesystem-${_commits[0]}.tar.gz::https://github.com/gulrak/filesystem/archive/${_commits[0]}.tar.gz"
+ "fuzzysearchdatabase-${_commits[1]}.tar.gz::https://bitbucket.org/j_norberg/fuzzysearchdatabase/get/${_commits[1]}.tar.gz"
+ "nanosvg-${_commits[2]}.tar.gz::https://github.com/memononen/nanosvg/archive/${_commits[2]}.tar.gz"
+ "nanovg-${_commits[3]}.tar.gz::https://github.com/VCVRack/nanovg/archive/${_commits[3]}.tar.gz"
+ "osdialog-${_commits[4]}.tar.gz::https://github.com/AndrewBelt/osdialog/archive/${_commits[4]}.tar.gz"
+ "oui-blendish-${_commits[5]}.tar.gz::https://github.com/VCVRack/oui-blendish/archive/${_commits[5]}.tar.gz"
+ "pffft-${_commits[6]}.tar.gz::https://bitbucket.org/jpommier/pffft/get/${_commits[6]}.tar.gz"
+ "${_plugin_pkg}-${_plugin_ver}.tar.gz::https://github.com/VCVRack/${_plugin_name}/archive/v${_plugin_ver}.tar.gz"
+ 'plugins.patch'
+ 'vcvrack.sh'
+ 'profile.sh'
)
+sha256sums=('c3a30105d673733698fca934a4287728c1eb49d76204f76d6e8152b4cc940594'
+ 'ad431dfed9655e5af202403ef9e61d4b68d0861b2fe5de5a724242cac0a3eef5'
+ '15e1dacd2a52d7cf67afcc548cc92b218f88a2726488e50887922e86c1493f68'
+ '31cb6aa73ab52347ea56f7eb47947bad154cee588a0780df18e9523975bfb971'
+ 'd957259360bf108858388bb01686a8cb0fc31d90db2d996ddf65575b37bb20d4'
+ '043d67b2fd81d52b80c5db366292a8d1910a70abdf0b3cc7750bd8705cf5fb96'
+ 'da6c2b5cd661dd1875af867e02bac4dee4e2db7ea6ed3e8a7fd840223d7ce642'
+ 'f5c5a814b3302ac865ab648ec69f586b67cc0e9d2e51f77bcd4f495e75af6930'
+ 'ca077ad436bcb5ffe579ee886b8e61c87e2ebd81fc762be02a9ca07235e219ff'
+ 'a81220cd78a29b7897597860f6d9d4af21fc28a15873e14dff66eb7b0ca17f17'
+ 'b5b33ecb74123bd24029a7936d48d93c8be441dac8258c81f07c780a2efa692f'
+ '21ac35c6ad4e5a29c32939b17baaf7ac1936077eda2214e28675eefcf2021db8'
+ 'e1da6ccf04bae3a2101151fec7ddd32e48ff92b0a1146b559fd3221c778d521f')
+# extract the submodules ourselves so we have control over the unpacked top-level directory name
+noextract=($(for _i in ${!_submodules[@]}; do \
+ echo "${_submodules[$_i]}-${_commits[$_i]}.tar.gz"; done))
prepare() {
- cd "$pkgname-$pkgver"
- for M in "${_submodule_deps[@]}"; do
- git submodule init "dep/$M"
- git config "submodule.dep/$M.url" "$srcdir/$M"
- git submodule update "dep/$M"
- done
+ cd "${_name}-$pkgver"
+ echo noextract ${noextract[@]}
+ # extract submodules
+ for _i in ${!_submodules[@]}; do
+ bsdtar -xf ../${_submodules[$_i]}-${_commits[$_i]}.tar.gz -C dep/${_submodules[$_i]} --strip-components 1
+ done
+
+ # add target to only build included dependencies
+ echo 'includes: $(nanovg) $(nanosvg) $(osdialog) $(oui-blendish) $(fuzzysearchdatabase) $(ghcfilesystem) $(pffft)' >> dep/Makefile
- # fix plugin.mk’s use of jq, if SLUG/VERSION are unset
- sed -e 's/SLUG :=/SLUG ?=/' \
- -e 's/VERSION :=/VERSION ?=/' \
- -i plugin.mk
-
- # add target to only build included dependencies
- echo 'includes: $(nanovg) $(nanosvg) $(osdialog) $(oui-blendish) $(fuzzysearchdatabase) $(ghcfilesystem) $(pffft)' >> dep/Makefile
+ # revert recent changes to rtaudio.cpp that require an unreleased version of rtaudio
+ patch -Rp1 -r - -i ../ac73ef4.patch || true
- # recent changes to rtaudio.cpp require an unrelease version of rtaudio
- git checkout 6ae7fe05216950e461a27e05e8b9de53ccf8247b src/rtaudio.cpp
+ # support building plugins and loading system-wide plugins
+ patch -p1 -i ../plugins.patch
- gendesk -f -n \
- --pkgname "$pkgname" \
- --name "VCV $_name" \
- --exec "$_name" \
- --pkgdesc "$pkgdesc" \
- --genericname "Virtual modular synthesizer" \
- --categories "AudioVideo;Audio"
+ gendesk -f -n \
+ --pkgname $pkgname \
+ --name "VCV Rack" \
+ --exec Rack \
+ --pkgdesc "$pkgdesc" \
+ --genericname "Virtual modular synthesizer" \
+ --categories "AudioVideo;Audio"
}
build() {
- cd "$pkgname-$pkgver"
- VERSION=$pkgver make -C dep includes
- VERSION=$pkgver make LDFLAGS+="-shared \
- -lGLEW -lglfw -ljansson \
- -lcurl -lssl -lcrypto \
- -larchive -lzstd -lspeexdsp \
- -lsamplerate -lrtmidi -lrtaudio \
- -lpthread -lGL -ldl \
- -lasound -ljack \
- -lpulse -lpulse-simple"
+ cd "${_name}-$pkgver"
+ _ldflags="-shared -ldl \
+ $(pkg-config --libs glew \
+ glfw3 jansson libcurl openssl \
+ libarchive libzstd speexdsp \
+ samplerate rtmidi rtaudio)"
+ VERSION=$pkgver make -C dep includes
+ VERSION=$pkgver make LDFLAGS+="$_ldflags" STANDALONE_LDFLAGS="$LDFLAGS"
+ cd ../${_plugin_name}-$_plugin_ver
+ VERSION=$_plugin_ver RACK_DIR=../${_name}-$pkgver make dist
}
package() {
- cd "$pkgname-$pkgver"
- install -vDm 755 "$_name" -t "$pkgdir/opt/$pkgname"
- install -vDm 755 "lib$_name.so" -t "$pkgdir/opt/$pkgname"
- install -vDm 755 "$srcdir/$pkgname.sh" "$pkgdir/usr/bin/$_name"
- install -vDm 644 -t "$pkgdir/opt/$pkgname" template.vcv
- install -vDm 644 -t "$pkgdir/opt/$pkgname" Core.json
- install -vDm 644 -t "$pkgdir/opt/$pkgname" cacert.pem
+ # Rack does not start with glfw-wayland
+ depends=(libcurl.so libGLEW.so glfw-x11 jansson libarchive.so \
+ openssl librtaudio.so librtmidi.so libsamplerate.so speexdsp zenity)
+ cd "${_name}-$pkgver"
+ install -vDm755 Rack -t "$pkgdir"/usr/lib/${pkgname}
+ install -vDm755 libRack.so -t "$pkgdir"/usr/lib
+ install -vDm755 "$srcdir"/vcvrack.sh "$pkgdir"/usr/bin/Rack
+ install -vDm644 template.vcv Core.json cacert.pem -t "$pkgdir"/usr/lib/$pkgname
+
+ # resources
+ cp -dr --preserve=mode res -t "$pkgdir"/usr/lib/$pkgname
+
+ # headers (required for plugins)
+ for _path in {app,dsp,engine,plugin,simd,ui,widget,window}; do
+ install -vDm644 include/${_path}/* \
+ -t "$pkgdir"/usr/include/${pkgname}/${_path}/
+ done
+ install -vDm644 include/*.{h,hpp} -t "$pkgdir"/usr/include/${pkgname}/
+ install -vDm644 dep/include/*.h -t "$pkgdir"/usr/include/${pkgname}/dep
+ # Makefile snippets required for plugins
+ install -vDm644 {arch,compile,dep,plugin}.mk -t "$pkgdir"/usr/share/$pkgname
- # resources
- cp -dr --preserve=mode res -t "$pkgdir/opt/$pkgname"
+ # xdg desktop integration
+ install -vDm644 ${pkgname}.desktop -t "$pkgdir"/usr/share/applications/
+ install -vDm644 res/icon.png "$pkgdir"/usr/share/pixmaps/${pkgname}.png
+ # licenses
+ install -vDm644 LICENSE.md -t "$pkgdir"/usr/share/licenses/$pkgname
- # headers (required for plugins)
- for _path in {app,dsp,engine,plugin,simd,ui,widget,window}; do
- install -vDm 644 "include/$_path/"* \
- -t "$pkgdir/usr/include/$pkgname/$_path/"
- done
- install -vDm 644 include/*.{h,hpp} -t "$pkgdir/usr/include/$pkgname/"
- install -vDm 644 dep/include/*.h -t "$pkgdir/usr/include/$pkgname/dep"
- # Makefile snippets required for plugins
- install -vDm 644 {arch,compile,dep,plugin}.mk -t "$pkgdir/usr/share/$pkgname"
+ # Fundamental plugin
+ cd ../${_plugin_name}-$_plugin_ver
+ install -d "$pkgdir"/usr/lib/${pkgname}/plugins
+ cp -a dist/$_plugin_name -t "$pkgdir"/usr/lib/${pkgname}/plugins/
- # xdg desktop integration
- install -vDm 644 "$pkgname.desktop" -t "$pkgdir/usr/share/applications/"
- install -vDm 644 'res/icon.png' "$pkgdir/usr/share/pixmaps/$pkgname.png"
- # licenses
- install -vDm 644 LICENSE.md -t "$pkgdir/usr/share/licenses/$pkgname"
+ # RACK_DIR environment variable
+ install -vDm644 "$srcdir"/profile.sh "$pkgdir"/etc/profile.d/vcvrack.sh
}
diff --git a/plugins.patch b/plugins.patch
new file mode 100644
index 000000000000..d6471434d0ac
--- /dev/null
+++ b/plugins.patch
@@ -0,0 +1,47 @@
+diff -aur a/plugin.mk b/plugin.mk
+--- a/plugin.mk 2022-02-26 10:07:50.000000000 +0100
++++ b/plugin.mk 2022-03-06 20:18:12.877709392 +0100
+@@ -1,9 +1,13 @@
++ifndef ARCH_LIN
+ ifndef RACK_DIR
+ $(error RACK_DIR is not defined)
+ endif
++else
++RACK_DIR ?= /usr/share/vcvrack
++endif
+
+-SLUG := $(shell jq -r .slug plugin.json)
+-VERSION := $(shell jq -r .version plugin.json)
++SLUG ?= $(shell jq -r .slug plugin.json)
++VERSION ?= $(shell jq -r .version plugin.json)
+
+ ifndef SLUG
+ $(error SLUG could not be found in manifest)
+@@ -27,10 +31,10 @@
+ TARGET := plugin.so
+ # This prevents static variables in the DSO (dynamic shared object) from being preserved after dlclose().
+ FLAGS += -fno-gnu-unique
+- # When Rack loads a plugin, it symlinks /tmp/Rack2 to its system dir, so the plugin can link to libRack.
+- LDFLAGS += -Wl,-rpath=/tmp/Rack2
+- # Since the plugin's compiler could be a different version than Rack's compiler, link libstdc++ and libgcc statically to avoid ABI issues.
+- LDFLAGS += -static-libstdc++ -static-libgcc
++ # Installed includes
++ FLAGS += -I/usr/include/vcvrack -I/usr/include/vcvrack/dep
++ # Link shared libs
++ LDFLAGS += -ldl $(shell pkg-config --libs glew glfw3 jansson libcurl openssl libarchive libzstd speexdsp samplerate rtmidi rtaudio)
+ RACK_USER_DIR ?= $(HOME)/.Rack2
+ endif
+
+diff -aur a/src/plugin.cpp b/src/plugin.cpp
+--- a/src/plugin.cpp 2022-02-26 10:07:50.000000000 +0100
++++ b/src/plugin.cpp 2022-03-06 19:56:50.556668012 +0100
+@@ -240,6 +240,9 @@
+ extractPackages(pluginsPath);
+ loadPlugins(pluginsPath);
+
++ // Load system-wide plugins
++ loadPlugins(asset::system("plugins"));
++
+ // If Fundamental wasn't loaded, copy the bundled Fundamental package and load it
+ if (!settings::devMode && !getPlugin("Fundamental")) {
+ std::string fundamentalSrc = asset::system("Fundamental.vcvplugin");
diff --git a/profile.sh b/profile.sh
new file mode 100644
index 000000000000..e0af5a210398
--- /dev/null
+++ b/profile.sh
@@ -0,0 +1 @@
+export RACK_DIR=/usr/share/vcvrack
diff --git a/submodule_commits.sh b/submodule_commits.sh
new file mode 100755
index 000000000000..fb45cccf6f59
--- /dev/null
+++ b/submodule_commits.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+# Generate submodule commit hashes
+# This is just for PKGBUILD maintenance and is not supposed to be packaged.
+source PKGBUILD
+submodules="$(printf "|%s" "${_submodules[@]}")"
+curl -s https://api.github.com/repos/VCVRack/Rack/contents/dep?ref=v$pkgver | \
+ jq -r '[.[] | select(.name | test("'"${submodules:1}"'"))] | ("_submodules=(" + ([.[].name] | join(" ")) + ")", "_commits=(" + ([.[].sha[:7]] | join(" ")) + ")")'
diff --git a/vcvrack.sh b/vcvrack.sh
index 03c418c42c08..dcc66bfba197 100755
--- a/vcvrack.sh
+++ b/vcvrack.sh
@@ -1,4 +1,2 @@
-#!/usr/bin/env sh
-
-cd /opt/vcvrack
-./Rack "$@"
+#!/bin/sh
+RACK_SYSTEM_DIR=/usr/lib/vcvrack exec /usr/lib/vcvrack/Rack "$@"