From 1b8e6c9b0642c42363ae1079358e5468742d39b6 Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 11:04:13 +0200 Subject: [PATCH 01/14] tools/faust2appls/faust2faustvst: Setting shebang properly. Removing qt4 functionality and searching for qmake-qt5/qmake using the shell builtin 'command'. --- tools/faust2appls/faust2faustvst | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/tools/faust2appls/faust2faustvst b/tools/faust2appls/faust2faustvst index bea29e32cc..748b0a74d0 100755 --- a/tools/faust2appls/faust2faustvst +++ b/tools/faust2appls/faust2faustvst @@ -1,4 +1,4 @@ -#! /bin/bash +#!/usr/bin/env bash #set -x @@ -25,11 +25,10 @@ sdkpaths="/usr/src/VST* /usr/src/vst* /usr/include/VST* /usr/include/vst* /opt/l [ -z "$SDKSRC" -a -f "$SDK/public.sdk/source/vst2.x/vstplugmain.cpp" ] && SDKSRC="$SDK/public.sdk/source/vst2.x" [ -z "$SDKSRC" ] && SDKSRC="$SDK/public.sdk/source/vst2.x" -# Default qmake setup (for GUI compilation). This requires Qt4 or Qt5 (Qt5 is -# preferred). We try to locate the qmake executable in some common locations -# here. If this doesn't work out then you can also set the QMAKE environment -# variable explicitly, or use one of the -qt4 and -qt5 options below. -[ -z "$QMAKE" ] && QMAKE=$(which qmake-qt5 || which /opt/local/libexec/qt5/bin/qmake || which qmake-qt4 || which /opt/local/libexec/qt4/bin/qmake || echo qmake) +# Default qmake setup (for GUI compilation). This requires Qt5. If qmake-qt5 or +# qmake can not be found in PATH, you can set the QMAKE environment variable +# explicitly, or use the -qt5 option below. +[ -z "$QMAKE" ] && QMAKE=$(command -v qmake-qt5 || command -v qmake) # Where the Faust includes live. We assume that this is under the prefix of # whatever Faust binary 'which' locates. You can also specify this explicitly @@ -128,14 +127,10 @@ EOF elif [ $p = "-gui" ]; then FAUST_UI=1 plugin_gui=yes - elif [ $p = "-qt4" ]; then - FAUST_UI=1 - plugin_gui=yes - QMAKE=$(which qmake-qt4 || which /opt/local/libexec/qt4/bin/qmake || echo qmake-qt4) elif [ $p = "-qt5" ]; then FAUST_UI=1 plugin_gui=yes - QMAKE=$(which qmake-qt5 || which /opt/local/libexec/qt5/bin/qmake || echo qmake-qt5) + QMAKE=$(command -v qmake-qt5 || command -v qmake) elif [ $p = "-nvoices" ]; then (( i++ )) NVOICES=${!i} From 6d9288283c5df63eb9a4d6d1984fa11cd08f65b3 Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 11:17:52 +0200 Subject: [PATCH 02/14] tools/faust2appls/faust2faustvst: Fixing most missing-quotes related issues in this script. --- tools/faust2appls/faust2faustvst | 44 ++++++++++++++++---------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/tools/faust2appls/faust2faustvst b/tools/faust2appls/faust2faustvst index 748b0a74d0..e7141464be 100755 --- a/tools/faust2appls/faust2faustvst +++ b/tools/faust2appls/faust2faustvst @@ -15,14 +15,14 @@ # the preferred path comes *last*. sdkpaths="/usr/src/VST* /usr/src/vst* /usr/include/VST* /usr/include/vst* /opt/local/src/VST* /opt/local/src/vst* /opt/local/include/VST* /opt/local/include/vst* /usr/local/src/VST* /usr/local/src/vst* /usr/local/include/VST* /usr/local/include/vst* $VSTSDK" # This should hopefully work on *BSD, Linux and Mac OSX. -[ -z "$SDK" ] && SDK=$(echo $sdkpaths | xargs ls -f -d 2>/dev/null | tail -n 1) +[ -z "$SDK" ] && SDK=$(echo "$sdkpaths" | xargs ls -f -d 2>/dev/null | tail -n 1) [ -z "$SDK" ] && SDK=/usr/local/src/vstsdk # SDKSRC should point to the SDK source files (vstplugmain.cpp et al). # Usually these are either directly under $SDK or in the # public.sdk/source/vst2.x subdirectory. -[ -z "$SDKSRC" -a -f "$SDK/vstplugmain.cpp" ] && SDKSRC="$SDK" -[ -z "$SDKSRC" -a -f "$SDK/public.sdk/source/vst2.x/vstplugmain.cpp" ] && SDKSRC="$SDK/public.sdk/source/vst2.x" +[ -z "$SDKSRC" ] && [ -f "$SDK/vstplugmain.cpp" ] && SDKSRC="$SDK" +[ -z "$SDKSRC" ] && [ -f "$SDK/public.sdk/source/vst2.x/vstplugmain.cpp" ] && SDKSRC="$SDK/public.sdk/source/vst2.x" [ -z "$SDKSRC" ] && SDKSRC="$SDK/public.sdk/source/vst2.x" # Default qmake setup (for GUI compilation). This requires Qt5. If qmake-qt5 or @@ -155,7 +155,7 @@ EOF fi done -FILES=( $FILES ) +FILES=( "$FILES" ) if [ ${#FILES[@]} = 0 ]; then echo "$0: no filename specified" >&2 exit 1 @@ -173,20 +173,20 @@ if [ ! -f "$FAUSTARCH/faustvstqt.h" ]; then echo "$0: faust-vst library files no QTVERSION=$($QMAKE -v 2>/dev/null | tail -1 | sed 's/.*Qt version \([0-9]\).*/\1/') QTEXTRA= -if [ $QTVERSION = 5 ]; then -QTEXTRA=x11extras +if [[ "$QTVERSION" == 5 ]]; then + QTEXTRA=x11extras fi arch=faustvst.cpp dspname=${FILES[0]} SRCDIR=$(dirname "$dspname") -ABSDIR=$(cd $SRCDIR && pwd) +ABSDIR=$(cd "$SRCDIR" && pwd) CURDIR=$(pwd) -clsname=`basename "$dspname" .dsp` +clsname=$(basename "$dspname" .dsp) cppname="$clsname.cpp" soname="$clsname$dllext" -tmpdir=`mktemp -d /tmp/faust2faustvst.XXXXXX` +tmpdir=$(mktemp -d /tmp/faust2faustvst.XXXXXX) RESOURCES= STYLE_CXXFLAGS= @@ -214,24 +214,24 @@ sdksrc="$SDKSRC/$main $SDKSRC/$afx $SDKSRC/$afxx" #OPTIONS="$OPTIONS -cn \"$clsname\"" # Create the temp directory. -mkdir -p $tmpdir +mkdir -p "$tmpdir" #trap "echo $0: compile error, intermediate files left in $tmpdir >&2" EXIT # Compile the Faust module. -faust -i -a "$FAUSTARCH/$arch" $OPTIONS "$dspname" -o "$tmpdir/$cppname" || exit 1 +faust -i -a "$FAUSTARCH/$arch" "$OPTIONS" "$dspname" -o "$tmpdir/$cppname" || exit 1 if [ -n "$plugin_gui" ]; then # We have to use qmake here. # XXXTODO: OSX support ( cd "$tmpdir" - $QMAKE -project -t lib -o ${clsname}.pro "CONFIG += gui plugin no_plugin_name_prefix warn_off" "QT += widgets printsupport network $QTEXTRA" "INCLUDEPATH+=$ABSDIR" "INCLUDEPATH+=$CURDIR" "INCLUDEPATH+=$FAUSTARCH" "INCLUDEPATH+=$FAUSTINC" "QMAKE_CXXFLAGS=-std=c++11 $CPPFLAGS" $STYLE_CXXFLAGS "LIBS+=$ARCHLIB $OSCLIBS $HTTPLIBS" "SOURCES+=$SDKSRC/$main $SDKSRC/$afx $SDKSRC/$afxx" "HEADERS+=$FAUSTARCH/faustvstqt.h $FAUSTINC/faust/gui/QTUI.h" $RESOURCES "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" - $QMAKE *.pro + $QMAKE -project -t lib -o "${clsname}.pro" "CONFIG += gui plugin no_plugin_name_prefix warn_off" "QT += widgets printsupport network $QTEXTRA" "INCLUDEPATH+=$ABSDIR" "INCLUDEPATH+=$CURDIR" "INCLUDEPATH+=$FAUSTARCH" "INCLUDEPATH+=$FAUSTINC" "QMAKE_CXXFLAGS=-std=c++11 $CPPFLAGS" "$STYLE_CXXFLAGS" "LIBS+=$ARCHLIB $OSCLIBS $HTTPLIBS" "SOURCES+=$SDKSRC/$main $SDKSRC/$afx $SDKSRC/$afxx" "HEADERS+=$FAUSTARCH/faustvstqt.h $FAUSTINC/faust/gui/QTUI.h" "$RESOURCES" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" + $QMAKE ./*.pro make ) > /dev/null || exit 1 else if [[ $(uname) == Darwin || $CROSSTARGET == Darwin ]]; then - mkdir -p $tmpdir/$soname/Contents/MacOS - printf '%s' 'BNDL????' > $tmpdir/$soname/Contents/PkgInfo - sed -e "s?@name@?$clsname?g;s?@version@?1.0.0?g" > $tmpdir/$soname/Contents/Info.plist < "$tmpdir/$soname/Contents/PkgInfo" + sed -e "s?@name@?$clsname?g;s?@version@?1.0.0?g" > "$tmpdir/$soname/Contents/Info.plist" < @@ -258,23 +258,23 @@ if [[ $(uname) == Darwin || $CROSSTARGET == Darwin ]]; then EOF - $CXX -bundle $CXXFLAGS $FAUSTTOOLSFLAGS $PROCARCH -I"$ABSDIR" $CPPFLAGS $sdksrc "$tmpdir/$cppname" -o "$tmpdir/$soname/Contents/MacOS/$clsname" || exit 1 + $CXX -bundle "$CXXFLAGS" "$FAUSTTOOLSFLAGS" "$PROCARCH" -I"$ABSDIR" "$CPPFLAGS" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname/Contents/MacOS/$clsname" || exit 1 else - $CXX -shared $CXXFLAGS $FAUSTTOOLSFLAGS $PROCARCH -I"$ABSDIR" $CPPFLAGS $sdksrc "$tmpdir/$cppname" -o "$tmpdir/$soname" || exit 1 + $CXX -shared "$CXXFLAGS" "$FAUSTTOOLSFLAGS" "$PROCARCH" -I"$ABSDIR" "$CPPFLAGS" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname" || exit 1 fi fi #trap - EXIT # copy down the plugin (bundle on OS X) -rm -rf "$SRCDIR/$soname" +rm -rf "${SRCDIR:?}/$soname" cp -r "$tmpdir/$soname" "$SRCDIR" if [[ $KEEP == yes ]]; then # keep the build directory - rm -rf "$SRCDIR/$clsname" - mv $tmpdir "$SRCDIR/$clsname" + rm -rf "${SRCDIR:?}/$clsname" + mv "$tmpdir" "$SRCDIR/$clsname" else # Clean up. - rm -rf $tmpdir + rm -rf "$tmpdir" fi # Print the name of the generated plugin. echo "$SRCDIR/$soname;" From 06135bce23d968bcbe1d5c3aa3267f2c5b10daa2 Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 11:22:26 +0200 Subject: [PATCH 03/14] tools/faust2appls/faust2jaqt: Removing qt4 capability from the script. Quoting some variables. --- tools/faust2appls/faust2jaqt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/faust2appls/faust2jaqt b/tools/faust2appls/faust2jaqt index 60c3fdbd88..d0a87cde71 100755 --- a/tools/faust2appls/faust2jaqt +++ b/tools/faust2appls/faust2jaqt @@ -10,9 +10,9 @@ . faustpath . faustoptflags -CXXFLAGS=$MYGCCFLAGS +CXXFLAGS="$MYGCCFLAGS" -ARCHFILE=$FAUSTARCH/jack-qt.cpp +ARCHFILE="$FAUSTARCH/jack-qt.cpp" if [[ $(uname -s) != Darwin ]]; then LFLAGS+="-no-pie" @@ -21,12 +21,12 @@ fi #------------------------------------------------------------------- # Set Faust include path -ARCHLIB="`pkg-config --cflags --libs jack`" +ARCHLIB="$(pkg-config --cflags --libs jack)" #------------------------------------------------------------------------------- -# Search for qmake or qmake-qt4 +# Search for qmake-qt5 or qmake -QMAKE=$(which qmake-qt5 || which qmake-qt4 || echo qmake) +QMAKE=$(command -v qmake-qt5 || command -v qmake) #PHASE 2 : dispatch command arguments @@ -178,8 +178,8 @@ EndOfCode # compile c++ to binary ( cd "$TMP" - $QMAKE -project "QT += widgets printsupport network" "CONFIG+=warn_off" "$CLANGOPT" "INCLUDEPATH+=$CUR" "INCLUDEPATH+=$FAUSTINC /opt/local/include" "QMAKE_CXXFLAGS=$CXXFLAGS -Wno-unused-parameter $FAUSTTOOLSFLAGS" "QMAKE_LFLAGS=$LFLAGS" "LIBS+=$ARCHLIB $SOUNDFILELIBS $SAMPLERATELIBS $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTINC/faust/gui/QTUI.h" "RESOURCES+= $FAUSTINC/faust/gui/Styles/Grey.qrc" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" "$POLYDEFS" "$MIDIDEFS" "$SOUNDFILEDEFS" "$SAMPLERATEDEFS" - $QMAKE $SPEC QMAKE_CFLAGS_ISYSTEM=-I + "$QMAKE" -project "QT += widgets printsupport network" "CONFIG+=warn_off" "$CLANGOPT" "INCLUDEPATH+=$CUR" "INCLUDEPATH+=$FAUSTINC /opt/local/include" "QMAKE_CXXFLAGS=$CXXFLAGS -Wno-unused-parameter $FAUSTTOOLSFLAGS" "QMAKE_LFLAGS=$LFLAGS" "LIBS+=$ARCHLIB $SOUNDFILELIBS $SAMPLERATELIBS $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTINC/faust/gui/QTUI.h" "RESOURCES+= $FAUSTINC/faust/gui/Styles/Grey.qrc" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" "$POLYDEFS" "$MIDIDEFS" "$SOUNDFILEDEFS" "$SAMPLERATEDEFS" + "$QMAKE" "$SPEC" QMAKE_CFLAGS_ISYSTEM=-I make ) > /dev/null || exit From debcefd1f21d59a944f7808f7a5bfa47f151fa1b Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 11:32:14 +0200 Subject: [PATCH 04/14] tools/faust2appls/faust2jaqt: Quoting all variables. --- tools/faust2appls/faust2jaqt | 64 ++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/tools/faust2appls/faust2jaqt b/tools/faust2appls/faust2jaqt index d0a87cde71..6e223f4c31 100755 --- a/tools/faust2appls/faust2jaqt +++ b/tools/faust2appls/faust2jaqt @@ -42,11 +42,11 @@ SOUNDFILELIBS="" SAMPLERATEDEFS="" SAMPLERATELIBS="" -while [ $1 ] +while [ "$1" ] do p=$1 - if [ $p = "-help" ] || [ $p = "-h" ]; then + if [ "$p" = "-help" ] || [ "$p" = "-h" ]; then echo "faust2jaqt [-httpd] [-qrcode] [-soundfile] [-resample] [-nvoices ] [-effect auto|] [-midi] [-osc] [additional Faust options (-vec -vs 8...)] " echo "Use '-httpd' to activate HTTP control" echo "Use '-qrcode' to activate QR code generation" @@ -70,30 +70,30 @@ do if [ "$p" = -icc ]; then ignore=" " - elif [ $p = "-deploy" ]; then + elif [ "$p" = "-deploy" ]; then DEPLOY="yes" - elif [ $p = "-nvoices" ]; then + elif [ "$p" = "-nvoices" ]; then POLYDEFS="DEFINES += POLY" shift NVOICES=$1 - if [ $NVOICES -ge 0 ]; then + if [ "$NVOICES" -ge 0 ]; then CXXFLAGS="$CXXFLAGS -DNVOICES=$NVOICES" fi - elif [ $p = "-effect" ]; then + elif [ "$p" = "-effect" ]; then POLYDEFS="DEFINES += POLY2" POLY="POLY2" shift EFFECT=$1 - elif [ $p = "-midi" ]; then + elif [ "$p" = "-midi" ]; then MIDIDEFS="DEFINES += MIDICTRL" - elif [ $p = "-soundfile" ]; then + elif [ "$p" = "-soundfile" ]; then SOUNDFILE="1" SOUNDFILEDEFS="DEFINES += SOUNDFILE" - SOUNDFILELIBS=`pkg-config --cflags --static --libs sndfile` - elif [ $p = "-resample" ]; then + SOUNDFILELIBS=$(pkg-config --cflags --static --libs sndfile) + elif [ "$p" = "-resample" ]; then SAMPLERATEDEFS="DEFINES += SAMPLERATE" - SAMPLERATELIBS=`pkg-config --cflags --static --libs samplerate` - elif [ $p = "-osc" ]; then + SAMPLERATELIBS=$(pkg-config --cflags --static --libs samplerate) + elif [ "$p" = "-osc" ]; then OSCDEFS="DEFINES += OSCCTRL" OSCLIBS="-lOSCFaust" elif [ "$p" = "-httpd" ]; then @@ -101,7 +101,7 @@ do HTTPLIBS="-lHTTPDFaust -lmicrohttpd" elif [ "$p" = "-qrcode" ]; then # requires -httpd QRDEFS="DEFINES += QRCODECTRL" - elif [ ${p:0:1} = "-" ]; then + elif [ "${p:0:1}" = "-" ]; then OPTIONS="$OPTIONS $p" elif [[ -f "$p" ]]; then FILES="$FILES $p" @@ -120,7 +120,7 @@ if [[ $(uname) == Darwin ]]; then ARCHLIB+=" -framework CoreMIDI -framework CoreFoundation -framework CoreAudio" HTTPLIBS="-L/opt/local/lib $HTTPLIBS" SYS_VERSION=$(uname -v | cut -d : -f1 | cut -d. -f1 | cut -d' ' -f4) - if [ $SYS_VERSION -ge 13 ] + if [ "$SYS_VERSION" -ge 13 ] then SPEC="-spec macx-clang" CLANGOPT="QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.9" @@ -155,8 +155,8 @@ for p in $FILES; do # compile faust to c++ if [ $POLY = "POLY2" ]; then - if [ $EFFECT = "auto" ]; then - cat > $TMP/effect.dsp << EndOfCode + if [ "$EFFECT" = "auto" ]; then + cat > "$TMP/effect.dsp" << EndOfCode adapt(1,1) = _; adapt(2,2) = _,_; adapt(1,2) = _ <: _,_; @@ -164,15 +164,15 @@ for p in $FILES; do adaptor(F,G) = adapt(outputs(F),inputs(G)); process = adaptor(library("$SRCDIR/$f").process, library("$SRCDIR/$f").effect) : library("$SRCDIR/$f").effect; EndOfCode - faust -i -json -a $ARCHFILE $OPTIONS "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + faust -i -json -a "$ARCHFILE" "$OPTIONS" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit faust -i -cn effect -a minimal-effect.cpp "$TMP/effect.dsp" -o "$TMP/effect.h" || exit rm "$TMP/effect.dsp" else - faust -i -json -a $ARCHFILE $OPTIONS "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + faust -i -json -a "$ARCHFILE" "$OPTIONS" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit faust -i -cn effect -a minimal-effect.cpp "$SRCDIR/$EFFECT" -o "$TMP/effect.h" || exit fi else - faust -i -json -a $ARCHFILE $OPTIONS "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + faust -i -json -a "$ARCHFILE" "$OPTIONS" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit fi # compile c++ to binary @@ -186,7 +186,7 @@ EndOfCode if [[ $(uname) == Darwin ]]; then if [ "$SOUNDFILE" = "1" ]; then # get all soundfiles from the JSON file - cat $p.json | awk ' + cat "$p.json" | awk ' BEGIN { FS=":"; SOFI=0; } /"soundfile"/ { SOFI=1; } /"url"/ { @@ -197,27 +197,27 @@ EndOfCode SOFI=0; } } - ' > $p-tmp.txt + ' > "$p-tmp.txt" # copy found soundfiles in the final binary - for snd in $(cat $p-tmp.txt); do - if [ -f $snd ]; then - if [ ${snd:0:1} = "/" ]; then + for snd in $(cat "$p-tmp.txt"); do + if [ -f "$snd" ]; then + if [ "${snd:0:1}" = "/" ]; then echo "Warning: soundfile with absolute path is not copied !" else #create destination path and possibly create directory - sfpath="$TMP/${f%.dsp}$EXT/Contents/Resources/$(dirname $snd)/" - if ! [ -d $sfpath ]; then + sfpath="$TMP/${f%.dsp}$EXT/Contents/Resources/$(dirname "$snd")/" + if ! [ -d "$sfpath" ]; then echo "Create $sfpath" - mkdir $sfpath + mkdir "$sfpath" fi echo "Copy $snd in ${f%.dsp}$EXT" - cp $snd $sfpath + cp "$snd" "$sfpath" fi else echo "Error: file $snd not found !" fi done - rm $p-tmp.txt + rm "$p-tmp.txt" fi fi @@ -229,15 +229,15 @@ EndOfCode fi #remove tempory files - rm -rf "$SRCDIR/${f%.dsp}$EXT" + rm -rf "${SRCDIR:?}/${f%.dsp}$EXT" cp -r "$TMP/${f%.dsp}$EXT" "$SRCDIR/${f%.dsp}$EXT" rm -rf "$TDR" - rm -f $p.json + rm -f "$p.json" # collect binary file name for FaustGIDE BINARIES="$BINARIES$SRCDIR/${f%.dsp}$EXT;" done -echo $BINARIES +echo "$BINARIES" From 8c8a71a2debd085716d537a8320cfca899bef96b Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 12:12:29 +0200 Subject: [PATCH 05/14] tools/faust2appls/faust2lv2: Quoting all variables. Setting shebang properly. Removing remaining non-qt5 parts. --- tools/faust2appls/faust2lv2 | 67 ++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/tools/faust2appls/faust2lv2 b/tools/faust2appls/faust2lv2 index 1c540d159d..be6c51ec90 100755 --- a/tools/faust2appls/faust2lv2 +++ b/tools/faust2appls/faust2lv2 @@ -1,18 +1,16 @@ -#! /bin/bash +#!/usr/bin/env bash #set -x - -# Default qmake setup (for GUI compilation). This requires Qt4 or Qt5 (Qt5 is -# preferred). We try to locate the qmake executable in some common locations -# here. If this doesn't work out then you can also set the QMAKE environment -# variable explicitly, or use one of the -qt4 and -qt5 options below. -[ -z "$QMAKE" ] && QMAKE=$(which qmake-qt5 || which /opt/local/libexec/qt5/bin/qmake || which qmake-qt4 || which /opt/local/libexec/qt4/bin/qmake || echo qmake) +# Default qmake setup (for GUI compilation). This requires Qt5. If qmake-qt5 or +# qmake can not be located in PATH, you can also set the QMAKE environment +# variable explicitly, or use the -qt5 option below. +[ -z "$QMAKE" ] && QMAKE=$(command -v qmake-qt5 || command -v qmake) # Where the Faust includes live. We assume that this is under the prefix of # whatever Faust binary 'which' locates. You can also specify this explicitly # by setting the FAUSTINC environment variable accordingly. -[ -z "$FAUSTINC" ] && FAUSTINC=$(which faust 2>/dev/null | sed -e 's?/bin/faust?/include/faust?') +[ -z "$FAUSTINC" ] && FAUSTINC=$(command -v faust 2>/dev/null | sed -e 's?/bin/faust?/include/faust?') # Where our own Faust library files are. This may be under a different prefix # or not installed anywhere. We try 'ls' on lv2ui.cpp in some common locations @@ -20,7 +18,7 @@ # that you can run the script from the faust-lv2 source directory. You can # also specify this explicitly by setting the FAUSTLIB environment variable # accordingly. -[ -z "$FAUSTLIB" ] && FAUSTLIB=$(dirname "$((ls -f /usr/share/faust/lv2ui.cpp /usr/local/share/faust/lv2ui.cpp /opt/local/share/faust/lv2ui.cpp "$PWD/lv2ui.cpp" 2>/dev/null)|tail -1)") +[ -z "$FAUSTLIB" ] && FAUSTLIB="$(dirname "$((ls -f /usr/share/faust/lv2ui.cpp /usr/local/share/faust/lv2ui.cpp /opt/local/share/faust/lv2ui.cpp "$PWD/lv2ui.cpp" 2>/dev/null) | tail -1)")" [ -z "$FAUSTLIB" ] && FAUSTLIB="$PWD" # defaults (these can be changed with the options listed below) @@ -99,14 +97,10 @@ EOF elif [ $p = "-gui" ]; then FAUST_UI=1 plugin_gui=yes - elif [ $p = "-qt4" ]; then - FAUST_UI=1 - plugin_gui=yes - QMAKE=$(which qmake-qt4 || which /opt/local/libexec/qt4/bin/qmake || echo qmake-qt4) elif [ $p = "-qt5" ]; then FAUST_UI=1 plugin_gui=yes - QMAKE=$(which qmake-qt5 || which /opt/local/libexec/qt5/bin/qmake || echo qmake-qt5) + QMAKE=$(command -v qmake-qt5 || command -v qmake) elif [ $p = "-dyn-manifest" ]; then dyn_manifest=yes elif [ $p = "-uri-prefix" ]; then @@ -136,7 +130,7 @@ EOF fi done -FILES=( $FILES ) +FILES=( "$FILES" ) if [ ${#FILES[@]} = 0 ]; then echo "$0: no filename specified" >&2 exit 1 @@ -150,24 +144,21 @@ fi if [ ! -f "$FAUSTINC/gui/QTUI.h" ]; then echo "$0: faust include files not found" >&2; exit 1; fi if [ ! -f "$FAUSTLIB/lv2ui.cpp" ]; then echo "$0: faust-lv2 library files not found" >&2; exit 1; fi -# Determine the Qt version so that we can edit the manifests accordingly. -QTVERSION=$($QMAKE -v 2>/dev/null | tail -1 | sed 's/.*Qt version \([0-9]\).*/\1/') - arch=lv2.cpp archui=lv2ui.cpp dspname=${FILES[0]} SRCDIR=$(dirname "$dspname") -ABSDIR=$(cd $SRCDIR && pwd) +ABSDIR=$(cd "$SRCDIR" && pwd) CURDIR=$(pwd) -clsname=`basename "$dspname" .dsp` +clsname=$(basename "$dspname" .dsp) cppname="$clsname.cpp" soname="$clsname$dllext" uicppname="${clsname}ui.cpp" uisoname="${clsname}ui$dllext" lv2name="$clsname.lv2" -tmpdir=`mktemp -d /tmp/faust2lv2.XXXXXX` -uitmpdir=$tmpdir/${clsname}ui.src +tmpdir=$(mktemp -d /tmp/faust2lv2.XXXXXX) +uitmpdir="$tmpdir/${clsname}ui.src" RESOURCES= STYLE_CXXFLAGS= @@ -183,21 +174,21 @@ CPPFLAGS="$CPPFLAGS -DNVOICES=$NVOICES" fi # Create the temp directory and the bundle directory inside it. -mkdir -p $tmpdir/$lv2name +mkdir -p "$tmpdir/$lv2name" #trap "echo $0: compile error, intermediate files left in $tmpdir >&2" EXIT # Compile the Faust module. -faust -i -a "$FAUSTLIB/$arch" -cn "$clsname" $OPTIONS "$dspname" -o "$tmpdir/$cppname" || exit 1 -$CXX -shared $CXXFLAGS -DDLLEXT="\"$dllext\"" $FAUSTTOOLSFLAGS $PROCARCH -I"$ABSDIR" $CPPFLAGS "$tmpdir/$cppname" -o "$tmpdir/$lv2name/$soname" || exit 1 +faust -i -a "$FAUSTLIB/$arch" -cn "$clsname" "$OPTIONS" "$dspname" -o "$tmpdir/$cppname" || exit 1 +"$CXX" -shared "$CXXFLAGS" -DDLLEXT="\"$dllext\"" "$FAUSTTOOLSFLAGS" "$PROCARCH" -I"$ABSDIR" "$CPPFLAGS" "$tmpdir/$cppname" -o "$tmpdir/$lv2name/$soname" || exit 1 if [ -n "$plugin_gui" ]; then # Compile the UI module. -mkdir -p $uitmpdir -faust -i -a "$FAUSTLIB/$archui" -cn "$clsname" $OPTIONS "$dspname" -o "$uitmpdir/$uicppname" || exit 1 +mkdir -p "$uitmpdir" +faust -i -a "$FAUSTLIB/$archui" -cn "$clsname" "$OPTIONS" "$dspname" -o "$uitmpdir/$uicppname" || exit 1 ( - cd $uitmpdir - $QMAKE -project -t lib -o ${clsname}ui.pro "CONFIG += gui plugin no_plugin_name_prefix warn_off" "QT += widgets printsupport network" "INCLUDEPATH+=$ABSDIR" "INCLUDEPATH+=$CURDIR" "INCLUDEPATH+=$FAUSTLIB" "INCLUDEPATH+=$FAUSTINC" "QMAKE_CXXFLAGS=-std=c++11 $(echo $CPPFLAGS|sed -e 's/"/\\\\\\"/g')" $STYLE_CXXFLAGS "LIBS+=$ARCHLIB $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTLIB/lv2qtgui.h $FAUSTINC/gui/QTUI.h" $RESOURCES "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" - $QMAKE *.pro + cd "$uitmpdir" + "$QMAKE" -project -t lib -o "${clsname}ui.pro" "CONFIG += gui plugin no_plugin_name_prefix warn_off" "QT += widgets printsupport network" "INCLUDEPATH+=$ABSDIR" "INCLUDEPATH+=$CURDIR" "INCLUDEPATH+=$FAUSTLIB" "INCLUDEPATH+=$FAUSTINC" "QMAKE_CXXFLAGS=-std=c++11 $(echo "$CPPFLAGS"|sed -e 's/"/\\\\\\"/g')" "$STYLE_CXXFLAGS" "LIBS+=$ARCHLIB $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTLIB/lv2qtgui.h $FAUSTINC/gui/QTUI.h" "$RESOURCES" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" + "$QMAKE" ./*.pro make || exit 1 - mv $uisoname "$tmpdir/$lv2name" + mv "$uisoname" "$tmpdir/$lv2name" ) > /dev/null || exit 1 fi # Generate the manifest. There are four different variations of the manifest, @@ -205,7 +196,7 @@ fi if [ -n "$dyn_manifest" ]; then # Use a dynamic manifest. if [ -n "$plugin_gui" ]; then -sed -e"s?@name@?$clsname?g" -e"s?@uri@?$URI_PREFIX/$clsname?g" -e"s?@dllext@?$dllext?g" -e "s?ui:Qt5UI?ui:Qt${QTVERSION}UI?g" > "$tmpdir/$lv2name/manifest.ttl" < "$tmpdir/$lv2name/manifest.ttl" < "$tmpdir/$lv2name/manifest.ttl" < "$tmpdir/$lv2name/manifest.ttl" < "$tmpdir/$lv2name/$clsname.ttl" rm -f "$tmpdir/$clsname" fi #trap - EXIT # copy down the bundle -rm -rf "$SRCDIR/$lv2name" +rm -rf "${SRCDIR:?}/$lv2name" cp -r "$tmpdir/$lv2name" "$SRCDIR" if [[ $KEEP == yes ]]; then # keep the build directory - rm -rf "$SRCDIR/$clsname" - mv $tmpdir "$SRCDIR/$clsname" + rm -rf "${SRCDIR:?}/$clsname" + mv "$tmpdir" "$SRCDIR/$clsname" else # Clean up. - rm -rf $tmpdir + rm -rf "$tmpdir" fi # Print the name of the generated bundle zip file. echo "$SRCDIR/$lv2name;" From 4b928e32c0a3f54acf2458d65dbfcd4600a3cb5d Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 16:18:13 +0200 Subject: [PATCH 06/14] tools/faust2appls/faust2jaqt: Fixing shebang to use /usr/bin/env. Setting -e specifically. --- tools/faust2appls/faust2jaqt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/faust2appls/faust2jaqt b/tools/faust2appls/faust2jaqt index 6e223f4c31..bca47b2f4d 100755 --- a/tools/faust2appls/faust2jaqt +++ b/tools/faust2appls/faust2jaqt @@ -1,4 +1,4 @@ -#! /bin/bash -e +#!/usr/bin/env bash ##################################################################### # # @@ -7,6 +7,8 @@ # # ##################################################################### +set -e + . faustpath . faustoptflags From 9b80cd7cd691c1f90f5a07c41ecc0f55dca023f1 Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 19:12:46 +0200 Subject: [PATCH 07/14] tools/faust2appls/faust2jaqt: Making sure, that OPTIONS are only used when converting from dsp to cpp, if they are actually defined. Making sure, that SPEC is only used with qmake/qmake-qt5, if it is non-empty. --- tools/faust2appls/faust2jaqt | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/tools/faust2appls/faust2jaqt b/tools/faust2appls/faust2jaqt index bca47b2f4d..fe97574b69 100755 --- a/tools/faust2appls/faust2jaqt +++ b/tools/faust2appls/faust2jaqt @@ -43,6 +43,7 @@ SOUNDFILEDEFS="" SOUNDFILELIBS="" SAMPLERATEDEFS="" SAMPLERATELIBS="" +SPEC="" while [ "$1" ] do @@ -166,23 +167,39 @@ for p in $FILES; do adaptor(F,G) = adapt(outputs(F),inputs(G)); process = adaptor(library("$SRCDIR/$f").process, library("$SRCDIR/$f").effect) : library("$SRCDIR/$f").effect; EndOfCode - faust -i -json -a "$ARCHFILE" "$OPTIONS" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + if [ -n "$OPTIONS" ]; then + faust -i -json -a "$ARCHFILE" "$OPTIONS" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + else + faust -i -json -a "$ARCHFILE" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + fi faust -i -cn effect -a minimal-effect.cpp "$TMP/effect.dsp" -o "$TMP/effect.h" || exit rm "$TMP/effect.dsp" else + if [ -n "$OPTIONS" ]; then faust -i -json -a "$ARCHFILE" "$OPTIONS" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + else + faust -i -json -a "$ARCHFILE" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + fi faust -i -cn effect -a minimal-effect.cpp "$SRCDIR/$EFFECT" -o "$TMP/effect.h" || exit fi else - faust -i -json -a "$ARCHFILE" "$OPTIONS" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + if [ -n "$OPTIONS" ]; then + faust -i -json -a "$ARCHFILE" "$OPTIONS" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + else + faust -i -json -a "$ARCHFILE" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + fi fi # compile c++ to binary ( cd "$TMP" "$QMAKE" -project "QT += widgets printsupport network" "CONFIG+=warn_off" "$CLANGOPT" "INCLUDEPATH+=$CUR" "INCLUDEPATH+=$FAUSTINC /opt/local/include" "QMAKE_CXXFLAGS=$CXXFLAGS -Wno-unused-parameter $FAUSTTOOLSFLAGS" "QMAKE_LFLAGS=$LFLAGS" "LIBS+=$ARCHLIB $SOUNDFILELIBS $SAMPLERATELIBS $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTINC/faust/gui/QTUI.h" "RESOURCES+= $FAUSTINC/faust/gui/Styles/Grey.qrc" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" "$POLYDEFS" "$MIDIDEFS" "$SOUNDFILEDEFS" "$SAMPLERATEDEFS" - "$QMAKE" "$SPEC" QMAKE_CFLAGS_ISYSTEM=-I - make + if [ -n "$SPEC" ]; then + "$QMAKE" "$SPEC" QMAKE_CFLAGS_ISYSTEM=-I + else + "$QMAKE" QMAKE_CFLAGS_ISYSTEM=-I + fi + make ) > /dev/null || exit if [[ $(uname) == Darwin ]]; then From b8c267e93e3215beca73ed24fd179eba4cc5e3b8 Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 19:48:13 +0200 Subject: [PATCH 08/14] tools/faust2appls/faust2lv2: Providing CXXFLAGS and CPPFLAGS in arrays to be able to quote them properly. Only optionally using OPTIONS or FAUSTTOOLSFLAGS when compiling, if they are non-empty. --- tools/faust2appls/faust2lv2 | 59 +++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/tools/faust2appls/faust2lv2 b/tools/faust2appls/faust2lv2 index be6c51ec90..96a55566ad 100755 --- a/tools/faust2appls/faust2lv2 +++ b/tools/faust2appls/faust2lv2 @@ -35,7 +35,7 @@ STYLE="" PROCARCH="-fPIC" dllext=".so" -CXXFLAGS="-O3 -std=c++11 -mfpmath=sse -msse -msse2 -msse3 -ffast-math -ftree-vectorize" +CXXFLAGS=("-O3" "-std=c++11" "-mfpmath=sse" "-msse" "-msse2" "-msse3" "-ffast-math" "-ftree-vectorize") # Darwin specifics if [[ $(uname) == Darwin ]]; then @@ -77,7 +77,7 @@ EOF : ignore elif [ $p = "-icc" ]; then CXX=icpc - CXXFLAGS="-O3 -xHost -ftz -fno-alias -fp-model fast=2" + CXXFLAGS=("-O3" "-xHost" "-ftz" "-fno-alias" "-fp-model" "fast=2") elif [ $p = "-osc" ]; then OSCDEFS="DEFINES += OSCCTRL" OSCLIBS="-lOSCFaust" @@ -114,7 +114,7 @@ EOF elif [ $p = "-arch64" ]; then PROCARCH="-m64 -fPIC" elif [ $p = "-osx" ]; then - CXXFLAGS="-O3 -march=native -mfpmath=sse -msse -msse2 -msse3 -ffast-math -ftree-vectorize -I/opt/local/include" + CXXFLAGS=("-O3" "-march=native" "-mfpmath=sse" "-msse" "-msse2" "-msse3" "-ffast-math" "-ftree-vectorize" "-I/opt/local/include") dllext=".dylib" elif [ $p = "-keep" ]; then KEEP="yes" @@ -130,7 +130,7 @@ EOF fi done -FILES=( "$FILES" ) +FILES=( $FILES ) if [ ${#FILES[@]} = 0 ]; then echo "$0: no filename specified" >&2 exit 1 @@ -146,7 +146,8 @@ if [ ! -f "$FAUSTLIB/lv2ui.cpp" ]; then echo "$0: faust-lv2 library files not fo arch=lv2.cpp archui=lv2ui.cpp -dspname=${FILES[0]} +dspname="${FILES[0]}" +echo "dspname: $dspname" SRCDIR=$(dirname "$dspname") ABSDIR=$(cd "$SRCDIR" && pwd) CURDIR=$(pwd) @@ -167,29 +168,45 @@ if [ -n "$STYLE" ]; then STYLE_CXXFLAGS="QMAKE_CXXFLAGS+=-DSTYLE=\"$STYLE\"" fi -CXX=g++ -CPPFLAGS="-DPLUGIN_URI=\"$URI_PREFIX/$clsname\" -DFAUST_META=$FAUST_META -DFAUST_MIDICC=$FAUST_MIDICC -DFAUST_MTS=$FAUST_MTS -DFAUST_UI=$FAUST_UI -DVOICE_CTRLS=$VOICE_CTRLS" +CXX=$(command -v g++) +# CPPFLAGS="-DPLUGIN_URI=\"$URI_PREFIX/$clsname\" -DFAUST_META=$FAUST_META -DFAUST_MIDICC=$FAUST_MIDICC -DFAUST_MTS=$FAUST_MTS -DFAUST_UI=$FAUST_UI -DVOICE_CTRLS=$VOICE_CTRLS" +CPPFLAGS=("-DPLUGIN_URI=\"$URI_PREFIX/$clsname\"" "-DFAUST_META=$FAUST_META" "-DFAUST_MIDICC=$FAUST_MIDICC" "-DFAUST_MTS=$FAUST_MTS" "-DFAUST_UI=$FAUST_UI" "-DVOICE_CTRLS=$VOICE_CTRLS") if [ $NVOICES -ge 0 ]; then -CPPFLAGS="$CPPFLAGS -DNVOICES=$NVOICES" +# CPPFLAGS="$CPPFLAGS -DNVOICES=$NVOICES" +CPPFLAGS=( "$CPPFLAGS" "-DNVOICES=$NVOICES" ) fi # Create the temp directory and the bundle directory inside it. mkdir -p "$tmpdir/$lv2name" #trap "echo $0: compile error, intermediate files left in $tmpdir >&2" EXIT # Compile the Faust module. -faust -i -a "$FAUSTLIB/$arch" -cn "$clsname" "$OPTIONS" "$dspname" -o "$tmpdir/$cppname" || exit 1 -"$CXX" -shared "$CXXFLAGS" -DDLLEXT="\"$dllext\"" "$FAUSTTOOLSFLAGS" "$PROCARCH" -I"$ABSDIR" "$CPPFLAGS" "$tmpdir/$cppname" -o "$tmpdir/$lv2name/$soname" || exit 1 +if [ -n "$OPTIONS" ]; then + faust -i -a "$FAUSTLIB/$arch" -cn "$clsname" "$OPTIONS" "$dspname" -o "$tmpdir/$cppname" || exit 1 +else + faust -i -a "$FAUSTLIB/$arch" -cn "$clsname" "$dspname" -o "$tmpdir/$cppname" || exit 1 +fi + +if [ -n "$FAUSTTOOLSFLAGS" ]; then + "$CXX" -shared "$CXXFLAGS" -DDLLEXT="\"$dllext\"" "$FAUSTTOOLSFLAGS" "$PROCARCH" -I"$ABSDIR" "$CPPFLAGS" "$tmpdir/$cppname" -o "$tmpdir/$lv2name/$soname" || exit 1 +else + "$CXX" -shared "$CXXFLAGS" -DDLLEXT="\"$dllext\"" "$PROCARCH" -I"$ABSDIR" "$CPPFLAGS" "$tmpdir/$cppname" -o "$tmpdir/$lv2name/$soname" || exit 1 +fi + if [ -n "$plugin_gui" ]; then # Compile the UI module. mkdir -p "$uitmpdir" -faust -i -a "$FAUSTLIB/$archui" -cn "$clsname" "$OPTIONS" "$dspname" -o "$uitmpdir/$uicppname" || exit 1 -( - cd "$uitmpdir" - "$QMAKE" -project -t lib -o "${clsname}ui.pro" "CONFIG += gui plugin no_plugin_name_prefix warn_off" "QT += widgets printsupport network" "INCLUDEPATH+=$ABSDIR" "INCLUDEPATH+=$CURDIR" "INCLUDEPATH+=$FAUSTLIB" "INCLUDEPATH+=$FAUSTINC" "QMAKE_CXXFLAGS=-std=c++11 $(echo "$CPPFLAGS"|sed -e 's/"/\\\\\\"/g')" "$STYLE_CXXFLAGS" "LIBS+=$ARCHLIB $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTLIB/lv2qtgui.h $FAUSTINC/gui/QTUI.h" "$RESOURCES" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" - "$QMAKE" ./*.pro - make || exit 1 - mv "$uisoname" "$tmpdir/$lv2name" -) > /dev/null || exit 1 + if [ -n "$OPTIONS" ]; then + faust -i -a "$FAUSTLIB/$archui" -cn "$clsname" "$OPTIONS" "$dspname" -o "$uitmpdir/$uicppname" || exit 1 + else + faust -i -a "$FAUSTLIB/$archui" -cn "$clsname" "$dspname" -o "$uitmpdir/$uicppname" || exit 1 + fi + ( + cd "$uitmpdir" + "$QMAKE" -project -t lib -o "${clsname}ui.pro" "CONFIG += gui plugin no_plugin_name_prefix warn_off" "QT += widgets printsupport network" "INCLUDEPATH+=$ABSDIR" "INCLUDEPATH+=$CURDIR" "INCLUDEPATH+=$FAUSTLIB" "INCLUDEPATH+=$FAUSTINC" "QMAKE_CXXFLAGS=-std=c++11 $(echo "$CPPFLAGS"|sed -e 's/"/\\\\\\"/g')" "$STYLE_CXXFLAGS" "LIBS+=$ARCHLIB $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTLIB/lv2qtgui.h $FAUSTINC/gui/QTUI.h" "$RESOURCES" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" + "$QMAKE" ./*.pro + make || exit 1 + mv "$uisoname" "$tmpdir/$lv2name" + ) > /dev/null || exit 1 fi # Generate the manifest. There are four different variations of the manifest, # depending on whether dynamic manifests and the plugin gui is enabled or not. @@ -349,7 +366,11 @@ EOF fi # This compiles the plugin to an executable which is run to generate the # plugin-specific part of the manifest. -"$CXX" "$CXXFLAGS" -DDLLEXT="\"$dllext\"" "$FAUSTTOOLSFLAGS" -I"$ABSDIR" "$CPPFLAGS" "$tmpdir/$cppname" -o "$tmpdir/$clsname" || exit 1 +if [ -n "$FAUSTTOOLSFLAGS" ]; then + "$CXX" "$CXXFLAGS" -DDLLEXT="\"$dllext\"" "$FAUSTTOOLSFLAGS" -I"$ABSDIR" "$CPPFLAGS" "$tmpdir/$cppname" -o "$tmpdir/$clsname" || exit 1 +else + "$CXX" "$CXXFLAGS" -DDLLEXT="\"$dllext\"" -I"$ABSDIR" "$CPPFLAGS" "$tmpdir/$cppname" -o "$tmpdir/$clsname" || exit 1 +fi "$tmpdir/$clsname" > "$tmpdir/$lv2name/$clsname.ttl" rm -f "$tmpdir/$clsname" fi From ea39a63ade5675b8b4b32cfb33729d3b631215f3 Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 22:48:06 +0200 Subject: [PATCH 09/14] tools/faust2appls/faust2jaqt: Turning CXXFLAGS, FILES and OPTIONS into proper arrays, to which additions can just be added with the += operator. Using the arrays as separate elements with the [@] operator in e.g. faust compiler calls. Expanding to single string with [*] operator in qmake call. --- tools/faust2appls/faust2jaqt | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/tools/faust2appls/faust2jaqt b/tools/faust2appls/faust2jaqt index fe97574b69..d4bee7ade0 100755 --- a/tools/faust2appls/faust2jaqt +++ b/tools/faust2appls/faust2jaqt @@ -12,7 +12,7 @@ set -e . faustpath . faustoptflags -CXXFLAGS="$MYGCCFLAGS" +CXXFLAGS=("$MYGCCFLAGS") ARCHFILE="$FAUSTARCH/jack-qt.cpp" @@ -44,6 +44,8 @@ SOUNDFILELIBS="" SAMPLERATEDEFS="" SAMPLERATELIBS="" SPEC="" +FILES=() +OPTIONS=() while [ "$1" ] do @@ -80,7 +82,7 @@ do shift NVOICES=$1 if [ "$NVOICES" -ge 0 ]; then - CXXFLAGS="$CXXFLAGS -DNVOICES=$NVOICES" + CXXFLAGS+=("-DNVOICES=$NVOICES") fi elif [ "$p" = "-effect" ]; then POLYDEFS="DEFINES += POLY2" @@ -105,11 +107,11 @@ do elif [ "$p" = "-qrcode" ]; then # requires -httpd QRDEFS="DEFINES += QRCODECTRL" elif [ "${p:0:1}" = "-" ]; then - OPTIONS="$OPTIONS $p" + OPTIONS+=("$p") elif [[ -f "$p" ]]; then - FILES="$FILES $p" + FILES+=("$p") else - OPTIONS="$OPTIONS $p" + OPTIONS+=("$p") fi shift @@ -126,8 +128,8 @@ if [[ $(uname) == Darwin ]]; then if [ "$SYS_VERSION" -ge 13 ] then SPEC="-spec macx-clang" - CLANGOPT="QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.9" - CXXFLAGS="$CXXFLAGS -mmacosx-version-min=10.9" + CLANGOPT="QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.9" + CXXFLAGS+=("-mmacosx-version-min=10.9") else SPEC="-spec macx-g++" CLANGOPT="" @@ -145,7 +147,7 @@ fi #------------------------------------------------------------------- # compile the *.dsp files # -for p in $FILES; do +for p in "${FILES[@]}"; do CUR=$(pwd) f=$(basename "$p") @@ -167,24 +169,24 @@ for p in $FILES; do adaptor(F,G) = adapt(outputs(F),inputs(G)); process = adaptor(library("$SRCDIR/$f").process, library("$SRCDIR/$f").effect) : library("$SRCDIR/$f").effect; EndOfCode - if [ -n "$OPTIONS" ]; then - faust -i -json -a "$ARCHFILE" "$OPTIONS" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + if [ "${#OPTIONS[@]}" -gt 0 ]; then + faust -i -json -a "$ARCHFILE" "${OPTIONS[@]}" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit else faust -i -json -a "$ARCHFILE" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit fi faust -i -cn effect -a minimal-effect.cpp "$TMP/effect.dsp" -o "$TMP/effect.h" || exit rm "$TMP/effect.dsp" else - if [ -n "$OPTIONS" ]; then - faust -i -json -a "$ARCHFILE" "$OPTIONS" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + if [ "${#OPTIONS[@]}" -gt 0 ]; then + faust -i -json -a "$ARCHFILE" "${OPTIONS[@]}" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit else faust -i -json -a "$ARCHFILE" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit fi faust -i -cn effect -a minimal-effect.cpp "$SRCDIR/$EFFECT" -o "$TMP/effect.h" || exit fi else - if [ -n "$OPTIONS" ]; then - faust -i -json -a "$ARCHFILE" "$OPTIONS" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit + if [ "${#OPTIONS[@]}" -gt 0 ]; then + faust -i -json -a "$ARCHFILE" "${OPTIONS[@]}" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit else faust -i -json -a "$ARCHFILE" "$SRCDIR/$f" -o "$TMP/${f%.dsp}_tmp.cpp" || exit fi @@ -193,7 +195,7 @@ EndOfCode # compile c++ to binary ( cd "$TMP" - "$QMAKE" -project "QT += widgets printsupport network" "CONFIG+=warn_off" "$CLANGOPT" "INCLUDEPATH+=$CUR" "INCLUDEPATH+=$FAUSTINC /opt/local/include" "QMAKE_CXXFLAGS=$CXXFLAGS -Wno-unused-parameter $FAUSTTOOLSFLAGS" "QMAKE_LFLAGS=$LFLAGS" "LIBS+=$ARCHLIB $SOUNDFILELIBS $SAMPLERATELIBS $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTINC/faust/gui/QTUI.h" "RESOURCES+= $FAUSTINC/faust/gui/Styles/Grey.qrc" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" "$POLYDEFS" "$MIDIDEFS" "$SOUNDFILEDEFS" "$SAMPLERATEDEFS" + "$QMAKE" -project "QT += widgets printsupport network" "CONFIG+=warn_off" "$CLANGOPT" "INCLUDEPATH+=$CUR" "INCLUDEPATH+=$FAUSTINC /opt/local/include" "QMAKE_CXXFLAGS=${CXXFLAGS[*]} -Wno-unused-parameter $FAUSTTOOLSFLAGS" "QMAKE_LFLAGS=$LFLAGS" "LIBS+=$ARCHLIB $SOUNDFILELIBS $SAMPLERATELIBS $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTINC/faust/gui/QTUI.h" "RESOURCES+= $FAUSTINC/faust/gui/Styles/Grey.qrc" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" "$POLYDEFS" "$MIDIDEFS" "$SOUNDFILEDEFS" "$SAMPLERATEDEFS" if [ -n "$SPEC" ]; then "$QMAKE" "$SPEC" QMAKE_CFLAGS_ISYSTEM=-I else From 9d7b335e7b570abfc465298764fc026d1e78764f Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 22:52:32 +0200 Subject: [PATCH 10/14] tools/faust2appls/faust2lv2: Turning OPTIONS and FILES into arrays. Removing quoted versions of CPPFLAGS. Adding to CPPFLAGS with += operator. Using CPPFLAGS, and OPTIONS by expanding them as several strings with the [@] operator (e.g. in faust or CXX calls). Expanding CPPFLAGS with [*] to single string in calls to QMAKE (because they are being assigned to a variable). --- tools/faust2appls/faust2lv2 | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/tools/faust2appls/faust2lv2 b/tools/faust2appls/faust2lv2 index 96a55566ad..2dc96608c7 100755 --- a/tools/faust2appls/faust2lv2 +++ b/tools/faust2appls/faust2lv2 @@ -33,6 +33,9 @@ NVOICES=-1 KEEP="no" STYLE="" +FILES=( ) +OPTIONS=( ) + PROCARCH="-fPIC" dllext=".so" CXXFLAGS=("-O3" "-std=c++11" "-mfpmath=sse" "-msse" "-msse2" "-msse3" "-ffast-math" "-ftree-vectorize") @@ -122,15 +125,14 @@ EOF (( i++ )) STYLE=${!i} elif [ ${p:0:1} = "-" ]; then - OPTIONS="$OPTIONS $p" + OPTIONS+=("$p") elif [[ -f "$p" ]]; then - FILES="$FILES $p" + FILES+=("$p") else - OPTIONS="$OPTIONS $p" + OPTIONS+=("$p") fi done -FILES=( $FILES ) if [ ${#FILES[@]} = 0 ]; then echo "$0: no filename specified" >&2 exit 1 @@ -169,40 +171,38 @@ if [ -n "$STYLE" ]; then fi CXX=$(command -v g++) -# CPPFLAGS="-DPLUGIN_URI=\"$URI_PREFIX/$clsname\" -DFAUST_META=$FAUST_META -DFAUST_MIDICC=$FAUST_MIDICC -DFAUST_MTS=$FAUST_MTS -DFAUST_UI=$FAUST_UI -DVOICE_CTRLS=$VOICE_CTRLS" CPPFLAGS=("-DPLUGIN_URI=\"$URI_PREFIX/$clsname\"" "-DFAUST_META=$FAUST_META" "-DFAUST_MIDICC=$FAUST_MIDICC" "-DFAUST_MTS=$FAUST_MTS" "-DFAUST_UI=$FAUST_UI" "-DVOICE_CTRLS=$VOICE_CTRLS") if [ $NVOICES -ge 0 ]; then -# CPPFLAGS="$CPPFLAGS -DNVOICES=$NVOICES" -CPPFLAGS=( "$CPPFLAGS" "-DNVOICES=$NVOICES" ) + CPPFLAGS+=("-DNVOICES=$NVOICES") fi # Create the temp directory and the bundle directory inside it. mkdir -p "$tmpdir/$lv2name" #trap "echo $0: compile error, intermediate files left in $tmpdir >&2" EXIT # Compile the Faust module. -if [ -n "$OPTIONS" ]; then - faust -i -a "$FAUSTLIB/$arch" -cn "$clsname" "$OPTIONS" "$dspname" -o "$tmpdir/$cppname" || exit 1 +if [ "${#OPTIONS[@]}" -gt 0 ]; then + faust -i -a "$FAUSTLIB/$arch" -cn "$clsname" "${OPTIONS[@]}" "$dspname" -o "$tmpdir/$cppname" || exit 1 else faust -i -a "$FAUSTLIB/$arch" -cn "$clsname" "$dspname" -o "$tmpdir/$cppname" || exit 1 fi if [ -n "$FAUSTTOOLSFLAGS" ]; then - "$CXX" -shared "$CXXFLAGS" -DDLLEXT="\"$dllext\"" "$FAUSTTOOLSFLAGS" "$PROCARCH" -I"$ABSDIR" "$CPPFLAGS" "$tmpdir/$cppname" -o "$tmpdir/$lv2name/$soname" || exit 1 + "$CXX" -shared "${CXXFLAGS[@]}" -DDLLEXT="\"$dllext\"" "$FAUSTTOOLSFLAGS" "$PROCARCH" -I"$ABSDIR" "${CPPFLAGS[@]}" "$tmpdir/$cppname" -o "$tmpdir/$lv2name/$soname" || exit 1 else - "$CXX" -shared "$CXXFLAGS" -DDLLEXT="\"$dllext\"" "$PROCARCH" -I"$ABSDIR" "$CPPFLAGS" "$tmpdir/$cppname" -o "$tmpdir/$lv2name/$soname" || exit 1 + "$CXX" -shared "${CXXFLAGS[@]}" -DDLLEXT="\"$dllext\"" "$PROCARCH" -I"$ABSDIR" "${CPPFLAGS[@]}" "$tmpdir/$cppname" -o "$tmpdir/$lv2name/$soname" || exit 1 fi if [ -n "$plugin_gui" ]; then # Compile the UI module. mkdir -p "$uitmpdir" - if [ -n "$OPTIONS" ]; then - faust -i -a "$FAUSTLIB/$archui" -cn "$clsname" "$OPTIONS" "$dspname" -o "$uitmpdir/$uicppname" || exit 1 + if [ "${#OPTIONS[@]}" -gt 0 ]; then + faust -i -a "$FAUSTLIB/$archui" -cn "$clsname" "${OPTIONS[@]}" "$dspname" -o "$uitmpdir/$uicppname" || exit 1 else faust -i -a "$FAUSTLIB/$archui" -cn "$clsname" "$dspname" -o "$uitmpdir/$uicppname" || exit 1 fi ( cd "$uitmpdir" - "$QMAKE" -project -t lib -o "${clsname}ui.pro" "CONFIG += gui plugin no_plugin_name_prefix warn_off" "QT += widgets printsupport network" "INCLUDEPATH+=$ABSDIR" "INCLUDEPATH+=$CURDIR" "INCLUDEPATH+=$FAUSTLIB" "INCLUDEPATH+=$FAUSTINC" "QMAKE_CXXFLAGS=-std=c++11 $(echo "$CPPFLAGS"|sed -e 's/"/\\\\\\"/g')" "$STYLE_CXXFLAGS" "LIBS+=$ARCHLIB $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTLIB/lv2qtgui.h $FAUSTINC/gui/QTUI.h" "$RESOURCES" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" + "$QMAKE" -project -t lib -o "${clsname}ui.pro" "CONFIG += gui plugin no_plugin_name_prefix warn_off" "QT += widgets printsupport network" "INCLUDEPATH+=$ABSDIR" "INCLUDEPATH+=$CURDIR" "INCLUDEPATH+=$FAUSTLIB" "INCLUDEPATH+=$FAUSTINC" "QMAKE_CXXFLAGS=-std=c++11 $(echo "${CPPFLAGS[@]}"|sed -e 's/"/\\\\\\"/g')" "$STYLE_CXXFLAGS" "LIBS+=$ARCHLIB $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTLIB/lv2qtgui.h $FAUSTINC/gui/QTUI.h" "$RESOURCES" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" "$QMAKE" ./*.pro make || exit 1 mv "$uisoname" "$tmpdir/$lv2name" @@ -367,9 +367,9 @@ fi # This compiles the plugin to an executable which is run to generate the # plugin-specific part of the manifest. if [ -n "$FAUSTTOOLSFLAGS" ]; then - "$CXX" "$CXXFLAGS" -DDLLEXT="\"$dllext\"" "$FAUSTTOOLSFLAGS" -I"$ABSDIR" "$CPPFLAGS" "$tmpdir/$cppname" -o "$tmpdir/$clsname" || exit 1 + "$CXX" "${CXXFLAGS[@]}" -DDLLEXT="\"$dllext\"" "$FAUSTTOOLSFLAGS" -I"$ABSDIR" "${CPPFLAGS[@]}" "$tmpdir/$cppname" -o "$tmpdir/$clsname" || exit 1 else - "$CXX" "$CXXFLAGS" -DDLLEXT="\"$dllext\"" -I"$ABSDIR" "$CPPFLAGS" "$tmpdir/$cppname" -o "$tmpdir/$clsname" || exit 1 + "$CXX" "${CXXFLAGS[@]}" -DDLLEXT="\"$dllext\"" -I"$ABSDIR" "${CPPFLAGS[@]}" "$tmpdir/$cppname" -o "$tmpdir/$clsname" || exit 1 fi "$tmpdir/$clsname" > "$tmpdir/$lv2name/$clsname.ttl" rm -f "$tmpdir/$clsname" From 91ec992dada75a644c66f6090a7ac3653141ee7e Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 22:59:35 +0200 Subject: [PATCH 11/14] tools/faust2appls/faust2faustvst: Turning PROCARCH, OPTIONS, FILES, CXXFLAGS and CPPFLAGS into arrays, so they can be more easily handled and safely added to. Only using OPTIONS, if they are actually defined. Only using FAUSTTOOLSFLAGS, if they are actually defined. Dropping qt5 related extra check for x11extras and adding it directly to qmake call. --- tools/faust2appls/faust2faustvst | 58 ++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/tools/faust2appls/faust2faustvst b/tools/faust2appls/faust2faustvst index e7141464be..78bb1ec700 100755 --- a/tools/faust2appls/faust2faustvst +++ b/tools/faust2appls/faust2faustvst @@ -59,14 +59,17 @@ NVOICES=-1 KEEP="no" STYLE="" -PROCARCH="-fPIC" +FILES=() +OPTIONS=() + +PROCARCH=("-fPIC") dllext=".so" -CXXFLAGS="-O3 -std=c++11 -march=native -mfpmath=sse -msse -msse2 -msse3 -ffast-math -ftree-vectorize" +CXXFLAGS=("-O3" "-std=c++11" "-march=native" "-mfpmath=sse" "-msse" "-msse2" "-msse3" "-ffast-math" "-ftree-vectorize") # Darwin-specific #ARCH="-arch i386 -arch x86_64" if [[ $(uname) == Darwin || $CROSSTARGET == Darwin ]]; then - CXXFLAGS="-O3 -std=c++11 $ARCH -mfpmath=sse -msse -msse2 -msse3 -ffast-math -ftree-vectorize -I/opt/local/include" + CXXFLAGS=("-O3" "-std=c++11" "$ARCH" "-mfpmath=sse" "-msse" "-msse2" "-msse3" "-ffast-math" "-ftree-vectorize" "-I/opt/local/include") dllext=".vst" fi @@ -87,7 +90,7 @@ Options: -novoicectrls: no extra polyphony/tuning controls on GUI (instruments only) -nvoices N: number of synth voices (instruments only; arg must be an integer) -osc: activate OSC control --qt4, -qt5: select the GUI toolkit (requires Qt4/5; implies -gui) +-qt5: select the GUI toolkit (requires Qt5; implies -gui) -style S: select the stylesheet (arg must be Default, Blue, Grey or Salmon) Environment variables: @@ -107,7 +110,7 @@ EOF : ignore elif [ $p = "-icc" ]; then CXX=icpc - CXXFLAGS="-O3 -std=c++11 -xHost -ftz -fno-alias -fp-model fast=2" + CXXFLAGS=("-O3" "-std=c++11" "-xHost" "-ftz" "-fno-alias" "-fp-model" "fast=2") elif [ $p = "-osc" ]; then OSCDEFS="DEFINES += OSCCTRL" OSCLIBS="-lOSCFaust" @@ -135,11 +138,11 @@ EOF (( i++ )) NVOICES=${!i} elif [ $p = "-arch32" ]; then - PROCARCH="-m32 -L/usr/lib32" + PROCARCH=("-m32" "-L/usr/lib32") elif [ $p = "-arch64" ]; then - PROCARCH="-m64 -fPIC" + PROCARCH=("-m64" "-fPIC") elif [ $p = "-osx" ]; then - CXXFLAGS="-O3 -std=c++11 $ARCH -mfpmath=sse -msse -msse2 -msse3 -ffast-math -ftree-vectorize -I/opt/local/include" + CXXFLAGS=("-O3" "-std=c++11" "$ARCH" "-mfpmath=sse" "-msse" "-msse2" "-msse3" "-ffast-math" "-ftree-vectorize" "-I/opt/local/include") dllext=".vst" elif [ $p = "-keep" ]; then KEEP="yes" @@ -147,15 +150,14 @@ EOF (( i++ )) STYLE=${!i} elif [ ${p:0:1} = "-" ]; then - OPTIONS="$OPTIONS $p" + OPTIONS+=("$p") elif [[ -f "$p" ]]; then - FILES="$FILES $p" + FILES+=("$p") else - OPTIONS="$OPTIONS $p" + OPTIONS+=("$p") fi done -FILES=( "$FILES" ) if [ ${#FILES[@]} = 0 ]; then echo "$0: no filename specified" >&2 exit 1 @@ -169,14 +171,6 @@ fi if [ ! -f "$FAUSTINC/faust/gui/QTUI.h" ]; then echo "$0: faust include files not found" >&2; exit 1; fi if [ ! -f "$FAUSTARCH/faustvstqt.h" ]; then echo "$0: faust-vst library files not found" >&2; exit 1; fi -# Determine the Qt version so that we can pick the needed compilation options. -QTVERSION=$($QMAKE -v 2>/dev/null | tail -1 | sed 's/.*Qt version \([0-9]\).*/\1/') - -QTEXTRA= -if [[ "$QTVERSION" == 5 ]]; then - QTEXTRA=x11extras -fi - arch=faustvst.cpp dspname=${FILES[0]} SRCDIR=$(dirname "$dspname") @@ -197,9 +191,9 @@ fi # now set in faustoptflags #CXX=g++ -CPPFLAGS="-DFAUST_META=$FAUST_META -DFAUST_MIDICC=$FAUST_MIDICC -DFAUST_MTS=$FAUST_MTS -DFAUST_UI=$FAUST_UI -DVOICE_CTRLS=$VOICE_CTRLS -I$SDK -I$SDKSRC -D__cdecl=" +CPPFLAGS=("-DFAUST_META=$FAUST_META" "-DFAUST_MIDICC=$FAUST_MIDICC" "-DFAUST_MTS=$FAUST_MTS" "-DFAUST_UI=$FAUST_UI" "-DVOICE_CTRLS=$VOICE_CTRLS" "-I$SDK" "-I$SDKSRC" "-D__cdecl=") if [ $NVOICES -ge 0 ]; then -CPPFLAGS="$CPPFLAGS -DNVOICES=$NVOICES" +CPPFLAGS+=("-DNVOICES=$NVOICES") fi # Extra SDK modules needed to build a working plugin. @@ -217,13 +211,17 @@ sdksrc="$SDKSRC/$main $SDKSRC/$afx $SDKSRC/$afxx" mkdir -p "$tmpdir" #trap "echo $0: compile error, intermediate files left in $tmpdir >&2" EXIT # Compile the Faust module. -faust -i -a "$FAUSTARCH/$arch" "$OPTIONS" "$dspname" -o "$tmpdir/$cppname" || exit 1 +if [ "${#OPTIONS[@]}" ]; then + faust -i -a "$FAUSTARCH/$arch" "${OPTIONS[@]}" "$dspname" -o "$tmpdir/$cppname" || exit 1 +else + faust -i -a "$FAUSTARCH/$arch" "$dspname" -o "$tmpdir/$cppname" || exit 1 +fi if [ -n "$plugin_gui" ]; then # We have to use qmake here. # XXXTODO: OSX support ( cd "$tmpdir" - $QMAKE -project -t lib -o "${clsname}.pro" "CONFIG += gui plugin no_plugin_name_prefix warn_off" "QT += widgets printsupport network $QTEXTRA" "INCLUDEPATH+=$ABSDIR" "INCLUDEPATH+=$CURDIR" "INCLUDEPATH+=$FAUSTARCH" "INCLUDEPATH+=$FAUSTINC" "QMAKE_CXXFLAGS=-std=c++11 $CPPFLAGS" "$STYLE_CXXFLAGS" "LIBS+=$ARCHLIB $OSCLIBS $HTTPLIBS" "SOURCES+=$SDKSRC/$main $SDKSRC/$afx $SDKSRC/$afxx" "HEADERS+=$FAUSTARCH/faustvstqt.h $FAUSTINC/faust/gui/QTUI.h" "$RESOURCES" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" + $QMAKE -project -t lib -o "${clsname}.pro" "CONFIG += gui plugin no_plugin_name_prefix warn_off" "QT += widgets printsupport network x11extras" "INCLUDEPATH+=$ABSDIR" "INCLUDEPATH+=$CURDIR" "INCLUDEPATH+=$FAUSTARCH" "INCLUDEPATH+=$FAUSTINC" "QMAKE_CXXFLAGS=-std=c++11 ${CPPFLAGS[*]}" "$STYLE_CXXFLAGS" "LIBS+=$ARCHLIB $OSCLIBS $HTTPLIBS" "SOURCES+=$SDKSRC/$main $SDKSRC/$afx $SDKSRC/$afxx" "HEADERS+=$FAUSTARCH/faustvstqt.h $FAUSTINC/faust/gui/QTUI.h" "$RESOURCES" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" $QMAKE ./*.pro make ) > /dev/null || exit 1 @@ -258,9 +256,17 @@ if [[ $(uname) == Darwin || $CROSSTARGET == Darwin ]]; then EOF - $CXX -bundle "$CXXFLAGS" "$FAUSTTOOLSFLAGS" "$PROCARCH" -I"$ABSDIR" "$CPPFLAGS" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname/Contents/MacOS/$clsname" || exit 1 + if [ -n "$FAUSTTOOLSFLAGS" ]; then + $CXX -bundle "${CXXFLAGS[@]}" "$FAUSTTOOLSFLAGS" "${PROCARCH[@]}" -I"$ABSDIR" "${CPPFLAGS[@]}" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname/Contents/MacOS/$clsname" || exit 1 + else + $CXX -bundle "${CXXFLAGS[@]}" "${PROCARCH[@]}" -I"$ABSDIR" "${CPPFLAGS[@]}" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname/Contents/MacOS/$clsname" || exit 1 + fi else - $CXX -shared "$CXXFLAGS" "$FAUSTTOOLSFLAGS" "$PROCARCH" -I"$ABSDIR" "$CPPFLAGS" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname" || exit 1 + if [ -n "$FAUSTTOOLSFLAGS" ]; then + $CXX -shared "${CXXFLAGS[@]}" "$FAUSTTOOLSFLAGS" "${PROCARCH[@]}" -I"$ABSDIR" "${CPPFLAGS[@]}" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname" || exit 1 + else + $CXX -shared "${CXXFLAGS[@]}" "${PROCARCH[@]}" -I"$ABSDIR" "${CPPFLAGS[@]}" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname" || exit 1 + fi fi fi #trap - EXIT From 6a8c2871c4ba291a33871c69d2d64ead1682ea99 Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 23:50:09 +0200 Subject: [PATCH 12/14] tools/faust2appls/faust2faustvst: Setting -eou bash options for more strict handling of undefined variables and return code handling. Guarding all potentially undefined variables. --- tools/faust2appls/faust2faustvst | 33 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/tools/faust2appls/faust2faustvst b/tools/faust2appls/faust2faustvst index 78bb1ec700..24fd12d75a 100755 --- a/tools/faust2appls/faust2faustvst +++ b/tools/faust2appls/faust2faustvst @@ -1,10 +1,11 @@ #!/usr/bin/env bash -#set -x . faustpath . faustoptflags +set -eou > /dev/null + # Check for some common locations of the VST SDK files. This falls back to # /usr/local/src/vstsdk if none of these are found. In that case, or if make # picks the wrong location, you can also set the SDK variable explicitly. @@ -15,20 +16,20 @@ # the preferred path comes *last*. sdkpaths="/usr/src/VST* /usr/src/vst* /usr/include/VST* /usr/include/vst* /opt/local/src/VST* /opt/local/src/vst* /opt/local/include/VST* /opt/local/include/vst* /usr/local/src/VST* /usr/local/src/vst* /usr/local/include/VST* /usr/local/include/vst* $VSTSDK" # This should hopefully work on *BSD, Linux and Mac OSX. -[ -z "$SDK" ] && SDK=$(echo "$sdkpaths" | xargs ls -f -d 2>/dev/null | tail -n 1) -[ -z "$SDK" ] && SDK=/usr/local/src/vstsdk +[ -z "${SDK:-}" ] && SDK=$(echo "$sdkpaths" | xargs ls -f -d 2>/dev/null | tail -n 1) +[ -z "${SDK:-}" ] && SDK=/usr/local/src/vstsdk # SDKSRC should point to the SDK source files (vstplugmain.cpp et al). # Usually these are either directly under $SDK or in the # public.sdk/source/vst2.x subdirectory. -[ -z "$SDKSRC" ] && [ -f "$SDK/vstplugmain.cpp" ] && SDKSRC="$SDK" -[ -z "$SDKSRC" ] && [ -f "$SDK/public.sdk/source/vst2.x/vstplugmain.cpp" ] && SDKSRC="$SDK/public.sdk/source/vst2.x" -[ -z "$SDKSRC" ] && SDKSRC="$SDK/public.sdk/source/vst2.x" +[ -z "${SDKSRC:-}" ] && [ -f "$SDK/vstplugmain.cpp" ] && SDKSRC="$SDK" +[ -z "${SDKSRC:-}" ] && [ -f "$SDK/public.sdk/source/vst2.x/vstplugmain.cpp" ] && SDKSRC="$SDK/public.sdk/source/vst2.x" +[ -z "${SDKSRC:-}" ] && SDKSRC="$SDK/public.sdk/source/vst2.x" # Default qmake setup (for GUI compilation). This requires Qt5. If qmake-qt5 or # qmake can not be found in PATH, you can set the QMAKE environment variable # explicitly, or use the -qt5 option below. -[ -z "$QMAKE" ] && QMAKE=$(command -v qmake-qt5 || command -v qmake) +[ -z "${QMAKE:-}" ] && QMAKE=$(command -v qmake-qt5 || command -v qmake) # Where the Faust includes live. We assume that this is under the prefix of # whatever Faust binary 'which' locates. You can also specify this explicitly @@ -68,7 +69,7 @@ CXXFLAGS=("-O3" "-std=c++11" "-march=native" "-mfpmath=sse" "-msse" "-msse2" "-m # Darwin-specific #ARCH="-arch i386 -arch x86_64" -if [[ $(uname) == Darwin || $CROSSTARGET == Darwin ]]; then +if [[ $(uname) == Darwin || ${CROSSTARGET:-} == Darwin ]]; then CXXFLAGS=("-O3" "-std=c++11" "$ARCH" "-mfpmath=sse" "-msse" "-msse2" "-msse3" "-ffast-math" "-ftree-vectorize" "-I/opt/local/include") dllext=".vst" fi @@ -168,8 +169,8 @@ fi # Check to see whether the required include and library files are where we # expect them, and bail out with an error message otherwise. -if [ ! -f "$FAUSTINC/faust/gui/QTUI.h" ]; then echo "$0: faust include files not found" >&2; exit 1; fi -if [ ! -f "$FAUSTARCH/faustvstqt.h" ]; then echo "$0: faust-vst library files not found" >&2; exit 1; fi +if [ ! -f "${FAUSTINC:-}/faust/gui/QTUI.h" ]; then echo "$0: faust include files not found" >&2; exit 1; fi +if [ ! -f "${FAUSTARCH:-}/faustvstqt.h" ]; then echo "$0: faust-vst library files not found" >&2; exit 1; fi arch=faustvst.cpp dspname=${FILES[0]} @@ -216,7 +217,7 @@ if [ "${#OPTIONS[@]}" ]; then else faust -i -a "$FAUSTARCH/$arch" "$dspname" -o "$tmpdir/$cppname" || exit 1 fi -if [ -n "$plugin_gui" ]; then +if [ -n "${plugin_gui:-}" ]; then # We have to use qmake here. # XXXTODO: OSX support ( @@ -226,7 +227,7 @@ if [ -n "$plugin_gui" ]; then make ) > /dev/null || exit 1 else -if [[ $(uname) == Darwin || $CROSSTARGET == Darwin ]]; then +if [[ $(uname) == Darwin || ${CROSSTARGET:-} == Darwin ]]; then mkdir -p "$tmpdir/$soname/Contents/MacOS" printf '%s' 'BNDL????' > "$tmpdir/$soname/Contents/PkgInfo" sed -e "s?@name@?$clsname?g;s?@version@?1.0.0?g" > "$tmpdir/$soname/Contents/Info.plist" < EOF - if [ -n "$FAUSTTOOLSFLAGS" ]; then - $CXX -bundle "${CXXFLAGS[@]}" "$FAUSTTOOLSFLAGS" "${PROCARCH[@]}" -I"$ABSDIR" "${CPPFLAGS[@]}" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname/Contents/MacOS/$clsname" || exit 1 + if [ -n "${FAUSTTOOLSFLAGS:-}" ]; then + $CXX -bundle "${CXXFLAGS[@]}" "${FAUSTTOOLSFLAGS:-}" "${PROCARCH[@]}" -I"$ABSDIR" "${CPPFLAGS[@]}" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname/Contents/MacOS/$clsname" || exit 1 else $CXX -bundle "${CXXFLAGS[@]}" "${PROCARCH[@]}" -I"$ABSDIR" "${CPPFLAGS[@]}" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname/Contents/MacOS/$clsname" || exit 1 fi else - if [ -n "$FAUSTTOOLSFLAGS" ]; then - $CXX -shared "${CXXFLAGS[@]}" "$FAUSTTOOLSFLAGS" "${PROCARCH[@]}" -I"$ABSDIR" "${CPPFLAGS[@]}" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname" || exit 1 + if [ -n "${FAUSTTOOLSFLAGS:-}" ]; then + $CXX -shared "${CXXFLAGS[@]}" "${FAUSTTOOLSFLAGS:-}" "${PROCARCH[@]}" -I"$ABSDIR" "${CPPFLAGS[@]}" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname" || exit 1 else $CXX -shared "${CXXFLAGS[@]}" "${PROCARCH[@]}" -I"$ABSDIR" "${CPPFLAGS[@]}" "$sdksrc" "$tmpdir/$cppname" -o "$tmpdir/$soname" || exit 1 fi From e3b504ed5afbfaa93781a8d997fdcfbe5c007e5d Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 23:52:13 +0200 Subject: [PATCH 13/14] tools/faust2appls/faust2jaqt: Setting -eou pipefaul bash options. Guarding all potentially undefined variables and defining OSCLIBS (formerly wrongly defined as OSCLIB), OSCDEFS, HTTPLIBS, HTTPDEFS, QRDEFS, POLYDEFS and MIDIDEFS. These definitions should go into a separate LIBS/DEFS array and plainly be added to on demand. --- tools/faust2appls/faust2jaqt | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/tools/faust2appls/faust2jaqt b/tools/faust2appls/faust2jaqt index d4bee7ade0..bc707b7bf1 100755 --- a/tools/faust2appls/faust2jaqt +++ b/tools/faust2appls/faust2jaqt @@ -7,11 +7,11 @@ # # ##################################################################### -set -e - . faustpath . faustoptflags +set -euo pipefail + CXXFLAGS=("$MYGCCFLAGS") ARCHFILE="$FAUSTARCH/jack-qt.cpp" @@ -34,8 +34,14 @@ QMAKE=$(command -v qmake-qt5 || command -v qmake) OSCINC="" QTDEFS="" -OSCLIB="" +OSCLIBS="" +OSCDEFS="" +HTTPLIBS="" +HTTPDEFS="" POLY="POLY" +QRDEFS="" +POLYDEFS="" +MIDIDEFS="" DEPLOY="" NVOICES=-1 SOUNDFILE="0" @@ -47,9 +53,9 @@ SPEC="" FILES=() OPTIONS=() -while [ "$1" ] +while [ "${1:-}" ] do - p=$1 + p="${1:-}" if [ "$p" = "-help" ] || [ "$p" = "-h" ]; then echo "faust2jaqt [-httpd] [-qrcode] [-soundfile] [-resample] [-nvoices ] [-effect auto|] [-midi] [-osc] [additional Faust options (-vec -vs 8...)] " @@ -195,7 +201,11 @@ EndOfCode # compile c++ to binary ( cd "$TMP" - "$QMAKE" -project "QT += widgets printsupport network" "CONFIG+=warn_off" "$CLANGOPT" "INCLUDEPATH+=$CUR" "INCLUDEPATH+=$FAUSTINC /opt/local/include" "QMAKE_CXXFLAGS=${CXXFLAGS[*]} -Wno-unused-parameter $FAUSTTOOLSFLAGS" "QMAKE_LFLAGS=$LFLAGS" "LIBS+=$ARCHLIB $SOUNDFILELIBS $SAMPLERATELIBS $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTINC/faust/gui/QTUI.h" "RESOURCES+= $FAUSTINC/faust/gui/Styles/Grey.qrc" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" "$POLYDEFS" "$MIDIDEFS" "$SOUNDFILEDEFS" "$SAMPLERATEDEFS" + if [ -n "${FAUSTTOOLSFLAGS:-}" ]; then + "$QMAKE" -project "QT += widgets printsupport network" "CONFIG+=warn_off" "${CLANGOPT:-}" "INCLUDEPATH+=$CUR" "INCLUDEPATH+=$FAUSTINC /opt/local/include" "QMAKE_CXXFLAGS=${CXXFLAGS[*]} -Wno-unused-parameter ${FAUSTTOOLSFLAGS:-}" "QMAKE_LFLAGS=$LFLAGS" "LIBS+=$ARCHLIB $SOUNDFILELIBS $SAMPLERATELIBS $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTINC/faust/gui/QTUI.h" "RESOURCES+= $FAUSTINC/faust/gui/Styles/Grey.qrc" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" "$POLYDEFS" "$MIDIDEFS" "$SOUNDFILEDEFS" "$SAMPLERATEDEFS" + else + "$QMAKE" -project "QT += widgets printsupport network" "CONFIG+=warn_off" "${CLANGOPT:-}" "INCLUDEPATH+=$CUR" "INCLUDEPATH+=$FAUSTINC /opt/local/include" "QMAKE_CXXFLAGS=${CXXFLAGS[*]} -Wno-unused-parameter" "QMAKE_LFLAGS=$LFLAGS" "LIBS+=$ARCHLIB $SOUNDFILELIBS $SAMPLERATELIBS $OSCLIBS $HTTPLIBS" "HEADERS+=$FAUSTINC/faust/gui/QTUI.h" "RESOURCES+= $FAUSTINC/faust/gui/Styles/Grey.qrc" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" "$POLYDEFS" "$MIDIDEFS" "$SOUNDFILEDEFS" "$SAMPLERATEDEFS" + fi if [ -n "$SPEC" ]; then "$QMAKE" "$SPEC" QMAKE_CFLAGS_ISYSTEM=-I else From e34135a699bee80224a77919c042fceb6aa9be80 Mon Sep 17 00:00:00 2001 From: David Runge Date: Sat, 28 Sep 2019 23:57:22 +0200 Subject: [PATCH 14/14] tools/faust2appls/faust2lv2: Adding -eou pipefail bash options to have stricter handling of return codes and potentially undefined variables. Guarding all potentially undefined variables. Removing debug echo for dspname. --- tools/faust2appls/faust2lv2 | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/tools/faust2appls/faust2lv2 b/tools/faust2appls/faust2lv2 index 2dc96608c7..ace2b4aa72 100755 --- a/tools/faust2appls/faust2lv2 +++ b/tools/faust2appls/faust2lv2 @@ -1,16 +1,16 @@ #!/usr/bin/env bash -#set -x +set -eou pipefail # Default qmake setup (for GUI compilation). This requires Qt5. If qmake-qt5 or # qmake can not be located in PATH, you can also set the QMAKE environment # variable explicitly, or use the -qt5 option below. -[ -z "$QMAKE" ] && QMAKE=$(command -v qmake-qt5 || command -v qmake) +[ -z "${QMAKE:-}" ] && QMAKE=$(command -v qmake-qt5 || command -v qmake) # Where the Faust includes live. We assume that this is under the prefix of # whatever Faust binary 'which' locates. You can also specify this explicitly # by setting the FAUSTINC environment variable accordingly. -[ -z "$FAUSTINC" ] && FAUSTINC=$(command -v faust 2>/dev/null | sed -e 's?/bin/faust?/include/faust?') +[ -z "${FAUSTINC:-}" ] && FAUSTINC=$(command -v faust 2>/dev/null | sed -e 's?/bin/faust?/include/faust?') # Where our own Faust library files are. This may be under a different prefix # or not installed anywhere. We try 'ls' on lv2ui.cpp in some common locations @@ -18,8 +18,8 @@ # that you can run the script from the faust-lv2 source directory. You can # also specify this explicitly by setting the FAUSTLIB environment variable # accordingly. -[ -z "$FAUSTLIB" ] && FAUSTLIB="$(dirname "$((ls -f /usr/share/faust/lv2ui.cpp /usr/local/share/faust/lv2ui.cpp /opt/local/share/faust/lv2ui.cpp "$PWD/lv2ui.cpp" 2>/dev/null) | tail -1)")" -[ -z "$FAUSTLIB" ] && FAUSTLIB="$PWD" +[ -z "${FAUSTLIB:-}" ] && FAUSTLIB="$(dirname "$((ls -f /usr/share/faust/lv2ui.cpp /usr/local/share/faust/lv2ui.cpp /opt/local/share/faust/lv2ui.cpp "$PWD/lv2ui.cpp" 2>/dev/null) | tail -1)")" +[ -z "${FAUSTLIB:-}" ] && FAUSTLIB="$PWD" # defaults (these can be changed with the options listed below) URI_PREFIX=https://faustlv2.bitbucket.io @@ -149,7 +149,6 @@ if [ ! -f "$FAUSTLIB/lv2ui.cpp" ]; then echo "$0: faust-lv2 library files not fo arch=lv2.cpp archui=lv2ui.cpp dspname="${FILES[0]}" -echo "dspname: $dspname" SRCDIR=$(dirname "$dspname") ABSDIR=$(cd "$SRCDIR" && pwd) CURDIR=$(pwd) @@ -186,13 +185,13 @@ else faust -i -a "$FAUSTLIB/$arch" -cn "$clsname" "$dspname" -o "$tmpdir/$cppname" || exit 1 fi -if [ -n "$FAUSTTOOLSFLAGS" ]; then - "$CXX" -shared "${CXXFLAGS[@]}" -DDLLEXT="\"$dllext\"" "$FAUSTTOOLSFLAGS" "$PROCARCH" -I"$ABSDIR" "${CPPFLAGS[@]}" "$tmpdir/$cppname" -o "$tmpdir/$lv2name/$soname" || exit 1 +if [ -n "${FAUSTTOOLSFLAGS:-}" ]; then + "$CXX" -shared "${CXXFLAGS[@]}" -DDLLEXT="\"$dllext\"" "${FAUSTTOOLSFLAGS:-}" "$PROCARCH" -I"$ABSDIR" "${CPPFLAGS[@]}" "$tmpdir/$cppname" -o "$tmpdir/$lv2name/$soname" || exit 1 else "$CXX" -shared "${CXXFLAGS[@]}" -DDLLEXT="\"$dllext\"" "$PROCARCH" -I"$ABSDIR" "${CPPFLAGS[@]}" "$tmpdir/$cppname" -o "$tmpdir/$lv2name/$soname" || exit 1 fi -if [ -n "$plugin_gui" ]; then +if [ -n "${plugin_gui:-}" ]; then # Compile the UI module. mkdir -p "$uitmpdir" if [ "${#OPTIONS[@]}" -gt 0 ]; then @@ -210,9 +209,9 @@ mkdir -p "$uitmpdir" fi # Generate the manifest. There are four different variations of the manifest, # depending on whether dynamic manifests and the plugin gui is enabled or not. -if [ -n "$dyn_manifest" ]; then +if [ -n "${dyn_manifest:-}" ]; then # Use a dynamic manifest. -if [ -n "$plugin_gui" ]; then +if [ -n "${plugin_gui:-}" ]; then sed -e"s?@name@?$clsname?g" -e"s?@uri@?$URI_PREFIX/$clsname?g" -e"s?@dllext@?$dllext?g" > "$tmpdir/$lv2name/manifest.ttl" < "$tmpdir/$lv2name/manifest.ttl" <