summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/fixqt4headers.pl2
-rwxr-xr-xbin/syncqt.pl3
-rw-r--r--config.tests/mac/corewlan/corewlantest.mm2
-rwxr-xr-xconfig.tests/unix/arch.test6
-rwxr-xr-xconfig.tests/unix/compile.test10
-rw-r--r--config.tests/unix/iconv/iconv.pro2
-rw-r--r--config.tests/unix/ipc_posix/ipc.cpp2
-rw-r--r--config.tests/unix/ipc_sysv/ipc.cpp2
-rwxr-xr-xconfigure4
-rw-r--r--configure.bat2
-rw-r--r--doc/global/qt-cpp-defines.qdocconf2
-rw-r--r--examples/widgets/graphicsview/boxes/basic.fsh2
-rw-r--r--examples/widgets/graphicsview/boxes/basic.vsh2
-rw-r--r--examples/widgets/graphicsview/boxes/dotted.fsh2
-rw-r--r--examples/widgets/graphicsview/boxes/fresnel.fsh2
-rw-r--r--examples/widgets/graphicsview/boxes/glass.fsh2
-rw-r--r--examples/widgets/graphicsview/boxes/granite.fsh2
-rw-r--r--examples/widgets/graphicsview/boxes/marble.fsh2
-rw-r--r--examples/widgets/graphicsview/boxes/reflection.fsh2
-rw-r--r--examples/widgets/graphicsview/boxes/refraction.fsh2
-rw-r--r--examples/widgets/graphicsview/boxes/wood.fsh2
-rw-r--r--examples/widgets/mac/qmaccocoaviewcontainer/main.mm2
-rw-r--r--examples/widgets/mac/qmacnativewidget/main.mm2
-rw-r--r--mkspecs/devices/blackberry-playbook-armle-v7-qcc/qmake.conf8
-rw-r--r--mkspecs/devices/blackberry-playbook-x86-qcc/qmake.conf8
-rw-r--r--mkspecs/features/data/headersclean/tst_headersclean.cpp.in2
-rw-r--r--mkspecs/features/qt_config.prf16
-rw-r--r--mkspecs/features/qt_module_headers.prf2
-rw-r--r--mkspecs/features/qt_module_pris.prf29
-rw-r--r--mkspecs/features/testlib_defines.prf2
-rwxr-xr-xmkspecs/macx-ios-clang/rename_main.sh2
-rw-r--r--qmake/generators/mac/pbuilder_pbx.cpp110
-rw-r--r--qmake/generators/mac/pbuilder_pbx.h2
-rw-r--r--qmake/generators/makefile.cpp310
-rw-r--r--qmake/generators/makefile.h51
-rw-r--r--qmake/generators/makefiledeps.cpp2
-rw-r--r--qmake/generators/projectgenerator.cpp2
-rw-r--r--qmake/generators/unix/unixmake.cpp122
-rw-r--r--qmake/generators/unix/unixmake.h1
-rw-r--r--qmake/generators/unix/unixmake2.cpp343
-rw-r--r--qmake/generators/win32/mingw_make.cpp62
-rw-r--r--qmake/generators/win32/mingw_make.h3
-rw-r--r--qmake/generators/win32/msbuild_objectmodel.cpp6
-rw-r--r--qmake/generators/win32/msvc_nmake.cpp64
-rw-r--r--qmake/generators/win32/msvc_objectmodel.cpp34
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp63
-rw-r--r--qmake/generators/win32/msvc_vcproj.h7
-rw-r--r--qmake/generators/win32/winmakefile.cpp145
-rw-r--r--qmake/generators/win32/winmakefile.h2
-rw-r--r--qmake/meta.cpp3
-rw-r--r--src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java2
-rw-r--r--src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtNativeAccessibility.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtEditText.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtInputConnection.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtLayout.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNativeLibrariesDir.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtSurface.java2
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_io_qtextstream.cpp6
-rw-r--r--src/corelib/global/qcompilerdetection.h5
-rw-r--r--src/corelib/global/qglobal.cpp3
-rw-r--r--src/corelib/io/qfilesystemwatcher_fsevents.mm2
-rw-r--r--src/corelib/io/qsettings_winrt.cpp2
-rw-r--r--src/corelib/io/qstandardpaths_ios.mm2
-rw-r--r--src/corelib/io/qstorageinfo_unix.cpp27
-rw-r--r--src/corelib/io/qurl_mac.mm2
-rw-r--r--src/corelib/kernel/kernel.pri2
-rw-r--r--src/corelib/kernel/qcore_mac_objc.mm2
-rw-r--r--src/corelib/plugin/qelfparser_p.cpp2
-rw-r--r--src/corelib/tools/qbytearray_mac.mm2
-rw-r--r--src/corelib/tools/qbytearraylist.cpp2
-rw-r--r--src/corelib/tools/qbytearraylist.h2
-rw-r--r--src/corelib/tools/qdatetime.cpp222
-rw-r--r--src/corelib/tools/qdatetime.h54
-rw-r--r--src/corelib/tools/qdatetime_mac.mm2
-rw-r--r--src/corelib/tools/qdatetime_p.h32
-rw-r--r--src/corelib/tools/qlist.h70
-rw-r--r--src/corelib/tools/qlocale_mac.mm2
-rw-r--r--src/corelib/tools/qpair.h15
-rw-r--r--src/corelib/tools/qstring_mac.mm2
-rw-r--r--src/corelib/tools/qtimezone.cpp42
-rw-r--r--src/corelib/tools/qtimezoneprivate.cpp74
-rw-r--r--src/corelib/tools/qtimezoneprivate_android.cpp6
-rw-r--r--src/corelib/tools/qtimezoneprivate_icu.cpp37
-rw-r--r--src/corelib/tools/qtimezoneprivate_mac.mm13
-rw-r--r--src/corelib/tools/qtimezoneprivate_p.h28
-rw-r--r--src/corelib/tools/qtimezoneprivate_tz.cpp16
-rw-r--r--src/corelib/tools/qtimezoneprivate_win.cpp12
-rw-r--r--src/corelib/tools/qversionnumber.cpp2
-rw-r--r--src/corelib/tools/qversionnumber_p.h2
-rwxr-xr-xsrc/corelib/xml/make-parser.sh2
-rw-r--r--src/gui/accessible/qaccessiblecache_mac.mm2
-rw-r--r--src/gui/kernel/qplatformgraphicsbuffer.cpp2
-rw-r--r--src/gui/kernel/qplatformgraphicsbuffer.h2
-rw-r--r--src/gui/kernel/qplatformgraphicsbufferhelper.cpp2
-rw-r--r--src/gui/kernel/qplatformgraphicsbufferhelper.h2
-rw-r--r--src/gui/opengl/qopenglversionfunctions.cpp116
-rw-r--r--src/gui/opengl/qopenglversionfunctions.h250
-rw-r--r--src/gui/painting/qdrawhelper_neon_asm.S2
-rw-r--r--src/network/access/qnetworkreplynsurlconnectionimpl.mm2
-rw-r--r--src/network/bearer/qnetworkconfiguration.cpp7
-rw-r--r--src/network/socket/qtcpserver_p.h2
-rw-r--r--src/network/ssl/qsslcertificate_openssl.cpp2
-rw-r--r--src/network/ssl/qsslcertificate_qt.cpp2
-rw-r--r--src/network/ssl/qsslcertificate_winrt.cpp2
-rw-r--r--src/network/ssl/qsslkey_openssl.cpp2
-rw-r--r--src/network/ssl/qsslkey_winrt.cpp2
-rw-r--r--src/network/ssl/qsslsocket.cpp1
-rw-r--r--src/network/ssl/qsslsocket_winrt.cpp2
-rw-r--r--src/network/ssl/qsslsocket_winrt_p.h2
-rw-r--r--src/platformsupport/cglconvenience/cglconvenience.mm2
-rw-r--r--src/platformsupport/clipboard/qmacmime.mm2
-rw-r--r--src/platformsupport/dbusmenu/qdbusmenuconnection.cpp10
-rw-r--r--src/platformsupport/dbusmenu/qdbusmenuconnection_p.h4
-rw-r--r--src/platformsupport/dbustray/qdbustrayicon.cpp14
-rw-r--r--src/platformsupport/dbustray/qdbustrayicon_p.h1
-rw-r--r--src/platformsupport/eventdispatchers/qeventdispatcher_cf.mm2
-rw-r--r--src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm2
-rw-r--r--src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm14
-rw-r--r--src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h1
-rw-r--r--src/platformsupport/themes/genericunix/qgenericunixthemes.cpp2
-rw-r--r--src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java2
-rw-r--r--src/plugins/bearer/bearer.pro2
-rw-r--r--src/plugins/bearer/corewlan/qcorewlanengine.mm2
-rw-r--r--src/plugins/platforminputcontexts/compose/compose.pro2
-rw-r--r--src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontextmain.cpp (renamed from src/plugins/platforminputcontexts/compose/main.cpp)2
-rw-r--r--src/plugins/platforms/cocoa/main.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaaccessibility.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaapplication.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoabackingstore.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaclipboard.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoacursor.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoadrag.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaglcontext.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoahelpers.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoainputcontext.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintegration.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintrospection.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoakeymapper.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuloader.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoamimetypes.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoanativeinterface.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaprintersupport.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaservices.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoasystemsettings.mm2
-rwxr-xr-xsrc/plugins/platforms/cocoa/qcocoasystemtrayicon.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoatheme.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm2
-rw-r--r--src/plugins/platforms/cocoa/qmacclipboard.mm2
-rw-r--r--src/plugins/platforms/cocoa/qmultitouch_mac.mm2
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm2
-rw-r--r--src/plugins/platforms/cocoa/qnsviewaccessibility.mm2
-rw-r--r--src/plugins/platforms/cocoa/qnswindowdelegate.mm2
-rw-r--r--src/plugins/platforms/cocoa/qpaintengine_mac.mm2
-rw-r--r--src/plugins/platforms/cocoa/qprintengine_mac.mm2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.h2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsmain.cpp2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11main.cpp2
-rw-r--r--src/plugins/platforms/eglfs/qeglfsdeviceintegration.cpp2
-rw-r--r--src/plugins/platforms/eglfs/qeglfsoffscreenwindow.cpp2
-rw-r--r--src/plugins/platforms/eglfs/qeglfsoffscreenwindow.h2
-rw-r--r--src/plugins/platforms/haiku/haiku.json3
-rw-r--r--src/plugins/platforms/haiku/haiku.pro42
-rw-r--r--src/plugins/platforms/haiku/main.cpp47
-rw-r--r--src/plugins/platforms/haiku/main.h47
-rw-r--r--src/plugins/platforms/haiku/qhaikuapplication.cpp71
-rw-r--r--src/plugins/platforms/haiku/qhaikuapplication.h50
-rw-r--r--src/plugins/platforms/haiku/qhaikubuffer.cpp73
-rw-r--r--src/plugins/platforms/haiku/qhaikubuffer.h62
-rw-r--r--src/plugins/platforms/haiku/qhaikuclipboard.cpp140
-rw-r--r--src/plugins/platforms/haiku/qhaikuclipboard.h64
-rw-r--r--src/plugins/platforms/haiku/qhaikucursor.cpp92
-rw-r--r--src/plugins/platforms/haiku/qhaikucursor.h59
-rw-r--r--src/plugins/platforms/haiku/qhaikuintegration.cpp133
-rw-r--r--src/plugins/platforms/haiku/qhaikuintegration.h72
-rw-r--r--src/plugins/platforms/haiku/qhaikukeymapper.cpp180
-rw-r--r--src/plugins/platforms/haiku/qhaikukeymapper.h (renamed from mkspecs/devices/blackberry-playbook-armle-v7-qcc/qplatformdefs.h)27
-rw-r--r--src/plugins/platforms/haiku/qhaikurasterbackingstore.cpp92
-rw-r--r--src/plugins/platforms/haiku/qhaikurasterbackingstore.h64
-rw-r--r--src/plugins/platforms/haiku/qhaikurasterwindow.cpp270
-rw-r--r--src/plugins/platforms/haiku/qhaikurasterwindow.h88
-rw-r--r--src/plugins/platforms/haiku/qhaikuscreen.cpp137
-rw-r--r--src/plugins/platforms/haiku/qhaikuscreen.h66
-rw-r--r--src/plugins/platforms/haiku/qhaikuservices.cpp82
-rw-r--r--src/plugins/platforms/haiku/qhaikuservices.h52
-rw-r--r--src/plugins/platforms/haiku/qhaikuutils.cpp110
-rw-r--r--src/plugins/platforms/haiku/qhaikuutils.h (renamed from mkspecs/devices/blackberry-playbook-x86-qcc/qplatformdefs.h)25
-rw-r--r--src/plugins/platforms/haiku/qhaikuwindow.cpp388
-rw-r--r--src/plugins/platforms/haiku/qhaikuwindow.h122
-rw-r--r--src/plugins/platforms/ios/plugin.mm2
-rw-r--r--src/plugins/platforms/ios/qiosapplicationdelegate.mm2
-rw-r--r--src/plugins/platforms/ios/qiosapplicationstate.mm2
-rw-r--r--src/plugins/platforms/ios/qiosbackingstore.mm2
-rw-r--r--src/plugins/platforms/ios/qiosclipboard.mm2
-rw-r--r--src/plugins/platforms/ios/qioscontext.mm2
-rw-r--r--src/plugins/platforms/ios/qioseventdispatcher.mm2
-rw-r--r--src/plugins/platforms/ios/qiosglobal.mm2
-rw-r--r--src/plugins/platforms/ios/qiosinputcontext.mm2
-rw-r--r--src/plugins/platforms/ios/qiosintegration.mm2
-rw-r--r--src/plugins/platforms/ios/qiosmenu.h2
-rw-r--r--src/plugins/platforms/ios/qiosmenu.mm2
-rw-r--r--src/plugins/platforms/ios/qiosplatformaccessibility.mm2
-rw-r--r--src/plugins/platforms/ios/qiosscreen.mm2
-rw-r--r--src/plugins/platforms/ios/qiosservices.mm2
-rw-r--r--src/plugins/platforms/ios/qiostextresponder.h2
-rw-r--r--src/plugins/platforms/ios/qiostextresponder.mm2
-rw-r--r--src/plugins/platforms/ios/qiostheme.mm2
-rw-r--r--src/plugins/platforms/ios/qiosviewcontroller.mm2
-rw-r--r--src/plugins/platforms/ios/qioswindow.mm2
-rw-r--r--src/plugins/platforms/ios/quiaccessibilityelement.mm2
-rw-r--r--src/plugins/platforms/ios/quiview.mm2
-rw-r--r--src/plugins/platforms/ios/quiview_accessibility.mm2
-rw-r--r--src/plugins/platforms/platforms.pro4
-rw-r--r--src/plugins/platforms/qnx/qnx.pro18
-rw-r--r--src/plugins/platforms/qnx/qqnxbpseventfilter.cpp33
-rw-r--r--src/plugins/platforms/qnx/qqnxbpseventfilter.h5
-rw-r--r--src/plugins/platforms/qnx/qqnxfiledialoghelper.h21
-rw-r--r--src/plugins/platforms/qnx/qqnxfiledialoghelper_playbook.cpp312
-rw-r--r--src/plugins/platforms/qnx/qqnxfilepicker.cpp6
-rw-r--r--src/plugins/platforms/qnx/qqnxscreen.cpp2
-rw-r--r--src/plugins/platforms/qnx/qqnxvirtualkeyboardbps.cpp8
-rw-r--r--src/plugins/platforms/qnx/qqnxwindow.cpp6
-rw-r--r--src/plugins/platforms/windows/qwindowsscaling.h2
-rw-r--r--src/plugins/platforms/winrt/qwinrtfiledialoghelper.cpp2
-rw-r--r--src/plugins/platforms/winrt/qwinrtfiledialoghelper.h2
-rw-r--r--src/plugins/platforms/winrt/qwinrtfileengine.cpp2
-rw-r--r--src/plugins/platforms/winrt/qwinrtfileengine.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationplugin.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglmain.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxmain.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.h2
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection.h12
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection_xi2.cpp32
-rw-r--r--src/plugins/platforms/xcb/qxcbintegration.cpp2
-rw-r--r--src/plugins/platforms/xcb/qxcbnativeinterface.cpp3
-rw-r--r--src/plugins/platforms/xcb/qxcbnativeinterface.h1
-rw-r--r--src/printsupport/dialogs/qpagesetupdialog_mac.mm2
-rw-r--r--src/printsupport/dialogs/qprintdialog_mac.mm2
-rw-r--r--src/testlib/qtestblacklist.cpp2
-rw-r--r--src/testlib/qtestcase.cpp54
-rw-r--r--src/testlib/qtestcase.h4
-rwxr-xr-xsrc/tools/moc/util/generate.sh2
-rw-r--r--src/tools/moc/util/licenseheader.txt2
-rw-r--r--src/tools/qdoc/codemarker.cpp2
-rw-r--r--src/tools/qdoc/codeparser.cpp10
-rw-r--r--src/tools/qdoc/cppcodemarker.cpp30
-rw-r--r--src/tools/qdoc/cppcodeparser.cpp184
-rw-r--r--src/tools/qdoc/cppcodeparser.h21
-rw-r--r--src/tools/qdoc/doc.cpp3
-rw-r--r--src/tools/qdoc/generator.cpp89
-rw-r--r--src/tools/qdoc/generator.h6
-rw-r--r--src/tools/qdoc/helpprojectwriter.cpp68
-rw-r--r--src/tools/qdoc/helpprojectwriter.h2
-rw-r--r--src/tools/qdoc/htmlgenerator.cpp196
-rw-r--r--src/tools/qdoc/htmlgenerator.h2
-rw-r--r--src/tools/qdoc/node.cpp319
-rw-r--r--src/tools/qdoc/node.h218
-rw-r--r--src/tools/qdoc/puredocparser.cpp12
-rw-r--r--src/tools/qdoc/qdocdatabase.cpp147
-rw-r--r--src/tools/qdoc/qdocdatabase.h52
-rw-r--r--src/tools/qdoc/qdocindexfiles.cpp319
-rw-r--r--src/tools/qdoc/qmlcodeparser.cpp25
-rw-r--r--src/tools/qdoc/qmlvisitor.cpp127
-rw-r--r--src/tools/qdoc/tree.cpp259
-rw-r--r--src/tools/qdoc/tree.h44
-rw-r--r--src/tools/qlalr/examples/glsl/build.sh2
-rw-r--r--src/tools/qlalr/examples/glsl/glsl-lex.l2
-rw-r--r--src/tools/qlalr/examples/qparser/calc.l2
-rw-r--r--src/widgets/dialogs/qfiledialog.ui2
-rw-r--r--src/widgets/dialogs/qfiledialog_embedded.ui2
-rwxr-xr-xsrc/widgets/doc/snippets/macmainwindow.mm2
-rw-r--r--src/widgets/styles/qmacstyle_mac.mm2
-rw-r--r--src/widgets/util/qscroller_mac.mm2
-rw-r--r--src/widgets/widgets/qmaccocoaviewcontainer_mac.mm2
-rw-r--r--src/widgets/widgets/qmacnativewidget_mac.mm2
-rw-r--r--src/widgets/widgets/qmenu_mac.mm2
-rw-r--r--tests/auto/compilerwarnings/data/test_cpp.txt2
-rw-r--r--tests/auto/corelib/io/qdir/tst_qdir.cpp6
-rw-r--r--tests/auto/corelib/io/qfileinfo/qfileinfo.pro9
-rw-r--r--tests/auto/corelib/io/qfileinfo/testdata.qrc (renamed from tests/auto/corelib/io/qfileinfo/android_testdata.qrc)2
-rw-r--r--tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp45
-rw-r--r--tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp2
-rw-r--r--tests/auto/corelib/io/qurl/tst_qurl_mac.mm2
-rw-r--r--tests/auto/corelib/tools/qbytearray/tst_qbytearray_mac.mm2
-rw-r--r--tests/auto/corelib/tools/qdatetime/tst_qdatetime_mac.mm2
-rw-r--r--tests/auto/corelib/tools/qhashfunctions/tst_qhashfunctions.cpp2
-rw-r--r--tests/auto/corelib/tools/qlist/tst_qlist.cpp351
-rw-r--r--tests/auto/corelib/tools/qstring/tst_qstring_mac.mm2
-rw-r--r--tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp53
-rw-r--r--tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.mm2
-rw-r--r--tests/auto/tools/qmake/testdata/quotedfilenames/include folder/header.h1
-rw-r--r--tests/auto/tools/qmake/testdata/quotedfilenames/main.cpp2
-rw-r--r--tests/auto/tools/qmake/testdata/quotedfilenames/quotedfilenames.pro6
-rw-r--r--tests/auto/tools/qmake/testdata/simple_app/simple_app.pro4
-rw-r--r--tests/auto/tools/qmake/testdata/simple_dll/simple_dll.pro4
-rw-r--r--tests/auto/tools/qmake/testdata/simple_lib/simple_lib.pro4
-rw-r--r--tests/auto/tools/qmake/testdata/subdirs/simple_app/main.cpp3
-rw-r--r--tests/auto/tools/qmake/testdata/subdirs/simple_app/simple_app.pro7
-rw-r--r--tests/auto/tools/qmake/testdata/subdirs/simple_dll/simple.h9
-rw-r--r--tests/auto/tools/qmake/testdata/subdirs/simple_dll/simple_dll.pro6
-rw-r--r--tests/auto/tools/qmake/testdata/subdirs/subdirs.pro4
-rw-r--r--tests/auto/tools/qmake/tst_qmake.cpp43
-rw-r--r--tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog_mac_helpers.mm2
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp7
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget_mac_helpers.mm2
-rw-r--r--tests/auto/widgets/widgets/qmenu/tst_qmenu_mac.mm2
-rw-r--r--tests/manual/cocoa/qmaccocoaviewcontainer/TestMouseMovedNSView.m2
-rw-r--r--tests/manual/cocoa/qmaccocoaviewcontainer/main.mm2
-rw-r--r--tests/manual/cocoa/qsystemtrayicon/main.cpp2
-rw-r--r--tests/manual/cocoa/qt_on_cocoa/main.mm2
-rwxr-xr-xtests/manual/mkspecs/test.sh2
-rw-r--r--tests/manual/qopenglwindow/multiwindow/main.cpp2
-rw-r--r--tests/manual/xcb_gl_integration/main.cpp2
-rw-r--r--tools/configure/configureapp.cpp8
-rwxr-xr-xutil/local_database/cldr2qlocalexml.py2
-rwxr-xr-xutil/local_database/cldr2qtimezone.py2
-rwxr-xr-xutil/local_database/dateconverter.py2
-rw-r--r--util/local_database/enumdata.py2
-rwxr-xr-xutil/local_database/qlocalexml2cpp.py2
-rw-r--r--util/local_database/xpathlite.py2
-rwxr-xr-xutil/unicode/writingSystems.sh2
355 files changed, 5895 insertions, 2919 deletions
diff --git a/bin/fixqt4headers.pl b/bin/fixqt4headers.pl
index d39f5f3ec8..b08deb0ba2 100755
--- a/bin/fixqt4headers.pl
+++ b/bin/fixqt4headers.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
#############################################################################
##
-## Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+## Copyright (C) 2015 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the porting tools of the Qt Toolkit.
diff --git a/bin/syncqt.pl b/bin/syncqt.pl
index 4462cebe4e..3bee0175ff 100755
--- a/bin/syncqt.pl
+++ b/bin/syncqt.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
#############################################################################
##
-## Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+## Copyright (C) 2015 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the build configuration tools of the Qt Toolkit.
@@ -379,6 +379,7 @@ sub fixPaths {
my $out = File::Spec->abs2rel(cleanupPath($file), cleanupPath($dir));
$out =~ s,\\,/,g;
+ $out = "\"$out\"" if ($out =~ / /);
return $out;
}
diff --git a/config.tests/mac/corewlan/corewlantest.mm b/config.tests/mac/corewlan/corewlantest.mm
index bcc3be94e1..c059c45547 100644
--- a/config.tests/mac/corewlan/corewlantest.mm
+++ b/config.tests/mac/corewlan/corewlantest.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the config.tests of the Qt Toolkit.
diff --git a/config.tests/unix/arch.test b/config.tests/unix/arch.test
index 56d71e6066..c50bd8b30a 100755
--- a/config.tests/unix/arch.test
+++ b/config.tests/unix/arch.test
@@ -23,14 +23,14 @@ while [ "$#" -gt 0 ]; do
PARAM=$1
case $PARAM in
-L*|-l*)
- LFLAGS="$LFLAGS $PARAM"
+ LFLAGS="$LFLAGS \"$PARAM\""
;;
-I*)
INC=`echo $PARAM | sed -e 's/^-I//'`
- INCLUDEPATH="$INCLUDEPATH $INC"
+ INCLUDEPATH="$INCLUDEPATH \"$INC\""
;;
-D*)
- CXXFLAGS="$CXXFLAGS $PARAM"
+ CXXFLAGS="$CXXFLAGS \"$PARAM\""
;;
*) ;;
esac
diff --git a/config.tests/unix/compile.test b/config.tests/unix/compile.test
index 67325f2c20..103321e451 100755
--- a/config.tests/unix/compile.test
+++ b/config.tests/unix/compile.test
@@ -33,18 +33,18 @@ while [ "$#" -gt 0 ]; do
shift
;;
-F*|-m*|-x*)
- LFLAGS="$LFLAGS $PARAM"
- CXXFLAGS="$CXXFLAGS $PARAM"
+ LFLAGS="$LFLAGS \"$PARAM\""
+ CXXFLAGS="$CXXFLAGS \"$PARAM\""
;;
-L*|-l*|-pthread)
- LFLAGS="$LFLAGS $PARAM"
+ LFLAGS="$LFLAGS \"$PARAM\""
;;
-I*)
INC=`echo $PARAM | sed -e 's/^-I//'`
- INCLUDEPATH="$INCLUDEPATH $INC"
+ INCLUDEPATH="$INCLUDEPATH \"$INC\""
;;
-f*|-D*)
- CXXFLAGS="$CXXFLAGS $PARAM"
+ CXXFLAGS="$CXXFLAGS \"$PARAM\""
;;
-Qoption)
# Two-argument form for the Sun Compiler
diff --git a/config.tests/unix/iconv/iconv.pro b/config.tests/unix/iconv/iconv.pro
index 65a67f16d3..ca12e51947 100644
--- a/config.tests/unix/iconv/iconv.pro
+++ b/config.tests/unix/iconv/iconv.pro
@@ -1,3 +1,3 @@
SOURCES = iconv.cpp
CONFIG -= qt dylib
-mac|mingw|qnx:LIBS += -liconv
+mac|mingw|qnx|haiku:LIBS += -liconv
diff --git a/config.tests/unix/ipc_posix/ipc.cpp b/config.tests/unix/ipc_posix/ipc.cpp
index ea5af37b71..e2d2d1dc73 100644
--- a/config.tests/unix/ipc_posix/ipc.cpp
+++ b/config.tests/unix/ipc_posix/ipc.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the config.tests of the Qt Toolkit.
diff --git a/config.tests/unix/ipc_sysv/ipc.cpp b/config.tests/unix/ipc_sysv/ipc.cpp
index 94a907c1d8..8218285685 100644
--- a/config.tests/unix/ipc_sysv/ipc.cpp
+++ b/config.tests/unix/ipc_sysv/ipc.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the config.tests of the Qt Toolkit.
diff --git a/configure b/configure
index f74af093b9..b83ca24369 100755
--- a/configure
+++ b/configure
@@ -3964,7 +3964,7 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ];
adjoutpath=`echo "$outpath" | sed 's/ /\\\\\\\\ /g'`
adjqmakespec=`echo "$QMAKESPEC" | sed 's/ /\\\\\\\\ /g'`
- echo "BUILD_PATH = $adjoutpath" >> "$mkfile"
+ echo "BUILD_PATH = .." >> "$mkfile"
echo "SOURCE_PATH = $adjrelpath" >> "$mkfile"
if [ -e "$relpath/.git" ]; then
echo 'INC_PATH = $(BUILD_PATH)/include' >> "$mkfile"
@@ -4047,7 +4047,7 @@ fi
#-------------------------------------------------------------------------------
# Verify makespec
#-------------------------------------------------------------------------------
-QMAKE_OUTPUT=`$outpath/bin/qmake -E -nocache -spec "$XQMAKESPEC" "QT=" $DEV_NULL 2>&1`
+QMAKE_OUTPUT=`"$outpath/bin/qmake" -E -nocache -spec "$XQMAKESPEC" "QT=" $DEV_NULL 2>&1`
if [ $? != "0" ]; then
echo "Failed to process makespec for platform '$XPLATFORM'"
if [ "$OPT_VERBOSE" = "yes" ]; then
diff --git a/configure.bat b/configure.bat
index 6852ec7146..0f0638b3db 100644
--- a/configure.bat
+++ b/configure.bat
@@ -47,7 +47,7 @@ if not exist mkspecs (
md mkspecs
if errorlevel 1 goto exit
)
-perl %QTSRC%bin\syncqt.pl -minimal -module QtCore -outdir %QTDIR% %QTSRC%
+perl %QTSRC%bin\syncqt.pl -minimal -module QtCore -outdir "%QTDIR%" %QTSRC%
if errorlevel 1 goto exit
if not exist tools\configure (
diff --git a/doc/global/qt-cpp-defines.qdocconf b/doc/global/qt-cpp-defines.qdocconf
index 0d9dfd8716..3491e00402 100644
--- a/doc/global/qt-cpp-defines.qdocconf
+++ b/doc/global/qt-cpp-defines.qdocconf
@@ -140,7 +140,9 @@ Cpp.ignoredirectives += \
QT_DEPRECATED_X \
Q_DISABLE_COPY \
Q_DUMMY_COMPARISON_OPERATOR \
+ Q_ENUM \
Q_ENUMS \
+ Q_FLAG \
Q_FLAGS \
Q_INTERFACES \
Q_PRIVATE_PROPERTY \
diff --git a/examples/widgets/graphicsview/boxes/basic.fsh b/examples/widgets/graphicsview/boxes/basic.fsh
index 66496b1dbc..c34ee7e0d9 100644
--- a/examples/widgets/graphicsview/boxes/basic.fsh
+++ b/examples/widgets/graphicsview/boxes/basic.fsh
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the demonstration applications of the Qt Toolkit.
diff --git a/examples/widgets/graphicsview/boxes/basic.vsh b/examples/widgets/graphicsview/boxes/basic.vsh
index 16f97236b7..30db2abdc8 100644
--- a/examples/widgets/graphicsview/boxes/basic.vsh
+++ b/examples/widgets/graphicsview/boxes/basic.vsh
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the demonstration applications of the Qt Toolkit.
diff --git a/examples/widgets/graphicsview/boxes/dotted.fsh b/examples/widgets/graphicsview/boxes/dotted.fsh
index 8ae23868ee..97f2aa90ee 100644
--- a/examples/widgets/graphicsview/boxes/dotted.fsh
+++ b/examples/widgets/graphicsview/boxes/dotted.fsh
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the demonstration applications of the Qt Toolkit.
diff --git a/examples/widgets/graphicsview/boxes/fresnel.fsh b/examples/widgets/graphicsview/boxes/fresnel.fsh
index 9c98c15940..8310aa62a2 100644
--- a/examples/widgets/graphicsview/boxes/fresnel.fsh
+++ b/examples/widgets/graphicsview/boxes/fresnel.fsh
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the demonstration applications of the Qt Toolkit.
diff --git a/examples/widgets/graphicsview/boxes/glass.fsh b/examples/widgets/graphicsview/boxes/glass.fsh
index 2ca77cf97f..ac83415476 100644
--- a/examples/widgets/graphicsview/boxes/glass.fsh
+++ b/examples/widgets/graphicsview/boxes/glass.fsh
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the demonstration applications of the Qt Toolkit.
diff --git a/examples/widgets/graphicsview/boxes/granite.fsh b/examples/widgets/graphicsview/boxes/granite.fsh
index fd09426f9d..68f2121681 100644
--- a/examples/widgets/graphicsview/boxes/granite.fsh
+++ b/examples/widgets/graphicsview/boxes/granite.fsh
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the demonstration applications of the Qt Toolkit.
diff --git a/examples/widgets/graphicsview/boxes/marble.fsh b/examples/widgets/graphicsview/boxes/marble.fsh
index d5ad2bccc3..e1db3402b4 100644
--- a/examples/widgets/graphicsview/boxes/marble.fsh
+++ b/examples/widgets/graphicsview/boxes/marble.fsh
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the demonstration applications of the Qt Toolkit.
diff --git a/examples/widgets/graphicsview/boxes/reflection.fsh b/examples/widgets/graphicsview/boxes/reflection.fsh
index 1633116bdc..4366534481 100644
--- a/examples/widgets/graphicsview/boxes/reflection.fsh
+++ b/examples/widgets/graphicsview/boxes/reflection.fsh
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the demonstration applications of the Qt Toolkit.
diff --git a/examples/widgets/graphicsview/boxes/refraction.fsh b/examples/widgets/graphicsview/boxes/refraction.fsh
index de38c17a40..caf2c7ec8b 100644
--- a/examples/widgets/graphicsview/boxes/refraction.fsh
+++ b/examples/widgets/graphicsview/boxes/refraction.fsh
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the demonstration applications of the Qt Toolkit.
diff --git a/examples/widgets/graphicsview/boxes/wood.fsh b/examples/widgets/graphicsview/boxes/wood.fsh
index 9946e6f830..f475ebd036 100644
--- a/examples/widgets/graphicsview/boxes/wood.fsh
+++ b/examples/widgets/graphicsview/boxes/wood.fsh
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the demonstration applications of the Qt Toolkit.
diff --git a/examples/widgets/mac/qmaccocoaviewcontainer/main.mm b/examples/widgets/mac/qmaccocoaviewcontainer/main.mm
index d6674b6266..870ab65ff7 100644
--- a/examples/widgets/mac/qmaccocoaviewcontainer/main.mm
+++ b/examples/widgets/mac/qmaccocoaviewcontainer/main.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtMacExtras module of the Qt Toolkit.
diff --git a/examples/widgets/mac/qmacnativewidget/main.mm b/examples/widgets/mac/qmacnativewidget/main.mm
index aa2c2690d1..b01db8051b 100644
--- a/examples/widgets/mac/qmacnativewidget/main.mm
+++ b/examples/widgets/mac/qmacnativewidget/main.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
diff --git a/mkspecs/devices/blackberry-playbook-armle-v7-qcc/qmake.conf b/mkspecs/devices/blackberry-playbook-armle-v7-qcc/qmake.conf
deleted file mode 100644
index d14a5d644a..0000000000
--- a/mkspecs/devices/blackberry-playbook-armle-v7-qcc/qmake.conf
+++ /dev/null
@@ -1,8 +0,0 @@
-#
-# qmake configuration for the Blackberry Playbook armle-v7
-#
-
-include(../../blackberry-armle-v7-qcc/qmake.conf)
-
-DEFINES += Q_OS_BLACKBERRY_TABLET
-CONFIG += blackberry-playbook
diff --git a/mkspecs/devices/blackberry-playbook-x86-qcc/qmake.conf b/mkspecs/devices/blackberry-playbook-x86-qcc/qmake.conf
deleted file mode 100644
index ed9f7f33c7..0000000000
--- a/mkspecs/devices/blackberry-playbook-x86-qcc/qmake.conf
+++ /dev/null
@@ -1,8 +0,0 @@
-#
-# qmake configuration for the Blackberry Playbook x86
-#
-
-include(../../blackberry-x86-qcc/qmake.conf)
-
-DEFINES += Q_OS_BLACKBERRY_TABLET
-CONFIG += blackberry-playbook
diff --git a/mkspecs/features/data/headersclean/tst_headersclean.cpp.in b/mkspecs/features/data/headersclean/tst_headersclean.cpp.in
index 357892e8c4..14655a2f98 100644
--- a/mkspecs/features/data/headersclean/tst_headersclean.cpp.in
+++ b/mkspecs/features/data/headersclean/tst_headersclean.cpp.in
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
diff --git a/mkspecs/features/qt_config.prf b/mkspecs/features/qt_config.prf
index 208681d98a..973a2182c9 100644
--- a/mkspecs/features/qt_config.prf
+++ b/mkspecs/features/qt_config.prf
@@ -5,16 +5,21 @@ QMAKE_QT_CONFIG = $$[QT_HOST_DATA/get]/mkspecs/qconfig.pri
debug(1, "Cannot load qconfig.pri!")
} else {
debug(1, "Loaded .qconfig.pri from ($$QMAKE_QT_CONFIG)")
- QMAKE_MODULE_PATH = $$split($$list($$(QMAKEMODULES)), $$DIRLIST_SEPARATOR)
+ dirs = $$(QMAKEMODULES)
+ QMAKE_MODULE_PATH = $$split(dirs, $$DIRLIST_SEPARATOR)
QMAKE_MODULE_PATH += $$QMAKEMODULES
- QMAKE_MODULE_PATH += $$split($$list($$[QMAKEMODULES]), $$DIRLIST_SEPARATOR)
- QMAKE_MODULE_PATH += $$replace($$list($$split($$list($$[QMAKE_MKSPECS]), $$DIRLIST_SEPARATOR)), \
- \$, /modules)
+ dirs = $$[QMAKEMODULES]
+ QMAKE_MODULE_PATH += $$split(dirs, $$DIRLIST_SEPARATOR)
+ dirs = $$[QMAKE_MKSPECS]
+ dirs = $$split(dirs, $$DIRLIST_SEPARATOR)
+ QMAKE_MODULE_PATH += $$replace(dirs, \$, /modules)
+ unset(dirs)
QMAKE_MODULE_PATH = $$unique(QMAKE_MODULE_PATH)
QMAKE_MODULE_PATH = $$reverse(QMAKE_MODULE_PATH)
for(dir, QMAKE_MODULE_PATH) {
debug(1, "Loading modules from $${dir}")
- for(mod, $$list($$files($$dir/qt_*.pri))) {
+ mods = $$files($$dir/qt_*.pri)
+ for (mod, mods) {
# For installed Qt these paths will be common for all modules.
# For uninstalled prefix builds these will vary per module, via the
# forwarding module pri files. Keep qt_module_pris.prf in sync with this!
@@ -28,6 +33,7 @@ QMAKE_QT_CONFIG = $$[QT_HOST_DATA/get]/mkspecs/qconfig.pri
QT_MODULE_QML_BASE = $$[QT_INSTALL_QML]
include($$mod)
}
+ unset(mods)
}
QT_MODULES = $$unique(QT_MODULES) # In case modules appear in multiple places
unset(QT_MODULE_INCLUDE_BASE)
diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf
index 5015d58861..fc3ec75e82 100644
--- a/mkspecs/features/qt_module_headers.prf
+++ b/mkspecs/features/qt_module_headers.prf
@@ -21,7 +21,7 @@ load(qt_build_paths)
QMAKE_SYNCQT += -module $$MODULE_INCNAME -version $$VERSION
}
QMAKE_SYNCQT += \
- -outdir $$MODULE_BASE_OUTDIR $$MODULE_SYNCQT_DIR
+ -outdir $$system_quote($$MODULE_BASE_OUTDIR) $$MODULE_SYNCQT_DIR
!silent: message($$QMAKE_SYNCQT)
system($$QMAKE_SYNCQT)|error("Failed to run: $$QMAKE_SYNCQT")
}
diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf
index 74517a3fde..fd639b10ad 100644
--- a/mkspecs/features/qt_module_pris.prf
+++ b/mkspecs/features/qt_module_pris.prf
@@ -48,9 +48,10 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
module_libs = "\$\$QT_MODULE_LIB_BASE"
unix:!static {
host_build: \
- module_rpath = "QT.$${MODULE_ID}.rpath = $$[QT_HOST_LIBS]"
+ module_rpath = $$[QT_HOST_LIBS]
else: \
- module_rpath = "QT.$${MODULE_ID}.rpath = $$[QT_INSTALL_LIBS/dev]"
+ module_rpath = $$[QT_INSTALL_LIBS/dev]
+ module_rpath = "QT.$${MODULE_ID}.rpath = $$val_escape(module_rpath)"
} else {
module_rpath =
}
@@ -93,7 +94,7 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
internal_module: \
MODULE_INCLUDES += $$MODULE_PRIVATE_INCLUDES
split_incpath: \
- MODULE_FWD_PRI_CONT_SUFFIX += "QT.$${MODULE_ID}.includes += $$MODULE_SHADOW_INCLUDES"
+ MODULE_FWD_PRI_CONT_SUFFIX += "QT.$${MODULE_ID}.includes += $$val_escape(MODULE_SHADOW_INCLUDES)"
MODULE_PRI_CONT = \
"QT.$${MODULE_ID}.VERSION = $${VERSION}" \
"QT.$${MODULE_ID}.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \
@@ -117,7 +118,7 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
$$module_rundep \
"QT.$${MODULE_ID}.module_config =$$join(module_build_type, " ", " ")" \
$$module_config \
- "QT.$${MODULE_ID}.DEFINES = $$MODULE_DEFINES" \ # assume sufficient quoting
+ "QT.$${MODULE_ID}.DEFINES = $$val_escape(MODULE_DEFINES)" \
"" \
"QT_MODULES += $$MODULE"
write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.")
@@ -147,18 +148,18 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
# Create a forwarding module .pri file
MODULE_FWD_PRI_CONT = \
- "QT_MODULE_BIN_BASE = $$MODULE_BASE_OUTDIR/bin" \
- "QT_MODULE_INCLUDE_BASE = $$MODULE_BASE_INCDIR/include" \
- "QT_MODULE_IMPORT_BASE = $$MODULE_BASE_OUTDIR/imports" \
- "QT_MODULE_QML_BASE = $$MODULE_BASE_OUTDIR/qml" \
- "QT_MODULE_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \
- "QT_MODULE_HOST_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \
- "QT_MODULE_LIBEXEC_BASE = $$MODULE_BASE_OUTDIR/libexec" \
- "QT_MODULE_PLUGIN_BASE = $$MODULE_BASE_OUTDIR/plugins" \
- "include($$MODULE_PRI)" \
+ "QT_MODULE_BIN_BASE = $$val_escape(MODULE_BASE_OUTDIR)/bin" \
+ "QT_MODULE_INCLUDE_BASE = $$val_escape(MODULE_BASE_INCDIR)/include" \
+ "QT_MODULE_IMPORT_BASE = $$val_escape(MODULE_BASE_OUTDIR)/imports" \
+ "QT_MODULE_QML_BASE = $$val_escape(MODULE_BASE_OUTDIR)/qml" \
+ "QT_MODULE_LIB_BASE = $$val_escape(MODULE_BASE_OUTDIR)/lib" \
+ "QT_MODULE_HOST_LIB_BASE = $$val_escape(MODULE_BASE_OUTDIR)/lib" \
+ "QT_MODULE_LIBEXEC_BASE = $$val_escape(MODULE_BASE_OUTDIR)/libexec" \
+ "QT_MODULE_PLUGIN_BASE = $$val_escape(MODULE_BASE_OUTDIR)/plugins" \
+ "include($$val_escape(MODULE_PRI))" \
"QT.$${MODULE_ID}.priority = 1"
!internal_module: MODULE_FWD_PRI_CONT += \
- "include($$MODULE_PRIVATE_PRI)" \
+ "include($$val_escape(MODULE_PRIVATE_PRI))" \
"QT.$${MODULE}_private.priority = 1"
MODULE_FWD_PRI_CONT += $$MODULE_FWD_PRI_CONT_SUFFIX
write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error("Aborting.")
diff --git a/mkspecs/features/testlib_defines.prf b/mkspecs/features/testlib_defines.prf
index 59540689d3..9176beb9dd 100644
--- a/mkspecs/features/testlib_defines.prf
+++ b/mkspecs/features/testlib_defines.prf
@@ -1 +1 @@
-DEFINES += QT_TESTCASE_BUILDDIR=\\\"$$OUT_PWD\\\"
+DEFINES += QT_TESTCASE_BUILDDIR=$$shell_quote(\"$$OUT_PWD\")
diff --git a/mkspecs/macx-ios-clang/rename_main.sh b/mkspecs/macx-ios-clang/rename_main.sh
index 20f35df68d..b7916e1d56 100755
--- a/mkspecs/macx-ios-clang/rename_main.sh
+++ b/mkspecs/macx-ios-clang/rename_main.sh
@@ -2,7 +2,7 @@
#############################################################################
##
-## Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+## Copyright (C) 2015 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is the build configuration utility of the Qt Toolkit.
diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp
index 6af51d845d..36ec6ef742 100644
--- a/qmake/generators/mac/pbuilder_pbx.cpp
+++ b/qmake/generators/mac/pbuilder_pbx.cpp
@@ -151,7 +151,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t)
subdir += Option::dir_sep;
tmp = subdir + tmp;
}
- QFileInfo fi(fileInfo(Option::fixPathToLocalOS(tmp, true)));
+ QFileInfo fi(fileInfo(Option::normalizePath(tmp)));
if(fi.exists()) {
if(fi.isDir()) {
QString profile = tmp;
@@ -215,7 +215,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t)
t << "\t\t" << project_key << " = {\n"
<< "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("lastKnownFileType", "wrapper.pb-project") << ";\n"
- << "\t\t\t" << writeSettings("name", escapeFilePath(tmp_proj.first("TARGET") + projectSuffix())) << ";\n"
+ << "\t\t\t" << writeSettings("name", tmp_proj.first("TARGET") + projectSuffix()) << ";\n"
<< "\t\t\t" << writeSettings("path", pbxproj) << ";\n"
<< "\t\t\t" << writeSettings("sourceTree", "<absolute>") << ";\n"
<< "\t\t};\n";
@@ -283,7 +283,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t)
t << "\t\t" << keyFor(grp_it.key()) << " = {\n"
<< "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("children", grp_it.value(), SettingsAsList, 4) << ";\n"
- << "\t\t\t" << writeSettings("name", escapeFilePath(grp_it.key().section(Option::dir_sep, -1))) << ";\n"
+ << "\t\t\t" << writeSettings("name", grp_it.key().section(Option::dir_sep, -1)) << ";\n"
<< "\t\t\t" << writeSettings("sourceTree", "<Group>") << ";\n"
<< "\t\t};\n";
}
@@ -626,8 +626,6 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
const QStringList &files = fileFixify(sources.at(source).files(project));
for(int f = 0; f < files.count(); ++f) {
QString file = files[f];
- if(file.length() >= 2 && (file[0] == '"' || file[0] == '\'') && file[(int) file.length()-1] == file[0])
- file = file.mid(1, file.length()-2);
if(!sources.at(source).compilerName().isNull() &&
!verifyExtraCompiler(sources.at(source).compilerName(), file))
continue;
@@ -678,9 +676,9 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
//source reference
t << "\t\t" << src_key << " = {\n"
<< "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n"
- << "\t\t\t" << writeSettings("path", escapeFilePath(file)) << ";\n";
+ << "\t\t\t" << writeSettings("path", file) << ";\n";
if (name != file)
- t << "\t\t\t" << writeSettings("name", escapeFilePath(name)) << ";\n";
+ t << "\t\t\t" << writeSettings("name", name) << ";\n";
t << "\t\t\t" << writeSettings("sourceTree", "<absolute>") << ";\n";
QString filetype = xcodeFiletypeForFilename(file);
if (!filetype.isNull())
@@ -715,7 +713,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
t << "\t\t" << keyFor(grp_it.key()) << " = {\n"
<< "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("children", grp_it.value(), SettingsAsList, 4) << ";\n"
- << "\t\t\t" << writeSettings("name", escapeFilePath(grp_it.key().section(Option::dir_sep, -1))) << ";\n"
+ << "\t\t\t" << writeSettings("name", grp_it.key().section(Option::dir_sep, -1)) << ";\n"
<< "\t\t\t" << writeSettings("sourceTree", "<Group>") << ";\n"
<< "\t\t};\n";
}
@@ -773,7 +771,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
mkt << "\\\n\t";
++added;
const QString file_name = fileFixify(fn, Option::output_dir, Option::output_dir);
- mkt << " " << replaceExtraCompilerVariables(Option::fixPathToTargetOS(tmp_out.first().toQString(), false), file_name, QString());
+ mkt << ' ' << escapeDependencyPath(Option::fixPathToTargetOS(
+ replaceExtraCompilerVariables(tmp_out.first().toQString(), file_name, QString(), NoShell)));
}
}
}
@@ -822,8 +821,6 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
bool remove = false;
QString library, name;
ProString opt = tmp[x].trimmed();
- if (opt.length() >= 2 && (opt.at(0) == '"' || opt.at(0) == '\'') && opt.endsWith(opt.at(0)))
- opt = opt.mid(1, opt.length()-2);
if(opt.startsWith("-L")) {
QString r = opt.mid(2).toQString();
fixForOutput(r);
@@ -934,8 +931,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
bool is_frmwrk = (library.endsWith(".framework"));
t << "\t\t" << key << " = {\n"
<< "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n"
- << "\t\t\t" << writeSettings("name", escapeFilePath(name)) << ";\n"
- << "\t\t\t" << writeSettings("path", escapeFilePath(library)) << ";\n"
+ << "\t\t\t" << writeSettings("name", name) << ";\n"
+ << "\t\t\t" << writeSettings("path", library) << ";\n"
<< "\t\t\t" << writeSettings("refType", QString::number(reftypeForFile(library)), SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("sourceTree", "<absolute>") << ";\n";
if (is_frmwrk)
@@ -970,14 +967,15 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
QTextStream mkt(&mkf);
writeHeader(mkt);
mkt << "SUBLIBS= ";
+ // ### This is missing the parametrization found in unixmake2.cpp
tmp = project->values("SUBLIBS");
for(int i = 0; i < tmp.count(); i++)
- t << "tmp/lib" << tmp[i] << ".a ";
+ t << escapeFilePath("tmp/lib" + tmp[i] + ".a") << ' ';
t << endl << endl;
mkt << "sublibs: $(SUBLIBS)\n\n";
tmp = project->values("SUBLIBS");
for(int i = 0; i < tmp.count(); i++)
- t << "tmp/lib" << tmp[i] << ".a:\n\t"
+ t << escapeFilePath("tmp/lib" + tmp[i] + ".a") + ":\n\t"
<< var(ProKey("MAKELIB" + tmp[i])) << endl << endl;
mkt.flush();
mkf.close();
@@ -1041,7 +1039,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
t << "\t\t" << key << " = {\n"
<< "\t\t\t" << writeSettings("children", project->values("QMAKE_PBX_LIBRARIES"), SettingsAsList, 4) << ";\n"
<< "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n"
- << "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";\n"
+ << "\t\t\t" << writeSettings("name", grp) << ";\n"
<< "\t\t\t" << writeSettings("sourceTree", "<Group>") << ";\n"
<< "\t\t};\n";
}
@@ -1054,7 +1052,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
<< "\t\t\t" << writeSettings("files", project->values("QMAKE_PBX_BUILD_LIBRARIES"), SettingsAsList, 4) << ";\n"
<< "\t\t\t" << writeSettings("isa", "PBXFrameworksBuildPhase", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n"
- << "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";\n"
+ << "\t\t\t" << writeSettings("name", grp) << ";\n"
<< "\t\t};\n";
}
@@ -1078,7 +1076,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
if (!project->isEmpty("DESTDIR")) {
QString phase_key = keyFor("QMAKE_PBX_TARGET_COPY_PHASE");
QString destDir = project->first("DESTDIR").toQString();
- destDir = fileInfo(Option::fixPathToLocalOS(destDir)).absoluteFilePath();
+ destDir = fileInfo(Option::normalizePath(destDir)).absoluteFilePath();
project->values("QMAKE_PBX_BUILDPHASES").append(phase_key);
t << "\t\t" << phase_key << " = {\n"
<< "\t\t\t" << writeSettings("isa", "PBXShellScriptBuildPhase", SettingsNoQuote) << ";\n"
@@ -1089,7 +1087,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
<< "\t\t\t" << writeSettings("outputPaths", ProStringList(), SettingsAsList, 4) << ";\n"
<< "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("shellPath", "/bin/sh") << ";\n"
- << "\t\t\t" << writeSettings("shellScript", fixForOutput("cp -r $BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME " + escapeFilePath(destDir))) << ";\n"
+ << "\t\t\t" << writeSettings("shellScript", fixForOutput("cp -r $BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME " + IoUtils::shellQuoteUnix(destDir))) << ";\n"
<< "\t\t};\n";
}
bool copyBundleResources = project->isActiveConfig("app_bundle") && project->first("TEMPLATE") == "app";
@@ -1107,13 +1105,13 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
//all files
const ProStringList &files = project->values(ProKey(bundle_data[i] + ".files"));
for(int file = 0; file < files.count(); file++) {
- QString fn = fileFixify(files[file].toQString(), Option::output_dir, input_dir, FileFixifyAbsolute);
+ QString fn = fileFixify(files[file].toQString(), Option::output_dir, input_dir, FileFixifyRelative);
QString name = fn.split(Option::dir_sep).back();
QString file_ref_key = keyFor("QMAKE_PBX_BUNDLE_DATA_FILE_REF." + bundle_data[i] + "-" + fn);
bundle_file_refs += file_ref_key;
t << "\t\t" << file_ref_key << " = {\n"
<< "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";\n"
- << "\t\t\t" << writeSettings("path", escapeFilePath(fn)) << ";\n"
+ << "\t\t\t" << writeSettings("path", fn) << ";\n"
<< "\t\t\t" << writeSettings("name", name) << ";\n"
<< "\t\t\t" << writeSettings("sourceTree", "<absolute>") << ";\n"
<< "\t\t};\n";
@@ -1139,7 +1137,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
t << "\t\t" << phase_key << " = {\n"
<< "\t\t\t" << writeSettings("name", "Copy '" + bundle_data[i] + "' Files to Bundle") << ";\n"
<< "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";\n"
- << "\t\t\t" << writeSettings("dstPath", escapeFilePath(path)) << ";\n"
+ << "\t\t\t" << writeSettings("dstPath", path) << ";\n"
<< "\t\t\t" << writeSettings("dstSubfolderSpec", "1", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("isa", "PBXCopyFilesBuildPhase", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("files", bundle_files, SettingsAsList, 4) << ";\n"
@@ -1163,8 +1161,6 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
if (copyBundleResources) {
if (!project->isEmpty("ICON")) {
ProString icon = project->first("ICON");
- if (icon.length() >= 2 && (icon.at(0) == '"' || icon.at(0) == '\'') && icon.endsWith(icon.at(0)))
- icon = icon.mid(1, icon.length() - 2);
bundle_resources_files += keyFor(icon + ".BUILDABLE");
}
@@ -1177,7 +1173,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
<< "\t\t\t" << writeSettings("files", bundle_resources_files, SettingsAsList, 4) << ";\n"
<< "\t\t\t" << writeSettings("isa", "PBXResourcesBuildPhase", SettingsNoQuote) << ";\n"
<< "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";\n"
- << "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";\n"
+ << "\t\t\t" << writeSettings("name", grp) << ";\n"
<< "\t\t};\n";
}
@@ -1202,7 +1198,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
} else {
t << "\t\t\t" << writeSettings("explicitFileType", "compiled.mach-o.executable") << ";\n";
}
- t << "\t\t\t" << writeSettings("path", escapeFilePath(targ)) << ";\n";
+ t << "\t\t\t" << writeSettings("path", targ) << ";\n";
} else {
ProString lib = project->first("QMAKE_ORIG_TARGET");
if(project->isActiveConfig("staticlib")) {
@@ -1230,7 +1226,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
} else {
t << "\t\t\t" << writeSettings("explicitFileType", "compiled.mach-o.dylib") << ";\n";
}
- t << "\t\t\t" << writeSettings("path", escapeFilePath(lib)) << ";\n";
+ t << "\t\t\t" << writeSettings("path", lib) << ";\n";
}
t << "\t\t\t" << writeSettings("sourceTree", "BUILT_PRODUCTS_DIR", SettingsNoQuote) << ";\n"
<< "\t\t};\n";
@@ -1250,7 +1246,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
t << "\t\t" << keyFor("QMAKE_PBX_ROOT_GROUP") << " = {\n"
<< "\t\t\t" << writeSettings("children", project->values("QMAKE_PBX_GROUPS"), SettingsAsList, 4) << ";\n"
<< "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";\n"
- << "\t\t\t" << writeSettings("name", escapeFilePath(project->first("QMAKE_ORIG_TARGET"))) << ";\n"
+ << "\t\t\t" << writeSettings("name", project->first("QMAKE_ORIG_TARGET")) << ";\n"
<< "\t\t\t" << writeSettings("sourceTree", "<Group>") << ";\n"
<< "\t\t};\n";
@@ -1296,14 +1292,14 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
else
t << "\t\t\t" << writeSettings("productType", "com.apple.product-type.tool") << ";\n";
}
- t << "\t\t\t" << writeSettings("name", escapeFilePath(project->first("QMAKE_ORIG_TARGET"))) << ";\n"
- << "\t\t\t" << writeSettings("productName", escapeFilePath(project->first("QMAKE_ORIG_TARGET"))) << ";\n";
+ t << "\t\t\t" << writeSettings("name", project->first("QMAKE_ORIG_TARGET")) << ";\n"
+ << "\t\t\t" << writeSettings("productName", project->first("QMAKE_ORIG_TARGET")) << ";\n";
} else {
ProString lib = project->first("QMAKE_ORIG_TARGET");
if(!project->isActiveConfig("lib_bundle") && !project->isActiveConfig("staticlib"))
lib.prepend("lib");
- t << "\t\t\t" << writeSettings("name", escapeFilePath(lib)) << ";\n"
- << "\t\t\t" << writeSettings("productName", escapeFilePath(lib)) << ";\n";
+ t << "\t\t\t" << writeSettings("name", lib) << ";\n"
+ << "\t\t\t" << writeSettings("productName", lib) << ";\n";
if (!project->isEmpty("QMAKE_PBX_PRODUCT_TYPE"))
t << "\t\t\t" << writeSettings("productType", project->first("QMAKE_PBX_PRODUCT_TYPE")) << ";\n";
else if (project->isActiveConfig("staticlib"))
@@ -1314,7 +1310,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
t << "\t\t\t" << writeSettings("productType", "com.apple.product-type.library.dynamic") << ";\n";
}
if(!project->isEmpty("DESTDIR"))
- t << "\t\t\t" << writeSettings("productInstallPath", escapeFilePath(project->first("DESTDIR"))) << ";\n";
+ t << "\t\t\t" << writeSettings("productInstallPath", project->first("DESTDIR")) << ";\n";
t << "\t\t};\n";
//DEBUG/RELEASE
QString defaultConfig;
@@ -1352,7 +1348,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
ProString lib = project->first("QMAKE_ORIG_TARGET");
if (!project->isActiveConfig("lib_bundle") && !project->isActiveConfig("staticlib"))
lib.prepend("lib");
- settings.insert("PRODUCT_NAME", escapeFilePath(lib.toQString()));
+ settings.insert("PRODUCT_NAME", lib.toQString());
}
if (project->isActiveConfig("debug") != (bool)as_release)
@@ -1422,7 +1418,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
}
}
- t << "\t\t\t\t" << writeSettings("SYMROOT", escapeFilePath(qmake_getpwd())) << ";\n";
+ t << "\t\t\t\t" << writeSettings("SYMROOT", qmake_getpwd()) << ";\n";
if (!project->isEmpty("DESTDIR")) {
ProString dir = project->first("DESTDIR");
@@ -1458,11 +1454,11 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
QString var = tmp[i].toQString(), val = QString::fromLocal8Bit(qgetenv(var.toLatin1().constData()));
if (val.isEmpty() && var == "TB")
val = "/usr/bin/";
- t << "\t\t\t\t" << writeSettings(var, escapeFilePath(val)) << ";\n";
+ t << "\t\t\t\t" << writeSettings(var, val) << ";\n";
}
if (!project->isEmpty("PRECOMPILED_HEADER")) {
t << "\t\t\t\t" << writeSettings("GCC_PRECOMPILE_PREFIX_HEADER", "YES") << ";\n"
- << "\t\t\t\t" << writeSettings("GCC_PREFIX_HEADER", escapeFilePath(project->first("PRECOMPILED_HEADER"))) << ";\n";
+ << "\t\t\t\t" << writeSettings("GCC_PREFIX_HEADER", project->first("PRECOMPILED_HEADER")) << ";\n";
}
t << "\t\t\t\t" << writeSettings("HEADER_SEARCH_PATHS", fixListForOutput("INCLUDEPATH"), SettingsAsList, 5) << ";\n"
<< "\t\t\t\t" << writeSettings("LIBRARY_SEARCH_PATHS", fixListForOutput("QMAKE_PBX_LIBPATHS"), SettingsAsList, 5) << ";\n"
@@ -1493,8 +1489,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
t << "\t\t\t\t" << writeSettings("OTHER_LDFLAGS",
fixListForOutput("SUBLIBS")
+ fixListForOutput("QMAKE_LFLAGS")
- + fixListForOutput("QMAKE_LIBS")
- + fixListForOutput("QMAKE_LIBS_PRIVATE"),
+ + fixListForOutput(fixLibFlags("QMAKE_LIBS"))
+ + fixListForOutput(fixLibFlags("QMAKE_LIBS_PRIVATE")),
SettingsAsList, 6) << ";\n";
}
const ProStringList &archs = !project->values("QMAKE_XCODE_ARCHS").isEmpty() ?
@@ -1502,7 +1498,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
if (!archs.isEmpty())
t << "\t\t\t\t" << writeSettings("ARCHS", archs) << ";\n";
if (!project->isEmpty("OBJECTS_DIR"))
- t << "\t\t\t\t" << writeSettings("OBJROOT", escapeFilePath(project->first("OBJECTS_DIR").toQString())) << ";\n";
+ t << "\t\t\t\t" << writeSettings("OBJROOT", project->first("OBJECTS_DIR")) << ";\n";
} else {
if (project->first("TEMPLATE") == "app") {
t << "\t\t\t\t" << writeSettings("PRODUCT_NAME", fixForOutput(project->first("QMAKE_ORIG_TARGET").toQString())) << ";\n";
@@ -1514,7 +1510,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
ProString lib = project->first("QMAKE_ORIG_TARGET");
if (!project->isActiveConfig("lib_bundle") && !project->isActiveConfig("staticlib"))
lib.prepend("lib");
- t << "\t\t\t\t" << writeSettings("PRODUCT_NAME", escapeFilePath(lib)) << ";\n";
+ t << "\t\t\t\t" << writeSettings("PRODUCT_NAME", lib) << ";\n";
}
}
t << "\t\t\t};\n"
@@ -1560,13 +1556,14 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
QTextStream mkwrapt(&mkwrapf);
writeHeader(mkwrapt);
const char cleans[] = "preprocess_clean ";
+ const QString cmd = escapeFilePath(project->first("QMAKE_ORIG_TARGET") + projectSuffix() + "/") + " && " + pbxbuild();
mkwrapt << "#This is a makefile wrapper for PROJECT BUILDER\n"
<< "all:\n\t"
- << "cd " << project->first("QMAKE_ORIG_TARGET") << projectSuffix() << "/ && " << pbxbuild() << "\n"
+ << "cd " << cmd << "\n"
<< "install: all\n\t"
- << "cd " << project->first("QMAKE_ORIG_TARGET") << projectSuffix() << "/ && " << pbxbuild() << " install\n"
+ << "cd " << cmd << " install\n"
<< "distclean clean: preprocess_clean\n\t"
- << "cd " << project->first("QMAKE_ORIG_TARGET") << projectSuffix() << "/ && " << pbxbuild() << " clean\n"
+ << "cd " << cmd << " clean\n"
<< (!did_preprocess ? cleans : "") << ":\n";
if(did_preprocess)
mkwrapt << cleans << ":\n\t"
@@ -1666,7 +1663,6 @@ ProjectBuilderMakefileGenerator::openOutput(QFile &file, const QString &build) c
output += QDir::separator();
}
output += QString("project.pbxproj");
- output = unescapeFilePath(output);
file.setFileName(output);
}
bool ret = UnixMakefileGenerator::openOutput(file, build);
@@ -1723,8 +1719,6 @@ ProjectBuilderMakefileGenerator::pbuilderVersion() const
else
version_plist = "/Developer/Applications/Project Builder.app/Contents/version.plist";
#endif
- } else {
- version_plist.replace(QRegExp("\""), "");
}
if (ret.isEmpty()) {
QFile version_file(version_plist);
@@ -1785,7 +1779,7 @@ int
ProjectBuilderMakefileGenerator::reftypeForFile(const QString &where)
{
int ret = 0; //absolute is the default..
- if(QDir::isRelativePath(unescapeFilePath(where)))
+ if (QDir::isRelativePath(where))
ret = 4; //relative
return ret;
}
@@ -1811,26 +1805,6 @@ ProjectBuilderMakefileGenerator::pbxbuild()
return (pbuilderVersion() >= 38 ? "xcodebuild" : "pbxbuild");
}
-QString
-ProjectBuilderMakefileGenerator::escapeFilePath(const QString &path) const
-{
-#if 1
- //in the middle of generating a Makefile!
- if(writingUnixMakefileGenerator)
- return UnixMakefileGenerator::escapeFilePath(path);
-
- //generating stuff for the xml file!
- QString ret = path;
- if(!ret.isEmpty()) {
- ret = unescapeFilePath(ret);
- debug_msg(2, "EscapeFilePath: %s -> %s", path.toLatin1().constData(), ret.toLatin1().constData());
- }
- return ret;
-#else
- return UnixMakefileGenerator::escapeFilePath(path);
-#endif
-}
-
static QString quotedStringLiteral(const QString &value)
{
QString result;
diff --git a/qmake/generators/mac/pbuilder_pbx.h b/qmake/generators/mac/pbuilder_pbx.h
index 2ecf7b6f36..f517ce4bbd 100644
--- a/qmake/generators/mac/pbuilder_pbx.h
+++ b/qmake/generators/mac/pbuilder_pbx.h
@@ -72,8 +72,6 @@ public:
virtual bool supportsMetaBuild() { return false; }
virtual bool openOutput(QFile &, const QString &) const;
protected:
- virtual QString escapeFilePath(const QString &path) const;
- ProString escapeFilePath(const ProString &path) const { return MakefileGenerator::escapeFilePath(path); }
bool doPrecompiledHeaders() const { return false; }
virtual bool doDepends() const { return writingUnixMakefileGenerator && UnixMakefileGenerator::doDepends(); }
};
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index eebd0e1be5..f2decd71a5 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -61,6 +61,8 @@
QT_BEGIN_NAMESPACE
+using namespace QMakeInternal;
+
bool MakefileGenerator::canExecute(const QStringList &cmdline, int *a) const
{
int argv0 = -1;
@@ -73,7 +75,7 @@ bool MakefileGenerator::canExecute(const QStringList &cmdline, int *a) const
if(a)
*a = argv0;
if(argv0 != -1) {
- const QString c = Option::fixPathToLocalOS(cmdline.at(argv0), true);
+ const QString c = Option::normalizePath(cmdline.at(argv0));
if(exists(c))
return true;
}
@@ -88,7 +90,7 @@ QString MakefileGenerator::mkdir_p_asstring(const QString &dir, bool escape) con
bool MakefileGenerator::mkdir(const QString &in_path) const
{
- QString path = Option::fixPathToLocalOS(in_path);
+ QString path = Option::normalizePath(in_path);
if(QFile::exists(path))
return true;
@@ -210,9 +212,9 @@ MakefileGenerator::initOutPaths()
for (ProStringList::Iterator input = inputs.begin(); input != inputs.end(); ++input) {
QString finp = fileFixify((*input).toQString(), Option::output_dir, Option::output_dir);
*input = ProString(finp);
- QString path = unescapeFilePath(replaceExtraCompilerVariables(tmp_out, finp, QString()));
- path = Option::fixPathToTargetOS(path);
- int slash = path.lastIndexOf(Option::dir_sep);
+ QString path = replaceExtraCompilerVariables(tmp_out, finp, QString(), NoShell);
+ path = Option::normalizePath(path);
+ int slash = path.lastIndexOf('/');
if(slash != -1) {
path = path.left(slash);
// Make out path only if it does not contain makefile variables
@@ -228,7 +230,7 @@ MakefileGenerator::initOutPaths()
if(!v["DESTDIR"].isEmpty()) {
QDir d(v["DESTDIR"].first().toQString());
- if(Option::fixPathToLocalOS(d.absolutePath()) == Option::fixPathToLocalOS(Option::output_dir))
+ if (Option::normalizePath(d.absolutePath()) == Option::normalizePath(Option::output_dir))
v.remove("DESTDIR");
}
}
@@ -275,8 +277,6 @@ MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString
}
if(!(flags & VPATH_NoFixify))
file = fileFixify(file, qmake_getpwd(), Option::output_dir);
- if (file.at(0) == '\"' && file.at(file.length() - 1) == '\"')
- file = file.mid(1, file.length() - 2);
if(exists(file)) {
++val_it;
@@ -293,8 +293,8 @@ MakefileGenerator::findFilesInVPATH(ProStringList l, uchar flags, const QString
}
for (ProStringList::Iterator vpath_it = vpath.begin();
vpath_it != vpath.end(); ++vpath_it) {
- QString real_dir = Option::fixPathToLocalOS((*vpath_it).toQString());
- if(exists(real_dir + QDir::separator() + val)) {
+ QString real_dir = Option::normalizePath((*vpath_it).toQString());
+ if (exists(real_dir + '/' + val)) {
ProString dir = (*vpath_it);
if(!dir.endsWith(Option::dir_sep))
dir += Option::dir_sep;
@@ -725,10 +725,9 @@ MakefileGenerator::init()
if((*input).isEmpty())
continue;
QString inpf = (*input).toQString();
- QString in = Option::fixPathToTargetOS(inpf, false);
- if (!verifyExtraCompiler((*it).toQString(), in)) //verify
+ if (!verifyExtraCompiler((*it).toQString(), inpf)) //verify
continue;
- QString out = replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString());
+ QString out = replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString(), NoShell);
out = fileFixify(out, Option::output_dir, Option::output_dir);
bool pre_dep = (config.indexOf("target_predeps") != -1);
if (v.contains(vokey)) {
@@ -772,7 +771,7 @@ MakefileGenerator::init()
incDirs += v["INCLUDEPATH"];
QList<QMakeLocalFileName> deplist;
for (ProStringList::Iterator it = incDirs.begin(); it != incDirs.end(); ++it)
- deplist.append(QMakeLocalFileName(unescapeFilePath((*it).toQString())));
+ deplist.append(QMakeLocalFileName((*it).toQString()));
QMakeSourceFileInfo::setDependencyPaths(deplist);
debug_msg(1, "Dependency Directories: %s", incDirs.join(" :: ").toLatin1().constData());
//cache info
@@ -818,7 +817,7 @@ MakefileGenerator::init()
if(!project->isEmpty("TRANSLATIONS")) {
ProStringList &trf = project->values("TRANSLATIONS");
for (ProStringList::Iterator it = trf.begin(); it != trf.end(); ++it)
- (*it) = Option::fixPathToLocalOS((*it).toQString());
+ (*it) = Option::fixPathToTargetOS((*it).toQString());
}
//fix up the target deps
@@ -827,7 +826,7 @@ MakefileGenerator::init()
ProStringList &l = v[fixpaths[path]];
for (ProStringList::Iterator val_it = l.begin(); val_it != l.end(); ++val_it) {
if(!(*val_it).isEmpty())
- (*val_it) = escapeDependencyPath(Option::fixPathToTargetOS((*val_it).toQString(), false, false));
+ (*val_it) = Option::fixPathToTargetOS((*val_it).toQString(), false, false);
}
}
@@ -844,9 +843,9 @@ MakefileGenerator::init()
if (exists(dep)) {
out_deps.append(dep);
} else {
- QString dir, regex = Option::fixPathToLocalOS(dep);
- if(regex.lastIndexOf(Option::dir_sep) != -1) {
- dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1);
+ QString dir, regex = Option::normalizePath(dep);
+ if (regex.lastIndexOf('/') != -1) {
+ dir = regex.left(regex.lastIndexOf('/') + 1);
regex.remove(0, dir.length());
}
QStringList files = QDir(dir).entryList(QStringList(regex));
@@ -885,7 +884,7 @@ MakefileGenerator::processPrlFile(QString &file)
meta_file = tmp;
}
// meta_file = fileFixify(meta_file);
- QString real_meta_file = Option::fixPathToLocalOS(meta_file);
+ QString real_meta_file = Option::normalizePath(meta_file);
if(!meta_file.isEmpty()) {
QString f = fileFixify(real_meta_file, qmake_getpwd(), Option::output_dir);
if(QMakeMetaInfo::libExists(f)) {
@@ -905,7 +904,7 @@ MakefileGenerator::processPrlFile(QString &file)
defs.append(def);
if(try_replace_file && !libinfo.isEmpty("QMAKE_PRL_TARGET")) {
QString dir;
- int slsh = real_meta_file.lastIndexOf(Option::dir_sep);
+ int slsh = real_meta_file.lastIndexOf('/');
if(slsh != -1)
dir = real_meta_file.left(slsh+1);
file = libinfo.first("QMAKE_PRL_TARGET").toQString();
@@ -1052,9 +1051,9 @@ MakefileGenerator::writeProjectMakefile()
writeSubTargets(t, targets, SubTargetsNoFlags);
if(!project->isActiveConfig("no_autoqmake")) {
+ QString mkf = escapeDependencyPath(fileFixify(Option::output.fileName()));
for(QList<SubTarget*>::Iterator it = targets.begin(); it != targets.end(); ++it)
- t << (*it)->makefile << ": " <<
- Option::fixPathToTargetOS(fileFixify(Option::output.fileName())) << endl;
+ t << escapeDependencyPath((*it)->makefile) << ": " << mkf << endl;
}
qDeleteAll(targets);
return true;
@@ -1102,7 +1101,7 @@ MakefileGenerator::prlFileName(bool fixify)
if(fixify) {
if(!project->isEmpty("DESTDIR"))
ret.prepend(project->first("DESTDIR").toQString());
- ret = Option::fixPathToLocalOS(fileFixify(ret, qmake_getpwd(), Option::output_dir));
+ ret = fileFixify(ret, qmake_getpwd(), Option::output_dir);
}
return ret;
}
@@ -1206,7 +1205,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild)
QString dst;
if (installConfigValues.indexOf("no_path") == -1 &&
installConfigValues.indexOf("dummy_install") == -1) {
- dst = fileFixify(unescapeFilePath(project->first(pvar).toQString()), FileFixifyAbsolute, false);
+ dst = fileFixify(project->first(pvar).toQString(), FileFixifyAbsolute, false);
if(!dst.endsWith(Option::dir_sep))
dst += Option::dir_sep;
}
@@ -1294,7 +1293,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild)
uninst.append(rm_dir_contents + " " + escapeFilePath(filePrefixRoot(root, fileFixify(dst_dir + filestr, FileFixifyAbsolute, false))));
continue;
}
- QString local_dirstr = Option::fixPathToLocalOS(dirstr, true);
+ QString local_dirstr = Option::normalizePath(dirstr);
QStringList files = QDir(local_dirstr).entryList(QStringList(filestr),
QDir::NoDotAndDotDot | QDir::AllEntries);
if (installConfigValues.contains("no_check_exist") && files.isEmpty()) {
@@ -1373,7 +1372,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild)
t << "uninstall_" << (*it) << ": FORCE";
for (int i = uninst.size(); --i >= 0; )
t << "\n\t" << uninst.at(i);
- t << "\n\t-$(DEL_DIR) " << filePrefixRoot(root, dst) << " \n\n";
+ t << "\n\t-$(DEL_DIR) " << escapeFilePath(filePrefixRoot(root, dst)) << " \n\n";
}
t << endl;
@@ -1386,8 +1385,8 @@ MakefileGenerator::writeInstalls(QTextStream &t, bool noBuild)
debug_msg(1, "no definition for install %s: install target not created",(*it).toLatin1().constData());
}
}
- t << "install: " << var("INSTALLDEPS") << " " << all_installs
- << " FORCE\n\nuninstall: " << all_uninstalls << " " << var("UNINSTALLDEPS")
+ t << "install:" << depVar("INSTALLDEPS") << ' ' << all_installs
+ << " FORCE\n\nuninstall: " << all_uninstalls << depVar("UNINSTALLDEPS")
<< " FORCE\n\n";
}
@@ -1398,6 +1397,24 @@ MakefileGenerator::var(const ProKey &var) const
}
QString
+MakefileGenerator::fileVar(const ProKey &var) const
+{
+ return val(escapeFilePaths(project->values(var)));
+}
+
+QString
+MakefileGenerator::fileVarList(const ProKey &var) const
+{
+ return valList(escapeFilePaths(project->values(var)));
+}
+
+QString
+MakefileGenerator::depVar(const ProKey &var) const
+{
+ return val(escapeDependencyPaths(project->values(var)));
+}
+
+QString
MakefileGenerator::val(const ProStringList &varList) const
{
return valGlue(varList, "", " ", "");
@@ -1416,6 +1433,12 @@ MakefileGenerator::varGlue(const ProKey &var, const QString &before, const QStri
}
QString
+MakefileGenerator::fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const
+{
+ return valGlue(escapeFilePaths(project->values(var)), before, glue, after);
+}
+
+QString
MakefileGenerator::fixFileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const
{
ProStringList varList;
@@ -1480,12 +1503,11 @@ MakefileGenerator::createObjectList(const ProStringList &sources)
objdir = project->first("OBJECTS_DIR").toQString();
for (ProStringList::ConstIterator it = sources.begin(); it != sources.end(); ++it) {
QString sfn = (*it).toQString();
- QFileInfo fi(fileInfo(Option::fixPathToLocalOS(sfn)));
+ QFileInfo fi(fileInfo(Option::normalizePath(sfn)));
QString dir;
if (project->isActiveConfig("object_parallel_to_source")) {
// The source paths are relative to the output dir, but we need source-relative paths
QString sourceRelativePath = fileFixify(sfn, qmake_getpwd(), Option::output_dir);
- sourceRelativePath = Option::fixPathToTargetOS(sourceRelativePath, false);
if (sourceRelativePath.startsWith(".." + Option::dir_sep))
sourceRelativePath = fileFixify(sourceRelativePath, FileFixifyAbsolute);
@@ -1513,7 +1535,8 @@ MakefileGenerator::createObjectList(const ProStringList &sources)
return ret;
}
-ReplaceExtraCompilerCacheKey::ReplaceExtraCompilerCacheKey(const QString &v, const QStringList &i, const QStringList &o)
+ReplaceExtraCompilerCacheKey::ReplaceExtraCompilerCacheKey(
+ const QString &v, const QStringList &i, const QStringList &o, MakefileGenerator::ReplaceFor s)
{
static QString doubleColon = QLatin1String("::");
@@ -1530,11 +1553,13 @@ ReplaceExtraCompilerCacheKey::ReplaceExtraCompilerCacheKey(const QString &v, con
ol.sort();
out = ol.join(doubleColon);
}
+ forShell = s;
}
bool ReplaceExtraCompilerCacheKey::operator==(const ReplaceExtraCompilerCacheKey &f) const
{
return (hashCode() == f.hashCode() &&
+ f.forShell == forShell &&
f.in == in &&
f.out == out &&
f.var == var &&
@@ -1543,10 +1568,11 @@ bool ReplaceExtraCompilerCacheKey::operator==(const ReplaceExtraCompilerCacheKey
QString
-MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const QStringList &in, const QStringList &out)
+MakefileGenerator::replaceExtraCompilerVariables(
+ const QString &orig_var, const QStringList &in, const QStringList &out, ReplaceFor forShell)
{
//lazy cache
- ReplaceExtraCompilerCacheKey cacheKey(orig_var, in, out);
+ ReplaceExtraCompilerCacheKey cacheKey(orig_var, in, out, forShell);
QString cacheVal = extraCompilerVariablesCache.value(cacheKey);
if(!cacheVal.isNull())
return cacheVal;
@@ -1576,7 +1602,7 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const
} else if(var == QLatin1String("QMAKE_FILE_BASE") || var == QLatin1String("QMAKE_FILE_IN_BASE")) {
//filePath = true;
for(int i = 0; i < in.size(); ++i) {
- QFileInfo fi(fileInfo(Option::fixPathToLocalOS(in.at(i))));
+ QFileInfo fi(fileInfo(Option::normalizePath(in.at(i))));
QString base = fi.completeBaseName();
if(base.isNull())
base = fi.fileName();
@@ -1585,7 +1611,7 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const
} else if(var == QLatin1String("QMAKE_FILE_EXT")) {
filePath = true;
for(int i = 0; i < in.size(); ++i) {
- QFileInfo fi(fileInfo(Option::fixPathToLocalOS(in.at(i))));
+ QFileInfo fi(fileInfo(Option::normalizePath(in.at(i))));
QString ext;
// Ensure complementarity with QMAKE_FILE_BASE
int baseLen = fi.completeBaseName().length();
@@ -1598,11 +1624,11 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const
} else if(var == QLatin1String("QMAKE_FILE_PATH") || var == QLatin1String("QMAKE_FILE_IN_PATH")) {
filePath = true;
for(int i = 0; i < in.size(); ++i)
- val += fileInfo(Option::fixPathToLocalOS(in.at(i))).path();
+ val += fileInfo(Option::normalizePath(in.at(i))).path();
} else if(var == QLatin1String("QMAKE_FILE_NAME") || var == QLatin1String("QMAKE_FILE_IN")) {
filePath = true;
for(int i = 0; i < in.size(); ++i)
- val += fileInfo(Option::fixPathToLocalOS(in.at(i))).filePath();
+ val += fileInfo(Option::normalizePath(in.at(i))).filePath();
}
}
@@ -1614,11 +1640,11 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const
} else if(var == QLatin1String("QMAKE_FILE_OUT")) {
filePath = true;
for(int i = 0; i < out.size(); ++i)
- val += fileInfo(Option::fixPathToLocalOS(out.at(i))).filePath();
+ val += fileInfo(Option::normalizePath(out.at(i))).filePath();
} else if(var == QLatin1String("QMAKE_FILE_OUT_BASE")) {
//filePath = true;
for(int i = 0; i < out.size(); ++i) {
- QFileInfo fi(fileInfo(Option::fixPathToLocalOS(out.at(i))));
+ QFileInfo fi(fileInfo(Option::normalizePath(out.at(i))));
QString base = fi.completeBaseName();
if(base.isNull())
base = fi.fileName();
@@ -1633,12 +1659,14 @@ MakefileGenerator::replaceExtraCompilerVariables(const QString &orig_var, const
if(!val.isEmpty()) {
QString fullVal;
- if(filePath) {
+ if (filePath && forShell != NoShell) {
for(int i = 0; i < val.size(); ++i) {
- const QString file = Option::fixPathToTargetOS(unescapeFilePath(val.at(i)), false);
if(!fullVal.isEmpty())
fullVal += " ";
- fullVal += escapeFilePath(file);
+ if (forShell == LocalShell)
+ fullVal += IoUtils::shellQuote(Option::fixPathToLocalOS(val.at(i), false));
+ else
+ fullVal += escapeFilePath(Option::fixPathToTargetOS(val.at(i), false));
}
} else {
fullVal = val.join(' ');
@@ -1660,7 +1688,7 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil
{
if(noIO())
return false;
- const QString file = Option::fixPathToLocalOS(file_unfixed);
+ const QString file = Option::normalizePath(file_unfixed);
const ProStringList &config = project->values(ProKey(comp + ".CONFIG"));
if (config.indexOf("moc_verify") != -1) {
@@ -1702,10 +1730,10 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil
if((*input).isEmpty())
continue;
QString inpf = (*input).toQString();
- QString in = fileFixify(Option::fixPathToTargetOS(inpf, false));
+ QString in = fileFixify(inpf);
if(in == file) {
bool pass = project->test(verify.toKey(),
- QList<ProStringList>() << ProStringList(replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString())) <<
+ QList<ProStringList>() << ProStringList(replaceExtraCompilerVariables(tmp_out.toQString(), inpf, QString(), NoShell)) <<
ProStringList(file));
if(invert)
pass = !pass;
@@ -1723,7 +1751,7 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil
return false;
const QString tmp_cmd = project->values(ProKey(comp + ".commands")).join(' ');
if (config.indexOf("combine") != -1) {
- QString cmd = replaceExtraCompilerVariables(tmp_cmd, QString(), tmp_out);
+ QString cmd = replaceExtraCompilerVariables(tmp_cmd, QString(), tmp_out, LocalShell);
if(system(cmd.toLatin1().constData()))
return false;
} else {
@@ -1734,10 +1762,10 @@ MakefileGenerator::verifyExtraCompiler(const ProString &comp, const QString &fil
if((*input).isEmpty())
continue;
QString inpf = (*input).toQString();
- QString in = fileFixify(Option::fixPathToTargetOS(inpf, false));
+ QString in = fileFixify(inpf);
if(in == file) {
- QString out = replaceExtraCompilerVariables(tmp_out, inpf, QString());
- QString cmd = replaceExtraCompilerVariables(tmp_cmd, in, out);
+ QString out = replaceExtraCompilerVariables(tmp_out, inpf, QString(), NoShell);
+ QString cmd = replaceExtraCompilerVariables(tmp_cmd, in, out, LocalShell);
if(system(cmd.toLatin1().constData()))
return false;
break;
@@ -1802,8 +1830,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
for (ProStringList::ConstIterator it2 = comp_inputs.begin(); it2 != comp_inputs.end(); ++it2) {
const ProStringList &tmp = project->values((*it2).toKey());
for (ProStringList::ConstIterator input = tmp.begin(); input != tmp.end(); ++input) {
- QString in = Option::fixPathToTargetOS((*input).toQString(), false);
- if(verifyExtraCompiler((*it), in))
+ if (verifyExtraCompiler((*it), (*input).toQString()))
tmp_inputs.append((*input));
}
}
@@ -1814,16 +1841,19 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
if (config.indexOf("combine") != -1) {
// compilers with a combined input only have one output
QString input = project->first(ProKey(*it + ".output")).toQString();
- t << " " << escapeDependencyPath(Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, input, QString())));
+ t << ' ' << escapeDependencyPath(Option::fixPathToTargetOS(
+ replaceExtraCompilerVariables(tmp_out, input, QString(), NoShell)));
} else {
for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) {
- t << " " << escapeDependencyPath(Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, (*input).toQString(), QString())));
+ t << ' ' << escapeDependencyPath(Option::fixPathToTargetOS(
+ replaceExtraCompilerVariables(tmp_out, (*input).toQString(), QString(), NoShell)));
}
}
t << endl;
if (config.indexOf("no_clean") == -1) {
- QString tmp_clean = project->values(ProKey(*it + ".clean")).join(' ');
+ const ProStringList &raw_clean = project->values(ProKey(*it + ".clean"));
+ QString tmp_clean = escapeFilePaths(raw_clean).join(' ');
QString tmp_clean_cmds = project->values(ProKey(*it + ".clean_commands")).join(' ');
if(!tmp_inputs.isEmpty())
clean_targets += QString("compiler_" + (*it) + "_clean ");
@@ -1836,34 +1866,37 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
wrote_clean_cmds = true;
}
if(tmp_clean.isEmpty())
- tmp_clean = tmp_out;
+ tmp_clean = escapeFilePath(tmp_out);
if(tmp_clean.indexOf("${QMAKE_") == -1) {
t << "\n\t-$(DEL_FILE) " << tmp_clean;
wrote_clean = true;
}
if(!wrote_clean_cmds || !wrote_clean) {
- ProStringList cleans;
+ QStringList q_raw_clean = raw_clean.toQStringList();
+ QStringList cleans;
const QString del_statement("-$(DEL_FILE)");
if(!wrote_clean) {
- if(project->isActiveConfig("no_delete_multiple_files")) {
- for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) {
- QString tinp = (*input).toQString();
- cleans.append(" " + Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_clean, tinp,
- replaceExtraCompilerVariables(tmp_out, tinp, QString()))));
+ QStringList dels;
+ for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) {
+ QString tinp = (*input).toQString();
+ QString out = replaceExtraCompilerVariables(tmp_out, tinp, QString(), NoShell);
+ foreach (const QString &rc, q_raw_clean) {
+ dels << ' ' + escapeFilePath(Option::fixPathToTargetOS(
+ replaceExtraCompilerVariables(rc, tinp, out, NoShell), false));
}
+ }
+ if(project->isActiveConfig("no_delete_multiple_files")) {
+ cleans = dels;
} else {
- QString files, file;
+ QString files;
const int commandlineLimit = 2047; // NT limit, expanded
- for(int input = 0; input < tmp_inputs.size(); ++input) {
- QString tinp = tmp_inputs.at(input).toQString();
- file = " " + replaceExtraCompilerVariables(tmp_clean, tinp,
- replaceExtraCompilerVariables(tmp_out, tinp, QString()));
+ foreach (const QString &file, dels) {
if(del_statement.length() + files.length() +
qMax(fixEnvVariables(file).length(), file.length()) > commandlineLimit) {
cleans.append(files);
files.clear();
}
- files += Option::fixPathToTargetOS(file);
+ files += file;
}
if(!files.isEmpty())
cleans.append(files);
@@ -1875,7 +1908,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
for (ProStringList::ConstIterator input = tmp_inputs.begin(); input != tmp_inputs.end(); ++input) {
QString tinp = (*input).toQString();
t << "\n\t" << replaceExtraCompilerVariables(tmp_clean_cmds, tinp,
- replaceExtraCompilerVariables(tmp_out, tinp, QString()));
+ replaceExtraCompilerVariables(tmp_out, tinp, QString(), NoShell), TargetShell);
}
}
}
@@ -1897,7 +1930,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
inputs += Option::fixPathToTargetOS(inpf, false);
if(!tmp_dep_cmd.isEmpty() && doDepends()) {
char buff[256];
- QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, tmp_out);
+ QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, tmp_out, LocalShell);
dep_cmd = dep_cd_cmd + fixEnvVariables(dep_cmd);
if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) {
QString indeps;
@@ -1909,6 +1942,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
}
QT_PCLOSE(proc);
if(!indeps.isEmpty()) {
+ // ### This is basically fubar. Add 'lines' flag to CONFIG?
QStringList dep_cmd_deps = indeps.replace('\n', ' ').simplified().split(' ');
for(int i = 0; i < dep_cmd_deps.count(); ++i) {
QString &file = dep_cmd_deps[i];
@@ -1920,8 +1954,8 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
QList<QMakeLocalFileName> depdirs = QMakeSourceFileInfo::dependencyPaths();
for (QList<QMakeLocalFileName>::Iterator dit = depdirs.begin();
dit != depdirs.end(); ++dit) {
- if (exists((*dit).real() + Option::dir_sep + file)) {
- localFile = (*dit).local() + Option::dir_sep + file;
+ if (exists((*dit).local() + '/' + file)) {
+ localFile = (*dit).local() + '/' + file;
break;
}
}
@@ -1959,8 +1993,8 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
if (inputs.isEmpty())
continue;
- QString out = replaceExtraCompilerVariables(tmp_out, QString(), QString());
- QString cmd = replaceExtraCompilerVariables(tmp_cmd, escapeFilePaths(inputs), QStringList() << out);
+ QString out = replaceExtraCompilerVariables(tmp_out, QString(), QString(), NoShell);
+ QString cmd = replaceExtraCompilerVariables(tmp_cmd, inputs, QStringList() << out, TargetShell);
t << escapeDependencyPath(Option::fixPathToTargetOS(out)) << ":";
// compiler.CONFIG+=explicit_dependencies means that ONLY compiler.depends gets to cause Makefile dependencies
if (config.indexOf("explicit_dependencies") != -1) {
@@ -1975,20 +2009,20 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
QString inpf = (*input).toQString();
QString in = Option::fixPathToTargetOS(inpf, false);
QStringList deps = findDependencies(inpf);
- deps += escapeDependencyPath(in);
- QString out = unescapeFilePath(Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, inpf, QString())));
+ deps << in;
+ QString out = Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, inpf, QString(), NoShell));
if(!tmp_dep.isEmpty()) {
QStringList pre_deps = fileFixify(tmp_dep, Option::output_dir, Option::output_dir);
for(int i = 0; i < pre_deps.size(); ++i)
- deps += replaceExtraCompilerVariables(pre_deps.at(i), inpf, out);
+ deps << replaceExtraCompilerVariables(pre_deps.at(i), inpf, out, NoShell);
}
- QString cmd = replaceExtraCompilerVariables(tmp_cmd, inpf, out);
+ QString cmd = replaceExtraCompilerVariables(tmp_cmd, inpf, out, LocalShell);
// NOTE: The var -> QMAKE_COMP_var replace feature is unsupported, do not use!
for (ProStringList::ConstIterator it3 = vars.constBegin(); it3 != vars.constEnd(); ++it3)
cmd.replace("$(" + (*it3) + ")", "$(QMAKE_COMP_" + (*it3)+")");
if(!tmp_dep_cmd.isEmpty() && doDepends()) {
char buff[256];
- QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, out);
+ QString dep_cmd = replaceExtraCompilerVariables(tmp_dep_cmd, inpf, out, LocalShell);
dep_cmd = dep_cd_cmd + fixEnvVariables(dep_cmd);
if(FILE *proc = QT_POPEN(dep_cmd.toLatin1().constData(), "r")) {
QString indeps;
@@ -2000,6 +2034,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
}
QT_PCLOSE(proc);
if(!indeps.isEmpty()) {
+ // ### This is basically fubar. Add 'lines' flag to CONFIG?
QStringList dep_cmd_deps = indeps.replace('\n', ' ').simplified().split(' ');
for(int i = 0; i < dep_cmd_deps.count(); ++i) {
QString &file = dep_cmd_deps[i];
@@ -2011,8 +2046,8 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
QList<QMakeLocalFileName> depdirs = QMakeSourceFileInfo::dependencyPaths();
for (QList<QMakeLocalFileName>::Iterator dit = depdirs.begin();
dit != depdirs.end(); ++dit) {
- if (exists((*dit).real() + Option::dir_sep + file)) {
- localFile = (*dit).local() + Option::dir_sep + file;
+ if (exists((*dit).local() + '/' + file)) {
+ localFile = (*dit).local() + '/' + file;
break;
}
}
@@ -2077,7 +2112,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
}
for(int i = 0; i < deps.size(); ) {
QString &dep = deps[i];
- dep = Option::fixPathToTargetOS(unescapeFilePath(dep), false);
+ dep = Option::fixPathToTargetOS(dep, false);
if(out == dep)
deps.removeAt(i);
else
@@ -2216,7 +2251,7 @@ QString MakefileGenerator::build_args(const QString &outdir)
ret += buildArgs();
//output
- QString ofile = Option::fixPathToTargetOS(fileFixify(Option::output.fileName()));
+ QString ofile = fileFixify(Option::output.fileName());
if(!ofile.isEmpty() && ofile != project->first("QMAKE_MAKEFILE"))
ret += " -o " + escapeFilePath(ofile);
@@ -2241,7 +2276,7 @@ MakefileGenerator::writeHeader(QTextStream &t)
QString ofile = Option::fixPathToTargetOS(Option::output.fileName());
if (ofile.lastIndexOf(Option::dir_sep) != -1)
ofile.remove(0, ofile.lastIndexOf(Option::dir_sep) +1);
- t << "MAKEFILE = " << ofile << endl << endl;
+ t << "MAKEFILE = " << escapeFilePath(ofile) << endl << endl;
}
QList<MakefileGenerator::SubTarget*>
@@ -2324,7 +2359,7 @@ MakefileGenerator::findSubDirsSubTargets() const
if (!project->isEmpty(dtkey)) {
st->depends += project->first(dtkey);
} else {
- QString d = Option::fixPathToLocalOS(subName);
+ QString d = Option::fixPathToTargetOS(subName);
const ProKey dfkey(fixedSubDep + ".file");
if (!project->isEmpty(dfkey)) {
d = project->first(dfkey).toQString();
@@ -2431,8 +2466,8 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT
out_directory = Option::output_dir + out_directory.mid(abs_source_path.length());
QString out_directory_cdin = out_directory.isEmpty() ? "\n\t"
- : "\n\tcd " + out_directory + " && ";
- QString makefilein = " -f " + subtarget->makefile;
+ : "\n\tcd " + escapeFilePath(out_directory) + " && ";
+ QString makefilein = " -f " + escapeFilePath(subtarget->makefile);
//qmake it
QString out;
@@ -2442,6 +2477,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT
in = escapeFilePath(fileFixify(in_directory + subtarget->profile, FileFixifyAbsolute));
if(out.startsWith(in_directory))
out = out.mid(in_directory.length());
+ out = escapeFilePath(out);
t << subtarget->target << "-qmake_all: ";
if (flags & SubTargetOrdered) {
if (target)
@@ -2535,18 +2571,18 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT
t << " " << targetRule;
}
if(suffix == "all" || suffix == "make_first")
- t << varGlue("ALL_DEPS"," "," ","");
+ t << depVar("ALL_DEPS");
if(suffix == "clean")
- t << varGlue("CLEAN_DEPS"," "," ","");
+ t << depVar("CLEAN_DEPS");
else if (suffix == "distclean")
- t << varGlue("DISTCLEAN_DEPS"," "," ","");
+ t << depVar("DISTCLEAN_DEPS");
t << " FORCE\n";
if(suffix == "clean") {
t << fixFileVarGlue("QMAKE_CLEAN", "\t-$(DEL_FILE) ", "\n\t-$(DEL_FILE) ", "\n");
} else if(suffix == "distclean") {
- QString ofile = Option::fixPathToTargetOS(fileFixify(Option::output.fileName()));
+ QString ofile = fileFixify(Option::output.fileName());
if(!ofile.isEmpty())
- t << "\t-$(DEL_FILE) " << ofile << endl;
+ t << "\t-$(DEL_FILE) " << escapeFilePath(ofile) << endl;
t << fixFileVarGlue("QMAKE_DISTCLEAN", "\t-$(DEL_FILE) ", " ", "\n");
}
}
@@ -2566,7 +2602,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT
QString dep = var(ProKey(*dep_it + ".target"));
if(dep.isEmpty())
dep = Option::fixPathToTargetOS((*dep_it).toQString(), false);
- deps += " " + dep;
+ deps += ' ' + escapeDependencyPath(dep);
}
if (config.indexOf("recursive") != -1) {
QSet<QString> recurse;
@@ -2592,8 +2628,8 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT
continue;
QString out_directory_cdin = out_directory.isEmpty() ? "\n\t"
- : "\n\tcd " + out_directory + " && ";
- QString makefilein = " -f " + subtarget->makefile;
+ : "\n\tcd " + escapeFilePath(out_directory) + " && ";
+ QString makefilein = " -f " + escapeFilePath(subtarget->makefile);
QString out;
QString in;
@@ -2602,6 +2638,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT
in = escapeFilePath(fileFixify(in_directory + subtarget->profile, FileFixifyAbsolute));
if (out.startsWith(in_directory))
out = out.mid(in_directory.length());
+ out = escapeFilePath(out);
}
//write the rule/depends
@@ -2647,16 +2684,16 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT
void
MakefileGenerator::writeMakeQmake(QTextStream &t, bool noDummyQmakeAll)
{
- QString ofile = Option::fixPathToTargetOS(fileFixify(Option::output.fileName()));
+ QString ofile = fileFixify(Option::output.fileName());
if(project->isEmpty("QMAKE_FAILED_REQUIREMENTS") && !project->isEmpty("QMAKE_INTERNAL_PRL_FILE")) {
- QStringList files = fileFixify(Option::mkfile::project_files);
+ QStringList files = escapeFilePaths(fileFixify(Option::mkfile::project_files));
t << escapeDependencyPath(project->first("QMAKE_INTERNAL_PRL_FILE").toQString()) << ": \n\t"
<< "@$(QMAKE) -prl " << buildArgs() << " " << files.join(' ') << endl;
}
QString qmake = build_args();
if(!ofile.isEmpty() && !project->isActiveConfig("no_autoqmake")) {
- t << escapeFilePath(ofile) << ": "
+ t << escapeDependencyPath(ofile) << ": "
<< escapeDependencyPath(fileFixify(project->projectFile())) << " ";
if (Option::globals->do_cache) {
if (!project->confFile().isEmpty())
@@ -2665,11 +2702,11 @@ MakefileGenerator::writeMakeQmake(QTextStream &t, bool noDummyQmakeAll)
t << escapeDependencyPath(fileFixify(project->cacheFile())) << " ";
}
if(!specdir().isEmpty()) {
- if(exists(Option::fixPathToLocalOS(specdir()+QDir::separator()+"qmake.conf")))
+ if (exists(Option::normalizePath(specdir() + "/qmake.conf")))
t << escapeDependencyPath(specdir() + Option::dir_sep + "qmake.conf") << " ";
}
- const ProStringList &included = project->values("QMAKE_INTERNAL_INCLUDED_FILES");
- t << escapeDependencyPaths(included).join(" \\\n\t\t") << "\n\t"
+ const ProStringList &included = escapeDependencyPaths(project->values("QMAKE_INTERNAL_INCLUDED_FILES"));
+ t << included.join(" \\\n\t\t") << "\n\t"
<< qmake << endl;
for(int include = 0; include < included.size(); ++include) {
const ProString &i = included.at(include);
@@ -2704,19 +2741,22 @@ MakefileGenerator::fileInfo(QString file) const
return fi;
}
-QString
-MakefileGenerator::unescapeFilePath(const QString &path) const
+ProStringList
+MakefileGenerator::fixLibFlags(const ProKey &var)
{
- QString ret = path;
- ret.replace(QLatin1String("\\ "), QLatin1String(" "));
- ret.remove(QLatin1Char('\"'));
+ ProStringList in = project->values(var);
+ ProStringList ret;
+
+ ret.reserve(in.length());
+ foreach (const ProString &v, in)
+ ret << fixLibFlag(v);
return ret;
}
-ProString
-MakefileGenerator::unescapeFilePath(const ProString &path) const
+ProString MakefileGenerator::fixLibFlag(const ProString &)
{
- return ProString(unescapeFilePath(path.toQString()));
+ qFatal("MakefileGenerator::fixLibFlag() called");
+ return ProString();
}
ProString
@@ -2743,6 +2783,12 @@ MakefileGenerator::escapeFilePaths(const ProStringList &paths) const
return ret;
}
+ProString
+MakefileGenerator::escapeDependencyPath(const ProString &path) const
+{
+ return ProString(escapeDependencyPath(path.toQString()));
+}
+
QStringList
MakefileGenerator::escapeDependencyPaths(const QStringList &paths) const
{
@@ -2762,24 +2808,6 @@ MakefileGenerator::escapeDependencyPaths(const ProStringList &paths) const
}
QStringList
-MakefileGenerator::unescapeFilePaths(const QStringList &paths) const
-{
- QStringList ret;
- for(int i = 0; i < paths.size(); ++i)
- ret.append(unescapeFilePath(paths.at(i)));
- return ret;
-}
-
-ProStringList
-MakefileGenerator::unescapeFilePaths(const ProStringList &paths) const
-{
- ProStringList ret;
- for (int i = 0; i < paths.size(); ++i)
- ret.append(unescapeFilePath(paths.at(i)));
- return ret;
-}
-
-QStringList
MakefileGenerator::fileFixify(const QStringList& files, const QString &out_dir, const QString &in_dir,
FileFixifyType fix, bool canon) const
{
@@ -2799,7 +2827,7 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q
{
if(file.isEmpty())
return file;
- QString ret = unescapeFilePath(file);
+ QString ret = file;
//do the fixin'
QString orig_file = ret;
@@ -2829,7 +2857,7 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q
out_dir = out_fi.canonicalFilePath();
}
- QString qfile(Option::fixPathToLocalOS(ret, true, canon));
+ QString qfile(Option::normalizePath(ret));
QFileInfo qfileinfo(fileInfo(qfile));
if(out_dir != in_dir || !qfileinfo.isRelative()) {
if(qfileinfo.isRelative()) {
@@ -2958,7 +2986,7 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca
}
}
{ //is it from an EXTRA_TARGET
- const QString dep_basename = dep.local().section(Option::dir_sep, -1);
+ const QString dep_basename = dep.local().section('/', -1);
const ProStringList &qut = project->values("QMAKE_EXTRA_TARGETS");
for (ProStringList::ConstIterator it = qut.begin(); it != qut.end(); ++it) {
QString targ = var(ProKey(*it + ".target"));
@@ -2972,7 +3000,7 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca
}
}
{ //is it from an EXTRA_COMPILER
- const QString dep_basename = dep.local().section(Option::dir_sep, -1);
+ const QString dep_basename = dep.local().section('/', -1);
const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS");
for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) {
const ProString &tmp_out = project->first(ProKey(*it + ".output"));
@@ -2982,8 +3010,8 @@ MakefileGenerator::findFileForDep(const QMakeLocalFileName &dep, const QMakeLoca
for (ProStringList::ConstIterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) {
const ProStringList &inputs = project->values((*it2).toKey());
for (ProStringList::ConstIterator input = inputs.begin(); input != inputs.end(); ++input) {
- QString out = Option::fixPathToTargetOS(unescapeFilePath(
- replaceExtraCompilerVariables(tmp_out.toQString(), (*input).toQString(), QString())));
+ QString out = Option::fixPathToTargetOS(
+ replaceExtraCompilerVariables(tmp_out.toQString(), (*input).toQString(), QString(), NoShell));
if (out == dep.real() || out.section(Option::dir_sep, -1) == dep_basename) {
ret = QMakeLocalFileName(fileFixify(out, qmake_getpwd(), Option::output_dir));
goto found_dep_from_heuristic;
@@ -3102,7 +3130,7 @@ MakefileGenerator::pkgConfigFileName(bool fixify)
if(fixify) {
if(QDir::isRelativePath(ret) && !project->isEmpty("DESTDIR"))
ret.prepend(project->first("DESTDIR").toQString());
- ret = Option::fixPathToLocalOS(fileFixify(ret, qmake_getpwd(), Option::output_dir));
+ ret = fileFixify(ret, qmake_getpwd(), Option::output_dir);
}
return ret;
}
@@ -3213,9 +3241,9 @@ MakefileGenerator::writePkgConfigFile()
}
ProString bundle;
if (!project->isEmpty("QMAKE_FRAMEWORK_BUNDLE_NAME"))
- bundle = unescapeFilePath(project->first("QMAKE_FRAMEWORK_BUNDLE_NAME"));
+ bundle = project->first("QMAKE_FRAMEWORK_BUNDLE_NAME");
else
- bundle = unescapeFilePath(project->first("TARGET"));
+ bundle = project->first("TARGET");
int suffix = bundle.lastIndexOf(".framework");
if (suffix != -1)
bundle = bundle.left(suffix);
@@ -3223,11 +3251,11 @@ MakefileGenerator::writePkgConfigFile()
} else {
if (!project->values("QMAKE_DEFAULT_LIBDIRS").contains(libDir))
t << "-L${libdir} ";
- pkgConfiglibName = "-l" + unescapeFilePath(project->first("QMAKE_ORIG_TARGET"));
+ pkgConfiglibName = "-l" + project->first("QMAKE_ORIG_TARGET");
if (project->isActiveConfig("shared"))
pkgConfiglibName += project->first("TARGET_VERSION_EXT").toQString();
}
- t << pkgConfiglibName << " \n";
+ t << shellQuote(pkgConfiglibName) << " \n";
ProStringList libs;
if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS")) {
@@ -3239,7 +3267,7 @@ MakefileGenerator::writePkgConfigFile()
libs << "QMAKE_LFLAGS_THREAD"; //not sure about this one, but what about things like -pthread?
t << "Libs.private: ";
for (ProStringList::ConstIterator it = libs.begin(); it != libs.end(); ++it) {
- t << project->values((*it).toKey()).join(' ') << " ";
+ t << fixLibFlags((*it).toKey()).join(' ') << ' ';
}
t << endl;
@@ -3277,7 +3305,7 @@ QString MakefileGenerator::installMetaFile(const ProKey &replace_rule, const QSt
QString ret;
if (project->isEmpty(replace_rule)
|| project->isActiveConfig("no_sed_meta_install")) {
- ret += "-$(INSTALL_FILE) \"" + src + "\" \"" + dst + "\"";
+ ret += "-$(INSTALL_FILE) " + escapeFilePath(src) + ' ' + escapeFilePath(dst);
} else {
ret += "-$(SED)";
const ProStringList &replace_rules = project->values(replace_rule);
@@ -3291,7 +3319,7 @@ QString MakefileGenerator::installMetaFile(const ProKey &replace_rule, const QSt
+ "," + windowsifyPath(replace.toQString()) + ",gi");
}
}
- ret += " \"" + src + "\" >\"" + dst + "\"";
+ ret += ' ' + escapeFilePath(src) + " > " + escapeFilePath(dst);
}
return ret;
}
diff --git a/qmake/generators/makefile.h b/qmake/generators/makefile.h
index 2753a15e1c..7282d3ad1f 100644
--- a/qmake/generators/makefile.h
+++ b/qmake/generators/makefile.h
@@ -52,20 +52,6 @@ QT_BEGIN_NAMESPACE
#define QT_PCLOSE pclose
#endif
-struct ReplaceExtraCompilerCacheKey
-{
- mutable uint hash;
- QString var, in, out, pwd;
- ReplaceExtraCompilerCacheKey(const QString &v, const QStringList &i, const QStringList &o);
- bool operator==(const ReplaceExtraCompilerCacheKey &f) const;
- inline uint hashCode() const {
- if(!hash)
- hash = qHash(var) ^ qHash(in) ^ qHash(out) /*^ qHash(pwd)*/;
- return hash;
- }
-};
-inline uint qHash(const ReplaceExtraCompilerCacheKey &f) { return f.hashCode(); }
-
struct ReplaceExtraCompilerCacheKey;
class MakefileGenerator : protected QMakeSourceFileInfo
@@ -81,6 +67,10 @@ class MakefileGenerator : protected QMakeSourceFileInfo
mutable QHash<QString, QStringList> dependsCache;
mutable QHash<ReplaceExtraCompilerCacheKey, QString> extraCompilerVariablesCache;
+public:
+ // We can't make it visible to VCFilter in VS2008 except by making it public or directly friending it.
+ enum ReplaceFor { NoShell, LocalShell, TargetShell };
+
protected:
enum TARG_MODE { TARG_UNIX_MODE, TARG_MAC_MODE, TARG_WIN_MODE } target_mode;
@@ -132,9 +122,9 @@ protected:
//extra compiler interface
bool verifyExtraCompiler(const ProString &c, const QString &f);
- virtual QString replaceExtraCompilerVariables(const QString &, const QStringList &, const QStringList &);
- inline QString replaceExtraCompilerVariables(const QString &val, const QString &in, const QString &out)
- { return replaceExtraCompilerVariables(val, QStringList(in), QStringList(out)); }
+ virtual QString replaceExtraCompilerVariables(const QString &, const QStringList &, const QStringList &, ReplaceFor forShell);
+ inline QString replaceExtraCompilerVariables(const QString &val, const QString &in, const QString &out, ReplaceFor forShell)
+ { return replaceExtraCompilerVariables(val, QStringList(in), QStringList(out), forShell); }
//interface to the source file info
QMakeLocalFileName fixPathForFile(const QMakeLocalFileName &, bool);
@@ -143,15 +133,12 @@ protected:
QMakeProject *project;
//escape
- virtual QString unescapeFilePath(const QString &path) const;
- ProString unescapeFilePath(const ProString &path) const;
- virtual QStringList unescapeFilePaths(const QStringList &path) const;
- ProStringList unescapeFilePaths(const ProStringList &path) const;
virtual QString escapeFilePath(const QString &path) const { return path; }
ProString escapeFilePath(const ProString &path) const;
QStringList escapeFilePaths(const QStringList &paths) const;
ProStringList escapeFilePaths(const ProStringList &paths) const;
virtual QString escapeDependencyPath(const QString &path) const { return escapeFilePath(path); }
+ ProString escapeDependencyPath(const ProString &path) const;
QStringList escapeDependencyPaths(const QStringList &paths) const;
ProStringList escapeDependencyPaths(const ProStringList &paths) const;
@@ -221,6 +208,10 @@ protected:
QString varGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const;
QString varList(const ProKey &var) const;
QString fixFileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const;
+ QString fileVarList(const ProKey &var) const;
+ QString fileVarGlue(const ProKey &var, const QString &before, const QString &glue, const QString &after) const;
+ QString fileVar(const ProKey &var) const;
+ QString depVar(const ProKey &var) const;
QString val(const ProStringList &varList) const;
QString val(const QStringList &varList) const;
QString valGlue(const QStringList &varList, const QString &before, const QString &glue, const QString &after) const;
@@ -230,6 +221,9 @@ protected:
QString filePrefixRoot(const QString &, const QString &);
+ ProStringList fixLibFlags(const ProKey &var);
+ virtual ProString fixLibFlag(const ProString &lib);
+
//file fixification to unify all file names into a single pattern
enum FileFixifyType { FileFixifyAbsolute, FileFixifyRelative, FileFixifyDefault };
QString fileFixify(const QString& file, const QString &out_dir=QString(),
@@ -281,6 +275,21 @@ inline bool MakefileGenerator::findLibraries()
inline MakefileGenerator::~MakefileGenerator()
{ }
+struct ReplaceExtraCompilerCacheKey
+{
+ mutable uint hash;
+ QString var, in, out, pwd;
+ MakefileGenerator::ReplaceFor forShell;
+ ReplaceExtraCompilerCacheKey(const QString &v, const QStringList &i, const QStringList &o, MakefileGenerator::ReplaceFor s);
+ bool operator==(const ReplaceExtraCompilerCacheKey &f) const;
+ inline uint hashCode() const {
+ if (!hash)
+ hash = (uint)forShell ^ qHash(var) ^ qHash(in) ^ qHash(out) /*^ qHash(pwd)*/;
+ return hash;
+ }
+};
+inline uint qHash(const ReplaceExtraCompilerCacheKey &f) { return f.hashCode(); }
+
QT_END_NAMESPACE
#endif // MAKEFILE_H
diff --git a/qmake/generators/makefiledeps.cpp b/qmake/generators/makefiledeps.cpp
index 9258c3df8d..79e017a560 100644
--- a/qmake/generators/makefiledeps.cpp
+++ b/qmake/generators/makefiledeps.cpp
@@ -77,7 +77,7 @@ const QString
&QMakeLocalFileName::local() const
{
if(!is_null && local_name.isNull())
- local_name = Option::fixPathToLocalOS(real_name, true);
+ local_name = Option::normalizePath(real_name);
return local_name;
}
diff --git a/qmake/generators/projectgenerator.cpp b/qmake/generators/projectgenerator.cpp
index fa2e65e647..bcda1dbf0c 100644
--- a/qmake/generators/projectgenerator.cpp
+++ b/qmake/generators/projectgenerator.cpp
@@ -308,7 +308,7 @@ ProjectGenerator::init()
for (ProStringList::ConstIterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) {
ProStringList &inputs = project->values((*it2).toKey());
for (ProStringList::Iterator input = inputs.begin(); input != inputs.end(); ++input) {
- QString path = replaceExtraCompilerVariables(tmp_out, (*input).toQString(), QString());
+ QString path = replaceExtraCompilerVariables(tmp_out, (*input).toQString(), QString(), NoShell);
path = fixPathToQmake(path).section('/', -1);
for(int i = 0; i < var_out.size(); ++i) {
ProString v = var_out.at(i);
diff --git a/qmake/generators/unix/unixmake.cpp b/qmake/generators/unix/unixmake.cpp
index b4bc49438e..3a76d898ed 100644
--- a/qmake/generators/unix/unixmake.cpp
+++ b/qmake/generators/unix/unixmake.cpp
@@ -75,8 +75,6 @@ UnixMakefileGenerator::init()
if(project->isEmpty("QMAKE_SYMBOLIC_LINK"))
project->values("QMAKE_SYMBOLIC_LINK").append("ln -f -s");
- if (!project->isEmpty("TARGET"))
- project->values("TARGET") = escapeFilePaths(project->values("TARGET"));
project->values("QMAKE_ORIG_TARGET") = project->values("TARGET");
//version handling
@@ -111,8 +109,8 @@ UnixMakefileGenerator::init()
}
project->values("QMAKE_ORIG_DESTDIR") = project->values("DESTDIR");
- project->values("QMAKE_LIBS") += escapeFilePaths(project->values("LIBS"));
- project->values("QMAKE_LIBS_PRIVATE") += escapeFilePaths(project->values("LIBS_PRIVATE"));
+ project->values("QMAKE_LIBS") += project->values("LIBS");
+ project->values("QMAKE_LIBS_PRIVATE") += project->values("LIBS_PRIVATE");
if((!project->isEmpty("QMAKE_LIB_FLAG") && !project->isActiveConfig("staticlib")) ||
(project->isActiveConfig("qt") && project->isActiveConfig("plugin"))) {
if(configs.indexOf("dll") == -1) configs.append("dll");
@@ -194,11 +192,13 @@ UnixMakefileGenerator::init()
pchBaseName += project->first("QMAKE_ORIG_TARGET").toQString();
// replace place holders
- pchFlags.replace("${QMAKE_PCH_INPUT}", project->first("PRECOMPILED_HEADER").toQString());
- pchFlags.replace("${QMAKE_PCH_OUTPUT_BASE}", pchBaseName);
+ pchFlags.replace("${QMAKE_PCH_INPUT}",
+ escapeFilePath(project->first("PRECOMPILED_HEADER").toQString()));
+ pchFlags.replace("${QMAKE_PCH_OUTPUT_BASE}", escapeFilePath(pchBaseName));
if (project->isActiveConfig("icc_pch_style")) {
// icc style
- pchFlags.replace("${QMAKE_PCH_OUTPUT}", pchBaseName + project->first("QMAKE_PCH_OUTPUT_EXT"));
+ pchFlags.replace("${QMAKE_PCH_OUTPUT}",
+ escapeFilePath(pchBaseName + project->first("QMAKE_PCH_OUTPUT_EXT")));
} else {
// gcc style (including clang_pch_style)
QString headerSuffix;
@@ -222,7 +222,8 @@ UnixMakefileGenerator::init()
}
if(!pchOutputFile.isEmpty()) {
- pchFlags.replace("${QMAKE_PCH_OUTPUT}", pchBaseName + pchOutputFile + headerSuffix);
+ pchFlags.replace("${QMAKE_PCH_OUTPUT}",
+ escapeFilePath(pchBaseName + pchOutputFile + headerSuffix));
}
}
@@ -253,15 +254,15 @@ UnixMakefileGenerator::init()
((project->isActiveConfig("build_pass") || project->isEmpty("BUILDS")))) {
ProString bundle;
if(project->isActiveConfig("bundle") && !project->isEmpty("QMAKE_BUNDLE_EXTENSION")) {
- bundle = unescapeFilePath(project->first("TARGET"));
+ bundle = project->first("TARGET");
if(!project->isEmpty("QMAKE_BUNDLE_NAME"))
- bundle = unescapeFilePath(project->first("QMAKE_BUNDLE_NAME"));
+ bundle = project->first("QMAKE_BUNDLE_NAME");
if(!bundle.endsWith(project->first("QMAKE_BUNDLE_EXTENSION")))
bundle += project->first("QMAKE_BUNDLE_EXTENSION");
} else if(project->first("TEMPLATE") == "app" && project->isActiveConfig("app_bundle")) {
- bundle = unescapeFilePath(project->first("TARGET"));
+ bundle = project->first("TARGET");
if(!project->isEmpty("QMAKE_APPLICATION_BUNDLE_NAME"))
- bundle = unescapeFilePath(project->first("QMAKE_APPLICATION_BUNDLE_NAME"));
+ bundle = project->first("QMAKE_APPLICATION_BUNDLE_NAME");
if(!bundle.endsWith(".app"))
bundle += ".app";
if(project->isEmpty("QMAKE_BUNDLE_LOCATION"))
@@ -271,10 +272,10 @@ UnixMakefileGenerator::init()
} else if(project->first("TEMPLATE") == "lib" && !project->isActiveConfig("staticlib") &&
((!project->isActiveConfig("plugin") && project->isActiveConfig("lib_bundle")) ||
(project->isActiveConfig("plugin") && project->isActiveConfig("plugin_bundle")))) {
- bundle = unescapeFilePath(project->first("TARGET"));
+ bundle = project->first("TARGET");
if(project->isActiveConfig("plugin")) {
if(!project->isEmpty("QMAKE_PLUGIN_BUNDLE_NAME"))
- bundle = unescapeFilePath(project->first("QMAKE_PLUGIN_BUNDLE_NAME"));
+ bundle = project->first("QMAKE_PLUGIN_BUNDLE_NAME");
if (project->isEmpty("QMAKE_BUNDLE_EXTENSION"))
project->values("QMAKE_BUNDLE_EXTENSION").append(".plugin");
if (!bundle.endsWith(project->first("QMAKE_BUNDLE_EXTENSION")))
@@ -283,7 +284,7 @@ UnixMakefileGenerator::init()
project->values("QMAKE_BUNDLE_LOCATION").append("Contents/MacOS");
} else {
if(!project->isEmpty("QMAKE_FRAMEWORK_BUNDLE_NAME"))
- bundle = unescapeFilePath(project->first("QMAKE_FRAMEWORK_BUNDLE_NAME"));
+ bundle = project->first("QMAKE_FRAMEWORK_BUNDLE_NAME");
if (project->isEmpty("QMAKE_BUNDLE_EXTENSION"))
project->values("QMAKE_BUNDLE_EXTENSION").append(".framework");
if (!bundle.endsWith(project->first("QMAKE_BUNDLE_EXTENSION")))
@@ -354,7 +355,7 @@ UnixMakefileGenerator::init()
if(QDir::isRelativePath(rpath))
rpath.prepend(Option::output_dir + Option::dir_sep);
}
- comp_flags += " -rpath " + Option::fixPathToTargetOS(rpath, false);
+ comp_flags += " -rpath " + escapeFilePath(Option::fixPathToTargetOS(rpath, false));
}
}
}
@@ -439,6 +440,12 @@ QStringList
return ret;
}
+ProString
+UnixMakefileGenerator::fixLibFlag(const ProString &lib)
+{
+ return escapeFilePath(lib);
+}
+
bool
UnixMakefileGenerator::findLibraries()
{
@@ -465,7 +472,7 @@ UnixMakefileGenerator::findLibraries()
}
libdirs.insert(libidx++, f);
if (!libArg.isEmpty())
- *it = libArg + lib;
+ *it = libArg + f.real();
} else if(opt.startsWith("-l")) {
if (project->isActiveConfig("rvct_linker") || project->isActiveConfig("armcc_linker")) {
(*it) = "lib" + opt.mid(2) + ".so";
@@ -504,7 +511,7 @@ UnixMakefileGenerator::findLibraries()
for (ProStringList::Iterator extit = extens.begin(); extit != extens.end(); ++extit) {
if(dir.isNull()) {
for(QList<QMakeLocalFileName>::Iterator dep_it = libdirs.begin(); dep_it != libdirs.end(); ++dep_it) {
- QString pathToLib = ((*dep_it).local() + Option::dir_sep
+ QString pathToLib = ((*dep_it).local() + '/'
+ project->first("QMAKE_PREFIX_SHLIB")
+ stub + "." + (*extit));
if(exists(pathToLib)) {
@@ -524,7 +531,7 @@ UnixMakefileGenerator::findLibraries()
}
if(!found && project->isActiveConfig("compile_libtool")) {
for(int dep_i = 0; dep_i < libdirs.size(); ++dep_i) {
- if (exists(libdirs[dep_i].local() + Option::dir_sep + project->first("QMAKE_PREFIX_SHLIB") + stub + Option::libtool_ext)) {
+ if (exists(libdirs[dep_i].local() + '/' + project->first("QMAKE_PREFIX_SHLIB") + stub + Option::libtool_ext)) {
(*it) = libdirs[dep_i].real() + Option::dir_sep + project->first("QMAKE_PREFIX_SHLIB") + stub + Option::libtool_ext;
found = true;
break;
@@ -572,15 +579,15 @@ UnixMakefileGenerator::processPrlFiles()
for(int dep_i = 0; dep_i < libdirs.size(); ++dep_i) {
const QMakeLocalFileName &lfn = libdirs[dep_i];
if(!project->isActiveConfig("compile_libtool")) { //give them the .libs..
- QString la = lfn.local() + Option::dir_sep + project->first("QMAKE_PREFIX_SHLIB") + lib + Option::libtool_ext;
- if(exists(la) && QFile::exists(lfn.local() + Option::dir_sep + ".libs")) {
+ QString la = lfn.local() + '/' + project->first("QMAKE_PREFIX_SHLIB") + lib + Option::libtool_ext;
+ if (exists(la) && QFile::exists(lfn.local() + "/.libs")) {
QString dot_libs = lfn.real() + Option::dir_sep + ".libs";
l.append("-L" + dot_libs);
libdirs.insert(libidx++, QMakeLocalFileName(dot_libs));
}
}
- QString prl = lfn.local() + Option::dir_sep + project->first("QMAKE_PREFIX_SHLIB") + lib + prl_ext;
+ QString prl = lfn.local() + '/' + project->first("QMAKE_PREFIX_SHLIB") + lib + prl_ext;
if(processPrlFile(prl)) {
if(prl.startsWith(lfn.local()))
prl.replace(0, lfn.local().length(), lfn.real());
@@ -619,7 +626,7 @@ UnixMakefileGenerator::processPrlFiles()
ProStringList &prl_libs = project->values("QMAKE_CURRENT_PRL_LIBS");
if(!prl_libs.isEmpty()) {
for(int prl = 0; prl < prl_libs.size(); ++prl)
- l.insert(lit+prl+1, escapeFilePath(prl_libs.at(prl).toQString()));
+ l.insert(lit+prl+1, prl_libs.at(prl).toQString());
prl_libs.clear();
}
}
@@ -709,10 +716,9 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
const QString root = "$(INSTALL_ROOT)";
ProStringList &uninst = project->values(ProKey(t + ".uninstall"));
QString ret, destdir = project->first("DESTDIR").toQString();
- QString targetdir = Option::fixPathToTargetOS(project->first("target.path").toQString(), false);
if(!destdir.isEmpty() && destdir.right(1) != Option::dir_sep)
destdir += Option::dir_sep;
- targetdir = fileFixify(targetdir, FileFixifyAbsolute);
+ QString targetdir = fileFixify(project->first("target.path").toQString(), FileFixifyAbsolute);
if(targetdir.right(1) != Option::dir_sep)
targetdir += Option::dir_sep;
@@ -739,30 +745,31 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
}
for(int i = 0; i < targets.size(); ++i) {
QString src = targets.at(i).toQString(),
- dst = filePrefixRoot(root, targetdir + src.section('/', -1));
+ dst = escapeFilePath(filePrefixRoot(root, targetdir + src.section('/', -1)));
if(!ret.isEmpty())
ret += "\n\t";
- ret += "-$(INSTALL_FILE) \"" + src + "\" \"" + dst + "\"";
+ ret += "-$(INSTALL_FILE) " + escapeFilePath(src) + ' ' + dst;
if(!uninst.isEmpty())
uninst.append("\n\t");
- uninst.append("-$(DEL_FILE) \"" + dst + "\"");
+ uninst.append("-$(DEL_FILE) " + dst);
}
if (bundle == NoBundle && project->isActiveConfig("compile_libtool")) {
- QString src_targ = target;
+ QString src_targ = escapeFilePath(target);
if(src_targ == "$(TARGET)")
src_targ = "$(TARGETL)";
QString dst_dir = fileFixify(targetdir, FileFixifyAbsolute);
if(QDir::isRelativePath(dst_dir))
dst_dir = Option::fixPathToTargetOS(Option::output_dir + Option::dir_sep + dst_dir);
- ret = "-$(LIBTOOL) --mode=install cp \"" + src_targ + "\" \"" + filePrefixRoot(root, dst_dir) + "\"";
- uninst.append("-$(LIBTOOL) --mode=uninstall \"" + src_targ + "\"");
+ ret = "-$(LIBTOOL) --mode=install cp " + src_targ + ' ' + escapeFilePath(filePrefixRoot(root, dst_dir));
+ uninst.append("-$(LIBTOOL) --mode=uninstall " + src_targ);
} else {
QString src_targ = target;
if(!destdir.isEmpty())
src_targ = Option::fixPathToTargetOS(destdir + target, false);
QString plain_targ = filePrefixRoot(root, fileFixify(targetdir + target, FileFixifyAbsolute));
QString dst_targ = plain_targ;
+ plain_targ = escapeFilePath(plain_targ);
if (bundle != NoBundle) {
QString suffix;
if (project->first("TEMPLATE") == "lib")
@@ -773,33 +780,34 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
if (bundle == SolidBundle) {
if (!ret.isEmpty())
ret += "\n\t";
- ret += "$(DEL_FILE) -r \"" + plain_targ + "\"\n\t";
+ ret += "$(DEL_FILE) -r " + plain_targ + "\n\t";
} else {
src_targ += suffix;
}
}
+ src_targ = escapeFilePath(src_targ);
+ dst_targ = escapeFilePath(dst_targ);
if(!ret.isEmpty())
ret += "\n\t";
QString copy_cmd("-");
if (bundle == SolidBundle) {
- copy_cmd += "$(INSTALL_DIR) \"" + src_targ + "\" \"" + plain_targ + "\"";
+ copy_cmd += "$(INSTALL_DIR) " + src_targ + ' ' + plain_targ;
} else if (project->first("TEMPLATE") == "lib" && project->isActiveConfig("staticlib")) {
- copy_cmd += "$(INSTALL_FILE) \"" + src_targ + "\" \"" + dst_targ + "\"";
+ copy_cmd += "$(INSTALL_FILE) " + src_targ + ' ' + dst_targ;
} else {
if (bundle == SlicedBundle)
- ret += mkdir_p_asstring("\"`dirname \"" + dst_targ + "\"`\"", false) + "\n\t";
- copy_cmd += "$(INSTALL_PROGRAM) \"" + src_targ + "\" \"" + dst_targ + "\"";
+ ret += mkdir_p_asstring("\"`dirname " + dst_targ + "`\"", false) + "\n\t";
+ copy_cmd += "$(INSTALL_PROGRAM) " + src_targ + ' ' + dst_targ;
}
if(project->first("TEMPLATE") == "lib" && !project->isActiveConfig("staticlib")
&& project->values(ProKey(t + ".CONFIG")).indexOf("fix_rpath") != -1) {
if(!project->isEmpty("QMAKE_FIX_RPATH")) {
ret += copy_cmd;
- ret += "\n\t-" + var("QMAKE_FIX_RPATH") + " \"" +
- dst_targ + "\" \"" + dst_targ + "\"";
+ ret += "\n\t-" + var("QMAKE_FIX_RPATH") + ' ' + dst_targ + ' ' + dst_targ;
} else if(!project->isEmpty("QMAKE_LFLAGS_RPATH")) {
- ret += "-$(LINK) $(LFLAGS) " + var("QMAKE_LFLAGS_RPATH") + targetdir + " -o \"" +
- dst_targ + "\" $(OBJECTS) $(LIBS) $(OBJCOMP)";
+ ret += "-$(LINK) $(LFLAGS) " + var("QMAKE_LFLAGS_RPATH") + targetdir + " -o " +
+ dst_targ + " $(OBJECTS) $(LIBS) $(OBJCOMP)";
} else {
ret += copy_cmd;
}
@@ -809,7 +817,7 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
if(project->first("TEMPLATE") == "lib" && project->isActiveConfig("staticlib")) {
if(!project->isEmpty("QMAKE_RANLIB"))
- ret += QString("\n\t$(RANLIB) \"") + dst_targ + "\"";
+ ret += QString("\n\t$(RANLIB) ") + dst_targ;
} else if (!project->isActiveConfig("debug_info") && !project->isActiveConfig("nostrip")
&& !project->isEmpty("QMAKE_STRIP")) {
ret += "\n\t-$(STRIP)";
@@ -820,27 +828,28 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
if (!project->isEmpty("QMAKE_STRIPFLAGS_APP"))
ret += " " + var("QMAKE_STRIPFLAGS_APP");
}
- ret += " \"" + dst_targ + "\"";
+ ret += ' ' + dst_targ;
}
if(!uninst.isEmpty())
uninst.append("\n\t");
if (bundle == SolidBundle)
- uninst.append("-$(DEL_FILE) -r \"" + plain_targ + "\"");
+ uninst.append("-$(DEL_FILE) -r " + plain_targ);
else
- uninst.append("-$(DEL_FILE) \"" + dst_targ + "\"");
+ uninst.append("-$(DEL_FILE) " + dst_targ);
if (bundle == SlicedBundle) {
int dstlen = project->first("DESTDIR").length();
foreach (const ProString &src, project->values("QMAKE_BUNDLED_FILES")) {
- QString file = unescapeFilePath(src.toQString()).mid(dstlen);
- QString dst = filePrefixRoot(root, fileFixify(targetdir + file, FileFixifyAbsolute));
+ ProString file = src.mid(dstlen);
+ QString dst = escapeFilePath(
+ filePrefixRoot(root, fileFixify(targetdir + file, FileFixifyAbsolute)));
if (!ret.isEmpty())
ret += "\n\t";
- ret += mkdir_p_asstring("\"`dirname \"" + dst + "\"`\"", false) + "\n\t";
- ret += "-$(DEL_FILE) \"" + dst + "\"\n\t"; // Can't overwrite symlinks to directories
- ret += "-$(INSTALL_DIR) " + src + " \"" + dst + "\""; // Use cp -R to copy symlinks
+ ret += mkdir_p_asstring("\"`dirname " + dst + "`\"", false) + "\n\t";
+ ret += "-$(DEL_FILE) " + dst + "\n\t"; // Can't overwrite symlinks to directories
+ ret += "-$(INSTALL_DIR) " + escapeFilePath(src) + " " + dst; // Use cp -R to copy symlinks
if (!uninst.isEmpty())
uninst.append("\n\t");
- uninst.append("-$(DEL_FILE) \"" + dst + "\"");
+ uninst.append("-$(DEL_FILE) " + dst);
}
}
if(!links.isEmpty()) {
@@ -850,11 +859,12 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
int lslash = link.lastIndexOf(Option::dir_sep);
if(lslash != -1)
link = link.right(link.length() - (lslash + 1));
- QString dst_link = filePrefixRoot(root, fileFixify(targetdir + link, FileFixifyAbsolute));
- ret += "\n\t-$(SYMLINK) \"$(TARGET)\" \"" + dst_link + "\"";
+ QString dst_link = escapeFilePath(
+ filePrefixRoot(root, fileFixify(targetdir + link, FileFixifyAbsolute)));
+ ret += "\n\t-$(SYMLINK) $(TARGET) " + dst_link;
if(!uninst.isEmpty())
uninst.append("\n\t");
- uninst.append("-$(DEL_FILE) \"" + dst_link + "\"");
+ uninst.append("-$(DEL_FILE) " + dst_link);
}
}
}
@@ -879,7 +889,7 @@ UnixMakefileGenerator::defaultInstall(const QString &t)
QString dst_meta = filePrefixRoot(root, fileFixify(targetdir + meta, FileFixifyAbsolute));
if(!uninst.isEmpty())
uninst.append("\n\t");
- uninst.append("-$(DEL_FILE) \"" + dst_meta + "\"");
+ uninst.append("-$(DEL_FILE) " + escapeFilePath(dst_meta));
const QString dst_meta_dir = fileInfo(dst_meta).path();
if(!dst_meta_dir.isEmpty()) {
if(!ret.isEmpty())
@@ -900,8 +910,8 @@ UnixMakefileGenerator::escapeFilePath(const QString &path) const
{
QString ret = path;
if(!ret.isEmpty()) {
- ret = unescapeFilePath(ret).replace(QLatin1Char(' '), QLatin1String("\\ "))
- .replace(QLatin1Char('\t'), QLatin1String("\\\t"));
+ ret.replace(QLatin1Char(' '), QLatin1String("\\ "))
+ .replace(QLatin1Char('\t'), QLatin1String("\\\t"));
debug_msg(2, "EscapeFilePath: %s -> %s", path.toLatin1().constData(), ret.toLatin1().constData());
}
return ret;
diff --git a/qmake/generators/unix/unixmake.h b/qmake/generators/unix/unixmake.h
index 3a2ba06c0c..b136ea04d0 100644
--- a/qmake/generators/unix/unixmake.h
+++ b/qmake/generators/unix/unixmake.h
@@ -53,6 +53,7 @@ protected:
virtual bool doPrecompiledHeaders() const { return project->isActiveConfig("precompile_header"); }
virtual bool doDepends() const { return !Option::mkfile::do_stub_makefile && MakefileGenerator::doDepends(); }
virtual QString defaultInstall(const QString &);
+ virtual ProString fixLibFlag(const ProString &lib);
virtual void processPrlFiles();
virtual bool findLibraries();
diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
index 05b96f3ec6..c14395ae27 100644
--- a/qmake/generators/unix/unixmake2.cpp
+++ b/qmake/generators/unix/unixmake2.cpp
@@ -101,7 +101,7 @@ UnixMakefileGenerator::writeDefaultVariables(QTextStream &t)
distname += project->first("VERSION");
project->values("QMAKE_DISTNAME") = distname;
}
- t << "DISTNAME = " << var("QMAKE_DISTNAME") << endl;
+ t << "DISTNAME = " << fileVar("QMAKE_DISTNAME") << endl;
if (project->isEmpty("QMAKE_DISTDIR"))
project->values("QMAKE_DISTDIR") = project->first("QMAKE_DISTNAME");
@@ -127,7 +127,7 @@ UnixMakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::
}
t << " FORCE\n\t"
<< mkdir_p_asstring("$(DISTDIR)", false) << "\n\t"
- << "$(COPY_FILE) --parents " << var("DISTFILES") << " $(DISTDIR)" << Option::dir_sep << endl << endl;
+ << "$(COPY_FILE) --parents " << fileVar("DISTFILES") << " $(DISTDIR)" << Option::dir_sep << endl << endl;
const QString abs_source_path = project->first("QMAKE_ABSOLUTE_SOURCE_PATH").toQString();
for (int target = 0; target < targets.size(); ++target) {
@@ -148,8 +148,9 @@ UnixMakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::
dist_directory.prepend(Option::dir_sep);
QString out_directory_cdin = out_directory.isEmpty() ? "\n\t"
- : "\n\tcd " + out_directory + " && ";
- QString makefilein = " -e -f " + subtarget->makefile + " distdir DISTDIR=$(DISTDIR)" + dist_directory;
+ : "\n\tcd " + escapeFilePath(out_directory) + " && ";
+ QString makefilein = " -e -f " + escapeFilePath(subtarget->makefile)
+ + " distdir DISTDIR=$(DISTDIR)" + escapeFilePath(dist_directory);
QString out = subtarget->makefile;
QString in = escapeFilePath(fileFixify(in_directory + subtarget->profile, FileFixifyAbsolute));
@@ -157,7 +158,7 @@ UnixMakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::
out.remove(0, in_directory.length());
t << subtarget->target << "-distdir: FORCE";
- writeSubTargetCall(t, in_directory, in, out_directory, out,
+ writeSubTargetCall(t, in_directory, in, out_directory, escapeFilePath(out),
out_directory_cdin, makefilein);
t << endl;
}
@@ -166,7 +167,6 @@ UnixMakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::
void
UnixMakefileGenerator::writeMakeParts(QTextStream &t)
{
- QString deps = fileFixify(Option::output.fileName()), target_deps;
bool do_incremental = (project->isActiveConfig("incremental") &&
!project->values("QMAKE_INCREMENTAL").isEmpty() &&
(!project->values("QMAKE_APP_FLAG").isEmpty() ||
@@ -188,14 +188,15 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
QString isystem = var("QMAKE_CFLAGS_ISYSTEM");
const ProStringList &incs = project->values("INCLUDEPATH");
for(int i = 0; i < incs.size(); ++i) {
- ProString inc = escapeFilePath(incs.at(i));
+ const ProString &inc = incs.at(i);
if (inc.isEmpty())
continue;
if (!isystem.isEmpty() && isSystemInclude(inc.toQString()))
- t << ' ' << isystem << ' ' << inc;
+ t << ' ' << isystem << ' ';
else
- t << " -I" << inc;
+ t << " -I";
+ t << escapeFilePath(inc);
}
}
if(!project->isEmpty("QMAKE_FRAMEWORKPATH_FLAGS"))
@@ -207,7 +208,8 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
if(!project->isActiveConfig("staticlib")) {
t << "LINK = " << var("QMAKE_LINK") << endl;
t << "LFLAGS = " << var("QMAKE_LFLAGS") << endl;
- t << "LIBS = $(SUBLIBS) " << var("QMAKE_LIBS") << " " << var("QMAKE_LIBS_PRIVATE") << endl;
+ t << "LIBS = $(SUBLIBS) " << fixLibFlags("QMAKE_LIBS").join(' ') << ' '
+ << fixLibFlags("QMAKE_LIBS_PRIVATE").join(' ') << endl;
}
t << "AR = " << var("QMAKE_AR") << endl;
@@ -220,16 +222,17 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << endl;
t << "####### Output directory\n\n";
+ // This is used in commands by some .prf files.
if (! project->values("OBJECTS_DIR").isEmpty())
- t << "OBJECTS_DIR = " << var("OBJECTS_DIR") << endl;
+ t << "OBJECTS_DIR = " << fileVar("OBJECTS_DIR") << endl;
else
t << "OBJECTS_DIR = ./\n";
t << endl;
/* files */
t << "####### Files\n\n";
- t << "SOURCES = " << valList(escapeFilePaths(project->values("SOURCES"))) << " "
- << valList(escapeFilePaths(project->values("GENERATED_SOURCES"))) << endl;
+ // This is used by the dist target.
+ t << "SOURCES = " << fileVarList("SOURCES") << ' ' << fileVarList("GENERATED_SOURCES") << endl;
if(do_incremental) {
const ProStringList &objs = project->values("OBJECTS");
const ProStringList &incrs = project->values("QMAKE_INCREMENTAL");
@@ -258,37 +261,37 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << "INCREMENTAL_OBJECTS = " << escapeFilePaths(incrs_out).join(" \\\n\t\t") << endl;
}
} else {
- t << "OBJECTS = " << valList(escapeFilePaths(project->values("OBJECTS"))) << endl;
+ // Used all over the place in both deps and commands.
+ t << "OBJECTS = " << valList(escapeDependencyPaths(project->values("OBJECTS"))) << endl;
}
if(do_incremental && !src_incremental)
do_incremental = false;
t << "DIST = " << valList(fileFixify(project->values("DISTFILES").toQStringList())) << " "
- << valList(escapeFilePaths(project->values("HEADERS"))) << " "
- << valList(escapeFilePaths(project->values("SOURCES"))) << endl;
- t << "QMAKE_TARGET = " << var("QMAKE_ORIG_TARGET") << endl;
+ << fileVarList("HEADERS") << ' ' << fileVarList("SOURCES") << endl;
+ t << "QMAKE_TARGET = " << fileVar("QMAKE_ORIG_TARGET") << endl;
// The comment is important for mingw32-make.exe on Windows as otherwise trailing slashes
// would be interpreted as line continuation. The lack of spacing between the value and the
// comment is also important as otherwise quoted use of "$(DESTDIR)" would include this
// spacing.
- t << "DESTDIR = " << var("DESTDIR") << "#avoid trailing-slash linebreak\n";
+ t << "DESTDIR = " << fileVar("DESTDIR") << "#avoid trailing-slash linebreak\n";
if(project->isActiveConfig("compile_libtool"))
- t << "TARGETL = " << var("TARGET_la") << endl;
- t << "TARGET = " << escapeFilePath(var("TARGET")) << endl;
+ t << "TARGETL = " << fileVar("TARGET_la") << endl;
+ t << "TARGET = " << fileVar("TARGET") << endl; // ### mixed use!
if(project->isActiveConfig("plugin")) {
- t << "TARGETD = " << escapeFilePath(var("TARGET")) << endl;
+ t << "TARGETD = " << fileVar("TARGET") << endl;
} else if(!project->isActiveConfig("staticlib") && project->values("QMAKE_APP_FLAG").isEmpty()) {
- t << "TARGETA = " << escapeFilePath(var("TARGETA")) << endl;
+ t << "TARGETA = " << fileVar("TARGETA") << endl; // ### mixed use!
if(!project->isEmpty("QMAKE_BUNDLE")) {
- t << "TARGETD = " << escapeFilePath(var("TARGET_x.y")) << endl;
- t << "TARGET0 = " << escapeFilePath(var("TARGET_")) << endl;
+ t << "TARGETD = " << fileVar("TARGET_x.y") << endl;
+ t << "TARGET0 = " << fileVar("TARGET_") << endl;
} else if (!project->isActiveConfig("unversioned_libname")) {
- t << "TARGET0 = " << escapeFilePath(var("TARGET_")) << endl;
+ t << "TARGET0 = " << fileVar("TARGET_") << endl;
if (project->isEmpty("QMAKE_HPUX_SHLIB")) {
- t << "TARGETD = " << escapeFilePath(var("TARGET_x.y.z")) << endl;
- t << "TARGET1 = " << escapeFilePath(var("TARGET_x")) << endl;
- t << "TARGET2 = " << escapeFilePath(var("TARGET_x.y")) << endl;
+ t << "TARGETD = " << fileVar("TARGET_x.y.z") << endl;
+ t << "TARGET1 = " << fileVar("TARGET_x") << endl;
+ t << "TARGET2 = " << fileVar("TARGET_x.y") << endl;
} else {
- t << "TARGETD = " << escapeFilePath(var("TARGET_x")) << endl;
+ t << "TARGETD = " << fileVar("TARGET_x") << endl;
}
}
}
@@ -300,7 +303,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
const ProStringList &qeui = project->values("QMAKE_EXTRA_INCLUDES");
ProStringList::ConstIterator it;
for(it = qeui.begin(); it != qeui.end(); ++it)
- t << "include " << (*it) << endl;
+ t << "include " << escapeDependencyPath(*it) << endl;
/* rules */
t << "first: all\n";
@@ -321,29 +324,30 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
ProStringList objects = project->values("OBJECTS");
for (ProStringList::Iterator it = objects.begin(); it != objects.end(); ++it) {
QString d_file = (*it).toQString().replace(QRegExp(Option::obj_ext + "$"), ".d");
- t << "-include " << d_file << endl;
+ t << "-include " << escapeDependencyPath(d_file) << endl;
project->values("QMAKE_DISTCLEAN") << d_file;
}
} else {
QString cmd=var("QMAKE_CFLAGS_DEPS") + " ";
cmd += varGlue("DEFINES","-D"," -D","") + varGlue("PRL_EXPORT_DEFINES"," -D"," -D","");
if(!project->isEmpty("QMAKE_ABSOLUTE_SOURCE_PATH"))
- cmd += " -I" + project->first("QMAKE_ABSOLUTE_SOURCE_PATH") + " ";
- cmd += " $(INCPATH) " + varGlue("DEPENDPATH", "-I", " -I", "");
+ cmd += " -I" + fileVar("QMAKE_ABSOLUTE_SOURCE_PATH") + ' ';
+ cmd += " $(INCPATH) " + fileVarGlue("DEPENDPATH", "-I", " -I", "");
ProString odir;
if(!project->values("OBJECTS_DIR").isEmpty())
odir = project->first("OBJECTS_DIR");
+ QString odird = escapeDependencyPath(odir.toQString());
QString pwd = escapeFilePath(fileFixify(qmake_getpwd()));
t << "###### Dependencies\n\n";
- t << odir << ".deps/%.d: " << pwd << "/%.cpp\n\t";
+ t << odird << ".deps/%.d: " << pwd << "/%.cpp\n\t";
if(project->isActiveConfig("echo_depend_creation"))
t << "@echo Creating depend for $<\n\t";
t << mkdir_p_asstring("$(@D)", false) << "\n\t"
<< "@$(CXX) " << cmd << " $< | sed \"s,^\\($(*F).o\\):," << odir << "\\1:,g\" >$@\n\n";
- t << odir << ".deps/%.d: " << pwd << "/%.c\n\t";
+ t << odird << ".deps/%.d: " << pwd << "/%.c\n\t";
if(project->isActiveConfig("echo_depend_creation"))
t << "@echo Creating depend for $<\n\t";
t << mkdir_p_asstring("$(@D)", false) << "\n\t"
@@ -374,11 +378,12 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
if(!d_file.isEmpty()) {
d_file = odir + ".deps/" + fileFixify(d_file, pwd, Option::output_dir) + ".d";
+ QString d_file_d = escapeDependencyPath(d_file);
QStringList deps = findDependencies((*it).toQString()).filter(QRegExp(
"((^|/)" + Option::h_moc_mod + "|" + Option::cpp_moc_ext + "$)"));
if(!deps.isEmpty())
- t << d_file << ": " << deps.join(' ') << endl;
- t << "-include " << d_file << endl;
+ t << d_file_d << ": " << escapeDependencyPaths(deps).join(' ') << endl;
+ t << "-include " << d_file_d << endl;
project->values("QMAKE_DISTCLEAN") += d_file;
}
}
@@ -395,10 +400,11 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << "SUBLIBS = ";
const ProStringList &l = project->values("SUBLIBS");
for (ProStringList::ConstIterator it = l.begin(); it != l.end(); ++it)
- t << libdir << project->first("QMAKE_PREFIX_STATICLIB") << (*it) << "."
- << project->first("QMAKE_EXTENSION_STATICLIB") << " ";
+ t << escapeFilePath(libdir + project->first("QMAKE_PREFIX_STATICLIB") + (*it) + '.'
+ + project->first("QMAKE_EXTENSION_STATICLIB")) << ' ';
t << endl << endl;
}
+ QString target_deps;
if ((project->isActiveConfig("depend_prl") || project->isActiveConfig("fast_depend_prl"))
&& !project->isEmpty("QMAKE_PRL_INTERNAL_FILES")) {
const ProStringList &l = project->values("QMAKE_PRL_INTERNAL_FILES");
@@ -411,18 +417,20 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
if(slsh != -1)
dir = (*it).left(slsh + 1);
QString targ = dir + libinfo.first("QMAKE_PRL_TARGET");
- target_deps += " " + targ;
- t << targ;
+ QString targ_d = escapeDependencyPath(targ);
+ target_deps += ' ' + targ_d;
+ t << targ_d;
if (project->isActiveConfig("fast_depend_prl"))
t << ":\n\t@echo \"Creating '";
else
t << ": FORCE\n\t@echo \"Creating/updating '";
t << targ << "'\"\n\t"
- << "(cd " << libinfo.first("QMAKE_PRL_BUILD_DIR") << ";"
+ << "(cd " << escapeFilePath(libinfo.first("QMAKE_PRL_BUILD_DIR")) << ';'
<< "$(MAKE))\n";
}
}
}
+ QString deps = escapeDependencyPath(fileFixify(Option::output.fileName()));
QString allDeps;
if (!project->values("QMAKE_APP_FLAG").isEmpty() || project->first("TEMPLATE") == "aux") {
QString destdir = project->first("DESTDIR").toQString();
@@ -443,19 +451,23 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
QString incr_deps, incr_objs;
if(project->first("QMAKE_INCREMENTAL_STYLE") == "ld") {
QString incr_target_dir = var("OBJECTS_DIR") + incr_target + Option::obj_ext;
+ QString incr_target_dir_d = escapeDependencyPath(incr_target_dir);
+ QString incr_target_dir_f = escapeFilePath(incr_target_dir);
//actual target
- t << incr_target_dir << ": $(OBJECTS)\n\t"
- << "ld -r -o "<< incr_target_dir << " $(OBJECTS)\n";
+ t << incr_target_dir_d << ": $(OBJECTS)\n\t"
+ << "ld -r -o " << incr_target_dir_f << " $(OBJECTS)\n";
//communicated below
- deps.prepend(incr_target_dir + " ");
+ deps.prepend(incr_target_dir_d + ' ');
incr_deps = "$(INCREMENTAL_OBJECTS)";
if(!incr_objs.isEmpty())
incr_objs += " ";
- incr_objs += incr_target_dir;
+ incr_objs += incr_target_dir_f;
} else {
//actual target
QString incr_target_dir = var("DESTDIR") + "lib" + incr_target + "." +
project->first("QMAKE_EXTENSION_SHLIB");
+ QString incr_target_dir_d = escapeDependencyPath(incr_target_dir);
+ QString incr_target_dir_f = escapeFilePath(incr_target_dir);
QString incr_lflags = var("QMAKE_LFLAGS_SHLIB") + " ";
if(project->isActiveConfig("debug"))
incr_lflags += var("QMAKE_LFLAGS_DEBUG");
@@ -463,31 +475,31 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
incr_lflags += var("QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO");
else
incr_lflags += var("QMAKE_LFLAGS_RELEASE");
- t << incr_target_dir << ": $(INCREMENTAL_OBJECTS)\n\t";
+ t << incr_target_dir_d << ": $(INCREMENTAL_OBJECTS)\n\t";
if(!destdir.isEmpty())
t << "\n\t" << mkdir_p_asstring(destdir) << "\n\t";
- t << "$(LINK) " << incr_lflags << " -o "<< incr_target_dir <<
+ t << "$(LINK) " << incr_lflags << " -o "<< incr_target_dir_f <<
" $(INCREMENTAL_OBJECTS)\n";
//communicated below
if(!destdir.isEmpty()) {
if(!incr_objs.isEmpty())
incr_objs += " ";
- incr_objs += "-L" + destdir;
+ incr_objs += "-L" + escapeFilePath(destdir);
} else {
if(!incr_objs.isEmpty())
incr_objs += " ";
- incr_objs += "-L" + qmake_getpwd();
+ incr_objs += "-L" + escapeFilePath(qmake_getpwd());
}
if(!incr_objs.isEmpty())
incr_objs += " ";
- incr_objs += " -l" + incr_target;
- deps.prepend(incr_target_dir + " ");
+ incr_objs += " -l" + escapeFilePath(incr_target);
+ deps.prepend(incr_target_dir_d + ' ');
incr_deps = "$(OBJECTS)";
}
//real target
- t << var("TARGET") << ": " << var("PRE_TARGETDEPS") << " " << incr_deps << " " << target_deps
- << " " << var("POST_TARGETDEPS") << "\n\t";
+ t << var("TARGET") << ": " << depVar("PRE_TARGETDEPS") << ' ' << incr_deps << ' ' << target_deps
+ << ' ' << depVar("POST_TARGETDEPS") << "\n\t";
if(!destdir.isEmpty())
t << "\n\t" << mkdir_p_asstring(destdir) << "\n\t";
if(!project->isEmpty("QMAKE_PRE_LINK"))
@@ -497,8 +509,8 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << "\n\t" << var("QMAKE_POST_LINK");
t << endl << endl;
} else {
- t << "$(TARGET): " << var("PRE_TARGETDEPS") << " $(OBJECTS) "
- << target_deps << " " << var("POST_TARGETDEPS") << "\n\t";
+ t << "$(TARGET): " << depVar("PRE_TARGETDEPS") << " $(OBJECTS) "
+ << target_deps << ' ' << depVar("POST_TARGETDEPS") << "\n\t";
if (project->first("TEMPLATE") != "aux") {
if (!destdir.isEmpty())
t << mkdir_p_asstring(destdir) << "\n\t";
@@ -512,16 +524,17 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
}
allDeps = " $(TARGET)";
} else if(!project->isActiveConfig("staticlib")) {
- QString destdir = unescapeFilePath(project->first("DESTDIR").toQString()), incr_deps;
+ QString destdir_r = project->first("DESTDIR").toQString(), incr_deps;
if(!project->isEmpty("QMAKE_BUNDLE")) {
QString bundle_loc = project->first("QMAKE_BUNDLE_LOCATION").toQString();
if(!bundle_loc.isEmpty() && !bundle_loc.startsWith("/"))
bundle_loc.prepend("/");
if(!bundle_loc.endsWith("/"))
bundle_loc += "/";
- destdir += project->first("QMAKE_BUNDLE") + bundle_loc;
+ destdir_r += project->first("QMAKE_BUNDLE") + bundle_loc;
}
- destdir = escapeFilePath(destdir);
+ QString destdir_d = escapeDependencyPath(destdir_r);
+ QString destdir = escapeFilePath(destdir_r);
if(do_incremental) {
ProString s_ext = project->first("QMAKE_EXTENSION_SHLIB");
@@ -530,23 +543,26 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
if(incr_target.indexOf(Option::dir_sep) != -1)
incr_target = incr_target.right(incr_target.length() -
(incr_target.lastIndexOf(Option::dir_sep) + 1));
- incr_target = escapeFilePath(incr_target);
if(project->first("QMAKE_INCREMENTAL_STYLE") == "ld") {
- QString incr_target_dir = escapeFilePath(var("OBJECTS_DIR") + incr_target + Option::obj_ext);
+ QString incr_target_dir = var("OBJECTS_DIR") + incr_target + Option::obj_ext;
+ QString incr_target_dir_d = escapeDependencyPath(incr_target_dir);
+ QString incr_target_dir_f = escapeFilePath(incr_target_dir);
//actual target
const QString link_deps = "$(OBJECTS) ";
- t << incr_target_dir << ": " << link_deps << "\n\t"
- << "ld -r -o " << incr_target_dir << " " << link_deps << endl;
+ t << incr_target_dir_d << ": " << link_deps << "\n\t"
+ << "ld -r -o " << incr_target_dir_f << ' ' << link_deps << endl;
//communicated below
ProStringList &cmd = project->values("QMAKE_LINK_SHLIB_CMD");
cmd[0] = cmd.at(0).toQString().replace("$(OBJECTS) ", "$(INCREMENTAL_OBJECTS)"); //ick
- cmd.append(incr_target_dir);
- deps.prepend(incr_target_dir + " ");
+ cmd.append(incr_target_dir_f);
+ deps.prepend(incr_target_dir_d + ' ');
incr_deps = "$(INCREMENTAL_OBJECTS)";
} else {
//actual target
- QString incr_target_dir = escapeFilePath(destdir + "lib" + incr_target + "." + s_ext);
+ QString incr_target_dir = destdir_r + "lib" + incr_target + '.' + s_ext;
+ QString incr_target_dir_d = escapeDependencyPath(incr_target_dir);
+ QString incr_target_dir_f = escapeFilePath(incr_target_dir);
QString incr_lflags = var("QMAKE_LFLAGS_SHLIB") + " ";
if(!project->isEmpty("QMAKE_LFLAGS_INCREMENTAL"))
incr_lflags += var("QMAKE_LFLAGS_INCREMENTAL") + " ";
@@ -556,29 +572,29 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
incr_lflags += var("QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO");
else
incr_lflags += var("QMAKE_LFLAGS_RELEASE");
- t << incr_target_dir << ": $(INCREMENTAL_OBJECTS)\n\t";
+ t << incr_target_dir_d << ": $(INCREMENTAL_OBJECTS)\n\t";
if(!destdir.isEmpty())
t << mkdir_p_asstring(destdir, false) << "\n\t";
- t << "$(LINK) " << incr_lflags << " " << var("QMAKE_LINK_O_FLAG") << incr_target_dir <<
+ t << "$(LINK) " << incr_lflags << ' ' << var("QMAKE_LINK_O_FLAG") << incr_target_dir_f <<
" $(INCREMENTAL_OBJECTS)\n";
//communicated below
ProStringList &cmd = project->values("QMAKE_LINK_SHLIB_CMD");
if(!destdir.isEmpty())
cmd.append(" -L" + destdir);
- cmd.append(" -l" + incr_target);
- deps.prepend(incr_target_dir + " ");
+ cmd.append(" -l" + escapeFilePath(incr_target));
+ deps.prepend(incr_target_dir_d + ' ');
incr_deps = "$(OBJECTS)";
}
//real target
- t << destdir << "$(TARGET): " << var("PRE_TARGETDEPS") << " "
- << incr_deps << " $(SUBLIBS) " << target_deps << " " << var("POST_TARGETDEPS");
+ t << destdir_d << "$(TARGET): " << depVar("PRE_TARGETDEPS") << ' '
+ << incr_deps << " $(SUBLIBS) " << target_deps << ' ' << depVar("POST_TARGETDEPS");
} else {
- t << destdir << "$(TARGET): " << var("PRE_TARGETDEPS")
+ t << destdir_d << "$(TARGET): " << depVar("PRE_TARGETDEPS")
<< " $(OBJECTS) $(SUBLIBS) $(OBJCOMP) " << target_deps
- << " " << var("POST_TARGETDEPS");
+ << ' ' << depVar("POST_TARGETDEPS");
}
- allDeps = ' ' + destdir + "$(TARGET)";
+ allDeps = ' ' + destdir_d + "$(TARGET)";
if(!destdir.isEmpty())
t << "\n\t" << mkdir_p_asstring(destdir, false);
if(!project->isEmpty("QMAKE_PRE_LINK"))
@@ -598,8 +614,9 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << "\n\t" << var("QMAKE_POST_LINK");
t << endl << endl;
} else if(!project->isEmpty("QMAKE_BUNDLE")) {
- QString currentLink = destdir + "Versions/Current";
- bundledFiles << currentLink << destdir + "$(TARGET)";
+ QString currentLink = destdir_r + "Versions/Current";
+ QString currentLink_f = escapeDependencyPath(currentLink);
+ bundledFiles << currentLink << destdir_r + "$(TARGET)";
t << "\n\t"
<< "-$(DEL_FILE) $(TARGET) $(TARGET0) $(DESTDIR)$(TARGET0)\n\t"
<< var("QMAKE_LINK_SHLIB_CMD") << "\n\t"
@@ -608,9 +625,9 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
<< mkdir_p_asstring("\"`dirname $(DESTDIR)$(TARGET0)`\"", false) << "\n\t"
<< varGlue("QMAKE_LN_SHLIB", "-", " ",
" Versions/Current/$(TARGET) $(DESTDIR)$(TARGET0)") << "\n\t"
- << "-$(DEL_FILE) " << currentLink << "\n\t"
+ << "-$(DEL_FILE) " << currentLink_f << "\n\t"
<< varGlue("QMAKE_LN_SHLIB","-"," ", " " + project->first("QMAKE_FRAMEWORK_VERSION") +
- " " + currentLink) << "\n\t";
+ ' ' + currentLink_f) << "\n\t";
if(!project->isEmpty("QMAKE_POST_LINK"))
t << "\n\t" << var("QMAKE_POST_LINK");
t << endl << endl;
@@ -667,10 +684,10 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
if (! project->isActiveConfig("plugin")) {
t << "staticlib: $(TARGETA)\n\n";
- t << "$(TARGETA): " << var("PRE_TARGETDEPS") << " $(OBJECTS) $(OBJCOMP)";
+ t << "$(TARGETA): " << depVar("PRE_TARGETDEPS") << " $(OBJECTS) $(OBJCOMP)";
if(do_incremental)
t << " $(INCREMENTAL_OBJECTS)";
- t << " " << var("POST_TARGETDEPS") << "\n\t"
+ t << ' ' << depVar("POST_TARGETDEPS") << "\n\t"
<< "-$(DEL_FILE) $(TARGETA) \n\t"
<< var("QMAKE_AR_CMD");
if(do_incremental)
@@ -680,15 +697,17 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << endl << endl;
}
} else {
- QString destdir = project->first("DESTDIR").toQString();
- allDeps = ' ' + destdir + "$(TARGET)"
- + varGlue("QMAKE_AR_SUBLIBS", ' ' + destdir, ' ' + destdir, "");
- t << "staticlib: " << destdir << "$(TARGET)\n\n";
+ QString destdir_r = project->first("DESTDIR").toQString();
+ QString destdir_d = escapeDependencyPath(destdir_r);
+ QString destdir = escapeFilePath(destdir_r);
+ allDeps = ' ' + destdir_d + "$(TARGET)"
+ + varGlue("QMAKE_AR_SUBLIBS", ' ' + destdir_d, ' ' + destdir_d, "");
+ t << "staticlib: " << destdir_d << "$(TARGET)\n\n";
if(project->isEmpty("QMAKE_AR_SUBLIBS")) {
- t << destdir << "$(TARGET): " << var("PRE_TARGETDEPS")
- << " $(OBJECTS) $(OBJCOMP) " << var("POST_TARGETDEPS") << "\n\t";
+ t << destdir_d << "$(TARGET): " << depVar("PRE_TARGETDEPS")
+ << " $(OBJECTS) $(OBJCOMP) " << depVar("POST_TARGETDEPS") << "\n\t";
if(!destdir.isEmpty())
- t << mkdir_p_asstring(destdir) << "\n\t";
+ t << mkdir_p_asstring(destdir, false) << "\n\t";
t << "-$(DEL_FILE) $(TARGET)\n\t"
<< var("QMAKE_AR_CMD") << "\n";
if(!project->isEmpty("QMAKE_POST_LINK"))
@@ -709,26 +728,27 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
for(int cnt = 0; cnt < max_files && objit != objs.end(); ++objit, cnt++)
build << (*objit);
QString ar;
+ ProString lib = escapeFilePath(*libit);
if((*libit) == "$(TARGET)") {
- t << destdir << "$(TARGET): " << var("PRE_TARGETDEPS")
- << " " << var("POST_TARGETDEPS") << valList(build) << "\n\t";
+ t << destdir_d << "$(TARGET): " << depVar("PRE_TARGETDEPS")
+ << ' ' << depVar("POST_TARGETDEPS") << valList(escapeDependencyPaths(build)) << "\n\t";
ar = project->first("QMAKE_AR_CMD").toQString();
- ar.replace("$(OBJECTS)", build.join(' '));
+ ar.replace("$(OBJECTS)", escapeFilePaths(build).join(' '));
} else {
- t << (*libit) << ": " << valList(build) << "\n\t";
- ar = "$(AR) " + (*libit) + " " + build.join(' ');
+ t << escapeDependencyPath(*libit) << ": " << valList(escapeDependencyPaths(build)) << "\n\t";
+ ar = "$(AR) " + lib + ' ' + escapeFilePaths(build).join(' ');
}
if(!destdir.isEmpty())
- t << mkdir_p_asstring(destdir) << "\n\t";
- t << "-$(DEL_FILE) " << (*libit) << "\n\t"
+ t << mkdir_p_asstring(destdir, false) << "\n\t";
+ t << "-$(DEL_FILE) " << lib << "\n\t"
<< ar << "\n";
if(!project->isEmpty("QMAKE_POST_LINK"))
t << "\t" << var("QMAKE_POST_LINK") << "\n";
if(!project->isEmpty("QMAKE_RANLIB"))
- t << "\t$(RANLIB) " << (*libit) << "\n";
+ t << "\t$(RANLIB) " << lib << "\n";
if(!destdir.isEmpty())
- t << "\t-$(DEL_FILE) " << destdir << (*libit) << "\n"
- << "\t-$(MOVE) " << (*libit) << " " << destdir << " \n";
+ t << "\t-$(DEL_FILE) " << destdir << lib << "\n"
+ << "\t-$(MOVE) " << lib << ' ' << destdir << " \n";
}
}
t << endl << endl;
@@ -746,7 +766,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
}
if(!meta_files.isEmpty())
t << escapeDependencyPaths(meta_files).join(" ") << ": \n\t"
- << "@$(QMAKE) -prl " << buildArgs() << " " << project->projectFile() << endl;
+ << "@$(QMAKE) -prl " << buildArgs() << ' ' << escapeFilePath(project->projectFile()) << endl;
}
if (!project->isEmpty("QMAKE_BUNDLE")) {
@@ -754,47 +774,53 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
ProStringList &alldeps = project->values("ALL_DEPS");
QString bundle_dir = project->first("DESTDIR") + project->first("QMAKE_BUNDLE") + "/";
if (!project->first("QMAKE_PKGINFO").isEmpty()) {
- ProString pkginfo = escapeFilePath(project->first("QMAKE_PKGINFO"));
+ ProString pkginfo = project->first("QMAKE_PKGINFO");
+ ProString pkginfo_f = escapeFilePath(pkginfo);
+ ProString pkginfo_d = escapeDependencyPath(pkginfo);
bundledFiles << pkginfo;
alldeps << pkginfo;
QString destdir = bundle_dir + "Contents";
- t << pkginfo << ": \n\t";
+ t << pkginfo_d << ": \n\t";
if (!destdir.isEmpty())
t << mkdir_p_asstring(destdir) << "\n\t";
- t << "@$(DEL_FILE) " << pkginfo << "\n\t"
+ t << "@$(DEL_FILE) " << pkginfo_f << "\n\t"
<< "@echo \"APPL"
<< (project->isEmpty("QMAKE_PKGINFO_TYPEINFO")
? QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4))
- << "\" >" << pkginfo << endl;
+ << "\" > " << pkginfo_f << endl;
}
if (!project->first("QMAKE_BUNDLE_RESOURCE_FILE").isEmpty()) {
- ProString resources = escapeFilePath(project->first("QMAKE_BUNDLE_RESOURCE_FILE"));
+ ProString resources = project->first("QMAKE_BUNDLE_RESOURCE_FILE");
+ ProString resources_f = escapeFilePath(resources);
+ ProString resources_d = escapeDependencyPath(resources);
bundledFiles << resources;
alldeps << resources;
QString destdir = bundle_dir + "Contents/Resources";
- t << resources << ": \n\t";
+ t << resources_d << ": \n\t";
t << mkdir_p_asstring(destdir) << "\n\t";
- t << "@touch " << resources << "\n\t\n";
+ t << "@touch " << resources_f << "\n\t\n";
}
//copy the plist
while (!project->isActiveConfig("no_plist")) { // 'while' just to be able to 'break'
- QString info_plist = escapeFilePath(fileFixify(project->first("QMAKE_INFO_PLIST").toQString()));
+ QString info_plist = fileFixify(project->first("QMAKE_INFO_PLIST").toQString());
if (info_plist.isEmpty())
info_plist = specdir() + QDir::separator() + "Info.plist." + project->first("TEMPLATE");
- if (!exists(Option::fixPathToLocalOS(info_plist))) {
+ if (!exists(Option::normalizePath(info_plist))) {
warn_msg(WarnLogic, "Could not resolve Info.plist: '%s'. Check if QMAKE_INFO_PLIST points to a valid file.",
info_plist.toLatin1().constData());
break;
}
+ info_plist = escapeFilePath(info_plist);
bool isApp = (project->first("TEMPLATE") == "app");
- QString info_plist_out = escapeFilePath(
+ QString info_plist_out =
bundle_dir + (isApp ? "Contents/Info.plist"
: "Versions/" + project->first("QMAKE_FRAMEWORK_VERSION")
- + "/Resources/Info.plist"));
+ + "/Resources/Info.plist");
bundledFiles << info_plist_out;
alldeps << info_plist_out;
QString destdir = info_plist_out.section(Option::dir_sep, 0, -2);
- t << info_plist_out << ": \n\t";
+ t << escapeDependencyPath(info_plist_out) << ": \n\t";
+ info_plist_out = escapeFilePath(info_plist_out);
if (!destdir.isEmpty())
t << mkdir_p_asstring(destdir, false) << "\n\t";
ProStringList commonSedArgs;
@@ -834,13 +860,14 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
//copy the icon
if (!project->isEmpty("ICON")) {
QString dir = bundle_dir + "Contents/Resources/";
- const QString icon_path = escapeFilePath(dir + icon.section(Option::dir_sep, -1));
+ const QString icon_path = dir + icon.section(Option::dir_sep, -1);
+ QString icon_path_f = escapeFilePath(icon_path);
bundledFiles << icon_path;
alldeps << icon_path;
- t << icon_path << ": " << icon << "\n\t"
+ t << escapeDependencyPath(icon_path) << ": " << escapeDependencyPath(icon) << "\n\t"
<< mkdir_p_asstring(dir) << "\n\t"
- << "@$(DEL_FILE) " << icon_path << "\n\t"
- << "@$(COPY_FILE) " << escapeFilePath(icon) << " " << icon_path << endl;
+ << "@$(DEL_FILE) " << icon_path_f << "\n\t"
+ << "@$(COPY_FILE) " << escapeFilePath(icon) << ' ' << icon_path_f << endl;
}
} else {
symlinks[bundle_dir + "Resources"] = "Versions/Current/Resources";
@@ -871,23 +898,24 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
int pos = name.indexOf('/');
if (pos > 0)
name = name.mid(0, pos);
- symlinks[Option::fixPathToLocalOS(path + name)] =
+ symlinks[Option::fixPathToTargetOS(path + name)] =
project->first(vkey) + "/Current/" + name;
path += version;
}
path += project->first(pkey).toQString();
- path = Option::fixPathToLocalOS(path);
+ path = Option::fixPathToTargetOS(path);
for(int file = 0; file < files.count(); file++) {
QString fn = files.at(file).toQString();
QString src = fileFixify(fn, FileFixifyAbsolute);
if (!QFile::exists(src))
src = fn;
- src = escapeFilePath(src);
- const QString dst = escapeFilePath(path + Option::dir_sep + fileInfo(fn).fileName());
+ QString dst = path + Option::dir_sep + fileInfo(fn).fileName();
bundledFiles << dst;
alldeps << dst;
- t << dst << ": " << src << "\n\t"
+ t << escapeDependencyPath(dst) << ": " << escapeDependencyPath(src) << "\n\t"
<< mkdir_p_asstring(path) << "\n\t";
+ src = escapeFilePath(src);
+ dst = escapeFilePath(dst);
QFileInfo fi(fileInfo(fn));
if(fi.isDir())
t << "@$(DEL_FILE) -r " << dst << "\n\t"
@@ -898,18 +926,19 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
}
}
}
+ QString bundle_dir_f = escapeFilePath(bundle_dir);
QHash<QString, QString>::ConstIterator symIt = symlinks.constBegin(),
symEnd = symlinks.constEnd();
for (; symIt != symEnd; ++symIt) {
bundledFiles << symIt.key();
alldeps << symIt.key();
- t << symIt.key() << ":\n\t"
+ t << escapeDependencyPath(symIt.key()) << ":\n\t"
<< mkdir_p_asstring(bundle_dir) << "\n\t"
- << "@$(SYMLINK) " << symIt.value() << " " << bundle_dir << endl;
+ << "@$(SYMLINK) " << escapeFilePath(symIt.value()) << ' ' << bundle_dir_f << endl;
}
}
- t << endl << "all: " << escapeDependencyPath(deps)
+ t << endl << "all: " << deps
<< valGlue(escapeDependencyPaths(project->values("ALL_DEPS")), " \\\n\t\t", " \\\n\t\t", "")
<< allDeps << endl << endl;
@@ -930,15 +959,16 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
const ProStringList &val = project->values((*var_it).toKey());
if(val.isEmpty())
continue;
- t << "\t$(COPY_FILE) --parents " << val.join(' ') << " $(DISTDIR)" << Option::dir_sep << endl;
+ t << "\t$(COPY_FILE) --parents " << escapeFilePaths(val).join(' ')
+ << " $(DISTDIR)" << Option::dir_sep << endl;
}
}
}
if(!project->isEmpty("TRANSLATIONS"))
- t << "\t$(COPY_FILE) --parents " << var("TRANSLATIONS") << " $(DISTDIR)" << Option::dir_sep << endl;
+ t << "\t$(COPY_FILE) --parents " << fileVar("TRANSLATIONS") << " $(DISTDIR)" << Option::dir_sep << endl;
t << endl << endl;
- QString clean_targets = "compiler_clean " + var("CLEAN_DEPS");
+ QString clean_targets = " compiler_clean " + depVar("CLEAN_DEPS");
if(do_incremental) {
t << "incrclean:\n";
if(src_incremental)
@@ -993,26 +1023,27 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
precomp_files += precomph_out_dir + header_prefix + "objective-c++" + header_suffix;
}
}
- t << "-$(DEL_FILE) " << precomp_files.join(' ') << "\n\t";
+ t << "-$(DEL_FILE) " << escapeFilePaths(precomp_files).join(' ') << "\n\t";
}
if(src_incremental)
t << "-$(DEL_FILE) $(INCREMENTAL_OBJECTS)\n\t";
- t << varGlue("QMAKE_CLEAN","-$(DEL_FILE) "," ","\n\t")
+ t << fileVarGlue("QMAKE_CLEAN","-$(DEL_FILE) "," ","\n\t")
<< "-$(DEL_FILE) *~ core *.core\n"
- << varGlue("CLEAN_FILES","\t-$(DEL_FILE) "," ","") << endl << endl;
+ << fileVarGlue("CLEAN_FILES","\t-$(DEL_FILE) "," ","") << endl << endl;
ProString destdir = project->first("DESTDIR");
if (!destdir.isEmpty() && !destdir.endsWith(Option::dir_sep))
destdir += Option::dir_sep;
- t << "distclean: clean " << var("DISTCLEAN_DEPS") << '\n';
+ t << "distclean: clean " << depVar("DISTCLEAN_DEPS") << '\n';
if(!project->isEmpty("QMAKE_BUNDLE")) {
QString bundlePath = escapeFilePath(destdir + project->first("QMAKE_BUNDLE"));
t << "\t-$(DEL_FILE) -r " << bundlePath << endl;
} else if(project->isActiveConfig("compile_libtool")) {
t << "\t-$(LIBTOOL) --mode=clean $(DEL_FILE) $(TARGET)\n";
} else if (project->isActiveConfig("staticlib")) {
- t << "\t-$(DEL_FILE) " << destdir << "$(TARGET) \n";
+ t << "\t-$(DEL_FILE) " << escapeFilePath(destdir) << "$(TARGET) \n";
} else if (project->values("QMAKE_APP_FLAG").isEmpty() && !project->isActiveConfig("plugin")) {
+ destdir = escapeFilePath(destdir);
t << "\t-$(DEL_FILE) " << destdir << "$(TARGET) \n";
if (!project->isActiveConfig("unversioned_libname")) {
t << "\t-$(DEL_FILE) " << destdir << "$(TARGET0) " << destdir << "$(TARGET1) "
@@ -1023,11 +1054,11 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
} else {
t << "\t-$(DEL_FILE) $(TARGET) \n";
}
- t << varGlue("QMAKE_DISTCLEAN","\t-$(DEL_FILE) "," ","\n");
+ t << fileVarGlue("QMAKE_DISTCLEAN","\t-$(DEL_FILE) "," ","\n");
{
- QString ofile = Option::fixPathToTargetOS(fileFixify(Option::output.fileName()));
+ QString ofile = fileFixify(Option::output.fileName());
if(!ofile.isEmpty())
- t << "\t-$(DEL_FILE) " << ofile << endl;
+ t << "\t-$(DEL_FILE) " << escapeFilePath(ofile) << endl;
}
t << endl << endl;
@@ -1038,8 +1069,8 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
libdir = project->first("SUBLIBS_DIR");
const ProStringList &l = project->values("SUBLIBS");
for (it = l.begin(); it != l.end(); ++it)
- t << libdir << project->first("QMAKE_PREFIX_STATICLIB") << (*it) << "."
- << project->first("QMAKE_EXTENSION_STATICLIB") << ":\n\t"
+ t << escapeDependencyPath(libdir + project->first("QMAKE_PREFIX_STATICLIB") + (*it) + '.'
+ + project->first("QMAKE_EXTENSION_STATICLIB")) << ":\n\t"
<< var(ProKey("MAKELIB" + *it)) << endl << endl;
}
@@ -1069,13 +1100,15 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
if (project->isActiveConfig("icc_pch_style")) {
// icc style
QString sourceFile = pchOutput + Option::cpp_ext.first();
+ QString sourceFile_f = escapeFilePath(sourceFile);
QString objectFile = createObjectList(ProStringList(sourceFile)).first().toQString();
- t << pchOutput << ": " << pchInput << " " << findDependencies(pchInput).join(" \\\n\t\t")
- << "\n\techo \"// Automatically generated, do not modify\" > " << sourceFile
- << "\n\trm -f " << pchOutput;
+ t << escapeDependencyPath(pchOutput) << ": " << escapeDependencyPath(pchInput) << ' '
+ << escapeDependencyPaths(findDependencies(pchInput)).join(" \\\n\t\t")
+ << "\n\techo \"// Automatically generated, do not modify\" > " << sourceFile_f
+ << "\n\trm -f " << escapeFilePath(pchOutput);
- pchFlags.replace("${QMAKE_PCH_TEMP_SOURCE}", sourceFile)
- .replace("${QMAKE_PCH_TEMP_OBJECT}", objectFile);
+ pchFlags.replace("${QMAKE_PCH_TEMP_SOURCE}", sourceFile_f)
+ .replace("${QMAKE_PCH_TEMP_OBJECT}", escapeFilePath(objectFile));
} else {
// gcc style (including clang_pch_style)
ProString header_prefix = project->first("QMAKE_PRECOMP_PREFIX");
@@ -1098,12 +1131,13 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
continue;
pchOutput += header_prefix + pchOutputFile + header_suffix;
- t << pchOutput << ": " << pchInput << " " << findDependencies(pchInput).join(" \\\n\t\t")
+ t << escapeDependencyPath(pchOutput) << ": " << escapeDependencyPath(pchInput) << ' '
+ << escapeDependencyPaths(findDependencies(pchInput)).join(" \\\n\t\t")
<< "\n\t" << mkdir_p_asstring(pchOutputDir);
}
- pchFlags.replace("${QMAKE_PCH_INPUT}", pchInput)
- .replace("${QMAKE_PCH_OUTPUT_BASE}", pchBaseName.toQString())
- .replace("${QMAKE_PCH_OUTPUT}", pchOutput.toQString());
+ pchFlags.replace("${QMAKE_PCH_INPUT}", escapeFilePath(pchInput))
+ .replace("${QMAKE_PCH_OUTPUT_BASE}", escapeFilePath(pchBaseName.toQString()))
+ .replace("${QMAKE_PCH_OUTPUT}", escapeFilePath(pchOutput.toQString()));
QString compiler;
if(comps[i] == "C" || comps[i] == "OBJC" || comps[i] == "OBJCXX")
@@ -1166,11 +1200,11 @@ void UnixMakefileGenerator::init2()
if(!bundle_loc.endsWith("/"))
bundle_loc += "/";
project->values("TARGET_").append(project->first("QMAKE_BUNDLE") +
- bundle_loc + unescapeFilePath(project->first("TARGET")));
+ bundle_loc + project->first("TARGET"));
project->values("TARGET_x.y").append(project->first("QMAKE_BUNDLE") +
"/Versions/" +
project->first("QMAKE_FRAMEWORK_VERSION") +
- bundle_loc + unescapeFilePath(project->first("TARGET")));
+ bundle_loc + project->first("TARGET"));
} else if(project->isActiveConfig("plugin")) {
QString prefix;
if(!project->isActiveConfig("no_plugin_name_prefix"))
@@ -1363,7 +1397,7 @@ UnixMakefileGenerator::libtoolFileName(bool fixify)
if(fixify) {
if(QDir::isRelativePath(ret) && !project->isEmpty("DESTDIR"))
ret.prepend(project->first("DESTDIR").toQString());
- ret = Option::fixPathToLocalOS(fileFixify(ret, qmake_getpwd(), Option::output_dir));
+ ret = fileFixify(ret, qmake_getpwd(), Option::output_dir);
}
return ret;
}
@@ -1388,22 +1422,23 @@ UnixMakefileGenerator::writeLibtoolFile()
t << "\n";
t << "# The name that we can dlopen(3).\n"
- << "dlname='" << var(project->isActiveConfig("plugin") ? "TARGET" : "TARGET_x")
+ << "dlname='" << fileVar(project->isActiveConfig("plugin") ? "TARGET" : "TARGET_x")
<< "'\n\n";
t << "# Names of this library.\n";
t << "library_names='";
if(project->isActiveConfig("plugin")) {
- t << var("TARGET");
+ t << fileVar("TARGET");
} else {
if (project->isEmpty("QMAKE_HPUX_SHLIB"))
- t << var("TARGET_x.y.z") << " ";
- t << var("TARGET_x") << " " << var("TARGET_");
+ t << fileVar("TARGET_x.y.z") << ' ';
+ t << fileVar("TARGET_x") << ' ' << fileVar("TARGET_");
}
t << "'\n\n";
t << "# The name of the static archive.\n"
- << "old_library='" << lname.left(lname.length()-Option::libtool_ext.length()) << ".a'\n\n";
+ << "old_library='" << escapeFilePath(lname.left(lname.length()-Option::libtool_ext.length()))
+ << ".a'\n\n";
t << "# Libraries that this one depends upon.\n";
ProStringList libs;
@@ -1413,7 +1448,7 @@ UnixMakefileGenerator::writeLibtoolFile()
libs << "QMAKE_LIBS"; //obvious one
t << "dependency_libs='";
for (ProStringList::ConstIterator it = libs.begin(); it != libs.end(); ++it)
- t << project->values((*it).toKey()).join(' ') << " ";
+ t << fixLibFlags((*it).toKey()).join(' ') << ' ';
t << "'\n\n";
t << "# Version information for " << lname << "\n";
diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp
index 8aff6f93f3..af5e62330e 100644
--- a/qmake/generators/win32/mingw_make.cpp
+++ b/qmake/generators/win32/mingw_make.cpp
@@ -46,17 +46,12 @@ QT_BEGIN_NAMESPACE
MingwMakefileGenerator::MingwMakefileGenerator() : Win32MakefileGenerator()
{
- if (isWindowsShell())
- quote = "\"";
- else
- quote = "'";
}
QString MingwMakefileGenerator::escapeDependencyPath(const QString &path) const
{
QString ret = path;
- ret.remove('\"');
- ret.replace('\\', "/");
+ ret.replace('\\', "/"); // ### this shouldn't be here
ret.replace(' ', "\\ ");
return ret;
}
@@ -71,6 +66,13 @@ QString MingwMakefileGenerator::getManifestFileForRcFile() const
return project->first("QMAKE_MANIFEST").toQString();
}
+ProString MingwMakefileGenerator::fixLibFlag(const ProString &lib)
+{
+ if (lib.startsWith("lib"))
+ return QStringLiteral("-l") + escapeFilePath(lib.mid(3));
+ return escapeFilePath(lib);
+}
+
bool MingwMakefileGenerator::findLibraries()
{
QList<QMakeLocalFileName> dirs;
@@ -89,9 +91,9 @@ bool MingwMakefileGenerator::findLibraries()
if (ver > 0)
extension += QString::number(ver);
extension += suffix;
- if(QMakeMetaInfo::libExists((*dir_it).local() + Option::dir_sep + steam) ||
- exists((*dir_it).local() + Option::dir_sep + steam + extension + ".a") ||
- exists((*dir_it).local() + Option::dir_sep + steam + extension + ".dll.a")) {
+ if (QMakeMetaInfo::libExists((*dir_it).local() + '/' + steam)
+ || exists((*dir_it).local() + '/' + steam + extension + ".a")
+ || exists((*dir_it).local() + '/' + steam + extension + ".dll.a")) {
out = *it + extension;
break;
}
@@ -99,7 +101,9 @@ bool MingwMakefileGenerator::findLibraries()
if (!out.isEmpty()) // We assume if it never finds it that its correct
(*it) = out;
} else if ((*it).startsWith("-L")) {
- dirs.append(QMakeLocalFileName((*it).mid(2).toQString()));
+ QMakeLocalFileName f((*it).mid(2).toQString());
+ dirs.append(f);
+ *it = "-L" + f.real();
}
++it;
@@ -124,7 +128,7 @@ bool MingwMakefileGenerator::writeMakefile(QTextStream &t)
t << "QMAKE = " << var("QMAKE_QMAKE") << endl;
const ProStringList &qut = project->values("QMAKE_EXTRA_TARGETS");
for (ProStringList::ConstIterator it = qut.begin(); it != qut.end(); ++it)
- t << *it << " ";
+ t << escapeDependencyPath(*it) << ' ';
t << "first all clean install distclean uninstall: qmake\n"
<< "qmake_all:\n";
writeMakeQmake(t);
@@ -150,6 +154,7 @@ void createLdObjectScriptFile(const QString &fileName, const ProStringList &objL
t << "INPUT(\n";
for (ProStringList::ConstIterator it = objList.constBegin(); it != objList.constEnd(); ++it) {
QString path = (*it).toQString();
+ // ### quoting?
if (QDir::isRelativePath(path))
t << "./" << path << endl;
else
@@ -167,6 +172,7 @@ void createArObjectScriptFile(const QString &fileName, const QString &target, co
QFile file(filePath);
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream t(&file);
+ // ### quoting?
t << "CREATE " << target << endl;
for (ProStringList::ConstIterator it = objList.constBegin(); it != objList.constEnd(); ++it) {
t << "ADDMOD " << *it << endl;
@@ -185,6 +191,7 @@ void createRvctObjectScriptFile(const QString &fileName, const ProStringList &ob
QTextStream t(&file);
for (ProStringList::ConstIterator it = objList.constBegin(); it != objList.constEnd(); ++it) {
QString path = (*it).toQString();
+ // ### quoting?
if (QDir::isRelativePath(path))
t << "./" << path << endl;
else
@@ -205,14 +212,14 @@ void MingwMakefileGenerator::writeMingwParts(QTextStream &t)
t << escapeDependencyPath(cHeader) << ": " << escapeDependencyPath(header) << " "
<< escapeDependencyPaths(findDependencies(header)).join(" \\\n\t\t")
<< "\n\t" << mkdir_p_asstring(preCompHeaderOut)
- << "\n\t$(CC) -x c-header -c $(CFLAGS) $(INCPATH) -o " << cHeader << " " << header
- << endl << endl;
+ << "\n\t$(CC) -x c-header -c $(CFLAGS) $(INCPATH) -o " << escapeFilePath(cHeader)
+ << ' ' << escapeFilePath(header) << endl << endl;
QString cppHeader = preCompHeaderOut + Option::dir_sep + "c++";
t << escapeDependencyPath(cppHeader) << ": " << escapeDependencyPath(header) << " "
<< escapeDependencyPaths(findDependencies(header)).join(" \\\n\t\t")
<< "\n\t" << mkdir_p_asstring(preCompHeaderOut)
- << "\n\t$(CXX) -x c++-header -c $(CXXFLAGS) $(INCPATH) -o " << cppHeader << " " << header
- << endl << endl;
+ << "\n\t$(CXX) -x c++-header -c $(CXXFLAGS) $(INCPATH) -o " << escapeFilePath(cppHeader)
+ << ' ' << escapeFilePath(header) << endl << endl;
}
}
@@ -246,9 +253,7 @@ void MingwMakefileGenerator::init()
processVars();
- if (!project->values("RES_FILE").isEmpty()) {
- project->values("QMAKE_LIBS") += escapeFilePaths(project->values("RES_FILE"));
- }
+ project->values("QMAKE_LIBS") += project->values("RES_FILE");
if (project->isActiveConfig("dll")) {
QString destDir = "";
@@ -256,7 +261,7 @@ void MingwMakefileGenerator::init()
destDir = Option::fixPathToTargetOS(project->first("DESTDIR") + Option::dir_sep, false, false);
project->values("MINGW_IMPORT_LIB").prepend(destDir + "lib" + project->first("TARGET")
+ project->first("TARGET_VERSION_EXT") + ".a");
- project->values("QMAKE_LFLAGS").append(QString("-Wl,--out-implib,") + project->first("MINGW_IMPORT_LIB"));
+ project->values("QMAKE_LFLAGS").append(QString("-Wl,--out-implib,") + fileVar("MINGW_IMPORT_LIB"));
}
if (!project->values("DEF_FILE").isEmpty()) {
@@ -278,6 +283,7 @@ void MingwMakefileGenerator::init()
project->values("QMAKE_CLEAN").append(preCompHeaderOut + Option::dir_sep + "c");
project->values("QMAKE_CLEAN").append(preCompHeaderOut + Option::dir_sep + "c++");
+ preCompHeader = escapeFilePath(preCompHeader);
project->values("QMAKE_RUN_CC").clear();
project->values("QMAKE_RUN_CC").append("$(CC) -c -include " + preCompHeader +
" $(CFLAGS) $(INCPATH) " + var("QMAKE_CC_O_FLAG") + "$obj $src");
@@ -306,13 +312,12 @@ void MingwMakefileGenerator::writeIncPart(QTextStream &t)
for (ProStringList::ConstIterator incit = incs.begin(); incit != incs.end(); ++incit) {
QString inc = (*incit).toQString();
inc.replace(QRegExp("\\\\$"), "");
- inc.replace(QRegExp("\""), "");
if (!isystem.isEmpty() && isSystemInclude(inc))
t << isystem << ' ';
else
t << "-I";
- t << quote << inc << quote << " ";
+ t << escapeFilePath(inc) << ' ';
}
t << endl;
}
@@ -325,8 +330,8 @@ void MingwMakefileGenerator::writeLibsPart(QTextStream &t)
t << "LINKER = " << var("QMAKE_LINK") << endl;
t << "LFLAGS = " << var("QMAKE_LFLAGS") << endl;
t << "LIBS = "
- << var("QMAKE_LIBS").replace(QRegExp("(\\slib|^lib)")," -l") << ' '
- << var("QMAKE_LIBS_PRIVATE").replace(QRegExp("(\\slib|^lib)")," -l") << endl;
+ << fixLibFlags("QMAKE_LIBS").join(' ') << ' '
+ << fixLibFlags("QMAKE_LIBS_PRIVATE").join(' ') << endl;
}
}
@@ -345,7 +350,7 @@ void MingwMakefileGenerator::writeObjectsPart(QTextStream &t)
QString ar_cmd = project->values("QMAKE_LIB").join(' ');
if (ar_cmd.isEmpty())
ar_cmd = "armar --create";
- objectsLinkLine = ar_cmd + " " + var("DEST_TARGET") + " --via " + escapeFilePath(ar_script_file);
+ objectsLinkLine = ar_cmd + ' ' + fileVar("DEST_TARGET") + " --via " + escapeFilePath(ar_script_file);
} else {
// Strip off any options since the ar commands will be read from file.
QString ar_cmd = var("QMAKE_LIB").section(" ", 0, 0);;
@@ -373,8 +378,9 @@ void MingwMakefileGenerator::writeObjectsPart(QTextStream &t)
void MingwMakefileGenerator::writeBuildRulesPart(QTextStream &t)
{
t << "first: all\n";
- t << "all: " << escapeDependencyPath(fileFixify(Option::output.fileName())) << " " << valGlue(escapeDependencyPaths(project->values("ALL_DEPS"))," "," "," ") << " $(DESTDIR_TARGET)\n\n";
- t << "$(DESTDIR_TARGET): " << var("PRE_TARGETDEPS") << " $(OBJECTS) " << var("POST_TARGETDEPS");
+ t << "all: " << escapeDependencyPath(fileFixify(Option::output.fileName()))
+ << ' ' << depVar("ALL_DEPS") << " $(DESTDIR_TARGET)\n\n";
+ t << "$(DESTDIR_TARGET): " << depVar("PRE_TARGETDEPS") << " $(OBJECTS) " << depVar("POST_TARGETDEPS");
if(!project->isEmpty("QMAKE_PRE_LINK"))
t << "\n\t" <<var("QMAKE_PRE_LINK");
if(project->isActiveConfig("staticlib") && project->first("TEMPLATE") == "lib") {
@@ -409,8 +415,8 @@ void MingwMakefileGenerator::writeRcFilePart(QTextStream &t)
}
if (!rc_file.isEmpty()) {
- t << escapeDependencyPath(var("RES_FILE")) << ": " << rc_file << "\n\t"
- << var("QMAKE_RC") << " -i " << rc_file << " -o " << var("RES_FILE")
+ t << escapeDependencyPath(var("RES_FILE")) << ": " << escapeDependencyPath(rc_file) << "\n\t"
+ << var("QMAKE_RC") << " -i " << escapeFilePath(rc_file) << " -o " << fileVar("RES_FILE")
<< incPathStr << " $(DEFINES)\n\n";
}
}
diff --git a/qmake/generators/win32/mingw_make.h b/qmake/generators/win32/mingw_make.h
index a29442c916..e76391080c 100644
--- a/qmake/generators/win32/mingw_make.h
+++ b/qmake/generators/win32/mingw_make.h
@@ -45,6 +45,8 @@ public:
~MingwMakefileGenerator();
protected:
QString escapeDependencyPath(const QString &path) const;
+ ProString escapeDependencyPath(const ProString &path) const { return MakefileGenerator::escapeDependencyPath(path); }
+ virtual ProString fixLibFlag(const ProString &lib);
QString getLibTarget();
virtual QString getManifestFileForRcFile() const;
bool writeMakefile(QTextStream &);
@@ -64,7 +66,6 @@ private:
virtual bool findLibraries();
QString objectsLinkLine;
- QString quote;
};
inline MingwMakefileGenerator::~MingwMakefileGenerator()
diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp
index a6ca07efee..3bb70c5c19 100644
--- a/qmake/generators/win32/msbuild_objectmodel.cpp
+++ b/qmake/generators/win32/msbuild_objectmodel.cpp
@@ -1900,11 +1900,11 @@ bool VCXProjectWriter::outputFileConfig(OutputFilterData *d, XmlOutput &xml, Xml
fileAdded = true;
xmlFilter << tag("CustomBuild")
- << attrTag("Include",Option::fixPathToLocalOS(filename))
+ << attrTag("Include", Option::fixPathToTargetOS(filename))
<< attrTagS("Filter", filter.Name);
xml << tag("CustomBuild")
- << attrTag("Include",Option::fixPathToLocalOS(filename));
+ << attrTag("Include", Option::fixPathToTargetOS(filename));
if (filter.Name.startsWith("Form Files")
|| filter.Name.startsWith("Generated Files")
@@ -1963,7 +1963,7 @@ bool VCXProjectWriter::outputFileConfig(OutputFilterData *d, XmlOutput &xml, Xml
void VCXProjectWriter::outputFileConfig(XmlOutput &xml, XmlOutput &xmlFilter,
const QString &filePath, const QString &filterName)
{
- const QString nativeFilePath = Option::fixPathToLocalOS(filePath);
+ const QString nativeFilePath = Option::fixPathToTargetOS(filePath);
if (filterName.startsWith("Source Files")) {
xmlFilter << tag("ClCompile")
<< attrTag("Include", nativeFilePath)
diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp
index bd17b6c528..ae888cb96d 100644
--- a/qmake/generators/win32/msvc_nmake.cpp
+++ b/qmake/generators/win32/msvc_nmake.cpp
@@ -252,23 +252,21 @@ QString NmakeMakefileGenerator::defaultInstall(const QString &t)
const QString root = "$(INSTALL_ROOT)";
ProStringList &uninst = project->values(ProKey(t + ".uninstall"));
- QString targetdir = Option::fixPathToTargetOS(project->first(ProKey(t + ".path")).toQString(), false);
- targetdir = fileFixify(targetdir, FileFixifyAbsolute);
+ QString targetdir = fileFixify(project->first(ProKey(t + ".path")).toQString(), FileFixifyAbsolute);
if(targetdir.right(1) != Option::dir_sep)
targetdir += Option::dir_sep;
if (project->isActiveConfig("debug_info")) {
if (t == "dlltarget" || project->values(ProKey(t + ".CONFIG")).indexOf("no_dll") == -1) {
QString pdb_target = getPdbTarget();
- pdb_target.remove('"');
QString src_targ = (project->isEmpty("DESTDIR") ? QString("$(DESTDIR)") : project->first("DESTDIR")) + pdb_target;
QString dst_targ = filePrefixRoot(root, fileFixify(targetdir + pdb_target, FileFixifyAbsolute));
if(!ret.isEmpty())
ret += "\n\t";
- ret += QString("-$(INSTALL_FILE)") + " \"" + src_targ + "\" \"" + dst_targ + "\"";
+ ret += QString("-$(INSTALL_FILE) ") + escapeFilePath(src_targ) + ' ' + escapeFilePath(dst_targ);
if(!uninst.isEmpty())
uninst.append("\n\t");
- uninst.append("-$(DEL_FILE) \"" + dst_targ + "\"");
+ uninst.append("-$(DEL_FILE) " + escapeFilePath(dst_targ));
}
}
@@ -294,9 +292,12 @@ void NmakeMakefileGenerator::writeNmakeParts(QTextStream &t)
// precompiled header
if(usePCH) {
- QString precompRule = QString("-c -Yc -Fp%1 -Fo%2").arg(precompPch).arg(precompObj);
- t << precompObj << ": " << precompH << " " << escapeDependencyPaths(findDependencies(precompH)).join(" \\\n\t\t")
- << "\n\t$(CXX) " + precompRule +" $(CXXFLAGS) $(INCPATH) -TP " << precompH << endl << endl;
+ QString precompRule = QString("-c -Yc -Fp%1 -Fo%2")
+ .arg(escapeFilePath(precompPch), escapeFilePath(precompObj));
+ t << escapeDependencyPath(precompObj) << ": " << escapeDependencyPath(precompH) << ' '
+ << escapeDependencyPaths(findDependencies(precompH)).join(" \\\n\t\t")
+ << "\n\t$(CXX) " + precompRule +" $(CXXFLAGS) $(INCPATH) -TP "
+ << escapeFilePath(precompH) << endl << endl;
}
}
@@ -307,10 +308,9 @@ QString NmakeMakefileGenerator::var(const ProKey &value) const
|| value == "QMAKE_RUN_CXX_IMP"
|| value == "QMAKE_RUN_CXX")) {
QFileInfo precompHInfo(fileInfo(precompH));
+ QString precompH_f = escapeFilePath(precompHInfo.fileName());
QString precompRule = QString("-c -FI%1 -Yu%2 -Fp%3")
- .arg(precompHInfo.fileName())
- .arg(precompHInfo.fileName())
- .arg(precompPch);
+ .arg(precompH_f, precompH_f, escapeFilePath(precompPch));
QString p = MakefileGenerator::var(value);
p.replace("-c", precompRule);
// Cannot use -Gm with -FI & -Yu, as this gives an
@@ -357,9 +357,7 @@ void NmakeMakefileGenerator::init()
processVars();
- if (!project->values("RES_FILE").isEmpty()) {
- project->values("QMAKE_LIBS") += escapeFilePaths(project->values("RES_FILE"));
- }
+ project->values("QMAKE_LIBS") += project->values("RES_FILE");
if (!project->values("DEF_FILE").isEmpty()) {
QString defFileName = fileFixify(project->first("DEF_FILE").toQString());
@@ -502,11 +500,15 @@ void NmakeMakefileGenerator::writeImplicitRulesPart(QTextStream &t)
if (objDir == ".\\")
objDir = "";
for(QStringList::Iterator cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit)
- t << "{" << sourceDir << "}" << (*cppit) << "{" << objDir << "}" << Option::obj_ext << "::\n\t"
- << var("QMAKE_RUN_CXX_IMP_BATCH").replace(QRegExp("\\$@"), var("OBJECTS_DIR")) << endl << "\t$<\n<<\n\n";
+ t << '{' << escapeDependencyPath(sourceDir) << '}' << (*cppit)
+ << '{' << escapeDependencyPath(objDir) << '}' << Option::obj_ext << "::\n\t"
+ << var("QMAKE_RUN_CXX_IMP_BATCH").replace(QRegExp("\\$@"), fileVar("OBJECTS_DIR"))
+ << "\n\t$<\n<<\n\n";
for(QStringList::Iterator cit = Option::c_ext.begin(); cit != Option::c_ext.end(); ++cit)
- t << "{" << sourceDir << "}" << (*cit) << "{" << objDir << "}" << Option::obj_ext << "::\n\t"
- << var("QMAKE_RUN_CC_IMP_BATCH").replace(QRegExp("\\$@"), var("OBJECTS_DIR")) << endl << "\t$<\n<<\n\n";
+ t << '{' << escapeDependencyPath(sourceDir) << '}' << (*cit)
+ << '{' << escapeDependencyPath(objDir) << '}' << Option::obj_ext << "::\n\t"
+ << var("QMAKE_RUN_CC_IMP_BATCH").replace(QRegExp("\\$@"), fileVar("OBJECTS_DIR"))
+ << "\n\t$<\n<<\n\n";
}
} else {
for(QStringList::Iterator cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit)
@@ -522,8 +524,9 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t)
const ProString templateName = project->first("TEMPLATE");
t << "first: all\n";
- t << "all: " << fileFixify(Option::output.fileName()) << " " << varGlue("ALL_DEPS"," "," "," ") << "$(DESTDIR_TARGET)\n\n";
- t << "$(DESTDIR_TARGET): " << var("PRE_TARGETDEPS") << " $(OBJECTS) " << var("POST_TARGETDEPS");
+ t << "all: " << escapeDependencyPath(fileFixify(Option::output.fileName()))
+ << ' ' << depVar("ALL_DEPS") << " $(DESTDIR_TARGET)\n\n";
+ t << "$(DESTDIR_TARGET): " << depVar("PRE_TARGETDEPS") << " $(OBJECTS) " << depVar("POST_TARGETDEPS");
if(!project->isEmpty("QMAKE_PRE_LINK"))
t << "\n\t" <<var("QMAKE_PRE_LINK");
@@ -547,12 +550,12 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t)
if (linkerSupportsEmbedding) {
extraLFlags = "/MANIFEST:embed";
} else {
- manifest = escapeFilePath(target + ".embed.manifest");
- extraLFlags += "/MANIFEST /MANIFESTFILE:" + manifest;
+ manifest = target + ".embed.manifest";
+ extraLFlags += "/MANIFEST /MANIFESTFILE:" + escapeFilePath(manifest);
project->values("QMAKE_CLEAN") << manifest;
}
} else {
- manifest = escapeFilePath(fileFixify(manifest));
+ manifest = fileFixify(manifest);
}
const QString resourceId = (templateName == "app") ? "1" : "2";
@@ -560,16 +563,19 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t)
if (incrementalLinking && !linkerSupportsEmbedding) {
// Link a resource that contains the manifest without modifying the exe/dll after linking.
- QString manifest_rc = escapeFilePath(target + "_manifest.rc");
- QString manifest_res = escapeFilePath(target + "_manifest.res");
- QString manifest_bak = escapeFilePath(target + "_manifest.bak");
+ QString manifest_rc = target + "_manifest.rc";
+ QString manifest_res = target + "_manifest.res";
project->values("QMAKE_CLEAN") << manifest_rc << manifest_res;
+ manifest_rc = escapeFilePath(manifest_rc);
+ manifest_res = escapeFilePath(manifest_res);
t << "\n\techo " << resourceId
<< " /* CREATEPROCESS_MANIFEST_RESOURCE_ID */ 24 /* RT_MANIFEST */ "
- << cQuoted(unescapeFilePath(manifest)) << ">" << manifest_rc;
+ << cQuoted(manifest) << '>' << manifest_rc;
if (generateManifest) {
+ manifest = escapeFilePath(manifest);
+ QString manifest_bak = escapeFilePath(target + "_manifest.bak");
t << "\n\tif not exist $(DESTDIR_TARGET) if exist " << manifest
<< " del " << manifest;
t << "\n\tif exist " << manifest << " copy /Y " << manifest << ' ' << manifest_bak;
@@ -591,7 +597,7 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t)
t << "\n\t";
writeLinkCommand(t, extraLFlags);
if (!linkerSupportsEmbedding) {
- t << "\n\tmt.exe /nologo /manifest " << manifest
+ t << "\n\tmt.exe /nologo /manifest " << escapeFilePath(manifest)
<< " /outputresource:$(DESTDIR_TARGET);" << resourceId;
}
}
@@ -604,7 +610,7 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t)
bool useSignature = !signature.isEmpty() && !project->isActiveConfig("staticlib") &&
!project->isEmpty("CE_SDK") && !project->isEmpty("CE_ARCH");
if(useSignature) {
- t << "\n\tsigntool sign /F " << signature << " $(DESTDIR_TARGET)";
+ t << "\n\tsigntool sign /F " << escapeFilePath(signature) << " $(DESTDIR_TARGET)";
}
if(!project->isEmpty("QMAKE_POST_LINK")) {
t << "\n\t" << var("QMAKE_POST_LINK");
diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp
index 28a67d9902..4a65d24687 100644
--- a/qmake/generators/win32/msvc_objectmodel.cpp
+++ b/qmake/generators/win32/msvc_objectmodel.cpp
@@ -2295,9 +2295,8 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info)
QString cmd, cmd_name, out;
QStringList deps, inputs;
// Variabel replacement of output name
- out = Option::fixPathToTargetOS(
- Project->replaceExtraCompilerVariables(tmp_out, inFile, QString()),
- false);
+ out = Option::fixPathToTargetOS(Project->replaceExtraCompilerVariables(
+ tmp_out, inFile, QString(), MakefileGenerator::NoShell), false);
// If file has built-in compiler, we've swapped the input and output of
// the command, as we in Visual Studio cannot have a Custom Buildstep on
@@ -2318,9 +2317,8 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info)
if (!tmp_dep_cmd.isEmpty()) {
// Execute dependency command, and add every line as a dep
char buff[256];
- QString dep_cmd = Project->replaceExtraCompilerVariables(tmp_dep_cmd,
- Option::fixPathToLocalOS(inFile, true, false),
- out);
+ QString dep_cmd = Project->replaceExtraCompilerVariables(
+ tmp_dep_cmd, inFile, out, MakefileGenerator::LocalShell);
if(Project->canExecute(dep_cmd)) {
dep_cmd.prepend(QLatin1String("cd ")
+ Project->escapeFilePath(Option::fixPathToLocalOS(Option::output_dir, false))
@@ -2347,8 +2345,9 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info)
}
for (int i = 0; i < deps.count(); ++i)
deps[i] = Option::fixPathToTargetOS(
- Project->replaceExtraCompilerVariables(deps.at(i), inFile, out),
- false).trimmed();
+ Project->replaceExtraCompilerVariables(
+ deps.at(i), inFile, out, MakefileGenerator::NoShell),
+ false);
// Command for file
if (combined) {
// Add dependencies for each file
@@ -2364,28 +2363,27 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info)
deps = inputs + deps; // input files themselves too..
// Replace variables for command w/all input files
- // ### join gives path issues with directories containing spaces!
cmd = Project->replaceExtraCompilerVariables(tmp_cmd,
- inputs.join(' '),
- out);
+ inputs,
+ QStringList(out),
+ MakefileGenerator::TargetShell);
} else {
deps.prepend(inFile); // input file itself too..
cmd = Project->replaceExtraCompilerVariables(tmp_cmd,
inFile,
- out);
+ out,
+ MakefileGenerator::TargetShell);
}
// Name for command
if (!tmp_cmd_name.isEmpty()) {
- cmd_name = Project->replaceExtraCompilerVariables(tmp_cmd_name, inFile, out);
+ cmd_name = Project->replaceExtraCompilerVariables(
+ tmp_cmd_name, inFile, out, MakefileGenerator::NoShell);
} else {
int space = cmd.indexOf(' ');
if (space != -1)
cmd_name = cmd.left(space);
else
cmd_name = cmd;
- if ((cmd_name[0] == '\'' || cmd_name[0] == '"') &&
- cmd_name[0] == cmd_name[cmd_name.length()-1])
- cmd_name = cmd_name.mid(1,cmd_name.length()-2);
}
// Fixify paths
@@ -2903,7 +2901,7 @@ void VCProjectWriter::write(XmlOutput &xml, VCFilter &tool)
for (int i = 0; i < tool.Files.count(); ++i) {
const VCFilterFile &info = tool.Files.at(i);
xml << tag(q_File)
- << attrS(_RelativePath, Option::fixPathToLocalOS(info.file))
+ << attrS(_RelativePath, Option::fixPathToTargetOS(info.file))
<< data(); // In case no custom builds, to avoid "/>" endings
outputFileConfig(tool, xml, tool.Files.at(i).file);
xml << closetag(q_File);
@@ -2962,7 +2960,7 @@ void VCProjectWriter::outputFilter(VCProject &project, XmlOutput &xml, const QSt
void VCProjectWriter::outputFileConfigs(VCProject &project, XmlOutput &xml, const VCFilterFile &info, const QString &filtername)
{
xml << tag(q_File)
- << attrS(_RelativePath, Option::fixPathToLocalOS(info.file));
+ << attrS(_RelativePath, Option::fixPathToTargetOS(info.file));
for (int i = 0; i < project.SingleProjects.count(); ++i) {
VCFilter filter = project.SingleProjects.at(i).filterByName(filtername);
if (filter.Config) // only if the filter is not empty
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index 64252ff076..57557732c5 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -324,7 +324,8 @@ QUuid VcprojGenerator::getProjectUUID(const QString &filename)
// If none, create one based on the MD5 of absolute project path
if(uuid.isNull() || !filename.isEmpty()) {
- QString abspath = Option::fixPathToLocalOS(filename.isEmpty()?project->first("QMAKE_MAKEFILE").toQString():filename);
+ QString abspath = Option::fixPathToTargetOS(
+ filename.isEmpty() ? project->first("QMAKE_MAKEFILE").toQString() : filename);
QByteArray digest = QCryptographicHash::hash(abspath.toUtf8(), QCryptographicHash::Sha1);
memcpy((unsigned char*)(&uuid), digest.constData(), sizeof(QUuid));
validUUID = !uuid.isNull();
@@ -457,14 +458,14 @@ ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QSt
while (collectedIt.hasNext()) {
QPair<QString, ProStringList> subdir = collectedIt.next();
QString profile = subdir.first;
- QFileInfo fi(fileInfo(Option::fixPathToLocalOS(profile, true)));
+ QFileInfo fi(fileInfo(Option::normalizePath(profile)));
if (fi.exists()) {
if (fi.isDir()) {
if (!profile.endsWith(Option::dir_sep))
profile += Option::dir_sep;
profile += fi.baseName() + Option::pro_ext;
QString profileKey = fi.absoluteFilePath();
- fi = QFileInfo(fileInfo(Option::fixPathToLocalOS(profile, true)));
+ fi = QFileInfo(fileInfo(Option::normalizePath(profile)));
if (!fi.exists())
continue;
projLookup.insert(profileKey, fi.absoluteFilePath());
@@ -505,7 +506,7 @@ ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QSt
Option::qmake_mode = old_mode;
// We assume project filename is [QMAKE_PROJECT_NAME].vcproj
- QString vcproj = unescapeFilePath(tmp_vcproj.project->first("QMAKE_PROJECT_NAME") + project->first("VCPROJ_EXTENSION"));
+ QString vcproj = tmp_vcproj.project->first("QMAKE_PROJECT_NAME") + project->first("VCPROJ_EXTENSION");
QString vcprojDir = qmake_getpwd();
// If file doesn't exsist, then maybe the users configuration
@@ -535,7 +536,7 @@ ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QSt
VcsolutionDepend *newDep = new VcsolutionDepend;
newDep->vcprojFile = vcprojDir + Option::dir_sep + vcproj;
- newDep->orig_target = unescapeFilePath(tmp_proj.first("QMAKE_ORIG_TARGET")).toQString();
+ newDep->orig_target = tmp_proj.first("QMAKE_ORIG_TARGET").toQString();
newDep->target = tmp_proj.first("MSVCPROJ_TARGET").toQString().section(Option::dir_sep, -1);
newDep->targetType = tmp_vcproj.projectTarget;
newDep->uuid = tmp_proj.isEmpty("QMAKE_UUID") ? getProjectUUID(Option::fixPathToLocalOS(vcprojDir + QDir::separator() + vcproj)).toString().toUpper(): tmp_proj.first("QMAKE_UUID").toQString();
@@ -671,6 +672,7 @@ void VcprojGenerator::writeSubDirs(QTextStream &t)
// write out projects
for (QList<VcsolutionDepend*>::Iterator it = solution_cleanup.begin(); it != solution_cleanup.end(); ++it) {
+ // ### quoting rules?
t << _slnProjectBeg << _slnMSVCvcprojGUID << _slnProjectMid
<< "\"" << (*it)->orig_target << "\", \"" << (*it)->vcprojFile
<< "\", \"" << (*it)->uuid << "\"";
@@ -799,9 +801,7 @@ void VcprojGenerator::init()
const ProStringList &incs = project->values("INCLUDEPATH");
for (ProStringList::ConstIterator incit = incs.begin(); incit != incs.end(); ++incit) {
QString inc = (*incit).toQString();
- if (!inc.startsWith('"') && !inc.endsWith('"'))
- inc = QString("\"%1\"").arg(inc); // Quote all paths if not quoted already
- project->values("MSVCPROJ_INCPATH").append("-I" + inc);
+ project->values("MSVCPROJ_INCPATH").append("-I" + escapeFilePath(inc));
}
QString dest = Option::fixPathToTargetOS(project->first("TARGET").toQString()) + project->first("TARGET_EXT");
@@ -815,7 +815,7 @@ void VcprojGenerator::init()
for (dlldir = dlldirs.begin(); dlldir != dlldirs.end(); ++dlldir) {
if (!copydll.isEmpty())
copydll += " && ";
- copydll += "copy \"$(TargetPath)\" \"" + *dlldir + "\"";
+ copydll += "copy \"$(TargetPath)\" " + escapeFilePath(*dlldir);
}
QString deststr("Copy " + dest + " to ");
@@ -842,8 +842,7 @@ void VcprojGenerator::init()
projectTarget = Application;
} else if(project->first("TEMPLATE") == "vclib") {
if(project->isActiveConfig("staticlib")) {
- if (!project->values("RES_FILE").isEmpty())
- project->values("QMAKE_LIBS") += escapeFilePaths(project->values("RES_FILE"));
+ project->values("QMAKE_LIBS") += project->values("RES_FILE");
projectTarget = StaticLib;
} else
projectTarget = SharedLib;
@@ -856,7 +855,7 @@ void VcprojGenerator::init()
if (usePCH) {
precompHFilename = fileInfo(precompH).fileName();
// Created files
- QString origTarget = unescapeFilePath(project->first("QMAKE_ORIG_TARGET").toQString());
+ QString origTarget = project->first("QMAKE_ORIG_TARGET").toQString();
precompObj = origTarget + Option::obj_ext;
precompPch = origTarget + ".pch";
// Add PRECOMPILED_HEADER to HEADERS
@@ -893,7 +892,7 @@ void VcprojGenerator::init()
extraCompilerSources[file] += quc.toQString();
} else {
QString out = Option::fixPathToTargetOS(replaceExtraCompilerVariables(
- compiler_out, file, QString()), false);
+ compiler_out, file, QString(), NoShell), false);
extraCompilerSources[out] += quc.toQString();
extraCompilerOutputs[out] = QStringList(file); // Can only have one
}
@@ -947,7 +946,7 @@ void VcprojGenerator::initProject()
initExtraCompilerOutputs();
// Own elements -----------------------------
- vcProject.Name = unescapeFilePath(project->first("QMAKE_ORIG_TARGET").toQString());
+ vcProject.Name = project->first("QMAKE_ORIG_TARGET").toQString();
switch (which_dotnet_version(project->first("MSVC_VER").toLatin1())) {
case NET2013:
vcProject.Version = "12.00";
@@ -1179,7 +1178,7 @@ void VcprojGenerator::initLinkerTool()
ProStringList l = ProStringList(libs);
conf.linker.parseOptions(l);
} else {
- conf.linker.AdditionalDependencies += libs.toQString();
+ conf.linker.AdditionalDependencies << escapeFilePath(libs.toQString());
}
}
@@ -1239,7 +1238,7 @@ void VcprojGenerator::initPostBuildEventTools()
!project->isHostBuild() && !project->isEmpty("CE_SDK") && !project->isEmpty("CE_ARCH");
if (useSignature) {
conf.postBuild.CommandLine.prepend(
- QLatin1String("signtool sign /F ") + signature + QLatin1String(" \"$(TargetPath)\""));
+ QLatin1String("signtool sign /F ") + escapeFilePath(signature) + QLatin1String(" \"$(TargetPath)\""));
conf.postBuild.ExcludedFromBuild = _False;
}
@@ -1346,13 +1345,13 @@ void VcprojGenerator::initDeploymentTool()
|| devicePath.at(0) == QLatin1Char('\\')
|| devicePath.at(0) == QLatin1Char('%'))) {
// create output path
- devicePath = Option::fixPathToLocalOS(QDir::cleanPath(targetPath + QLatin1Char('\\') + devicePath));
+ devicePath = Option::fixPathToTargetOS(targetPath + QLatin1Char('\\') + devicePath);
}
}
// foreach d in item.files
foreach (const ProString &src, project->values(ProKey(item + ".files"))) {
QString itemDevicePath = devicePath;
- QString source = Option::fixPathToLocalOS(src.toQString());
+ QString source = Option::normalizePath(src.toQString());
QString nameFilter;
QFileInfo info(source);
QString searchPath;
@@ -1361,7 +1360,7 @@ void VcprojGenerator::initDeploymentTool()
itemDevicePath += "\\" + info.fileName();
searchPath = info.absoluteFilePath();
} else {
- nameFilter = source.split('\\').last();
+ nameFilter = info.fileName();
searchPath = info.absolutePath();
}
@@ -1373,10 +1372,10 @@ void VcprojGenerator::initDeploymentTool()
while(iterator.hasNext()) {
iterator.next();
if (conf.WinRT) {
- QString absoluteItemFilePath = Option::fixPathToLocalOS(QFileInfo(iterator.filePath()).absoluteFilePath());
+ QString absoluteItemFilePath = Option::fixPathToTargetOS(QFileInfo(iterator.filePath()).absoluteFilePath());
vcProject.DeploymentFiles.addFile(absoluteItemFilePath);
} else {
- QString absoluteItemPath = Option::fixPathToLocalOS(QFileInfo(iterator.filePath()).absolutePath());
+ QString absoluteItemPath = Option::fixPathToTargetOS(QFileInfo(iterator.filePath()).absolutePath());
// Identify if it is just another subdir
int diffSize = absoluteItemPath.size() - pathSize;
// write out rules
@@ -1532,7 +1531,8 @@ void VcprojGenerator::initResourceFiles()
if(!qrc_files.isEmpty()) {
for (int i = 0; i < qrc_files.count(); ++i) {
char buff[256];
- QString dep_cmd = replaceExtraCompilerVariables(rcc_dep_cmd, qrc_files.at(i).toQString(), "");
+ QString dep_cmd = replaceExtraCompilerVariables(
+ rcc_dep_cmd, qrc_files.at(i).toQString(), QString(), LocalShell);
dep_cmd = Option::fixPathToLocalOS(dep_cmd, true, false);
if(canExecute(dep_cmd)) {
@@ -1605,16 +1605,16 @@ void VcprojGenerator::initExtraCompilerOutputs()
QString tmp_out = project->first(ProKey(*it + ".output")).toQString();
if (project->values(ProKey(*it + ".CONFIG")).indexOf("combine") != -1) {
// Combined output, only one file result
- extraCompile.addFile(
- Option::fixPathToTargetOS(replaceExtraCompilerVariables(tmp_out, QString(), QString()), false));
+ extraCompile.addFile(Option::fixPathToTargetOS(
+ replaceExtraCompilerVariables(tmp_out, QString(), QString(), NoShell), false));
} else {
// One output file per input
const ProStringList &tmp_in = project->values(project->first(ProKey(*it + ".input")).toKey());
for (int i = 0; i < tmp_in.count(); ++i) {
const QString &filename = tmp_in.at(i).toQString();
if (extraCompilerSources.contains(filename))
- extraCompile.addFile(
- Option::fixPathToTargetOS(replaceExtraCompilerVariables(filename, tmp_out, QString()), false));
+ extraCompile.addFile(Option::fixPathToTargetOS(
+ replaceExtraCompilerVariables(filename, tmp_out, QString(), NoShell), false));
}
}
} else {
@@ -1629,8 +1629,8 @@ void VcprojGenerator::initExtraCompilerOutputs()
for (int i = 0; i < tmp_in.count(); ++i) {
const QString &filename = tmp_in.at(i).toQString();
if (extraCompilerSources.contains(filename))
- extraCompile.addFile(
- Option::fixPathToTargetOS(replaceExtraCompilerVariables(filename, QString(), QString()), false));
+ extraCompile.addFile(Option::fixPathToTargetOS(
+ replaceExtraCompilerVariables(filename, QString(), QString(), NoShell), false));
}
}
}
@@ -1650,9 +1650,10 @@ VCProjectWriter *VcprojGenerator::createProjectWriter()
return new VCProjectWriter;
}
-QString VcprojGenerator::replaceExtraCompilerVariables(const QString &var, const QStringList &in, const QStringList &out)
+QString VcprojGenerator::replaceExtraCompilerVariables(
+ const QString &var, const QStringList &in, const QStringList &out, ReplaceFor forShell)
{
- QString ret = MakefileGenerator::replaceExtraCompilerVariables(var, in, out);
+ QString ret = MakefileGenerator::replaceExtraCompilerVariables(var, in, out, forShell);
ProStringList &defines = project->values("VCPROJ_MAKEFILE_DEFINES");
if(defines.isEmpty())
@@ -1680,7 +1681,7 @@ bool VcprojGenerator::openOutput(QFile &file, const QString &/*build*/) const
ProString ext = project->first("VCPROJ_EXTENSION");
if(project->first("TEMPLATE") == "vcsubdirs")
ext = project->first("VCSOLUTION_EXTENSION");
- ProString outputName = unescapeFilePath(project->first("TARGET"));
+ ProString outputName = project->first("TARGET");
if (!project->first("MAKEFILE").isEmpty())
outputName = project->first("MAKEFILE");
file.setFileName(outdir + outputName + ext);
diff --git a/qmake/generators/win32/msvc_vcproj.h b/qmake/generators/win32/msvc_vcproj.h
index 7d912616fd..87cc39f323 100644
--- a/qmake/generators/win32/msvc_vcproj.h
+++ b/qmake/generators/win32/msvc_vcproj.h
@@ -76,9 +76,10 @@ protected:
virtual VCProjectWriter *createProjectWriter();
virtual bool doDepends() const { return false; } //never necesary
virtual void processSources() { filterIncludedFiles("SOURCES"); filterIncludedFiles("GENERATED_SOURCES"); }
- virtual QString replaceExtraCompilerVariables(const QString &, const QStringList &, const QStringList &);
- inline QString replaceExtraCompilerVariables(const QString &val, const QString &in, const QString &out)
- { return MakefileGenerator::replaceExtraCompilerVariables(val, in, out); }
+ using MakefileGenerator::ReplaceFor;
+ virtual QString replaceExtraCompilerVariables(const QString &, const QStringList &, const QStringList &, ReplaceFor);
+ inline QString replaceExtraCompilerVariables(const QString &val, const QString &in, const QString &out, ReplaceFor forShell)
+ { return MakefileGenerator::replaceExtraCompilerVariables(val, in, out, forShell); }
virtual bool supportsMetaBuild() { return true; }
virtual bool supportsMergedBuilds() { return true; }
virtual bool mergeBuildProject(MakefileGenerator *other);
diff --git a/qmake/generators/win32/winmakefile.cpp b/qmake/generators/win32/winmakefile.cpp
index 41a8567545..ad6a19e5df 100644
--- a/qmake/generators/win32/winmakefile.cpp
+++ b/qmake/generators/win32/winmakefile.cpp
@@ -52,12 +52,12 @@ Win32MakefileGenerator::Win32MakefileGenerator() : MakefileGenerator()
int
Win32MakefileGenerator::findHighestVersion(const QString &d, const QString &stem, const QString &ext)
{
- QString bd = Option::fixPathToLocalOS(d, true);
+ QString bd = Option::normalizePath(d);
if(!exists(bd))
return -1;
QMakeMetaInfo libinfo(project);
- bool libInfoRead = libinfo.readLib(bd + Option::dir_sep + stem);
+ bool libInfoRead = libinfo.readLib(bd + '/' + stem);
// If the library, for which we're trying to find the highest version
// number, is a static library
@@ -96,6 +96,16 @@ Win32MakefileGenerator::findHighestVersion(const QString &d, const QString &stem
return biggest;
}
+ProString Win32MakefileGenerator::fixLibFlag(const ProString &lib)
+{
+ if (lib.startsWith('/')) {
+ if (lib.startsWith("/LIBPATH:"))
+ return QStringLiteral("/LIBPATH:") + escapeFilePath(lib.mid(9));
+ return lib;
+ }
+ return escapeFilePath(lib);
+}
+
bool
Win32MakefileGenerator::findLibraries()
{
@@ -104,26 +114,23 @@ Win32MakefileGenerator::findLibraries()
for (int i = 0; lflags[i]; i++) {
ProStringList &l = project->values(lflags[i]);
for (ProStringList::Iterator it = l.begin(); it != l.end();) {
- QChar quote;
- bool modified_opt = false, remove = false;
+ bool remove = false;
QString opt = (*it).trimmed().toQString();
- if((opt[0] == '\'' || opt[0] == '"') && opt[(int)opt.length()-1] == opt[0]) {
- quote = opt[0];
- opt = opt.mid(1, opt.length()-2);
- }
if(opt.startsWith("/LIBPATH:")) {
- dirs.append(QMakeLocalFileName(opt.mid(9)));
+ QString libpath = opt.mid(9);
+ QMakeLocalFileName l(libpath);
+ if (!dirs.contains(l)) {
+ dirs.append(l);
+ (*it) = "/LIBPATH:" + l.real();
+ } else {
+ remove = true;
+ }
} else if(opt.startsWith("-L") || opt.startsWith("/L")) {
QString libpath = Option::fixPathToTargetOS(opt.mid(2), false, false);
QMakeLocalFileName l(libpath);
if(!dirs.contains(l)) {
dirs.append(l);
- modified_opt = true;
- if (!quote.isNull()) {
- libpath = quote + libpath + quote;
- quote = QChar();
- }
- (*it) = "/LIBPATH:" + libpath;
+ (*it) = "/LIBPATH:" + l.real();
} else {
remove = true;
}
@@ -139,22 +146,17 @@ Win32MakefileGenerator::findLibraries()
extension += QString::number(ver);
extension += suffix;
extension += ".lib";
- if(QMakeMetaInfo::libExists((*it).local() + Option::dir_sep + lib) ||
- exists((*it).local() + Option::dir_sep + lib + extension)) {
+ if (QMakeMetaInfo::libExists((*it).local() + '/' + lib)
+ || exists((*it).local() + '/' + lib + extension)) {
out = (*it).real() + Option::dir_sep + lib + extension;
- if (out.contains(QLatin1Char(' '))) {
- out.prepend(QLatin1Char('\"'));
- out.append(QLatin1Char('\"'));
- }
break;
}
}
}
if(out.isEmpty())
out = lib + ".lib";
- modified_opt = true;
(*it) = out;
- } else if(!exists(Option::fixPathToLocalOS(opt))) {
+ } else if (!exists(Option::normalizePath(opt))) {
QList<QMakeLocalFileName> lib_dirs;
QString file = Option::fixPathToTargetOS(opt);
int slsh = file.lastIndexOf(Option::dir_sep);
@@ -167,7 +169,7 @@ Win32MakefileGenerator::findLibraries()
if(file.endsWith(".lib")) {
file = file.left(file.length() - 4);
if(!file.at(file.length()-1).isNumber()) {
- ProString suffix = project->first(ProKey("QMAKE_" + file.section(Option::dir_sep, -1).toUpper() + "_SUFFIX"));
+ ProString suffix = project->first(ProKey("QMAKE_" + file.toUpper() + "_SUFFIX"));
for(QList<QMakeLocalFileName>::Iterator dep_it = lib_dirs.begin(); dep_it != lib_dirs.end(); ++dep_it) {
QString lib_tmpl(file + "%1" + suffix + ".lib");
int ver = findHighestVersion((*dep_it).local(), file);
@@ -182,7 +184,6 @@ Win32MakefileGenerator::findLibraries()
dir += Option::dir_sep;
lib_tmpl.prepend(dir);
}
- modified_opt = true;
(*it) = lib_tmpl;
break;
}
@@ -193,8 +194,6 @@ Win32MakefileGenerator::findLibraries()
if(remove) {
it = l.erase(it);
} else {
- if(!quote.isNull() && modified_opt)
- (*it) = quote + (*it) + quote;
++it;
}
}
@@ -212,8 +211,6 @@ Win32MakefileGenerator::processPrlFiles()
ProStringList &l = project->values(lflags[i]);
for (int lit = 0; lit < l.size(); ++lit) {
QString opt = l.at(lit).trimmed().toQString();
- if((opt[0] == '\'' || opt[0] == '"') && opt[(int)opt.length()-1] == opt[0])
- opt = opt.mid(1, opt.length()-2);
if (opt.startsWith(libArg)) {
QMakeLocalFileName l(opt.mid(libArg.length()));
if (!libdirs.contains(l))
@@ -226,21 +223,15 @@ Win32MakefileGenerator::processPrlFiles()
else
tmp = opt;
for(QList<QMakeLocalFileName>::Iterator it = libdirs.begin(); it != libdirs.end(); ++it) {
- QString prl = (*it).local() + Option::dir_sep + tmp;
+ QString prl = (*it).local() + '/' + tmp;
if (processPrlFile(prl))
break;
}
}
}
ProStringList &prl_libs = project->values("QMAKE_CURRENT_PRL_LIBS");
- for (int prl = 0; prl < prl_libs.size(); ++prl) {
- ProString arg = prl_libs.at(prl);
- if (arg.startsWith(libArg))
- arg = arg.left(libArg.length()) + escapeFilePath(arg.mid(libArg.length()).toQString());
- else if (!arg.startsWith('/'))
- arg = escapeFilePath(arg.toQString());
- l.insert(lit + prl + 1, arg);
- }
+ for (int prl = 0; prl < prl_libs.size(); ++prl)
+ l.insert(lit + prl + 1, prl_libs.at(prl));
prl_libs.clear();
}
@@ -311,14 +302,13 @@ void Win32MakefileGenerator::processVars()
for (ProStringList::Iterator libDir_it = libDir.begin(); libDir_it != libDir.end(); ++libDir_it) {
QString lib = (*libDir_it).toQString();
if (!lib.isEmpty()) {
- lib.remove('"');
if (lib.endsWith('\\'))
lib.chop(1);
- libs << libArg + escapeFilePath(Option::fixPathToTargetOS(lib, false, false));
+ libs << libArg + Option::fixPathToTargetOS(lib, false, false);
}
}
- project->values("QMAKE_LIBS") += libs + escapeFilePaths(project->values("LIBS"));
- project->values("QMAKE_LIBS_PRIVATE") += escapeFilePaths(project->values("LIBS_PRIVATE"));
+ project->values("QMAKE_LIBS") += libs + project->values("LIBS");
+ project->values("QMAKE_LIBS_PRIVATE") += project->values("LIBS_PRIVATE");
if (project->values("TEMPLATE").contains("app")) {
project->values("QMAKE_CFLAGS") += project->values("QMAKE_CFLAGS_APP");
@@ -533,7 +523,7 @@ void Win32MakefileGenerator::processRcFileVar()
void Win32MakefileGenerator::writeCleanParts(QTextStream &t)
{
- t << "clean: compiler_clean " << var("CLEAN_DEPS");
+ t << "clean: compiler_clean " << depVar("CLEAN_DEPS");
{
const char *clean_targets[] = { "OBJECTS", "QMAKE_CLEAN", "CLEAN_FILES", 0 };
for(int i = 0; clean_targets[i]; ++i) {
@@ -562,7 +552,7 @@ void Win32MakefileGenerator::writeCleanParts(QTextStream &t)
}
t << endl << endl;
- t << "distclean: clean " << var("DISTCLEAN_DEPS");
+ t << "distclean: clean " << depVar("DISTCLEAN_DEPS");
{
const char *clean_targets[] = { "QMAKE_DISTCLEAN", 0 };
for(int i = 0; clean_targets[i]; ++i) {
@@ -591,9 +581,9 @@ void Win32MakefileGenerator::writeCleanParts(QTextStream &t)
}
t << "\n\t-$(DEL_FILE) $(DESTDIR_TARGET)\n";
{
- QString ofile = Option::fixPathToTargetOS(fileFixify(Option::output.fileName()));
+ QString ofile = fileFixify(Option::output.fileName());
if(!ofile.isEmpty())
- t << "\t-$(DEL_FILE) " << ofile << endl;
+ t << "\t-$(DEL_FILE) " << escapeFilePath(ofile) << endl;
}
t << endl;
}
@@ -606,9 +596,8 @@ void Win32MakefileGenerator::writeIncPart(QTextStream &t)
for(int i = 0; i < incs.size(); ++i) {
QString inc = incs.at(i).toQString();
inc.replace(QRegExp("\\\\$"), "");
- inc.replace(QRegExp("\""), "");
if(!inc.isEmpty())
- t << "-I\"" << inc << "\" ";
+ t << "-I" << escapeFilePath(inc) << ' ';
}
t << endl;
}
@@ -633,8 +622,8 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t)
t << "IDL = " << (project->isEmpty("QMAKE_IDL") ? QString("midl") : var("QMAKE_IDL"))
<< endl;
t << "ZIP = " << var("QMAKE_ZIP") << endl;
- t << "DEF_FILE = " << varList("DEF_FILE") << endl;
- t << "RES_FILE = " << varList("RES_FILE") << endl; // Not on mingw, can't see why not though...
+ t << "DEF_FILE = " << fileVar("DEF_FILE") << endl;
+ t << "RES_FILE = " << fileVar("RES_FILE") << endl; // Not on mingw, can't see why not though...
t << "COPY = " << var("QMAKE_COPY") << endl;
t << "SED = " << var("QMAKE_STREAM_EDITOR") << endl;
t << "COPY_FILE = " << var("QMAKE_COPY_FILE") << endl;
@@ -651,7 +640,7 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t)
t << "####### Output directory\n\n";
if(!project->values("OBJECTS_DIR").isEmpty())
- t << "OBJECTS_DIR = " << var("OBJECTS_DIR").replace(QRegExp("\\\\$"),"") << endl;
+ t << "OBJECTS_DIR = " << escapeFilePath(var("OBJECTS_DIR").remove(QRegExp("\\\\$"))) << endl;
else
t << "OBJECTS_DIR = . \n";
t << endl;
@@ -666,7 +655,6 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t)
if (!destDir.isEmpty() && (orgDestDir.endsWith('/') || orgDestDir.endsWith(Option::dir_sep)))
destDir += Option::dir_sep;
QString target = QString(project->first("TARGET")+project->first("TARGET_EXT"));
- target.remove("\"");
project->values("DEST_TARGET").prepend(destDir + target);
writeObjectsPart(t);
@@ -674,15 +662,14 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t)
writeExtraCompilerVariables(t);
writeExtraVariables(t);
- t << "DIST = " << varList("DISTFILES") << " "
- << varList("HEADERS") << " "
- << varList("SOURCES") << endl;
- t << "QMAKE_TARGET = " << var("QMAKE_ORIG_TARGET") << endl;
+ t << "DIST = " << fileVarList("DISTFILES") << ' '
+ << fileVarList("HEADERS") << ' ' << fileVarList("SOURCES") << endl;
+ t << "QMAKE_TARGET = " << fileVar("QMAKE_ORIG_TARGET") << endl;
// The comment is important to maintain variable compatibility with Unix
// Makefiles, while not interpreting a trailing-slash as a linebreak
t << "DESTDIR = " << escapeFilePath(destDir) << " #avoid trailing-slash linebreak\n";
t << "TARGET = " << escapeFilePath(target) << endl;
- t << "DESTDIR_TARGET = " << escapeFilePath(var("DEST_TARGET")) << endl;
+ t << "DESTDIR_TARGET = " << fileVar("DEST_TARGET") << endl;
t << endl;
t << "####### Implicit rules\n\n";
@@ -694,8 +681,8 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t)
if(project->isActiveConfig("shared") && !project->values("DLLDESTDIR").isEmpty()) {
const ProStringList &dlldirs = project->values("DLLDESTDIR");
for (ProStringList::ConstIterator dlldir = dlldirs.begin(); dlldir != dlldirs.end(); ++dlldir) {
- t << "\t-$(COPY_FILE) \"$(DESTDIR_TARGET)\" "
- << Option::fixPathToTargetOS((*dlldir).toQString(), false) << endl;
+ t << "\t-$(COPY_FILE) $(DESTDIR_TARGET) "
+ << escapeFilePath(Option::fixPathToTargetOS((*dlldir).toQString(), false)) << endl;
}
}
t << endl;
@@ -719,13 +706,13 @@ void Win32MakefileGenerator::writeStandardParts(QTextStream &t)
}
t << "dist:\n\t"
<< "$(ZIP) " << var("QMAKE_ORIG_TARGET") << ".zip $(SOURCES) $(DIST) "
- << dist_files.join(' ') << " " << var("TRANSLATIONS") << " ";
+ << escapeFilePaths(dist_files).join(' ') << ' ' << fileVar("TRANSLATIONS") << ' ';
if(!project->isEmpty("QMAKE_EXTRA_COMPILERS")) {
const ProStringList &quc = project->values("QMAKE_EXTRA_COMPILERS");
for (ProStringList::ConstIterator it = quc.begin(); it != quc.end(); ++it) {
const ProStringList &inputs = project->values(ProKey(*it + ".input"));
for (ProStringList::ConstIterator input = inputs.begin(); input != inputs.end(); ++input)
- t << (*input) << " ";
+ t << escapeFilePath(*input) << ' ';
}
}
t << endl << endl;
@@ -744,12 +731,14 @@ void Win32MakefileGenerator::writeLibsPart(QTextStream &t)
} else {
t << "LINKER = " << var("QMAKE_LINK") << endl;
t << "LFLAGS = " << var("QMAKE_LFLAGS") << endl;
- t << "LIBS = " << var("QMAKE_LIBS") << " " << var("QMAKE_LIBS_PRIVATE") << endl;
+ t << "LIBS = " << fixLibFlags("QMAKE_LIBS").join(' ') << ' '
+ << fixLibFlags("QMAKE_LIBS_PRIVATE").join(' ') << endl;
}
}
void Win32MakefileGenerator::writeObjectsPart(QTextStream &t)
{
+ // Used in both deps and commands.
t << "OBJECTS = " << valList(escapeDependencyPaths(project->values("OBJECTS"))) << endl;
}
@@ -791,9 +780,10 @@ void Win32MakefileGenerator::writeRcFilePart(QTextStream &t)
incPathStr += escapeFilePath(path);
}
- t << res_file << ": " << rc_file << "\n\t"
+ t << escapeDependencyPath(res_file) << ": " << escapeDependencyPath(rc_file) << "\n\t"
<< var("QMAKE_RC") << (project->isActiveConfig("debug") ? " -D_DEBUG" : "")
- << " $(DEFINES)" << incPathStr << " -fo " << res_file << " " << rc_file;
+ << " $(DEFINES)" << incPathStr << " -fo " << escapeFilePath(res_file)
+ << ' ' << escapeFilePath(rc_file);
t << endl << endl;
}
}
@@ -813,8 +803,7 @@ QString Win32MakefileGenerator::defaultInstall(const QString &t)
const QString root = "$(INSTALL_ROOT)";
ProStringList &uninst = project->values(ProKey(t + ".uninstall"));
QString ret;
- QString targetdir = Option::fixPathToTargetOS(project->first(ProKey(t + ".path")).toQString(), false);
- targetdir = fileFixify(targetdir, FileFixifyAbsolute);
+ QString targetdir = fileFixify(project->first(ProKey(t + ".path")).toQString(), FileFixifyAbsolute);
if(targetdir.right(1) != Option::dir_sep)
targetdir += Option::dir_sep;
@@ -829,7 +818,7 @@ QString Win32MakefileGenerator::defaultInstall(const QString &t)
ret += installMetaFile(ProKey("QMAKE_PRL_INSTALL_REPLACE"), project->first("QMAKE_INTERNAL_PRL_FILE").toQString(), dst_prl);
if(!uninst.isEmpty())
uninst.append("\n\t");
- uninst.append("-$(DEL_FILE) \"" + dst_prl + "\"");
+ uninst.append("-$(DEL_FILE) " + escapeFilePath(dst_prl));
}
if(project->isActiveConfig("create_pc")) {
QString dst_pc = pkgConfigFileName(false);
@@ -846,32 +835,35 @@ QString Win32MakefileGenerator::defaultInstall(const QString &t)
ret += installMetaFile(ProKey("QMAKE_PKGCONFIG_INSTALL_REPLACE"), pkgConfigFileName(true), dst_pc);
if(!uninst.isEmpty())
uninst.append("\n\t");
- uninst.append("-$(DEL_FILE) \"" + dst_pc + "\"");
+ uninst.append("-$(DEL_FILE) " + escapeFilePath(dst_pc));
}
}
if(project->isActiveConfig("shared") && !project->isActiveConfig("plugin")) {
QString lib_target = getLibTarget();
- lib_target.remove('"');
- QString src_targ = (project->isEmpty("DESTDIR") ? QString("$(DESTDIR)") : project->first("DESTDIR")) + lib_target;
- QString dst_targ = filePrefixRoot(root, fileFixify(targetdir + lib_target, FileFixifyAbsolute));
+ QString src_targ = escapeFilePath(
+ (project->isEmpty("DESTDIR") ? QString("$(DESTDIR)") : project->first("DESTDIR"))
+ + lib_target);
+ QString dst_targ = escapeFilePath(
+ filePrefixRoot(root, fileFixify(targetdir + lib_target, FileFixifyAbsolute)));
if(!ret.isEmpty())
ret += "\n\t";
- ret += QString("-$(INSTALL_FILE)") + " \"" + src_targ + "\" \"" + dst_targ + "\"";
+ ret += QString("-$(INSTALL_FILE) ") + src_targ + ' ' + dst_targ;
if(!uninst.isEmpty())
uninst.append("\n\t");
- uninst.append("-$(DEL_FILE) \"" + dst_targ + "\"");
+ uninst.append("-$(DEL_FILE) " + dst_targ);
}
}
if (t == "dlltarget" || project->values(ProKey(t + ".CONFIG")).indexOf("no_dll") == -1) {
QString src_targ = "$(DESTDIR_TARGET)";
- QString dst_targ = filePrefixRoot(root, fileFixify(targetdir + "$(TARGET)", FileFixifyAbsolute));
+ QString dst_targ = escapeFilePath(
+ filePrefixRoot(root, fileFixify(targetdir + "$(TARGET)", FileFixifyAbsolute)));
if(!ret.isEmpty())
ret += "\n\t";
- ret += QString("-$(INSTALL_FILE)") + " \"" + src_targ + "\" \"" + dst_targ + "\"";
+ ret += QString("-$(INSTALL_FILE) ") + src_targ + ' ' + dst_targ;
if(!uninst.isEmpty())
uninst.append("\n\t");
- uninst.append("-$(DEL_FILE) \"" + dst_targ + "\"");
+ uninst.append("-$(DEL_FILE) " + dst_targ);
}
return ret;
}
@@ -880,7 +872,6 @@ QString Win32MakefileGenerator::escapeFilePath(const QString &path) const
{
QString ret = path;
if(!ret.isEmpty()) {
- ret = unescapeFilePath(ret);
if (ret.contains(' ') || ret.contains('\t'))
ret = "\"" + ret + "\"";
debug_msg(2, "EscapeFilePath: %s -> %s", path.toLatin1().constData(), ret.toLatin1().constData());
diff --git a/qmake/generators/win32/winmakefile.h b/qmake/generators/win32/winmakefile.h
index 795ca2b874..ea763c3175 100644
--- a/qmake/generators/win32/winmakefile.h
+++ b/qmake/generators/win32/winmakefile.h
@@ -60,6 +60,8 @@ protected:
int findHighestVersion(const QString &dir, const QString &stem, const QString &ext = QLatin1String("lib"));
virtual bool findLibraries();
+ virtual ProString fixLibFlag(const ProString &lib);
+
virtual void processPrlFiles();
void processVars();
void fixTargetExt();
diff --git a/qmake/meta.cpp b/qmake/meta.cpp
index 5653241b39..d7aa885541 100644
--- a/qmake/meta.cpp
+++ b/qmake/meta.cpp
@@ -94,9 +94,6 @@ QMakeMetaInfo::clear()
QString
QMakeMetaInfo::findLib(QString lib)
{
- if((lib[0] == '\'' || lib[0] == '"') &&
- lib[lib.length()-1] == lib[0])
- lib = lib.mid(1, lib.length()-2);
lib = Option::normalizePath(lib);
QString ret;
diff --git a/src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java b/src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java
index 0d82d73b5b..56e7543415 100644
--- a/src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java
+++ b/src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Android port of the Qt Toolkit.
diff --git a/src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtNativeAccessibility.java b/src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtNativeAccessibility.java
index b3bea7c5e6..bfda2d55b7 100644
--- a/src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtNativeAccessibility.java
+++ b/src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtNativeAccessibility.java
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Android port of the Qt Toolkit.
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
index 156f61b0c1..dc80689f63 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 BogDan Vatra <bogdan@kde.org>
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Android port of the Qt Toolkit.
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtEditText.java b/src/android/jar/src/org/qtproject/qt5/android/QtEditText.java
index 0fe15bc0e2..c01b0693d9 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtEditText.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtEditText.java
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Copyright (C) 2012 BogDan Vatra <bogdan@kde.org>
** Contact: http://www.qt.io/licensing/
**
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtInputConnection.java b/src/android/jar/src/org/qtproject/qt5/android/QtInputConnection.java
index b6d97706b7..0f3e9083d4 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtInputConnection.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtInputConnection.java
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Copyright (C) 2012 BogDan Vatra <bogdan@kde.org>
** Contact: http://www.qt.io/licensing/
**
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
index 061d08d882..09fef4a705 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Copyright (C) 2012 BogDan Vatra <bogdan@kde.org>
** Contact: http://www.qt.io/licensing/
**
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
index 73ba2c349f..8e35840a20 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 BogDan Vatra <bogdan@kde.org>
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Android port of the Qt Toolkit.
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNativeLibrariesDir.java b/src/android/jar/src/org/qtproject/qt5/android/QtNativeLibrariesDir.java
index 25c032e8be..a7dd96d609 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNativeLibrariesDir.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNativeLibrariesDir.java
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Copyright (C) 2012 BogDan Vatra <bogdan@kde.org>
** Contact: http://www.qt.io/licensing/
**
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java
index cd5f90ff0b..74433d2b65 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtSurface.java
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 BogDan Vatra <bogdan@kde.org>
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Android port of the Qt Toolkit.
diff --git a/src/corelib/doc/snippets/code/src_corelib_io_qtextstream.cpp b/src/corelib/doc/snippets/code/src_corelib_io_qtextstream.cpp
index 3d04f5b526..c76a0f1f3b 100644
--- a/src/corelib/doc/snippets/code/src_corelib_io_qtextstream.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_io_qtextstream.cpp
@@ -51,9 +51,9 @@ if (data.open(QFile::WriteOnly | QFile::Truncate)) {
//! [1]
QTextStream stream(stdin);
QString line;
-do {
- line = stream.readLine();
-} while (!line.isNull());
+while (stream.readLine(&line)) {
+ ...
+}
//! [1]
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h
index ba87bb5cc9..6958912e67 100644
--- a/src/corelib/global/qcompilerdetection.h
+++ b/src/corelib/global/qcompilerdetection.h
@@ -907,6 +907,11 @@
# undef Q_COMPILER_UNICODE_STRINGS
# undef Q_COMPILER_NOEXCEPT
# endif
+# if defined(_HAS_DINKUM_CLIB) && !defined(_HAS_CONSTEXPR)
+// The libcpp is missing constexpr keywords on important functions like std::numeric_limits<>::min()
+// Disable constexpr support on QNX even if the compiler supports it
+# undef Q_COMPILER_CONSTEXPR
+# endif
# endif // Q_OS_QNX
# if (defined(Q_CC_CLANG) || defined(Q_CC_INTEL)) && defined(Q_OS_MAC) && defined(__GNUC_LIBSTD__) \
&& ((__GNUC_LIBSTD__-0) * 100 + __GNUC_LIBSTD_MINOR__-0 <= 402)
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index 06f9e9080e..712e84185c 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -2529,9 +2529,6 @@ QString QSysInfo::productType()
#elif defined(Q_OS_DARWIN)
return QStringLiteral("darwin");
-#elif defined(Q_OS_HAIKU)
- return QStringLiteral("haiku");
-
#elif defined(USE_ETC_OS_RELEASE) // Q_OS_UNIX
QUnixOSVersion unixOsVersion;
readEtcOsRelease(unixOsVersion);
diff --git a/src/corelib/io/qfilesystemwatcher_fsevents.mm b/src/corelib/io/qfilesystemwatcher_fsevents.mm
index 1076b8f5b4..8a028c91e1 100644
--- a/src/corelib/io/qfilesystemwatcher_fsevents.mm
+++ b/src/corelib/io/qfilesystemwatcher_fsevents.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
diff --git a/src/corelib/io/qsettings_winrt.cpp b/src/corelib/io/qsettings_winrt.cpp
index bf8b157d00..02c3c7624e 100644
--- a/src/corelib/io/qsettings_winrt.cpp
+++ b/src/corelib/io/qsettings_winrt.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
diff --git a/src/corelib/io/qstandardpaths_ios.mm b/src/corelib/io/qstandardpaths_ios.mm
index 98e939cbda..27d28526c2 100644
--- a/src/corelib/io/qstandardpaths_ios.mm
+++ b/src/corelib/io/qstandardpaths_ios.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
diff --git a/src/corelib/io/qstorageinfo_unix.cpp b/src/corelib/io/qstorageinfo_unix.cpp
index 667301b516..7e23ac897d 100644
--- a/src/corelib/io/qstorageinfo_unix.cpp
+++ b/src/corelib/io/qstorageinfo_unix.cpp
@@ -59,6 +59,7 @@
# include <Path.h>
# include <Volume.h>
# include <VolumeRoster.h>
+# include <fs_info.h>
# include <sys/statvfs.h>
#else
# include <sys/statvfs.h>
@@ -341,9 +342,18 @@ inline bool QStorageIterator::next()
return false;
const BPath path(&directory);
+
+ fs_info fsInfo;
+ memset(&fsInfo, 0, sizeof(fsInfo));
+
+ if (fs_stat_dev(volume.Device(), &fsInfo) != 0)
+ return false;
+
m_rootPath = path.Path();
- m_fileSystemType = QByteArray(); // no public API to access it
- m_device = QByteArray::number(static_cast<qint32>(volume.Device()));
+ m_fileSystemType = QByteArray(fsInfo.fsh_name);
+
+ const QByteArray deviceName(fsInfo.device_name);
+ m_device = (deviceName.isEmpty() ? QByteArray::number(qint32(volume.Device())) : deviceName);
return true;
}
@@ -444,6 +454,19 @@ static inline QString retrieveLabel(const QByteArray &device)
if (fileInfo.isSymLink() && fileInfo.symLinkTarget().toLocal8Bit() == device)
return fileInfo.fileName();
}
+#elif defined Q_OS_HAIKU
+ fs_info fsInfo;
+ memset(&fsInfo, 0, sizeof(fsInfo));
+
+ int32 pos = 0;
+ dev_t dev;
+ while ((dev = next_dev(&pos)) >= 0) {
+ if (fs_stat_dev(dev, &fsInfo) != 0)
+ continue;
+
+ if (qstrcmp(fsInfo.device_name, device.constData()) == 0)
+ return QString::fromLocal8Bit(fsInfo.volume_name);
+ }
#else
Q_UNUSED(device);
#endif
diff --git a/src/corelib/io/qurl_mac.mm b/src/corelib/io/qurl_mac.mm
index f051dfbd32..a1fa7e4fc4 100644
--- a/src/corelib/io/qurl_mac.mm
+++ b/src/corelib/io/qurl_mac.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri
index 87367a9ee7..dabbb2dbbe 100644
--- a/src/corelib/kernel/kernel.pri
+++ b/src/corelib/kernel/kernel.pri
@@ -175,7 +175,7 @@ blackberry {
kernel/qeventdispatcher_blackberry_p.h
}
-qqnx_pps:!blackberry-playbook {
+qqnx_pps {
LIBS_PRIVATE += -lpps
SOURCES += \
kernel/qppsattribute.cpp \
diff --git a/src/corelib/kernel/qcore_mac_objc.mm b/src/corelib/kernel/qcore_mac_objc.mm
index 53a15ce0bc..a215557aed 100644
--- a/src/corelib/kernel/qcore_mac_objc.mm
+++ b/src/corelib/kernel/qcore_mac_objc.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
- ** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+ ** Copyright (C) 2015 The Qt Company Ltd.
** Copyright (C) 2014 Petroules Corporation.
** Contact: http://www.qt.io/licensing/
**
diff --git a/src/corelib/plugin/qelfparser_p.cpp b/src/corelib/plugin/qelfparser_p.cpp
index fcc3820ea7..d93be439e0 100644
--- a/src/corelib/plugin/qelfparser_p.cpp
+++ b/src/corelib/plugin/qelfparser_p.cpp
@@ -94,7 +94,7 @@ int QElfParser::parse(const char *dataStart, ulong fdlen, const QString &library
// endian
if (data[5] == 0) {
if (lib)
- lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library).arg(QLatin1String("odd endianess"));
+ lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library).arg(QLatin1String("odd endianness"));
return Corrupt;
}
m_endian = (data[5] == 1 ? ElfLittleEndian : ElfBigEndian);
diff --git a/src/corelib/tools/qbytearray_mac.mm b/src/corelib/tools/qbytearray_mac.mm
index e05319f47f..b90c2de836 100644
--- a/src/corelib/tools/qbytearray_mac.mm
+++ b/src/corelib/tools/qbytearray_mac.mm
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 Samuel Gaist <samuel.gaist@edeltech.ch>
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
diff --git a/src/corelib/tools/qbytearraylist.cpp b/src/corelib/tools/qbytearraylist.cpp
index 79c2f25868..6a2fa534a5 100644
--- a/src/corelib/tools/qbytearraylist.cpp
+++ b/src/corelib/tools/qbytearraylist.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Copyright (C) 2014 by Southwest Research Institute (R)
** Contact: http://www.qt.io/licensing/
**
diff --git a/src/corelib/tools/qbytearraylist.h b/src/corelib/tools/qbytearraylist.h
index 822d53f0f0..9cd241a87b 100644
--- a/src/corelib/tools/qbytearraylist.h
+++ b/src/corelib/tools/qbytearraylist.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Copyright (C) 2014 by Southwest Research Institute (R)
** Contact: http://www.qt.io/licensing/
**
diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp
index adfcbcecf0..eeefea8137 100644
--- a/src/corelib/tools/qdatetime.cpp
+++ b/src/corelib/tools/qdatetime.cpp
@@ -117,7 +117,12 @@ static inline qint64 julianDayFromDate(int year, int month, int day)
return day + floordiv(153 * m + 2, 5) + 365 * y + floordiv(y, 4) - floordiv(y, 100) + floordiv(y, 400) - 32045;
}
-static void getDateFromJulianDay(qint64 julianDay, int *yearp, int *monthp, int *dayp)
+struct ParsedDate
+{
+ int year, month, day;
+};
+
+static ParsedDate getDateFromJulianDay(qint64 julianDay)
{
/*
* Math from The Calendar FAQ at http://www.tondering.dk/claus/cal/julperiod.php
@@ -140,12 +145,8 @@ static void getDateFromJulianDay(qint64 julianDay, int *yearp, int *monthp, int
if (year <= 0)
--year ;
- if (yearp)
- *yearp = year;
- if (monthp)
- *monthp = month;
- if (dayp)
- *dayp = day;
+ const ParsedDate result = { year, month, day };
+ return result;
}
/*****************************************************************************
@@ -186,82 +187,55 @@ static int fromShortMonthName(const QStringRef &monthName)
#endif // QT_NO_TEXTDATE
#ifndef QT_NO_DATESTRING
-static void rfcDateImpl(const QString &s, QDate *dd = 0, QTime *dt = 0, int *utcOffset = 0)
-{
- int day = -1;
- int month = -1;
- int year = -1;
- int hour = -1;
- int min = -1;
- int sec = -1;
- int hourOffset = 0;
- int minOffset = 0;
- bool positiveOffset = false;
+struct ParsedRfcDateTime {
+ QDate date;
+ QTime time;
+ int utcOffset;
+};
+
+static ParsedRfcDateTime rfcDateImpl(const QString &s)
+{
+ ParsedRfcDateTime result;
// Matches "Wdy, DD Mon YYYY HH:mm:ss ±hhmm" (Wdy, being optional)
QRegExp rex(QStringLiteral("^(?:[A-Z][a-z]+,)?[ \\t]*(\\d{1,2})[ \\t]+([A-Z][a-z]+)[ \\t]+(\\d\\d\\d\\d)(?:[ \\t]+(\\d\\d):(\\d\\d)(?::(\\d\\d))?)?[ \\t]*(?:([+-])(\\d\\d)(\\d\\d))?"));
if (s.indexOf(rex) == 0) {
- if (dd) {
- day = rex.cap(1).toInt();
- month = qt_monthNumberFromShortName(rex.cap(2));
- year = rex.cap(3).toInt();
- }
- if (dt) {
- if (!rex.cap(4).isEmpty()) {
- hour = rex.cap(4).toInt();
- min = rex.cap(5).toInt();
- sec = rex.cap(6).toInt();
- }
- positiveOffset = (rex.cap(7) == QLatin1String("+"));
- hourOffset = rex.cap(8).toInt();
- minOffset = rex.cap(9).toInt();
- }
- if (utcOffset)
- *utcOffset = ((hourOffset * 60 + minOffset) * (positiveOffset ? 60 : -60));
+ const QStringList cap = rex.capturedTexts();
+ result.date = QDate(cap[3].toInt(), qt_monthNumberFromShortName(cap[2]), cap[1].toInt());
+ if (!cap[4].isEmpty())
+ result.time = QTime(cap[4].toInt(), cap[5].toInt(), cap[6].toInt());
+ const bool positiveOffset = (cap[7] == QLatin1String("+"));
+ const int hourOffset = cap[8].toInt();
+ const int minOffset = cap[9].toInt();
+ result.utcOffset = ((hourOffset * 60 + minOffset) * (positiveOffset ? 60 : -60));
} else {
// Matches "Wdy Mon DD HH:mm:ss YYYY"
QRegExp rex(QStringLiteral("^[A-Z][a-z]+[ \\t]+([A-Z][a-z]+)[ \\t]+(\\d\\d)(?:[ \\t]+(\\d\\d):(\\d\\d):(\\d\\d))?[ \\t]+(\\d\\d\\d\\d)[ \\t]*(?:([+-])(\\d\\d)(\\d\\d))?"));
if (s.indexOf(rex) == 0) {
- if (dd) {
- month = qt_monthNumberFromShortName(rex.cap(1));
- day = rex.cap(2).toInt();
- year = rex.cap(6).toInt();
- }
- if (dt) {
- if (!rex.cap(3).isEmpty()) {
- hour = rex.cap(3).toInt();
- min = rex.cap(4).toInt();
- sec = rex.cap(5).toInt();
- }
- positiveOffset = (rex.cap(7) == QLatin1String("+"));
- hourOffset = rex.cap(8).toInt();
- minOffset = rex.cap(9).toInt();
- }
- if (utcOffset)
- *utcOffset = ((hourOffset * 60 + minOffset) * (positiveOffset ? 60 : -60));
+ const QStringList cap = rex.capturedTexts();
+ result.date = QDate(cap[6].toInt(), qt_monthNumberFromShortName(cap[1]), cap[2].toInt());
+ if (!cap[3].isEmpty())
+ result.time = QTime(cap[3].toInt(), cap[4].toInt(), cap[5].toInt());
+ const bool positiveOffset = (cap[7] == QLatin1String("+"));
+ const int hourOffset = cap[8].toInt();
+ const int minOffset = cap[9].toInt();
+ result.utcOffset = ((hourOffset * 60 + minOffset) * (positiveOffset ? 60 : -60));
}
}
- if (dd)
- *dd = QDate(year, month, day);
- if (dt)
- *dt = QTime(hour, min, sec);
+ return result;
}
#endif // QT_NO_DATESTRING
// Return offset in [+-]HH:mm format
-// Qt::ISODate puts : between the hours and minutes, but Qt:TextDate does not
static QString toOffsetString(Qt::DateFormat format, int offset)
{
- QString result;
- if (format == Qt::TextDate)
- result = QStringLiteral("%1%2%3");
- else // Qt::ISODate
- result = QStringLiteral("%1%2:%3");
-
- return result.arg(offset >= 0 ? QLatin1Char('+') : QLatin1Char('-'))
- .arg(qAbs(offset) / SECS_PER_HOUR, 2, 10, QLatin1Char('0'))
- .arg((qAbs(offset) / 60) % 60, 2, 10, QLatin1Char('0'));
+ return QString::asprintf("%c%02d%s%02d",
+ offset >= 0 ? '+' : '-',
+ qAbs(offset) / SECS_PER_HOUR,
+ // Qt::ISODate puts : between the hours and minutes, but Qt:TextDate does not:
+ format == Qt::TextDate ? "" : ":",
+ (qAbs(offset) / 60) % 60);
}
// Parse offset in [+-]HH[[:]mm] format
@@ -449,9 +423,7 @@ int QDate::year() const
if (isNull())
return 0;
- int y;
- getDateFromJulianDay(jd, &y, 0, 0);
- return y;
+ return getDateFromJulianDay(jd).year;
}
/*!
@@ -483,9 +455,7 @@ int QDate::month() const
if (isNull())
return 0;
- int m;
- getDateFromJulianDay(jd, 0, &m, 0);
- return m;
+ return getDateFromJulianDay(jd).month;
}
/*!
@@ -501,9 +471,7 @@ int QDate::day() const
if (isNull())
return 0;
- int d;
- getDateFromJulianDay(jd, 0, 0, &d);
- return d;
+ return getDateFromJulianDay(jd).day;
}
/*!
@@ -555,12 +523,11 @@ int QDate::daysInMonth() const
if (isNull())
return 0;
- int y, m;
- getDateFromJulianDay(jd, &y, &m, 0);
- if (m == 2 && isLeapYear(y))
+ const ParsedDate pd = getDateFromJulianDay(jd);
+ if (pd.month == 2 && isLeapYear(pd.year))
return 29;
else
- return monthDays[m];
+ return monthDays[pd.month];
}
/*!
@@ -576,9 +543,7 @@ int QDate::daysInYear() const
if (isNull())
return 0;
- int y;
- getDateFromJulianDay(jd, &y, 0, 0);
- return isLeapYear(y) ? 366 : 365;
+ return isLeapYear(getDateFromJulianDay(jd).year) ? 366 : 365;
}
/*!
@@ -895,7 +860,7 @@ QString QDate::toString(Qt::DateFormat format) const
if (!isValid())
return QString();
- int y, m, d;
+ ParsedDate pd;
switch (format) {
case Qt::SystemLocaleDate:
@@ -913,19 +878,17 @@ QString QDate::toString(Qt::DateFormat format) const
default:
#ifndef QT_NO_TEXTDATE
case Qt::TextDate:
- getDateFromJulianDay(jd, &y, &m, &d);
+ pd = getDateFromJulianDay(jd);
return QString::fromLatin1("%1 %2 %3 %4").arg(shortDayName(dayOfWeek()))
- .arg(shortMonthName(m))
- .arg(d)
- .arg(y);
+ .arg(shortMonthName(pd.month))
+ .arg(pd.day)
+ .arg(pd.year);
#endif
case Qt::ISODate:
- getDateFromJulianDay(jd, &y, &m, &d);
- if (y < 0 || y > 9999)
+ pd = getDateFromJulianDay(jd);
+ if (pd.year < 0 || pd.year > 9999)
return QString();
- return QString::fromLatin1("%1-%2-%3").arg(y, 4, 10, QLatin1Char('0'))
- .arg(m, 2, 10, QLatin1Char('0'))
- .arg(d, 2, 10, QLatin1Char('0'));
+ return QString::asprintf("%04d-%02d-%02d", pd.year, pd.month, pd.day);
}
}
@@ -1031,16 +994,16 @@ bool QDate::setDate(int year, int month, int day)
*/
void QDate::getDate(int *year, int *month, int *day)
{
- if (isValid()) {
- getDateFromJulianDay(jd, year, month, day);
- } else {
- if (year)
- *year = 0;
- if (month)
- *month = 0;
- if (day)
- *day = 0;
- }
+ ParsedDate pd = { 0, 0, 0 };
+ if (isValid())
+ pd = getDateFromJulianDay(jd);
+
+ if (year)
+ *year = pd.year;
+ if (month)
+ *month = pd.month;
+ if (day)
+ *day = pd.day;
}
/*!
@@ -1082,7 +1045,12 @@ QDate QDate::addMonths(int nmonths) const
return *this;
int old_y, y, m, d;
- getDateFromJulianDay(jd, &y, &m, &d);
+ {
+ const ParsedDate pd = getDateFromJulianDay(jd);
+ y = pd.year;
+ m = pd.month;
+ d = pd.day;
+ }
old_y = y;
bool increasing = nmonths > 0;
@@ -1140,19 +1108,18 @@ QDate QDate::addYears(int nyears) const
if (!isValid())
return QDate();
- int y, m, d;
- getDateFromJulianDay(jd, &y, &m, &d);
+ ParsedDate pd = getDateFromJulianDay(jd);
- int old_y = y;
- y += nyears;
+ int old_y = pd.year;
+ pd.year += nyears;
// was there a sign change?
- if ((old_y > 0 && y <= 0) ||
- (old_y < 0 && y >= 0))
+ if ((old_y > 0 && pd.year <= 0) ||
+ (old_y < 0 && pd.year >= 0))
// yes, adjust the date by +1 or -1 years
- y += nyears > 0 ? +1 : -1;
+ pd.year += nyears > 0 ? +1 : -1;
- return fixedDate(y, m, d);
+ return fixedDate(pd.year, pd.month, pd.day);
}
/*!
@@ -1255,11 +1222,8 @@ QDate QDate::fromString(const QString& string, Qt::DateFormat format)
return QLocale().toDate(string, QLocale::ShortFormat);
case Qt::DefaultLocaleLongDate:
return QLocale().toDate(string, QLocale::LongFormat);
- case Qt::RFC2822Date: {
- QDate date;
- rfcDateImpl(string, &date);
- return date;
- }
+ case Qt::RFC2822Date:
+ return rfcDateImpl(string).date;
default:
#ifndef QT_NO_TEXTDATE
case Qt::TextDate: {
@@ -2003,11 +1967,8 @@ QTime QTime::fromString(const QString& string, Qt::DateFormat format)
return QLocale().toTime(string, QLocale::ShortFormat);
case Qt::DefaultLocaleLongDate:
return QLocale().toTime(string, QLocale::LongFormat);
- case Qt::RFC2822Date: {
- QTime time;
- rfcDateImpl(string, 0, &time);
- return time;
- }
+ case Qt::RFC2822Date:
+ return rfcDateImpl(string).time;
case Qt::ISODate:
case Qt::TextDate:
default:
@@ -4417,16 +4378,13 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format)
case Qt::DefaultLocaleLongDate:
return QLocale().toDateTime(string, QLocale::LongFormat);
case Qt::RFC2822Date: {
- QDate date;
- QTime time;
- int utcOffset = 0;
- rfcDateImpl(string, &date, &time, &utcOffset);
+ const ParsedRfcDateTime rfc = rfcDateImpl(string);
- if (!date.isValid() || !time.isValid())
+ if (!rfc.date.isValid() || !rfc.time.isValid())
return QDateTime();
- QDateTime dateTime(date, time, Qt::UTC);
- dateTime.setOffsetFromUtc(utcOffset);
+ QDateTime dateTime(rfc.date, rfc.time, Qt::UTC);
+ dateTime.setOffsetFromUtc(rfc.utcOffset);
return dateTime;
}
case Qt::ISODate: {
@@ -5007,9 +4965,11 @@ QDebug operator<<(QDebug dbg, const QTime &time)
QDebug operator<<(QDebug dbg, const QDateTime &date)
{
QDebugStateSaver saver(dbg);
- dbg.nospace() << "QDateTime(" << date.toString(QStringLiteral("yyyy-MM-dd HH:mm:ss.zzz t"))
- << ' ' << date.timeSpec();
- switch (date.d->m_spec) {
+ const Qt::TimeSpec ts = date.timeSpec();
+ dbg.nospace() << "QDateTime(";
+ dbg.noquote() << date.toString(QStringLiteral("yyyy-MM-dd HH:mm:ss.zzz t"))
+ << ' ' << ts;
+ switch (ts) {
case Qt::UTC:
break;
case Qt::OffsetFromUTC:
diff --git a/src/corelib/tools/qdatetime.h b/src/corelib/tools/qdatetime.h
index 3affc7e9aa..784aced71a 100644
--- a/src/corelib/tools/qdatetime.h
+++ b/src/corelib/tools/qdatetime.h
@@ -59,13 +59,13 @@ public:
StandaloneFormat
};
private:
- QDate(qint64 julianDay) : jd(julianDay) {}
+ Q_DECL_CONSTEXPR QDate(qint64 julianDay) : jd(julianDay) {}
public:
- QDate() { jd = nullJd(); }
+ Q_DECL_CONSTEXPR QDate() : jd(nullJd()) {}
QDate(int y, int m, int d);
- bool isNull() const { return !isValid(); }
- bool isValid() const { return jd >= minJd() && jd <= maxJd(); }
+ Q_DECL_CONSTEXPR bool isNull() const { return !isValid(); }
+ Q_DECL_CONSTEXPR bool isValid() const { return jd >= minJd() && jd <= maxJd(); }
int year() const;
int month() const;
@@ -100,12 +100,12 @@ QT_DEPRECATED inline bool setYMD(int y, int m, int d)
QDate addYears(int years) const Q_REQUIRED_RESULT;
qint64 daysTo(const QDate &) const;
- bool operator==(const QDate &other) const { return jd == other.jd; }
- bool operator!=(const QDate &other) const { return jd != other.jd; }
- bool operator<(const QDate &other) const { return jd < other.jd; }
- bool operator<=(const QDate &other) const { return jd <= other.jd; }
- bool operator>(const QDate &other) const { return jd > other.jd; }
- bool operator>=(const QDate &other) const { return jd >= other.jd; }
+ Q_DECL_CONSTEXPR bool operator==(const QDate &other) const { return jd == other.jd; }
+ Q_DECL_CONSTEXPR bool operator!=(const QDate &other) const { return jd != other.jd; }
+ Q_DECL_CONSTEXPR bool operator< (const QDate &other) const { return jd < other.jd; }
+ Q_DECL_CONSTEXPR bool operator<=(const QDate &other) const { return jd <= other.jd; }
+ Q_DECL_CONSTEXPR bool operator> (const QDate &other) const { return jd > other.jd; }
+ Q_DECL_CONSTEXPR bool operator>=(const QDate &other) const { return jd >= other.jd; }
static QDate currentDate();
#ifndef QT_NO_DATESTRING
@@ -115,15 +115,15 @@ QT_DEPRECATED inline bool setYMD(int y, int m, int d)
static bool isValid(int y, int m, int d);
static bool isLeapYear(int year);
- static inline QDate fromJulianDay(qint64 jd)
+ static Q_DECL_CONSTEXPR inline QDate fromJulianDay(qint64 jd)
{ return jd >= minJd() && jd <= maxJd() ? QDate(jd) : QDate() ; }
- inline qint64 toJulianDay() const { return jd; }
+ Q_DECL_CONSTEXPR inline qint64 toJulianDay() const { return jd; }
private:
// using extra parentheses around min to avoid expanding it if it is a macro
- static inline qint64 nullJd() { return (std::numeric_limits<qint64>::min)(); }
- static inline qint64 minJd() { return Q_INT64_C(-784350574879); }
- static inline qint64 maxJd() { return Q_INT64_C( 784354017364); }
+ static Q_DECL_CONSTEXPR inline qint64 nullJd() { return (std::numeric_limits<qint64>::min)(); }
+ static Q_DECL_CONSTEXPR inline qint64 minJd() { return Q_INT64_C(-784350574879); }
+ static Q_DECL_CONSTEXPR inline qint64 maxJd() { return Q_INT64_C( 784354017364); }
qint64 jd;
@@ -138,20 +138,20 @@ Q_DECLARE_TYPEINFO(QDate, Q_MOVABLE_TYPE);
class Q_CORE_EXPORT QTime
{
- QTime(int ms) : mds(ms)
+ Q_DECL_CONSTEXPR QTime(int ms) : mds(ms)
#if defined(Q_OS_WINCE)
, startTick(NullTime)
#endif
{}
public:
- QTime(): mds(NullTime)
+ Q_DECL_CONSTEXPR QTime(): mds(NullTime)
#if defined(Q_OS_WINCE)
, startTick(NullTime)
#endif
{}
QTime(int h, int m, int s = 0, int ms = 0);
- bool isNull() const { return mds == NullTime; }
+ Q_DECL_CONSTEXPR bool isNull() const { return mds == NullTime; }
bool isValid() const;
int hour() const;
@@ -169,15 +169,15 @@ public:
QTime addMSecs(int ms) const Q_REQUIRED_RESULT;
int msecsTo(const QTime &) const;
- bool operator==(const QTime &other) const { return mds == other.mds; }
- bool operator!=(const QTime &other) const { return mds != other.mds; }
- bool operator<(const QTime &other) const { return mds < other.mds; }
- bool operator<=(const QTime &other) const { return mds <= other.mds; }
- bool operator>(const QTime &other) const { return mds > other.mds; }
- bool operator>=(const QTime &other) const { return mds >= other.mds; }
+ Q_DECL_CONSTEXPR bool operator==(const QTime &other) const { return mds == other.mds; }
+ Q_DECL_CONSTEXPR bool operator!=(const QTime &other) const { return mds != other.mds; }
+ Q_DECL_CONSTEXPR bool operator< (const QTime &other) const { return mds < other.mds; }
+ Q_DECL_CONSTEXPR bool operator<=(const QTime &other) const { return mds <= other.mds; }
+ Q_DECL_CONSTEXPR bool operator> (const QTime &other) const { return mds > other.mds; }
+ Q_DECL_CONSTEXPR bool operator>=(const QTime &other) const { return mds >= other.mds; }
- static inline QTime fromMSecsSinceStartOfDay(int msecs) { return QTime(msecs); }
- inline int msecsSinceStartOfDay() const { return mds == NullTime ? 0 : mds; }
+ static Q_DECL_CONSTEXPR inline QTime fromMSecsSinceStartOfDay(int msecs) { return QTime(msecs); }
+ Q_DECL_CONSTEXPR inline int msecsSinceStartOfDay() const { return mds == NullTime ? 0 : mds; }
static QTime currentTime();
#ifndef QT_NO_DATESTRING
@@ -191,7 +191,7 @@ public:
int elapsed() const;
private:
enum TimeFlag { NullTime = -1 };
- inline int ds() const { return mds == -1 ? 0 : mds; }
+ Q_DECL_CONSTEXPR inline int ds() const { return mds == -1 ? 0 : mds; }
int mds;
#if defined(Q_OS_WINCE)
int startTick;
diff --git a/src/corelib/tools/qdatetime_mac.mm b/src/corelib/tools/qdatetime_mac.mm
index c5fd7a0142..c87fc3d9ca 100644
--- a/src/corelib/tools/qdatetime_mac.mm
+++ b/src/corelib/tools/qdatetime_mac.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Copyright (C) 2014 Petroules Corporation.
** Contact: http://www.qt.io/licensing/
**
diff --git a/src/corelib/tools/qdatetime_p.h b/src/corelib/tools/qdatetime_p.h
index d703442963..a139390a9d 100644
--- a/src/corelib/tools/qdatetime_p.h
+++ b/src/corelib/tools/qdatetime_p.h
@@ -101,16 +101,6 @@ public:
QDateTimePrivate(const QDate &toDate, const QTime &toTime, const QTimeZone & timeZone);
#endif // QT_BOOTSTRAPPED
- QDateTimePrivate(const QDateTimePrivate &other) : QSharedData(other),
- m_msecs(other.m_msecs),
- m_spec(other.m_spec),
- m_offsetFromUtc(other.m_offsetFromUtc),
-#ifndef QT_BOOTSTRAPPED
- m_timeZone(other.m_timeZone),
-#endif // QT_BOOTSTRAPPED
- m_status(other.m_status)
- {}
-
// ### XXX: when the tooling situation improves, look at fixing the padding.
// 4 bytes padding
@@ -136,17 +126,17 @@ public:
void refreshDateTime();
// Get/set date and time status
- inline bool isNullDate() const { return (m_status & NullDate) == NullDate; }
- inline bool isNullTime() const { return (m_status & NullTime) == NullTime; }
- inline bool isValidDate() const { return (m_status & ValidDate) == ValidDate; }
- inline bool isValidTime() const { return (m_status & ValidTime) == ValidTime; }
- inline bool isValidDateTime() const { return (m_status & ValidDateTime) == ValidDateTime; }
- inline void setValidDateTime() { m_status = m_status | ValidDateTime; }
- inline void clearValidDateTime() { m_status = m_status & ~ValidDateTime; }
- inline bool isTimeZoneCached() const { return (m_status & TimeZoneCached) == TimeZoneCached; }
- inline void setTimeZoneCached() { m_status = m_status | TimeZoneCached; }
- inline void clearTimeZoneCached() { m_status = m_status & ~TimeZoneCached; }
- inline void clearSetToDaylightStatus() { m_status = m_status & ~SetToStandardTime & ~SetToDaylightTime; }
+ inline bool isNullDate() const { return m_status & NullDate; }
+ inline bool isNullTime() const { return m_status & NullTime; }
+ inline bool isValidDate() const { return m_status & ValidDate; }
+ inline bool isValidTime() const { return m_status & ValidTime; }
+ inline bool isValidDateTime() const { return m_status & ValidDateTime; }
+ inline void setValidDateTime() { m_status |= ValidDateTime; }
+ inline void clearValidDateTime() { m_status &= ~ValidDateTime; }
+ inline bool isTimeZoneCached() const { return m_status & TimeZoneCached; }
+ inline void setTimeZoneCached() { m_status |= TimeZoneCached; }
+ inline void clearTimeZoneCached() { m_status &= ~TimeZoneCached; }
+ inline void clearSetToDaylightStatus() { m_status &= ~(SetToStandardTime | SetToDaylightTime); }
#ifndef QT_BOOTSTRAPPED
static qint64 zoneMSecsToEpochMSecs(qint64 msecs, const QTimeZone &zone,
diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h
index 023dafb223..57e67d52d7 100644
--- a/src/corelib/tools/qlist.h
+++ b/src/corelib/tools/qlist.h
@@ -66,6 +66,14 @@ template <typename T> struct QListSpecialMethods { };
template <> struct QListSpecialMethods<QByteArray>;
struct Q_CORE_EXPORT QListData {
+ // tags for tag-dispatching of QList implementations,
+ // based on QList's three different memory layouts:
+ struct NotArrayCompatibleLayout {};
+ struct NotIndirectLayout {};
+ struct ArrayCompatibleLayout : NotIndirectLayout {}; // data laid out like a C array
+ struct InlineWithPaddingLayout : NotArrayCompatibleLayout, NotIndirectLayout {}; // data laid out like a C array with padding
+ struct IndirectLayout : NotArrayCompatibleLayout {}; // data allocated on the heap
+
struct Data {
QtPrivate::RefCount ref;
int alloc, begin, end;
@@ -99,6 +107,17 @@ struct Q_CORE_EXPORT QListData {
template <typename T>
class QList : public QListSpecialMethods<T>
{
+public:
+ struct MemoryLayout
+ : QtPrivate::if_<
+ QTypeInfo<T>::isStatic || QTypeInfo<T>::isLarge,
+ QListData::IndirectLayout,
+ typename QtPrivate::if_<
+ sizeof(T) == sizeof(void*),
+ QListData::ArrayCompatibleLayout,
+ QListData::InlineWithPaddingLayout
+ >::type>::type {};
+private:
struct Node { void *v;
#if defined(Q_CC_BOR)
Q_INLINE_TEMPLATE T &t();
@@ -358,6 +377,14 @@ private:
{
return (constBegin().i <= i.i) && (i.i <= constEnd().i);
}
+
+private:
+ inline bool op_eq_impl(const QList &other, QListData::NotArrayCompatibleLayout) const;
+ inline bool op_eq_impl(const QList &other, QListData::ArrayCompatibleLayout) const;
+ inline bool contains_impl(const T &, QListData::NotArrayCompatibleLayout) const;
+ inline bool contains_impl(const T &, QListData::ArrayCompatibleLayout) const;
+ inline int count_impl(const T &, QListData::NotArrayCompatibleLayout) const;
+ inline int count_impl(const T &, QListData::ArrayCompatibleLayout) const;
};
#if defined(Q_CC_BOR)
@@ -771,6 +798,12 @@ Q_OUTOFLINE_TEMPLATE bool QList<T>::operator==(const QList<T> &l) const
return true;
if (p.size() != l.p.size())
return false;
+ return this->op_eq_impl(l, MemoryLayout());
+}
+
+template <typename T>
+inline bool QList<T>::op_eq_impl(const QList &l, QListData::NotArrayCompatibleLayout) const
+{
Node *i = reinterpret_cast<Node *>(p.begin());
Node *e = reinterpret_cast<Node *>(p.end());
Node *li = reinterpret_cast<Node *>(l.p.begin());
@@ -782,6 +815,15 @@ Q_OUTOFLINE_TEMPLATE bool QList<T>::operator==(const QList<T> &l) const
}
template <typename T>
+inline bool QList<T>::op_eq_impl(const QList &l, QListData::ArrayCompatibleLayout) const
+{
+ const T *lb = reinterpret_cast<const T*>(l.p.begin());
+ const T *b = reinterpret_cast<const T*>(p.begin());
+ const T *e = reinterpret_cast<const T*>(p.end());
+ return std::equal(b, e, lb);
+}
+
+template <typename T>
Q_OUTOFLINE_TEMPLATE void QList<T>::dealloc(QListData::Data *data)
{
node_destruct(reinterpret_cast<Node *>(data->array + data->begin),
@@ -922,6 +964,12 @@ Q_OUTOFLINE_TEMPLATE int QList<T>::lastIndexOf(const T &t, int from) const
template <typename T>
Q_OUTOFLINE_TEMPLATE bool QList<T>::contains(const T &t) const
{
+ return contains_impl(t, MemoryLayout());
+}
+
+template <typename T>
+inline bool QList<T>::contains_impl(const T &t, QListData::NotArrayCompatibleLayout) const
+{
Node *e = reinterpret_cast<Node *>(p.end());
Node *i = reinterpret_cast<Node *>(p.begin());
for (; i != e; ++i)
@@ -931,8 +979,22 @@ Q_OUTOFLINE_TEMPLATE bool QList<T>::contains(const T &t) const
}
template <typename T>
+inline bool QList<T>::contains_impl(const T &t, QListData::ArrayCompatibleLayout) const
+{
+ const T *b = reinterpret_cast<const T*>(p.begin());
+ const T *e = reinterpret_cast<const T*>(p.end());
+ return std::find(b, e, t) != e;
+}
+
+template <typename T>
Q_OUTOFLINE_TEMPLATE int QList<T>::count(const T &t) const
{
+ return this->count_impl(t, MemoryLayout());
+}
+
+template <typename T>
+inline int QList<T>::count_impl(const T &t, QListData::NotArrayCompatibleLayout) const
+{
int c = 0;
Node *e = reinterpret_cast<Node *>(p.end());
Node *i = reinterpret_cast<Node *>(p.begin());
@@ -942,6 +1004,14 @@ Q_OUTOFLINE_TEMPLATE int QList<T>::count(const T &t) const
return c;
}
+template <typename T>
+inline int QList<T>::count_impl(const T &t, QListData::ArrayCompatibleLayout) const
+{
+ return int(std::count(reinterpret_cast<const T*>(p.begin()),
+ reinterpret_cast<const T*>(p.end()),
+ t));
+}
+
Q_DECLARE_SEQUENTIAL_ITERATOR(List)
Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR(List)
diff --git a/src/corelib/tools/qlocale_mac.mm b/src/corelib/tools/qlocale_mac.mm
index 4532f4b391..b581e33aef 100644
--- a/src/corelib/tools/qlocale_mac.mm
+++ b/src/corelib/tools/qlocale_mac.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
diff --git a/src/corelib/tools/qpair.h b/src/corelib/tools/qpair.h
index aa0a53388c..d637067fa8 100644
--- a/src/corelib/tools/qpair.h
+++ b/src/corelib/tools/qpair.h
@@ -45,22 +45,31 @@ struct QPair
typedef T1 first_type;
typedef T2 second_type;
- Q_DECL_CONSTEXPR QPair() : first(), second() {}
- Q_DECL_CONSTEXPR QPair(const T1 &t1, const T2 &t2) : first(t1), second(t2) {}
+ Q_DECL_CONSTEXPR QPair()
+ Q_DECL_NOEXCEPT_EXPR(noexcept(T1()) && noexcept(T2()))
+ : first(), second() {}
+ Q_DECL_CONSTEXPR QPair(const T1 &t1, const T2 &t2)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(T1(t1)) && noexcept(T2(t2)))
+ : first(t1), second(t2) {}
// compiler-generated copy/move ctor/assignment operators are fine!
template <typename TT1, typename TT2>
- Q_DECL_CONSTEXPR QPair(const QPair<TT1, TT2> &p) : first(p.first), second(p.second) {}
+ Q_DECL_CONSTEXPR QPair(const QPair<TT1, TT2> &p)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(T1(p.first)) && noexcept(T2(p.second)))
+ : first(p.first), second(p.second) {}
template <typename TT1, typename TT2>
Q_DECL_RELAXED_CONSTEXPR QPair &operator=(const QPair<TT1, TT2> &p)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(std::declval<T1&>() = p.first) && noexcept(std::declval<T2&>() = p.second))
{ first = p.first; second = p.second; return *this; }
#ifdef Q_COMPILER_RVALUE_REFS
template <typename TT1, typename TT2>
Q_DECL_CONSTEXPR QPair(QPair<TT1, TT2> &&p)
// can't use std::move here as it's not constexpr in C++11:
+ Q_DECL_NOEXCEPT_EXPR(noexcept(T1(static_cast<TT1 &&>(p.first))) && noexcept(T2(static_cast<TT2 &&>(p.second))))
: first(static_cast<TT1 &&>(p.first)), second(static_cast<TT2 &&>(p.second)) {}
template <typename TT1, typename TT2>
Q_DECL_RELAXED_CONSTEXPR QPair &operator=(QPair<TT1, TT2> &&p)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(std::declval<T1&>() = std::move(p.first)) && noexcept(std::declval<T2&>() = std::move(p.second)))
{ first = std::move(p.first); second = std::move(p.second); return *this; }
#endif
diff --git a/src/corelib/tools/qstring_mac.mm b/src/corelib/tools/qstring_mac.mm
index add4ed1328..c958710b3b 100644
--- a/src/corelib/tools/qstring_mac.mm
+++ b/src/corelib/tools/qstring_mac.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
diff --git a/src/corelib/tools/qtimezone.cpp b/src/corelib/tools/qtimezone.cpp
index b6160a3fd8..c2ee99a2d8 100644
--- a/src/corelib/tools/qtimezone.cpp
+++ b/src/corelib/tools/qtimezone.cpp
@@ -378,12 +378,10 @@ QTimeZone::QTimeZone(int offsetSeconds)
QTimeZone::QTimeZone(const QByteArray &ianaId, int offsetSeconds, const QString &name,
const QString &abbreviation, QLocale::Country country, const QString &comment)
+ : d()
{
- // ianaId must be a valid ID and must not clash with the standard system names
- if (QTimeZonePrivate::isValidId(ianaId) && !availableTimeZoneIds().contains(ianaId))
+ if (!isTimeZoneIdAvailable(ianaId))
d = new QUtcTimeZonePrivate(ianaId, offsetSeconds, name, abbreviation, country, comment);
- else
- d = 0;
}
/*!
@@ -821,7 +819,20 @@ bool QTimeZone::isTimeZoneIdAvailable(const QByteArray &ianaId)
{
// isValidId is not strictly required, but faster to weed out invalid
// IDs as availableTimeZoneIds() may be slow
- return (QTimeZonePrivate::isValidId(ianaId) && (availableTimeZoneIds().contains(ianaId)));
+ if (!QTimeZonePrivate::isValidId(ianaId))
+ return false;
+ const QList<QByteArray> tzIds = availableTimeZoneIds();
+ return std::binary_search(tzIds.begin(), tzIds.end(), ianaId);
+}
+
+static QList<QByteArray> set_union(const QList<QByteArray> &l1, const QList<QByteArray> &l2)
+{
+ QList<QByteArray> result;
+ result.reserve(l1.size() + l2.size());
+ std::set_union(l1.begin(), l1.end(),
+ l2.begin(), l2.end(),
+ std::back_inserter(result));
+ return result;
}
/*!
@@ -832,11 +843,8 @@ bool QTimeZone::isTimeZoneIdAvailable(const QByteArray &ianaId)
QList<QByteArray> QTimeZone::availableTimeZoneIds()
{
- QSet<QByteArray> set = QUtcTimeZonePrivate().availableTimeZoneIds()
- + global_tz->backend->availableTimeZoneIds();
- QList<QByteArray> list = set.toList();
- std::sort(list.begin(), list.end());
- return list;
+ return set_union(QUtcTimeZonePrivate().availableTimeZoneIds(),
+ global_tz->backend->availableTimeZoneIds());
}
/*!
@@ -852,11 +860,8 @@ QList<QByteArray> QTimeZone::availableTimeZoneIds()
QList<QByteArray> QTimeZone::availableTimeZoneIds(QLocale::Country country)
{
- QSet<QByteArray> set = QUtcTimeZonePrivate().availableTimeZoneIds(country)
- + global_tz->backend->availableTimeZoneIds(country);
- QList<QByteArray> list = set.toList();
- std::sort(list.begin(), list.end());
- return list;
+ return set_union(QUtcTimeZonePrivate().availableTimeZoneIds(country),
+ global_tz->backend->availableTimeZoneIds(country));
}
/*!
@@ -868,11 +873,8 @@ QList<QByteArray> QTimeZone::availableTimeZoneIds(QLocale::Country country)
QList<QByteArray> QTimeZone::availableTimeZoneIds(int offsetSeconds)
{
- QSet<QByteArray> set = QUtcTimeZonePrivate().availableTimeZoneIds(offsetSeconds)
- + global_tz->backend->availableTimeZoneIds(offsetSeconds);
- QList<QByteArray> list = set.toList();
- std::sort(list.begin(), list.end());
- return list;
+ return set_union(QUtcTimeZonePrivate().availableTimeZoneIds(offsetSeconds),
+ global_tz->backend->availableTimeZoneIds(offsetSeconds));
}
/*!
diff --git a/src/corelib/tools/qtimezoneprivate.cpp b/src/corelib/tools/qtimezoneprivate.cpp
index 337f0e6bfb..164db5ed0c 100644
--- a/src/corelib/tools/qtimezoneprivate.cpp
+++ b/src/corelib/tools/qtimezoneprivate.cpp
@@ -39,6 +39,8 @@
#include <qdatastream.h>
#include <qdebug.h>
+#include <algorithm>
+
QT_BEGIN_NAMESPACE
enum {
@@ -341,36 +343,38 @@ QByteArray QTimeZonePrivate::systemTimeZoneId() const
return QByteArray();
}
-QSet<QByteArray> QTimeZonePrivate::availableTimeZoneIds() const
+QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds() const
{
- return QSet<QByteArray>();
+ return QList<QByteArray>();
}
-QSet<QByteArray> QTimeZonePrivate::availableTimeZoneIds(QLocale::Country country) const
+QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds(QLocale::Country country) const
{
// Default fall-back mode, use the zoneTable to find Region of know Zones
- QSet<QByteArray> regionSet;
+ QList<QByteArray> regions;
// First get all Zones in the Zones table belonging to the Region
for (int i = 0; i < zoneDataTableSize; ++i) {
if (zoneData(i)->country == country)
- regionSet += ianaId(zoneData(i)).split(' ').toSet();
+ regions += ianaId(zoneData(i)).split(' ');
}
- // Then select just those that are available
- QSet<QByteArray> set;
- foreach (const QByteArray &ianaId, availableTimeZoneIds()) {
- if (regionSet.contains(ianaId))
- set << ianaId;
- }
+ std::sort(regions.begin(), regions.end());
+ regions.erase(std::unique(regions.begin(), regions.end()), regions.end());
- return set;
+ // Then select just those that are available
+ const QList<QByteArray> all = availableTimeZoneIds();
+ QList<QByteArray> result;
+ result.reserve(qMin(all.size(), regions.size()));
+ std::set_intersection(all.begin(), all.end(), regions.cbegin(), regions.cend(),
+ std::back_inserter(result));
+ return result;
}
-QSet<QByteArray> QTimeZonePrivate::availableTimeZoneIds(int offsetFromUtc) const
+QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds(int offsetFromUtc) const
{
// Default fall-back mode, use the zoneTable to find Offset of know Zones
- QSet<QByteArray> offsetSet;
+ QList<QByteArray> offsets;
// First get all Zones in the table using the Offset
for (int i = 0; i < windowsDataTableSize; ++i) {
const QWindowsData *winData = windowsData(i);
@@ -378,19 +382,21 @@ QSet<QByteArray> QTimeZonePrivate::availableTimeZoneIds(int offsetFromUtc) const
for (int j = 0; j < zoneDataTableSize; ++j) {
const QZoneData *data = zoneData(j);
if (data->windowsIdKey == winData->windowsIdKey)
- offsetSet += ianaId(data).split(' ').toSet();
+ offsets += ianaId(data).split(' ');
}
}
}
- // Then select just those that are available
- QSet<QByteArray> set;
- foreach (const QByteArray &ianaId, availableTimeZoneIds()) {
- if (offsetSet.contains(ianaId))
- set << ianaId;
- }
+ std::sort(offsets.begin(), offsets.end());
+ offsets.erase(std::unique(offsets.begin(), offsets.end()), offsets.end());
- return set;
+ // Then select just those that are available
+ const QList<QByteArray> all = availableTimeZoneIds();
+ QList<QByteArray> result;
+ result.reserve(qMin(all.size(), offsets.size()));
+ std::set_intersection(all.begin(), all.end(), offsets.cbegin(), offsets.cend(),
+ std::back_inserter(result));
+ return result;
}
#ifndef QT_NO_DATASTREAM
@@ -682,31 +688,35 @@ QByteArray QUtcTimeZonePrivate::systemTimeZoneId() const
return utcQByteArray();
}
-QSet<QByteArray> QUtcTimeZonePrivate::availableTimeZoneIds() const
+QList<QByteArray> QUtcTimeZonePrivate::availableTimeZoneIds() const
{
- QSet<QByteArray> set;
+ QList<QByteArray> result;
for (int i = 0; i < utcDataTableSize; ++i)
- set << utcId(utcData(i));
- return set;
+ result << utcId(utcData(i));
+ std::sort(result.begin(), result.end()); // ### or already sorted??
+ // ### assuming no duplicates
+ return result;
}
-QSet<QByteArray> QUtcTimeZonePrivate::availableTimeZoneIds(QLocale::Country country) const
+QList<QByteArray> QUtcTimeZonePrivate::availableTimeZoneIds(QLocale::Country country) const
{
// If AnyCountry then is request for all non-region offset codes
if (country == QLocale::AnyCountry)
return availableTimeZoneIds();
- return QSet<QByteArray>();
+ return QList<QByteArray>();
}
-QSet<QByteArray> QUtcTimeZonePrivate::availableTimeZoneIds(qint32 offsetSeconds) const
+QList<QByteArray> QUtcTimeZonePrivate::availableTimeZoneIds(qint32 offsetSeconds) const
{
- QSet<QByteArray> set;
+ QList<QByteArray> result;
for (int i = 0; i < utcDataTableSize; ++i) {
const QUtcData *data = utcData(i);
if (data->offsetFromUtc == offsetSeconds)
- set << utcId(data);
+ result << utcId(data);
}
- return set;
+ std::sort(result.begin(), result.end()); // ### or already sorted??
+ // ### assuming no duplicates
+ return result;
}
#ifndef QT_NO_DATASTREAM
diff --git a/src/corelib/tools/qtimezoneprivate_android.cpp b/src/corelib/tools/qtimezoneprivate_android.cpp
index f7f4aaab06..6178fe935a 100644
--- a/src/corelib/tools/qtimezoneprivate_android.cpp
+++ b/src/corelib/tools/qtimezoneprivate_android.cpp
@@ -262,9 +262,9 @@ QByteArray QAndroidTimeZonePrivate::systemTimeZoneId() const
return systemTZid;
}
-QSet<QByteArray> QAndroidTimeZonePrivate::availableTimeZoneIds() const
+QList<QByteArray> QAndroidTimeZonePrivate::availableTimeZoneIds() const
{
- QSet<QByteArray> availableTimeZoneIdList;
+ QList<QByteArray> availableTimeZoneIdList;
QJNIObjectPrivate androidAvailableIdList = QJNIObjectPrivate::callStaticObjectMethod("java.util.TimeZone", "getAvailableIDs", "()[Ljava/lang/String;");
QJNIEnvironmentPrivate jniEnv;
@@ -277,7 +277,7 @@ QSet<QByteArray> QAndroidTimeZonePrivate::availableTimeZoneIds() const
for (int i=0; i<androidTZcount; i++ ) {
androidTZobject = jniEnv->GetObjectArrayElement( static_cast<jobjectArray>( androidAvailableIdList.object() ), i );
androidTZ = androidTZobject;
- availableTimeZoneIdList.insert( androidTZ.toString().toUtf8() );
+ availableTimeZoneIdList.append( androidTZ.toString().toUtf8() );
jniEnv->DeleteLocalRef(androidTZobject);
}
diff --git a/src/corelib/tools/qtimezoneprivate_icu.cpp b/src/corelib/tools/qtimezoneprivate_icu.cpp
index 3ab42661c0..dd57464a72 100644
--- a/src/corelib/tools/qtimezoneprivate_icu.cpp
+++ b/src/corelib/tools/qtimezoneprivate_icu.cpp
@@ -37,6 +37,9 @@
#include <unicode/ucal.h>
#include <qdebug.h>
+#include <qlist.h>
+
+#include <algorithm>
QT_BEGIN_NAMESPACE
@@ -234,19 +237,21 @@ static QTimeZonePrivate::Data ucalTimeZoneTransition(UCalendar *m_ucal,
#endif // U_ICU_VERSION_SHORT
// Convert a uenum to a QList<QByteArray>
-static QSet<QByteArray> uenumToIdSet(UEnumeration *uenum)
+static QList<QByteArray> uenumToIdList(UEnumeration *uenum)
{
- QSet<QByteArray> set;
+ QList<QByteArray> list;
int32_t size = 0;
UErrorCode status = U_ZERO_ERROR;
// TODO Perhaps use uenum_unext instead?
QByteArray result = uenum_next(uenum, &size, &status);
while (U_SUCCESS(status) && !result.isEmpty()) {
- set << result;
+ list << result;
status = U_ZERO_ERROR;
result = uenum_next(uenum, &size, &status);
}
- return set;
+ std::sort(list.begin(), list.end());
+ list.erase(std::unique(list.begin(), list.end()), list.end());
+ return list;
}
// Qt wrapper around ucal_getDSTSavings()
@@ -453,41 +458,41 @@ QByteArray QIcuTimeZonePrivate::systemTimeZoneId() const
return ucalDefaultTimeZoneId();
}
-QSet<QByteArray> QIcuTimeZonePrivate::availableTimeZoneIds() const
+QList<QByteArray> QIcuTimeZonePrivate::availableTimeZoneIds() const
{
UErrorCode status = U_ZERO_ERROR;
UEnumeration *uenum = ucal_openTimeZones(&status);
- QSet<QByteArray> set;
+ QList<QByteArray> result;
if (U_SUCCESS(status))
- set = uenumToIdSet(uenum);
+ result = uenumToIdList(uenum);
uenum_close(uenum);
- return set;
+ return result;
}
-QSet<QByteArray> QIcuTimeZonePrivate::availableTimeZoneIds(QLocale::Country country) const
+QList<QByteArray> QIcuTimeZonePrivate::availableTimeZoneIds(QLocale::Country country) const
{
QByteArray regionCode = QLocalePrivate::countryToCode(country).toUtf8();
UErrorCode status = U_ZERO_ERROR;
UEnumeration *uenum = ucal_openCountryTimeZones(regionCode, &status);
- QSet<QByteArray> set;
+ QList<QByteArray> result;
if (U_SUCCESS(status))
- set = uenumToIdSet(uenum);
+ result = uenumToIdList(uenum);
uenum_close(uenum);
- return set;
+ return result;
}
-QSet<QByteArray> QIcuTimeZonePrivate::availableTimeZoneIds(int offsetFromUtc) const
+QList<QByteArray> QIcuTimeZonePrivate::availableTimeZoneIds(int offsetFromUtc) const
{
// TODO Available directly in C++ api but not C api, from 4.8 onwards new filter method works
#if U_ICU_VERSION_MAJOR_NUM >= 49 || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM == 8)
UErrorCode status = U_ZERO_ERROR;
UEnumeration *uenum = ucal_openTimeZoneIDEnumeration(UCAL_ZONE_TYPE_ANY, 0,
&offsetFromUtc, &status);
- QSet<QByteArray> set;
+ QList<QByteArray> result;
if (U_SUCCESS(status))
- set = uenumToIdSet(uenum);
+ result = uenumToIdList(uenum);
uenum_close(uenum);
- return set;
+ return result;
#else
return QTimeZonePrivate::availableTimeZoneIds(offsetFromUtc);
#endif
diff --git a/src/corelib/tools/qtimezoneprivate_mac.mm b/src/corelib/tools/qtimezoneprivate_mac.mm
index b0c3c9e64f..f316fe0a6d 100644
--- a/src/corelib/tools/qtimezoneprivate_mac.mm
+++ b/src/corelib/tools/qtimezoneprivate_mac.mm
@@ -41,6 +41,8 @@
#include <qdebug.h>
+#include <algorithm>
+
QT_BEGIN_NAMESPACE
/*
@@ -247,18 +249,21 @@ QByteArray QMacTimeZonePrivate::systemTimeZoneId() const
return QCFString::toQString([[NSTimeZone systemTimeZone] name]).toUtf8();
}
-QSet<QByteArray> QMacTimeZonePrivate::availableTimeZoneIds() const
+QList<QByteArray> QMacTimeZonePrivate::availableTimeZoneIds() const
{
NSEnumerator *enumerator = [[NSTimeZone knownTimeZoneNames] objectEnumerator];
QByteArray tzid = QCFString::toQString([enumerator nextObject]).toUtf8();
- QSet<QByteArray> set;
+ QList<QByteArray> list;
while (!tzid.isEmpty()) {
- set << tzid;
+ list << tzid;
tzid = QCFString::toQString([enumerator nextObject]).toUtf8();
}
- return set;
+ std::sort(list.begin(), list.end());
+ list.erase(std::unique(list.begin(), list.end()), list.end());
+
+ return list;
}
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qtimezoneprivate_p.h b/src/corelib/tools/qtimezoneprivate_p.h
index 609ed50c56..803ba1f57a 100644
--- a/src/corelib/tools/qtimezoneprivate_p.h
+++ b/src/corelib/tools/qtimezoneprivate_p.h
@@ -126,9 +126,9 @@ public:
virtual QByteArray systemTimeZoneId() const;
- virtual QSet<QByteArray> availableTimeZoneIds() const;
- virtual QSet<QByteArray> availableTimeZoneIds(QLocale::Country country) const;
- virtual QSet<QByteArray> availableTimeZoneIds(int utcOffset) const;
+ virtual QList<QByteArray> availableTimeZoneIds() const;
+ virtual QList<QByteArray> availableTimeZoneIds(QLocale::Country country) const;
+ virtual QList<QByteArray> availableTimeZoneIds(int utcOffset) const;
virtual void serialize(QDataStream &ds) const;
@@ -199,9 +199,9 @@ public:
QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
- QSet<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
- QSet<QByteArray> availableTimeZoneIds(QLocale::Country country) const Q_DECL_OVERRIDE;
- QSet<QByteArray> availableTimeZoneIds(int utcOffset) const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds(QLocale::Country country) const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds(int utcOffset) const Q_DECL_OVERRIDE;
void serialize(QDataStream &ds) const Q_DECL_OVERRIDE;
@@ -250,9 +250,9 @@ public:
QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
- QSet<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
- QSet<QByteArray> availableTimeZoneIds(QLocale::Country country) const Q_DECL_OVERRIDE;
- QSet<QByteArray> availableTimeZoneIds(int offsetFromUtc) const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds(QLocale::Country country) const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds(int offsetFromUtc) const Q_DECL_OVERRIDE;
private:
void init(const QByteArray &ianaId);
@@ -318,8 +318,8 @@ public:
QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
- QSet<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
- QSet<QByteArray> availableTimeZoneIds(QLocale::Country country) const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds(QLocale::Country country) const Q_DECL_OVERRIDE;
private:
void init(const QByteArray &ianaId);
@@ -369,7 +369,7 @@ public:
QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
- QSet<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
private:
void init(const QByteArray &zoneId);
@@ -420,7 +420,7 @@ public:
QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
- QSet<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
private:
void init(const QByteArray &ianaId);
@@ -470,7 +470,7 @@ public:
QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
- QSet<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
private:
void init(const QByteArray &zoneId);
diff --git a/src/corelib/tools/qtimezoneprivate_tz.cpp b/src/corelib/tools/qtimezoneprivate_tz.cpp
index 0d8ae3b47f..29f0e17012 100644
--- a/src/corelib/tools/qtimezoneprivate_tz.cpp
+++ b/src/corelib/tools/qtimezoneprivate_tz.cpp
@@ -41,6 +41,7 @@
#include <qdebug.h>
+#include <algorithm>
QT_BEGIN_NAMESPACE
@@ -956,20 +957,23 @@ QByteArray QTzTimeZonePrivate::systemTimeZoneId() const
return ianaId;
}
-QSet<QByteArray> QTzTimeZonePrivate::availableTimeZoneIds() const
+QList<QByteArray> QTzTimeZonePrivate::availableTimeZoneIds() const
{
- return tzZones->keys().toSet();
+ QList<QByteArray> result = tzZones->keys();
+ std::sort(result.begin(), result.end());
+ return result;
}
-QSet<QByteArray> QTzTimeZonePrivate::availableTimeZoneIds(QLocale::Country country) const
+QList<QByteArray> QTzTimeZonePrivate::availableTimeZoneIds(QLocale::Country country) const
{
// TODO AnyCountry
- QSet<QByteArray> set;
+ QList<QByteArray> result;
foreach (const QByteArray &key, tzZones->keys()) {
if (tzZones->value(key).country == country)
- set << key;
+ result << key;
}
- return set;
+ std::sort(result.begin(), result.end());
+ return result;
}
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qtimezoneprivate_win.cpp b/src/corelib/tools/qtimezoneprivate_win.cpp
index 2d0caf07a8..a9bb3aa3b5 100644
--- a/src/corelib/tools/qtimezoneprivate_win.cpp
+++ b/src/corelib/tools/qtimezoneprivate_win.cpp
@@ -38,6 +38,8 @@
#include "qdebug.h"
+#include <algorithm>
+
QT_BEGIN_NAMESPACE
/*
@@ -632,14 +634,16 @@ QByteArray QWinTimeZonePrivate::systemTimeZoneId() const
return ianaId;
}
-QSet<QByteArray> QWinTimeZonePrivate::availableTimeZoneIds() const
+QList<QByteArray> QWinTimeZonePrivate::availableTimeZoneIds() const
{
- QSet<QByteArray> set;
+ QList<QByteArray> result;
foreach (const QByteArray &winId, availableWindowsIds()) {
foreach (const QByteArray &ianaId, windowsIdToIanaIds(winId))
- set << ianaId;
+ result << ianaId;
}
- return set;
+ std::sort(result.begin(), result.end());
+ result.erase(std::unique(result.begin(), result.end()), result.end());
+ return result;
}
QWinTimeZonePrivate::QWinTransitionRule QWinTimeZonePrivate::ruleForYear(int year) const
diff --git a/src/corelib/tools/qversionnumber.cpp b/src/corelib/tools/qversionnumber.cpp
index 10e3f57140..660f40b107 100644
--- a/src/corelib/tools/qversionnumber.cpp
+++ b/src/corelib/tools/qversionnumber.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Copyright (C) 2014 Keith Gardner <kreios4004@gmail.com>
** Contact: http://www.qt.io/licensing/
**
diff --git a/src/corelib/tools/qversionnumber_p.h b/src/corelib/tools/qversionnumber_p.h
index 4d42995ef7..2da3103be3 100644
--- a/src/corelib/tools/qversionnumber_p.h
+++ b/src/corelib/tools/qversionnumber_p.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Copyright (C) 2014 Keith Gardner <kreios4004@gmail.com>
** Contact: http://www.qt.io/licensing/
**
diff --git a/src/corelib/xml/make-parser.sh b/src/corelib/xml/make-parser.sh
index 79a52f6e9e..2514661994 100755
--- a/src/corelib/xml/make-parser.sh
+++ b/src/corelib/xml/make-parser.sh
@@ -1,7 +1,7 @@
#!/bin/sh
#############################################################################
##
-## Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+## Copyright (C) 2015 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is the build configuration utility of the Qt Toolkit.
diff --git a/src/gui/accessible/qaccessiblecache_mac.mm b/src/gui/accessible/qaccessiblecache_mac.mm
index 717496ed2b..b0266ee25f 100644
--- a/src/gui/accessible/qaccessiblecache_mac.mm
+++ b/src/gui/accessible/qaccessiblecache_mac.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
diff --git a/src/gui/kernel/qplatformgraphicsbuffer.cpp b/src/gui/kernel/qplatformgraphicsbuffer.cpp
index 91c2ba23c9..84fe673bcf 100644
--- a/src/gui/kernel/qplatformgraphicsbuffer.cpp
+++ b/src/gui/kernel/qplatformgraphicsbuffer.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
diff --git a/src/gui/kernel/qplatformgraphicsbuffer.h b/src/gui/kernel/qplatformgraphicsbuffer.h
index 9ad991e796..e13ab783c2 100644
--- a/src/gui/kernel/qplatformgraphicsbuffer.h
+++ b/src/gui/kernel/qplatformgraphicsbuffer.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
diff --git a/src/gui/kernel/qplatformgraphicsbufferhelper.cpp b/src/gui/kernel/qplatformgraphicsbufferhelper.cpp
index 5a77d31e3f..7da95ffcec 100644
--- a/src/gui/kernel/qplatformgraphicsbufferhelper.cpp
+++ b/src/gui/kernel/qplatformgraphicsbufferhelper.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtPlatformSupport module of the Qt Toolkit.
diff --git a/src/gui/kernel/qplatformgraphicsbufferhelper.h b/src/gui/kernel/qplatformgraphicsbufferhelper.h
index a719bbf90d..ded7810608 100644
--- a/src/gui/kernel/qplatformgraphicsbufferhelper.h
+++ b/src/gui/kernel/qplatformgraphicsbufferhelper.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtPlatformSupport module of the Qt Toolkit.
diff --git a/src/gui/opengl/qopenglversionfunctions.cpp b/src/gui/opengl/qopenglversionfunctions.cpp
index 6f86375838..f3f709c3f0 100644
--- a/src/gui/opengl/qopenglversionfunctions.cpp
+++ b/src/gui/opengl/qopenglversionfunctions.cpp
@@ -338,6 +338,8 @@ QOpenGLFunctions_1_1_CoreBackend::QOpenGLFunctions_1_1_CoreBackend(QOpenGLContex
HMODULE handle = static_cast<HMODULE>(QOpenGLContext::openGLModuleHandle());
if (!handle)
handle = GetModuleHandleA("opengl32.dll");
+ Indexubv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(const GLubyte *)>(GetProcAddress(handle, "glIndexubv"));
+ Indexub = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLubyte )>(GetProcAddress(handle, "glIndexub"));
IsTexture = reinterpret_cast<GLboolean (QOPENGLF_APIENTRYP)(GLuint )>(GetProcAddress(handle, "glIsTexture"));
GenTextures = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLsizei , GLuint *)>(GetProcAddress(handle, "glGenTextures"));
DeleteTextures = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLsizei , const GLuint *)>(GetProcAddress(handle, "glDeleteTextures"));
@@ -349,9 +351,12 @@ QOpenGLFunctions_1_1_CoreBackend::QOpenGLFunctions_1_1_CoreBackend(QOpenGLContex
CopyTexImage2D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLenum , GLint , GLint , GLsizei , GLsizei , GLint )>(GetProcAddress(handle, "glCopyTexImage2D"));
CopyTexImage1D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLenum , GLint , GLint , GLsizei , GLint )>(GetProcAddress(handle, "glCopyTexImage1D"));
PolygonOffset = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLfloat , GLfloat )>(GetProcAddress(handle, "glPolygonOffset"));
+ GetPointerv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLvoid * *)>(GetProcAddress(handle, "glGetPointerv"));
DrawElements = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLsizei , GLenum , const GLvoid *)>(GetProcAddress(handle, "glDrawElements"));
DrawArrays = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLsizei )>(GetProcAddress(handle, "glDrawArrays"));
#else
+ Indexubv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(const GLubyte *)>(context->getProcAddress("glIndexubv"));
+ Indexub = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLubyte )>(context->getProcAddress("glIndexub"));
IsTexture = reinterpret_cast<GLboolean (QOPENGLF_APIENTRYP)(GLuint )>(context->getProcAddress("glIsTexture"));
GenTextures = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLsizei , GLuint *)>(context->getProcAddress("glGenTextures"));
DeleteTextures = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLsizei , const GLuint *)>(context->getProcAddress("glDeleteTextures"));
@@ -363,6 +368,7 @@ QOpenGLFunctions_1_1_CoreBackend::QOpenGLFunctions_1_1_CoreBackend(QOpenGLContex
CopyTexImage2D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLenum , GLint , GLint , GLsizei , GLsizei , GLint )>(context->getProcAddress("glCopyTexImage2D"));
CopyTexImage1D = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLenum , GLint , GLint , GLsizei , GLint )>(context->getProcAddress("glCopyTexImage1D"));
PolygonOffset = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLfloat , GLfloat )>(context->getProcAddress("glPolygonOffset"));
+ GetPointerv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLvoid * *)>(context->getProcAddress("glGetPointerv"));
DrawElements = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLsizei , GLenum , const GLvoid *)>(context->getProcAddress("glDrawElements"));
DrawArrays = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLint , GLsizei )>(context->getProcAddress("glDrawArrays"));
#endif
@@ -749,6 +755,36 @@ QOpenGLFunctions_3_3_CoreBackend::QOpenGLFunctions_3_3_CoreBackend(QOpenGLContex
VertexAttribP2ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLboolean , GLuint )>(context->getProcAddress("glVertexAttribP2ui"));
VertexAttribP1uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLboolean , const GLuint *)>(context->getProcAddress("glVertexAttribP1uiv"));
VertexAttribP1ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLboolean , GLuint )>(context->getProcAddress("glVertexAttribP1ui"));
+ SecondaryColorP3uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , const GLuint *)>(context->getProcAddress("glSecondaryColorP3uiv"));
+ SecondaryColorP3ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLuint )>(context->getProcAddress("glSecondaryColorP3ui"));
+ ColorP4uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , const GLuint *)>(context->getProcAddress("glColorP4uiv"));
+ ColorP4ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLuint )>(context->getProcAddress("glColorP4ui"));
+ ColorP3uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , const GLuint *)>(context->getProcAddress("glColorP3uiv"));
+ ColorP3ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLuint )>(context->getProcAddress("glColorP3ui"));
+ NormalP3uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , const GLuint *)>(context->getProcAddress("glNormalP3uiv"));
+ NormalP3ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLuint )>(context->getProcAddress("glNormalP3ui"));
+ MultiTexCoordP4uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLenum , const GLuint *)>(context->getProcAddress("glMultiTexCoordP4uiv"));
+ MultiTexCoordP4ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLenum , GLuint )>(context->getProcAddress("glMultiTexCoordP4ui"));
+ MultiTexCoordP3uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLenum , const GLuint *)>(context->getProcAddress("glMultiTexCoordP3uiv"));
+ MultiTexCoordP3ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLenum , GLuint )>(context->getProcAddress("glMultiTexCoordP3ui"));
+ MultiTexCoordP2uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLenum , const GLuint *)>(context->getProcAddress("glMultiTexCoordP2uiv"));
+ MultiTexCoordP2ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLenum , GLuint )>(context->getProcAddress("glMultiTexCoordP2ui"));
+ MultiTexCoordP1uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLenum , const GLuint *)>(context->getProcAddress("glMultiTexCoordP1uiv"));
+ MultiTexCoordP1ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLenum , GLuint )>(context->getProcAddress("glMultiTexCoordP1ui"));
+ TexCoordP4uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , const GLuint *)>(context->getProcAddress("glTexCoordP4uiv"));
+ TexCoordP4ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLuint )>(context->getProcAddress("glTexCoordP4ui"));
+ TexCoordP3uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , const GLuint *)>(context->getProcAddress("glTexCoordP3uiv"));
+ TexCoordP3ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLuint )>(context->getProcAddress("glTexCoordP3ui"));
+ TexCoordP2uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , const GLuint *)>(context->getProcAddress("glTexCoordP2uiv"));
+ TexCoordP2ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLuint )>(context->getProcAddress("glTexCoordP2ui"));
+ TexCoordP1uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , const GLuint *)>(context->getProcAddress("glTexCoordP1uiv"));
+ TexCoordP1ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLuint )>(context->getProcAddress("glTexCoordP1ui"));
+ VertexP4uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , const GLuint *)>(context->getProcAddress("glVertexP4uiv"));
+ VertexP4ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLuint )>(context->getProcAddress("glVertexP4ui"));
+ VertexP3uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , const GLuint *)>(context->getProcAddress("glVertexP3uiv"));
+ VertexP3ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLuint )>(context->getProcAddress("glVertexP3ui"));
+ VertexP2uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , const GLuint *)>(context->getProcAddress("glVertexP2uiv"));
+ VertexP2ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLenum , GLuint )>(context->getProcAddress("glVertexP2ui"));
GetQueryObjectui64v = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLuint64 *)>(context->getProcAddress("glGetQueryObjectui64v"));
GetQueryObjecti64v = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum , GLint64 *)>(context->getProcAddress("glGetQueryObjecti64v"));
QueryCounter = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLenum )>(context->getProcAddress("glQueryCounter"));
@@ -1882,6 +1918,86 @@ QOpenGLVersionStatus QOpenGLFunctions_1_4_DeprecatedBackend::versionStatus()
return QOpenGLVersionStatus(1, 4, QOpenGLVersionStatus::DeprecatedStatus);
}
+QOpenGLFunctions_2_0_DeprecatedBackend::QOpenGLFunctions_2_0_DeprecatedBackend(QOpenGLContext *context)
+ : QOpenGLVersionFunctionsBackend(context)
+{
+ // OpenGL 2.0 deprecated functions
+ VertexAttrib4usv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLushort *)>(context->getProcAddress("glVertexAttrib4usv"));
+ VertexAttrib4uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLuint *)>(context->getProcAddress("glVertexAttrib4uiv"));
+ VertexAttrib4ubv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLubyte *)>(context->getProcAddress("glVertexAttrib4ubv"));
+ VertexAttrib4sv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLshort *)>(context->getProcAddress("glVertexAttrib4sv"));
+ VertexAttrib4s = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLshort , GLshort , GLshort , GLshort )>(context->getProcAddress("glVertexAttrib4s"));
+ VertexAttrib4iv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLint *)>(context->getProcAddress("glVertexAttrib4iv"));
+ VertexAttrib4fv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLfloat *)>(context->getProcAddress("glVertexAttrib4fv"));
+ VertexAttrib4f = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLfloat , GLfloat , GLfloat , GLfloat )>(context->getProcAddress("glVertexAttrib4f"));
+ VertexAttrib4dv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLdouble *)>(context->getProcAddress("glVertexAttrib4dv"));
+ VertexAttrib4d = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLdouble , GLdouble , GLdouble , GLdouble )>(context->getProcAddress("glVertexAttrib4d"));
+ VertexAttrib4bv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLbyte *)>(context->getProcAddress("glVertexAttrib4bv"));
+ VertexAttrib4Nusv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLushort *)>(context->getProcAddress("glVertexAttrib4Nusv"));
+ VertexAttrib4Nuiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLuint *)>(context->getProcAddress("glVertexAttrib4Nuiv"));
+ VertexAttrib4Nubv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLubyte *)>(context->getProcAddress("glVertexAttrib4Nubv"));
+ VertexAttrib4Nub = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLubyte , GLubyte , GLubyte , GLubyte )>(context->getProcAddress("glVertexAttrib4Nub"));
+ VertexAttrib4Nsv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLshort *)>(context->getProcAddress("glVertexAttrib4Nsv"));
+ VertexAttrib4Niv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLint *)>(context->getProcAddress("glVertexAttrib4Niv"));
+ VertexAttrib4Nbv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLbyte *)>(context->getProcAddress("glVertexAttrib4Nbv"));
+ VertexAttrib3sv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLshort *)>(context->getProcAddress("glVertexAttrib3sv"));
+ VertexAttrib3s = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLshort , GLshort , GLshort )>(context->getProcAddress("glVertexAttrib3s"));
+ VertexAttrib3fv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLfloat *)>(context->getProcAddress("glVertexAttrib3fv"));
+ VertexAttrib3f = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLfloat , GLfloat , GLfloat )>(context->getProcAddress("glVertexAttrib3f"));
+ VertexAttrib3dv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLdouble *)>(context->getProcAddress("glVertexAttrib3dv"));
+ VertexAttrib3d = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLdouble , GLdouble , GLdouble )>(context->getProcAddress("glVertexAttrib3d"));
+ VertexAttrib2sv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLshort *)>(context->getProcAddress("glVertexAttrib2sv"));
+ VertexAttrib2s = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLshort , GLshort )>(context->getProcAddress("glVertexAttrib2s"));
+ VertexAttrib2fv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLfloat *)>(context->getProcAddress("glVertexAttrib2fv"));
+ VertexAttrib2f = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLfloat , GLfloat )>(context->getProcAddress("glVertexAttrib2f"));
+ VertexAttrib2dv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLdouble *)>(context->getProcAddress("glVertexAttrib2dv"));
+ VertexAttrib2d = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLdouble , GLdouble )>(context->getProcAddress("glVertexAttrib2d"));
+ VertexAttrib1sv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLshort *)>(context->getProcAddress("glVertexAttrib1sv"));
+ VertexAttrib1s = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLshort )>(context->getProcAddress("glVertexAttrib1s"));
+ VertexAttrib1fv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLfloat *)>(context->getProcAddress("glVertexAttrib1fv"));
+ VertexAttrib1f = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLfloat )>(context->getProcAddress("glVertexAttrib1f"));
+ VertexAttrib1dv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLdouble *)>(context->getProcAddress("glVertexAttrib1dv"));
+ VertexAttrib1d = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLdouble )>(context->getProcAddress("glVertexAttrib1d"));
+
+}
+
+QOpenGLVersionStatus QOpenGLFunctions_2_0_DeprecatedBackend::versionStatus()
+{
+ return QOpenGLVersionStatus(2, 0, QOpenGLVersionStatus::DeprecatedStatus);
+}
+
+QOpenGLFunctions_3_0_DeprecatedBackend::QOpenGLFunctions_3_0_DeprecatedBackend(QOpenGLContext *context)
+ : QOpenGLVersionFunctionsBackend(context)
+{
+ // OpenGL 3.0 deprecated functions
+ VertexAttribI4usv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLushort *)>(context->getProcAddress("glVertexAttribI4usv"));
+ VertexAttribI4ubv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLubyte *)>(context->getProcAddress("glVertexAttribI4ubv"));
+ VertexAttribI4sv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLshort *)>(context->getProcAddress("glVertexAttribI4sv"));
+ VertexAttribI4bv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLbyte *)>(context->getProcAddress("glVertexAttribI4bv"));
+ VertexAttribI4uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLuint *)>(context->getProcAddress("glVertexAttribI4uiv"));
+ VertexAttribI3uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLuint *)>(context->getProcAddress("glVertexAttribI3uiv"));
+ VertexAttribI2uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLuint *)>(context->getProcAddress("glVertexAttribI2uiv"));
+ VertexAttribI1uiv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLuint *)>(context->getProcAddress("glVertexAttribI1uiv"));
+ VertexAttribI4iv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLint *)>(context->getProcAddress("glVertexAttribI4iv"));
+ VertexAttribI3iv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLint *)>(context->getProcAddress("glVertexAttribI3iv"));
+ VertexAttribI2iv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLint *)>(context->getProcAddress("glVertexAttribI2iv"));
+ VertexAttribI1iv = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , const GLint *)>(context->getProcAddress("glVertexAttribI1iv"));
+ VertexAttribI4ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLuint , GLuint , GLuint , GLuint )>(context->getProcAddress("glVertexAttribI4ui"));
+ VertexAttribI3ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLuint , GLuint , GLuint )>(context->getProcAddress("glVertexAttribI3ui"));
+ VertexAttribI2ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLuint , GLuint )>(context->getProcAddress("glVertexAttribI2ui"));
+ VertexAttribI1ui = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLuint )>(context->getProcAddress("glVertexAttribI1ui"));
+ VertexAttribI4i = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLint , GLint , GLint , GLint )>(context->getProcAddress("glVertexAttribI4i"));
+ VertexAttribI3i = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLint , GLint , GLint )>(context->getProcAddress("glVertexAttribI3i"));
+ VertexAttribI2i = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLint , GLint )>(context->getProcAddress("glVertexAttribI2i"));
+ VertexAttribI1i = reinterpret_cast<void (QOPENGLF_APIENTRYP)(GLuint , GLint )>(context->getProcAddress("glVertexAttribI1i"));
+
+}
+
+QOpenGLVersionStatus QOpenGLFunctions_3_0_DeprecatedBackend::versionStatus()
+{
+ return QOpenGLVersionStatus(3, 0, QOpenGLVersionStatus::DeprecatedStatus);
+}
+
QOpenGLFunctions_3_3_DeprecatedBackend::QOpenGLFunctions_3_3_DeprecatedBackend(QOpenGLContext *context)
: QOpenGLVersionFunctionsBackend(context)
{
diff --git a/src/gui/opengl/qopenglversionfunctions.h b/src/gui/opengl/qopenglversionfunctions.h
index d651af68c7..2ae0f429e5 100644
--- a/src/gui/opengl/qopenglversionfunctions.h
+++ b/src/gui/opengl/qopenglversionfunctions.h
@@ -223,6 +223,8 @@ public:
static QOpenGLVersionStatus versionStatus();
// OpenGL 1.1 core functions
+ void (QOPENGLF_APIENTRYP Indexubv)(const GLubyte *c);
+ void (QOPENGLF_APIENTRYP Indexub)(GLubyte c);
GLboolean (QOPENGLF_APIENTRYP IsTexture)(GLuint texture);
void (QOPENGLF_APIENTRYP GenTextures)(GLsizei n, GLuint *textures);
void (QOPENGLF_APIENTRYP DeleteTextures)(GLsizei n, const GLuint *textures);
@@ -234,6 +236,7 @@ public:
void (QOPENGLF_APIENTRYP CopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
void (QOPENGLF_APIENTRYP CopyTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
void (QOPENGLF_APIENTRYP PolygonOffset)(GLfloat factor, GLfloat units);
+ void (QOPENGLF_APIENTRYP GetPointerv)(GLenum pname, GLvoid* *params);
void (QOPENGLF_APIENTRYP DrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
void (QOPENGLF_APIENTRYP DrawArrays)(GLenum mode, GLint first, GLsizei count);
@@ -333,42 +336,6 @@ public:
// OpenGL 2.0 core functions
void (QOPENGLF_APIENTRYP VertexAttribPointer)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
- void (QOPENGLF_APIENTRYP VertexAttrib4usv)(GLuint index, const GLushort *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4uiv)(GLuint index, const GLuint *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4ubv)(GLuint index, const GLubyte *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4sv)(GLuint index, const GLshort *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4s)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
- void (QOPENGLF_APIENTRYP VertexAttrib4iv)(GLuint index, const GLint *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4fv)(GLuint index, const GLfloat *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4f)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
- void (QOPENGLF_APIENTRYP VertexAttrib4dv)(GLuint index, const GLdouble *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
- void (QOPENGLF_APIENTRYP VertexAttrib4bv)(GLuint index, const GLbyte *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4Nusv)(GLuint index, const GLushort *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4Nuiv)(GLuint index, const GLuint *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4Nubv)(GLuint index, const GLubyte *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4Nub)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
- void (QOPENGLF_APIENTRYP VertexAttrib4Nsv)(GLuint index, const GLshort *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4Niv)(GLuint index, const GLint *v);
- void (QOPENGLF_APIENTRYP VertexAttrib4Nbv)(GLuint index, const GLbyte *v);
- void (QOPENGLF_APIENTRYP VertexAttrib3sv)(GLuint index, const GLshort *v);
- void (QOPENGLF_APIENTRYP VertexAttrib3s)(GLuint index, GLshort x, GLshort y, GLshort z);
- void (QOPENGLF_APIENTRYP VertexAttrib3fv)(GLuint index, const GLfloat *v);
- void (QOPENGLF_APIENTRYP VertexAttrib3f)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
- void (QOPENGLF_APIENTRYP VertexAttrib3dv)(GLuint index, const GLdouble *v);
- void (QOPENGLF_APIENTRYP VertexAttrib3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
- void (QOPENGLF_APIENTRYP VertexAttrib2sv)(GLuint index, const GLshort *v);
- void (QOPENGLF_APIENTRYP VertexAttrib2s)(GLuint index, GLshort x, GLshort y);
- void (QOPENGLF_APIENTRYP VertexAttrib2fv)(GLuint index, const GLfloat *v);
- void (QOPENGLF_APIENTRYP VertexAttrib2f)(GLuint index, GLfloat x, GLfloat y);
- void (QOPENGLF_APIENTRYP VertexAttrib2dv)(GLuint index, const GLdouble *v);
- void (QOPENGLF_APIENTRYP VertexAttrib2d)(GLuint index, GLdouble x, GLdouble y);
- void (QOPENGLF_APIENTRYP VertexAttrib1sv)(GLuint index, const GLshort *v);
- void (QOPENGLF_APIENTRYP VertexAttrib1s)(GLuint index, GLshort x);
- void (QOPENGLF_APIENTRYP VertexAttrib1fv)(GLuint index, const GLfloat *v);
- void (QOPENGLF_APIENTRYP VertexAttrib1f)(GLuint index, GLfloat x);
- void (QOPENGLF_APIENTRYP VertexAttrib1dv)(GLuint index, const GLdouble *v);
- void (QOPENGLF_APIENTRYP VertexAttrib1d)(GLuint index, GLdouble x);
void (QOPENGLF_APIENTRYP ValidateProgram)(GLuint program);
void (QOPENGLF_APIENTRYP UniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
void (QOPENGLF_APIENTRYP UniformMatrix3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
@@ -425,7 +392,42 @@ public:
void (QOPENGLF_APIENTRYP StencilOpSeparate)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
void (QOPENGLF_APIENTRYP DrawBuffers)(GLsizei n, const GLenum *bufs);
void (QOPENGLF_APIENTRYP BlendEquationSeparate)(GLenum modeRGB, GLenum modeAlpha);
-
+ void (QOPENGLF_APIENTRYP VertexAttrib4usv)(GLuint index, const GLushort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4uiv)(GLuint index, const GLuint *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4ubv)(GLuint index, const GLubyte *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4sv)(GLuint index, const GLshort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4s)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+ void (QOPENGLF_APIENTRYP VertexAttrib4iv)(GLuint index, const GLint *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4fv)(GLuint index, const GLfloat *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4f)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+ void (QOPENGLF_APIENTRYP VertexAttrib4dv)(GLuint index, const GLdouble *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+ void (QOPENGLF_APIENTRYP VertexAttrib4bv)(GLuint index, const GLbyte *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Nusv)(GLuint index, const GLushort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Nuiv)(GLuint index, const GLuint *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Nubv)(GLuint index, const GLubyte *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Nub)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Nsv)(GLuint index, const GLshort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Niv)(GLuint index, const GLint *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Nbv)(GLuint index, const GLbyte *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib3sv)(GLuint index, const GLshort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib3s)(GLuint index, GLshort x, GLshort y, GLshort z);
+ void (QOPENGLF_APIENTRYP VertexAttrib3fv)(GLuint index, const GLfloat *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib3f)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+ void (QOPENGLF_APIENTRYP VertexAttrib3dv)(GLuint index, const GLdouble *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+ void (QOPENGLF_APIENTRYP VertexAttrib2sv)(GLuint index, const GLshort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib2s)(GLuint index, GLshort x, GLshort y);
+ void (QOPENGLF_APIENTRYP VertexAttrib2fv)(GLuint index, const GLfloat *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib2f)(GLuint index, GLfloat x, GLfloat y);
+ void (QOPENGLF_APIENTRYP VertexAttrib2dv)(GLuint index, const GLdouble *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib2d)(GLuint index, GLdouble x, GLdouble y);
+ void (QOPENGLF_APIENTRYP VertexAttrib1sv)(GLuint index, const GLshort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib1s)(GLuint index, GLshort x);
+ void (QOPENGLF_APIENTRYP VertexAttrib1fv)(GLuint index, const GLfloat *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib1f)(GLuint index, GLfloat x);
+ void (QOPENGLF_APIENTRYP VertexAttrib1dv)(GLuint index, const GLdouble *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib1d)(GLuint index, GLdouble x);
};
class QOpenGLFunctions_2_1_CoreBackend : public QOpenGLVersionFunctionsBackend
@@ -499,6 +501,24 @@ public:
GLint (QOPENGLF_APIENTRYP GetFragDataLocation)(GLuint program, const GLchar *name);
void (QOPENGLF_APIENTRYP BindFragDataLocation)(GLuint program, GLuint color, const GLchar *name);
void (QOPENGLF_APIENTRYP GetUniformuiv)(GLuint program, GLint location, GLuint *params);
+ void (QOPENGLF_APIENTRYP GetVertexAttribIuiv)(GLuint index, GLenum pname, GLuint *params);
+ void (QOPENGLF_APIENTRYP GetVertexAttribIiv)(GLuint index, GLenum pname, GLint *params);
+ void (QOPENGLF_APIENTRYP VertexAttribIPointer)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+ void (QOPENGLF_APIENTRYP EndConditionalRender)();
+ void (QOPENGLF_APIENTRYP BeginConditionalRender)(GLuint id, GLenum mode);
+ void (QOPENGLF_APIENTRYP ClampColor)(GLenum target, GLenum clamp);
+ void (QOPENGLF_APIENTRYP GetTransformFeedbackVarying)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
+ void (QOPENGLF_APIENTRYP TransformFeedbackVaryings)(GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode);
+ void (QOPENGLF_APIENTRYP BindBufferBase)(GLenum target, GLuint index, GLuint buffer);
+ void (QOPENGLF_APIENTRYP BindBufferRange)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+ void (QOPENGLF_APIENTRYP EndTransformFeedback)();
+ void (QOPENGLF_APIENTRYP BeginTransformFeedback)(GLenum primitiveMode);
+ GLboolean (QOPENGLF_APIENTRYP IsEnabledi)(GLenum target, GLuint index);
+ void (QOPENGLF_APIENTRYP Disablei)(GLenum target, GLuint index);
+ void (QOPENGLF_APIENTRYP Enablei)(GLenum target, GLuint index);
+ void (QOPENGLF_APIENTRYP GetIntegeri_v)(GLenum target, GLuint index, GLint *data);
+ void (QOPENGLF_APIENTRYP GetBooleani_v)(GLenum target, GLuint index, GLboolean *data);
+ void (QOPENGLF_APIENTRYP ColorMaski)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
void (QOPENGLF_APIENTRYP VertexAttribI4usv)(GLuint index, const GLushort *v);
void (QOPENGLF_APIENTRYP VertexAttribI4ubv)(GLuint index, const GLubyte *v);
void (QOPENGLF_APIENTRYP VertexAttribI4sv)(GLuint index, const GLshort *v);
@@ -519,25 +539,6 @@ public:
void (QOPENGLF_APIENTRYP VertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z);
void (QOPENGLF_APIENTRYP VertexAttribI2i)(GLuint index, GLint x, GLint y);
void (QOPENGLF_APIENTRYP VertexAttribI1i)(GLuint index, GLint x);
- void (QOPENGLF_APIENTRYP GetVertexAttribIuiv)(GLuint index, GLenum pname, GLuint *params);
- void (QOPENGLF_APIENTRYP GetVertexAttribIiv)(GLuint index, GLenum pname, GLint *params);
- void (QOPENGLF_APIENTRYP VertexAttribIPointer)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
- void (QOPENGLF_APIENTRYP EndConditionalRender)();
- void (QOPENGLF_APIENTRYP BeginConditionalRender)(GLuint id, GLenum mode);
- void (QOPENGLF_APIENTRYP ClampColor)(GLenum target, GLenum clamp);
- void (QOPENGLF_APIENTRYP GetTransformFeedbackVarying)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
- void (QOPENGLF_APIENTRYP TransformFeedbackVaryings)(GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode);
- void (QOPENGLF_APIENTRYP BindBufferBase)(GLenum target, GLuint index, GLuint buffer);
- void (QOPENGLF_APIENTRYP BindBufferRange)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
- void (QOPENGLF_APIENTRYP EndTransformFeedback)();
- void (QOPENGLF_APIENTRYP BeginTransformFeedback)(GLenum primitiveMode);
- GLboolean (QOPENGLF_APIENTRYP IsEnabledi)(GLenum target, GLuint index);
- void (QOPENGLF_APIENTRYP Disablei)(GLenum target, GLuint index);
- void (QOPENGLF_APIENTRYP Enablei)(GLenum target, GLuint index);
- void (QOPENGLF_APIENTRYP GetIntegeri_v)(GLenum target, GLuint index, GLint *data);
- void (QOPENGLF_APIENTRYP GetBooleani_v)(GLenum target, GLuint index, GLboolean *data);
- void (QOPENGLF_APIENTRYP ColorMaski)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
-
};
class QOpenGLFunctions_3_1_CoreBackend : public QOpenGLVersionFunctionsBackend
@@ -609,6 +610,36 @@ public:
void (QOPENGLF_APIENTRYP VertexAttribP2ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value);
void (QOPENGLF_APIENTRYP VertexAttribP1uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
void (QOPENGLF_APIENTRYP VertexAttribP1ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value);
+ void (QOPENGLF_APIENTRYP SecondaryColorP3uiv)(GLenum type, const GLuint *color);
+ void (QOPENGLF_APIENTRYP SecondaryColorP3ui)(GLenum type, GLuint color);
+ void (QOPENGLF_APIENTRYP ColorP4uiv)(GLenum type, const GLuint *color);
+ void (QOPENGLF_APIENTRYP ColorP4ui)(GLenum type, GLuint color);
+ void (QOPENGLF_APIENTRYP ColorP3uiv)(GLenum type, const GLuint *color);
+ void (QOPENGLF_APIENTRYP ColorP3ui)(GLenum type, GLuint color);
+ void (QOPENGLF_APIENTRYP NormalP3uiv)(GLenum type, const GLuint *coords);
+ void (QOPENGLF_APIENTRYP NormalP3ui)(GLenum type, GLuint coords);
+ void (QOPENGLF_APIENTRYP MultiTexCoordP4uiv)(GLenum texture, GLenum type, const GLuint *coords);
+ void (QOPENGLF_APIENTRYP MultiTexCoordP4ui)(GLenum texture, GLenum type, GLuint coords);
+ void (QOPENGLF_APIENTRYP MultiTexCoordP3uiv)(GLenum texture, GLenum type, const GLuint *coords);
+ void (QOPENGLF_APIENTRYP MultiTexCoordP3ui)(GLenum texture, GLenum type, GLuint coords);
+ void (QOPENGLF_APIENTRYP MultiTexCoordP2uiv)(GLenum texture, GLenum type, const GLuint *coords);
+ void (QOPENGLF_APIENTRYP MultiTexCoordP2ui)(GLenum texture, GLenum type, GLuint coords);
+ void (QOPENGLF_APIENTRYP MultiTexCoordP1uiv)(GLenum texture, GLenum type, const GLuint *coords);
+ void (QOPENGLF_APIENTRYP MultiTexCoordP1ui)(GLenum texture, GLenum type, GLuint coords);
+ void (QOPENGLF_APIENTRYP TexCoordP4uiv)(GLenum type, const GLuint *coords);
+ void (QOPENGLF_APIENTRYP TexCoordP4ui)(GLenum type, GLuint coords);
+ void (QOPENGLF_APIENTRYP TexCoordP3uiv)(GLenum type, const GLuint *coords);
+ void (QOPENGLF_APIENTRYP TexCoordP3ui)(GLenum type, GLuint coords);
+ void (QOPENGLF_APIENTRYP TexCoordP2uiv)(GLenum type, const GLuint *coords);
+ void (QOPENGLF_APIENTRYP TexCoordP2ui)(GLenum type, GLuint coords);
+ void (QOPENGLF_APIENTRYP TexCoordP1uiv)(GLenum type, const GLuint *coords);
+ void (QOPENGLF_APIENTRYP TexCoordP1ui)(GLenum type, GLuint coords);
+ void (QOPENGLF_APIENTRYP VertexP4uiv)(GLenum type, const GLuint *value);
+ void (QOPENGLF_APIENTRYP VertexP4ui)(GLenum type, GLuint value);
+ void (QOPENGLF_APIENTRYP VertexP3uiv)(GLenum type, const GLuint *value);
+ void (QOPENGLF_APIENTRYP VertexP3ui)(GLenum type, GLuint value);
+ void (QOPENGLF_APIENTRYP VertexP2uiv)(GLenum type, const GLuint *value);
+ void (QOPENGLF_APIENTRYP VertexP2ui)(GLenum type, GLuint value);
void (QOPENGLF_APIENTRYP GetQueryObjectui64v)(GLuint id, GLenum pname, GLuint64 *params);
void (QOPENGLF_APIENTRYP GetQueryObjecti64v)(GLuint id, GLenum pname, GLint64 *params);
void (QOPENGLF_APIENTRYP QueryCounter)(GLuint id, GLenum target);
@@ -819,16 +850,6 @@ public:
static QOpenGLVersionStatus versionStatus();
// OpenGL 4.3 core functions
- void (QOPENGLF_APIENTRYP GetObjectPtrLabel)(const GLvoid *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
- void (QOPENGLF_APIENTRYP ObjectPtrLabel)(const GLvoid *ptr, GLsizei length, const GLchar *label);
- void (QOPENGLF_APIENTRYP GetObjectLabel)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
- void (QOPENGLF_APIENTRYP ObjectLabel)(GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
- void (QOPENGLF_APIENTRYP PopDebugGroup)();
- void (QOPENGLF_APIENTRYP PushDebugGroup)(GLenum source, GLuint id, GLsizei length, const GLchar *message);
- GLuint (QOPENGLF_APIENTRYP GetDebugMessageLog)(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
- void (QOPENGLF_APIENTRYP DebugMessageCallback)(GLDEBUGPROC callback, const GLvoid *userParam);
- void (QOPENGLF_APIENTRYP DebugMessageInsert)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
- void (QOPENGLF_APIENTRYP DebugMessageControl)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
void (QOPENGLF_APIENTRYP TexStorage3DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
void (QOPENGLF_APIENTRYP TexStorage2DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
void (QOPENGLF_APIENTRYP TexBufferRange)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
@@ -862,6 +883,16 @@ public:
void (QOPENGLF_APIENTRYP DispatchCompute)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
void (QOPENGLF_APIENTRYP ClearBufferSubData)(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
void (QOPENGLF_APIENTRYP ClearBufferData)(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);
+ void (QOPENGLF_APIENTRYP GetObjectPtrLabel)(const GLvoid *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
+ void (QOPENGLF_APIENTRYP ObjectPtrLabel)(const GLvoid *ptr, GLsizei length, const GLchar *label);
+ void (QOPENGLF_APIENTRYP GetObjectLabel)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);
+ void (QOPENGLF_APIENTRYP ObjectLabel)(GLenum identifier, GLuint name, GLsizei length, const GLchar *label);
+ void (QOPENGLF_APIENTRYP PopDebugGroup)();
+ void (QOPENGLF_APIENTRYP PushDebugGroup)(GLenum source, GLuint id, GLsizei length, const GLchar *message);
+ GLuint (QOPENGLF_APIENTRYP GetDebugMessageLog)(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
+ void (QOPENGLF_APIENTRYP DebugMessageCallback)(GLDEBUGPROC callback, const GLvoid *userParam);
+ void (QOPENGLF_APIENTRYP DebugMessageInsert)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);
+ void (QOPENGLF_APIENTRYP DebugMessageControl)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);
};
@@ -1281,22 +1312,21 @@ public:
// OpenGL 1.1 deprecated functions
void (QOPENGLF_APIENTRYP PushClientAttrib)(GLbitfield mask);
void (QOPENGLF_APIENTRYP PopClientAttrib)();
- void (QOPENGLF_APIENTRYP Indexubv)(const GLubyte *c);
- void (QOPENGLF_APIENTRYP Indexub)(GLubyte c);
void (QOPENGLF_APIENTRYP PrioritizeTextures)(GLsizei n, const GLuint *textures, const GLfloat *priorities);
GLboolean (QOPENGLF_APIENTRYP AreTexturesResident)(GLsizei n, const GLuint *textures, GLboolean *residences);
void (QOPENGLF_APIENTRYP VertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
void (QOPENGLF_APIENTRYP TexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
void (QOPENGLF_APIENTRYP NormalPointer)(GLenum type, GLsizei stride, const GLvoid *pointer);
void (QOPENGLF_APIENTRYP InterleavedArrays)(GLenum format, GLsizei stride, const GLvoid *pointer);
- void (QOPENGLF_APIENTRYP GetPointerv)(GLenum pname, GLvoid* *params);
void (QOPENGLF_APIENTRYP IndexPointer)(GLenum type, GLsizei stride, const GLvoid *pointer);
void (QOPENGLF_APIENTRYP EnableClientState)(GLenum array);
void (QOPENGLF_APIENTRYP EdgeFlagPointer)(GLsizei stride, const GLvoid *pointer);
void (QOPENGLF_APIENTRYP DisableClientState)(GLenum array);
void (QOPENGLF_APIENTRYP ColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
void (QOPENGLF_APIENTRYP ArrayElement)(GLint i);
-
+ void (QOPENGLF_APIENTRYP Indexubv)(const GLubyte *c);
+ void (QOPENGLF_APIENTRYP Indexub)(GLubyte c);
+ void (QOPENGLF_APIENTRYP GetPointerv)(GLenum pname, GLvoid* *params);
};
class QOpenGLFunctions_1_2_DeprecatedBackend : public QOpenGLVersionFunctionsBackend
@@ -1307,7 +1337,6 @@ public:
static QOpenGLVersionStatus versionStatus();
// OpenGL 1.2 deprecated functions
- void (QOPENGLF_APIENTRYP ColorTable)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
void (QOPENGLF_APIENTRYP ColorTableParameterfv)(GLenum target, GLenum pname, const GLfloat *params);
void (QOPENGLF_APIENTRYP ColorTableParameteriv)(GLenum target, GLenum pname, const GLint *params);
void (QOPENGLF_APIENTRYP CopyColorTable)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
@@ -1339,6 +1368,7 @@ public:
void (QOPENGLF_APIENTRYP Minmax)(GLenum target, GLenum internalformat, GLboolean sink);
void (QOPENGLF_APIENTRYP ResetHistogram)(GLenum target);
void (QOPENGLF_APIENTRYP ResetMinmax)(GLenum target);
+ void (QOPENGLF_APIENTRYP ColorTable)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
};
@@ -1439,6 +1469,84 @@ public:
};
+class QOpenGLFunctions_2_0_DeprecatedBackend : public QOpenGLVersionFunctionsBackend
+{
+public:
+ QOpenGLFunctions_2_0_DeprecatedBackend(QOpenGLContext *context);
+
+ static QOpenGLVersionStatus versionStatus();
+
+ // OpenGL 2.0 deprecated functions
+ void (QOPENGLF_APIENTRYP VertexAttrib4usv)(GLuint index, const GLushort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4uiv)(GLuint index, const GLuint *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4ubv)(GLuint index, const GLubyte *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4sv)(GLuint index, const GLshort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4s)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+ void (QOPENGLF_APIENTRYP VertexAttrib4iv)(GLuint index, const GLint *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4fv)(GLuint index, const GLfloat *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4f)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+ void (QOPENGLF_APIENTRYP VertexAttrib4dv)(GLuint index, const GLdouble *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+ void (QOPENGLF_APIENTRYP VertexAttrib4bv)(GLuint index, const GLbyte *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Nusv)(GLuint index, const GLushort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Nuiv)(GLuint index, const GLuint *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Nubv)(GLuint index, const GLubyte *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Nub)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Nsv)(GLuint index, const GLshort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Niv)(GLuint index, const GLint *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib4Nbv)(GLuint index, const GLbyte *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib3sv)(GLuint index, const GLshort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib3s)(GLuint index, GLshort x, GLshort y, GLshort z);
+ void (QOPENGLF_APIENTRYP VertexAttrib3fv)(GLuint index, const GLfloat *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib3f)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+ void (QOPENGLF_APIENTRYP VertexAttrib3dv)(GLuint index, const GLdouble *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+ void (QOPENGLF_APIENTRYP VertexAttrib2sv)(GLuint index, const GLshort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib2s)(GLuint index, GLshort x, GLshort y);
+ void (QOPENGLF_APIENTRYP VertexAttrib2fv)(GLuint index, const GLfloat *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib2f)(GLuint index, GLfloat x, GLfloat y);
+ void (QOPENGLF_APIENTRYP VertexAttrib2dv)(GLuint index, const GLdouble *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib2d)(GLuint index, GLdouble x, GLdouble y);
+ void (QOPENGLF_APIENTRYP VertexAttrib1sv)(GLuint index, const GLshort *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib1s)(GLuint index, GLshort x);
+ void (QOPENGLF_APIENTRYP VertexAttrib1fv)(GLuint index, const GLfloat *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib1f)(GLuint index, GLfloat x);
+ void (QOPENGLF_APIENTRYP VertexAttrib1dv)(GLuint index, const GLdouble *v);
+ void (QOPENGLF_APIENTRYP VertexAttrib1d)(GLuint index, GLdouble x);
+
+};
+
+class QOpenGLFunctions_3_0_DeprecatedBackend : public QOpenGLVersionFunctionsBackend
+{
+public:
+ QOpenGLFunctions_3_0_DeprecatedBackend(QOpenGLContext *context);
+
+ static QOpenGLVersionStatus versionStatus();
+
+ // OpenGL 3.0 deprecated functions
+ void (QOPENGLF_APIENTRYP VertexAttribI4usv)(GLuint index, const GLushort *v);
+ void (QOPENGLF_APIENTRYP VertexAttribI4ubv)(GLuint index, const GLubyte *v);
+ void (QOPENGLF_APIENTRYP VertexAttribI4sv)(GLuint index, const GLshort *v);
+ void (QOPENGLF_APIENTRYP VertexAttribI4bv)(GLuint index, const GLbyte *v);
+ void (QOPENGLF_APIENTRYP VertexAttribI4uiv)(GLuint index, const GLuint *v);
+ void (QOPENGLF_APIENTRYP VertexAttribI3uiv)(GLuint index, const GLuint *v);
+ void (QOPENGLF_APIENTRYP VertexAttribI2uiv)(GLuint index, const GLuint *v);
+ void (QOPENGLF_APIENTRYP VertexAttribI1uiv)(GLuint index, const GLuint *v);
+ void (QOPENGLF_APIENTRYP VertexAttribI4iv)(GLuint index, const GLint *v);
+ void (QOPENGLF_APIENTRYP VertexAttribI3iv)(GLuint index, const GLint *v);
+ void (QOPENGLF_APIENTRYP VertexAttribI2iv)(GLuint index, const GLint *v);
+ void (QOPENGLF_APIENTRYP VertexAttribI1iv)(GLuint index, const GLint *v);
+ void (QOPENGLF_APIENTRYP VertexAttribI4ui)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+ void (QOPENGLF_APIENTRYP VertexAttribI3ui)(GLuint index, GLuint x, GLuint y, GLuint z);
+ void (QOPENGLF_APIENTRYP VertexAttribI2ui)(GLuint index, GLuint x, GLuint y);
+ void (QOPENGLF_APIENTRYP VertexAttribI1ui)(GLuint index, GLuint x);
+ void (QOPENGLF_APIENTRYP VertexAttribI4i)(GLuint index, GLint x, GLint y, GLint z, GLint w);
+ void (QOPENGLF_APIENTRYP VertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z);
+ void (QOPENGLF_APIENTRYP VertexAttribI2i)(GLuint index, GLint x, GLint y);
+ void (QOPENGLF_APIENTRYP VertexAttribI1i)(GLuint index, GLint x);
+
+};
+
class QOpenGLFunctions_3_3_DeprecatedBackend : public QOpenGLVersionFunctionsBackend
{
public:
diff --git a/src/gui/painting/qdrawhelper_neon_asm.S b/src/gui/painting/qdrawhelper_neon_asm.S
index c64a7a4651..42a2084bbd 100644
--- a/src/gui/painting/qdrawhelper_neon_asm.S
+++ b/src/gui/painting/qdrawhelper_neon_asm.S
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
diff --git a/src/network/access/qnetworkreplynsurlconnectionimpl.mm b/src/network/access/qnetworkreplynsurlconnectionimpl.mm
index 081a6b7bf6..2c9ef0ac56 100644
--- a/src/network/access/qnetworkreplynsurlconnectionimpl.mm
+++ b/src/network/access/qnetworkreplynsurlconnectionimpl.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtNetwork module of the Qt Toolkit.
diff --git a/src/network/bearer/qnetworkconfiguration.cpp b/src/network/bearer/qnetworkconfiguration.cpp
index 1192a240fb..6b56d3ec88 100644
--- a/src/network/bearer/qnetworkconfiguration.cpp
+++ b/src/network/bearer/qnetworkconfiguration.cpp
@@ -205,13 +205,6 @@ QT_BEGIN_NAMESPACE
#ifdef Q_OS_BLACKBERRY
static const char cellularStatusFile[] = "/pps/services/radioctrl/modem0/status_public";
-#ifdef Q_OS_BLACKBERRY_TABLET
-static bool pps_decoder_is_integer(pps_decoder_t *decoder, const char *name)
-{
- return (pps_decoder_type(decoder, name) == PPS_TYPE_NUMBER);
-}
-#endif // Q_OS_BLACKBERRY_TABLET
-
static QNetworkConfiguration::BearerType cellularStatus()
{
QNetworkConfiguration::BearerType ret = QNetworkConfiguration::BearerUnknown;
diff --git a/src/network/socket/qtcpserver_p.h b/src/network/socket/qtcpserver_p.h
index 53a59aa19c..415a0e190a 100644
--- a/src/network/socket/qtcpserver_p.h
+++ b/src/network/socket/qtcpserver_p.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtNetwork module of the Qt Toolkit.
diff --git a/src/network/ssl/qsslcertificate_openssl.cpp b/src/network/ssl/qsslcertificate_openssl.cpp
index 581543d476..0ef845bf55 100644
--- a/src/network/ssl/qsslcertificate_openssl.cpp
+++ b/src/network/ssl/qsslcertificate_openssl.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtNetwork module of the Qt Toolkit.
diff --git a/src/network/ssl/qsslcertificate_qt.cpp b/src/network/ssl/qsslcertificate_qt.cpp
index 076d34bd68..2d1dd68198 100644
--- a/src/network/ssl/qsslcertificate_qt.cpp
+++ b/src/network/ssl/qsslcertificate_qt.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtNetwork module of the Qt Toolkit.
diff --git a/src/network/ssl/qsslcertificate_winrt.cpp b/src/network/ssl/qsslcertificate_winrt.cpp
index b8b97e9808..fd7c612631 100644
--- a/src/network/ssl/qsslcertificate_winrt.cpp
+++ b/src/network/ssl/qsslcertificate_winrt.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtNetwork module of the Qt Toolkit.
diff --git a/src/network/ssl/qsslkey_openssl.cpp b/src/network/ssl/qsslkey_openssl.cpp
index 66995206fc..8741ab524f 100644
--- a/src/network/ssl/qsslkey_openssl.cpp
+++ b/src/network/ssl/qsslkey_openssl.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtNetwork module of the Qt Toolkit.
diff --git a/src/network/ssl/qsslkey_winrt.cpp b/src/network/ssl/qsslkey_winrt.cpp
index c47e12ea00..eb1e56538f 100644
--- a/src/network/ssl/qsslkey_winrt.cpp
+++ b/src/network/ssl/qsslkey_winrt.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtNetwork module of the Qt Toolkit.
diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp
index db2e16edb1..508d300d42 100644
--- a/src/network/ssl/qsslsocket.cpp
+++ b/src/network/ssl/qsslsocket.cpp
@@ -2668,7 +2668,6 @@ QList<QByteArray> QSslSocketPrivate::unixRootCertDirectories()
<< "/usr/local/ssl/" // Normal OpenSSL Tarball
<< "/var/ssl/certs/" // AIX
<< "/usr/local/ssl/certs/" // Solaris
- << "/var/certmgr/web/user_trusted/" // BlackBerry Playbook
<< "/etc/openssl/certs/" // BlackBerry
<< "/opt/openssl/certs/"; // HP-UX
}
diff --git a/src/network/ssl/qsslsocket_winrt.cpp b/src/network/ssl/qsslsocket_winrt.cpp
index b8248818bc..aba3ea8170 100644
--- a/src/network/ssl/qsslsocket_winrt.cpp
+++ b/src/network/ssl/qsslsocket_winrt.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtNetwork module of the Qt Toolkit.
diff --git a/src/network/ssl/qsslsocket_winrt_p.h b/src/network/ssl/qsslsocket_winrt_p.h
index 16ca3c2add..2d16c68505 100644
--- a/src/network/ssl/qsslsocket_winrt_p.h
+++ b/src/network/ssl/qsslsocket_winrt_p.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtNetwork module of the Qt Toolkit.
diff --git a/src/platformsupport/cglconvenience/cglconvenience.mm b/src/platformsupport/cglconvenience/cglconvenience.mm
index d0663078f5..6b0a91e13f 100644
--- a/src/platformsupport/cglconvenience/cglconvenience.mm
+++ b/src/platformsupport/cglconvenience/cglconvenience.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/platformsupport/clipboard/qmacmime.mm b/src/platformsupport/clipboard/qmacmime.mm
index a1a91e5347..ffa548bf83 100644
--- a/src/platformsupport/clipboard/qmacmime.mm
+++ b/src/platformsupport/clipboard/qmacmime.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/platformsupport/dbusmenu/qdbusmenuconnection.cpp b/src/platformsupport/dbusmenu/qdbusmenuconnection.cpp
index a8211f63ce..73793d7497 100644
--- a/src/platformsupport/dbusmenu/qdbusmenuconnection.cpp
+++ b/src/platformsupport/dbusmenu/qdbusmenuconnection.cpp
@@ -63,14 +63,14 @@ QDBusMenuConnection::QDBusMenuConnection(QObject *parent)
: QObject(parent)
, m_connection(QDBusConnection::sessionBus())
, m_dbusWatcher(new QDBusServiceWatcher(StatusNotifierWatcherService, m_connection, QDBusServiceWatcher::WatchForRegistration, this))
- , m_watcherRegistered(false)
+ , m_statusNotifierHostRegistered(false)
{
#ifndef QT_NO_SYSTEMTRAYICON
- // Start monitoring if any known tray-related services are registered.
- if (m_connection.interface()->isServiceRegistered(StatusNotifierWatcherService))
- m_watcherRegistered = true;
+ QDBusInterface systrayHost(StatusNotifierWatcherService, StatusNotifierWatcherPath, StatusNotifierWatcherService, m_connection);
+ if (systrayHost.isValid() && systrayHost.property("IsStatusNotifierHostRegistered").toBool())
+ m_statusNotifierHostRegistered = true;
else
- qCDebug(qLcMenu) << "failed to find service" << StatusNotifierWatcherService;
+ qCDebug(qLcMenu) << "StatusNotifierHost is not registered";
#endif
}
diff --git a/src/platformsupport/dbusmenu/qdbusmenuconnection_p.h b/src/platformsupport/dbusmenu/qdbusmenuconnection_p.h
index 377999c365..8d230bd3bf 100644
--- a/src/platformsupport/dbusmenu/qdbusmenuconnection_p.h
+++ b/src/platformsupport/dbusmenu/qdbusmenuconnection_p.h
@@ -63,7 +63,7 @@ class QDBusMenuConnection : public QObject
public:
QDBusMenuConnection(QObject *parent = 0);
QDBusConnection connection() const { return m_connection; }
- bool isWatcherRegistered() const { return m_watcherRegistered; }
+ bool isStatusNotifierHostRegistered() const { return m_statusNotifierHostRegistered; }
#ifndef QT_NO_SYSTEMTRAYICON
bool registerTrayIcon(QDBusTrayIcon *item);
bool unregisterTrayIcon(QDBusTrayIcon *item);
@@ -80,7 +80,7 @@ private Q_SLOTS:
private:
QDBusConnection m_connection;
QDBusServiceWatcher *m_dbusWatcher;
- bool m_watcherRegistered;
+ bool m_statusNotifierHostRegistered;
};
QT_END_NAMESPACE
diff --git a/src/platformsupport/dbustray/qdbustrayicon.cpp b/src/platformsupport/dbustray/qdbustrayicon.cpp
index 18e72d852a..61849024da 100644
--- a/src/platformsupport/dbustray/qdbustrayicon.cpp
+++ b/src/platformsupport/dbustray/qdbustrayicon.cpp
@@ -77,6 +77,7 @@ QDBusTrayIcon::QDBusTrayIcon()
, m_status(m_defaultStatus)
, m_tempIcon(Q_NULLPTR)
, m_tempAttentionIcon(Q_NULLPTR)
+ , m_registered(false)
{
qCDebug(qLcTray);
if (instanceCount == 1) {
@@ -101,15 +102,17 @@ QDBusTrayIcon::~QDBusTrayIcon()
void QDBusTrayIcon::init()
{
qCDebug(qLcTray) << "registering" << m_instanceId;
- dBusConnection()->registerTrayIcon(this);
+ m_registered = dBusConnection()->registerTrayIcon(this);
}
void QDBusTrayIcon::cleanup()
{
qCDebug(qLcTray) << "unregistering" << m_instanceId;
- dBusConnection()->unregisterTrayIcon(this);
+ if (m_registered)
+ dBusConnection()->unregisterTrayIcon(this);
delete m_dbusConnection;
m_dbusConnection = Q_NULLPTR;
+ m_registered = false;
}
void QDBusTrayIcon::activate(int x, int y)
@@ -281,11 +284,8 @@ void QDBusTrayIcon::notificationClosed(uint id, uint reason)
bool QDBusTrayIcon::isSystemTrayAvailable() const
{
QDBusMenuConnection * conn = const_cast<QDBusTrayIcon *>(this)->dBusConnection();
-
- // If the KDE watcher service is registered, we must be on a desktop
- // where a StatusNotifier-conforming system tray exists.
- qCDebug(qLcTray) << conn->isWatcherRegistered();
- return conn->isWatcherRegistered();
+ qCDebug(qLcTray) << conn->isStatusNotifierHostRegistered();
+ return conn->isStatusNotifierHostRegistered();
}
QT_END_NAMESPACE
diff --git a/src/platformsupport/dbustray/qdbustrayicon_p.h b/src/platformsupport/dbustray/qdbustrayicon_p.h
index d3d1c5bb8f..78dfae7c02 100644
--- a/src/platformsupport/dbustray/qdbustrayicon_p.h
+++ b/src/platformsupport/dbustray/qdbustrayicon_p.h
@@ -156,6 +156,7 @@ private:
QTimer m_attentionTimer;
bool m_isRequestingAttention;
bool m_hasMenu;
+ bool m_registered;
};
QT_END_NAMESPACE
diff --git a/src/platformsupport/eventdispatchers/qeventdispatcher_cf.mm b/src/platformsupport/eventdispatchers/qeventdispatcher_cf.mm
index fe3dfba635..bd0f89ba2f 100644
--- a/src/platformsupport/eventdispatchers/qeventdispatcher_cf.mm
+++ b/src/platformsupport/eventdispatchers/qeventdispatcher_cf.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
index 58c275c0a8..f7165bec91 100644
--- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
+++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
index 123a2c4c79..64de364bfb 100644
--- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
+++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
@@ -162,6 +162,10 @@ void QCoreTextFontEngine::init()
Q_ASSERT(ctfont != NULL);
Q_ASSERT(cgFont != NULL);
+ face_id.index = 0;
+ QCFString name = CTFontCopyName(ctfont, kCTFontUniqueNameKey);
+ face_id.filename = QCFString::toQString(name).toUtf8();
+
QCFString family = CTFontCopyFamilyName(ctfont);
fontDef.family = family;
@@ -696,13 +700,7 @@ void QCoreTextFontEngine::recalcAdvances(QGlyphLayout *glyphs, QFontEngine::Shap
QFontEngine::FaceId QCoreTextFontEngine::faceId() const
{
- FaceId result;
- result.index = 0;
-
- QCFString name = CTFontCopyName(ctfont, kCTFontUniqueNameKey);
- result.filename = QCFString::toQString(name).toUtf8();
-
- return result;
+ return face_id;
}
bool QCoreTextFontEngine::canRender(const QChar *string, int len) const
diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h b/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h
index 4a6c8e57e6..88ce2c726d 100644
--- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h
+++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h
@@ -135,6 +135,7 @@ private:
int synthesisFlags;
CGAffineTransform transform;
QFixed avgCharWidth;
+ QFontEngine::FaceId face_id;
};
CGAffineTransform qt_transform_from_fontdef(const QFontDef &fontDef);
diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
index 3fffec0dfd..ba328bfb41 100644
--- a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
+++ b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
@@ -98,7 +98,7 @@ static bool isDBusTrayAvailable() {
static bool dbusTrayAvailableKnown = false;
if (!dbusTrayAvailableKnown) {
QDBusMenuConnection conn;
- if (conn.isWatcherRegistered())
+ if (conn.isStatusNotifierHostRegistered())
dbusTrayAvailable = true;
dbusTrayAvailableKnown = true;
qCDebug(qLcTray) << "D-Bus tray available:" << dbusTrayAvailable;
diff --git a/src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java b/src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java
index 9304d5c7dd..f356a4b746 100644
--- a/src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java
+++ b/src/plugins/bearer/android/jar/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/bearer/bearer.pro b/src/plugins/bearer/bearer.pro
index e52df24857..7637bf1f5e 100644
--- a/src/plugins/bearer/bearer.pro
+++ b/src/plugins/bearer/bearer.pro
@@ -1,6 +1,6 @@
TEMPLATE = subdirs
-linux*:qtHaveModule(dbus) {
+!android:linux*:qtHaveModule(dbus) {
SUBDIRS += generic
SUBDIRS += connman networkmanager
}
diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.mm b/src/plugins/bearer/corewlan/qcorewlanengine.mm
index aa4179d5c3..9530dd83d0 100644
--- a/src/plugins/bearer/corewlan/qcorewlanengine.mm
+++ b/src/plugins/bearer/corewlan/qcorewlanengine.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforminputcontexts/compose/compose.pro b/src/plugins/platforminputcontexts/compose/compose.pro
index 10e50a7a7e..a9da36c473 100644
--- a/src/plugins/platforminputcontexts/compose/compose.pro
+++ b/src/plugins/platforminputcontexts/compose/compose.pro
@@ -9,7 +9,7 @@ QT += gui-private
DEFINES += X11_PREFIX='\\"$$QMAKE_X11_PREFIX\\"'
-SOURCES += $$PWD/main.cpp \
+SOURCES += $$PWD/qcomposeplatforminputcontextmain.cpp \
$$PWD/qcomposeplatforminputcontext.cpp \
$$PWD/generator/qtablegenerator.cpp \
diff --git a/src/plugins/platforminputcontexts/compose/main.cpp b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontextmain.cpp
index e0c252eaf6..5ab0dd8f04 100644
--- a/src/plugins/platforminputcontexts/compose/main.cpp
+++ b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontextmain.cpp
@@ -59,4 +59,4 @@ QComposeInputContext *QComposePlatformInputContextPlugin::create(const QString &
QT_END_NAMESPACE
-#include "main.moc"
+#include "qcomposeplatforminputcontextmain.moc"
diff --git a/src/plugins/platforms/cocoa/main.mm b/src/plugins/platforms/cocoa/main.mm
index c6e46ac28d..eed2ad7dc5 100644
--- a/src/plugins/platforms/cocoa/main.mm
+++ b/src/plugins/platforms/cocoa/main.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibility.mm b/src/plugins/platforms/cocoa/qcocoaaccessibility.mm
index 5ea61c5e4c..a42c877fc6 100644
--- a/src/plugins/platforms/cocoa/qcocoaaccessibility.mm
+++ b/src/plugins/platforms/cocoa/qcocoaaccessibility.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
index fc84905374..b91831bad8 100644
--- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
+++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoaapplication.mm b/src/plugins/platforms/cocoa/qcocoaapplication.mm
index a91be37786..adaabc3c15 100644
--- a/src/plugins/platforms/cocoa/qcocoaapplication.mm
+++ b/src/plugins/platforms/cocoa/qcocoaapplication.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
index b011a39f09..2c71d07256 100644
--- a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
+++ b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm
index 9e9bb19556..2c240c2570 100644
--- a/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm
+++ b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoabackingstore.mm b/src/plugins/platforms/cocoa/qcocoabackingstore.mm
index 5805475e3f..a90db00d42 100644
--- a/src/plugins/platforms/cocoa/qcocoabackingstore.mm
+++ b/src/plugins/platforms/cocoa/qcocoabackingstore.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoaclipboard.mm b/src/plugins/platforms/cocoa/qcocoaclipboard.mm
index f8ebc3591b..f908aba028 100644
--- a/src/plugins/platforms/cocoa/qcocoaclipboard.mm
+++ b/src/plugins/platforms/cocoa/qcocoaclipboard.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm
index 72723a3fb3..8843e009a2 100644
--- a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm
+++ b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoacursor.mm b/src/plugins/platforms/cocoa/qcocoacursor.mm
index 749fe908b7..06e957cd86 100644
--- a/src/plugins/platforms/cocoa/qcocoacursor.mm
+++ b/src/plugins/platforms/cocoa/qcocoacursor.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoadrag.mm b/src/plugins/platforms/cocoa/qcocoadrag.mm
index 3e321e1446..a80b32a0b8 100644
--- a/src/plugins/platforms/cocoa/qcocoadrag.mm
+++ b/src/plugins/platforms/cocoa/qcocoadrag.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm b/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm
index 7f92a899c3..52b2e23345 100644
--- a/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm
+++ b/src/plugins/platforms/cocoa/qcocoaeventdispatcher.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm
index e378b9cef7..903da2498c 100644
--- a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm
+++ b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm
index 61303c7514..933034bb6f 100644
--- a/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm
+++ b/src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoaglcontext.mm b/src/plugins/platforms/cocoa/qcocoaglcontext.mm
index 8c0300ecbb..e89bc662b7 100644
--- a/src/plugins/platforms/cocoa/qcocoaglcontext.mm
+++ b/src/plugins/platforms/cocoa/qcocoaglcontext.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.mm b/src/plugins/platforms/cocoa/qcocoahelpers.mm
index c148b29f1c..ac43ee6d31 100644
--- a/src/plugins/platforms/cocoa/qcocoahelpers.mm
+++ b/src/plugins/platforms/cocoa/qcocoahelpers.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoainputcontext.mm b/src/plugins/platforms/cocoa/qcocoainputcontext.mm
index 5bde2a0f82..0eafae1f2d 100644
--- a/src/plugins/platforms/cocoa/qcocoainputcontext.mm
+++ b/src/plugins/platforms/cocoa/qcocoainputcontext.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm
index b5f1045ef0..d3071be636 100644
--- a/src/plugins/platforms/cocoa/qcocoaintegration.mm
+++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoaintrospection.mm b/src/plugins/platforms/cocoa/qcocoaintrospection.mm
index 8bbbc886b7..c8e7d9d39e 100644
--- a/src/plugins/platforms/cocoa/qcocoaintrospection.mm
+++ b/src/plugins/platforms/cocoa/qcocoaintrospection.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoakeymapper.mm b/src/plugins/platforms/cocoa/qcocoakeymapper.mm
index 3b901ececb..c2d206fb45 100644
--- a/src/plugins/platforms/cocoa/qcocoakeymapper.mm
+++ b/src/plugins/platforms/cocoa/qcocoakeymapper.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoamenuloader.mm b/src/plugins/platforms/cocoa/qcocoamenuloader.mm
index b9a8c90b87..c3d117ac11 100644
--- a/src/plugins/platforms/cocoa/qcocoamenuloader.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenuloader.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoamimetypes.mm b/src/plugins/platforms/cocoa/qcocoamimetypes.mm
index 0b9e13a370..5c88bb75cb 100644
--- a/src/plugins/platforms/cocoa/qcocoamimetypes.mm
+++ b/src/plugins/platforms/cocoa/qcocoamimetypes.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
index cf8820acfc..cd885796f5 100644
--- a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
+++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoaprintersupport.mm b/src/plugins/platforms/cocoa/qcocoaprintersupport.mm
index 5a6c8c171e..602d0fb4bd 100644
--- a/src/plugins/platforms/cocoa/qcocoaprintersupport.mm
+++ b/src/plugins/platforms/cocoa/qcocoaprintersupport.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtPrintSupport module of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoaservices.mm b/src/plugins/platforms/cocoa/qcocoaservices.mm
index e1a0ba1fcf..6f3f6c4e1d 100644
--- a/src/plugins/platforms/cocoa/qcocoaservices.mm
+++ b/src/plugins/platforms/cocoa/qcocoaservices.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoasystemsettings.mm b/src/plugins/platforms/cocoa/qcocoasystemsettings.mm
index 1d00bbb481..4ef9000d67 100644
--- a/src/plugins/platforms/cocoa/qcocoasystemsettings.mm
+++ b/src/plugins/platforms/cocoa/qcocoasystemsettings.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm
index 1904a43276..000a47c7b4 100755
--- a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm
+++ b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Copyright (C) 2012 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Christoph Schleifenbaum <christoph.schleifenbaum@kdab.com>
** Contact: http://www.qt.io/licensing/
**
diff --git a/src/plugins/platforms/cocoa/qcocoatheme.mm b/src/plugins/platforms/cocoa/qcocoatheme.mm
index 7b2f1ee3af..11749e14de 100644
--- a/src/plugins/platforms/cocoa/qcocoatheme.mm
+++ b/src/plugins/platforms/cocoa/qcocoatheme.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index bbf487c309..64e599ae08 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qmacclipboard.mm b/src/plugins/platforms/cocoa/qmacclipboard.mm
index b550e1a79f..3d88a8d5df 100644
--- a/src/plugins/platforms/cocoa/qmacclipboard.mm
+++ b/src/plugins/platforms/cocoa/qmacclipboard.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qmultitouch_mac.mm b/src/plugins/platforms/cocoa/qmultitouch_mac.mm
index fd59c1f27a..6e7ebcc37c 100644
--- a/src/plugins/platforms/cocoa/qmultitouch_mac.mm
+++ b/src/plugins/platforms/cocoa/qmultitouch_mac.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index aa36a5d909..5625d19ed7 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qnsviewaccessibility.mm b/src/plugins/platforms/cocoa/qnsviewaccessibility.mm
index 0bf3440247..93f0817aad 100644
--- a/src/plugins/platforms/cocoa/qnsviewaccessibility.mm
+++ b/src/plugins/platforms/cocoa/qnsviewaccessibility.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.mm b/src/plugins/platforms/cocoa/qnswindowdelegate.mm
index 13a968f302..015274cac7 100644
--- a/src/plugins/platforms/cocoa/qnswindowdelegate.mm
+++ b/src/plugins/platforms/cocoa/qnswindowdelegate.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qpaintengine_mac.mm b/src/plugins/platforms/cocoa/qpaintengine_mac.mm
index 16eb281a2f..1131fb5fc6 100644
--- a/src/plugins/platforms/cocoa/qpaintengine_mac.mm
+++ b/src/plugins/platforms/cocoa/qpaintengine_mac.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/cocoa/qprintengine_mac.mm b/src/plugins/platforms/cocoa/qprintengine_mac.mm
index ecc00bc20a..348b537691 100644
--- a/src/plugins/platforms/cocoa/qprintengine_mac.mm
+++ b/src/plugins/platforms/cocoa/qprintengine_mac.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp
index 618846f8ba..cd92c49ff1 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.h
index 7d92b84c8a..68bc72a03f 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp
index b377f08575..30fcf8143f 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h
index f73c15caa4..29a1332c9a 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp
index 2ac2030dc7..4598f21d92 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h
index ec877e3279..9a160d2570 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsmain.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsmain.cpp
index bae330a772..64a0bedb2c 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsmain.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsmain.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the qmake spec of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp
index 53b6e88c8c..45287ae36e 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h
index e2b52b8942..cc2d6942d6 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11main.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11main.cpp
index cb21d1f8d1..64069e7dbc 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11main.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11main.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the qmake spec of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/qeglfsdeviceintegration.cpp b/src/plugins/platforms/eglfs/qeglfsdeviceintegration.cpp
index 719d34f8a6..7d1007e7ef 100644
--- a/src/plugins/platforms/eglfs/qeglfsdeviceintegration.cpp
+++ b/src/plugins/platforms/eglfs/qeglfsdeviceintegration.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.cpp b/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.cpp
index 1adfb4bc67..0c07aa64be 100644
--- a/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.cpp
+++ b/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.h b/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.h
index efdc009f04..9b8eaacd51 100644
--- a/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.h
+++ b/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/haiku/haiku.json b/src/plugins/platforms/haiku/haiku.json
new file mode 100644
index 0000000000..cfc06df640
--- /dev/null
+++ b/src/plugins/platforms/haiku/haiku.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "haiku" ]
+}
diff --git a/src/plugins/platforms/haiku/haiku.pro b/src/plugins/platforms/haiku/haiku.pro
new file mode 100644
index 0000000000..87f31997a3
--- /dev/null
+++ b/src/plugins/platforms/haiku/haiku.pro
@@ -0,0 +1,42 @@
+TARGET = qhaiku
+PLUGIN_TYPE = platforms
+PLUGIN_CLASS_NAME = QHaikuIntegrationPlugin
+load(qt_plugin)
+
+QT += platformsupport-private core-private gui-private
+
+SOURCES = \
+ main.cpp \
+ qhaikuapplication.cpp \
+ qhaikubuffer.cpp \
+ qhaikuclipboard.cpp \
+ qhaikucursor.cpp \
+ qhaikuintegration.cpp \
+ qhaikukeymapper.cpp \
+ qhaikurasterbackingstore.cpp \
+ qhaikurasterwindow.cpp \
+ qhaikuscreen.cpp \
+ qhaikuservices.cpp \
+ qhaikuutils.cpp \
+ qhaikuwindow.cpp
+
+HEADERS = \
+ main.h \
+ qhaikuapplication.h \
+ qhaikubuffer.h \
+ qhaikuclipboard.h \
+ qhaikucursor.h \
+ qhaikuintegration.h \
+ qhaikukeymapper.h \
+ qhaikurasterbackingstore.h \
+ qhaikurasterwindow.h \
+ qhaikuscreen.h \
+ qhaikuservices.h \
+ qhaikuutils.h \
+ qhaikuwindow.h
+
+LIBS += -lbe
+
+OTHER_FILES += haiku.json
+
+include (../../../platformsupport/fontdatabases/fontdatabases.pri)
diff --git a/src/plugins/platforms/haiku/main.cpp b/src/plugins/platforms/haiku/main.cpp
new file mode 100644
index 0000000000..2892a2d292
--- /dev/null
+++ b/src/plugins/platforms/haiku/main.cpp
@@ -0,0 +1,47 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "main.h"
+#include "qhaikuintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+QPlatformIntegration *QHaikuIntegrationPlugin::create(const QString& system, const QStringList& paramList)
+{
+ if (!system.compare(QLatin1String("haiku"), Qt::CaseInsensitive))
+ return new QHaikuIntegration(paramList);
+
+ return Q_NULLPTR;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/haiku/main.h b/src/plugins/platforms/haiku/main.h
new file mode 100644
index 0000000000..fbf0bee527
--- /dev/null
+++ b/src/plugins/platforms/haiku/main.h
@@ -0,0 +1,47 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qpa/qplatformintegrationplugin.h>
+
+QT_BEGIN_NAMESPACE
+
+class QHaikuIntegrationPlugin : public QPlatformIntegrationPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.2" FILE "haiku.json")
+
+public:
+ QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
+};
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/haiku/qhaikuapplication.cpp b/src/plugins/platforms/haiku/qhaikuapplication.cpp
new file mode 100644
index 0000000000..0ee2628c5b
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuapplication.cpp
@@ -0,0 +1,71 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qhaikuapplication.h"
+
+#include <QCoreApplication>
+#include <QFileOpenEvent>
+
+#include <Entry.h>
+#include <Path.h>
+
+QHaikuApplication::QHaikuApplication(const char *signature)
+ : BApplication(signature)
+{
+}
+
+bool QHaikuApplication::QuitRequested()
+{
+ QEvent quitEvent(QEvent::Quit);
+ QCoreApplication::sendEvent(QCoreApplication::instance(), &quitEvent);
+ return true;
+}
+
+void QHaikuApplication::RefsReceived(BMessage* message)
+{
+ uint32 type;
+ int32 count;
+
+ const status_t status = message->GetInfo("refs", &type, &count);
+ if (status == B_OK && type == B_REF_TYPE) {
+ entry_ref ref;
+ for (int32 i = 0; i < count; ++i) {
+ if (message->FindRef("refs", i, &ref) == B_OK) {
+ const BPath path(&ref);
+ QCoreApplication::postEvent(QCoreApplication::instance(), new QFileOpenEvent(QFile::decodeName(path.Path())));
+ }
+ }
+ }
+
+ BApplication::RefsReceived(message);
+}
diff --git a/src/plugins/platforms/haiku/qhaikuapplication.h b/src/plugins/platforms/haiku/qhaikuapplication.h
new file mode 100644
index 0000000000..51148a54df
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuapplication.h
@@ -0,0 +1,50 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QHAIKUAPPLICATION_H
+#define QHAIKUAPPLICATION_H
+
+#include <qglobal.h>
+
+#include <Application.h>
+
+class QHaikuApplication : public BApplication
+{
+public:
+ explicit QHaikuApplication(const char *signature);
+
+ bool QuitRequested() Q_DECL_OVERRIDE;
+ void RefsReceived(BMessage* message) Q_DECL_OVERRIDE;
+};
+
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikubuffer.cpp b/src/plugins/platforms/haiku/qhaikubuffer.cpp
new file mode 100644
index 0000000000..160fa559d0
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikubuffer.cpp
@@ -0,0 +1,73 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qhaikubuffer.h"
+
+#include <Bitmap.h>
+#include <Rect.h>
+
+QT_BEGIN_NAMESPACE
+
+QHaikuBuffer::QHaikuBuffer()
+ : m_buffer(Q_NULLPTR)
+{
+}
+
+QHaikuBuffer::QHaikuBuffer(BBitmap *buffer)
+ : m_buffer(buffer)
+{
+ // wrap buffer in an image
+ m_image = QImage(static_cast<uchar*>(m_buffer->Bits()), m_buffer->Bounds().right, m_buffer->Bounds().bottom, m_buffer->BytesPerRow(), QImage::Format_RGB32);
+}
+
+BBitmap* QHaikuBuffer::nativeBuffer() const
+{
+ return m_buffer;
+}
+
+const QImage *QHaikuBuffer::image() const
+{
+ return (m_buffer != Q_NULLPTR) ? &m_image : Q_NULLPTR;
+}
+
+QImage *QHaikuBuffer::image()
+{
+ return (m_buffer != Q_NULLPTR) ? &m_image : Q_NULLPTR;
+}
+
+QRect QHaikuBuffer::rect() const
+{
+ return m_image.rect();
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/haiku/qhaikubuffer.h b/src/plugins/platforms/haiku/qhaikubuffer.h
new file mode 100644
index 0000000000..f45aca7306
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikubuffer.h
@@ -0,0 +1,62 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QHAIKUBUFFER_H
+#define QHAIKUBUFFER_H
+
+#include <QtGui/QImage>
+
+class BBitmap;
+
+QT_BEGIN_NAMESPACE
+
+class QHaikuBuffer
+{
+public:
+ QHaikuBuffer();
+ QHaikuBuffer(BBitmap *buffer);
+
+ BBitmap* nativeBuffer() const;
+ const QImage *image() const;
+ QImage *image();
+
+ QRect rect() const;
+
+private:
+ BBitmap *m_buffer;
+ QImage m_image;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikuclipboard.cpp b/src/plugins/platforms/haiku/qhaikuclipboard.cpp
new file mode 100644
index 0000000000..f3aa9dc36e
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuclipboard.cpp
@@ -0,0 +1,140 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#if !defined(QT_NO_CLIPBOARD)
+
+#include "qhaikuclipboard.h"
+
+#include <QMimeData>
+#include <QThread>
+
+#include <Clipboard.h>
+
+QHaikuClipboard::QHaikuClipboard()
+{
+ if (be_clipboard)
+ be_clipboard->StartWatching(BMessenger(this));
+}
+
+QHaikuClipboard::~QHaikuClipboard()
+{
+ if (be_clipboard)
+ be_clipboard->StopWatching(BMessenger(this));
+}
+
+QMimeData *QHaikuClipboard::mimeData(QClipboard::Mode mode)
+{
+ QMimeData *mimeData = new QMimeData();
+
+ if (mode != QClipboard::Clipboard)
+ return mimeData;
+
+ if (!be_clipboard->Lock())
+ return mimeData;
+
+ const BMessage *clipboard = be_clipboard->Data();
+ if (clipboard) {
+ char *name = Q_NULLPTR;
+ uint32 type = 0;
+ int32 count = 0;
+
+ for (int i = 0; clipboard->GetInfo(B_MIME_TYPE, i, &name, &type, &count) == B_OK; i++) {
+ const void *data = Q_NULLPTR;
+ int32 dataLen = 0;
+
+ const status_t status = clipboard->FindData(name, B_MIME_TYPE, &data, &dataLen);
+ if (dataLen && (status == B_OK)) {
+ const QString format = QString::fromLatin1(name);
+ if (format == QStringLiteral("text/plain")) {
+ mimeData->setText(QString::fromLocal8Bit(reinterpret_cast<const char*>(data), dataLen));
+ } else if (format == QStringLiteral("text/html")) {
+ mimeData->setHtml(QString::fromLocal8Bit(reinterpret_cast<const char*>(data), dataLen));
+ } else {
+ mimeData->setData(format, QByteArray(reinterpret_cast<const char*>(data), dataLen));
+ }
+ }
+ }
+ }
+
+ be_clipboard->Unlock();
+
+ return mimeData;
+}
+
+void QHaikuClipboard::setMimeData(QMimeData *mimeData, QClipboard::Mode mode)
+{
+ if (mode != QClipboard::Clipboard)
+ return;
+
+ if (!be_clipboard->Lock())
+ return;
+
+ be_clipboard->Clear();
+ if (mimeData) {
+ BMessage *clipboard = be_clipboard->Data();
+ if (clipboard) {
+ const QStringList formats = mimeData->formats();
+ Q_FOREACH (const QString &format, formats) {
+ const QByteArray data = mimeData->data(format).data();
+ clipboard->AddData(format.toUtf8(), B_MIME_TYPE, data, data.count());
+ }
+ }
+ }
+
+ if (be_clipboard->Commit() != B_OK)
+ qWarning("Unable to store mime data on clipboard");
+
+ be_clipboard->Unlock();
+}
+
+bool QHaikuClipboard::supportsMode(QClipboard::Mode mode) const
+{
+ return (mode == QClipboard::Clipboard);
+}
+
+bool QHaikuClipboard::ownsMode(QClipboard::Mode mode) const
+{
+ Q_UNUSED(mode);
+
+ return false;
+}
+
+void QHaikuClipboard::MessageReceived(BMessage* message)
+{
+ if (message->what == B_CLIPBOARD_CHANGED)
+ emitChanged(QClipboard::Clipboard);
+
+ BHandler::MessageReceived(message);
+}
+
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikuclipboard.h b/src/plugins/platforms/haiku/qhaikuclipboard.h
new file mode 100644
index 0000000000..0dc2bfdd3b
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuclipboard.h
@@ -0,0 +1,64 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QHAIKUCLIPBOARD_H
+#define QHAIKUCLIPBOARD_H
+
+#if !defined(QT_NO_CLIPBOARD)
+
+#include <qpa/qplatformclipboard.h>
+
+#include <Handler.h>
+
+QT_BEGIN_NAMESPACE
+
+class QHaikuClipboard : public QPlatformClipboard, public BHandler
+{
+public:
+ QHaikuClipboard();
+ ~QHaikuClipboard();
+
+ QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) Q_DECL_OVERRIDE;
+ void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard) Q_DECL_OVERRIDE;
+ bool supportsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE;
+ bool ownsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE;
+
+ // override from BHandler to catch change notifications from Haiku clipboard
+ void MessageReceived(BMessage* message) Q_DECL_OVERRIDE;
+};
+
+QT_END_NAMESPACE
+
+#endif
+
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikucursor.cpp b/src/plugins/platforms/haiku/qhaikucursor.cpp
new file mode 100644
index 0000000000..7ac677f597
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikucursor.cpp
@@ -0,0 +1,92 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qhaikucursor.h"
+
+#include "qhaikurasterwindow.h"
+
+#include <Cursor.h>
+
+QHaikuCursor::QHaikuCursor()
+{
+ m_cursorIds.insert(Qt::ArrowCursor, B_CURSOR_ID_SYSTEM_DEFAULT);
+ m_cursorIds.insert(Qt::UpArrowCursor, B_CURSOR_ID_RESIZE_NORTH);
+ m_cursorIds.insert(Qt::CrossCursor, B_CURSOR_ID_CROSS_HAIR);
+ m_cursorIds.insert(Qt::WaitCursor, B_CURSOR_ID_PROGRESS);
+ m_cursorIds.insert(Qt::IBeamCursor, B_CURSOR_ID_I_BEAM);
+ m_cursorIds.insert(Qt::SizeVerCursor, B_CURSOR_ID_RESIZE_NORTH_SOUTH);
+ m_cursorIds.insert(Qt::SizeHorCursor, B_CURSOR_ID_RESIZE_EAST_WEST);
+ m_cursorIds.insert(Qt::SizeBDiagCursor, B_CURSOR_ID_RESIZE_NORTH_EAST_SOUTH_WEST);
+ m_cursorIds.insert(Qt::SizeFDiagCursor, B_CURSOR_ID_RESIZE_NORTH_WEST_SOUTH_EAST);
+ m_cursorIds.insert(Qt::SizeAllCursor, B_CURSOR_ID_MOVE);
+ m_cursorIds.insert(Qt::BlankCursor, B_CURSOR_ID_NO_CURSOR);
+ m_cursorIds.insert(Qt::SplitVCursor, B_CURSOR_ID_RESIZE_NORTH_SOUTH);
+ m_cursorIds.insert(Qt::SplitHCursor, B_CURSOR_ID_RESIZE_EAST_WEST);
+ m_cursorIds.insert(Qt::PointingHandCursor, B_CURSOR_ID_FOLLOW_LINK);
+ m_cursorIds.insert(Qt::ForbiddenCursor, B_CURSOR_ID_NOT_ALLOWED);
+ m_cursorIds.insert(Qt::OpenHandCursor, B_CURSOR_ID_GRAB);
+ m_cursorIds.insert(Qt::ClosedHandCursor, B_CURSOR_ID_GRABBING);
+ m_cursorIds.insert(Qt::WhatsThisCursor, B_CURSOR_ID_HELP);
+ m_cursorIds.insert(Qt::BusyCursor, B_CURSOR_ID_PROGRESS);
+}
+
+#ifndef QT_NO_CURSOR
+void QHaikuCursor::changeCursor(QCursor *windowCursor, QWindow *window)
+{
+ if (!window)
+ return;
+
+ BWindow *haikuWindow = reinterpret_cast<BWindow*>(window->winId());
+
+ // We expect that every BWindow has exactly one BView as child,
+ // so we can use CurrentFocus to retrieve it and call SetViewCursor
+ // to change the cursor for the whole window.
+ if (!windowCursor) {
+ BView *view = haikuWindow->CurrentFocus();
+ if (view) {
+ view->SetViewCursor(B_CURSOR_SYSTEM_DEFAULT);
+ }
+ } else {
+ const Qt::CursorShape shape = windowCursor->shape();
+ if (!m_cursors.contains(shape))
+ m_cursors.insert(shape, new BCursor(m_cursorIds.value(shape)));
+
+ BView *view = haikuWindow->CurrentFocus();
+ if (view) {
+ view->LockLooper();
+ view->SetViewCursor(m_cursors.value(shape));
+ view->UnlockLooper();
+ }
+ }
+}
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikucursor.h b/src/plugins/platforms/haiku/qhaikucursor.h
new file mode 100644
index 0000000000..61450b84b9
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikucursor.h
@@ -0,0 +1,59 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QHAIKUCURSOR_H
+#define QHAIKUCURSOR_H
+
+#include <qpa/qplatformcursor.h>
+
+#include <Cursor.h>
+
+QT_BEGIN_NAMESPACE
+
+class QHaikuCursor : public QPlatformCursor
+{
+public:
+ QHaikuCursor();
+
+#ifndef QT_NO_CURSOR
+ void changeCursor(QCursor *windowCursor, QWindow *window) Q_DECL_OVERRIDE;
+#endif
+
+private:
+ QHash<Qt::CursorShape, BCursorID> m_cursorIds;
+ QHash<Qt::CursorShape, BCursor*> m_cursors;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikuintegration.cpp b/src/plugins/platforms/haiku/qhaikuintegration.cpp
new file mode 100644
index 0000000000..715a965adb
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuintegration.cpp
@@ -0,0 +1,133 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qhaikuintegration.h"
+
+#include "qhaikuapplication.h"
+#include "qhaikuclipboard.h"
+#include "qhaikurasterbackingstore.h"
+#include "qhaikurasterwindow.h"
+#include "qhaikuscreen.h"
+#include "qhaikuservices.h"
+
+#include <QCoreApplication>
+#include <QFileInfo>
+#include <qpa/qplatformwindow.h>
+#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
+
+#include <Application.h>
+
+QT_BEGIN_NAMESPACE
+
+static long int startApplicationThread(void *data)
+{
+ QHaikuApplication *app = static_cast<QHaikuApplication*>(data);
+ app->LockLooper();
+ return app->Run();
+}
+
+QHaikuIntegration::QHaikuIntegration(const QStringList &parameters)
+ : m_clipboard(new QHaikuClipboard)
+{
+ Q_UNUSED(parameters);
+
+ const QString signature = QStringLiteral("application/x-vnd.Qt.%1").arg(QFileInfo(QCoreApplication::applicationFilePath()).fileName());
+
+ QHaikuApplication *app = new QHaikuApplication(signature.toLocal8Bit());
+ be_app = app;
+
+ const thread_id applicationThreadId = spawn_thread(startApplicationThread, "app_thread", 1, static_cast<void*>(app));
+ resume_thread(applicationThreadId);
+ app->UnlockLooper();
+
+ m_screen = new QHaikuScreen;
+
+ m_services = new QHaikuServices;
+
+ // notify system about available screen
+ screenAdded(m_screen);
+}
+
+QHaikuIntegration::~QHaikuIntegration()
+{
+ destroyScreen(m_screen);
+ m_screen = Q_NULLPTR;
+
+ delete m_services;
+ m_services = Q_NULLPTR;
+
+ delete m_clipboard;
+ m_clipboard = Q_NULLPTR;
+
+ be_app->LockLooper();
+ be_app->Quit();
+}
+
+bool QHaikuIntegration::hasCapability(QPlatformIntegration::Capability capability) const
+{
+ return QPlatformIntegration::hasCapability(capability);
+}
+
+QPlatformFontDatabase *QHaikuIntegration::fontDatabase() const
+{
+ return QPlatformIntegration::fontDatabase();
+}
+
+QPlatformServices *QHaikuIntegration::services() const
+{
+ return m_services;
+}
+
+QPlatformClipboard *QHaikuIntegration::clipboard() const
+{
+ return m_clipboard;
+}
+
+QPlatformWindow *QHaikuIntegration::createPlatformWindow(QWindow *window) const
+{
+ QPlatformWindow *platformWindow = new QHaikuRasterWindow(window);
+ platformWindow->requestActivateWindow();
+ return platformWindow;
+}
+
+QPlatformBackingStore *QHaikuIntegration::createPlatformBackingStore(QWindow *window) const
+{
+ return new QHaikuRasterBackingStore(window);
+}
+
+QAbstractEventDispatcher *QHaikuIntegration::createEventDispatcher() const
+{
+ return createUnixEventDispatcher();
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/haiku/qhaikuintegration.h b/src/plugins/platforms/haiku/qhaikuintegration.h
new file mode 100644
index 0000000000..feb48b2bdf
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuintegration.h
@@ -0,0 +1,72 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QHAIKUINTEGRATION_H
+#define QHAIKUINTEGRATION_H
+
+#include <qpa/qplatformintegration.h>
+
+QT_BEGIN_NAMESPACE
+
+class QHaikuClipboard;
+class QHaikuScreen;
+class QHaikuServices;
+
+class QHaikuIntegration : public QPlatformIntegration
+{
+public:
+ explicit QHaikuIntegration(const QStringList &paramList);
+ ~QHaikuIntegration();
+
+ bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
+
+ QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
+ QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
+
+ QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
+ QPlatformServices *services() const Q_DECL_OVERRIDE;
+
+#ifndef QT_NO_CLIPBOARD
+ QPlatformClipboard *clipboard() const Q_DECL_OVERRIDE;
+#endif
+
+private:
+ QHaikuClipboard *m_clipboard;
+ QHaikuScreen *m_screen;
+ QHaikuServices *m_services;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikukeymapper.cpp b/src/plugins/platforms/haiku/qhaikukeymapper.cpp
new file mode 100644
index 0000000000..7d148ae307
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikukeymapper.cpp
@@ -0,0 +1,180 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qhaikukeymapper.h"
+
+QT_BEGIN_NAMESPACE
+
+uint32 Haiku_ScanCodes[] = {
+ Qt::Key_Escape, 0x01,
+ Qt::Key_F1, 0x02,
+ Qt::Key_F2, 0x03,
+ Qt::Key_F3, 0x04,
+ Qt::Key_F4, 0x05,
+ Qt::Key_F5, 0x06,
+ Qt::Key_F6, 0x07,
+ Qt::Key_F7, 0x08,
+ Qt::Key_F8, 0x09,
+ Qt::Key_F9, 0x0A,
+ Qt::Key_F10, 0x0B,
+ Qt::Key_F11, 0x0C,
+ Qt::Key_F12, 0x0D,
+ Qt::Key_Print, 0x0E,
+ Qt::Key_Pause, 0x22,
+ Qt::Key_AsciiTilde, 0x11,
+ Qt::Key_1, 0x12,
+ Qt::Key_2, 0x13,
+ Qt::Key_3, 0x14,
+ Qt::Key_4, 0x15,
+ Qt::Key_5, 0x16,
+ Qt::Key_6, 0x17,
+ Qt::Key_7, 0x18,
+ Qt::Key_8, 0x19,
+ Qt::Key_9, 0x1A,
+ Qt::Key_0, 0x1B,
+ Qt::Key_Minus, 0x1C,
+ Qt::Key_Plus, 0x1D,
+ Qt::Key_Backspace, 0x1E,
+ Qt::Key_Insert, 0x1F,
+ Qt::Key_Home, 0x20,
+ Qt::Key_PageUp, 0x21,
+ Qt::Key_Slash, 0x23,
+ Qt::Key_Asterisk, 0x24,
+ Qt::Key_Minus, 0x25,
+ Qt::Key_Tab, 0x26,
+ Qt::Key_Q, 0x27,
+ Qt::Key_W, 0x28,
+ Qt::Key_E, 0x29,
+ Qt::Key_R, 0x2A,
+ Qt::Key_T, 0x2B,
+ Qt::Key_Y, 0x2C,
+ Qt::Key_U, 0x2D,
+ Qt::Key_I, 0x2E,
+ Qt::Key_O, 0x2F,
+ Qt::Key_P, 0x30,
+ Qt::Key_BracketLeft, 0x31,
+ Qt::Key_BracketRight, 0x32,
+ Qt::Key_Backslash, 0x33,
+ Qt::Key_Delete, 0x34,
+ Qt::Key_End, 0x35,
+ Qt::Key_PageDown, 0x36,
+ Qt::Key_Home, 0x37, // numpad
+ Qt::Key_Up, 0x38, // numpad
+ Qt::Key_PageUp, 0x39, // numpad
+ Qt::Key_Plus, 0x3A, // numpad
+ Qt::Key_A, 0x3C,
+ Qt::Key_S, 0x3D,
+ Qt::Key_D, 0x3E,
+ Qt::Key_F, 0x3F,
+ Qt::Key_G, 0x40,
+ Qt::Key_H, 0x41,
+ Qt::Key_J, 0x42,
+ Qt::Key_K, 0x43,
+ Qt::Key_L, 0x44,
+ Qt::Key_Colon, 0x45,
+ Qt::Key_QuoteDbl, 0x46,
+ Qt::Key_Return, 0x47,
+ Qt::Key_Left, 0x48, // numpad
+ Qt::Key_5, 0x49, // numpad ???
+ Qt::Key_Right, 0x4A, // numpad
+ Qt::Key_Z, 0x4C,
+ Qt::Key_X, 0x4D,
+ Qt::Key_C, 0x4E,
+ Qt::Key_V, 0x4F,
+ Qt::Key_B, 0x50,
+ Qt::Key_N, 0x51,
+ Qt::Key_M, 0x51,
+ Qt::Key_Less, 0x52,
+ Qt::Key_Greater, 0x54,
+ Qt::Key_Question, 0x55,
+ Qt::Key_Up, 0x57, // cursor
+ Qt::Key_End, 0x58, // numpad
+ Qt::Key_Down, 0x59, // numpad
+ Qt::Key_PageDown, 0x5A, // numpad
+ Qt::Key_Enter, 0x5B, // numpad
+ Qt::Key_Space, 0x5E,
+ Qt::Key_Left, 0x61, // cursor
+ Qt::Key_Down, 0x62, // cursor
+ Qt::Key_Right, 0x63, // cursor
+ Qt::Key_Insert, 0x64, // cursor
+ Qt::Key_Delete, 0x65, // numpad
+ 0, 0x00
+};
+
+uint32 Haiku_ScanCodes_Numlock[] = {
+ Qt::Key_7, 0x37,
+ Qt::Key_8, 0x38,
+ Qt::Key_9, 0x39,
+ Qt::Key_Plus, 0x3A,
+ Qt::Key_4, 0x48,
+ Qt::Key_5, 0x49,
+ Qt::Key_6, 0x4A,
+ Qt::Key_1, 0x58,
+ Qt::Key_2, 0x59,
+ Qt::Key_3, 0x5A,
+ Qt::Key_Enter, 0x5B,
+ Qt::Key_Comma, 0x65,
+ 0, 0x00
+};
+
+uint32 QHaikuKeyMapper::translateKeyCode(uint32 key, bool numlockActive)
+{
+ uint32 code = 0;
+ int i = 0;
+
+ if (numlockActive) {
+ while (Haiku_ScanCodes_Numlock[i]) {
+ if (key == Haiku_ScanCodes_Numlock[i + 1]) {
+ code = Haiku_ScanCodes_Numlock[i];
+ break;
+ }
+ i += 2;
+ }
+
+ if (code > 0)
+ return code;
+ }
+
+ i = 0;
+ while (Haiku_ScanCodes[i]) {
+ if (key == Haiku_ScanCodes[i + 1]) {
+ code = Haiku_ScanCodes[i];
+ break;
+ }
+ i += 2;
+ }
+
+ return code;
+}
+
+QT_END_NAMESPACE
diff --git a/mkspecs/devices/blackberry-playbook-armle-v7-qcc/qplatformdefs.h b/src/plugins/platforms/haiku/qhaikukeymapper.h
index 03afc96a62..dba56e1a64 100644
--- a/mkspecs/devices/blackberry-playbook-armle-v7-qcc/qplatformdefs.h
+++ b/src/plugins/platforms/haiku/qhaikukeymapper.h
@@ -1,9 +1,9 @@
-/****************************************************************************
+/***************************************************************************
**
-** Copyright (C) 2013 Klarälvdalens Datakonsult AB <info@kdab.com>
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
** Contact: http://www.qt.io/licensing/
**
-** This file is part of the QtCore module of the Qt Toolkit.
+** This file is part of the plugins of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
@@ -31,4 +31,23 @@
**
****************************************************************************/
-#include "../../blackberry-armle-v7-qcc/qplatformdefs.h"
+#ifndef QHAIKUKEYMAPPER_H
+#define QHAIKUKEYMAPPER_H
+
+#include <qnamespace.h>
+
+#include <InterfaceDefs.h>
+
+QT_BEGIN_NAMESPACE
+
+class QHaikuKeyMapper
+{
+public:
+ QHaikuKeyMapper();
+
+ static uint32 translateKeyCode(uint32 key, bool numlockActive);
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikurasterbackingstore.cpp b/src/plugins/platforms/haiku/qhaikurasterbackingstore.cpp
new file mode 100644
index 0000000000..caede56b1f
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikurasterbackingstore.cpp
@@ -0,0 +1,92 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qhaikurasterbackingstore.h"
+#include "qhaikurasterwindow.h"
+
+#include <Bitmap.h>
+#include <View.h>
+
+QT_BEGIN_NAMESPACE
+
+QHaikuRasterBackingStore::QHaikuRasterBackingStore(QWindow *window)
+ : QPlatformBackingStore(window)
+ , m_bitmap(Q_NULLPTR)
+{
+}
+
+QHaikuRasterBackingStore::~QHaikuRasterBackingStore()
+{
+ delete m_bitmap;
+ m_bitmap = Q_NULLPTR;
+}
+
+QPaintDevice *QHaikuRasterBackingStore::paintDevice()
+{
+ if (!m_bufferSize.isEmpty() && m_bitmap)
+ return m_buffer.image();
+
+ return Q_NULLPTR;
+}
+
+void QHaikuRasterBackingStore::flush(QWindow *window, const QRegion &region, const QPoint &offset)
+{
+ Q_UNUSED(region);
+ Q_UNUSED(offset);
+
+ if (!window)
+ return;
+
+ QHaikuRasterWindow *targetWindow = static_cast<QHaikuRasterWindow*>(window->handle());
+
+ BView *view = targetWindow->nativeViewHandle();
+
+ view->LockLooper();
+ view->DrawBitmap(m_bitmap);
+ view->UnlockLooper();
+}
+
+void QHaikuRasterBackingStore::resize(const QSize &size, const QRegion &staticContents)
+{
+ Q_UNUSED(staticContents);
+
+ if (m_bufferSize == size)
+ return;
+
+ delete m_bitmap;
+ m_bitmap = new BBitmap(BRect(0, 0, size.width(), size.height()), B_RGB32, false, true);
+ m_buffer = QHaikuBuffer(m_bitmap);
+ m_bufferSize = size;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/haiku/qhaikurasterbackingstore.h b/src/plugins/platforms/haiku/qhaikurasterbackingstore.h
new file mode 100644
index 0000000000..641664fb23
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikurasterbackingstore.h
@@ -0,0 +1,64 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QHAIKURASTERWINDOWSURFACE_H
+#define QHAIKURASTERWINDOWSURFACE_H
+
+#include <qpa/qplatformbackingstore.h>
+
+#include "qhaikubuffer.h"
+
+QT_BEGIN_NAMESPACE
+
+class BBitmap;
+class QHaikuRasterWindow;
+
+class QHaikuRasterBackingStore : public QPlatformBackingStore
+{
+public:
+ explicit QHaikuRasterBackingStore(QWindow *window);
+ ~QHaikuRasterBackingStore();
+
+ QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
+ void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
+
+private:
+ BBitmap *m_bitmap;
+ QHaikuBuffer m_buffer;
+ QSize m_bufferSize;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikurasterwindow.cpp b/src/plugins/platforms/haiku/qhaikurasterwindow.cpp
new file mode 100644
index 0000000000..659700f269
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikurasterwindow.cpp
@@ -0,0 +1,270 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qhaikurasterwindow.h"
+
+#include "qhaikukeymapper.h"
+
+#include <View.h>
+#include <Window.h>
+
+#include <qpa/qwindowsysteminterface.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_DECLARE_METATYPE(QEvent::Type)
+Q_DECLARE_METATYPE(Qt::MouseButtons)
+Q_DECLARE_METATYPE(Qt::MouseEventSource)
+Q_DECLARE_METATYPE(Qt::KeyboardModifiers)
+Q_DECLARE_METATYPE(Qt::Orientation)
+
+HaikuViewProxy::HaikuViewProxy(BWindow *window, QObject *parent)
+ : QObject(parent)
+ , BView(BRect(0, 0, window->Bounds().right, window->Bounds().bottom), 0, B_FOLLOW_ALL_SIDES, B_WILL_DRAW | B_FRAME_EVENTS)
+{
+}
+
+void HaikuViewProxy::MessageReceived(BMessage *message)
+{
+ switch (message->what) {
+ case B_MOUSE_WHEEL_CHANGED:
+ {
+ float deltaX = 0;
+ if (message->FindFloat("be:wheel_delta_x", &deltaX) != B_OK)
+ deltaX = 0;
+
+ float deltaY = 0;
+ if (message->FindFloat("be:wheel_delta_y", &deltaY) != B_OK)
+ deltaY = 0;
+
+ if (deltaX != 0 || deltaY != 0) {
+ BPoint localPos;
+ uint32 keyState = 0;
+ GetMouse(&localPos, &keyState);
+ const Qt::KeyboardModifiers keyboardModifiers = keyStateToModifiers(modifiers());
+
+ const BPoint globalPos = ConvertToScreen(localPos);
+ const QPoint globalPosition = QPoint(globalPos.x, globalPos.y);
+ const QPoint localPosition = QPoint(localPos.x, localPos.y);
+
+ if (deltaX != 0)
+ Q_EMIT wheelEvent(localPosition, globalPosition, (deltaX * -120), Qt::Horizontal, keyboardModifiers);
+
+ if (deltaY != 0)
+ Q_EMIT wheelEvent(localPosition, globalPosition, (deltaY * -120), Qt::Vertical, keyboardModifiers);
+ }
+ break;
+ }
+ default:
+ BView::MessageReceived(message);
+ break;
+ }
+
+}
+
+void HaikuViewProxy::Draw(BRect updateRect)
+{
+ BView::Draw(updateRect);
+
+ Q_EMIT drawRequest(QRect(updateRect.left, updateRect.top, updateRect.Width(), updateRect.Height()));
+}
+
+void HaikuViewProxy::MouseDown(BPoint localPos)
+{
+ BPoint dummyPos;
+ uint32 keyState = 0;
+ GetMouse(&dummyPos, &keyState);
+
+ const Qt::MouseButtons mouseButtons = keyStateToMouseButtons(keyState);
+ const Qt::KeyboardModifiers keyboardModifiers = keyStateToModifiers(modifiers());
+ const Qt::MouseEventSource source = Qt::MouseEventNotSynthesized;
+
+ const BPoint globalPos = ConvertToScreen(localPos);
+ const QPoint globalPosition = QPoint(globalPos.x, globalPos.y);
+ const QPoint localPosition = QPoint(localPos.x, localPos.y);
+
+ Q_EMIT mouseEvent(localPosition, globalPosition, mouseButtons, keyboardModifiers, source);
+}
+
+void HaikuViewProxy::MouseUp(BPoint localPos)
+{
+ BPoint dummyPos;
+ uint32 keyState = 0;
+ GetMouse(&dummyPos, &keyState);
+
+ const Qt::MouseButtons mouseButtons = keyStateToMouseButtons(keyState);
+ const Qt::KeyboardModifiers keyboardModifiers = keyStateToModifiers(modifiers());
+ const Qt::MouseEventSource source = Qt::MouseEventNotSynthesized;
+
+ const BPoint globalPos = ConvertToScreen(localPos);
+ const QPoint globalPosition = QPoint(globalPos.x, globalPos.y);
+ const QPoint localPosition = QPoint(localPos.x, localPos.y);
+
+ Q_EMIT mouseEvent(localPosition, globalPosition, mouseButtons, keyboardModifiers, source);
+}
+
+void HaikuViewProxy::MouseMoved(BPoint pos, uint32 code, const BMessage *dragMessage)
+{
+ switch (code) {
+ case B_INSIDE_VIEW:
+ {
+ BPoint dummyPos;
+ uint32 keyState = 0;
+ GetMouse(&dummyPos, &keyState);
+
+ const Qt::MouseButtons mouseButtons = keyStateToMouseButtons(keyState);
+ const Qt::KeyboardModifiers keyboardModifiers = keyStateToModifiers(modifiers());
+ const Qt::MouseEventSource source = Qt::MouseEventNotSynthesized;
+
+ const BPoint globalPos = ConvertToScreen(pos);
+ const QPoint globalPosition = QPoint(globalPos.x, globalPos.y);
+ const QPoint localPosition = QPoint(pos.x, pos.y);
+
+ Q_EMIT mouseEvent(localPosition, globalPosition, mouseButtons, keyboardModifiers, source);
+ }
+ break;
+ case B_ENTERED_VIEW:
+ Q_EMIT enteredView();
+ break;
+ case B_EXITED_VIEW:
+ Q_EMIT exitedView();
+ break;
+ }
+
+ BView::MouseMoved(pos, code, dragMessage);
+}
+
+void HaikuViewProxy::KeyDown(const char*, int32)
+{
+ handleKeyEvent(QEvent::KeyPress, Window()->CurrentMessage());
+}
+
+void HaikuViewProxy::KeyUp(const char*, int32)
+{
+ handleKeyEvent(QEvent::KeyRelease, Window()->CurrentMessage());
+}
+
+Qt::MouseButtons HaikuViewProxy::keyStateToMouseButtons(uint32 keyState) const
+{
+ Qt::MouseButtons mouseButtons(Qt::NoButton);
+ if (keyState & B_PRIMARY_MOUSE_BUTTON)
+ mouseButtons |= Qt::LeftButton;
+ if (keyState & B_SECONDARY_MOUSE_BUTTON)
+ mouseButtons |= Qt::RightButton;
+ if (keyState & B_TERTIARY_MOUSE_BUTTON)
+ mouseButtons |= Qt::MiddleButton;
+
+ return mouseButtons;
+}
+
+Qt::KeyboardModifiers HaikuViewProxy::keyStateToModifiers(uint32 keyState) const
+{
+ Qt::KeyboardModifiers modifiers(Qt::NoModifier);
+
+ if (keyState & B_SHIFT_KEY)
+ modifiers |= Qt::ShiftModifier;
+ if (keyState & B_CONTROL_KEY)
+ modifiers |= Qt::AltModifier;
+ if (keyState & B_COMMAND_KEY)
+ modifiers |= Qt::ControlModifier;
+
+ return modifiers;
+}
+
+void HaikuViewProxy::handleKeyEvent(QEvent::Type type, BMessage *message)
+{
+ int32 key = 0;
+ uint32 code = 0;
+ const char *bytes = Q_NULLPTR;
+ QString text;
+
+ if (message) {
+ if (message->FindString("bytes", &bytes) == B_OK) {
+ text = QString::fromLocal8Bit(bytes, strlen(bytes));
+ }
+
+ if (message->FindInt32("key", &key) == B_OK) {
+ code = QHaikuKeyMapper::translateKeyCode(key, (modifiers() & B_NUM_LOCK));
+ }
+ }
+
+ const Qt::KeyboardModifiers keyboardModifiers = keyStateToModifiers(modifiers());
+
+ Q_EMIT keyEvent(type, code, keyboardModifiers, text);
+}
+
+
+QHaikuRasterWindow::QHaikuRasterWindow(QWindow *window)
+ : QHaikuWindow(window)
+{
+ qRegisterMetaType<QEvent::Type>();
+ qRegisterMetaType<Qt::MouseButtons>();
+ qRegisterMetaType<Qt::MouseEventSource>();
+ qRegisterMetaType<Qt::KeyboardModifiers>();
+ qRegisterMetaType<Qt::Orientation>();
+
+ HaikuViewProxy *haikuView = new HaikuViewProxy(m_window);
+ connect(haikuView, SIGNAL(mouseEvent(QPoint,QPoint,Qt::MouseButtons,Qt::KeyboardModifiers,Qt::MouseEventSource)),
+ this, SLOT(haikuMouseEvent(QPoint,QPoint,Qt::MouseButtons,Qt::KeyboardModifiers,Qt::MouseEventSource)));
+ connect(haikuView, SIGNAL(wheelEvent(QPoint,QPoint,int,Qt::Orientation,Qt::KeyboardModifiers)),
+ this, SLOT(haikuWheelEvent(QPoint,QPoint,int,Qt::Orientation,Qt::KeyboardModifiers)));
+ connect(haikuView, SIGNAL(keyEvent(QEvent::Type,int,Qt::KeyboardModifiers,QString)),
+ this, SLOT(haikuKeyEvent(QEvent::Type,int,Qt::KeyboardModifiers,QString)));
+ connect(haikuView, SIGNAL(enteredView()), this, SLOT(haikuEnteredView()));
+ connect(haikuView, SIGNAL(exitedView()), this, SLOT(haikuExitedView()));
+ connect(haikuView, SIGNAL(drawRequest(QRect)), this, SLOT(haikuDrawRequest(QRect)));
+
+ m_view = haikuView;
+
+ m_window->LockLooper();
+ m_window->AddChild(m_view);
+ m_view->MakeFocus();
+ m_window->UnlockLooper();
+}
+
+QHaikuRasterWindow::~QHaikuRasterWindow()
+{
+ m_window->LockLooper();
+ m_view->RemoveSelf();
+ m_window->UnlockLooper();
+
+ delete m_view;
+ m_view = Q_NULLPTR;
+}
+
+BView* QHaikuRasterWindow::nativeViewHandle() const
+{
+ return m_view;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/haiku/qhaikurasterwindow.h b/src/plugins/platforms/haiku/qhaikurasterwindow.h
new file mode 100644
index 0000000000..feacc44478
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikurasterwindow.h
@@ -0,0 +1,88 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QHAIKURASTERWINDOW_H
+#define QHAIKURASTERWINDOW_H
+
+#include "qhaikuwindow.h"
+
+#include <View.h>
+
+QT_BEGIN_NAMESPACE
+
+class HaikuViewProxy : public QObject, public BView
+{
+ Q_OBJECT
+
+public:
+ explicit HaikuViewProxy(BWindow *window, QObject *parent = Q_NULLPTR);
+
+ void MessageReceived(BMessage *message) Q_DECL_OVERRIDE;
+ void Draw(BRect updateRect) Q_DECL_OVERRIDE;
+ void MouseDown(BPoint pos) Q_DECL_OVERRIDE;
+ void MouseUp(BPoint pos) Q_DECL_OVERRIDE;
+ void MouseMoved(BPoint pos, uint32 code, const BMessage *dragMessage) Q_DECL_OVERRIDE;
+ void KeyDown(const char *bytes, int32 numBytes) Q_DECL_OVERRIDE;
+ void KeyUp(const char *bytes, int32 numBytes) Q_DECL_OVERRIDE;
+
+Q_SIGNALS:
+ void mouseEvent(const QPoint &localPosition, const QPoint &globalPosition, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::MouseEventSource source);
+ void wheelEvent(const QPoint &localPosition, const QPoint &globalPosition, int delta, Qt::Orientation orientation, Qt::KeyboardModifiers modifiers);
+ void keyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, const QString &text);
+ void enteredView();
+ void exitedView();
+ void drawRequest(const QRect &rect);
+
+private:
+ Qt::MouseButtons keyStateToMouseButtons(uint32 keyState) const;
+ Qt::KeyboardModifiers keyStateToModifiers(uint32 keyState) const;
+ void handleKeyEvent(QEvent::Type type, BMessage *message);
+};
+
+class QHaikuRasterWindow : public QHaikuWindow
+{
+ Q_OBJECT
+
+public:
+ explicit QHaikuRasterWindow(QWindow *window);
+ ~QHaikuRasterWindow();
+
+ BView* nativeViewHandle() const;
+
+private:
+ HaikuViewProxy *m_view;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikuscreen.cpp b/src/plugins/platforms/haiku/qhaikuscreen.cpp
new file mode 100644
index 0000000000..c21bfc4c93
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuscreen.cpp
@@ -0,0 +1,137 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qhaikuscreen.h"
+
+#include "qhaikucursor.h"
+#include "qhaikuutils.h"
+
+#include <qpa/qwindowsysteminterface.h>
+
+#include <Bitmap.h>
+#include <Screen.h>
+#include <Window.h>
+
+QHaikuScreen::QHaikuScreen()
+ : m_screen(new BScreen(B_MAIN_SCREEN_ID))
+ , m_cursor(new QHaikuCursor)
+{
+ Q_ASSERT(m_screen->IsValid());
+}
+
+QHaikuScreen::~QHaikuScreen()
+{
+ delete m_cursor;
+ m_cursor = Q_NULLPTR;
+
+ delete m_screen;
+ m_screen = Q_NULLPTR;
+}
+
+QPixmap QHaikuScreen::grabWindow(WId winId, int x, int y, int width, int height) const
+{
+ if (width == 0 || height == 0)
+ return QPixmap();
+
+ BScreen screen(Q_NULLPTR);
+ BBitmap *bitmap = Q_NULLPTR;
+ screen.GetBitmap(&bitmap);
+
+ const BRect frame = (winId ? ((BWindow*)winId)->Frame() : screen.Frame());
+
+ const int absoluteX = frame.left + x;
+ const int absoluteY = frame.top + y;
+
+ if (width < 0)
+ width = frame.Width() - x;
+ if (height < 0)
+ height = frame.Height() - y;
+
+ const QImage::Format format = QHaikuUtils::colorSpaceToImageFormat(bitmap->ColorSpace());
+
+ // get image of complete screen
+ QImage image((uchar*)bitmap->Bits(), screen.Frame().Width() + 1, screen.Frame().Height() + 1, bitmap->BytesPerRow(), format);
+
+ // extract the area of the requested window
+ QRect grabRect(absoluteX, absoluteY, width, height);
+ image = image.copy(grabRect);
+
+ delete bitmap;
+
+ return QPixmap::fromImage(image);
+}
+
+QRect QHaikuScreen::geometry() const
+{
+ const BRect frame = m_screen->Frame();
+ return QRect(frame.left, frame.top, frame.right - frame.left, frame.bottom - frame.top);
+}
+
+int QHaikuScreen::depth() const
+{
+ switch (format()) {
+ case QImage::Format_Invalid:
+ return 0;
+ break;
+ case QImage::Format_MonoLSB:
+ return 1;
+ break;
+ case QImage::Format_Indexed8:
+ return 8;
+ break;
+ case QImage::Format_RGB16:
+ case QImage::Format_RGB555:
+ return 16;
+ break;
+ case QImage::Format_RGB888:
+ return 24;
+ break;
+ case QImage::Format_RGB32:
+ case QImage::Format_ARGB32:
+ default:
+ return 32;
+ break;
+ }
+}
+
+QImage::Format QHaikuScreen::format() const
+{
+ return QHaikuUtils::colorSpaceToImageFormat(m_screen->ColorSpace());
+}
+
+QPlatformCursor *QHaikuScreen::cursor() const
+{
+ return m_cursor;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/haiku/qhaikuscreen.h b/src/plugins/platforms/haiku/qhaikuscreen.h
new file mode 100644
index 0000000000..50729d5760
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuscreen.h
@@ -0,0 +1,66 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QHAIKUSCREEN_H
+#define QHAIKUSCREEN_H
+
+#include <qpa/qplatformscreen.h>
+
+class BScreen;
+class QHaikuCursor;
+
+QT_BEGIN_NAMESPACE
+
+class QHaikuScreen : public QPlatformScreen
+{
+public:
+ QHaikuScreen();
+ ~QHaikuScreen();
+
+ QPixmap grabWindow(WId window, int x, int y, int width, int height) const Q_DECL_OVERRIDE;
+
+ QRect geometry() const Q_DECL_OVERRIDE;
+ int depth() const Q_DECL_OVERRIDE;
+ QImage::Format format() const Q_DECL_OVERRIDE;
+
+ QPlatformCursor *cursor() const Q_DECL_OVERRIDE;
+
+private:
+ BScreen *m_screen;
+
+ QHaikuCursor *m_cursor;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikuservices.cpp b/src/plugins/platforms/haiku/qhaikuservices.cpp
new file mode 100644
index 0000000000..2c07686b56
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuservices.cpp
@@ -0,0 +1,82 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qhaikuservices.h"
+
+#include <QFile>
+#include <QMimeDatabase>
+#include <QString>
+#include <QUrl>
+
+#include <Roster.h>
+
+QT_BEGIN_NAMESPACE
+
+bool QHaikuServices::openUrl(const QUrl &url)
+{
+ const QMimeDatabase mimeDatabase;
+
+ const QMimeType mimeType = mimeDatabase.mimeTypeForUrl(url);
+ if (!mimeType.isValid())
+ return false;
+
+ const QByteArray mimeTypeName = mimeType.name().toLatin1();
+ QByteArray urlData = url.toString().toLocal8Bit();
+ char *rawUrlData = urlData.data();
+
+ if (be_roster->Launch(mimeTypeName.constData(), 1, &rawUrlData) != B_OK)
+ return false;
+
+ return true;
+}
+
+bool QHaikuServices::openDocument(const QUrl &url)
+{
+ const QByteArray localPath = QFile::encodeName(url.toLocalFile());
+
+ entry_ref ref;
+ if (get_ref_for_path(localPath.constData(), &ref) != B_OK)
+ return false;
+
+ if (be_roster->Launch(&ref) != B_OK)
+ return false;
+
+ return true;
+}
+
+QByteArray QHaikuServices::desktopEnvironment() const
+{
+ return QByteArray("Haiku");
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/haiku/qhaikuservices.h b/src/plugins/platforms/haiku/qhaikuservices.h
new file mode 100644
index 0000000000..d38b4481de
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuservices.h
@@ -0,0 +1,52 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QHAIKUSERVICES_H
+#define QHAIKUSERVICES_H
+
+#include <qpa/qplatformservices.h>
+
+QT_BEGIN_NAMESPACE
+
+class QHaikuServices : public QPlatformServices
+{
+public:
+ bool openUrl(const QUrl &url) Q_DECL_OVERRIDE;
+ bool openDocument(const QUrl &url) Q_DECL_OVERRIDE;
+
+ QByteArray desktopEnvironment() const Q_DECL_OVERRIDE;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikuutils.cpp b/src/plugins/platforms/haiku/qhaikuutils.cpp
new file mode 100644
index 0000000000..f634034864
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuutils.cpp
@@ -0,0 +1,110 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qhaikuutils.h"
+
+color_space QHaikuUtils::imageFormatToColorSpace(QImage::Format format)
+{
+ color_space colorSpace = B_NO_COLOR_SPACE;
+ switch (format) {
+ case QImage::Format_Invalid:
+ colorSpace = B_NO_COLOR_SPACE;
+ break;
+ case QImage::Format_MonoLSB:
+ colorSpace = B_GRAY1;
+ break;
+ case QImage::Format_Indexed8:
+ colorSpace = B_CMAP8;
+ break;
+ case QImage::Format_RGB32:
+ colorSpace = B_RGB32;
+ break;
+ case QImage::Format_ARGB32:
+ colorSpace = B_RGBA32;
+ break;
+ case QImage::Format_RGB16:
+ colorSpace = B_RGB16;
+ break;
+ case QImage::Format_RGB555:
+ colorSpace = B_RGB15;
+ break;
+ case QImage::Format_RGB888:
+ colorSpace = B_RGB24;
+ break;
+ default:
+ qWarning("Cannot convert image format %d to color space", format);
+ Q_ASSERT(false);
+ break;
+ }
+
+ return colorSpace;
+}
+
+QImage::Format QHaikuUtils::colorSpaceToImageFormat(color_space colorSpace)
+{
+ QImage::Format format = QImage::Format_Invalid;
+ switch (colorSpace) {
+ case B_NO_COLOR_SPACE:
+ format = QImage::Format_Invalid;
+ break;
+ case B_GRAY1:
+ format = QImage::Format_MonoLSB;
+ break;
+ case B_CMAP8:
+ format = QImage::Format_Indexed8;
+ break;
+ case B_RGB32:
+ format = QImage::Format_RGB32;
+ break;
+ case B_RGBA32:
+ format = QImage::Format_ARGB32;
+ break;
+ case B_RGB16:
+ format = QImage::Format_RGB16;
+ break;
+ case B_RGB15:
+ format = QImage::Format_RGB555;
+ break;
+ case B_RGB24:
+ format = QImage::Format_RGB888;
+ break;
+ default:
+ qWarning("Cannot convert color space %d to image format", colorSpace);
+ Q_ASSERT(false);
+ break;
+ }
+
+ return format;
+}
+
+QT_END_NAMESPACE
diff --git a/mkspecs/devices/blackberry-playbook-x86-qcc/qplatformdefs.h b/src/plugins/platforms/haiku/qhaikuutils.h
index c44bd6580a..a0d129fcbf 100644
--- a/mkspecs/devices/blackberry-playbook-x86-qcc/qplatformdefs.h
+++ b/src/plugins/platforms/haiku/qhaikuutils.h
@@ -1,9 +1,9 @@
-/****************************************************************************
+/***************************************************************************
**
-** Copyright (C) 2013 Klarälvdalens Datakonsult AB <info@kdab.com>
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
** Contact: http://www.qt.io/licensing/
**
-** This file is part of the QtCore module of the Qt Toolkit.
+** This file is part of the plugins of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
@@ -31,4 +31,21 @@
**
****************************************************************************/
-#include "../../blackberry-x86-qcc/qplatformdefs.h"
+#ifndef QHAIKUUTILS_H
+#define QHAIKUUTILS_H
+
+#include <QImage>
+
+#include <GraphicsDefs.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace QHaikuUtils
+{
+ color_space imageFormatToColorSpace(QImage::Format format);
+ QImage::Format colorSpaceToImageFormat(color_space colorSpace);
+}
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/haiku/qhaikuwindow.cpp b/src/plugins/platforms/haiku/qhaikuwindow.cpp
new file mode 100644
index 0000000000..5768e1cb40
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuwindow.cpp
@@ -0,0 +1,388 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qhaikuwindow.h"
+
+#include "private/qguiapplication_p.h"
+
+#include <QCoreApplication>
+#include <QThread>
+#include <QWindow>
+#include <qpa/qwindowsysteminterface.h>
+
+#include <Rect.h>
+#include <Window.h>
+
+QT_BEGIN_NAMESPACE
+
+enum {
+ DefaultWindowWidth = 160,
+ DefaultWindowHeight = 160
+};
+
+HaikuWindowProxy::HaikuWindowProxy(QWindow *window, const QRect &rect, QObject *parent)
+ : QObject(parent)
+ , BWindow(BRect(rect.x(), rect.y(), rect.right() - 1, rect.bottom() - 1),
+ window->title().toUtf8(), B_NO_BORDER_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, 0)
+ , m_qtCalledZoom(false)
+ , m_zoomInProgress(false)
+{
+}
+
+void HaikuWindowProxy::FrameMoved(BPoint pos)
+{
+ Q_EMIT moved(QPoint(pos.x, pos.y));
+}
+
+void HaikuWindowProxy::FrameResized(float width, float height)
+{
+ Q_EMIT resized(QSize(static_cast<int>(width), static_cast<int>(height)), m_zoomInProgress);
+
+ m_zoomInProgress = false;
+}
+
+void HaikuWindowProxy::WindowActivated(bool activated)
+{
+ Q_EMIT windowActivated(activated);
+}
+
+void HaikuWindowProxy::Minimize(bool minimize)
+{
+ BWindow::Minimize(minimize);
+
+ Q_EMIT minimized(minimize);
+}
+
+void HaikuWindowProxy::Zoom(BPoint pos, float width, float height)
+{
+ m_zoomInProgress = true;
+ BWindow::Zoom(pos, width, height);
+
+ // Only notify about Zoom invocations from the Haiku windowing system
+ if (!m_qtCalledZoom)
+ Q_EMIT zoomed();
+}
+
+bool HaikuWindowProxy::QuitRequested()
+{
+ Q_EMIT quitRequested();
+
+ // Return false to prevent Haiku windowing system to clean up
+ // the BWindow and BView instances. We will do that ourself when
+ // Qt invokes the dtor of QHaikuWindow
+ return false;
+}
+
+void HaikuWindowProxy::zoomByQt()
+{
+ m_qtCalledZoom = true;
+ BWindow::Zoom();
+ m_qtCalledZoom = false;
+}
+
+QHaikuWindow::QHaikuWindow(QWindow *window)
+ : QPlatformWindow(window)
+ , m_window(Q_NULLPTR)
+ , m_windowState(Qt::WindowNoState)
+{
+ const QRect rect = initialGeometry(window, window->geometry(), DefaultWindowWidth, DefaultWindowHeight);
+
+ HaikuWindowProxy *haikuWindow = new HaikuWindowProxy(window, rect, Q_NULLPTR);
+ connect(haikuWindow, SIGNAL(moved(QPoint)), SLOT(haikuWindowMoved(QPoint)));
+ connect(haikuWindow, SIGNAL(resized(QSize,bool)), SLOT(haikuWindowResized(QSize,bool)));
+ connect(haikuWindow, SIGNAL(windowActivated(bool)), SLOT(haikuWindowActivated(bool)));
+ connect(haikuWindow, SIGNAL(minimized(bool)), SLOT(haikuWindowMinimized(bool)));
+ connect(haikuWindow, SIGNAL(zoomed()), SLOT(haikuWindowZoomed()));
+ connect(haikuWindow, SIGNAL(quitRequested()), SLOT(haikuWindowQuitRequested()), Qt::BlockingQueuedConnection);
+
+ m_window = haikuWindow;
+
+ if (!m_window)
+ qFatal("QHaikuWindow: failed to create window");
+
+ setWindowFlags(window->flags());
+}
+
+QHaikuWindow::~QHaikuWindow()
+{
+ m_window->LockLooper();
+ m_window->Quit();
+
+ m_window = Q_NULLPTR;
+}
+
+void QHaikuWindow::setGeometry(const QRect &rect)
+{
+ QPlatformWindow::setGeometry(rect);
+
+ m_window->MoveTo(rect.x(), rect.y());
+ m_window->ResizeTo(rect.width(), rect.height());
+}
+
+QMargins QHaikuWindow::frameMargins() const
+{
+ const BRect decoratorFrame = m_window->DecoratorFrame();
+ const BRect frame = m_window->Frame();
+
+ return QMargins(frame.left - decoratorFrame.left,
+ frame.top - decoratorFrame.top,
+ decoratorFrame.right - frame.right,
+ decoratorFrame.bottom - frame.bottom);
+}
+
+void QHaikuWindow::setVisible(bool visible)
+{
+ if (visible) {
+ m_window->Show();
+ } else {
+ m_window->Hide();
+ }
+
+ window()->requestActivate();
+
+ QWindowSystemInterface::handleExposeEvent(window(), window()->geometry());
+}
+
+bool QHaikuWindow::isExposed() const
+{
+ return !m_window->IsHidden();
+}
+
+bool QHaikuWindow::isActive() const
+{
+ return m_window->IsActive();
+}
+
+WId QHaikuWindow::winId() const
+{
+ return (WId)static_cast<BWindow*>(m_window);
+}
+
+BWindow* QHaikuWindow::nativeHandle() const
+{
+ return m_window;
+}
+
+void QHaikuWindow::requestActivateWindow()
+{
+ m_window->Activate(true);
+}
+
+void QHaikuWindow::setWindowState(Qt::WindowState state)
+{
+ if (m_windowState == state)
+ return;
+
+ const Qt::WindowState oldState = m_windowState;
+
+ m_windowState = state;
+
+ if (m_windowState == Qt::WindowMaximized) {
+ m_window->zoomByQt();
+ } else if (m_windowState == Qt::WindowMinimized) {
+ m_window->Minimize(true);
+ } else if (m_windowState == Qt::WindowNoState) {
+ if (oldState == Qt::WindowMaximized)
+ m_window->zoomByQt(); // undo zoom
+
+ if (oldState == Qt::WindowMinimized)
+ m_window->Minimize(false); // undo minimize
+ }
+}
+
+void QHaikuWindow::setWindowFlags(Qt::WindowFlags flags)
+{
+ const Qt::WindowType type = static_cast<Qt::WindowType>(static_cast<int>(flags & Qt::WindowType_Mask));
+
+ const bool isPopup = (type == Qt::Popup);
+ const bool isSplashScreen = (type == Qt::SplashScreen);
+ const bool isDialog = ((type == Qt::Dialog) || (type == Qt::Sheet) || (type == Qt::MSWindowsFixedSizeDialogHint));
+ const bool isTool = ((type == Qt::Tool) || (type == Qt::Drawer));
+ const bool isToolTip = (type == Qt::ToolTip);
+
+ window_look wlook = B_TITLED_WINDOW_LOOK;
+ window_feel wfeel = B_NORMAL_WINDOW_FEEL;
+ uint32 wflag = (B_NO_WORKSPACE_ACTIVATION | B_NOT_ANCHORED_ON_ACTIVATE);
+
+ if (isTool) {
+ wlook = B_FLOATING_WINDOW_LOOK;
+ wflag |= B_WILL_ACCEPT_FIRST_CLICK;
+ }
+
+ if (isSplashScreen) {
+ wlook = B_NO_BORDER_WINDOW_LOOK;
+ }
+
+ if (isPopup) {
+ wlook = B_NO_BORDER_WINDOW_LOOK;
+ wflag |= (B_WILL_ACCEPT_FIRST_CLICK | B_AVOID_FRONT | B_AVOID_FOCUS);
+ flags |= Qt::WindowStaysOnTopHint;
+ }
+
+ if (isDialog) {
+ if (window()->modality() == Qt::WindowModal)
+ wfeel = B_MODAL_SUBSET_WINDOW_FEEL;
+ else if (window()->modality() == Qt::ApplicationModal)
+ wfeel = B_MODAL_APP_WINDOW_FEEL;
+ }
+
+ if (isToolTip) {
+ wlook = B_NO_BORDER_WINDOW_LOOK;
+ wflag |= (B_WILL_ACCEPT_FIRST_CLICK | B_AVOID_FOCUS);
+ flags |= Qt::WindowStaysOnTopHint;
+ }
+
+ if (flags & Qt::FramelessWindowHint)
+ wlook = B_NO_BORDER_WINDOW_LOOK;
+
+ if (flags & Qt::MSWindowsFixedSizeDialogHint)
+ wflag |= (B_NOT_RESIZABLE | B_NOT_ZOOMABLE);
+
+ if (flags & Qt::CustomizeWindowHint) {
+ if (!(flags & Qt::WindowMinimizeButtonHint))
+ wflag |= B_NOT_MINIMIZABLE;
+ if (!(flags & Qt::WindowMaximizeButtonHint))
+ wflag |= B_NOT_ZOOMABLE;
+ if (!(flags & Qt::WindowCloseButtonHint))
+ wflag |= B_NOT_CLOSABLE;
+ }
+
+ if (flags & Qt::WindowStaysOnTopHint)
+ wfeel = B_FLOATING_ALL_WINDOW_FEEL;
+
+ m_window->SetLook(wlook);
+ m_window->SetFeel(wfeel);
+ m_window->SetFlags(wflag);
+}
+
+void QHaikuWindow::setWindowTitle(const QString &title)
+{
+ m_window->SetTitle(title.toLocal8Bit().constData());
+}
+
+void QHaikuWindow::propagateSizeHints()
+{
+ m_window->SetSizeLimits(window()->minimumSize().width(),
+ window()->maximumSize().width(),
+ window()->minimumSize().height(),
+ window()->maximumSize().height());
+
+ m_window->SetZoomLimits(window()->maximumSize().width(),
+ window()->maximumSize().height());
+}
+
+void QHaikuWindow::haikuWindowMoved(const QPoint &pos)
+{
+ const QRect newGeometry(pos, geometry().size());
+
+ QPlatformWindow::setGeometry(newGeometry);
+ QWindowSystemInterface::setSynchronousWindowsSystemEvents(true);
+ QWindowSystemInterface::handleGeometryChange(window(), newGeometry);
+ QWindowSystemInterface::handleExposeEvent(window(), newGeometry);
+ QWindowSystemInterface::setSynchronousWindowsSystemEvents(false);
+}
+
+void QHaikuWindow::haikuWindowResized(const QSize &size, bool zoomInProgress)
+{
+ const QRect newGeometry(geometry().topLeft(), size);
+
+ QPlatformWindow::setGeometry(newGeometry);
+ QWindowSystemInterface::setSynchronousWindowsSystemEvents(true);
+ QWindowSystemInterface::handleGeometryChange(window(), newGeometry);
+ QWindowSystemInterface::handleExposeEvent(window(), newGeometry);
+ QWindowSystemInterface::setSynchronousWindowsSystemEvents(false);
+
+ if ((m_windowState == Qt::WindowMaximized) && !zoomInProgress) {
+ // the user has resized the window while maximized -> reset maximized flag
+ m_windowState = Qt::WindowNoState;
+
+ QWindowSystemInterface::handleWindowStateChanged(window(), m_windowState);
+ }
+}
+
+void QHaikuWindow::haikuWindowActivated(bool activated)
+{
+ QWindowSystemInterface::handleWindowActivated(activated ? window() : Q_NULLPTR);
+}
+
+void QHaikuWindow::haikuWindowMinimized(bool minimize)
+{
+ m_windowState = (minimize ? Qt::WindowMinimized : Qt::WindowNoState);
+
+ QWindowSystemInterface::handleWindowStateChanged(window(), m_windowState);
+}
+
+void QHaikuWindow::haikuWindowZoomed()
+{
+ m_windowState = (m_windowState == Qt::WindowMaximized ? Qt::WindowNoState : Qt::WindowMaximized);
+
+ QWindowSystemInterface::handleWindowStateChanged(window(), m_windowState);
+}
+
+void QHaikuWindow::haikuWindowQuitRequested()
+{
+ QWindowSystemInterface::handleCloseEvent(window());
+}
+
+void QHaikuWindow::haikuMouseEvent(const QPoint &localPosition, const QPoint &globalPosition, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::MouseEventSource source)
+{
+ QWindowSystemInterface::handleMouseEvent(window(), localPosition, globalPosition,
+ buttons, modifiers, source);
+}
+
+void QHaikuWindow::haikuWheelEvent(const QPoint &localPosition, const QPoint &globalPosition, int delta, Qt::Orientation orientation, Qt::KeyboardModifiers modifiers)
+{
+ QWindowSystemInterface::handleWheelEvent(window(), localPosition, globalPosition, delta, orientation, modifiers);
+}
+
+void QHaikuWindow::haikuKeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, const QString &text)
+{
+ QWindowSystemInterface::handleKeyEvent(window(), type, key, modifiers, text);
+}
+
+void QHaikuWindow::haikuEnteredView()
+{
+ QWindowSystemInterface::handleEnterEvent(window());
+}
+
+void QHaikuWindow::haikuExitedView()
+{
+ QWindowSystemInterface::handleLeaveEvent(window());
+}
+
+void QHaikuWindow::haikuDrawRequest(const QRect &rect)
+{
+ QWindowSystemInterface::handleExposeEvent(window(), QRegion(rect));
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/haiku/qhaikuwindow.h b/src/plugins/platforms/haiku/qhaikuwindow.h
new file mode 100644
index 0000000000..a8035e7814
--- /dev/null
+++ b/src/plugins/platforms/haiku/qhaikuwindow.h
@@ -0,0 +1,122 @@
+/***************************************************************************
+**
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QHAIKUWINDOW_H
+#define QHAIKUWINDOW_H
+
+#include <qpa/qplatformwindow.h>
+
+#include <Window.h>
+
+QT_BEGIN_NAMESPACE
+
+class HaikuWindowProxy : public QObject, public BWindow
+{
+ Q_OBJECT
+
+public:
+ explicit HaikuWindowProxy(QWindow *window, const QRect &rect, QObject *parent = Q_NULLPTR);
+
+ void FrameMoved(BPoint pos) Q_DECL_OVERRIDE;
+ void FrameResized(float width, float height) Q_DECL_OVERRIDE;
+ void WindowActivated(bool activated) Q_DECL_OVERRIDE;
+ void Minimize(bool minimize) Q_DECL_OVERRIDE;
+ void Zoom(BPoint pos, float width, float height) Q_DECL_OVERRIDE;
+ bool QuitRequested() Q_DECL_OVERRIDE;
+
+ void zoomByQt();
+
+Q_SIGNALS:
+ void moved(const QPoint &pos);
+ void resized(const QSize &size, bool zoomInProgress);
+ void windowActivated(bool activated);
+ void minimized(bool minimize);
+ void zoomed();
+ void quitRequested();
+
+private:
+ bool m_qtCalledZoom;
+ bool m_zoomInProgress;
+};
+
+class QHaikuWindow : public QObject, public QPlatformWindow
+{
+ Q_OBJECT
+
+public:
+ explicit QHaikuWindow(QWindow *window);
+ virtual ~QHaikuWindow();
+
+ void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
+ QMargins frameMargins() const Q_DECL_OVERRIDE;
+ void setVisible(bool visible) Q_DECL_OVERRIDE;
+
+ bool isExposed() const Q_DECL_OVERRIDE;
+ bool isActive() const Q_DECL_OVERRIDE;
+
+ WId winId() const Q_DECL_OVERRIDE;
+ BWindow* nativeHandle() const;
+
+ void requestActivateWindow() Q_DECL_OVERRIDE;
+ void setWindowState(Qt::WindowState state) Q_DECL_OVERRIDE;
+ void setWindowFlags(Qt::WindowFlags flags) Q_DECL_OVERRIDE;
+
+ void setWindowTitle(const QString &title) Q_DECL_OVERRIDE;
+
+ void propagateSizeHints() Q_DECL_OVERRIDE;
+
+protected:
+ HaikuWindowProxy *m_window;
+
+private Q_SLOTS:
+ void haikuWindowMoved(const QPoint &pos);
+ void haikuWindowResized(const QSize &size, bool zoomInProgress);
+ void haikuWindowActivated(bool activated);
+ void haikuWindowMinimized(bool minimize);
+ void haikuWindowZoomed();
+ void haikuWindowQuitRequested();
+
+ void haikuMouseEvent(const QPoint &localPosition, const QPoint &globalPosition, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::MouseEventSource source);
+ void haikuWheelEvent(const QPoint &localPosition, const QPoint &globalPosition, int delta, Qt::Orientation orientation, Qt::KeyboardModifiers modifiers);
+ void haikuKeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, const QString &text);
+ void haikuEnteredView();
+ void haikuExitedView();
+ void haikuDrawRequest(const QRect &rect);
+
+private:
+ Qt::WindowState m_windowState;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/ios/plugin.mm b/src/plugins/platforms/ios/plugin.mm
index 1090482f20..41fe712f60 100644
--- a/src/plugins/platforms/ios/plugin.mm
+++ b/src/plugins/platforms/ios/plugin.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosapplicationdelegate.mm b/src/plugins/platforms/ios/qiosapplicationdelegate.mm
index 32392671ee..74092d02ce 100644
--- a/src/plugins/platforms/ios/qiosapplicationdelegate.mm
+++ b/src/plugins/platforms/ios/qiosapplicationdelegate.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosapplicationstate.mm b/src/plugins/platforms/ios/qiosapplicationstate.mm
index bd81b44b6b..92799f80c1 100644
--- a/src/plugins/platforms/ios/qiosapplicationstate.mm
+++ b/src/plugins/platforms/ios/qiosapplicationstate.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosbackingstore.mm b/src/plugins/platforms/ios/qiosbackingstore.mm
index f9623c5660..acec95b0d3 100644
--- a/src/plugins/platforms/ios/qiosbackingstore.mm
+++ b/src/plugins/platforms/ios/qiosbackingstore.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosclipboard.mm b/src/plugins/platforms/ios/qiosclipboard.mm
index 0666c4efe7..192ee67689 100644
--- a/src/plugins/platforms/ios/qiosclipboard.mm
+++ b/src/plugins/platforms/ios/qiosclipboard.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qioscontext.mm b/src/plugins/platforms/ios/qioscontext.mm
index 9c0f4d9306..c7541fc51b 100644
--- a/src/plugins/platforms/ios/qioscontext.mm
+++ b/src/plugins/platforms/ios/qioscontext.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qioseventdispatcher.mm b/src/plugins/platforms/ios/qioseventdispatcher.mm
index 87f658608a..f4567f36f4 100644
--- a/src/plugins/platforms/ios/qioseventdispatcher.mm
+++ b/src/plugins/platforms/ios/qioseventdispatcher.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosglobal.mm b/src/plugins/platforms/ios/qiosglobal.mm
index 8360df0d7f..ef24abbfd9 100644
--- a/src/plugins/platforms/ios/qiosglobal.mm
+++ b/src/plugins/platforms/ios/qiosglobal.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosinputcontext.mm b/src/plugins/platforms/ios/qiosinputcontext.mm
index 0a62dc9b13..22847b0612 100644
--- a/src/plugins/platforms/ios/qiosinputcontext.mm
+++ b/src/plugins/platforms/ios/qiosinputcontext.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm
index 0dea043409..33328e0490 100644
--- a/src/plugins/platforms/ios/qiosintegration.mm
+++ b/src/plugins/platforms/ios/qiosintegration.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosmenu.h b/src/plugins/platforms/ios/qiosmenu.h
index f18af65fd5..f65a90fb40 100644
--- a/src/plugins/platforms/ios/qiosmenu.h
+++ b/src/plugins/platforms/ios/qiosmenu.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosmenu.mm b/src/plugins/platforms/ios/qiosmenu.mm
index bdab23f59a..40f0082b9d 100644
--- a/src/plugins/platforms/ios/qiosmenu.mm
+++ b/src/plugins/platforms/ios/qiosmenu.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosplatformaccessibility.mm b/src/plugins/platforms/ios/qiosplatformaccessibility.mm
index 5124d8ebd8..bfe91df7bd 100644
--- a/src/plugins/platforms/ios/qiosplatformaccessibility.mm
+++ b/src/plugins/platforms/ios/qiosplatformaccessibility.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosscreen.mm b/src/plugins/platforms/ios/qiosscreen.mm
index de1d8a29c7..324133074b 100644
--- a/src/plugins/platforms/ios/qiosscreen.mm
+++ b/src/plugins/platforms/ios/qiosscreen.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosservices.mm b/src/plugins/platforms/ios/qiosservices.mm
index de59b20a92..cd5ff425cd 100644
--- a/src/plugins/platforms/ios/qiosservices.mm
+++ b/src/plugins/platforms/ios/qiosservices.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiostextresponder.h b/src/plugins/platforms/ios/qiostextresponder.h
index f87559ccec..4cb8a9c815 100644
--- a/src/plugins/platforms/ios/qiostextresponder.h
+++ b/src/plugins/platforms/ios/qiostextresponder.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiostextresponder.mm b/src/plugins/platforms/ios/qiostextresponder.mm
index bafab3db67..f0cb021da0 100644
--- a/src/plugins/platforms/ios/qiostextresponder.mm
+++ b/src/plugins/platforms/ios/qiostextresponder.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiostheme.mm b/src/plugins/platforms/ios/qiostheme.mm
index 29cd897b71..edeabf66dc 100644
--- a/src/plugins/platforms/ios/qiostheme.mm
+++ b/src/plugins/platforms/ios/qiostheme.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qiosviewcontroller.mm b/src/plugins/platforms/ios/qiosviewcontroller.mm
index db55562a8a..02c3a2d28d 100644
--- a/src/plugins/platforms/ios/qiosviewcontroller.mm
+++ b/src/plugins/platforms/ios/qiosviewcontroller.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/qioswindow.mm b/src/plugins/platforms/ios/qioswindow.mm
index be8efdc79e..fd04ecf474 100644
--- a/src/plugins/platforms/ios/qioswindow.mm
+++ b/src/plugins/platforms/ios/qioswindow.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/quiaccessibilityelement.mm b/src/plugins/platforms/ios/quiaccessibilityelement.mm
index c983655c51..2cecfc1126 100644
--- a/src/plugins/platforms/ios/quiaccessibilityelement.mm
+++ b/src/plugins/platforms/ios/quiaccessibilityelement.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm
index 22d406cbdc..9470d1844e 100644
--- a/src/plugins/platforms/ios/quiview.mm
+++ b/src/plugins/platforms/ios/quiview.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/ios/quiview_accessibility.mm b/src/plugins/platforms/ios/quiview_accessibility.mm
index 739aaea769..496ee7605e 100644
--- a/src/plugins/platforms/ios/quiview_accessibility.mm
+++ b/src/plugins/platforms/ios/quiview_accessibility.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/platforms.pro b/src/plugins/platforms/platforms.pro
index 4e1b7e3026..22d443733e 100644
--- a/src/plugins/platforms/platforms.pro
+++ b/src/plugins/platforms/platforms.pro
@@ -36,3 +36,7 @@ contains(QT_CONFIG, directfb) {
}
contains(QT_CONFIG, linuxfb): SUBDIRS += linuxfb
+
+haiku {
+ SUBDIRS += haiku
+}
diff --git a/src/plugins/platforms/qnx/qnx.pro b/src/plugins/platforms/qnx/qnx.pro
index b5c6b48931..95a8e44cb8 100644
--- a/src/plugins/platforms/qnx/qnx.pro
+++ b/src/plugins/platforms/qnx/qnx.pro
@@ -105,17 +105,13 @@ CONFIG(blackberry) {
LIBS += -lbps
}
-CONFIG(blackberry-playbook) {
- SOURCES += qqnxfiledialoghelper_playbook.cpp
-} else {
- CONFIG(blackberry) {
- SOURCES += qqnxfiledialoghelper_bb10.cpp \
- qqnxfilepicker.cpp \
- qqnxnavigatorcover.cpp
-
- HEADERS += qqnxfilepicker.h \
- qqnxnavigatorcover.h
- }
+CONFIG(blackberry) {
+ SOURCES += qqnxfiledialoghelper_bb10.cpp \
+ qqnxfilepicker.cpp \
+ qqnxnavigatorcover.cpp
+
+ HEADERS += qqnxfilepicker.h \
+ qqnxnavigatorcover.h
}
CONFIG(qqnx_pps) {
diff --git a/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp b/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp
index f4258017e3..3950681c5e 100644
--- a/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp
+++ b/src/plugins/platforms/qnx/qqnxbpseventfilter.cpp
@@ -119,24 +119,6 @@ void QQnxBpsEventFilter::unregisterForScreenEvents(QQnxScreen *screen)
qWarning("QQNX: failed to unregister for screen events on screen %p", screen->nativeContext());
}
-#if defined(Q_OS_BLACKBERRY_TABLET)
-void QQnxBpsEventFilter::registerForDialogEvents(QQnxFileDialogHelper *dialog)
-{
- if (dialog_request_events(0) != BPS_SUCCESS)
- qWarning("QQNX: failed to register for dialog events");
- dialog_instance_t nativeDialog = dialog->nativeDialog();
- if (!m_dialogMapper.contains(nativeDialog))
- m_dialogMapper.insert(nativeDialog, dialog);
-}
-
-void QQnxBpsEventFilter::unregisterForDialogEvents(QQnxFileDialogHelper *dialog)
-{
- int count = m_dialogMapper.remove(dialog->nativeDialog());
- if (count == 0)
- qWarning("QQNX: attempting to unregister dialog that was not registered");
-}
-#endif // Q_OS_BLACKBERRY_TABLET
-
bool QQnxBpsEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *result)
{
Q_UNUSED(eventType);
@@ -155,15 +137,6 @@ bool QQnxBpsEventFilter::nativeEventFilter(const QByteArray &eventType, void *me
return m_screenEventHandler->handleEvent(screenEvent);
}
-#if defined(Q_OS_BLACKBERRY_TABLET)
- if (eventDomain == dialog_get_domain()) {
- dialog_instance_t nativeDialog = dialog_event_get_dialog_instance(event);
- QQnxFileDialogHelper *dialog = m_dialogMapper.value(nativeDialog, 0);
- if (dialog)
- return dialog->handleEvent(event);
- }
-#endif
-
if (eventDomain == navigator_get_domain())
return handleNavigatorEvent(event);
@@ -218,14 +191,8 @@ bool QQnxBpsEventFilter::handleNavigatorEvent(bps_event_t *event)
break;
case NAVIGATOR_WINDOW_THUMBNAIL:
m_navigatorEventHandler->handleWindowGroupStateChanged(id, Qt::WindowMinimized);
-#if defined(Q_OS_BLACKBERRY_TABLET)
- m_navigatorEventHandler->handleWindowGroupActivated(id);
-#endif
break;
case NAVIGATOR_WINDOW_INVISIBLE:
-#if defined(Q_OS_BLACKBERRY_TABLET)
- m_navigatorEventHandler->handleWindowGroupDeactivated(id);
-#endif
break;
}
diff --git a/src/plugins/platforms/qnx/qqnxbpseventfilter.h b/src/plugins/platforms/qnx/qqnxbpseventfilter.h
index 4fe28e909f..f1d67848e8 100644
--- a/src/plugins/platforms/qnx/qqnxbpseventfilter.h
+++ b/src/plugins/platforms/qnx/qqnxbpseventfilter.h
@@ -65,11 +65,6 @@ public:
void registerForScreenEvents(QQnxScreen *screen);
void unregisterForScreenEvents(QQnxScreen *screen);
-#ifdef Q_OS_BLACKBERRY_TABLET
- void registerForDialogEvents(QQnxFileDialogHelper *dialog);
- void unregisterForDialogEvents(QQnxFileDialogHelper *dialog);
-#endif
-
private:
bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;
diff --git a/src/plugins/platforms/qnx/qqnxfiledialoghelper.h b/src/plugins/platforms/qnx/qqnxfiledialoghelper.h
index 4c8a4fbd50..76cceafcfe 100644
--- a/src/plugins/platforms/qnx/qqnxfiledialoghelper.h
+++ b/src/plugins/platforms/qnx/qqnxfiledialoghelper.h
@@ -41,13 +41,7 @@ QT_BEGIN_NAMESPACE
class QQnxIntegration;
-#if defined(Q_OS_BLACKBERRY_TABLET)
-#include <bps/dialog.h>
-#define NativeDialogPtr dialog_instance_t
-#else
class QQnxFilePicker;
-#define NativeDialogPtr QQnxFilePicker *
-#endif
class QQnxFileDialogHelper : public QPlatformFileDialogHelper
{
@@ -56,10 +50,6 @@ public:
explicit QQnxFileDialogHelper(const QQnxIntegration *);
~QQnxFileDialogHelper();
-#if defined(Q_OS_BLACKBERRY_TABLET)
- bool handleEvent(bps_event_t *event);
-#endif
-
void exec();
bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent);
@@ -74,29 +64,22 @@ public:
void selectNameFilter(const QString &filter);
QString selectedNameFilter() const;
- NativeDialogPtr nativeDialog() const { return m_dialog; }
+ QQnxFilePicker *nativeDialog() const { return m_dialog; }
Q_SIGNALS:
void dialogClosed();
private Q_SLOTS:
-#if !defined(Q_OS_BLACKBERRY_TABLET)
void emitSignals();
-#endif
private:
void setNameFilter(const QString &filter);
void setNameFilters(const QStringList &filters);
const QQnxIntegration *m_integration;
- NativeDialogPtr m_dialog;
+ QQnxFilePicker *m_dialog;
QFileDialogOptions::AcceptMode m_acceptMode;
QString m_selectedFilter;
-
-#if defined(Q_OS_BLACKBERRY_TABLET)
- QPlatformDialogHelper::DialogCode m_result;
- QList<QUrl> m_paths;
-#endif
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qnx/qqnxfiledialoghelper_playbook.cpp b/src/plugins/platforms/qnx/qqnxfiledialoghelper_playbook.cpp
deleted file mode 100644
index 699ca97527..0000000000
--- a/src/plugins/platforms/qnx/qqnxfiledialoghelper_playbook.cpp
+++ /dev/null
@@ -1,312 +0,0 @@
-/***************************************************************************
-**
-** Copyright (C) 2012 Research In Motion
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL21$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 or version 3 as published by the Free
-** Software Foundation and appearing in the file LICENSE.LGPLv21 and
-** LICENSE.LGPLv3 included in the packaging of this file. Please review the
-** following information to ensure the GNU Lesser General Public License
-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** As a special exception, The Qt Company gives you certain additional
-** rights. These rights are described in The Qt Company LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qqnxfiledialoghelper.h"
-
-#include "qqnxbpseventfilter.h"
-#include "qqnxscreen.h"
-#include "qqnxintegration.h"
-
-#include <QDebug>
-#include <QEventLoop>
-#include <QScreen>
-#include <QTimer>
-#include <QWindow>
-
-#if defined(QQNXFILEDIALOGHELPER_DEBUG)
-#define qFileDialogHelperDebug qDebug
-#else
-#define qFileDialogHelperDebug QT_NO_QDEBUG_MACRO
-#endif
-
-QT_BEGIN_NAMESPACE
-
-QQnxFileDialogHelper::QQnxFileDialogHelper(const QQnxIntegration *integration)
- : QPlatformFileDialogHelper(),
- m_integration(integration),
- m_dialog(0),
- m_acceptMode(QFileDialogOptions::AcceptOpen),
- m_selectedFilter(),
- m_result(QPlatformDialogHelper::Rejected),
- m_paths()
-{
-}
-
-QQnxFileDialogHelper::~QQnxFileDialogHelper()
-{
- if (m_dialog)
- dialog_destroy(m_dialog);
-}
-
-bool QQnxFileDialogHelper::handleEvent(bps_event_t *event)
-{
- qFileDialogHelperDebug() << Q_FUNC_INFO;
-
- // Check dialog event response type (OK vs CANCEL)
- // CANCEL => index = 0
- // OK => index = 1
- int index = dialog_event_get_selected_index(event);
- qFileDialogHelperDebug() << "Index =" << index;
- if (index == 1) {
- m_result = QPlatformDialogHelper::Accepted;
-
- if (m_acceptMode == QFileDialogOptions::AcceptOpen) {
- // File open dialog
-
- // ###TODO Check that this actually gets multiple paths and cleans up properly
- char **filePaths = 0;
- int pathCount = 0;
- int result = dialog_event_get_filebrowse_filepaths(event, &filePaths, &pathCount);
- if (result != BPS_SUCCESS) {
- qWarning() << "Could not get paths from native file dialog";
- return false;
- }
-
- for (int i = 0; i < pathCount; ++i) {
- QString path = QFile::decodeName(filePaths[i]);
- m_paths.append(QUrl::fromLocalFile(path));
- qFileDialogHelperDebug() << "path =" << path;
- }
-
- bps_free(filePaths);
- } else {
- // File save dialog
- const char *filePath = dialog_event_get_filesave_filepath(event);
- QString path = QFile::decodeName(filePath);
- qFileDialogHelperDebug() << "path =" << path;
- m_paths.append(QUrl::fromLocalFile(path));
- }
- } else { // Cancel
- m_result = QPlatformDialogHelper::Rejected;
- }
-
- Q_EMIT dialogClosed();
-
- return true;
-}
-
-void QQnxFileDialogHelper::exec()
-{
- qFileDialogHelperDebug() << Q_FUNC_INFO;
-
- // Clear any previous results
- m_paths.clear();
-
- QEventLoop loop;
- connect(this, SIGNAL(dialogClosed()), &loop, SLOT(quit()));
- loop.exec();
-
- if (m_result == QPlatformDialogHelper::Accepted)
- Q_EMIT accept();
- else
- Q_EMIT reject();
-}
-
-bool QQnxFileDialogHelper::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent)
-{
- Q_UNUSED(flags);
- qFileDialogHelperDebug() << Q_FUNC_INFO;
-
- QQnxBpsEventFilter *eventFilter = m_integration->bpsEventFilter();
- // We *really* need the bps event filter ;)
- if (!eventFilter)
- return false;
-
- // Native dialogs can only handle application modal use cases so far
- if (modality != Qt::ApplicationModal)
- return false;
-
- // Tear down any existing dialog and start again as dialog mode may have changed
- if (m_dialog) {
- dialog_destroy(m_dialog);
- m_dialog = 0;
- }
-
- // Create dialog
- const QSharedPointer<QFileDialogOptions> &opts = options();
- if (opts->acceptMode() == QFileDialogOptions::AcceptOpen) {
- if (dialog_create_filebrowse(&m_dialog) != BPS_SUCCESS) {
- qWarning("dialog_create_filebrowse failed");
- return false;
- }
-
- // Select one or many files?
- bool multiSelect = (opts->fileMode() == QFileDialogOptions::ExistingFiles);
- dialog_set_filebrowse_multiselect(m_dialog, multiSelect);
-
- // Set the actual list of extensions
- if (!opts->nameFilters().isEmpty()) {
- qFileDialogHelperDebug() << "nameFilters =" << opts->nameFilters();
- setNameFilter(opts->nameFilters().first());
- } else {
- QString defaultNameFilter = QStringLiteral("*.*");
- setNameFilter(defaultNameFilter);
- }
- } else {
- if (dialog_create_filesave(&m_dialog) != BPS_SUCCESS) {
- qWarning("dialog_create_filesave failed");
- return false;
- }
-
- // Maybe pre-select a filename
- if (!opts->initiallySelectedFiles().isEmpty()) {
- QString fileName = opts->initiallySelectedFiles().first().toLocalFile();
- dialog_set_filesave_filename(m_dialog, QFile::encodeName(fileName).constData());
- }
-
- // Add OK and Cancel buttons. We add the buttons in the order "CANCEL" followed by "OK
- // such that they have indices matching the buttons on the file open dialog which
- // is automatically populated with buttons.
- if (dialog_add_button(m_dialog, tr("CANCEL").toLocal8Bit().constData(), true, 0, true) != BPS_SUCCESS) {
- qWarning("dialog_add_button failed");
- return false;
- }
-
- if (dialog_add_button(m_dialog, tr("OK").toLocal8Bit().constData(), true, 0, true) != BPS_SUCCESS) {
- qWarning("dialog_add_button failed");
- return false;
- }
- }
-
- // Cache the accept mode so we know which functions to use to get the results back
- m_acceptMode = opts->acceptMode();
-
- // Set the libscreen window group and common properties
-
- QQnxScreen *nativeScreen = parent ? static_cast<QQnxScreen *>(parent->screen()->handle()) :
- m_integration->primaryDisplay();
- Q_ASSERT(nativeScreen);
- dialog_set_group_id(m_dialog, nativeScreen->windowGroupName());
- dialog_set_title_text(m_dialog, opts->windowTitle().toLocal8Bit().constData());
-
- // Register ourselves for dialog domain events from bps
- eventFilter->registerForDialogEvents(this);
-
- // Show the dialog
- dialog_show(m_dialog);
-
- return true;
-}
-
-void QQnxFileDialogHelper::hide()
-{
- qFileDialogHelperDebug() << Q_FUNC_INFO;
- if (!m_dialog)
- return;
- dialog_cancel(m_dialog);
-}
-
-bool QQnxFileDialogHelper::defaultNameFilterDisables() const
-{
- qFileDialogHelperDebug() << Q_FUNC_INFO;
- return false;
-}
-
-void QQnxFileDialogHelper::setDirectory(const QUrl &directory)
-{
- qFileDialogHelperDebug() << Q_FUNC_INFO << "directory =" << directory;
- // No native API for setting the directory(!). The best we can do is to
- // set it as the file name but even then only with a file save dialog.
- if (m_dialog && m_acceptMode == QFileDialogOptions::AcceptSave)
- dialog_set_filesave_filename(m_dialog, QFile::encodeName(directory.toLocalFile()).constData());
-}
-
-QUrl QQnxFileDialogHelper::directory() const
-{
- qFileDialogHelperDebug() << Q_FUNC_INFO;
- return m_paths.first();
-}
-
-void QQnxFileDialogHelper::selectFile(const QUrl &fileName)
-{
- qFileDialogHelperDebug() << Q_FUNC_INFO << "filename =" << fileName;
- if (m_dialog && m_acceptMode == QFileDialogOptions::AcceptSave)
- dialog_set_filesave_filename(m_dialog, QFile::encodeName(fileName.toLocalFile()).constData());
-}
-
-QList<QUrl> QQnxFileDialogHelper::selectedFiles() const
-{
- qFileDialogHelperDebug() << Q_FUNC_INFO;
- return m_paths;
-}
-
-void QQnxFileDialogHelper::setFilter()
-{
- // No native api to support setting a filter from QDir::Filters
- qFileDialogHelperDebug() << Q_FUNC_INFO;
-}
-
-void QQnxFileDialogHelper::selectNameFilter(const QString &filter)
-{
- qFileDialogHelperDebug() << Q_FUNC_INFO << "filter =" << filter;
- setNameFilter(filter);
-}
-
-QString QQnxFileDialogHelper::selectedNameFilter() const
-{
- // For now there is no way for the user to change the selected filter
- // so this just reflects what the developer has set programmatically.
- qFileDialogHelperDebug() << Q_FUNC_INFO;
- return m_selectedFilter;
-}
-
-void QQnxFileDialogHelper::setNameFilter(const QString &filter)
-{
- qFileDialogHelperDebug() << Q_FUNC_INFO << "filter =" << filter;
- setNameFilters(QPlatformFileDialogHelper::cleanFilterList(filter));
-}
-
-void QQnxFileDialogHelper::setNameFilters(const QStringList &filters)
-{
- qFileDialogHelperDebug() << Q_FUNC_INFO << "filters =" << filters;
-
- Q_ASSERT(!filters.isEmpty());
-
- char **globs = new char*[filters.size()];
- for (int i = 0; i < filters.size(); ++i) {
- QByteArray glob = filters.at(i).toLocal8Bit();
- globs[i] = new char[glob.length()];
- strcpy(globs[i], glob.constData());
- }
-
- // Set the filters
- dialog_set_filebrowse_filter(m_dialog, const_cast<const char**>(globs), filters.size());
- m_selectedFilter = filters.first();
-
- // Cleanup
- for (int i = 0; i < filters.size(); ++i)
- delete[] globs[i];
- delete[] globs;
-}
-
-QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qnx/qqnxfilepicker.cpp b/src/plugins/platforms/qnx/qqnxfilepicker.cpp
index cce7c44823..96ca531899 100644
--- a/src/plugins/platforms/qnx/qqnxfilepicker.cpp
+++ b/src/plugins/platforms/qnx/qqnxfilepicker.cpp
@@ -127,13 +127,7 @@ void QQnxFilePicker::open()
map[QStringLiteral("Filter")] = m_filters.join(QLatin1Char(';'));
QByteArray ppsData;
-#if defined(Q_OS_BLACKBERRY_TABLET)
- QJsonDocument document;
- document.setObject(QJsonObject::fromVariantMap(map));
- ppsData = document.toJson(QJsonDocument::Compact);
-#else
ppsData = QPpsObject::encode(map);
-#endif
errorCode = navigator_invoke_invocation_set_data(m_invocationHandle, ppsData.constData(), ppsData.size());
if (errorCode != BPS_SUCCESS) {
diff --git a/src/plugins/platforms/qnx/qqnxscreen.cpp b/src/plugins/platforms/qnx/qqnxscreen.cpp
index 7b7de01c82..85c7a91dec 100644
--- a/src/plugins/platforms/qnx/qqnxscreen.cpp
+++ b/src/plugins/platforms/qnx/qqnxscreen.cpp
@@ -585,7 +585,7 @@ void QQnxScreen::addWindow(QQnxWindow *window)
m_childWindows.push_back(window);
updateHierarchy();
} else {
-#if defined(Q_OS_BLACKBERRY) && !defined(Q_OS_BLACKBERRY_TABLET)
+#if defined(Q_OS_BLACKBERRY)
m_coverWindow = window;
#endif
}
diff --git a/src/plugins/platforms/qnx/qqnxvirtualkeyboardbps.cpp b/src/plugins/platforms/qnx/qqnxvirtualkeyboardbps.cpp
index 68be0c98cf..3d749b486d 100644
--- a/src/plugins/platforms/qnx/qqnxvirtualkeyboardbps.cpp
+++ b/src/plugins/platforms/qnx/qqnxvirtualkeyboardbps.cpp
@@ -38,7 +38,7 @@
#include <bps/event.h>
#include <bps/locale.h>
#include <bps/virtualkeyboard.h>
-#if defined(Q_OS_BLACKBERRY) && !defined(Q_OS_BLACKBERRY_TABLET)
+#if defined(Q_OS_BLACKBERRY)
#include <bbndk.h>
#endif
@@ -118,21 +118,17 @@ virtualkeyboard_layout_t QQnxVirtualKeyboardBps::keyboardLayout() const
return VIRTUALKEYBOARD_LAYOUT_WEB;
case NumPunc:
return VIRTUALKEYBOARD_LAYOUT_NUM_PUNC;
-#ifndef Q_OS_BLACKBERRY_TABLET
case Number:
return VIRTUALKEYBOARD_LAYOUT_NUMBER;
-#endif
case Symbol:
return VIRTUALKEYBOARD_LAYOUT_SYMBOL;
case Phone:
return VIRTUALKEYBOARD_LAYOUT_PHONE;
case Pin:
return VIRTUALKEYBOARD_LAYOUT_PIN;
-#ifndef Q_OS_BLACKBERRY_TABLET
case Password:
return VIRTUALKEYBOARD_LAYOUT_PASSWORD;
-#endif
-#if defined(Q_OS_BLACKBERRY) && !defined(Q_OS_BLACKBERRY_TABLET)
+#if defined(Q_OS_BLACKBERRY)
#if BBNDK_VERSION_AT_LEAST(10, 2, 1)
case Alphanumeric:
return VIRTUALKEYBOARD_LAYOUT_ALPHANUMERIC;
diff --git a/src/plugins/platforms/qnx/qqnxwindow.cpp b/src/plugins/platforms/qnx/qqnxwindow.cpp
index 19e6991a68..3f92bcbc01 100644
--- a/src/plugins/platforms/qnx/qqnxwindow.cpp
+++ b/src/plugins/platforms/qnx/qqnxwindow.cpp
@@ -48,9 +48,7 @@
#include <QtCore/QDebug>
#if defined(Q_OS_BLACKBERRY)
-#if !defined(Q_OS_BLACKBERRY_TABLET)
#include "qqnxnavigatorcover.h"
-#endif
#include <sys/pps.h>
#include <bps/navigator.h>
#endif
@@ -635,7 +633,7 @@ QQnxWindow *QQnxWindow::findWindow(screen_window_t windowHandle)
void QQnxWindow::minimize()
{
-#if defined(Q_OS_BLACKBERRY) && !defined(Q_OS_BLACKBERRY_TABLET)
+#if defined(Q_OS_BLACKBERRY)
qWindowDebug() << Q_FUNC_INFO;
pps_encoder_t encoder;
@@ -689,7 +687,7 @@ void QQnxWindow::initWindow()
setScreen(platformScreen);
if (window()->type() == Qt::CoverWindow) {
-#if defined(Q_OS_BLACKBERRY) && !defined(Q_OS_BLACKBERRY_TABLET)
+#if defined(Q_OS_BLACKBERRY)
if (platformScreen->rootWindow()) {
screen_set_window_property_pv(m_screen->rootWindow()->nativeHandle(),
SCREEN_PROPERTY_ALTERNATE_WINDOW, (void**)&m_window);
diff --git a/src/plugins/platforms/windows/qwindowsscaling.h b/src/plugins/platforms/windows/qwindowsscaling.h
index 02489f0a13..39e554bbe2 100644
--- a/src/plugins/platforms/windows/qwindowsscaling.h
+++ b/src/plugins/platforms/windows/qwindowsscaling.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/winrt/qwinrtfiledialoghelper.cpp b/src/plugins/platforms/winrt/qwinrtfiledialoghelper.cpp
index a08054d032..6cd99c38ef 100644
--- a/src/plugins/platforms/winrt/qwinrtfiledialoghelper.cpp
+++ b/src/plugins/platforms/winrt/qwinrtfiledialoghelper.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/winrt/qwinrtfiledialoghelper.h b/src/plugins/platforms/winrt/qwinrtfiledialoghelper.h
index e1315d646c..13abf6e2b8 100644
--- a/src/plugins/platforms/winrt/qwinrtfiledialoghelper.h
+++ b/src/plugins/platforms/winrt/qwinrtfiledialoghelper.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/winrt/qwinrtfileengine.cpp b/src/plugins/platforms/winrt/qwinrtfileengine.cpp
index 664002a085..f4e307eb07 100644
--- a/src/plugins/platforms/winrt/qwinrtfileengine.cpp
+++ b/src/plugins/platforms/winrt/qwinrtfileengine.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/winrt/qwinrtfileengine.h b/src/plugins/platforms/winrt/qwinrtfileengine.h
index ef698dc4f2..30357759fb 100644
--- a/src/plugins/platforms/winrt/qwinrtfileengine.h
+++ b/src/plugins/platforms/winrt/qwinrtfileengine.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.cpp
index a454a8a048..75237ad268 100644
--- a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h
index de2bf6113f..c71c668f31 100644
--- a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp
index efa5c87ad5..10411e72e2 100644
--- a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h
index 272e01988a..466488c8de 100644
--- a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationplugin.h b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationplugin.h
index fe7daec068..f9a25cc12a 100644
--- a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationplugin.h
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationplugin.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp b/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp
index 19b3fc0bc3..8416be66fb 100644
--- a/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.h b/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.h
index bc18eaec1d..b562109e12 100644
--- a/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.h
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h
index 8790451789..9b903d8212 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h
index 1d651a428d..ec59cbc7c9 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp
index 16d32b3235..a456317801 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h
index 1f7fd4fc94..3f7134c1a1 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglmain.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglmain.cpp
index e34057a22c..72b471be67 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglmain.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglmain.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp
index 1187733b23..891f187238 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h
index 2e9be95300..92a48fc144 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
index 9e5b67438c..a26280b399 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h
index cce39eaf7b..dfb32332bc 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp
index cb56f67282..ce72cb64d0 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h
index 8aa3dbb983..4366d07b42 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxmain.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxmain.cpp
index d814892660..9d2fb54e5a 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxmain.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxmain.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp
index d416b5ee1a..045185e40c 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h
index 88a3fa26ce..d671bc1995 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd and/or its subsidiary(-ies).
+** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp
index b866a321c2..99b2337395 100644
--- a/