Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-52952

'directwrite2' build errors using Mingw-w64

    XMLWordPrintable

Details

    • 172f7e618e9f67bbf178f1fa8b93402a615326f8 (5.7, 26.4.2016, 5.7RC)

    Description

      Hi, Everyone,

      Got error while building Qt using Mingw-w64:

      configure -prefix "%CD%\..\GCC64r\dll" -release -opensource -c++std c++11 -shared -plugin-sql-sqlite -opengl dynamic -openvg -platform win32-g++ -iconv -qt-zlib -qt-pcre -icu -I "%CD%\..\..\libICU-57.1\GCC64r\include" -L "%CD%\..\..\libICU-57.1\GCC64r\lib" -qt-libpng -qt-libjpeg -avx -openssl -I "%CD%\..\..\libOPENSSL-1.1.0-dev\GCC64r\include" -L "%CD%\..\..\libOPENSSL-1.1.0-dev\GCC64r\lib" -dbus-runtime -confirm-license -skip qtscript && mingw32-make
      [or]
      configure -prefix "%CD%\..\GCC64r\lib" -release -opensource -c++std c++11 -static -plugin-sql-sqlite -opengl desktop -openvg -I "%CD%\..\..\libMESA-11.2-dev\GCC64r\include" -platform win32-g++ -iconv -qt-zlib -qt-pcre -icu -I "%CD%\..\..\libICU-57.1\GCC64r\include" -L "%CD%\..\..\libICU-57.1\GCC64r\lib" -qt-libpng -qt-libjpeg -avx -openssl -I "%CD%\..\..\libOPENSSL-1.1.0-dev\GCC64r\include" -L "%CD%\..\..\libOPENSSL-1.1.0-dev\GCC64r\lib" -dbus-runtime -confirm-license -skip qtscript && mingw32-make
      
      [snip]
      
      mingw32-make[6]: Entering directory 'c:/libQT-5.7-dev/src/qtbase/src/plugins/platforms/windows'
      g++ -c -pipe -fno-keep-inline-dllexport -O3 -std=c++11 -fno-exceptions -frtti -Wall -Wextra -Wvla -Wdate-time -DUNICODE -DWIN32 -DQT_NO_CAST_FROM_ASCII -DQT_USE_DIRECTWRITE2 -DQT_NO_FONTCONFIG -DLIBEGL_NAME=libEGL -DLIBGLESV2_NAME=libGLESv2 -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_STATICPLUGIN -DQT_PLUGIN -DQT_PLATFORMSUPPORT_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -Ic:\libMESA-11.2-dev\GCC64r\include -Ic:\libICU-57.1\GCC64r\include -Ic:\libOPENSSL-1.1.0-dev\GCC64r\include -I. -I..\..\..\3rdparty\wintab -I..\..\..\3rdparty\freetype\include -I..\..\..\..\include -I..\..\..\..\include\QtPlatformSupport -I..\..\..\..\include\QtPlatformSupport\5.7.0 -I..\..\..\..\include\QtPlatformSupport\5.7.0\QtPlatformSupport -I..\..\..\..\include\QtGui\5.7.0 -I..\..\..\..\include\QtGui\5.7.0\QtGui -I..\..\..\..\include\QtGui -I..\..\..\..\include\QtCore\5.7.0 -I..\..\..\..\include\QtCore\5.7.0\QtCore -I..\..\..\..\include\QtCore -I.moc\release -I..\..\..\..\mkspecs\win32-g++  -o .obj\release\qwindowsfontenginedirectwrite.o qwindowsfontenginedirectwrite.cpp
      qwindowsfontenginedirectwrite.cpp: In member function 'QImage QWindowsFontEngineDirectWrite::imageForGlyph(glyph_t, QFixed, int, const QTransform&)':
      qwindowsfontenginedirectwrite.cpp:581:22: error: 'DWRITE_E_NOCOLOR' was not declared in this scope
               HRESULT hr = DWRITE_E_NOCOLOR;
                            ^
      Makefile.Release:1556: recipe for target '.obj/release/qwindowsfontenginedirectwrite.o' failed
      mingw32-make[6]: *** [.obj/release/qwindowsfontenginedirectwrite.o] Error 1
      mingw32-make[6]: Leaving directory 'c:/libQT-5.7-dev/src/qtbase/src/plugins/platforms/windows'
      Makefile:34: recipe for target 'release' failed
      mingw32-make[5]: *** [release] Error 2
      mingw32-make[5]: Leaving directory 'c:/libQT-5.7-dev/src/qtbase/src/plugins/platforms/windows'
      Makefile:90: recipe for target 'sub-windows-make_first' failed
      mingw32-make[4]: *** [sub-windows-make_first] Error 2
      mingw32-make[4]: Leaving directory 'c:/libQT-5.7-dev/src/qtbase/src/plugins/platforms'
      Makefile:95: recipe for target 'sub-platforms-make_first' failed
      mingw32-make[3]: *** [sub-platforms-make_first] Error 2
      mingw32-make[3]: Leaving directory 'c:/libQT-5.7-dev/src/qtbase/src/plugins'
      Makefile:741: recipe for target 'sub-plugins-make_first' failed
      mingw32-make[2]: *** [sub-plugins-make_first] Error 2
      mingw32-make[2]: Leaving directory 'c:/libQT-5.7-dev/src/qtbase/src'
      Makefile:41: recipe for target 'sub-src-make_first' failed
      mingw32-make[1]: *** [sub-src-make_first] Error 2
      mingw32-make[1]: Leaving directory 'c:/libQT-5.7-dev/src/qtbase'
      Makefile:73: recipe for target 'module-qtbase-make_first' failed
      mingw32-make: *** [module-qtbase-make_first] Error 2
      

      because Mingw-w64 winerror.h doesn't contain appropriate definition. After fixing it (using code from https://github.com/wine-mirror/wine/blob/master/include/winerror.h ), next error appeared:

      mingw32-make[1]: Entering directory 'c:/libQT-5.7-dev/src/qtbase/src/plugins/platforms/windows'
      g++ -c -pipe -fno-keep-inline-dllexport -O3 -std=c++11 -fno-exceptions -frtti -Wall -Wextra -Wvla -Wdate-time -DUNICODE -DWIN32 -DQT_NO_CAST_FROM_ASCII -DQT_USE_DIRECTWRITE2 -DQT_NO_FONTCONFIG -DLIBEGL_NAME=libEGL -DLIBGLESV2_NAME=libGLESv2 -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_PLUGIN -DQT_PLATFORMSUPPORT_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I. -Ic:\libICU-57.1\GCC64r\include -Ic:\libOPENSSL-1.1.0-dev\GCC64r\include -I. -I..\..\..\3rdparty\wintab -I..\..\..\3rdparty\freetype\include -I..\..\..\..\include -I..\..\..\..\include\QtPlatformSupport -I..\..\..\..\include\QtPlatformSupport\5.7.0 -I..\..\..\..\include\QtPlatformSupport\5.7.0\QtPlatformSupport -I..\..\..\..\include\QtGui\5.7.0 -I..\..\..\..\include\QtGui\5.7.0\QtGui -I..\..\..\..\include\QtGui -I..\..\..\..\include\QtANGLE -I..\..\..\..\include\QtCore\5.7.0 -I..\..\..\..\include\QtCore\5.7.0\QtCore -I..\..\..\..\include\QtCore -I.moc\release -I..\..\..\..\mkspecs\win32-g++  -o .obj\release\qwindowsfontdatabase.o qwindowsfontdatabase.cpp
      qwindowsfontdatabase.cpp: In static member function 'static QFontEngine* QWindowsFontDatabase::createEngine(const QFontDef&, int, const QSharedPointer<QWindowsFontEngineData>&)':
      qwindowsfontdatabase.cpp:1800:17: error: 'IDWriteFontFace2' was not declared in this scope
                       IDWriteFontFace2 *directWriteFontFace2 = Q_NULLPTR;
                       ^
      qwindowsfontdatabase.cpp:1800:35: error: 'directWriteFontFace2' was not declared in this scope
                       IDWriteFontFace2 *directWriteFontFace2 = Q_NULLPTR;
                                         ^
      In file included from C:/ProgramData/MinGW64/x86_64-w64-mingw32/include/winbase.h:2377:0,
                       from C:/ProgramData/MinGW64/x86_64-w64-mingw32/include/windows.h:70,
                       from ..\..\..\..\include/QtCore/../../src/corelib/global/qt_windows.h:61,
                       from ..\..\..\..\include/QtCore/qt_windows.h:1,
                       from qtwindows_additional.h:44,
                       from qwindowsfontdatabase.h:45,
                       from qwindowsfontdatabase.cpp:40:
      qwindowsfontdatabase.cpp:1801:67: error: no matching function for call to '__mingw_uuidof()'
                       if (SUCCEEDED(directWriteFontFace->QueryInterface(__uuidof(IDWriteFontFace2),
                                                                         ^
      In file included from C:/ProgramData/MinGW64/x86_64-w64-mingw32/include/winnt.h:628:0,
                       from C:/ProgramData/MinGW64/x86_64-w64-mingw32/include/minwindef.h:163,
                       from C:/ProgramData/MinGW64/x86_64-w64-mingw32/include/windef.h:8,
                       from C:/ProgramData/MinGW64/x86_64-w64-mingw32/include/windows.h:69,
                       from ..\..\..\..\include/QtCore/../../src/corelib/global/qt_windows.h:61,
                       from ..\..\..\..\include/QtCore/qt_windows.h:1,
                       from qtwindows_additional.h:44,
                       from qwindowsfontdatabase.h:45,
                       from qwindowsfontdatabase.cpp:40:
      C:/ProgramData/MinGW64/x86_64-w64-mingw32/include/guiddef.h:30:48: note: candidate: template<class T> const GUID& __mingw_uuidof()
       __extension__ template<typename T> const GUID &__mingw_uuidof();
                                                      ^
      C:/ProgramData/MinGW64/x86_64-w64-mingw32/include/guiddef.h:30:48: note:   template argument deduction/substitution failed:
      In file included from C:/ProgramData/MinGW64/x86_64-w64-mingw32/include/winbase.h:2377:0,
                       from C:/ProgramData/MinGW64/x86_64-w64-mingw32/include/windows.h:70,
                       from ..\..\..\..\include/QtCore/../../src/corelib/global/qt_windows.h:61,
                       from ..\..\..\..\include/QtCore/qt_windows.h:1,
                       from qtwindows_additional.h:44,
                       from qwindowsfontdatabase.h:45,
                       from qwindowsfontdatabase.cpp:40:
      qwindowsfontdatabase.cpp:1801:67: error: template argument 1 is invalid
                       if (SUCCEEDED(directWriteFontFace->QueryInterface(__uuidof(IDWriteFontFace2),
                                                                         ^
      Makefile.Release:4139: recipe for target '.obj/release/qwindowsfontdatabase.o' failed
      mingw32-make[1]: *** [.obj/release/qwindowsfontdatabase.o] Error 1
      mingw32-make[1]: Leaving directory 'c:/libQT-5.7-dev/src/qtbase/src/plugins/platforms/windows'
      Makefile:34: recipe for target 'release' failed
      mingw32-make: *** [release] Error 2
      

      Reproduced for Debug+shared and Release+<shared,static> configurations.

      It appeared after patch 155554 was merged to Qt-5.7 branch with recent update. Probably because some DirectWrite 2 functionality (like IDWriteFontFace2 interface) was not ported yet to Mingw-w64.

      Temporary solution could be to disable automatic build of directwrite2 for Mingw-w64, until missing functionality would be implemented in it.
      Or add -directwrite2 and -no-directwrite2 options to file qtbase\tools\configure\configureapp.cpp, so Mingw-w64 users could bypass this error via configuration parameters.

      UPD: While -no-directwrite option disable both DirectWrite and DirectWrite 2 support, DirectWrite 2 remains marked as enabled in configure.exe output:

      Configuration:
      ...
          audio-backend
          directwrite2
          native-gestures
      
      QMAKESPEC...................win32-g++ (commandline)
      ...
      DirectWrite support.........no
      DirectWrite 2 support.......yes
      Use system proxies..........no
      

      That's a minor flaw, but it confuses a little.

      Regards,
      Alexander

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            kleint Friedemann Kleint
            sav sav
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes