https://bugs.kde.org/show_bug.cgi?id=405661

            Bug ID: 405661
           Summary: Cross-mingw64 compilation: Cannot compile app using
                    syntax highlighting framework
           Product: frameworks-syntax-highlighting
           Version: 5.56.0
          Platform: Other
                OS: Linux
            Status: REPORTED
          Severity: normal
          Priority: NOR
         Component: framework
          Assignee: kwrite-bugs-n...@kde.org
          Reporter: mar...@rpdev.net
  Target Milestone: ---

SUMMARY

In a Fedora mingw64 cross compile environment for Windows, in an app using the
syntax highlighting framework, compilation fails with the following error:

In file included from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/ext/string_conversions.h:41,
                 from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/bits/basic_string.h:6400,
                 from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/string:52,
                 from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/stdexcept:39,
                 from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/array:39,
                 from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/tuple:39,
                 from
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/functional:54,
                 from ../lib/datamodel/library.h:4,
                 from ../lib/application.h:4,
                 from ../lib/application.cpp:1:
/usr/i686-w64-mingw32/sys-root/mingw/include/c++/cstdlib:75:15: fatal error:
stdlib.h: No such file or directory
 #include_next <stdlib.h>
               ^~~~~~~~~~



STEPS TO REPRODUCE
1. Set up mingw64 cross compile environment in Fedora by installing from
repository.
2. Install ECM and syntax-highlighting framework from source.
3. Try to compile an app which uses cmake and which compiles and links against
the syntax highlighting library.

OBSERVED RESULT

Compilation fails (e.g. when #include <functional> is used).

EXPECTED RESULT

Compilation works fine.


SOFTWARE/OS VERSIONS
Windows: 
macOS: 
Linux/KDE Plasma: 
(available in About System)
KDE Plasma Version: 
KDE Frameworks Version: 5.56.0
Qt Version: 5.11.3

ADDITIONAL INFORMATION


I am developing an app which I also want to compile for Windows. For this
purpose, I am using the mingw64 packages provided by Fedora. Qt 5 is provided
as part of these packages as well. I am using Docker for this. To reproduce,
you can create a Docker image using the following Dockerfile:

=====================================
FROM fedora

RUN \
\
    dnf install -y --nogpgcheck \
        cmake \
        make \
        ninja-build \
        python3 \
        python \
        git \
        wget \
        \
        qt5-qtxmlpatterns-devel \
        qt5-linguist \
        appstream \
        \
        mingw32-qt5-qmake \
        mingw32-qt5-qmldevtools \
        mingw32-qt5-qmldevtools-devel \
        mingw32-qt5-qt3d \
        mingw32-qt5-qt3d-tools \
        mingw32-qt5-qtactiveqt \
        mingw32-qt5-qtbase \
        mingw32-qt5-qtbase-devel \
        mingw32-qt5-qtcharts \
        mingw32-qt5-qtdeclarative \
        mingw32-qt5-qtgraphicaleffects \
        mingw32-qt5-qtimageformats \
        mingw32-qt5-qtlocation \
        mingw32-qt5-qtmultimedia \
        mingw32-qt5-qtquickcontrols \
        mingw32-qt5-qtsensors \
        mingw32-qt5-qtserialport \
        mingw32-qt5-qtsvg \
        mingw32-qt5-qttools \
        mingw32-qt5-qttools-tools \
        mingw32-qt5-qttranslations \
        mingw32-qt5-qtwebkit \
        mingw32-qt5-qtwebsockets \
        mingw32-qt5-qtwinextras \
        mingw32-qt5-qtxmlpatterns \
        mingw32-nsis \
        mingw32-nsiswrapper \
        \
        && \
        cd / && \
        git clone https://github.com/qt/qtquickcontrols2.git && \
        cd qtquickcontrols2 && \
        git checkout v$(mingw32-qmake-qt5 -query QT_VERSION) && \
        mingw32-qmake-qt5 && \
        make -j4 && \
        make install && \
        cd .. && \
        rm -rf qtquickcontrols2
=====================================

In my app, I also want to use the syntax highlighting framework. As this
library is not part of the mingw packages included in Fedora, I compile and
install both ECM and the syntax highlighting framework as part of my build
script:


    # Install ECM
    pushd 3rdparty/KDE/extra-cmake-modules
    mkdir -p build
    cd build
    mingw32-cmake -GNinja ..
    cmake --build .
    cmake --build . --target install
    popd

    # Install KDE syntax highlighting
    pushd 3rdparty/KDE/syntax-highlighting
    mkdir -p build
    cd build
    mingw32-cmake -GNinja -DKF5_HOST_TOOLING=/usr ..
    cmake --build .
    cmake --build . --target install
    popd

After this is done, I try to compile my own app, which, among other things,
does the following to include the syntax highlighting library:

# Find KDE Syntax Highlighting engine
find_package(KF5SyntaxHighlighting)
if(KF5SyntaxHighlighting_FOUND)
    set(LIB_LIBRARIES ${LIB_LIBRARIES} KF5::SyntaxHighlighting)
    set(LIB_DEFINES ${LIB_DEFINES} HAVE_KF5_SYNTAX_HIGHLIGHTING)
endif()

The two variables LIB_LIBRARIES and LIB_DEFINES are used later on to set linker
and compiler flags for the app. When trying to build, however, the compilation
fails e.g. when using

    #include <functional>

When I edit the file
/usr/i686-w64-mingw32/sys-root/mingw/lib/cmake/KF5SyntaxHighlighting/KF5SyntaxHighlightingTargets.cmake
and change the following:

    set_target_properties(KF5::SyntaxHighlighting PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES
"/usr/i686-w64-mingw32/sys-root/mingw/include/KF5/KSyntaxHighlighting;/usr/i686-w64-mingw32/sys-root/mingw/include/KF5;/usr/i686-w64-mingw32/sys-root/mingw/include"
      INTERFACE_LINK_LIBRARIES "Qt5::Gui"
    )

to:

    set_target_properties(KF5::SyntaxHighlighting PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES
"/usr/i686-w64-mingw32/sys-root/mingw/include/KF5/KSyntaxHighlighting;/usr/i686-w64-mingw32/sys-root/mingw/include/KF5"
      INTERFACE_LINK_LIBRARIES "Qt5::Gui"
    )

Then compilation works fine. I am not entirely sure, but it seems that this
might be due to the include directories set there are passed to consuming
targets via the `-isystem` switch.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to