Qt 5.4.2 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 5.4.1. Compatibility with Qt
5.4.0 is also retained, except on Windows when using MSVC 2012 or MSVC
2013. See note below.

For more details, refer to the online documentation included in this
distribution. The documentation is also available online:

  http://doc.qt.io/qt-5.4/

The Qt version 5.4 series is binary compatible with the 5.3.x series.
Applications compiled for 5.3 will continue to run with 5.4 with the
exception of on Windows when using MSVC 2012 or MSVC 2013. See note
below.

Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker:

  http://bugreports.qt.io/

Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.

****************************************************************************
*                        Important Behavior Changes                        *
****************************************************************************
- Restored binary compatibility with Qt 5.3.2 on Windows when using MSVC
  2012 or MSVC 2013. This means that Qt 5.4.1 and 5.4.2 are no longer
  binary compatible with Qt 5.4.0 when using either of those compilers.
- [QTBUG-42594] OS X binary package: fixed incorrect linking to libraries in
  /opt/local/lib
- EXIF orientation is no longer applied to JPEG images on read. EXIF
  orientation on JPEG was introduced in 5.4.0, but due to a bug the most
  common EXIF-format (big-endian) was not working until 5.4.1. 5.4.2 restores the
  behavior of 5.4.0 and earlier for most EXIF-tagged JPEGs.
  EXIF orientation will be an opt-in starting with Qt 5.5.
- On x86 and x86-64 systems with ELF binaries (especially Linux), due to
  a new optimization in GCC 5.x in combination with a recent version of
  GNU binutils, compiling Qt applications with -fPIE is no longer
  enough with GCC 5.x. Applications now need to be compiled with
  the -fPIC option if Qt's option "reduce relocations" is active. For
  backward compatibility only, Qt accepts the use of -fPIE for GCC 4.x
  versions.
  Note that Clang is known to generate incompatible code even with -fPIC if
  the -flto option is active.
  Applications using qmake or cmake >= 2.8.12 as their build system will
  adapt automatically. Applications using an older release of cmake in
  combination with GCC 5.x need to change their CMakeLists.txt to add
  Qt5Core_EXECUTABLE_COMPILE_FLAGS to CMAKE_CXX_FLAGS. In particular,
  applications using cmake >= 2.8.9 and < 2.8.11 will continue to build
  with the -fPIE option and invoke the special compatibility mode if using
  GCC 4.x.


****************************************************************************
*                               Library                                    *
****************************************************************************

QtCore
------
 - [QTBUG-43893] Fixed memory leak in qSetMessagePattern
 - [QTBUG-43513] QXmlStreamReader: Correctly parse XML containing NUL bytes
   in the input stream
 - [QTBUG-43352] QTemporaryDirectory: Properly clean up in case of a failure
 - [QTBUG-43827] Fixed regression in QSortFilterProxyModel which crashed when
   sorting a tree model

QtGui
-----
 - [QTBUG-44273] Fixed misplacement of outlined text with native text rendering
 - [QTBUG-44147] Fixed VNC not working on some VNC servers
 - [QTBUG-43850] Fixed crash with multi-threaded font usage
 - [QTBUG-43850] Made the old harfbuzz fallback available at runtime
 - Improvements to the experimental high-dpi support
 - [QTBUG-43318] Better resolution of GLES 3 functions to avoid issues when
   deploying on systems with GLES 2.0 only

QtWidgets
---------
 - [QTBUG-43830] Fixed crash in stylesheets when styling QProgressBar
 - [QTBUG-43663] QColorDialog: Don't lose focus while color picking

QtNetwork
---------
 - [QTBUG-43793] Fixed disconnects of QSSLSocket after starting encryption

QtPrintSupport
--------------
 - [QTBUG-43124] Fixed QPrinter::{width,height} return values

****************************************************************************
*                      Platform Specific Changes                           *
****************************************************************************

Android
-------

 - [QTBUG-44648] Fixed rendering Chinese text on Android 5

Linux/XCB
---------

 - [QTBUG-45071] Don't crash when resizing windows to bigger than 3840x2160

****************************************************************************
*                                Tools                                     *
****************************************************************************

configure & build system
------------------------

 - CMake-based projects using Qt will now always be built with -fPIE,
   which fixes function pointer based QObject::connect() on ARM. This
   is consistent with qmake
 - [Android] Fixed compilation on armv5 with 4.9 toolchain

qmake
-----

 - [VS] Fixed handling of files that are excluded from build
 - [QTBUG-44413][VS] Fixed vcxproj generation for CONFIG-=flat, again
 - [QTBUG-44595] Restored Qt 4 behavior of qtLibraryTarget()
 - [QTBUG-45118][Windows] Fixed parallel build when using TYPELIBS
 - [OS X/iOS] Fixed QMAKE_INFO_PLIST path resolution for shadow builds
