File: faust2raqt

package info (click to toggle)
faust 2.79.3%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 397,496 kB
  • sloc: cpp: 278,433; ansic: 116,164; javascript: 18,529; vhdl: 14,052; sh: 13,884; java: 5,900; objc: 3,852; python: 3,222; makefile: 2,655; cs: 1,672; lisp: 1,146; ruby: 954; yacc: 586; xml: 471; lex: 247; awk: 110; tcl: 26
file content (151 lines) | stat: -rwxr-xr-x 4,577 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/bash

#####################################################################
#                                                                   #
#               Compiles Faust programs to RtAudio-qt               #
#               (c) Grame, 2015                                     #
#                                                                   #
#####################################################################

. faustpath
. faustoptflags
. usage.sh

CXXFLAGS+=" $MYGCCFLAGS"  # So that additional CXXFLAGS can be used

ARCHFILE=$FAUSTARCH/ra-qt.cpp
ARCHLIB="$(pkg-config --libs rtaudio || echo -L/usr/local/lib -lrtaudio)"
CXXFLAGS+=" $(pkg-config --cflags rtaudio || true)"


#-------------------------------------------------------------------------------
# Search for qmake or qmake-qt4

QMAKE=$(which qmake-qt4 || echo qmake)

#-------------------------------------------------------------------
# Analyze command arguments :
# faust options                 -> OPTIONS
# existing *.dsp files          -> FILES
#

echoHelp()
{
    usage faust2raqt "[options] [Faust options] <file.dsp>"
    require QT
    echo "Compiles Faust programs to RtAudio and QT"
    option
    options -httpd -osc -midi -qrcode -poly -nodeploy
    option "Faust options"
    exit
}

if [ "$#" -eq 0 ]; then
    echo 'Please, provide a Faust file to process !'
    echo ''
    echoHelp
fi

#PHASE 2 : dispatch command arguments
OSCINC=""
QTDEFS=""
OSCLIB=""
DEPLOY="yes"

for p in $@; do
    if [ $p = "-help" ] || [ $p = "-h" ]; then
        echoHelp
    elif [ $p = "-poly" ]; then
        POLYDEFS="DEFINES += POLY"
    elif [ $p = "-midi" ]; then
        MIDIDEFS="DEFINES += MIDICTRL"
    elif [ $p = "-osc" ]; then
        OSCDEFS="DEFINES += OSCCTRL"
        OSCLIBS="-lOSCFaust"
    elif [ "$p" = "-httpd" ]; then
        HTTPDEFS="DEFINES += HTTPCTRL"
        HTTPLIBS="-lHTTPDFaust"
        HTTPLIBS1=`pkg-config --cflags --libs libmicrohttpd`
    elif [ $p = "-nodeploy" ]; then
        DEPLOY="no"
    elif [ "$p" = "-qrcode" ]; then # requires -httpd
        QRDEFS="DEFINES += QRCODECTRL"
    elif [ ${p:0:1} = "-" ]; then
        OPTIONS="$OPTIONS $p"
    elif [[ -f "$p" ]] && [ ${p: -4} == ".dsp" ]; then
        FILES="$FILES $p"
    else
        OPTIONS="$OPTIONS $p"
    fi
done

#-------------------------------------------------------------------
# Check Darwin specifics
#
if [[ $(uname) == Darwin ]]; then
    ARCHLIB+=" -framework CoreMIDI -framework CoreFoundation -framework CoreAudio -framework AudioUnit -framework CoreServices"
    CXXFLAGS+=" -D__MACOSX_CORE__"
    SYS_VERSION=$(uname -v | cut -d : -f1 | cut -d. -f1 | cut -d' ' -f4)
    if [ $SYS_VERSION -gt 12 ]
    then
        SPEC=""
        CLANGOPT="QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.9"
        CXXFLAGS="$CXXFLAGS -mmacosx-version-min=10.9"
    else
        SPEC="-spec macx-g++"
        CLANGOPT=""
    fi
    EXT=".app"
fi

#-------------------------------------------------------------------
# Check Linux specifics
#
if [[ $(uname) == Linux ]]; then
    ARCHLIB+=" -lasound"
fi

#-------------------------------------------------------------------
# compile the *.dsp files
#
for p in $FILES; do

    CUR=$(pwd)
    f=$(basename "$p")
    SRCDIR=$(dirname "$p")

    # creates a temporary dir
    TDR=$(mktemp -d faust.XXX)
    TMP="$TDR/${f%.dsp}"
    mkdir "$TMP"

    # compile faust to c++
     faust -i -a $ARCHFILE $OPTIONS "$SRCDIR/$f" -o "$TMP/${f%.dsp}.cpp" || exit

    # compile c++ to binary
    (
        cd "$TMP"
        $QMAKE -project "QT += widgets printsupport network" "CONFIG+=warn_off" "$CLANGOPT" "INCLUDEPATH+=$CUR" "INCLUDEPATH+=$FAUSTINC" "QMAKE_CXXFLAGS=$CXXFLAGS -Wno-unused-parameter $FAUSTTOOLSFLAGS" "QMAKE_INFO_PLIST=$FAUSTARCH/Info.plist" "LIBS+=$ARCHLIB $OSCLIBS $HTTPLIBS $HTTPLIBS1" "HEADERS+=$FAUSTINC/faust/gui/QTUI.h" "RESOURCES+= $FAUSTINC/faust/gui/Styles/Grey.qrc" "$OSCDEFS" "$HTTPDEFS" "$QRDEFS" "$POLYDEFS" "$MIDIDEFS"
        $QMAKE $SPEC QMAKE_CFLAGS_ISYSTEM=-I
        make
    ) > /dev/null || exit

    # on Mac add the QT libraries to the bundle
    if [[ $(uname) == Darwin ]]; then
        if [ "$DEPLOY" = "yes" ]; then
            macdeployqt "$TMP/${f%.dsp}$EXT" || exit
        fi
    fi

    rm -rf "$SRCDIR/${f%.dsp}$EXT"
    cp -a "$TMP/${f%.dsp}$EXT" "$SRCDIR/${f%.dsp}$EXT"
    if [[ $(uname) == Darwin ]]; then
        codesign --sign - --deep --force "$SRCDIR/${f%.dsp}$EXT"
    fi
    rm -rf "$TDR"

    # collect binary file name for FaustGIDE
    BINARIES="$BINARIES$SRCDIR/${f%.dsp}$EXT;"
done

echo $BINARIES