Skip to content

fails to build with Qt5 if faust is installed into /usr #26

@umlaeute

Description

@umlaeute

This is on a Debian system with faust-2.15.11: faust binaries (faust, and the faust2... generators) are installed into /usr/bin, faust-headers are installed into /usr/include/faust/; e.g. /usr/include/faust/dsp/libfaust.h)

Building faustlive with QT5 results in a build failure:

$ cd Build
$ mkdir flbuild
$ cd flbuild
$ QT_SELECT=5 qmake ..
Info: creating stash file .../faustlive/Build/flbuild/.qmake.stash
Project MESSAGE: Using Faust libs from /usr/lib
Project MESSAGE: Using Faust incl from /usr/include
Project MESSAGE: Generates FaustLive version 2.5.2
Project MESSAGE: Uses dynamic link for Faust libs
Project MESSAGE: Jack included
$ make
g++ -c -pipe -std=c++11 -O2 -Wall -W -D_REENTRANT -fPIC -DVERSION=\"2.5.2\" -DAPP_VERSION=\"2.0\" -DLLVM_VERSION=\"8.0.1\" -DHTTPCTRL -DQRCODECTRL -DJACK -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I../../Build -I. -I../../Build -I../../src/Audio -I../../src/MainStructure -I../../src/MenusAndDialogs -I../../src/Network -I../../src/Utilities -isystem /usr/include -isystem /usr/local/include -I../../src/Audio/JA -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -Itmp -isystem /usr/include/libdrm -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -o tmp/main.o ../../src/Utilities/main.cpp
In file included from /usr/include/c++/9/ext/string_conversions.h:41,
                 from /usr/include/c++/9/bits/basic_string.h:6493,
                 from /usr/include/c++/9/string:55,
                 from /usr/include/c++/9/bits/locale_classes.h:40,
                 from /usr/include/c++/9/bits/ios_base.h:41,
                 from /usr/include/c++/9/ios:42,
                 from /usr/include/c++/9/ostream:38,
                 from /usr/include/c++/9/iostream:39,
                 from ../../src/Utilities/main.cpp:12:
/usr/include/c++/9/cstdlib:75:15: fatal error: stdlib.h: Datei oder Verzeichnis nicht gefunden
   75 | #include_next <stdlib.h>
      |               ^~~~~~~~~~
compilation terminated.
make: *** [Makefile:818: tmp/main.o] Fehler 1
$

afaict, the issue is, that faust -includedir (correctly) returns /usr/include, which sets FAUSTINC (in FaustLive.pro) to /usr/include.
FAUSTINC is then added to INCLUDEPATH in

INCLUDEPATH += . $$SRC/Audio $$SRC/MainStructure $$SRC/MenusAndDialogs $$SRC/Network $$SRC/Utilities $$FAUSTINC

qmake-qt5 will then take this to generate a Makefile containing (linebreaks inserted for readabilty):

INCPATH       = \
    -I../../Build \
    -I. \
    -I../../Build \
    -I../../src/Audio \
    -I../../src/MainStructure \
    -I../../src/MenusAndDialogs \
    -I../../src/Network \
    -I../../src/Utilities \
    -isystem /usr/include \
    -isystem /usr/local/include \
    -I../../src/Audio/JA \
    -isystem /usr/include/x86_64-linux-gnu/qt5 \
    -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets \
    -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui \
    -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork \
    -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore \
    -Itmp \
    -isystem /usr/include/libdrm \
    -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++

Now the problem is the line -isystem /usr/include which prevents gcc from finding the relevant headers.

There's a gcc-bug about this, but it was rejected with:

Then they [who add -isystem to their build-flags] should stop (mis)using -isystem, since it's clearly documented to affect the order directories are searched: [...]

There's also a qmake-bug about the issue.

I have no idea how to fix this on the FaustLive side (I'm a very casual qmake user), but i think the ideal solution would be to somehow tell qmake to use -I instead of -isystem for any of the paths declared in INCLUDEPATH.

My current workaround is to juse remove $$FAUSTINC from the INCLUDEPATH, which works because /usr/include is included anyhow, but that might not be acceptable for FaustLive in general.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions