diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c776971 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +SOURCES/hi128-app-qt4-logo.png +SOURCES/hi48-app-qt4-logo.png +SOURCES/qt-everywhere-opensource-src-4.8.7.tar.gz diff --git a/.qt.metadata b/.qt.metadata new file mode 100644 index 0000000..1b3d934 --- /dev/null +++ b/.qt.metadata @@ -0,0 +1,3 @@ +a1fe2c718e113dce72f960b549356395c86372f3 SOURCES/hi128-app-qt4-logo.png +2a1577e5c201a8a7e8ac105999732d9111aa0511 SOURCES/hi48-app-qt4-logo.png +76aef40335c0701e5be7bb3a9101df5d22fe3666 SOURCES/qt-everywhere-opensource-src-4.8.7.tar.gz diff --git a/SOURCES/Trolltech.conf b/SOURCES/Trolltech.conf new file mode 100644 index 0000000..b125965 --- /dev/null +++ b/SOURCES/Trolltech.conf @@ -0,0 +1,3 @@ +[Qt] +font="Sans Serif,10,-1,5,50,0,0,0,0,0" + diff --git a/SOURCES/assistant.desktop b/SOURCES/assistant.desktop new file mode 100644 index 0000000..ce7d337 --- /dev/null +++ b/SOURCES/assistant.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Qt4 Assistant +GenericName=Documentation viewer +Comment=Shows Qt4 documentation and examples +Exec=assistant-qt4 +Icon=assistant +Terminal=false +Type=Application +Categories=Qt;Development;Documentation; diff --git a/SOURCES/designer.desktop b/SOURCES/designer.desktop new file mode 100644 index 0000000..d8c2f4d --- /dev/null +++ b/SOURCES/designer.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Qt4 Designer +GenericName=Interface Designer +Comment=Design GUIs for Qt4 applications +Exec=designer-qt4 +Icon=designer +MimeType=application/x-designer; +Terminal=false +Type=Application +Categories=Qt;Development; diff --git a/SOURCES/linguist.desktop b/SOURCES/linguist.desktop new file mode 100644 index 0000000..713d711 --- /dev/null +++ b/SOURCES/linguist.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Qt4 Linguist +GenericName=Translation tool +Comment=Add translations to Qt4 applications +Exec=linguist-qt4 +Icon=linguist +MimeType=text/vnd.trolltech.linguist;application/x-linguist; +Terminal=false +Type=Application +Categories=Qt;Development; diff --git a/SOURCES/macros.qt4 b/SOURCES/macros.qt4 new file mode 100644 index 0000000..ca3e3be --- /dev/null +++ b/SOURCES/macros.qt4 @@ -0,0 +1,33 @@ +%_qt4 @@NAME@@ +%_qt4_epoch @@EPOCH@@ +%_qt4_version @@VERSION@@ +%_qt4_evr @@EVR@@ +%_qt48 %{_qt4_version} +%_qt4_prefix %{_libdir}/qt4 +%_qt4_bindir %{_qt4_prefix}/bin +%_qt4_datadir %{_qt4_prefix} +%_qt4_demosdir %{_qt4_prefix}/demos +%_qt4_docdir %{_docdir}/qt4 +%_qt4_examples %{_qt4_prefix}/examples +%_qt4_examplesdir %{_qt4_prefix}/examples +%_qt4_headerdir %{_includedir} +%_qt4_importdir %{_qt4_prefix}/imports +%_qt4_libdir %{_libdir} +%_qt4_plugindir %{_qt4_prefix}/plugins +%_qt4_qmake %{_qt4_bindir}/qmake +%_qt4_sysconfdir %{_sysconfdir} +%_qt4_translationdir %{_datadir}/qt4/translations + +%_qt4_ldflags %{?__global_ldflags} +%_qt4_optflags %{optflags} + +%_qt4_qmake_flags \\\ + QMAKE_CFLAGS_DEBUG="${CFLAGS:-%{_qt4_optflags}}" \\\ + QMAKE_CFLAGS_RELEASE="${CFLAGS:-%{_qt4_optflags}}" \\\ + QMAKE_CXXFLAGS_DEBUG="${CXXFLAGS:-%{_qt4_optflags}}" \\\ + QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS:-%{_qt4_optflags}}" \\\ + QMAKE_LFLAGS_DEBUG="${LDFLAGS:-%{_qt4_ldflags}}" \\\ + QMAKE_LFLAGS_RELEASE="${LDFLAGS:-%{_qt4_ldflags}}" \\\ + QMAKE_STRIP= + +%qmake_qt4 %{_qt4_qmake} %{_qt4_qmake_flags} diff --git a/SOURCES/qconfig-multilib.h b/SOURCES/qconfig-multilib.h new file mode 100644 index 0000000..a104c37 --- /dev/null +++ b/SOURCES/qconfig-multilib.h @@ -0,0 +1,23 @@ +/* qconfig.h */ +/* This file is here to prevent a file conflict on multiarch systems. A + * conflict will occur because qconfig.h has arch-specific definitions. + * + * DO NOT INCLUDE THE NEW FILE DIRECTLY -- ALWAYS INCLUDE THIS ONE INSTEAD. */ + +#ifndef QCONFIG_MULTILIB_H +#define QCONFIG_MULTILIB_H + +#ifndef __WORDSIZE +#include +#endif + +#if __WORDSIZE == 32 +#include "QtCore/qconfig-32.h" +#elif __WORDSIZE == 64 +#include "QtCore/qconfig-64.h" +#else +#error "unexpected value for __WORDSIZE macro" +#endif + +#endif + diff --git a/SOURCES/qdbusviewer.desktop b/SOURCES/qdbusviewer.desktop new file mode 100644 index 0000000..b22ac1d --- /dev/null +++ b/SOURCES/qdbusviewer.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Qt4 QDbusViewer +GenericName=D-Bus Debugger +Comment=Debug D-Bus applications +Exec=qdbusviewer +Icon=qdbusviewer +Terminal=false +Type=Application +Categories=Qt;Development;Debugger; + diff --git a/SOURCES/qt-4.8-poll.patch b/SOURCES/qt-4.8-poll.patch new file mode 100644 index 0000000..aed363c --- /dev/null +++ b/SOURCES/qt-4.8-poll.patch @@ -0,0 +1,812 @@ +diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/io/qprocess_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/corelib/io/qprocess_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/corelib/io/qprocess_unix.cpp.poll 2014-03-30 15:36:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/corelib/io/qprocess_unix.cpp 2014-03-31 18:04:05.958260978 -0500 +@@ -158,13 +158,6 @@ static void qt_sa_sigchld_sigaction(int + } + } + +-static inline void add_fd(int &nfds, int fd, fd_set *fdset) +-{ +- FD_SET(fd, fdset); +- if ((fd) > nfds) +- nfds = fd; +-} +- + struct QProcessInfo { + QProcess *process; + int deathPipe; +@@ -256,9 +249,9 @@ QProcessManager::~QProcessManager() + void QProcessManager::run() + { + forever { +- fd_set readset; +- FD_ZERO(&readset); +- FD_SET(qt_qprocess_deadChild_pipe[0], &readset); ++ pollfd fd; ++ fd.fd = qt_qprocess_deadChild_pipe[0]; ++ fd.events = POLLIN; + + #if defined (QPROCESS_DEBUG) + qDebug() << "QProcessManager::run() waiting for children to die"; +@@ -267,8 +260,8 @@ void QProcessManager::run() + // block forever, or until activity is detected on the dead child + // pipe. the only other peers are the SIGCHLD signal handler, and the + // QProcessManager destructor. +- int nselect = select(qt_qprocess_deadChild_pipe[0] + 1, &readset, 0, 0, 0); +- if (nselect < 0) { ++ int ret = qt_safe_poll(&fd, 1, -1, /* retry_eintr */ false); ++ if (ret < 0) { + if (errno == EINTR) + continue; + break; +@@ -1027,17 +1020,6 @@ void QProcessPrivate::killProcess() + ::kill(pid_t(pid), SIGKILL); + } + +-static int select_msecs(int nfds, fd_set *fdread, fd_set *fdwrite, int timeout) +-{ +- if (timeout < 0) +- return qt_safe_select(nfds, fdread, fdwrite, 0, 0); +- +- struct timeval tv; +- tv.tv_sec = timeout / 1000; +- tv.tv_usec = (timeout % 1000) * 1000; +- return qt_safe_select(nfds, fdread, fdwrite, 0, &tv); +-} +- + /* + Returns the difference between msecs and elapsed. If msecs is -1, + however, -1 is returned. +@@ -1060,10 +1042,10 @@ bool QProcessPrivate::waitForStarted(int + childStartedPipe[0]); + #endif + +- fd_set fds; +- FD_ZERO(&fds); +- FD_SET(childStartedPipe[0], &fds); +- if (select_msecs(childStartedPipe[0] + 1, &fds, 0, msecs) == 0) { ++ pollfd fd; ++ fd.fd = childStartedPipe[0]; ++ fd.events = POLLIN; ++ if (qt_safe_poll(&fd, 1, msecs) == 0) { + processError = QProcess::Timedout; + q->setErrorString(QProcess::tr("Process operation timed out")); + #if defined (QPROCESS_DEBUG) +@@ -1079,6 +1061,47 @@ bool QProcessPrivate::waitForStarted(int + return startedEmitted; + } + ++class QProcessFDSet { ++ pollfd fds[5]; ++ ++ static size_t size() ++ { ++ return sizeof(fds)/sizeof(fds[0]); ++ } ++ ++public: ++ QProcessFDSet(QProcessPrivate &proc) ++ { ++ for (size_t i = 0; i < size(); ++i) { ++ fds[i].fd = -1; ++ fds[i].events = POLLIN; ++ } ++ death().fd = proc.deathPipe[0]; ++ ++ if (proc.processState == QProcess::Starting) ++ started().fd = proc.childStartedPipe[0]; ++ ++ stdout().fd = proc.stdoutChannel.pipe[0]; ++ stderr().fd = proc.stderrChannel.pipe[0]; ++ ++ if (!proc.writeBuffer.isEmpty()) { ++ stdin().fd = proc.stdinChannel.pipe[1]; ++ stdin().events = POLLOUT; ++ } ++ } ++ ++ int poll(int timeout) ++ { ++ return qt_safe_poll(fds, size(), timeout); ++ } ++ ++ pollfd &death() { return fds[0]; } ++ pollfd &started() { return fds[1]; } ++ pollfd &stdout() { return fds[2]; } ++ pollfd &stderr() { return fds[3]; } ++ pollfd &stdin() { return fds[4]; } ++}; ++ + bool QProcessPrivate::waitForReadyRead(int msecs) + { + Q_Q(QProcess); +@@ -1090,28 +1113,9 @@ bool QProcessPrivate::waitForReadyRead(i + stopWatch.start(); + + forever { +- fd_set fdread; +- fd_set fdwrite; +- +- FD_ZERO(&fdread); +- FD_ZERO(&fdwrite); +- +- int nfds = deathPipe[0]; +- FD_SET(deathPipe[0], &fdread); +- +- if (processState == QProcess::Starting) +- add_fd(nfds, childStartedPipe[0], &fdread); +- +- if (stdoutChannel.pipe[0] != -1) +- add_fd(nfds, stdoutChannel.pipe[0], &fdread); +- if (stderrChannel.pipe[0] != -1) +- add_fd(nfds, stderrChannel.pipe[0], &fdread); +- +- if (!writeBuffer.isEmpty() && stdinChannel.pipe[1] != -1) +- add_fd(nfds, stdinChannel.pipe[1], &fdwrite); +- ++ QProcessFDSet fdset(*this); + int timeout = qt_timeout_value(msecs, stopWatch.elapsed()); +- int ret = select_msecs(nfds + 1, &fdread, &fdwrite, timeout); ++ int ret = fdset.poll(timeout); + if (ret < 0) { + break; + } +@@ -1121,18 +1125,18 @@ bool QProcessPrivate::waitForReadyRead(i + return false; + } + +- if (childStartedPipe[0] != -1 && FD_ISSET(childStartedPipe[0], &fdread)) { ++ if (qt_readable(fdset.started())) { + if (!_q_startupNotification()) + return false; + } + + bool readyReadEmitted = false; +- if (stdoutChannel.pipe[0] != -1 && FD_ISSET(stdoutChannel.pipe[0], &fdread)) { ++ if (qt_readable(fdset.stdout())) { + bool canRead = _q_canReadStandardOutput(); + if (processChannel == QProcess::StandardOutput && canRead) + readyReadEmitted = true; + } +- if (stderrChannel.pipe[0] != -1 && FD_ISSET(stderrChannel.pipe[0], &fdread)) { ++ if (qt_readable(fdset.stderr())) { + bool canRead = _q_canReadStandardError(); + if (processChannel == QProcess::StandardError && canRead) + readyReadEmitted = true; +@@ -1140,13 +1144,13 @@ bool QProcessPrivate::waitForReadyRead(i + if (readyReadEmitted) + return true; + +- if (stdinChannel.pipe[1] != -1 && FD_ISSET(stdinChannel.pipe[1], &fdwrite)) ++ if (qt_writable(fdset.stdin())) + _q_canWrite(); + +- if (deathPipe[0] == -1 || FD_ISSET(deathPipe[0], &fdread)) { ++ if (qt_readable(fdset.death())) { + if (_q_processDied()) + return false; +- } ++ } + } + return false; + } +@@ -1162,29 +1166,9 @@ bool QProcessPrivate::waitForBytesWritte + stopWatch.start(); + + while (!writeBuffer.isEmpty()) { +- fd_set fdread; +- fd_set fdwrite; +- +- FD_ZERO(&fdread); +- FD_ZERO(&fdwrite); +- +- int nfds = deathPipe[0]; +- FD_SET(deathPipe[0], &fdread); +- +- if (processState == QProcess::Starting) +- add_fd(nfds, childStartedPipe[0], &fdread); +- +- if (stdoutChannel.pipe[0] != -1) +- add_fd(nfds, stdoutChannel.pipe[0], &fdread); +- if (stderrChannel.pipe[0] != -1) +- add_fd(nfds, stderrChannel.pipe[0], &fdread); +- +- +- if (!writeBuffer.isEmpty() && stdinChannel.pipe[1] != -1) +- add_fd(nfds, stdinChannel.pipe[1], &fdwrite); +- ++ QProcessFDSet fdset(*this); + int timeout = qt_timeout_value(msecs, stopWatch.elapsed()); +- int ret = select_msecs(nfds + 1, &fdread, &fdwrite, timeout); ++ int ret = fdset.poll(timeout); + if (ret < 0) { + break; + } +@@ -1195,24 +1179,24 @@ bool QProcessPrivate::waitForBytesWritte + return false; + } + +- if (childStartedPipe[0] != -1 && FD_ISSET(childStartedPipe[0], &fdread)) { ++ if (qt_readable(fdset.started())) { + if (!_q_startupNotification()) + return false; + } + +- if (stdinChannel.pipe[1] != -1 && FD_ISSET(stdinChannel.pipe[1], &fdwrite)) ++ if (qt_writable(fdset.stdin())) + return _q_canWrite(); + +- if (stdoutChannel.pipe[0] != -1 && FD_ISSET(stdoutChannel.pipe[0], &fdread)) ++ if (qt_readable(fdset.stdout())) + _q_canReadStandardOutput(); + +- if (stderrChannel.pipe[0] != -1 && FD_ISSET(stderrChannel.pipe[0], &fdread)) ++ if (qt_readable(fdset.stderr())) + _q_canReadStandardError(); + +- if (deathPipe[0] == -1 || FD_ISSET(deathPipe[0], &fdread)) { +- if (_q_processDied()) +- return false; +- } ++ if (qt_readable(fdset.death())) { ++ if (_q_processDied()) ++ return false; ++ } + } + + return false; +@@ -1229,29 +1213,9 @@ bool QProcessPrivate::waitForFinished(in + stopWatch.start(); + + forever { +- fd_set fdread; +- fd_set fdwrite; +- int nfds = -1; +- +- FD_ZERO(&fdread); +- FD_ZERO(&fdwrite); +- +- if (processState == QProcess::Starting) +- add_fd(nfds, childStartedPipe[0], &fdread); +- +- if (stdoutChannel.pipe[0] != -1) +- add_fd(nfds, stdoutChannel.pipe[0], &fdread); +- if (stderrChannel.pipe[0] != -1) +- add_fd(nfds, stderrChannel.pipe[0], &fdread); +- +- if (processState == QProcess::Running) +- add_fd(nfds, deathPipe[0], &fdread); +- +- if (!writeBuffer.isEmpty() && stdinChannel.pipe[1] != -1) +- add_fd(nfds, stdinChannel.pipe[1], &fdwrite); +- ++ QProcessFDSet fdset(*this); + int timeout = qt_timeout_value(msecs, stopWatch.elapsed()); +- int ret = select_msecs(nfds + 1, &fdread, &fdwrite, timeout); ++ int ret = fdset.poll(timeout); + if (ret < 0) { + break; + } +@@ -1261,20 +1225,20 @@ bool QProcessPrivate::waitForFinished(in + return false; + } + +- if (childStartedPipe[0] != -1 && FD_ISSET(childStartedPipe[0], &fdread)) { ++ if (qt_readable(fdset.started())) { + if (!_q_startupNotification()) + return false; + } +- if (stdinChannel.pipe[1] != -1 && FD_ISSET(stdinChannel.pipe[1], &fdwrite)) ++ if (qt_writable(fdset.stdin())) + _q_canWrite(); + +- if (stdoutChannel.pipe[0] != -1 && FD_ISSET(stdoutChannel.pipe[0], &fdread)) ++ if (qt_readable(fdset.stdout())) + _q_canReadStandardOutput(); + +- if (stderrChannel.pipe[0] != -1 && FD_ISSET(stderrChannel.pipe[0], &fdread)) ++ if (qt_readable(fdset.stderr())) + _q_canReadStandardError(); + +- if (deathPipe[0] == -1 || FD_ISSET(deathPipe[0], &fdread)) { ++ if (qt_readable(fdset.death())) { + if (_q_processDied()) + return true; + } +@@ -1284,10 +1248,10 @@ bool QProcessPrivate::waitForFinished(in + + bool QProcessPrivate::waitForWrite(int msecs) + { +- fd_set fdwrite; +- FD_ZERO(&fdwrite); +- FD_SET(stdinChannel.pipe[1], &fdwrite); +- return select_msecs(stdinChannel.pipe[1] + 1, 0, &fdwrite, msecs < 0 ? 0 : msecs) == 1; ++ pollfd fd; ++ fd.fd = stdinChannel.pipe[1]; ++ fd.events = POLLIN; ++ return qt_safe_poll(&fd, 1, msecs); + } + + void QProcessPrivate::findExitCode() +diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix.cpp.poll 2014-03-30 15:36:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix.cpp 2014-03-31 18:01:59.369715403 -0500 +@@ -99,4 +99,165 @@ int qt_safe_select(int nfds, fd_set *fdr + } + } + ++#ifndef Q_OS_VXWORKS ++ ++int qt_safe_poll(struct pollfd *fds, int nfds, int timeout_ms, bool retry_eintr) ++{ ++ if (nfds == 0) ++ return 0; ++ if (nfds < 0) { ++ errno = EINVAL; ++ return -1; ++ } ++ ++ // Retry on ret == 0 if the deadline has not yet passed because ++ // Linux can return early from the syscall, without setting EINTR. ++ if (timeout_ms < 0) { ++ forever { ++ int ret = ::poll(fds, nfds, -1); ++ if (ret > 0) ++ return ret; ++ if (retry_eintr) { ++ if (ret == 0 || ret == -1 && errno == EINTR) { ++ continue; ++ } else { ++ return -1; ++ } ++ } ++ if (ret == 0) { ++ errno = EINTR; ++ return -1; ++ } ++ return ret; ++ } ++ } ++ ++ timeval previous = qt_gettime(); ++ timeval deadline = previous; ++ deadline.tv_sec += timeout_ms / 1000; ++ deadline.tv_usec += (timeout_ms % 1000) * 1000; ++ if (deadline.tv_usec >= 1000000) { ++ ++deadline.tv_sec; ++ deadline.tv_usec -= 1000000; ++ } ++ int remaining = timeout_ms; ++ ++ forever { ++ int ret = ::poll(fds, nfds, remaining); ++ if (ret > 0) ++ return ret; ++ timeval now = qt_gettime(); ++ if ((now.tv_sec > deadline.tv_sec // past deadline ++ || (now.tv_sec == deadline.tv_sec ++ && now.tv_usec >= deadline.tv_usec)) ++ || (now.tv_sec < previous.tv_sec // time warp ++ || (now.tv_sec == previous.tv_sec ++ && now.tv_usec < previous.tv_usec)) ++ || (ret < 0 && (errno != EINTR || !retry_eintr))) // other error ++ return ret; ++ if (ret == 0 && !retry_eintr) { ++ errno = EINTR; ++ return -1; ++ } ++ remaining = (deadline.tv_sec - now.tv_sec) * 1000 ++ + (deadline.tv_usec - now.tv_usec) / 1000; ++ previous = now; ++ } ++} ++ ++#else ++ ++// Poll emulation for VxWorks. ++ ++static int mark_bad_descriptors(pollfd *fds, int nfds) ++{ ++ fd_set r; ++ FD_ZERO(&r); ++ struct timeval tv; ++ tv.tv_sec = 0; ++ tv.tv_usec = 0; ++ int ret = 0; ++ ++ // Check each descriptor invidually for badness. ++ for (int i = 0; i < nfds; ++i) { ++ pollfd &fd(fds[i]); ++ if (fd.fd >= 0) { ++ FD_SET(fd.fd, &r); ++ int ret = qt_safe_select(fd.fd + 1, &r, NULL, NULL, &tv); ++ FD_CLR(fd.fd, &r); ++ if (ret < 0 && errno == EBADF) { ++ fd.revents = POLLNVAL; ++ ++ret; ++ } ++ } ++ } ++ Q_ASSERT(ret > 0); ++ return ret; ++} ++ ++int qt_safe_poll(pollfd *fds, int nfds, int timeout, bool retry_eintr) ++{ ++ fd_set r, w; ++ FD_ZERO(&r); ++ FD_ZERO(&w); ++ int maxfd = -1; ++ ++ // Extract the watched descriptors. ++ for (int i = 0; i < nfds; ++i) { ++ pollfd &fd(fds[i]); ++ if (fd.fd >= 0 && fd.fd < FD_SETSIZE) { ++ if (fd.events & POLLIN) { ++ FD_SET(fd.fd, &r); ++ if (fd.fd > maxfd) ++ maxfd = fd.fd; ++ } ++ if (fd.events & POLLOUT) { ++ FD_SET(fd.fd, &w); ++ if (fd.fd > maxfd) ++ maxfd = fd.fd; ++ } ++ } ++ } ++ ++ // If timeout is negative, wait indefinitely for activity. ++ timeval tv; ++ timeval *ptv; ++ if (timeout >= 0) { ++ tv.tv_sec = timeout / 1000; ++ tv.tv_usec = (timeout % 1000) * 1000; ++ ptv = &tv; ++ } else ++ ptv = NULL; ++ ++ int ret; ++ if (retry_eintr) ++ ret = qt_safe_select(maxfd + 1, &r, &w, NULL, ptv); ++ else ++ ret = ::select(maxfd + 1, &r, &w, NULL, ptv); ++ if (ret < 0 && errno == EBADF) { ++ return mark_bad_descriptors(fds, nfds); ++ } ++ if (ret <= 0) ++ return ret; ++ ++ // Set the revents flags. ++ ret = 0; ++ for (int i = 0; i < nfds; ++i) { ++ pollfd &fd(fds[i]); ++ fd.revents = 0; ++ if (fd.fd >= 0 && fd.fd < FD_SETSIZE) { ++ if ((fd.events & POLLIN) && FD_ISSET(fd.fd, &r)) ++ fd.revents |= POLLIN; ++ if ((fd.events & POLLOUT) && FD_ISSET(fd.fd, &w)) ++ fd.revents |= POLLOUT; ++ if (fd.revents) ++ ++ret; ++ } ++ } ++ Q_ASSERT(ret > 0); ++ return ret; ++} ++ ++#endif ++ + QT_END_NAMESPACE +diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix_p.h.poll qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix_p.h +--- qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix_p.h.poll 2014-03-30 15:36:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix_p.h 2014-03-31 18:01:59.370715392 -0500 +@@ -345,9 +345,42 @@ static inline pid_t qt_safe_waitpid(pid_ + + timeval qt_gettime(); // in qelapsedtimer_mac.cpp or qtimestamp_unix.cpp + ++// Deprecated due to FD_SETSIZE limitation, use qt_safe_poll instead. + Q_CORE_EXPORT int qt_safe_select(int nfds, fd_set *fdread, fd_set *fdwrite, fd_set *fdexcept, + const struct timeval *tv); + ++#ifndef Q_OS_VXWORKS ++#include ++#else ++ ++// Poll emulation for VxWorks. ++ ++struct pollfd { ++ int fd; ++ short events; ++ short revents; ++}; ++ ++#define POLLIN 1 ++#define POLLOUT 2 ++#define POLLERR 4 ++#define POLLHUP 8 ++#define POLLNVAL 16 ++#endif ++ ++inline bool qt_readable(const pollfd &fd) ++{ ++ return fd.fd >= 0 && (fd.revents & (POLLIN | POLLHUP | POLLERR | POLLNVAL)) != 0; ++} ++ ++inline bool qt_writable(const pollfd &fd) ++{ ++ return fd.fd >= 0 && (fd.revents & (POLLOUT | POLLHUP | POLLERR | POLLNVAL)) != 0; ++} ++ ++Q_CORE_EXPORT int qt_safe_poll(pollfd *fds, int nfds, int timeout, ++ bool retry_eintr = true); ++ + // according to X/OPEN we have to define semun ourselves + // we use prefix as on some systems sem.h will have it + struct semid_ds; +diff -up qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalserver_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalserver_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalserver_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalserver_unix.cpp 2014-03-31 18:01:59.370715392 -0500 +@@ -208,16 +208,11 @@ void QLocalServerPrivate::_q_onNewConnec + + void QLocalServerPrivate::waitForNewConnection(int msec, bool *timedOut) + { +- fd_set readfds; +- FD_ZERO(&readfds); +- FD_SET(listenSocket, &readfds); ++ struct pollfd fd; ++ fd.fd = listenSocket; ++ fd.events = POLLIN; + +- timeval timeout; +- timeout.tv_sec = msec / 1000; +- timeout.tv_usec = (msec % 1000) * 1000; +- +- int result = -1; +- result = qt_safe_select(listenSocket + 1, &readfds, 0, 0, (msec == -1) ? 0 : &timeout); ++ int result = qt_safe_poll(&fd, 1, msec); + if (-1 == result) { + setError(QLatin1String("QLocalServer::waitForNewConnection")); + closeServer(); +diff -up qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalsocket_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalsocket_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalsocket_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalsocket_unix.cpp 2014-03-31 18:01:59.370715392 -0500 +@@ -56,10 +56,6 @@ + #include + #include + +-#ifdef Q_OS_VXWORKS +-# include +-#endif +- + #define QT_CONNECT_TIMEOUT 30000 + + QT_BEGIN_NAMESPACE +@@ -520,32 +516,17 @@ bool QLocalSocket::waitForConnected(int + if (state() != ConnectingState) + return (state() == ConnectedState); + +- fd_set fds; +- FD_ZERO(&fds); +- FD_SET(d->connectingSocket, &fds); +- +- timeval timeout; +- timeout.tv_sec = msec / 1000; +- timeout.tv_usec = (msec % 1000) * 1000; +- +- // timeout can not be 0 or else select will return an error. +- if (0 == msec) +- timeout.tv_usec = 1000; ++ pollfd fd; ++ fd.fd = d->connectingSocket; ++ fd.events = POLLIN | POLLOUT; + + int result = -1; + // on Linux timeout will be updated by select, but _not_ on other systems. + QElapsedTimer timer; ++ int remaining = msec; + timer.start(); +- while (state() == ConnectingState +- && (-1 == msec || timer.elapsed() < msec)) { +-#ifdef Q_OS_SYMBIAN +- // On Symbian, ready-to-write is signaled when non-blocking socket +- // connect is finised. Is ready-to-read really used on other +- // UNIX paltforms when using non-blocking AF_UNIX socket? +- result = ::select(d->connectingSocket + 1, 0, &fds, 0, &timeout); +-#else +- result = ::select(d->connectingSocket + 1, &fds, 0, 0, &timeout); +-#endif ++ while (state() == ConnectingState) { ++ result = qt_safe_poll(&fd, 1, remaining, /* retry_eintr */ false); + if (-1 == result && errno != EINTR) { + d->errorOccurred( QLocalSocket::UnknownSocketError, + QLatin1String("QLocalSocket::waitForConnected")); +@@ -553,6 +534,11 @@ bool QLocalSocket::waitForConnected(int + } + if (result > 0) + d->_q_connectToSocket(); ++ if (msec >= 0) { ++ remaining = timer.elapsed() - msec; ++ if (remaining < 0) ++ break; ++ } + } + + return (state() == ConnectedState); +diff -up qt-everywhere-opensource-src-4.8.6/src/network/socket/qnativesocketengine_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/network/socket/qnativesocketengine_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/network/socket/qnativesocketengine_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/network/socket/qnativesocketengine_unix.cpp 2014-03-31 18:01:59.371715381 -0500 +@@ -1068,48 +1068,40 @@ qint64 QNativeSocketEnginePrivate::nativ + + int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool selectForRead) const + { +- fd_set fds; +- FD_ZERO(&fds); +- FD_SET(socketDescriptor, &fds); +- +- struct timeval tv; +- tv.tv_sec = timeout / 1000; +- tv.tv_usec = (timeout % 1000) * 1000; +- +- int retval; +- if (selectForRead) +- retval = qt_safe_select(socketDescriptor + 1, &fds, 0, 0, timeout < 0 ? 0 : &tv); +- else +- retval = qt_safe_select(socketDescriptor + 1, 0, &fds, 0, timeout < 0 ? 0 : &tv); +- +- return retval; ++ struct pollfd fd; ++ fd.fd = socketDescriptor; ++ if (selectForRead) { ++ fd.events = POLLIN; ++ } else { ++ fd.events = POLLOUT; ++ } ++ return qt_safe_poll(&fd, 1, timeout); + } + + int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool checkRead, bool checkWrite, + bool *selectForRead, bool *selectForWrite) const + { +- fd_set fdread; +- FD_ZERO(&fdread); ++ struct pollfd fd; ++ fd.fd = socketDescriptor; + if (checkRead) +- FD_SET(socketDescriptor, &fdread); +- +- fd_set fdwrite; +- FD_ZERO(&fdwrite); ++ fd.events = POLLIN; ++ else ++ fd.events = 0; + if (checkWrite) +- FD_SET(socketDescriptor, &fdwrite); +- +- struct timeval tv; +- tv.tv_sec = timeout / 1000; +- tv.tv_usec = (timeout % 1000) * 1000; +- +- int ret; +- ret = qt_safe_select(socketDescriptor + 1, &fdread, &fdwrite, 0, timeout < 0 ? 0 : &tv); +- ++ fd.events |= POLLOUT; ++ int ret = qt_safe_poll(&fd, 1, timeout); + if (ret <= 0) +- return ret; +- *selectForRead = FD_ISSET(socketDescriptor, &fdread); +- *selectForWrite = FD_ISSET(socketDescriptor, &fdwrite); +- ++ return ret; ++ bool r = (fd.revents & (POLLIN | POLLHUP | POLLERR)) != 0; ++ bool w = (fd.revents & (POLLOUT | POLLHUP | POLLERR)) != 0; ++ // Emulate the return value from select(2). ++ ret = 0; ++ if (r) ++ ++ret; ++ if (w) ++ ++ret; ++ *selectForRead = r; ++ *selectForWrite = w; + return ret; + } + +diff -up qt-everywhere-opensource-src-4.8.6/src/qt3support/network/q3socketdevice_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/qt3support/network/q3socketdevice_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/qt3support/network/q3socketdevice_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/qt3support/network/q3socketdevice_unix.cpp 2014-03-31 18:01:59.371715381 -0500 +@@ -68,6 +68,7 @@ static inline int qt_socket_socket(int d + #endif + + #include "q3socketdevice.h" ++#include "private/qcore_unix_p.h" + + #ifndef QT_NO_NETWORK + +@@ -588,19 +589,10 @@ Q_LONG Q3SocketDevice::waitForMore( int + { + if ( !isValid() ) + return -1; +- if ( fd >= FD_SETSIZE ) +- return -1; +- +- fd_set fds; +- struct timeval tv; +- +- FD_ZERO( &fds ); +- FD_SET( fd, &fds ); +- +- tv.tv_sec = msecs / 1000; +- tv.tv_usec = (msecs % 1000) * 1000; + +- int rv = select( fd+1, &fds, 0, 0, msecs < 0 ? 0 : &tv ); ++ pollfd pfd; ++ pfd.fd = fd; ++ int rv = qt_safe_poll(&pfd, 1, msecs, /* retry_eintr */ false); + + if ( rv < 0 ) + return -1; +diff -up qt-everywhere-opensource-src-4.8.6/src/qt3support/other/q3process_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/qt3support/other/q3process_unix.cpp +--- qt-everywhere-opensource-src-4.8.6/src/qt3support/other/q3process_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/qt3support/other/q3process_unix.cpp 2014-03-31 18:01:59.372715370 -0500 +@@ -981,13 +981,10 @@ bool Q3Process::isRunning() const + // On heavy processing, the socket notifier for the sigchild might not + // have found time to fire yet. + if ( d->procManager && d->procManager->sigchldFd[1] < FD_SETSIZE ) { +- fd_set fds; +- struct timeval tv; +- FD_ZERO( &fds ); +- FD_SET( d->procManager->sigchldFd[1], &fds ); +- tv.tv_sec = 0; +- tv.tv_usec = 0; +- if ( ::select( d->procManager->sigchldFd[1]+1, &fds, 0, 0, &tv ) > 0 ) ++ pollfd fd; ++ fd.fd = d->procManager->sigchldFd[1]; ++ fd.events = POLLIN; ++ if ( qt_safe_poll(&fd, 1, 0, /* retry_eintr */ false) > 0 ) + d->procManager->sigchldHnd( d->procManager->sigchldFd[1] ); + } + +@@ -1124,29 +1121,21 @@ void Q3Process::socketRead( int fd ) + } + } + +- if ( fd < FD_SETSIZE ) { +- fd_set fds; +- struct timeval tv; +- FD_ZERO( &fds ); +- FD_SET( fd, &fds ); +- tv.tv_sec = 0; +- tv.tv_usec = 0; +- while ( ::select( fd+1, &fds, 0, 0, &tv ) > 0 ) { +- // prepare for the next round +- FD_ZERO( &fds ); +- FD_SET( fd, &fds ); +- // read data +- ba = new QByteArray( basize ); +- n = ::read( fd, ba->data(), basize ); +- if ( n > 0 ) { +- ba->resize( n ); +- buffer->append( ba ); +- ba = 0; +- } else { +- delete ba; +- ba = 0; +- break; +- } ++ pollfd pfd; ++ pfd.fd = fd; ++ pfd.events = POLLIN; ++ while (qt_safe_poll(&pfd, 1, 0)) { ++ // read data ++ ba = new QByteArray( basize ); ++ n = ::read( fd, ba->data(), basize ); ++ if ( n > 0 ) { ++ ba->resize( n ); ++ buffer->append( ba ); ++ ba = 0; ++ } else { ++ delete ba; ++ ba = 0; ++ break; + } + } + diff --git a/SOURCES/qt-aarch64.patch b/SOURCES/qt-aarch64.patch new file mode 100644 index 0000000..fc8e981 --- /dev/null +++ b/SOURCES/qt-aarch64.patch @@ -0,0 +1,525 @@ +Index: b/src/corelib/arch/aarch64/arch.pri +=================================================================== +--- /dev/null ++++ b/src/corelib/arch/aarch64/arch.pri +@@ -0,0 +1,4 @@ ++# ++# AArch64 architecture ++# ++SOURCES += $$QT_ARCH_CPP/qatomic_aarch64.cpp +Index: b/src/corelib/arch/aarch64/qatomic_aarch64.cpp +=================================================================== +diff -up qt-everywhere-opensource-src-4.8.7/include/QtCore/headers.pri.aarch64 qt-everywhere-opensource-src-4.8.7/include/QtCore/headers.pri +--- qt-everywhere-opensource-src-4.8.7/include/QtCore/headers.pri.aarch64 2015-05-08 21:48:32.714057739 -0500 ++++ qt-everywhere-opensource-src-4.8.7/include/QtCore/headers.pri 2015-05-08 21:53:21.088761971 -0500 +@@ -1,3 +1,3 @@ +-SYNCQT.HEADER_FILES = ../corelib/kernel/qabstracteventdispatcher.h ../corelib/kernel/qabstractitemmodel.h ../corelib/kernel/qbasictimer.h ../corelib/kernel/qcoreapplication.h ../corelib/kernel/qcoreevent.h ../corelib/kernel/qeventloop.h ../corelib/kernel/qfunctions_nacl.h ../corelib/kernel/qfunctions_vxworks.h ../corelib/kernel/qfunctions_wince.h ../corelib/kernel/qmath.h ../corelib/kernel/qmetaobject.h ../corelib/kernel/qmetatype.h ../corelib/kernel/qmimedata.h ../corelib/kernel/qobject.h ../corelib/kernel/qobjectcleanuphandler.h ../corelib/kernel/qobjectdefs.h ../corelib/kernel/qpointer.h ../corelib/kernel/qsharedmemory.h ../corelib/kernel/qsignalmapper.h ../corelib/kernel/qsocketnotifier.h ../corelib/kernel/qsystemsemaphore.h ../corelib/kernel/qtimer.h ../corelib/kernel/qtranslator.h ../corelib/kernel/qvariant.h ../corelib/animation/qabstractanimation.h ../corelib/animation/qanimationgroup.h ../corelib/animation/qparallelanimationgroup.h ../corelib/animation/qpauseanimation.h ../corelib/animation/qpropertyanimation.h ../corelib/animation/qsequentialanimationgroup.h ../corelib/animation/qvariantanimation.h ../corelib/arch/qatomic_alpha.h ../corelib/arch/qatomic_arch.h ../corelib/arch/qatomic_arm.h ../corelib/arch/qatomic_armv5.h ../corelib/arch/qatomic_armv6.h ../corelib/arch/qatomic_armv7.h ../corelib/arch/qatomic_avr32.h ../corelib/arch/qatomic_bfin.h ../corelib/arch/qatomic_bootstrap.h ../corelib/arch/qatomic_generic.h ../corelib/arch/qatomic_i386.h ../corelib/arch/qatomic_ia64.h ../corelib/arch/qatomic_integrity.h ../corelib/arch/qatomic_m68k.h ../corelib/arch/qatomic_macosx.h ../corelib/arch/qatomic_mips.h ../corelib/arch/qatomic_parisc.h ../corelib/arch/qatomic_powerpc.h ../corelib/arch/qatomic_s390.h ../corelib/arch/qatomic_sh.h ../corelib/arch/qatomic_sh4a.h ../corelib/arch/qatomic_sparc.h ../corelib/arch/qatomic_symbian.h ../corelib/arch/qatomic_vxworks.h ../corelib/arch/qatomic_windows.h ../corelib/arch/qatomic_windowsce.h ../corelib/arch/qatomic_x86_64.h ../corelib/tools/qalgorithms.h ../corelib/tools/qbitarray.h ../corelib/tools/qbytearray.h ../corelib/tools/qbytearraymatcher.h ../corelib/tools/qcache.h ../corelib/tools/qchar.h ../corelib/tools/qcontainerfwd.h ../corelib/tools/qcontiguouscache.h ../corelib/tools/qcryptographichash.h ../corelib/tools/qdatetime.h ../corelib/tools/qeasingcurve.h ../corelib/tools/qelapsedtimer.h ../corelib/tools/qhash.h ../corelib/tools/qiterator.h ../corelib/tools/qline.h ../corelib/tools/qlinkedlist.h ../corelib/tools/qlist.h ../corelib/tools/qlocale.h ../corelib/tools/qlocale_blackberry.h ../corelib/tools/qmap.h ../corelib/tools/qmargins.h ../corelib/tools/qpair.h ../corelib/tools/qpoint.h ../corelib/tools/qqueue.h ../corelib/tools/qrect.h ../corelib/tools/qregexp.h ../corelib/tools/qscopedpointer.h ../corelib/tools/qscopedvaluerollback.h ../corelib/tools/qset.h ../corelib/tools/qshareddata.h ../corelib/tools/qsharedpointer.h ../corelib/tools/qsharedpointer_impl.h ../corelib/tools/qsize.h ../corelib/tools/qstack.h ../corelib/tools/qstring.h ../corelib/tools/qstringbuilder.h ../corelib/tools/qstringlist.h ../corelib/tools/qstringmatcher.h ../corelib/tools/qtextboundaryfinder.h ../corelib/tools/qtimeline.h ../corelib/tools/qvarlengtharray.h ../corelib/tools/qvector.h ../corelib/plugin/qfactoryinterface.h ../corelib/plugin/qlibrary.h ../corelib/plugin/qplugin.h ../corelib/plugin/qpluginloader.h ../corelib/plugin/quuid.h ../corelib/xml/qxmlstream.h ../corelib/thread/qatomic.h ../corelib/thread/qbasicatomic.h ../corelib/thread/qmutex.h ../corelib/thread/qreadwritelock.h ../corelib/thread/qsemaphore.h ../corelib/thread/qthread.h ../corelib/thread/qthreadstorage.h ../corelib/thread/qwaitcondition.h ../corelib/statemachine/qabstractstate.h ../corelib/statemachine/qabstracttransition.h ../corelib/statemachine/qeventtransition.h ../corelib/statemachine/qfinalstate.h ../corelib/statemachine/qhistorystate.h ../corelib/statemachine/qsignaltransition.h ../corelib/statemachine/qstate.h ../corelib/statemachine/qstatemachine.h ../corelib/concurrent/qfuture.h ../corelib/concurrent/qfutureinterface.h ../corelib/concurrent/qfuturesynchronizer.h ../corelib/concurrent/qfuturewatcher.h ../corelib/concurrent/qrunnable.h ../corelib/concurrent/qtconcurrentcompilertest.h ../corelib/concurrent/qtconcurrentexception.h ../corelib/concurrent/qtconcurrentfilter.h ../corelib/concurrent/qtconcurrentfilterkernel.h ../corelib/concurrent/qtconcurrentfunctionwrappers.h ../corelib/concurrent/qtconcurrentiteratekernel.h ../corelib/concurrent/qtconcurrentmap.h ../corelib/concurrent/qtconcurrentmapkernel.h ../corelib/concurrent/qtconcurrentmedian.h ../corelib/concurrent/qtconcurrentreducekernel.h ../corelib/concurrent/qtconcurrentresultstore.h ../corelib/concurrent/qtconcurrentrun.h ../corelib/concurrent/qtconcurrentrunbase.h ../corelib/concurrent/qtconcurrentstoredfunctioncall.h ../corelib/concurrent/qtconcurrentthreadengine.h ../corelib/concurrent/qthreadpool.h ../corelib/io/qabstractfileengine.h ../corelib/io/qbuffer.h ../corelib/io/qdatastream.h ../corelib/io/qdebug.h ../corelib/io/qdir.h ../corelib/io/qdiriterator.h ../corelib/io/qfile.h ../corelib/io/qfileinfo.h ../corelib/io/qfilesystemwatcher.h ../corelib/io/qfsfileengine.h ../corelib/io/qiodevice.h ../corelib/io/qprocess.h ../corelib/io/qresource.h ../corelib/io/qsettings.h ../corelib/io/qtemporaryfile.h ../corelib/io/qtextstream.h ../corelib/io/qurl.h ../corelib/global/qconfig-dist.h ../corelib/global/qconfig-large.h ../corelib/global/qconfig-medium.h ../corelib/global/qconfig-minimal.h ../corelib/global/qconfig-nacl.h ../corelib/global/qconfig-small.h ../corelib/global/qendian.h ../corelib/global/qfeatures.h ../corelib/global/qglobal.h ../corelib/global/qlibraryinfo.h ../corelib/global/qnamespace.h ../corelib/global/qnumeric.h ../corelib/global/qt_windows.h ../corelib/global/qconfig.h ../corelib/codecs/qtextcodec.h ../corelib/codecs/qtextcodecplugin.h ../../include/QtCore/QtCore ++SYNCQT.HEADER_FILES = ../corelib/kernel/qabstracteventdispatcher.h ../corelib/kernel/qabstractitemmodel.h ../corelib/kernel/qbasictimer.h ../corelib/kernel/qcoreapplication.h ../corelib/kernel/qcoreevent.h ../corelib/kernel/qeventloop.h ../corelib/kernel/qfunctions_nacl.h ../corelib/kernel/qfunctions_vxworks.h ../corelib/kernel/qfunctions_wince.h ../corelib/kernel/qmath.h ../corelib/kernel/qmetaobject.h ../corelib/kernel/qmetatype.h ../corelib/kernel/qmimedata.h ../corelib/kernel/qobject.h ../corelib/kernel/qobjectcleanuphandler.h ../corelib/kernel/qobjectdefs.h ../corelib/kernel/qpointer.h ../corelib/kernel/qsharedmemory.h ../corelib/kernel/qsignalmapper.h ../corelib/kernel/qsocketnotifier.h ../corelib/kernel/qsystemsemaphore.h ../corelib/kernel/qtimer.h ../corelib/kernel/qtranslator.h ../corelib/kernel/qvariant.h ../corelib/animation/qabstractanimation.h ../corelib/animation/qanimationgroup.h ../corelib/animation/qparallelanimationgroup.h ../corelib/animation/qpauseanimation.h ../corelib/animation/qpropertyanimation.h ../corelib/animation/qsequentialanimationgroup.h ../corelib/animation/qvariantanimation.h ../corelib/arch/qatomic_aarch64.h ../corelib/arch/qatomic_alpha.h ../corelib/arch/qatomic_arch.h ../corelib/arch/qatomic_arm.h ../corelib/arch/qatomic_armv5.h ../corelib/arch/qatomic_armv6.h ../corelib/arch/qatomic_armv7.h ../corelib/arch/qatomic_avr32.h ../corelib/arch/qatomic_bfin.h ../corelib/arch/qatomic_bootstrap.h ../corelib/arch/qatomic_generic.h ../corelib/arch/qatomic_i386.h ../corelib/arch/qatomic_ia64.h ../corelib/arch/qatomic_integrity.h ../corelib/arch/qatomic_m68k.h ../corelib/arch/qatomic_macosx.h ../corelib/arch/qatomic_mips.h ../corelib/arch/qatomic_parisc.h ../corelib/arch/qatomic_powerpc.h ../corelib/arch/qatomic_s390.h ../corelib/arch/qatomic_sh.h ../corelib/arch/qatomic_sh4a.h ../corelib/arch/qatomic_sparc.h ../corelib/arch/qatomic_symbian.h ../corelib/arch/qatomic_vxworks.h ../corelib/arch/qatomic_windows.h ../corelib/arch/qatomic_windowsce.h ../corelib/arch/qatomic_x86_64.h ../corelib/tools/qalgorithms.h ../corelib/tools/qbitarray.h ../corelib/tools/qbytearray.h ../corelib/tools/qbytearraymatcher.h ../corelib/tools/qcache.h ../corelib/tools/qchar.h ../corelib/tools/qcontainerfwd.h ../corelib/tools/qcontiguouscache.h ../corelib/tools/qcryptographichash.h ../corelib/tools/qdatetime.h ../corelib/tools/qeasingcurve.h ../corelib/tools/qelapsedtimer.h ../corelib/tools/qhash.h ../corelib/tools/qiterator.h ../corelib/tools/qline.h ../corelib/tools/qlinkedlist.h ../corelib/tools/qlist.h ../corelib/tools/qlocale.h ../corelib/tools/qlocale_blackberry.h ../corelib/tools/qmap.h ../corelib/tools/qmargins.h ../corelib/tools/qpair.h ../corelib/tools/qpoint.h ../corelib/tools/qqueue.h ../corelib/tools/qrect.h ../corelib/tools/qregexp.h ../corelib/tools/qscopedpointer.h ../corelib/tools/qscopedvaluerollback.h ../corelib/tools/qset.h ../corelib/tools/qshareddata.h ../corelib/tools/qsharedpointer.h ../corelib/tools/qsharedpointer_impl.h ../corelib/tools/qsize.h ../corelib/tools/qstack.h ../corelib/tools/qstring.h ../corelib/tools/qstringbuilder.h ../corelib/tools/qstringlist.h ../corelib/tools/qstringmatcher.h ../corelib/tools/qtextboundaryfinder.h ../corelib/tools/qtimeline.h ../corelib/tools/qvarlengtharray.h ../corelib/tools/qvector.h ../corelib/plugin/qfactoryinterface.h ../corelib/plugin/qlibrary.h ../corelib/plugin/qplugin.h ../corelib/plugin/qpluginloader.h ../corelib/plugin/quuid.h ../corelib/xml/qxmlstream.h ../corelib/thread/qatomic.h ../corelib/thread/qbasicatomic.h ../corelib/thread/qmutex.h ../corelib/thread/qreadwritelock.h ../corelib/thread/qsemaphore.h ../corelib/thread/qthread.h ../corelib/thread/qthreadstorage.h ../corelib/thread/qwaitcondition.h ../corelib/statemachine/qabstractstate.h ../corelib/statemachine/qabstracttransition.h ../corelib/statemachine/qeventtransition.h ../corelib/statemachine/qfinalstate.h ../corelib/statemachine/qhistorystate.h ../corelib/statemachine/qsignaltransition.h ../corelib/statemachine/qstate.h ../corelib/statemachine/qstatemachine.h ../corelib/concurrent/qfuture.h ../corelib/concurrent/qfutureinterface.h ../corelib/concurrent/qfuturesynchronizer.h ../corelib/concurrent/qfuturewatcher.h ../corelib/concurrent/qrunnable.h ../corelib/concurrent/qtconcurrentcompilertest.h ../corelib/concurrent/qtconcurrentexception.h ../corelib/concurrent/qtconcurrentfilter.h ../corelib/concurrent/qtconcurrentfilterkernel.h ../corelib/concurrent/qtconcurrentfunctionwrappers.h ../corelib/concurrent/qtconcurrentiteratekernel.h ../corelib/concurrent/qtconcurrentmap.h ../corelib/concurrent/qtconcurrentmapkernel.h ../corelib/concurrent/qtconcurrentmedian.h ../corelib/concurrent/qtconcurrentreducekernel.h ../corelib/concurrent/qtconcurrentresultstore.h ../corelib/concurrent/qtconcurrentrun.h ../corelib/concurrent/qtconcurrentrunbase.h ../corelib/concurrent/qtconcurrentstoredfunctioncall.h ../corelib/concurrent/qtconcurrentthreadengine.h ../corelib/concurrent/qthreadpool.h ../corelib/io/qabstractfileengine.h ../corelib/io/qbuffer.h ../corelib/io/qdatastream.h ../corelib/io/qdebug.h ../corelib/io/qdir.h ../corelib/io/qdiriterator.h ../corelib/io/qfile.h ../corelib/io/qfileinfo.h ../corelib/io/qfilesystemwatcher.h ../corelib/io/qfsfileengine.h ../corelib/io/qiodevice.h ../corelib/io/qprocess.h ../corelib/io/qresource.h ../corelib/io/qsettings.h ../corelib/io/qtemporaryfile.h ../corelib/io/qtextstream.h ../corelib/io/qurl.h ../corelib/global/qconfig-dist.h ../corelib/global/qconfig-large.h ../corelib/global/qconfig-medium.h ../corelib/global/qconfig-minimal.h ../corelib/global/qconfig-nacl.h ../corelib/global/qconfig-small.h ../corelib/global/qendian.h ../corelib/global/qfeatures.h ../corelib/global/qglobal.h ../corelib/global/qlibraryinfo.h ../corelib/global/qnamespace.h ../corelib/global/qnumeric.h ../corelib/global/qt_windows.h ../corelib/global/qconfig.h ../corelib/codecs/qtextcodec.h ../corelib/codecs/qtextcodecplugin.h ../../include/QtCore/QtCore + SYNCQT.HEADER_CLASSES = ../../include/QtCore/QAbstractEventDispatcher ../../include/QtCore/QModelIndex ../../include/QtCore/QPersistentModelIndex ../../include/QtCore/QModelIndexList ../../include/QtCore/QAbstractItemModel ../../include/QtCore/QAbstractTableModel ../../include/QtCore/QAbstractListModel ../../include/QtCore/QBasicTimer ../../include/QtCore/QCoreApplication ../../include/QtCore/QtCleanUpFunction ../../include/QtCore/QEvent ../../include/QtCore/QTimerEvent ../../include/QtCore/QChildEvent ../../include/QtCore/QCustomEvent ../../include/QtCore/QDynamicPropertyChangeEvent ../../include/QtCore/QEventLoop ../../include/QtCore/QMetaMethod ../../include/QtCore/QMetaEnum ../../include/QtCore/QMetaProperty ../../include/QtCore/QMetaClassInfo ../../include/QtCore/QMetaType ../../include/QtCore/QMetaTypeId ../../include/QtCore/QMetaTypeId2 ../../include/QtCore/QMimeData ../../include/QtCore/QObjectList ../../include/QtCore/QObjectData ../../include/QtCore/QObject ../../include/QtCore/QObjectUserData ../../include/QtCore/QObjectCleanupHandler ../../include/QtCore/QGenericArgument ../../include/QtCore/QGenericReturnArgument ../../include/QtCore/QArgument ../../include/QtCore/QReturnArgument ../../include/QtCore/QMetaObject ../../include/QtCore/QMetaObjectAccessor ../../include/QtCore/QMetaObjectExtraData ../../include/QtCore/QPointer ../../include/QtCore/QSharedMemory ../../include/QtCore/QSignalMapper ../../include/QtCore/QSocketNotifier ../../include/QtCore/QSystemSemaphore ../../include/QtCore/QTimer ../../include/QtCore/QTranslator ../../include/QtCore/QVariant ../../include/QtCore/QVariantList ../../include/QtCore/QVariantMap ../../include/QtCore/QVariantHash ../../include/QtCore/QVariantComparisonHelper ../../include/QtCore/QAbstractAnimation ../../include/QtCore/QAnimationDriver ../../include/QtCore/QAnimationGroup ../../include/QtCore/QParallelAnimationGroup ../../include/QtCore/QPauseAnimation ../../include/QtCore/QPropertyAnimation ../../include/QtCore/QSequentialAnimationGroup ../../include/QtCore/QVariantAnimation ../../include/QtCore/QtAlgorithms ../../include/QtCore/QBitArray ../../include/QtCore/QBitRef ../../include/QtCore/QByteArray ../../include/QtCore/QByteRef ../../include/QtCore/QByteArrayMatcher ../../include/QtCore/QCache ../../include/QtCore/QLatin1Char ../../include/QtCore/QChar ../../include/QtCore/QtContainerFwd ../../include/QtCore/QContiguousCacheData ../../include/QtCore/QContiguousCacheTypedData ../../include/QtCore/QContiguousCache ../../include/QtCore/QCryptographicHash ../../include/QtCore/QDate ../../include/QtCore/QTime ../../include/QtCore/QDateTime ../../include/QtCore/QEasingCurve ../../include/QtCore/QElapsedTimer ../../include/QtCore/QHashData ../../include/QtCore/QHashDummyValue ../../include/QtCore/QHashDummyNode ../../include/QtCore/QHashNode ../../include/QtCore/QHash ../../include/QtCore/QMultiHash ../../include/QtCore/QHashIterator ../../include/QtCore/QMutableHashIterator ../../include/QtCore/QLine ../../include/QtCore/QLineF ../../include/QtCore/QLinkedListData ../../include/QtCore/QLinkedListNode ../../include/QtCore/QLinkedList ../../include/QtCore/QLinkedListIterator ../../include/QtCore/QMutableLinkedListIterator ../../include/QtCore/QListData ../../include/QtCore/QList ../../include/QtCore/QListIterator ../../include/QtCore/QMutableListIterator ../../include/QtCore/QSystemLocale ../../include/QtCore/QLocale ../../include/QtCore/QBBSystemLocaleData ../../include/QtCore/QMapData ../../include/QtCore/QMapNode ../../include/QtCore/QMapPayloadNode ../../include/QtCore/QMap ../../include/QtCore/QMultiMap ../../include/QtCore/QMapIterator ../../include/QtCore/QMutableMapIterator ../../include/QtCore/QMargins ../../include/QtCore/QPair ../../include/QtCore/QPoint ../../include/QtCore/QPointF ../../include/QtCore/QQueue ../../include/QtCore/QRect ../../include/QtCore/QRectF ../../include/QtCore/QRegExp ../../include/QtCore/QScopedPointerDeleter ../../include/QtCore/QScopedPointerArrayDeleter ../../include/QtCore/QScopedPointerPodDeleter ../../include/QtCore/QScopedPointer ../../include/QtCore/QScopedArrayPointer ../../include/QtCore/QScopedValueRollback ../../include/QtCore/QSet ../../include/QtCore/QSetIterator ../../include/QtCore/QMutableSetIterator ../../include/QtCore/QSharedData ../../include/QtCore/QSharedDataPointer ../../include/QtCore/QExplicitlySharedDataPointer ../../include/QtCore/QSharedPointer ../../include/QtCore/QWeakPointer ../../include/QtCore/QSize ../../include/QtCore/QSizeF ../../include/QtCore/QStack ../../include/QtCore/QStdWString ../../include/QtCore/QString ../../include/QtCore/QLatin1String ../../include/QtCore/QCharRef ../../include/QtCore/QConstString ../../include/QtCore/QStringRef ../../include/QtCore/QLatin1Literal ../../include/QtCore/QAbstractConcatenable ../../include/QtCore/QConcatenable ../../include/QtCore/QStringBuilder ../../include/QtCore/QStringListIterator ../../include/QtCore/QMutableStringListIterator ../../include/QtCore/QStringList ../../include/QtCore/QStringMatcher ../../include/QtCore/QTextBoundaryFinder ../../include/QtCore/QTimeLine ../../include/QtCore/QVarLengthArray ../../include/QtCore/QVectorData ../../include/QtCore/QVectorTypedData ../../include/QtCore/QVector ../../include/QtCore/QVectorIterator ../../include/QtCore/QMutableVectorIterator ../../include/QtCore/QFactoryInterface ../../include/QtCore/QLibrary ../../include/QtCore/QtPlugin ../../include/QtCore/QtPluginInstanceFunction ../../include/QtCore/QPluginLoader ../../include/QtCore/QUuid ../../include/QtCore/QXmlStreamStringRef ../../include/QtCore/QXmlStreamAttribute ../../include/QtCore/QXmlStreamAttributes ../../include/QtCore/QXmlStreamNamespaceDeclaration ../../include/QtCore/QXmlStreamNamespaceDeclarations ../../include/QtCore/QXmlStreamNotationDeclaration ../../include/QtCore/QXmlStreamNotationDeclarations ../../include/QtCore/QXmlStreamEntityDeclaration ../../include/QtCore/QXmlStreamEntityDeclarations ../../include/QtCore/QXmlStreamEntityResolver ../../include/QtCore/QXmlStreamReader ../../include/QtCore/QXmlStreamWriter ../../include/QtCore/QAtomicInt ../../include/QtCore/QAtomicPointer ../../include/QtCore/QBasicAtomicInt ../../include/QtCore/QBasicAtomicPointer ../../include/QtCore/QMutex ../../include/QtCore/QMutexLocker ../../include/QtCore/QMutexData ../../include/QtCore/QReadWriteLock ../../include/QtCore/QReadLocker ../../include/QtCore/QWriteLocker ../../include/QtCore/QSemaphore ../../include/QtCore/QThread ../../include/QtCore/QThreadStorageData ../../include/QtCore/QThreadStorage ../../include/QtCore/QWaitCondition ../../include/QtCore/QAbstractState ../../include/QtCore/QAbstractTransition ../../include/QtCore/QEventTransition ../../include/QtCore/QFinalState ../../include/QtCore/QHistoryState ../../include/QtCore/QSignalTransition ../../include/QtCore/QState ../../include/QtCore/QStateMachine ../../include/QtCore/QFuture ../../include/QtCore/QFutureIterator ../../include/QtCore/QMutableFutureIterator ../../include/QtCore/QFutureInterfaceBase ../../include/QtCore/QFutureInterface ../../include/QtCore/QFutureSynchronizer ../../include/QtCore/QFutureWatcherBase ../../include/QtCore/QFutureWatcher ../../include/QtCore/QRunnable ../../include/QtCore/QtConcurrentFilter ../../include/QtCore/QtConcurrentMap ../../include/QtCore/QtConcurrentRun ../../include/QtCore/QThreadPool ../../include/QtCore/QAbstractFileEngine ../../include/QtCore/QAbstractFileEngineHandler ../../include/QtCore/QAbstractFileEngineIterator ../../include/QtCore/QBuffer ../../include/QtCore/QDataStream ../../include/QtCore/QtDebug ../../include/QtCore/QDebug ../../include/QtCore/QNoDebug ../../include/QtCore/QDir ../../include/QtCore/QDirIterator ../../include/QtCore/QFile ../../include/QtCore/QFileInfo ../../include/QtCore/QFileInfoList ../../include/QtCore/QFileInfoListIterator ../../include/QtCore/QFileSystemWatcher ../../include/QtCore/QFSFileEngine ../../include/QtCore/QIODevice ../../include/QtCore/Q_PID ../../include/QtCore/QProcessEnvironment ../../include/QtCore/QProcess ../../include/QtCore/QResource ../../include/QtCore/QSettings ../../include/QtCore/QTemporaryFile ../../include/QtCore/QTextStream ../../include/QtCore/QTextStreamFunction ../../include/QtCore/QTextStreamManipulator ../../include/QtCore/QTS ../../include/QtCore/QTextIStream ../../include/QtCore/QTextOStream ../../include/QtCore/QUrl ../../include/QtCore/QtEndian ../../include/QtCore/QtGlobal ../../include/QtCore/QIntegerForSize ../../include/QtCore/QNoImplicitBoolCast ../../include/QtCore/Q_INT8 ../../include/QtCore/Q_UINT8 ../../include/QtCore/Q_INT16 ../../include/QtCore/Q_UINT16 ../../include/QtCore/Q_INT32 ../../include/QtCore/Q_UINT32 ../../include/QtCore/Q_INT64 ../../include/QtCore/Q_UINT64 ../../include/QtCore/Q_LLONG ../../include/QtCore/Q_ULLONG ../../include/QtCore/Q_LONG ../../include/QtCore/Q_ULONG ../../include/QtCore/QSysInfo ../../include/QtCore/QtMsgHandler ../../include/QtCore/QGlobalStatic ../../include/QtCore/QGlobalStaticDeleter ../../include/QtCore/QBool ../../include/QtCore/QTypeInfo ../../include/QtCore/QFlag ../../include/QtCore/QIncompatibleFlag ../../include/QtCore/QFlags ../../include/QtCore/QForeachContainer ../../include/QtCore/QForeachContainerBase ../../include/QtCore/QLibraryInfo ../../include/QtCore/Qt ../../include/QtCore/QInternal ../../include/QtCore/QCOORD ../../include/QtCore/QtConfig ../../include/QtCore/QTextCodec ../../include/QtCore/QTextEncoder ../../include/QtCore/QTextDecoder ../../include/QtCore/QTextCodecFactoryInterface ../../include/QtCore/QTextCodecPlugin + SYNCQT.PRIVATE_HEADER_FILES = ../corelib/kernel/qabstracteventdispatcher_p.h ../corelib/kernel/qabstractitemmodel_p.h ../corelib/kernel/qcore_mac_p.h ../corelib/kernel/qcore_symbian_p.h ../corelib/kernel/qcore_unix_p.h ../corelib/kernel/qcoreapplication_p.h ../corelib/kernel/qcorecmdlineargs_p.h ../corelib/kernel/qcoreglobaldata_p.h ../corelib/kernel/qcrashhandler_p.h ../corelib/kernel/qeventdispatcher_blackberry_p.h ../corelib/kernel/qeventdispatcher_glib_p.h ../corelib/kernel/qeventdispatcher_symbian_p.h ../corelib/kernel/qeventdispatcher_unix_p.h ../corelib/kernel/qeventdispatcher_win_p.h ../corelib/kernel/qfunctions_p.h ../corelib/kernel/qmetaobject_p.h ../corelib/kernel/qobject_p.h ../corelib/kernel/qsharedmemory_p.h ../corelib/kernel/qsystemerror_p.h ../corelib/kernel/qsystemsemaphore_p.h ../corelib/kernel/qtranslator_p.h ../corelib/kernel/qvariant_p.h ../corelib/kernel/qwineventnotifier_p.h ../corelib/animation/qabstractanimation_p.h ../corelib/animation/qanimationgroup_p.h ../corelib/animation/qparallelanimationgroup_p.h ../corelib/animation/qpropertyanimation_p.h ../corelib/animation/qsequentialanimationgroup_p.h ../corelib/animation/qvariantanimation_p.h ../corelib/tools/qbytedata_p.h ../corelib/tools/qdatetime_p.h ../corelib/tools/qharfbuzz_p.h ../corelib/tools/qlocale_data_p.h ../corelib/tools/qlocale_p.h ../corelib/tools/qlocale_tools_p.h ../corelib/tools/qpodlist_p.h ../corelib/tools/qringbuffer_p.h ../corelib/tools/qscopedpointer_p.h ../corelib/tools/qsimd_p.h ../corelib/tools/qtools_p.h ../corelib/tools/qunicodetables_p.h ../corelib/plugin/qelfparser_p.h ../corelib/plugin/qfactoryloader_p.h ../corelib/plugin/qlibrary_p.h ../corelib/plugin/qsystemlibrary_p.h ../corelib/xml/qxmlstream_p.h ../corelib/xml/qxmlutils_p.h ../corelib/thread/qmutex_p.h ../corelib/thread/qmutexpool_p.h ../corelib/thread/qorderedmutexlocker_p.h ../corelib/thread/qreadwritelock_p.h ../corelib/thread/qthread_p.h ../corelib/statemachine/qabstractstate_p.h ../corelib/statemachine/qabstracttransition_p.h ../corelib/statemachine/qeventtransition_p.h ../corelib/statemachine/qhistorystate_p.h ../corelib/statemachine/qsignaleventgenerator_p.h ../corelib/statemachine/qsignaltransition_p.h ../corelib/statemachine/qstate_p.h ../corelib/statemachine/qstatemachine_p.h ../corelib/concurrent/qfutureinterface_p.h ../corelib/concurrent/qfuturewatcher_p.h ../corelib/concurrent/qthreadpool_p.h ../corelib/io/qabstractfileengine_p.h ../corelib/io/qdatastream_p.h ../corelib/io/qdataurl_p.h ../corelib/io/qdir_p.h ../corelib/io/qfile_p.h ../corelib/io/qfileinfo_p.h ../corelib/io/qfilesystemengine_p.h ../corelib/io/qfilesystementry_p.h ../corelib/io/qfilesystemiterator_p.h ../corelib/io/qfilesystemmetadata_p.h ../corelib/io/qfilesystemwatcher_dnotify_p.h ../corelib/io/qfilesystemwatcher_fsevents_p.h ../corelib/io/qfilesystemwatcher_inotify_p.h ../corelib/io/qfilesystemwatcher_kqueue_p.h ../corelib/io/qfilesystemwatcher_p.h ../corelib/io/qfilesystemwatcher_symbian_p.h ../corelib/io/qfilesystemwatcher_win_p.h ../corelib/io/qfsfileengine_iterator_p.h ../corelib/io/qfsfileengine_p.h ../corelib/io/qiodevice_p.h ../corelib/io/qnoncontiguousbytedevice_p.h ../corelib/io/qprocess_p.h ../corelib/io/qresource_iterator_p.h ../corelib/io/qresource_p.h ../corelib/io/qsettings_p.h ../corelib/io/qtldurl_p.h ../corelib/io/qurltlds_p.h ../corelib/io/qwindowspipewriter_p.h ../corelib/global/qnumeric_p.h ../corelib/global/qt_pch.h ../corelib/codecs/qfontlaocodec_p.h ../corelib/codecs/qiconvcodec_p.h ../corelib/codecs/qisciicodec_p.h ../corelib/codecs/qlatincodec_p.h ../corelib/codecs/qsimplecodec_p.h ../corelib/codecs/qtextcodec_p.h ../corelib/codecs/qtsciicodec_p.h ../corelib/codecs/qutfcodec_p.h +diff -up qt-everywhere-opensource-src-4.8.7/include/QtCore/qatomic_aarch64.h.aarch64 qt-everywhere-opensource-src-4.8.7/include/QtCore/qatomic_aarch64.h +--- qt-everywhere-opensource-src-4.8.7/include/QtCore/qatomic_aarch64.h.aarch64 2015-05-08 21:48:32.715057744 -0500 ++++ qt-everywhere-opensource-src-4.8.7/include/QtCore/qatomic_aarch64.h 2015-05-08 21:48:32.715057744 -0500 +@@ -0,0 +1 @@ ++#include "../../src/corelib/arch/qatomic_aarch64.h" +diff -up qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri.aarch64 qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri +--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri.aarch64 2015-05-07 09:14:47.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri 2015-05-08 21:48:33.268061013 -0500 +@@ -66,6 +66,12 @@ contains(JAVASCRIPTCORE_JIT,no) { + } + } + ++# Hack around AARCH64 fail wrt JSValue.h ++equals(QT_ARCH, aarch64) { ++ message("JavaScriptCore aarch64 hack: -fpermissive") ++ QMAKE_CXXFLAGS += -fpermissive ++} ++ + wince* { + INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/ce-compat + SOURCES += $$QT_SOURCE_TREE/src/3rdparty/ce-compat/ce_time.c +diff -up qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri.aarch64 qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri +--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri.aarch64 2015-05-07 09:14:45.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri 2015-05-08 21:48:33.268061013 -0500 +@@ -63,6 +63,12 @@ contains (CONFIG, text_breaking_with_icu + DEFINES += WTF_USE_QT_ICU_TEXT_BREAKING=1 + } + ++# Hack around AARCH64 fail wrt JSValue.h ++equals(QT_ARCH, aarch64) { ++ message("JavaScriptCore aarch64 hack: -fpermissive") ++ QMAKE_CXXFLAGS += -fpermissive ++} ++ + wince* { + INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/ce-compat + INCLUDEPATH += $$PWD/../JavaScriptCore/os-win32 +diff -up qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h.aarch64 qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h +--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h.aarch64 2015-05-07 09:14:45.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h 2015-05-08 21:48:33.269061019 -0500 +@@ -369,7 +369,16 @@ + + #endif /* ARM */ + +-#if CPU(ARM) || CPU(MIPS) || CPU(SH4) ++/* CPU(AARCH64) - AArch64 */ ++#if defined(__aarch64__) ++#define WTF_CPU_AARCH64 1 ++#if defined(__AARCH64EB__) ++#define WTF_CPU_BIG_ENDIAN 1 ++#endif ++#endif ++ ++/* Not sure about this one, qt5-qtwebkit doesn't include it -- rex */ ++#if CPU(ARM) || CPU(MIPS) || CPU(SH4) || CPU(AARCH64) + #define WTF_CPU_NEEDS_ALIGNED_ACCESS 1 + #endif + +@@ -1003,7 +1012,7 @@ + || CPU(SPARC64) \ + || CPU(S390X) \ + || CPU(PPC64) \ +- || CPU(MIPS64) ++ || CPU(MIPS64) || CPU(AARCH64) + #define WTF_USE_JSVALUE64 1 + #else + #define WTF_USE_JSVALUE32_64 1 +diff -up qt-everywhere-opensource-src-4.8.7/src/corelib/arch/aarch64/qatomic_aarch64.cpp.aarch64 qt-everywhere-opensource-src-4.8.7/src/corelib/arch/aarch64/qatomic_aarch64.cpp +--- qt-everywhere-opensource-src-4.8.7/src/corelib/arch/aarch64/qatomic_aarch64.cpp.aarch64 2015-05-08 21:48:33.269061019 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/corelib/arch/aarch64/qatomic_aarch64.cpp 2015-05-08 21:48:33.269061019 -0500 +@@ -0,0 +1,70 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2012, 2013 Digia Plc and/or its subsidiary(-ies). ++** Contact: http://www.qt-project.org/legal ++** ++** This file is part of the QtCore module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** 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 Digia. For licensing terms and ++** conditions see http://qt.digia.com/licensing. For further information ++** use the contact form at http://qt.digia.com/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 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Digia gives you certain additional ++** rights. These rights are described in the Digia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU ++** General Public License version 3.0 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU General Public License version 3.0 requirements will be ++** met: http://www.gnu.org/copyleft/gpl.html. ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#include ++ ++#include ++#ifdef _POSIX_PRIORITY_SCHEDULING ++# include ++#endif ++#include ++ ++QT_BEGIN_NAMESPACE ++ ++QT_USE_NAMESPACE ++ ++Q_CORE_EXPORT void qt_atomic_yield(int *count) ++{ ++#ifdef _POSIX_PRIORITY_SCHEDULING ++ if((*count)++ < 50) { ++ sched_yield(); ++ } else ++#endif ++ { ++ struct timespec tm; ++ tm.tv_sec = 0; ++ tm.tv_nsec = 2000001; ++ nanosleep(&tm, NULL); ++ *count = 0; ++ } ++} ++ ++QT_END_NAMESPACE +diff -up qt-everywhere-opensource-src-4.8.7/src/corelib/arch/arch.pri.aarch64 qt-everywhere-opensource-src-4.8.7/src/corelib/arch/arch.pri +--- qt-everywhere-opensource-src-4.8.7/src/corelib/arch/arch.pri.aarch64 2015-05-07 09:14:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/corelib/arch/arch.pri 2015-05-08 21:48:33.270061025 -0500 +@@ -31,7 +31,9 @@ integrity:HEADERS += arch/qatomic_integr + arch/qatomic_s390.h \ + arch/qatomic_x86_64.h \ + arch/qatomic_sh.h \ +- arch/qatomic_sh4a.h ++ arch/qatomic_sh4a.h \ ++ arch/qatomic_aarch64.h \ ++ + + QT_ARCH_CPP = $$QT_SOURCE_TREE/src/corelib/arch/$$QT_ARCH + DEPENDPATH += $$QT_ARCH_CPP +diff -up qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_aarch64.h.aarch64 qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_aarch64.h +--- qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_aarch64.h.aarch64 2015-05-08 21:48:33.270061025 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_aarch64.h 2015-05-08 21:48:33.270061025 -0500 +@@ -0,0 +1,335 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). ++** Contact: http://www.qt-project.org/legal ++** ++** This file is part of the QtCore module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** 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 Digia. For licensing terms and ++** conditions see http://qt.digia.com/licensing. For further information ++** use the contact form at http://qt.digia.com/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 as published by the Free Software ++** Foundation and appearing in the file LICENSE.LGPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU Lesser General Public License version 2.1 requirements ++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Digia gives you certain additional ++** rights. These rights are described in the Digia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU ++** General Public License version 3.0 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. Please review the following information to ++** ensure the GNU General Public License version 3.0 requirements will be ++** met: http://www.gnu.org/copyleft/gpl.html. ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#ifndef QATOMIC_AARCH64_H ++#define QATOMIC_AARCH64_H ++ ++QT_BEGIN_HEADER ++ ++QT_BEGIN_NAMESPACE ++ ++#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE ++ ++inline bool QBasicAtomicInt::isReferenceCountingNative() ++{ return true; } ++inline bool QBasicAtomicInt::isReferenceCountingWaitFree() ++{ return false; } ++ ++#define Q_ATOMIC_INT_TEST_AND_SET_IS_ALWAYS_NATIVE ++ ++inline bool QBasicAtomicInt::isTestAndSetNative() ++{ return true; } ++inline bool QBasicAtomicInt::isTestAndSetWaitFree() ++{ return false; } ++ ++#define Q_ATOMIC_INT_FETCH_AND_STORE_IS_ALWAYS_NATIVE ++ ++inline bool QBasicAtomicInt::isFetchAndStoreNative() ++{ return true; } ++inline bool QBasicAtomicInt::isFetchAndStoreWaitFree() ++{ return false; } ++ ++#define Q_ATOMIC_INT_FETCH_AND_ADD_IS_ALWAYS_NATIVE ++ ++inline bool QBasicAtomicInt::isFetchAndAddNative() ++{ return true; } ++inline bool QBasicAtomicInt::isFetchAndAddWaitFree() ++{ return false; } ++ ++#define Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE ++ ++template ++Q_INLINE_TEMPLATE bool QBasicAtomicPointer::isTestAndSetNative() ++{ return true; } ++template ++Q_INLINE_TEMPLATE bool QBasicAtomicPointer::isTestAndSetWaitFree() ++{ return false; } ++ ++#define Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE ++ ++template ++Q_INLINE_TEMPLATE bool QBasicAtomicPointer::isFetchAndStoreNative() ++{ return true; } ++template ++Q_INLINE_TEMPLATE bool QBasicAtomicPointer::isFetchAndStoreWaitFree() ++{ return false; } ++ ++#define Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_ALWAYS_NATIVE ++ ++template ++Q_INLINE_TEMPLATE bool QBasicAtomicPointer::isFetchAndAddNative() ++{ return true; } ++template ++Q_INLINE_TEMPLATE bool QBasicAtomicPointer::isFetchAndAddWaitFree() ++{ return false; } ++ ++#ifndef Q_DATA_MEMORY_BARRIER ++# define Q_DATA_MEMORY_BARRIER asm volatile("dmb sy\n":::"memory") ++#endif ++#ifndef Q_COMPILER_MEMORY_BARRIER ++# define Q_COMPILER_MEMORY_BARRIER asm volatile("":::"memory") ++#endif ++ ++inline bool QBasicAtomicInt::ref() ++{ ++ int newValue; ++ ++ Q_COMPILER_MEMORY_BARRIER; ++ newValue = __atomic_add_fetch(&_q_value, 1, __ATOMIC_ACQ_REL); ++ Q_COMPILER_MEMORY_BARRIER; ++ ++ return newValue != 0; ++} ++ ++inline bool QBasicAtomicInt::deref() ++{ ++ int newValue; ++ ++ Q_COMPILER_MEMORY_BARRIER; ++ newValue = __atomic_sub_fetch(&_q_value, 1, __ATOMIC_ACQ_REL); ++ Q_COMPILER_MEMORY_BARRIER; ++ ++ return newValue != 0; ++} ++ ++inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue) ++{ ++ bool val; ++ ++ Q_COMPILER_MEMORY_BARRIER; ++ val = __atomic_compare_exchange_n (&_q_value, &expectedValue, newValue, ++ false, __ATOMIC_RELAXED, __ATOMIC_RELAXED); ++ Q_COMPILER_MEMORY_BARRIER; ++ return val; ++} ++ ++inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue) ++{ ++ int val; ++ Q_COMPILER_MEMORY_BARRIER; ++ val = __atomic_exchange_n(&_q_value, newValue, __ATOMIC_RELAXED); ++ Q_COMPILER_MEMORY_BARRIER; ++ return val; ++} ++ ++inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd) ++{ ++ int val; ++ Q_COMPILER_MEMORY_BARRIER; ++ val = __atomic_fetch_add(&_q_value, valueToAdd, __ATOMIC_RELAXED); ++ Q_COMPILER_MEMORY_BARRIER; ++ return val; ++} ++ ++template ++Q_INLINE_TEMPLATE bool QBasicAtomicPointer::testAndSetRelaxed(T *expectedValue, T *newValue) ++{ ++ bool val; ++ Q_COMPILER_MEMORY_BARRIER; ++ val = __atomic_compare_exchange_n (&_q_value, &expectedValue, newValue, ++ false, __ATOMIC_RELAXED, __ATOMIC_RELAXED); ++ Q_COMPILER_MEMORY_BARRIER; ++ return val; ++} ++ ++template ++Q_INLINE_TEMPLATE T *QBasicAtomicPointer::fetchAndStoreRelaxed(T *newValue) ++{ ++ T *val; ++ Q_COMPILER_MEMORY_BARRIER; ++ val = __atomic_exchange_n(&_q_value, newValue, __ATOMIC_RELAXED); ++ Q_COMPILER_MEMORY_BARRIER; ++ return val; ++} ++ ++template ++Q_INLINE_TEMPLATE T *QBasicAtomicPointer::fetchAndAddRelaxed(qptrdiff valueToAdd) ++{ ++ T *val; ++ Q_COMPILER_MEMORY_BARRIER; ++ val = __atomic_fetch_add(&_q_value, valueToAdd, __ATOMIC_RELAXED); ++ Q_COMPILER_MEMORY_BARRIER; ++ return val; ++} ++ ++inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue) ++{ ++ bool returnValue = testAndSetRelaxed(expectedValue, newValue); ++ Q_DATA_MEMORY_BARRIER; ++ return returnValue; ++} ++ ++inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue) ++{ ++ Q_DATA_MEMORY_BARRIER; ++ return testAndSetRelaxed(expectedValue, newValue); ++} ++ ++inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue) ++{ ++ Q_DATA_MEMORY_BARRIER; ++ bool returnValue = testAndSetRelaxed(expectedValue, newValue); ++ Q_COMPILER_MEMORY_BARRIER; ++ return returnValue; ++} ++ ++inline int QBasicAtomicInt::fetchAndStoreAcquire(int newValue) ++{ ++ int returnValue = fetchAndStoreRelaxed(newValue); ++ Q_DATA_MEMORY_BARRIER; ++ return returnValue; ++} ++ ++inline int QBasicAtomicInt::fetchAndStoreRelease(int newValue) ++{ ++ Q_DATA_MEMORY_BARRIER; ++ return fetchAndStoreRelaxed(newValue); ++} ++ ++inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue) ++{ ++ Q_DATA_MEMORY_BARRIER; ++ int returnValue = fetchAndStoreRelaxed(newValue); ++ Q_COMPILER_MEMORY_BARRIER; ++ return returnValue; ++} ++ ++inline int QBasicAtomicInt::fetchAndAddAcquire(int valueToAdd) ++{ ++ int returnValue = fetchAndAddRelaxed(valueToAdd); ++ Q_DATA_MEMORY_BARRIER; ++ return returnValue; ++} ++ ++inline int QBasicAtomicInt::fetchAndAddRelease(int valueToAdd) ++{ ++ Q_DATA_MEMORY_BARRIER; ++ return fetchAndAddRelaxed(valueToAdd); ++} ++ ++inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd) ++{ ++ Q_DATA_MEMORY_BARRIER; ++ int returnValue = fetchAndAddRelaxed(valueToAdd); ++ Q_COMPILER_MEMORY_BARRIER; ++ return returnValue; ++} ++ ++template ++Q_INLINE_TEMPLATE bool QBasicAtomicPointer::testAndSetAcquire(T *expectedValue, T *newValue) ++{ ++ bool returnValue = testAndSetRelaxed(expectedValue, newValue); ++ Q_DATA_MEMORY_BARRIER; ++ return returnValue; ++} ++ ++template ++Q_INLINE_TEMPLATE bool QBasicAtomicPointer::testAndSetRelease(T *expectedValue, T *newValue) ++{ ++ Q_DATA_MEMORY_BARRIER; ++ return testAndSetRelaxed(expectedValue, newValue); ++} ++ ++template ++Q_INLINE_TEMPLATE bool QBasicAtomicPointer::testAndSetOrdered(T *expectedValue, T *newValue) ++{ ++ Q_DATA_MEMORY_BARRIER; ++ bool returnValue = testAndSetAcquire(expectedValue, newValue); ++ Q_COMPILER_MEMORY_BARRIER; ++ return returnValue; ++} ++ ++template ++Q_INLINE_TEMPLATE T *QBasicAtomicPointer::fetchAndStoreAcquire(T *newValue) ++{ ++ T *returnValue = fetchAndStoreRelaxed(newValue); ++ Q_DATA_MEMORY_BARRIER; ++ return returnValue; ++} ++ ++template ++Q_INLINE_TEMPLATE T *QBasicAtomicPointer::fetchAndStoreRelease(T *newValue) ++{ ++ Q_DATA_MEMORY_BARRIER; ++ return fetchAndStoreRelaxed(newValue); ++} ++ ++template ++Q_INLINE_TEMPLATE T *QBasicAtomicPointer::fetchAndStoreOrdered(T *newValue) ++{ ++ Q_DATA_MEMORY_BARRIER; ++ T *returnValue = fetchAndStoreRelaxed(newValue); ++ Q_COMPILER_MEMORY_BARRIER; ++ return returnValue; ++} ++ ++template ++Q_INLINE_TEMPLATE T *QBasicAtomicPointer::fetchAndAddAcquire(qptrdiff valueToAdd) ++{ ++ T *returnValue = fetchAndAddRelaxed(valueToAdd); ++ Q_DATA_MEMORY_BARRIER; ++ return returnValue; ++} ++ ++template ++Q_INLINE_TEMPLATE T *QBasicAtomicPointer::fetchAndAddRelease(qptrdiff valueToAdd) ++{ ++ Q_DATA_MEMORY_BARRIER; ++ return fetchAndAddRelaxed(valueToAdd); ++} ++ ++template ++Q_INLINE_TEMPLATE T *QBasicAtomicPointer::fetchAndAddOrdered(qptrdiff valueToAdd) ++{ ++ Q_DATA_MEMORY_BARRIER; ++ T *returnValue = fetchAndAddRelaxed(valueToAdd); ++ Q_COMPILER_MEMORY_BARRIER; ++ return returnValue; ++} ++ ++#undef Q_DATA_MEMORY_BARRIER ++#undef Q_COMPILER_MEMORY_BARRIER ++ ++QT_END_NAMESPACE ++ ++QT_END_HEADER ++ ++#endif // QATOMIC_AARCH64_H +diff -up qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_arch.h.aarch64 qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_arch.h +--- qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_arch.h.aarch64 2015-05-07 09:14:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_arch.h 2015-05-08 21:48:33.271061031 -0500 +@@ -94,6 +94,8 @@ QT_BEGIN_HEADER + # include "QtCore/qatomic_sh4a.h" + #elif defined(QT_ARCH_NACL) + # include "QtCore/qatomic_generic.h" ++#elif defined(QT_ARCH_AARCH64) ++# include "QtCore/qatomic_aarch64.h" + #else + # error "Qt has not been ported to this architecture" + #endif diff --git a/SOURCES/qt-cupsEnumDests.patch b/SOURCES/qt-cupsEnumDests.patch new file mode 100644 index 0000000..7d59f22 --- /dev/null +++ b/SOURCES/qt-cupsEnumDests.patch @@ -0,0 +1,238 @@ +diff -up qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups.cpp.cupsEnumDests qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups.cpp +--- qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups.cpp.cupsEnumDests 2012-11-23 10:09:53.000000000 +0000 ++++ qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups.cpp 2013-07-03 15:30:06.232936976 +0100 +@@ -50,9 +50,19 @@ + + QT_BEGIN_NAMESPACE + ++typedef int (*CupsEnumDests)(unsigned flags, int msec, int *cancel, ++ cups_ptype_t type, cups_ptype_t mask, ++ cups_dest_cb_t cb, void *user_data); ++typedef http_t * (*CupsConnectDest)(cups_dest_t *dest, unsigned flags, ++ int msec, int *cancel, ++ char *resource, size_t resourcesize, ++ cups_dest_cb_t cb, void *user_data); ++typedef int (*CupsCopyDest)(cups_dest_t *dest, int num_dests, ++ cups_dest_t **dests); + typedef int (*CupsGetDests)(cups_dest_t **dests); + typedef void (*CupsFreeDests)(int num_dests, cups_dest_t *dests); + typedef const char* (*CupsGetPPD)(const char *printer); ++typedef const char* (*CupsGetPPD2)(http_t *http, const char *printer); + typedef int (*CupsMarkOptions)(ppd_file_t *ppd, int num_options, cups_option_t *options); + typedef ppd_file_t* (*PPDOpenFile)(const char *filename); + typedef void (*PPDMarkDefaults)(ppd_file_t *ppd); +@@ -66,12 +76,24 @@ typedef const char* (*CupsLangEncoding)( + typedef int (*CupsAddOption)(const char *name, const char *value, int num_options, cups_option_t **options); + typedef int (*CupsTempFd)(char *name, int len); + typedef int (*CupsPrintFile)(const char * name, const char * filename, const char * title, int num_options, cups_option_t * options); ++typedef int (*CupsPrintFile2)(http_t *http, const char *name, const char *filename, const char *title, int num_options, cups_option_t *options); ++ ++typedef struct ++{ ++ cups_dest_t *printers; ++ int num_printers; ++} EnumDestsContext; + + static bool cupsLoaded = false; + static int qt_cups_num_printers = 0; ++static cups_dest_t *qt_cups_printers = 0; ++static CupsEnumDests _cupsEnumDests = 0; ++static CupsConnectDest _cupsConnectDest = 0; ++static CupsCopyDest _cupsCopyDest = 0; + static CupsGetDests _cupsGetDests = 0; + static CupsFreeDests _cupsFreeDests = 0; + static CupsGetPPD _cupsGetPPD = 0; ++static CupsGetPPD2 _cupsGetPPD2 = 0; + static PPDOpenFile _ppdOpenFile = 0; + static PPDMarkDefaults _ppdMarkDefaults = 0; + static PPDClose _ppdClose = 0; +@@ -84,14 +106,35 @@ static CupsLangEncoding _cupsLangEncodin + static CupsAddOption _cupsAddOption = 0; + static CupsTempFd _cupsTempFd = 0; + static CupsPrintFile _cupsPrintFile = 0; ++static CupsPrintFile2 _cupsPrintFile2 = 0; ++ ++static int enum_dest_cb (void *user_data, unsigned flags, cups_dest_t *dest) ++{ ++ EnumDestsContext *context = (EnumDestsContext *) user_data; ++ ++ if ((flags & (CUPS_DEST_FLAGS_UNCONNECTED | ++ CUPS_DEST_FLAGS_REMOVED | ++ CUPS_DEST_FLAGS_ERROR | ++ CUPS_DEST_FLAGS_RESOLVING | ++ CUPS_DEST_FLAGS_CONNECTING | ++ CUPS_DEST_FLAGS_CANCELED)) == 0) ++ context->num_printers = _cupsCopyDest (dest, context->num_printers, ++ &context->printers); ++ ++ return 1; ++} + + static void resolveCups() + { + QLibrary cupsLib(QLatin1String("cups"), 2); + if(cupsLib.load()) { ++ _cupsEnumDests = (CupsEnumDests) cupsLib.resolve("cupsEnumDests"); ++ _cupsConnectDest = (CupsConnectDest) cupsLib.resolve("cupsConnectDest"); ++ _cupsCopyDest = (CupsCopyDest) cupsLib.resolve("cupsCopyDest"); + _cupsGetDests = (CupsGetDests) cupsLib.resolve("cupsGetDests"); + _cupsFreeDests = (CupsFreeDests) cupsLib.resolve("cupsFreeDests"); + _cupsGetPPD = (CupsGetPPD) cupsLib.resolve("cupsGetPPD"); ++ _cupsGetPPD2 = (CupsGetPPD2) cupsLib.resolve("cupsGetPPD2"); + _cupsLangGet = (CupsLangGet) cupsLib.resolve("cupsLangGet"); + _cupsLangEncoding = (CupsLangEncoding) cupsLib.resolve("cupsLangEncoding"); + _ppdOpenFile = (PPDOpenFile) cupsLib.resolve("ppdOpenFile"); +@@ -104,14 +147,27 @@ static void resolveCups() + _cupsAddOption = (CupsAddOption) cupsLib.resolve("cupsAddOption"); + _cupsTempFd = (CupsTempFd) cupsLib.resolve("cupsTempFd"); + _cupsPrintFile = (CupsPrintFile) cupsLib.resolve("cupsPrintFile"); ++ _cupsPrintFile2 = (CupsPrintFile2) cupsLib.resolve("cupsPrintFile2"); + +- if (_cupsGetDests && _cupsFreeDests) { +- cups_dest_t *printers; ++ if (_cupsEnumDests && _cupsCopyDest && ++ _cupsConnectDest && _cupsGetPPD2 && ++ _cupsPrintFile2) { ++ EnumDestsContext context; ++ context.printers = 0; ++ context.num_printers = 0; ++ _cupsEnumDests(0, -1, 0, 0, 0, ++ enum_dest_cb, &context); ++ ++ qt_cups_printers = context.printers; ++ qt_cups_num_printers = context.num_printers; ++ } else if (_cupsGetDests && _cupsFreeDests) { ++ cups_dest_t *printers; + int num_printers = _cupsGetDests(&printers); +- if (num_printers) +- _cupsFreeDests(num_printers, printers); +- qt_cups_num_printers = num_printers; +- } ++ ++ if (num_printers) ++ _cupsFreeDests(num_printers, printers); ++ qt_cups_num_printers = num_printers; ++ } + } + cupsLoaded = true; + } +@@ -134,7 +190,15 @@ QCUPSSupport::QCUPSSupport() + return; + + // Update the available printer count +- qt_cups_num_printers = prnCount = _cupsGetDests(&printers); ++ if (qt_cups_printers && _cupsCopyDest) { ++ int i; ++ for (i = 0; i < qt_cups_num_printers; ++i) { ++ prnCount = _cupsCopyDest (&qt_cups_printers[i], ++ prnCount, ++ &printers); ++ } ++ } else ++ qt_cups_num_printers = prnCount = _cupsGetDests(&printers); + + for (int i = 0; i < prnCount; ++i) { + if (printers[i].is_default) { +@@ -188,7 +252,19 @@ const ppd_file_t* QCUPSSupport::setCurre + currPPD = 0; + page_sizes = 0; + +- const char *ppdFile = _cupsGetPPD(printers[index].name); ++ const char *ppdFile = 0; ++ if (_cupsConnectDest && _cupsGetPPD2) { ++ char resource[HTTP_MAX_URI]; ++ http_t *http = _cupsConnectDest (&printers[index], 0, -1, 0, ++ resource, sizeof (resource), ++ 0, 0); ++ if (http) { ++ char *name = strrchr (resource, '/'); ++ if (name) ++ ppdFile = _cupsGetPPD2 (http, ++name); ++ } ++ } else ++ ppdFile = _cupsGetPPD(printers[index].name); + + if (!ppdFile) + return 0; +@@ -343,7 +419,29 @@ bool QCUPSSupport::printerHasPPD(const c + { + if (!isAvailable()) + return false; +- const char *ppdFile = _cupsGetPPD(printerName); ++ ++ const char *ppdFile = 0; ++ if (_cupsConnectDest && _cupsGetPPD2) { ++ int i; ++ for (i = 0; i < prnCount; ++i) ++ if (!strcmp (printers[i].name, printerName)) ++ break; ++ ++ if (i == prnCount) ++ return false; ++ ++ char resource[HTTP_MAX_URI]; ++ http_t *http = _cupsConnectDest (&printers[i], 0, -1, 0, ++ resource, sizeof (resource), ++ 0, 0); ++ if (http) { ++ char *name = strrchr (resource, '/'); ++ if (name) ++ ppdFile = _cupsGetPPD2 (http, ++name); ++ } ++ } else ++ ppdFile = _cupsGetPPD(printerName); ++ + if (ppdFile) + unlink(ppdFile); + return (ppdFile != 0); +@@ -394,6 +492,26 @@ QPair QCUPSSupport::tempFd + int QCUPSSupport::printFile(const char * printerName, const char * filename, const char * title, + int num_options, cups_option_t * options) + { ++ if (_cupsConnectDest && _cupsPrintFile2) { ++ int i; ++ for (i = 0; i < prnCount; ++i) ++ if (!strcmp (printers[i].name, printerName)) ++ break; ++ ++ if (i != prnCount) { ++ char resource[HTTP_MAX_URI]; ++ http_t *http = _cupsConnectDest (&printers[i], 0, -1, 0, ++ resource, sizeof (resource), ++ 0, 0); ++ if (http) { ++ char *name = strrchr (resource, '/'); ++ if (name) ++ return _cupsPrintFile2 (http, ++name, filename, title, ++ num_options, options); ++ } ++ } ++ } ++ + return _cupsPrintFile(printerName, filename, title, num_options, options); + } + +diff -up qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups_p.h.cupsEnumDests qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups_p.h +--- qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups_p.h.cupsEnumDests 2012-11-23 10:09:53.000000000 +0000 ++++ qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups_p.h 2013-07-03 15:27:24.733343017 +0100 +@@ -92,7 +92,7 @@ public: + + QStringList options() const; + +- static bool printerHasPPD(const char *printerName); ++ bool printerHasPPD(const char *printerName); + + QString unicodeString(const char *s); + +diff -up qt-everywhere-opensource-src-4.8.4/src/gui/painting/qprinter.cpp.cupsEnumDests qt-everywhere-opensource-src-4.8.4/src/gui/painting/qprinter.cpp +--- qt-everywhere-opensource-src-4.8.4/src/gui/painting/qprinter.cpp.cupsEnumDests 2013-07-03 15:27:24.531342277 +0100 ++++ qt-everywhere-opensource-src-4.8.4/src/gui/painting/qprinter.cpp 2013-07-03 15:27:24.733343017 +0100 +@@ -844,7 +844,7 @@ void QPrinter::setPrinterName(const QStr + if(d->use_default_engine + && d->outputFormat == QPrinter::NativeFormat) { + if (QCUPSSupport::cupsVersion() >= 10200 +- && QCUPSSupport::printerHasPPD(name.toLocal8Bit().constData())) ++ && QCUPSSupport().printerHasPPD(name.toLocal8Bit().constData())) + setOutputFormat(QPrinter::PdfFormat); + else + setOutputFormat(QPrinter::PostScriptFormat); diff --git a/SOURCES/qt-everywhere-opensource-src-4.6.2-cups.patch b/SOURCES/qt-everywhere-opensource-src-4.6.2-cups.patch new file mode 100644 index 0000000..e0305e1 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.6.2-cups.patch @@ -0,0 +1,84 @@ +diff -ur qt-everywhere-opensource-src-4.6.2/src/gui/dialogs/qprintdialog_unix.cpp qt-everywhere-opensource-src-4.6.2-cups/src/gui/dialogs/qprintdialog_unix.cpp +--- qt-everywhere-opensource-src-4.6.2/src/gui/dialogs/qprintdialog_unix.cpp 2010-02-11 16:55:22.000000000 +0100 ++++ qt-everywhere-opensource-src-4.6.2-cups/src/gui/dialogs/qprintdialog_unix.cpp 2010-02-28 04:34:16.000000000 +0100 +@@ -569,6 +569,32 @@ + void QPrintDialogPrivate::selectPrinter(QCUPSSupport *cups) + { + options.duplex->setEnabled(cups && cups->ppdOption("Duplex")); ++ ++ if (cups) { ++ const ppd_option_t* duplex = cups->ppdOption("Duplex"); ++ if (duplex) { ++ // copy default ppd duplex to qt dialog ++ if (qstrcmp(duplex->defchoice, "DuplexTumble") == 0) ++ options.duplexShort->setChecked(true); ++ else if (qstrcmp(duplex->defchoice, "DuplexNoTumble") == 0) ++ options.duplexLong->setChecked(true); ++ else ++ options.noDuplex->setChecked(true); ++ } ++ ++ if (cups->currentPPD()) { ++ // set default color ++ if (cups->currentPPD()->color_device) ++ options.color->setChecked(true); ++ else ++ options.grayscale->setChecked(true); ++ } ++ ++ // set collation ++ const ppd_option_t *collate = cups->ppdOption("Collate"); ++ if (collate) ++ options.collate->setChecked(qstrcmp(collate->defchoice, "True")==0); ++ } + } + #endif + +diff -ur qt-everywhere-opensource-src-4.6.2/src/gui/painting/qprinter.cpp qt-everywhere-opensource-src-4.6.2-cups/src/gui/painting/qprinter.cpp +--- qt-everywhere-opensource-src-4.6.2/src/gui/painting/qprinter.cpp 2010-02-11 16:55:22.000000000 +0100 ++++ qt-everywhere-opensource-src-4.6.2-cups/src/gui/painting/qprinter.cpp 2010-02-28 04:55:15.000000000 +0100 +@@ -627,6 +627,44 @@ + && d_ptr->paintEngine->type() != QPaintEngine::MacPrinter) { + setOutputFormat(QPrinter::PdfFormat); + } ++ ++#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) ++ // fill in defaults from ppd file ++ QCUPSSupport cups; ++ ++ int printernum = -1; ++ for (int i = 0; i < cups.availablePrintersCount(); i++) { ++ if (printerName().toLocal8Bit() == cups.availablePrinters()[i].name) ++ printernum = i; ++ } ++ if (printernum >= 0) { ++ cups.setCurrentPrinter(printernum); ++ ++ const ppd_option_t* duplex = cups.ppdOption("Duplex"); ++ if (duplex) { ++ // copy default ppd duplex to qt dialog ++ if (qstrcmp(duplex->defchoice, "DuplexTumble") == 0) ++ setDuplex(DuplexShortSide); ++ else if (qstrcmp(duplex->defchoice, "DuplexNoTumble") == 0) ++ setDuplex(DuplexLongSide); ++ else ++ setDuplex(DuplexNone); ++ } ++ ++ if (cups.currentPPD()) { ++ // set default color ++ if (cups.currentPPD()->color_device) ++ setColorMode(Color); ++ else ++ setColorMode(GrayScale); ++ } ++ ++ // set collation ++ const ppd_option_t *collate = cups.ppdOption("Collate"); ++ if (collate) ++ setCollateCopies(qstrcmp(collate->defchoice, "True")==0); ++ } ++#endif + } + + /*! diff --git a/SOURCES/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch b/SOURCES/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch new file mode 100644 index 0000000..d4e5924 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch @@ -0,0 +1,69 @@ +diff -ur qt-everywhere-opensource-src-4.6.3/src/gui/kernel/qguieventdispatcher_glib.cpp qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck/src/gui/kernel/qguieventdispatcher_glib.cpp +--- qt-everywhere-opensource-src-4.6.3/src/gui/kernel/qguieventdispatcher_glib.cpp 2010-06-02 04:03:15.000000000 +0200 ++++ qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck/src/gui/kernel/qguieventdispatcher_glib.cpp 2010-12-08 22:22:38.000000000 +0100 +@@ -76,7 +76,7 @@ + GX11EventSource *source = reinterpret_cast(s); + return (XEventsQueued(X11->display, QueuedAfterFlush) + || (!(source->flags & QEventLoop::ExcludeUserInputEvents) +- && !source->d->queuedUserInputEvents.isEmpty())); ++ && source->d && !source->d->queuedUserInputEvents.isEmpty())); + } + + static gboolean x11EventSourceCheck(GSource *s) +@@ -84,7 +84,7 @@ + GX11EventSource *source = reinterpret_cast(s); + return (XEventsQueued(X11->display, QueuedAfterFlush) + || (!(source->flags & QEventLoop::ExcludeUserInputEvents) +- && !source->d->queuedUserInputEvents.isEmpty())); ++ && source->d && !source->d->queuedUserInputEvents.isEmpty())); + } + + static gboolean x11EventSourceDispatch(GSource *s, GSourceFunc callback, gpointer user_data) +@@ -95,7 +95,7 @@ + do { + XEvent event; + if (!(source->flags & QEventLoop::ExcludeUserInputEvents) +- && !source->d->queuedUserInputEvents.isEmpty()) { ++ && source->d && !source->d->queuedUserInputEvents.isEmpty()) { + // process a pending user input event + event = source->d->queuedUserInputEvents.takeFirst(); + } else if (XEventsQueued(X11->display, QueuedAlready)) { +@@ -112,7 +112,8 @@ + case XKeyRelease: + case EnterNotify: + case LeaveNotify: +- source->d->queuedUserInputEvents.append(event); ++ if (source->d) ++ source->d->queuedUserInputEvents.append(event); + continue; + + case ClientMessage: +@@ -127,7 +128,8 @@ + break; + } + } +- source->d->queuedUserInputEvents.append(event); ++ if (source->d) ++ source->d->queuedUserInputEvents.append(event); + continue; + + default: +@@ -140,7 +142,7 @@ + } + + // send through event filter +- if (source->q->filterEvent(&event)) ++ if (source->q && source->q->filterEvent(&event)) + continue; + + if (qApp->x11ProcessEvent(&event) == 1) +@@ -152,7 +154,8 @@ + + out: + +- source->d->runTimersOnceWithNormalPriority(); ++ if (source->d) ++ source->d->runTimersOnceWithNormalPriority(); + + if (callback) + callback(user_data); diff --git a/SOURCES/qt-everywhere-opensource-src-4.8-ppc64le_support.patch b/SOURCES/qt-everywhere-opensource-src-4.8-ppc64le_support.patch new file mode 100644 index 0000000..3438e25 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8-ppc64le_support.patch @@ -0,0 +1,25 @@ +--- qt-everywhere-opensource-src-4.8.5/configure 2013-10-10 00:40:17.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.5/configure 2013-10-10 13:47:49.000000000 +0200 +@@ -3235,6 +3235,12 @@ if [ -z "${CFG_HOST_ARCH}" ]; then + fi + CFG_HOST_ARCH=powerpc + ;; ++ ppc64le:*:*|*:ppc64le:*|*:*:ppc64le) ++ if [ "$OPT_VERBOSE" = "yes" ]; then ++ echo " 64-bit PowerPC little endian (ppc64le)" ++ fi ++ CFG_HOST_ARCH=powerpc ++ ;; + *:*:s390*) + if [ "$OPT_VERBOSE" = "yes" ]; then + echo " IBM S/390 (s390)" +@@ -3299,6 +3305,9 @@ if [ "$PLATFORM" != "$XPLATFORM" -a "$CF + arm*) + CFG_ARCH=arm + ;; ++ ppc64le) ++ CFG_ARCH=powerpc ++ ;; + *) + CFG_ARCH="$CFG_EMBEDDED" + ;; diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch b/SOURCES/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch new file mode 100644 index 0000000..4279ce2 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch @@ -0,0 +1,41 @@ +diff -up qt-everywhere-opensource-src-4.8.0/src/corelib/tools/qlist.h.QTBUG-22037 qt-everywhere-opensource-src-4.8.0/src/corelib/tools/qlist.h +--- qt-everywhere-opensource-src-4.8.0/src/corelib/tools/qlist.h.QTBUG-22037 2011-10-03 22:44:32.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.0/src/corelib/tools/qlist.h 2011-10-15 14:25:52.238694974 -0500 +@@ -769,26 +769,18 @@ Q_OUTOFLINE_TEMPLATE void QList::clea + template + Q_OUTOFLINE_TEMPLATE int QList::removeAll(const T &_t) + { +- int index = indexOf(_t); +- if (index == -1) +- return 0; +- ++ detachShared(); + const T t = _t; +- detach(); +- +- Node *i = reinterpret_cast(p.at(index)); +- Node *e = reinterpret_cast(p.end()); +- Node *n = i; +- node_destruct(i); +- while (++i != e) { +- if (i->t() == t) +- node_destruct(i); +- else +- *n++ = *i; +- } +- +- int removedCount = e - n; +- d->end -= removedCount; ++ int removedCount=0, i=0; ++ Node *n; ++ while (i < p.size()) ++ if ((n = reinterpret_cast(p.at(i)))->t() == t) { ++ node_destruct(n); ++ p.remove(i); ++ ++removedCount; ++ } else { ++ ++i; ++ } + return removedCount; + } + diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.0-s390-atomic.patch b/SOURCES/qt-everywhere-opensource-src-4.8.0-s390-atomic.patch new file mode 100644 index 0000000..6fedcc8 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.0-s390-atomic.patch @@ -0,0 +1,20 @@ +diff -up qt-everywhere-opensource-src-4.8.0/src/corelib/arch/qatomic_s390.h.s390-atomic qt-everywhere-opensource-src-4.8.0/src/corelib/arch/qatomic_s390.h +--- qt-everywhere-opensource-src-4.8.0/src/corelib/arch/qatomic_s390.h.s390-atomic 2011-12-18 16:15:20.000000000 +0100 ++++ qt-everywhere-opensource-src-4.8.0/src/corelib/arch/qatomic_s390.h 2011-12-18 16:17:34.000000000 +0100 +@@ -400,6 +400,16 @@ Q_INLINE_TEMPLATE T* QBasicAtomicPointer + + + template ++Q_INLINE_TEMPLATE T *QBasicAtomicPointer::fetchAndAddOrdered(qptrdiff valueToAdd) ++{ ++#ifndef __s390x__ ++ return (T *)__CS_OLD_LOOP(&_q_value, valueToAdd * sizeof(T), "ar", "", "bcr 15,0\n"); ++#else ++ return (T *)__CSG_OLD_LOOP(&_q_value, valueToAdd * sizeof(T), "agr", "", "bcr 15,0\n"); ++#endif ++} ++ ++template + Q_INLINE_TEMPLATE T *QBasicAtomicPointer::fetchAndAddRelaxed(qptrdiff valueToAdd) + { + return fetchAndAddOrdered(valueToAdd); diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch b/SOURCES/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch new file mode 100644 index 0000000..5c8b5a1 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch @@ -0,0 +1,36 @@ +diff -up qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-32/qmake.conf.multilib qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-32/qmake.conf +--- qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-32/qmake.conf.multilib 2011-05-23 12:26:21.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-32/qmake.conf 2011-05-25 13:39:38.789054074 +0200 +@@ -12,6 +12,8 @@ QMAKE_INCREMENTAL_STYLE = sublib + QMAKE_CFLAGS = -m32 + QMAKE_LFLAGS = -m32 + ++QMAKE_CFLAGS_RELEASE += -O2 ++ + include(../common/linux.conf) + include(../common/gcc-base-unix.conf) + include(../common/g++-unix.conf) +diff -up qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-64/qmake.conf.multilib qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-64/qmake.conf +--- qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-64/qmake.conf.multilib 2011-05-23 12:26:21.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-64/qmake.conf 2011-05-25 13:39:47.460747770 +0200 +@@ -15,6 +15,8 @@ QMAKE_INCREMENTAL_STYLE = sublib + QMAKE_CFLAGS = -m64 + QMAKE_LFLAGS = -m64 + ++QMAKE_CFLAGS_RELEASE += -O2 ++ + include(../common/linux.conf) + include(../common/gcc-base-unix.conf) + include(../common/g++-unix.conf) +diff -up qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++/qmake.conf.multilib qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++/qmake.conf +--- qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++/qmake.conf.multilib 2011-05-23 12:26:21.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++/qmake.conf 2011-05-25 13:39:26.630088814 +0200 +@@ -9,6 +9,8 @@ CONFIG += qt warn_on release increment + QT += core gui + QMAKE_INCREMENTAL_STYLE = sublib + ++QMAKE_CFLAGS_RELEASE += -O2 ++ + include(../common/linux.conf) + include(../common/gcc-base-unix.conf) + include(../common/g++-unix.conf) diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.0-tp-qtreeview-kpackagekit-crash.patch b/SOURCES/qt-everywhere-opensource-src-4.8.0-tp-qtreeview-kpackagekit-crash.patch new file mode 100644 index 0000000..947f758 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.0-tp-qtreeview-kpackagekit-crash.patch @@ -0,0 +1,12 @@ +diff -up qt-everywhere-opensource-src-4.8.0-tp/src/gui/itemviews/qtreeview.cpp.qtreeview-kpackagekit-crash qt-everywhere-opensource-src-4.8.0-tp/src/gui/itemviews/qtreeview.cpp +--- qt-everywhere-opensource-src-4.8.0-tp/src/gui/itemviews/qtreeview.cpp.qtreeview-kpackagekit-crash 2011-05-23 12:26:21.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.0-tp/src/gui/itemviews/qtreeview.cpp 2011-05-25 13:24:33.137315194 +0200 +@@ -3215,7 +3215,7 @@ int QTreeViewPrivate::itemHeight(int ite + return defaultItemHeight; + if (viewItems.isEmpty()) + return 0; +- const QModelIndex &index = viewItems.at(item).index; ++ QModelIndex index = viewItems.at(item).index; + if (!index.isValid()) + return 0; + int height = viewItems.at(item).height; diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.1-linguist_qmake-qt4.patch b/SOURCES/qt-everywhere-opensource-src-4.8.1-linguist_qmake-qt4.patch new file mode 100644 index 0000000..e84446c --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.1-linguist_qmake-qt4.patch @@ -0,0 +1,27 @@ +diff -up qt-everywhere-opensource-src-4.8.2/tools/linguist/lrelease/main.cpp.linguist_qtmake-qt4 qt-everywhere-opensource-src-4.8.2/tools/linguist/lrelease/main.cpp +--- qt-everywhere-opensource-src-4.8.2/tools/linguist/lrelease/main.cpp.linguist_qtmake-qt4 2012-04-26 21:45:50.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.2/tools/linguist/lrelease/main.cpp 2012-05-29 12:17:03.416561535 +0200 +@@ -314,9 +314,9 @@ int main(int argc, char **argv) + parseHandler.verbose = evalHandler.verbose = cd.isVerbose(); + ProFileOption option; + #ifdef QT_BOOTSTRAPPED +- option.initProperties(binDir + QLatin1String("/qmake")); ++ option.initProperties(binDir + QLatin1String("/qmake-qt4")); + #else +- option.initProperties(app.applicationDirPath() + QLatin1String("/qmake")); ++ option.initProperties(app.applicationDirPath() + QLatin1String("/qmake-qt4")); + #endif + ProFileParser parser(0, &parseHandler); + ProFileEvaluator visitor(&option, &parser, &evalHandler); +diff -up qt-everywhere-opensource-src-4.8.2/tools/linguist/lupdate/main.cpp.linguist_qtmake-qt4 qt-everywhere-opensource-src-4.8.2/tools/linguist/lupdate/main.cpp +--- qt-everywhere-opensource-src-4.8.2/tools/linguist/lupdate/main.cpp.linguist_qtmake-qt4 2012-04-26 21:45:50.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.2/tools/linguist/lupdate/main.cpp 2012-05-29 11:46:48.811134546 +0200 +@@ -765,7 +765,7 @@ int main(int argc, char **argv) + + parseHandler.verbose = evalHandler.verbose = !!(options & Verbose); + ProFileOption option; +- option.initProperties(app.applicationDirPath() + QLatin1String("/qmake")); ++ option.initProperties(app.applicationDirPath() + QLatin1String("/qmake-qt4")); + option.setCommandLineArguments(QStringList() << QLatin1String("CONFIG+=lupdate_run")); + ProFileParser parser(0, &parseHandler); + diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch b/SOURCES/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch new file mode 100644 index 0000000..7458314 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch @@ -0,0 +1,10 @@ +diff -up qt-everywhere-opensource-src-4.8.1/src/qt3support/qt3support.pro.debuginfo qt-everywhere-opensource-src-4.8.1/src/qt3support/qt3support.pro +--- qt-everywhere-opensource-src-4.8.1/src/qt3support/qt3support.pro.debuginfo 2012-03-14 09:01:17.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.1/src/qt3support/qt3support.pro 2012-05-11 11:55:37.780070386 -0500 +@@ -34,6 +34,3 @@ MOCDIR = .moc + + *-g++*: QMAKE_CXXFLAGS += -fno-strict-aliasing + +-CONFIG -= separate_debug_info +-CONFIG += no_debug_info +- diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.1-qtgahandle.patch b/SOURCES/qt-everywhere-opensource-src-4.8.1-qtgahandle.patch new file mode 100644 index 0000000..64ffef3 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.1-qtgahandle.patch @@ -0,0 +1,53 @@ +diff -up qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.cpp.me qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.cpp +--- qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.cpp.me 2012-03-30 21:54:59.921331145 +0200 ++++ qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.cpp 2012-03-30 21:58:14.516042067 +0200 +@@ -41,6 +41,7 @@ + + #include "qtgafile.h" + ++#include + #include + #include + #include +@@ -264,3 +265,16 @@ QImage QTgaFile::readImage() + // TODO: add processing of TGA extension information - ie TGA 2.0 files + return im; + } ++/** ++ * Checks if device contains a valid tga image, *without* changing device ++ * position. ++ */ ++bool QTgaFile::canRead(QIODevice *device) ++{ ++ QByteArray header = device->peek(HeaderSize); ++ if (header.size() < HeaderSize) ++ return false; ++ QBuffer buffer(&header); ++ QTgaFile tga(&buffer); ++ return tga.isValid(); ++} +diff -up qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.h.me qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.h +--- qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.h.me 2012-03-30 21:58:39.670023189 +0200 ++++ qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgafile.h 2012-03-30 21:59:06.202317384 +0200 +@@ -93,6 +93,8 @@ public: + inline QSize size() const; + inline Compression compression() const; + ++ static bool canRead(QIODevice *device); ++ + private: + static inline quint16 littleEndianInt(const unsigned char *d); + +diff -up qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgahandler.cpp.me qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgahandler.cpp +--- qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgahandler.cpp.me 2012-03-30 21:59:17.373303356 +0200 ++++ qt-everywhere-opensource-src-4.8.1/src/plugins/imageformats/tga/qtgahandler.cpp 2012-03-30 22:00:13.817226439 +0200 +@@ -77,8 +77,7 @@ bool QTgaHandler::canRead(QIODevice *dev + qWarning("QTgaHandler::canRead() called with no device"); + return false; + } +- QTgaFile tga(device); +- return tga.isValid(); ++ return QTgaFile::canRead(device); + } + + bool QTgaHandler::read(QImage *image) diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.2--assistant-crash.patch b/SOURCES/qt-everywhere-opensource-src-4.8.2--assistant-crash.patch new file mode 100644 index 0000000..f0a41a4 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.2--assistant-crash.patch @@ -0,0 +1,13 @@ +diff -up qt-everywhere-opensource-src-4.8.2/tools/assistant/tools/assistant/mainwindow.cpp.me qt-everywhere-opensource-src-4.8.2/tools/assistant/tools/assistant/mainwindow.cpp +--- qt-everywhere-opensource-src-4.8.2/tools/assistant/tools/assistant/mainwindow.cpp.me 2012-06-19 12:52:22.740180410 +0200 ++++ qt-everywhere-opensource-src-4.8.2/tools/assistant/tools/assistant/mainwindow.cpp 2012-06-19 12:52:51.953194103 +0200 +@@ -944,8 +944,7 @@ void MainWindow::updateApplicationFont() + if (helpEngine.usesAppFont()) + font = helpEngine.appFont(); + +- const QWidgetList &widgets = qApp->allWidgets(); +- foreach (QWidget* widget, widgets) ++ foreach (QWidget* widget, QApplication::allWidgets()) + widget->setFont(font); + } + diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.3-icu_no_debug.patch b/SOURCES/qt-everywhere-opensource-src-4.8.3-icu_no_debug.patch new file mode 100644 index 0000000..9c53f3c --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.3-icu_no_debug.patch @@ -0,0 +1,23 @@ +diff -up qt-everywhere-opensource-src-4.8.3/src/corelib/tools/qlocale_icu.cpp.icu_no_debug qt-everywhere-opensource-src-4.8.3/src/corelib/tools/qlocale_icu.cpp +--- qt-everywhere-opensource-src-4.8.3/src/corelib/tools/qlocale_icu.cpp.icu_no_debug 2012-09-06 02:33:45.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.3/src/corelib/tools/qlocale_icu.cpp 2012-09-11 09:04:21.542379795 -0500 +@@ -84,7 +84,9 @@ bool qt_initIcu(const QString &localeStr + QLibrary lib(QLatin1String("icui18n"), QLatin1String(U_ICU_VERSION_SHORT)); + lib.setLoadHints(QLibrary::ImprovedSearchHeuristics); + if (!lib.load()) { ++#ifndef QT_NO_DEBUG + qWarning() << "Unable to load library icui18n" << lib.errorString(); ++#endif + status = ErrorLoading; + return false; + } +@@ -114,7 +116,9 @@ bool qt_initIcu(const QString &localeStr + QLibrary ucLib(QLatin1String("icuuc"), QLatin1String(U_ICU_VERSION_SHORT)); + ucLib.setLoadHints(QLibrary::ImprovedSearchHeuristics); + if (!ucLib.load()) { ++#ifndef QT_NO_DEBUG + qWarning() << "Unable to load library icuuc" << ucLib.errorString(); ++#endif + status = ErrorLoading; + return false; + } diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.3-no_Werror.patch b/SOURCES/qt-everywhere-opensource-src-4.8.3-no_Werror.patch new file mode 100644 index 0000000..86dcc28 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.3-no_Werror.patch @@ -0,0 +1,12 @@ +diff -up qt-everywhere-opensource-src-4.8.3/src/3rdparty/webkit/Source/WebKit.pri.no_Werror qt-everywhere-opensource-src-4.8.3/src/3rdparty/webkit/Source/WebKit.pri +--- qt-everywhere-opensource-src-4.8.3/src/3rdparty/webkit/Source/WebKit.pri.no_Werror 2012-09-06 02:33:50.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.3/src/3rdparty/webkit/Source/WebKit.pri 2012-09-11 09:03:19.152159783 -0500 +@@ -102,7 +102,7 @@ CONFIG -= warn_on + + # Treat warnings as errors on x86/Linux/GCC + linux-g++* { +- !CONFIG(standalone_package):if(isEqual(QT_ARCH,x86_64)|isEqual(QT_ARCH,i386)): QMAKE_CXXFLAGS += -Werror ++ #!CONFIG(standalone_package):if(isEqual(QT_ARCH,x86_64)|isEqual(QT_ARCH,i386)): QMAKE_CXXFLAGS += -Werror + + greaterThan(QT_GCC_MAJOR_VERSION, 3):greaterThan(QT_GCC_MINOR_VERSION, 5) { + if (!contains(QMAKE_CXXFLAGS, -std=c++0x) && !contains(QMAKE_CXXFLAGS, -std=gnu++0x)) { diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.3-qdbusconnection_no_debug.patch b/SOURCES/qt-everywhere-opensource-src-4.8.3-qdbusconnection_no_debug.patch new file mode 100644 index 0000000..dd3a5a0 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.3-qdbusconnection_no_debug.patch @@ -0,0 +1,14 @@ +diff -up qt-everywhere-opensource-src-4.8.3/src/dbus/qdbusconnection.cpp.qdbusconnection_no_debug.patch qt-everywhere-opensource-src-4.8.3/src/dbus/qdbusconnection.cpp +--- qt-everywhere-opensource-src-4.8.3/src/dbus/qdbusconnection.cpp.qdbusconnection_no_debug.patch 2012-09-06 02:33:44.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.3/src/dbus/qdbusconnection.cpp 2012-09-11 08:55:29.854026815 -0500 +@@ -1109,8 +1109,10 @@ public: + // make sure this connection is running on the main thread + QCoreApplication *instance = QCoreApplication::instance(); + if (!instance) { ++#ifndef QT_NO_DEBUG + qWarning("QDBusConnection: %s D-Bus connection created before QCoreApplication. Application may misbehave.", + type == SessionBus ? "session" : type == SystemBus ? "system" : "generic"); ++#endif + } else if (QDBusConnectionPrivate::d(*this)) { + QDBusConnectionPrivate::d(*this)->moveToThread(instance->thread()); + } diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch b/SOURCES/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch new file mode 100644 index 0000000..0494c81 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch @@ -0,0 +1,16 @@ +diff -up qt-everywhere-opensource-src-4.8.4/qmake/generators/makefile.cpp.qmake_pkgconfig_requires_private qt-everywhere-opensource-src-4.8.4/qmake/generators/makefile.cpp +--- qt-everywhere-opensource-src-4.8.4/qmake/generators/makefile.cpp.qmake_pkgconfig_requires_private 2012-11-23 04:11:21.000000000 -0600 ++++ qt-everywhere-opensource-src-4.8.4/qmake/generators/makefile.cpp 2013-02-11 07:36:36.192779528 -0600 +@@ -3293,6 +3293,12 @@ MakefileGenerator::writePkgConfigFile() + t << "Requires: " << requires << endl; + } + ++ // requires.private ++ const QString requires_private = project->values("QMAKE_PKGCONFIG_REQUIRES_PRIVATE").join(" "); ++ if (!requires_private.isEmpty()) { ++ t << "Requires.private: " << requires_private << endl; ++ } ++ + t << endl; + } + diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch new file mode 100644 index 0000000..81d74ff --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch @@ -0,0 +1,24 @@ +diff -up qt-everywhere-opensource-src-4.8.5/mkspecs/features/qt_functions.prf.QTBUG-14467 qt-everywhere-opensource-src-4.8.5/mkspecs/features/qt_functions.prf +--- qt-everywhere-opensource-src-4.8.5/mkspecs/features/qt_functions.prf.QTBUG-14467 2013-05-30 16:19:17.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/mkspecs/features/qt_functions.prf 2013-06-09 11:53:45.709773603 -0500 +@@ -72,7 +72,7 @@ defineTest(qtAddLibrary) { + } + isEmpty(LINKAGE) { + if(!debug_and_release|build_pass):CONFIG(debug, debug|release) { +- win32:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}d ++ win32:LINKAGE = -l$${LIB_NAME}d$${QT_LIBINFIX} + mac:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}_debug + } + isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX} +diff -up qt-everywhere-opensource-src-4.8.5/mkspecs/features/win32/windows.prf.QTBUG-14467 qt-everywhere-opensource-src-4.8.5/mkspecs/features/win32/windows.prf +--- qt-everywhere-opensource-src-4.8.5/mkspecs/features/win32/windows.prf.QTBUG-14467 2013-05-30 16:19:17.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/mkspecs/features/win32/windows.prf 2013-06-09 11:53:45.710773593 -0500 +@@ -6,7 +6,7 @@ contains(TEMPLATE, ".*app"){ + + qt:for(entryLib, $$list($$unique(QMAKE_LIBS_QT_ENTRY))) { + isEqual(entryLib, -lqtmain): { +- CONFIG(debug, debug|release): QMAKE_LIBS += $${entryLib}$${QT_LIBINFIX}d ++ CONFIG(debug, debug|release): QMAKE_LIBS += $${entryLib}d$${QT_LIBINFIX} + else: QMAKE_LIBS += $${entryLib}$${QT_LIBINFIX} + } else { + QMAKE_LIBS += $${entryLib} diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch new file mode 100644 index 0000000..018872f --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch @@ -0,0 +1,84 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/gui/kernel/qapplication_x11.cpp.QTBUG-21900 qt-everywhere-opensource-src-4.8.5/src/gui/kernel/qapplication_x11.cpp +--- qt-everywhere-opensource-src-4.8.5/src/gui/kernel/qapplication_x11.cpp.QTBUG-21900 2013-05-30 16:18:05.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/gui/kernel/qapplication_x11.cpp 2013-06-09 11:53:45.891771748 -0500 +@@ -818,6 +818,27 @@ static Bool qt_sync_request_scanner(Disp + #endif + #endif // QT_NO_XSYNC + ++struct qt_configure_event_data ++{ ++ WId window; ++ WId parent; ++}; ++ ++static Bool qt_configure_event_scanner(Display*, XEvent *event, XPointer arg) ++{ ++ qt_configure_event_data *data = ++ reinterpret_cast(arg); ++ if (event->type == ConfigureNotify && ++ event->xconfigure.window == data->window) { ++ return true; ++ } else if (event->type == ReparentNotify && ++ event->xreparent.window == data->window) { ++ data->parent = event->xreparent.parent; ++ } ++ ++ return false; ++} ++ + static void qt_x11_create_intern_atoms() + { + const char *names[QX11Data::NAtoms]; +@@ -5302,8 +5323,11 @@ bool QETWidget::translateConfigEvent(con + if (d->extra->compress_events) { + // ConfigureNotify compression for faster opaque resizing + XEvent otherEvent; +- while (XCheckTypedWindowEvent(X11->display, internalWinId(), ConfigureNotify, +- &otherEvent)) { ++ qt_configure_event_data configureData; ++ configureData.window = internalWinId(); ++ configureData.parent = d->topData()->parentWinId; ++ while (XCheckIfEvent(X11->display, &otherEvent, ++ &qt_configure_event_scanner, (XPointer)&configureData)) { + if (qt_x11EventFilter(&otherEvent)) + continue; + +@@ -5316,13 +5340,19 @@ bool QETWidget::translateConfigEvent(con + newSize.setWidth(otherEvent.xconfigure.width); + newSize.setHeight(otherEvent.xconfigure.height); + ++ trust = isVisible() ++ && (configureData.parent == XNone || ++ configureData.parent == QX11Info::appRootWindow()); ++ + if (otherEvent.xconfigure.send_event || trust) { + newCPos.rx() = otherEvent.xconfigure.x + + otherEvent.xconfigure.border_width; + newCPos.ry() = otherEvent.xconfigure.y + + otherEvent.xconfigure.border_width; + isCPos = true; +- } ++ } else { ++ isCPos = false; ++ } + } + #ifndef QT_NO_XSYNC + qt_sync_request_event_data sync_event; +@@ -5335,9 +5365,14 @@ bool QETWidget::translateConfigEvent(con + } + + if (!isCPos) { +- // we didn't get an updated position of the toplevel. +- // either we haven't moved or there is a bug in the window manager. +- // anyway, let's query the position to be certain. ++ // If the last configure event didn't have a trustable position, ++ // it's necessary to query, see ICCCM 4.24: ++ // ++ // Any real ConfigureNotify event on a top-level window implies ++ // that the window’s position on the root may have changed, even ++ // though the event reports that the window’s position in its ++ // parent is unchanged because the window may have been reparented. ++ + int x, y; + Window child; + XTranslateCoordinates(X11->display, internalWinId(), diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-22829.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-22829.patch new file mode 100644 index 0000000..78b78b0 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-22829.patch @@ -0,0 +1,14 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/tools/moc/main.cpp.QTBUG-22829 qt-everywhere-opensource-src-4.8.5/src/tools/moc/main.cpp +--- qt-everywhere-opensource-src-4.8.5/src/tools/moc/main.cpp.QTBUG-22829 2013-06-09 17:04:02.762459323 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/tools/moc/main.cpp 2013-06-09 17:08:20.409680813 -0500 +@@ -188,8 +188,9 @@ int runMoc(int _argc, char **_argv) + pp.macros["Q_MOC_RUN"]; + pp.macros["__cplusplus"]; + +- // Workaround a bug while parsing the boost/type_traits/has_operator.hpp header. See QTBUG-22829 ++ // Workaround a bugs while parsing some boost headers. See QTBUG-22829 + pp.macros["BOOST_TT_HAS_OPERATOR_HPP_INCLUDED"]; ++ pp.macros["BOOST_LEXICAL_CAST_INCLUDED"]; + + QByteArray filename; + QByteArray output; diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-30076.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-30076.patch new file mode 100644 index 0000000..dc0dc52 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-30076.patch @@ -0,0 +1,115 @@ +From 8053ae4030b4342f73a08b9870ccd19189ae401d Mon Sep 17 00:00:00 2001 +From: Mark Brand +Date: Thu, 7 Mar 2013 11:52:52 +0100 +Subject: [PATCH 4/4] postgresql driver: escape backslashes only when server + requires it + +Task-number: QTBUG-30076 + +Change-Id: I408cda941884f01484d0edfa82c91fc19cb8718c +Reviewed-by: Israel Lins Albuquerque +Reviewed-by: Sergey Blagodarin +Reviewed-by: Andy Shaw +Reviewed-by: Andras Mantia +(cherry picked from qtbase/e3c5351d06ce8a12f035cd0627356bc64d8c334a) +Reviewed-by: Mark Brand +--- + src/sql/drivers/psql/qsql_psql.cpp | 38 +++++++++++++++++++++++++++++++++----- + 1 file changed, 33 insertions(+), 5 deletions(-) + +diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp +index 51ddce0..c2a127c 100644 +--- a/src/sql/drivers/psql/qsql_psql.cpp ++++ b/src/sql/drivers/psql/qsql_psql.cpp +@@ -120,7 +120,16 @@ inline void qPQfreemem(void *buffer) + class QPSQLDriverPrivate + { + public: +- QPSQLDriverPrivate(QPSQLDriver *qq) : q(qq), connection(0), isUtf8(false), pro(QPSQLDriver::Version6), sn(0), pendingNotifyCheck(false) {} ++ QPSQLDriverPrivate(QPSQLDriver *qq) ++ : q(qq), ++ connection(0), ++ isUtf8(false), ++ pro(QPSQLDriver::Version6), ++ sn(0), ++ pendingNotifyCheck(false), ++ hasBackslashEscape(false) ++ { } ++ + QPSQLDriver *q; + PGconn *connection; + bool isUtf8; +@@ -128,6 +137,7 @@ public: + QSocketNotifier *sn; + QStringList seid; + mutable bool pendingNotifyCheck; ++ bool hasBackslashEscape; + + void appendTables(QStringList &tl, QSqlQuery &t, QChar type); + PGresult * exec(const char * stmt) const; +@@ -135,6 +145,7 @@ public: + QPSQLDriver::Protocol getPSQLVersion(); + bool setEncodingUtf8(); + void setDatestyle(); ++ void detectBackslashEscape(); + }; + + void QPSQLDriverPrivate::appendTables(QStringList &tl, QSqlQuery &t, QChar type) +@@ -636,6 +647,23 @@ void QPSQLDriverPrivate::setDatestyle() + PQclear(result); + } + ++void QPSQLDriverPrivate::detectBackslashEscape() ++{ ++ // standard_conforming_strings option introduced in 8.2 ++ // http://www.postgresql.org/docs/8.2/static/runtime-config-compatible.html ++ if (pro < QPSQLDriver::Version82) { ++ hasBackslashEscape = true; ++ } else { ++ hasBackslashEscape = false; ++ PGresult* result = exec(QLatin1String("SELECT '\\\\' x")); ++ int status = PQresultStatus(result); ++ if (status == PGRES_COMMAND_OK || status == PGRES_TUPLES_OK) ++ if (QString::fromLatin1(PQgetvalue(result, 0, 0)) == QLatin1String("\\")) ++ hasBackslashEscape = true; ++ PQclear(result); ++ } ++} ++ + static QPSQLDriver::Protocol qMakePSQLVersion(int vMaj, int vMin) + { + switch (vMaj) { +@@ -742,6 +770,7 @@ QPSQLDriver::QPSQLDriver(PGconn *conn, QObject *parent) + d->connection = conn; + if (conn) { + d->pro = d->getPSQLVersion(); ++ d->detectBackslashEscape(); + setOpen(true); + setOpenError(false); + } +@@ -842,6 +871,7 @@ bool QPSQLDriver::open(const QString & db, + } + + d->pro = d->getPSQLVersion(); ++ d->detectBackslashEscape(); + d->isUtf8 = d->setEncodingUtf8(); + d->setDatestyle(); + +@@ -1228,12 +1258,10 @@ QString QPSQLDriver::formatValue(const QSqlField &field, bool trimStrings) const + } + break; + case QVariant::String: +- { +- // Escape '\' characters + r = QSqlDriver::formatValue(field, trimStrings); +- r.replace(QLatin1String("\\"), QLatin1String("\\\\")); ++ if (d->hasBackslashEscape) ++ r.replace(QLatin1String("\\"), QLatin1String("\\\\")); + break; +- } + case QVariant::Bool: + if (field.value().toBool()) + r = QLatin1String("TRUE"); +-- +1.8.3.1 + diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch new file mode 100644 index 0000000..5ca9114 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch @@ -0,0 +1,12 @@ +diff -ur qt-everywhere-opensource-src-4.8.5-CVE-2013-4549/src/xml/sax/qxml.cpp qt-everywhere-opensource-src-4.8.5-QTBUG-35459/src/xml/sax/qxml.cpp +--- qt-everywhere-opensource-src-4.8.5-CVE-2013-4549/src/xml/sax/qxml.cpp 2013-12-05 19:23:33.000000000 +0100 ++++ qt-everywhere-opensource-src-4.8.5-QTBUG-35459/src/xml/sax/qxml.cpp 2014-01-13 20:13:59.000000000 +0100 +@@ -428,7 +428,7 @@ + // for the DTD currently being parsed. + static const int dtdRecursionLimit = 2; + // The maximum amount of characters an entity value may contain, after expansion. +- static const int entityCharacterLimit = 1024; ++ static const int entityCharacterLimit = 4096; + + const QString &string(); + void stringClear(); diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch new file mode 100644 index 0000000..ee1d191 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch @@ -0,0 +1,29 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862 qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp +--- qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862 2013-06-09 12:02:50.323221694 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp 2013-06-09 12:38:53.140804742 -0500 +@@ -624,6 +624,25 @@ QString QFileSystemEngine::homePath() + { + QString home = QFile::decodeName(qgetenv("HOME")); + if (home.isEmpty()) ++ { ++#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) ++ int size_max = sysconf(_SC_GETPW_R_SIZE_MAX); ++ if (size_max == -1) ++ size_max = 1024; ++ QVarLengthArray buf(size_max); ++#endif ++ struct passwd *pw = 0; ++ uid_t user_id = getuid(); ++ pw = getpwuid(user_id); ++#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) ++ struct passwd entry; ++ getpwuid_r(user_id, &entry, buf.data(), buf.size(), &pw); ++#else ++ pw = getpwuid(user_id); ++#endif ++ home = QFile::decodeName(QByteArray(pw->pw_dir)); ++ } ++ if (home.isEmpty()) + home = rootPath(); + return QDir::cleanPath(home); + } diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-do-not-close-apps-on-gnome-shutdown-dialog.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-do-not-close-apps-on-gnome-shutdown-dialog.patch new file mode 100644 index 0000000..5fb038c --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-do-not-close-apps-on-gnome-shutdown-dialog.patch @@ -0,0 +1,42 @@ +diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp +index acb115f..5316c40 100644 +--- a/src/gui/kernel/qapplication.cpp ++++ b/src/gui/kernel/qapplication.cpp +@@ -3525,21 +3525,24 @@ void QApplication::commitData(QSessionManager& manager ) + { + emit commitDataRequest(manager); + if (manager.allowsInteraction()) { +- QWidgetList done; +- QWidgetList list = QApplication::topLevelWidgets(); +- bool cancelled = false; +- for (int i = 0; !cancelled && i < list.size(); ++i) { +- QWidget* w = list.at(i); +- if (w->isVisible() && !done.contains(w)) { +- cancelled = !w->close(); +- if (!cancelled) +- done.append(w); +- list = QApplication::topLevelWidgets(); +- i = -1; ++ const QString desktopEnv = qgetenv("XDG_CURRENT_DESKTOP"); ++ if (!desktopEnv.startsWith(QLatin1String("GNOME"))) { ++ QWidgetList done; ++ QWidgetList list = QApplication::topLevelWidgets(); ++ bool cancelled = false; ++ for (int i = 0; !cancelled && i < list.size(); ++i) { ++ QWidget* w = list.at(i); ++ if (w->isVisible() && !done.contains(w)) { ++ cancelled = !w->close(); ++ if (!cancelled) ++ done.append(w); ++ list = QApplication::topLevelWidgets(); ++ i = -1; ++ } + } ++ if (cancelled) ++ manager.cancel(); + } +- if (cancelled) +- manager.cancel(); + } + } + diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-mysql_config.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-mysql_config.patch new file mode 100644 index 0000000..fc0ee76 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-mysql_config.patch @@ -0,0 +1,19 @@ +diff -up qt-everywhere-opensource-src-4.8.5/configure.mysql_config qt-everywhere-opensource-src-4.8.5/configure +--- qt-everywhere-opensource-src-4.8.5/configure.mysql_config 2013-06-07 00:16:41.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/configure 2014-03-07 10:09:27.412071146 -0600 +@@ -5480,8 +5480,15 @@ for _SQLDR in $CFG_SQL_AVAILABLE; do + [ -z "$CFG_MYSQL_CONFIG" ] && CFG_MYSQL_CONFIG=`"$WHICH" mysql_config` + if [ -x "$CFG_MYSQL_CONFIG" ]; then + QT_CFLAGS_MYSQL=`$CFG_MYSQL_CONFIG --include 2>/dev/null` ++ $CFG_MYSQL_CONFIG --variable=pkglibdir &>/dev/null && \ ++ QT_MYSQL_PKGLIBDIR=`$CFG_MYSQL_CONFIG --variable=pkglibdir 2>/dev/null` ++ if [ -n "$QT_MYSQL_PKGLIBDIR" ]; then ++ QT_LFLAGS_MYSQL_R="-L$QT_MYSQL_PKGLIBDIR -lmysqlclient_r" ++ QT_LFLAGS_MYSQL="-L$QT_MYSQL_PKGLIBDIR -lmysqlclient" ++ else + QT_LFLAGS_MYSQL_R=`$CFG_MYSQL_CONFIG --libs_r 2>/dev/null` + QT_LFLAGS_MYSQL=`$CFG_MYSQL_CONFIG --libs 2>/dev/null` ++ fi + QT_MYSQL_VERSION=`$CFG_MYSQL_CONFIG --version 2>/dev/null` + QT_MYSQL_VERSION_MAJOR=`echo $QT_MYSQL_VERSION | cut -d . -f 1` + fi diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch new file mode 100644 index 0000000..9a9f773 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch @@ -0,0 +1,22 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/gui/styles/qgtkstyle_p.cpp.qgtkstyle_disable_gtk_theme_check qt-everywhere-opensource-src-4.8.5/src/gui/styles/qgtkstyle_p.cpp +--- qt-everywhere-opensource-src-4.8.5/src/gui/styles/qgtkstyle_p.cpp.qgtkstyle_disable_gtk_theme_check 2013-06-09 16:28:22.938840346 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/gui/styles/qgtkstyle_p.cpp 2013-06-09 17:03:01.781125479 -0500 +@@ -503,18 +503,6 @@ void QGtkStylePrivate::initGtkWidgets() + return; + } + +- static QString themeName; +- if (!gtkWidgetMap()->contains("GtkWindow") && themeName.isEmpty()) { +- themeName = getThemeName(); +- +- if (themeName == QLS("Qt") || themeName == QLS("Qt4")) { +- // Due to namespace conflicts with Qt3 and obvious recursion with Qt4, +- // we cannot support the GTK_Qt Gtk engine +- qWarning("QGtkStyle cannot be used together with the GTK_Qt engine."); +- return; +- } +- } +- + if (QGtkStylePrivate::gtk_init) { + // Gtk will set the Qt error handler so we have to reset it afterwards + x11ErrorHandler qt_x_errhandler = XSetErrorHandler(0); diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch new file mode 100644 index 0000000..6a87783 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch @@ -0,0 +1,19 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/corelib/kernel/qcoreapplication.cpp.qt_plugin_path qt-everywhere-opensource-src-4.8.5/src/corelib/kernel/qcoreapplication.cpp +--- qt-everywhere-opensource-src-4.8.5/src/corelib/kernel/qcoreapplication.cpp.qt_plugin_path 2013-06-07 00:16:52.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/corelib/kernel/qcoreapplication.cpp 2013-06-21 07:14:10.045039936 -0500 +@@ -2511,6 +2511,15 @@ QStringList QCoreApplication::libraryPat + if (!app_libpaths->contains(installPathPlugins)) + app_libpaths->append(installPathPlugins); + } ++ ++ // hack in support for kde4 plugin paths -- Rex ++ QString kde4PathPlugins = QLibraryInfo::location(QLibraryInfo::LibrariesPath) + QLatin1String("/kde4/plugins"); ++ if (QFile::exists(kde4PathPlugins)) { ++ // Make sure we convert from backslashes to slashes. ++ //kde4PathPlugins = QDir(kde4PathPlugins).canonicalPath(); ++ if (!app_libpaths->contains(kde4PathPlugins)) ++ app_libpaths->append(kde4PathPlugins); ++ } + #endif + + // If QCoreApplication is not yet instantiated, diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch new file mode 100644 index 0000000..2deeb51 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch @@ -0,0 +1,12 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/sql/drivers/tds/qsql_tds.pri.tds_no_strict_aliasing qt-everywhere-opensource-src-4.8.5/src/sql/drivers/tds/qsql_tds.pri +--- qt-everywhere-opensource-src-4.8.5/src/sql/drivers/tds/qsql_tds.pri.tds_no_strict_aliasing 2013-06-09 11:57:49.198291245 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/sql/drivers/tds/qsql_tds.pri 2013-06-09 12:01:24.120100371 -0500 +@@ -1,6 +1,8 @@ + HEADERS += $$PWD/qsql_tds.h + SOURCES += $$PWD/qsql_tds.cpp + ++*-g++*: QMAKE_CXXFLAGS += -fno-strict-aliasing ++ + unix|win32-g++*: { + LIBS += $$QT_LFLAGS_TDS + !contains(LIBS, .*sybdb.*):LIBS += -lsybdb diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch new file mode 100644 index 0000000..d04d1be --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch @@ -0,0 +1,28 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/tools/moc/moc.cpp.uic_multilib qt-everywhere-opensource-src-4.8.5/src/tools/moc/moc.cpp +diff -up qt-everywhere-opensource-src-4.8.5/src/tools/uic3/embed.cpp.uic_multilib qt-everywhere-opensource-src-4.8.5/src/tools/uic3/embed.cpp +--- qt-everywhere-opensource-src-4.8.5/src/tools/uic3/embed.cpp.uic_multilib 2013-05-30 16:18:04.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/tools/uic3/embed.cpp 2013-06-09 11:50:25.597813974 -0500 +@@ -152,8 +152,7 @@ void Ui3Reader::embed(const char *projec + for ( it = images.begin(); it != images.end(); ++it ) + out << "** " << *it << "\n"; + out << "**\n"; +- out << "** Created: " << QDateTime::currentDateTime().toString() << "\n"; +- out << "** by: The User Interface Compiler for Qt version " << QT_VERSION_STR << "\n"; ++ out << "** Created: by: The User Interface Compiler for Qt version " << QT_VERSION_STR << "\n"; + out << "**\n"; + out << "** WARNING! All changes made in this file will be lost!\n"; + out << "****************************************************************************/\n"; +diff -up qt-everywhere-opensource-src-4.8.5/src/tools/uic3/uic.cpp.uic_multilib qt-everywhere-opensource-src-4.8.5/src/tools/uic3/uic.cpp +--- qt-everywhere-opensource-src-4.8.5/src/tools/uic3/uic.cpp.uic_multilib 2013-05-30 16:18:04.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/tools/uic3/uic.cpp 2013-06-09 11:51:28.310174526 -0500 +@@ -146,8 +146,7 @@ void Uic::writeCopyrightHeader(DomUI *ui + out << "/********************************************************************************\n"; + out << "** Form generated from reading UI file '" << QFileInfo(opt.inputFile).fileName() << "'\n"; + out << "**\n"; +- out << "** Created: " << QDateTime::currentDateTime().toString() << "\n"; +- out << "** " << QString::fromLatin1("by: Qt User Interface Compiler version %1\n").arg(QLatin1String(QT_VERSION_STR)); ++ out << "** Created by: " << QString::fromLatin1("Qt User Interface Compiler version %1\n").arg(QLatin1String(QT_VERSION_STR)); + out << "**\n"; + out << "** WARNING! All changes made in this file will be lost when recompiling UI file!\n"; + out << "********************************************************************************/\n\n"; +diff -up qt-everywhere-opensource-src-4.8.5/src/tools/uic/uic.cpp.uic_multilib qt-everywhere-opensource-src-4.8.5/src/tools/uic/uic.cpp diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch b/SOURCES/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch new file mode 100644 index 0000000..1ea8af2 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch @@ -0,0 +1,16 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/3rdparty/webkit/Source/WebCore/WebCore.pri.webkit_debuginfo qt-everywhere-opensource-src-4.8.5/src/3rdparty/webkit/Source/WebCore/WebCore.pri +--- qt-everywhere-opensource-src-4.8.5/src/3rdparty/webkit/Source/WebCore/WebCore.pri.webkit_debuginfo 2013-06-07 00:16:55.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/3rdparty/webkit/Source/WebCore/WebCore.pri 2013-07-11 14:04:19.937056249 -0500 +@@ -5,6 +5,12 @@ include(features.pri) + + # Uncomment this to enable Texture Mapper. + # CONFIG += texmap ++# ++equals(QT_ARCH, s390)|equals(QT_ARCH, arm)|equals(QT_ARCH, mips)|equals(QT_ARCH, i386)|equals(QT_ARCH, i686)|equals(QT_ARCH, x86_64)|equals(QT_ARCH, powerpc64)|equals(QT_ARCH, powerpc) { ++ message("WebCore workaround for QtWebkit: do not build with -g, but with -g1") ++ QMAKE_CXXFLAGS_RELEASE -= -g ++ QMAKE_CXXFLAGS_RELEASE += -g1 ++} + + QT *= network + diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch b/SOURCES/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch new file mode 100644 index 0000000..6d3bf2f --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch @@ -0,0 +1,94 @@ +--- src/corelib/kernel/qeventdispatcher_glib.cpp.sav 2014-03-28 15:26:37.000000000 +0100 ++++ src/corelib/kernel/qeventdispatcher_glib.cpp 2014-04-24 09:44:09.358659204 +0200 +@@ -255,22 +255,30 @@ struct GPostEventSource + GSource source; + QAtomicInt serialNumber; + int lastSerialNumber; ++ QEventLoop::ProcessEventsFlags processEventsFlags; + QEventDispatcherGlibPrivate *d; + }; + + static gboolean postEventSourcePrepare(GSource *s, gint *timeout) + { ++ GPostEventSource *source = reinterpret_cast(s); + QThreadData *data = QThreadData::current(); + if (!data) + return false; + ++ QEventLoop::ProcessEventsFlags excludeAllFlags ++ = QEventLoop::ExcludeUserInputEvents ++ | QEventLoop::ExcludeSocketNotifiers ++ | QEventLoop::X11ExcludeTimers; ++ if ((source->processEventsFlags & excludeAllFlags) == excludeAllFlags) ++ return false; ++ + gint dummy; + if (!timeout) + timeout = &dummy; + const bool canWait = data->canWaitLocked(); + *timeout = canWait ? -1 : 0; + +- GPostEventSource *source = reinterpret_cast(s); + return (!canWait + || (source->serialNumber != source->lastSerialNumber)); + } +@@ -284,8 +292,14 @@ static gboolean postEventSourceDispatch( + { + GPostEventSource *source = reinterpret_cast(s); + source->lastSerialNumber = source->serialNumber; +- QCoreApplication::sendPostedEvents(); +- source->d->runTimersOnceWithNormalPriority(); ++ QEventLoop::ProcessEventsFlags excludeAllFlags ++ = QEventLoop::ExcludeUserInputEvents ++ | QEventLoop::ExcludeSocketNotifiers ++ | QEventLoop::X11ExcludeTimers; ++ if ((source->processEventsFlags & excludeAllFlags) != excludeAllFlags) { ++ QCoreApplication::sendPostedEvents(); ++ source->d->runTimersOnceWithNormalPriority(); ++ } + return true; // i dunno, george... + } + +@@ -329,6 +343,7 @@ QEventDispatcherGlibPrivate::QEventDispa + postEventSource = reinterpret_cast(g_source_new(&postEventSourceFuncs, + sizeof(GPostEventSource))); + postEventSource->serialNumber = 1; ++ postEventSource->processEventsFlags = QEventLoop::AllEvents; + postEventSource->d = this; + g_source_set_can_recurse(&postEventSource->source, true); + g_source_attach(&postEventSource->source, mainContext); +@@ -423,6 +438,7 @@ bool QEventDispatcherGlib::processEvents + + // tell postEventSourcePrepare() and timerSource about any new flags + QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags; ++ d->postEventSource->processEventsFlags = flags; + d->timerSource->processEventsFlags = flags; + d->socketNotifierSource->processEventsFlags = flags; + +@@ -435,6 +451,7 @@ bool QEventDispatcherGlib::processEvents + while (!result && canWait) + result = g_main_context_iteration(d->mainContext, canWait); + ++ d->postEventSource->processEventsFlags = savedFlags; + d->timerSource->processEventsFlags = savedFlags; + d->socketNotifierSource->processEventsFlags = savedFlags; + +--- src/corelib/kernel/qeventdispatcher_unix.cpp.sav 2013-06-07 07:16:52.000000000 +0200 ++++ src/corelib/kernel/qeventdispatcher_unix.cpp 2014-04-24 09:43:06.927589535 +0200 +@@ -905,7 +905,15 @@ bool QEventDispatcherUNIX::processEvents + + // we are awake, broadcast it + emit awake(); +- QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData); ++ ++ QEventLoop::ProcessEventsFlags excludeAllFlags ++ = QEventLoop::ExcludeUserInputEvents ++ | QEventLoop::ExcludeSocketNotifiers ++ | QEventLoop::X11ExcludeTimers; ++ if ((flags & excludeAllFlags) == excludeAllFlags) ++ return false; ++ if(( flags & excludeAllFlags ) != excludeAllFlags ) ++ QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData); + + int nevents = 0; + const bool canWait = (d->threadData->canWaitLocked() diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch b/SOURCES/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch new file mode 100644 index 0000000..6949bbf --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch @@ -0,0 +1,63 @@ +Author: Jan-Marek Glogowski +Date: Thu Mar 06 18:44:43 2014 +0100 + + Honor QEventLoop::ExcludeSocketNotifiers in glib event loop. + + Implements QEventLoop::ExcludeSocketNotifiers in the same way + QEventLoop::X11ExcludeTimers is already implemented for the glib + event loop. + +--- qt4-x11-4.8.1.orig/src/corelib/kernel/qeventdispatcher_glib.cpp ++++ qt4-x11-4.8.1/src/corelib/kernel/qeventdispatcher_glib.cpp +@@ -65,6 +65,7 @@ struct GPollFDWithQSocketNotifier + struct GSocketNotifierSource + { + GSource source; ++ QEventLoop::ProcessEventsFlags processEventsFlags; + QList pollfds; + }; + +@@ -80,6 +81,9 @@ static gboolean socketNotifierSourceChec + GSocketNotifierSource *src = reinterpret_cast(source); + + bool pending = false; ++ if (src->processEventsFlags & QEventLoop::ExcludeSocketNotifiers) ++ return pending; ++ + for (int i = 0; !pending && i < src->pollfds.count(); ++i) { + GPollFDWithQSocketNotifier *p = src->pollfds.at(i); + +@@ -103,6 +107,9 @@ static gboolean socketNotifierSourceDisp + QEvent event(QEvent::SockAct); + + GSocketNotifierSource *src = reinterpret_cast(source); ++ if (src->processEventsFlags & QEventLoop::ExcludeSocketNotifiers) ++ return true; ++ + for (int i = 0; i < src->pollfds.count(); ++i) { + GPollFDWithQSocketNotifier *p = src->pollfds.at(i); + +@@ -330,6 +337,7 @@ QEventDispatcherGlibPrivate::QEventDispa + reinterpret_cast(g_source_new(&socketNotifierSourceFuncs, + sizeof(GSocketNotifierSource))); + (void) new (&socketNotifierSource->pollfds) QList(); ++ socketNotifierSource->processEventsFlags = QEventLoop::AllEvents; + g_source_set_can_recurse(&socketNotifierSource->source, true); + g_source_attach(&socketNotifierSource->source, mainContext); + +@@ -415,6 +423,7 @@ bool QEventDispatcherGlib::processEvents + // tell postEventSourcePrepare() and timerSource about any new flags + QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags; + d->timerSource->processEventsFlags = flags; ++ d->socketNotifierSource->processEventsFlags = flags; + + if (!(flags & QEventLoop::EventLoopExec)) { + // force timers to be sent at normal priority +@@ -426,6 +435,7 @@ bool QEventDispatcherGlib::processEvents + result = g_main_context_iteration(d->mainContext, canWait); + + d->timerSource->processEventsFlags = savedFlags; ++ d->socketNotifierSource->processEventsFlags = savedFlags; + + if (canWait) + emit awake(); diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch b/SOURCES/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch new file mode 100644 index 0000000..22643e8 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch @@ -0,0 +1,12 @@ +--- src/gui/kernel/qclipboard_x11.cpp.sav 2014-04-25 09:52:03.855693228 +0200 ++++ src/gui/kernel/qclipboard_x11.cpp 2014-04-25 09:51:58.038693777 +0200 +@@ -548,7 +548,8 @@ bool QX11Data::clipboardWaitForEvent(Win + return false; + + XSync(X11->display, false); +- usleep(50000); ++ if (!XPending(X11->display)) ++ usleep(5000); + + now.start(); + diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.6-s390.patch b/SOURCES/qt-everywhere-opensource-src-4.8.6-s390.patch new file mode 100644 index 0000000..5098c08 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.6-s390.patch @@ -0,0 +1,31 @@ +diff -up qt-everywhere-opensource-src-4.8.6/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h.s390 qt-everywhere-opensource-src-4.8.6/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h +--- qt-everywhere-opensource-src-4.8.6/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h.s390 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h 2014-03-31 17:59:16.846465899 -0500 +@@ -189,6 +189,18 @@ + #define WTF_CPU_SPARC 1 + #endif + ++/* CPU(S390X) - S390 64-bit */ ++#if defined(__s390x__) ++#define WTF_CPU_S390X 1 ++#define WTF_CPU_BIG_ENDIAN 1 ++#endif ++ ++/* CPU(S390) - S390 32-bit */ ++#if defined(__s390__) ++#define WTF_CPU_S390 1 ++#define WTF_CPU_BIG_ENDIAN 1 ++#endif ++ + /* CPU(X86) - i386 / x86 32-bit */ + #if defined(__i386__) \ + || defined(i386) \ +@@ -903,7 +915,7 @@ + #endif + + #if !defined(WTF_USE_JSVALUE64) && !defined(WTF_USE_JSVALUE32) && !defined(WTF_USE_JSVALUE32_64) +-#if (CPU(X86_64) && (OS(UNIX) || OS(WINDOWS) || OS(SOLARIS) || OS(HPUX))) || (CPU(IA64) && !CPU(IA64_32)) || CPU(ALPHA) || CPU(AIX64) || CPU(SPARC64) || CPU(MIPS64) || CPU(AARCH64) ++#if (CPU(X86_64) && (OS(UNIX) || OS(WINDOWS) || OS(SOLARIS) || OS(HPUX))) || (CPU(IA64) && !CPU(IA64_32)) || CPU(ALPHA) || CPU(AIX64) || CPU(SPARC64) || CPU(MIPS64) || CPU(AARCH64) || CPU(S390X) + #define WTF_USE_JSVALUE64 1 + #elif CPU(ARM) || CPU(PPC64) + #define WTF_USE_JSVALUE32 1 diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.6-system-clucene.patch b/SOURCES/qt-everywhere-opensource-src-4.8.6-system-clucene.patch new file mode 100644 index 0000000..63a7462 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.6-system-clucene.patch @@ -0,0 +1,351 @@ +diff -ur qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/fulltextsearch/fulltextsearch.pri qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/fulltextsearch/fulltextsearch.pri +--- qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/fulltextsearch/fulltextsearch.pri 2014-04-10 20:37:12.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/fulltextsearch/fulltextsearch.pri 2014-10-26 03:33:45.000000000 +0100 +@@ -1,125 +1,7 @@ +-DEFINES += _BUILD_FOR_QT_ LUCENE_DISABLE_MEMTRACKING +-win32:DEFINES += _CRT_SECURE_NO_DEPRECATE _MT +- +-CLUCENEDIR = ../../../../src/3rdparty/clucene/src/CLucene +- +-INCLUDEPATH += . .. \ +- $$CLUCENEDIR \ +- $$CLUCENEDIR/../ \ +- $$CLUCENEDIR/analysis \ +- $$CLUCENEDIR/analysis/standard \ +- $$CLUCENEDIR/config \ +- $$CLUCENEDIR/debug \ +- $$CLUCENEDIR/document \ +- $$CLUCENEDIR/index \ +- $$CLUCENEDIR/queryParser \ +- $$CLUCENEDIR/search \ +- $$CLUCENEDIR/store \ +- $$CLUCENEDIR/util +- +- +-SOURCES += $$CLUCENEDIR/StdHeader.cpp \ +- $$CLUCENEDIR/analysis/AnalysisHeader.cpp \ +- $$CLUCENEDIR/analysis/Analyzers.cpp \ +- $$CLUCENEDIR/config/gunichartables.cpp \ +- $$CLUCENEDIR/config/repl_lltot.cpp \ +- $$CLUCENEDIR/config/repl_tcscasecmp.cpp \ +- $$CLUCENEDIR/config/repl_tcslwr.cpp \ +- $$CLUCENEDIR/config/repl_tcstod.cpp \ +- $$CLUCENEDIR/config/repl_tcstoll.cpp \ +- $$CLUCENEDIR/config/repl_tprintf.cpp \ +- $$CLUCENEDIR/config/threads.cpp \ +- $$CLUCENEDIR/config/utf8.cpp \ +- $$CLUCENEDIR/debug/condition.cpp \ +- $$CLUCENEDIR/debug/error.cpp \ +- $$CLUCENEDIR/debug/memtracking.cpp \ +- $$CLUCENEDIR/document/DateField.cpp \ +- $$CLUCENEDIR/document/Document.cpp \ +- $$CLUCENEDIR/document/Field.cpp \ +- $$CLUCENEDIR/index/CompoundFile.cpp \ +- $$CLUCENEDIR/index/DocumentWriter.cpp \ +- $$CLUCENEDIR/index/FieldInfos.cpp \ +- $$CLUCENEDIR/index/FieldsReader.cpp \ +- $$CLUCENEDIR/index/FieldsWriter.cpp \ +- $$CLUCENEDIR/index/IndexModifier.cpp \ +- $$CLUCENEDIR/index/IndexReader.cpp \ +- $$CLUCENEDIR/index/IndexWriter.cpp \ +- $$CLUCENEDIR/index/MultiReader.cpp \ +- $$CLUCENEDIR/index/SegmentInfos.cpp \ +- $$CLUCENEDIR/index/SegmentMergeInfo.cpp \ +- $$CLUCENEDIR/index/SegmentMergeQueue.cpp \ +- $$CLUCENEDIR/index/SegmentMerger.cpp \ +- $$CLUCENEDIR/index/SegmentReader.cpp \ +- $$CLUCENEDIR/index/SegmentTermDocs.cpp \ +- $$CLUCENEDIR/index/SegmentTermEnum.cpp \ +- $$CLUCENEDIR/index/SegmentTermPositions.cpp \ +- $$CLUCENEDIR/index/SegmentTermVector.cpp \ +- $$CLUCENEDIR/index/Term.cpp \ +- $$CLUCENEDIR/index/TermInfo.cpp \ +- $$CLUCENEDIR/index/TermInfosReader.cpp \ +- $$CLUCENEDIR/index/TermInfosWriter.cpp \ +- $$CLUCENEDIR/index/TermVectorReader.cpp \ +- $$CLUCENEDIR/index/TermVectorWriter.cpp \ +- $$CLUCENEDIR/queryParser/Lexer.cpp \ +- $$CLUCENEDIR/queryParser/MultiFieldQueryParser.cpp \ +- $$CLUCENEDIR/queryParser/QueryParser.cpp \ +- $$CLUCENEDIR/queryParser/QueryParserBase.cpp \ +- $$CLUCENEDIR/queryParser/QueryToken.cpp \ +- $$CLUCENEDIR/queryParser/TokenList.cpp \ +- $$CLUCENEDIR/search/BooleanQuery.cpp \ +- $$CLUCENEDIR/search/BooleanScorer.cpp \ +- $$CLUCENEDIR/search/CachingWrapperFilter.cpp \ +- $$CLUCENEDIR/search/ChainedFilter.cpp \ +- $$CLUCENEDIR/search/ConjunctionScorer.cpp \ +- $$CLUCENEDIR/search/DateFilter.cpp \ +- $$CLUCENEDIR/search/ExactPhraseScorer.cpp \ +- $$CLUCENEDIR/search/Explanation.cpp \ +- $$CLUCENEDIR/search/FieldCache.cpp \ +- $$CLUCENEDIR/search/FieldCacheImpl.cpp \ +- $$CLUCENEDIR/search/FieldDocSortedHitQueue.cpp \ +- $$CLUCENEDIR/search/FieldSortedHitQueue.cpp \ +- $$CLUCENEDIR/search/FilteredTermEnum.cpp \ +- $$CLUCENEDIR/search/FuzzyQuery.cpp \ +- $$CLUCENEDIR/search/HitQueue.cpp \ +- $$CLUCENEDIR/search/Hits.cpp \ +- $$CLUCENEDIR/search/IndexSearcher.cpp \ +- $$CLUCENEDIR/search/MultiSearcher.cpp \ +- $$CLUCENEDIR/search/MultiTermQuery.cpp \ +- $$CLUCENEDIR/search/PhrasePositions.cpp \ +- $$CLUCENEDIR/search/PhraseQuery.cpp \ +- $$CLUCENEDIR/search/PhraseScorer.cpp \ +- $$CLUCENEDIR/search/PrefixQuery.cpp \ +- $$CLUCENEDIR/search/QueryFilter.cpp \ +- $$CLUCENEDIR/search/RangeFilter.cpp \ +- $$CLUCENEDIR/search/RangeQuery.cpp \ +- $$CLUCENEDIR/search/SearchHeader.cpp \ +- $$CLUCENEDIR/search/Similarity.cpp \ +- $$CLUCENEDIR/search/SloppyPhraseScorer.cpp \ +- $$CLUCENEDIR/search/Sort.cpp \ +- $$CLUCENEDIR/search/TermQuery.cpp \ +- $$CLUCENEDIR/search/TermScorer.cpp \ +- $$CLUCENEDIR/search/WildcardQuery.cpp \ +- $$CLUCENEDIR/search/WildcardTermEnum.cpp \ +- $$CLUCENEDIR/store/FSDirectory.cpp \ +- $$CLUCENEDIR/store/IndexInput.cpp \ +- $$CLUCENEDIR/store/IndexOutput.cpp \ +- $$CLUCENEDIR/store/Lock.cpp \ +- $$CLUCENEDIR/store/MMapInput.cpp \ +- $$CLUCENEDIR/store/RAMDirectory.cpp \ +- $$CLUCENEDIR/store/TransactionalRAMDirectory.cpp \ +- $$CLUCENEDIR/util/BitSet.cpp \ +- $$CLUCENEDIR/util/Equators.cpp \ +- $$CLUCENEDIR/util/FastCharStream.cpp \ +- $$CLUCENEDIR/util/fileinputstream.cpp \ +- $$CLUCENEDIR/util/Misc.cpp \ +- $$CLUCENEDIR/util/Reader.cpp \ +- $$CLUCENEDIR/util/StringBuffer.cpp \ +- $$CLUCENEDIR/util/StringIntern.cpp \ +- $$CLUCENEDIR/util/ThreadLocal.cpp \ +- $$CLUCENEDIR/analysis/standard/StandardAnalyzer.cpp \ +- $$CLUCENEDIR/analysis/standard/StandardFilter.cpp \ +- $$CLUCENEDIR/analysis/standard/StandardTokenizer.cpp + ++INCLUDEPATH += /usr/include/clucene09 $$[QT_INSTALL_LIBS]/clucene09 $$[QT_INSTALL_LIBS] ++LIBS += -L$$[QT_INSTALL_LIBS]/clucene09 -lclucene ++#DEFINES += LUCENE_ENABLE_REFCOUNT (must be set at CLucene build time!) + + #Header files + HEADERS += qclucene_global_p.h \ +diff -ur qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/fulltextsearch/qclucene-config_p.h qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/fulltextsearch/qclucene-config_p.h +--- qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/fulltextsearch/qclucene-config_p.h 2014-04-10 20:37:12.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/fulltextsearch/qclucene-config_p.h 2014-10-26 02:28:54.000000000 +0100 +@@ -15,6 +15,8 @@ + ** + ****************************************************************************/ + ++#error This header must not be included when building against system CLucene. ++ + #ifndef QCLUCENE_CONFIG_P_H + #define QCLUCENE_CONFIG_P_H + +diff -ur qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/fulltextsearch/qclucene_global_p.h qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/fulltextsearch/qclucene_global_p.h +--- qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/fulltextsearch/qclucene_global_p.h 2014-04-10 20:37:12.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/fulltextsearch/qclucene_global_p.h 2014-10-26 02:31:54.000000000 +0100 +@@ -29,20 +29,10 @@ + // We mean it. + // + +-#if !defined(_MSC_VER) +-# include "qclucene-config_p.h" +-#endif +- + #include + #include + +-#if !defined(_MSC_VER) && !defined(__MINGW32__) && defined(_CL_HAVE_WCHAR_H) && defined(_CL_HAVE_WCHAR_T) +-# if !defined(TCHAR) +-# define TCHAR wchar_t +-# endif +-#else +-# include +-#endif ++#include + + QT_BEGIN_HEADER + +@@ -56,52 +46,6 @@ + # define QHELP_EXPORT Q_DECL_IMPORT + #endif + +-// +-// W A R N I N G +-// ------------- +-// +-// adjustments here, need to be done in +-// QTDIR/src/3rdparty/clucene/src/CLucene/StdHeader.h as well +-// +-#if defined(_LUCENE_DONTIMPLEMENT_NS_MACROS) +- +-#elif !defined(DISABLE_NAMESPACE) +-# ifdef QT_NAMESPACE +-# define CL_NS_DEF(sub) namespace QT_NAMESPACE { namespace lucene{ namespace sub{ +-# define CL_NS_DEF2(sub,sub2) namespace QT_NAMESPACE { namespace lucene{ namespace sub{ namespace sub2 { +- +-# define CL_NS_END }}} +-# define CL_NS_END2 }}}} +- +-# define CL_NS_USE(sub) using namespace QT_NAMESPACE::lucene::sub; +-# define CL_NS_USE2(sub,sub2) using namespace QT_NAMESPACE::lucene::sub::sub2; +- +-# define CL_NS(sub) QT_NAMESPACE::lucene::sub +-# define CL_NS2(sub,sub2) QT_NAMESPACE::lucene::sub::sub2 +-# else +-# define CL_NS_DEF(sub) namespace lucene{ namespace sub{ +-# define CL_NS_DEF2(sub,sub2) namespace lucene{ namespace sub{ namespace sub2 { +- +-# define CL_NS_END }} +-# define CL_NS_END2 }}} +- +-# define CL_NS_USE(sub) using namespace lucene::sub; +-# define CL_NS_USE2(sub,sub2) using namespace lucene::sub::sub2; +- +-# define CL_NS(sub) lucene::sub +-# define CL_NS2(sub,sub2) lucene::sub::sub2 +-# endif +-#else +-# define CL_NS_DEF(sub) +-# define CL_NS_DEF2(sub, sub2) +-# define CL_NS_END +-# define CL_NS_END2 +-# define CL_NS_USE(sub) +-# define CL_NS_USE2(sub,sub2) +-# define CL_NS(sub) +-# define CL_NS2(sub,sub2) +-#endif +- + namespace { + TCHAR* QStringToTChar(const QString &str) + { +diff -ur qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/fulltextsearch/qindexreader.cpp qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/fulltextsearch/qindexreader.cpp +--- qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/fulltextsearch/qindexreader.cpp 2014-04-10 20:37:12.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/fulltextsearch/qindexreader.cpp 2014-10-26 02:48:02.000000000 +0100 +@@ -18,6 +18,8 @@ + #include "qindexreader_p.h" + #include "qclucene_global_p.h" + ++#include ++ + #include + #include + +@@ -59,13 +61,13 @@ + { + using namespace lucene::index; + +- return IndexReader::isLuceneFile(filename); ++ return IndexReader::isLuceneFile(filename.toLocal8Bit().constData()); + } + + bool QCLuceneIndexReader::indexExists(const QString &directory) + { + using namespace lucene::index; +- return IndexReader::indexExists(directory); ++ return IndexReader::indexExists(directory.toLocal8Bit().constData()); + } + + QCLuceneIndexReader QCLuceneIndexReader::open(const QString &path) +@@ -73,7 +75,7 @@ + using namespace lucene::index; + + QCLuceneIndexReader indexReader; +- indexReader.d->reader = IndexReader::open(path); ++ indexReader.d->reader = IndexReader::open(path.toLocal8Bit().constData()); + + return indexReader; + } +@@ -81,25 +83,29 @@ + void QCLuceneIndexReader::unlock(const QString &path) + { + using namespace lucene::index; +- IndexReader::unlock(path); ++ IndexReader::unlock(path.toLocal8Bit().constData()); + } + + bool QCLuceneIndexReader::isLocked(const QString &directory) + { ++ // The system CLucene fails here if the directory does not exist yet, unlike ++ // the bundled one. Work around that. ++ QDir::current().mkpath(directory); ++ + using namespace lucene::index; +- return IndexReader::isLocked(directory); ++ return IndexReader::isLocked(directory.toLocal8Bit().constData()); + } + + quint64 QCLuceneIndexReader::lastModified(const QString &directory) + { + using namespace lucene::index; +- return quint64(IndexReader::lastModified(directory)); ++ return quint64(IndexReader::lastModified(directory.toLocal8Bit().constData())); + } + + qint64 QCLuceneIndexReader::getCurrentVersion(const QString &directory) + { + using namespace lucene::index; +- return qint64(IndexReader::getCurrentVersion(directory)); ++ return qint64(IndexReader::getCurrentVersion(directory.toLocal8Bit().constData())); + } + + void QCLuceneIndexReader::close() +@@ -155,7 +161,7 @@ + void QCLuceneIndexReader::setNorm(qint32 doc, const QString &field, qreal value) + { + TCHAR *fieldName = QStringToTChar(field); +- d->reader->setNorm(int32_t(doc), fieldName, qreal(value)); ++ d->reader->setNorm(int32_t(doc), fieldName, (float_t)value); + delete [] fieldName; + } + +diff -ur qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/fulltextsearch/qindexwriter.cpp qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/fulltextsearch/qindexwriter.cpp +--- qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/fulltextsearch/qindexwriter.cpp 2014-04-10 20:37:12.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/fulltextsearch/qindexwriter.cpp 2014-10-26 02:48:27.000000000 +0100 +@@ -18,6 +18,8 @@ + #include "qindexwriter_p.h" + #include "qindexreader_p.h" + ++#include ++ + #include + #include + +@@ -50,7 +52,12 @@ + : d(new QCLuceneIndexWriterPrivate()) + , analyzer(analyzer) + { +- d->writer = new lucene::index::IndexWriter(path, ++ // The system CLucene cannot create directories recursively, so do it here. ++ // Ignore failure: If it failed, we will get an error from CLucene anyway. ++ if (create) ++ QDir::current().mkpath(path); ++ ++ d->writer = new lucene::index::IndexWriter(path.toLocal8Bit().constData(), + analyzer.d->analyzer, create, closeDir); + } + +diff -ur qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/fulltextsearch/qsearchable.cpp qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/fulltextsearch/qsearchable.cpp +--- qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/fulltextsearch/qsearchable.cpp 2014-04-10 20:37:12.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/fulltextsearch/qsearchable.cpp 2014-10-26 02:48:44.000000000 +0100 +@@ -95,7 +95,7 @@ + : QCLuceneSearcher() + { + lucene::search::IndexSearcher *searcher = +- new lucene::search::IndexSearcher(path); ++ new lucene::search::IndexSearcher(path.toLocal8Bit().constData()); + + reader.d->reader = searcher->getReader(); + reader.d->deleteCLuceneIndexReader = false; +diff -ur qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/lib.pro qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/lib.pro +--- qt-everywhere-opensource-src-4.8.6/tools/assistant/lib/lib.pro 2014-04-10 20:37:12.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.6-system-clucene/tools/assistant/lib/lib.pro 2014-10-26 02:27:55.000000000 +0100 +@@ -43,6 +43,7 @@ + qhelp_global.cpp + + # access to clucene ++INCLUDEPATH += /usr/include/clucene09 $$[QT_INSTALL_LIBS]/clucene09 $$[QT_INSTALL_LIBS] + SOURCES += qhelpsearchindexwriter_clucene.cpp \ + qhelpsearchindexreader_clucene.cpp + HEADERS += qhelpenginecore.h \ diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.6-systemtrayicon.patch b/SOURCES/qt-everywhere-opensource-src-4.8.6-systemtrayicon.patch new file mode 100644 index 0000000..60749d3 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.6-systemtrayicon.patch @@ -0,0 +1,1456 @@ +diff -up qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.cpp.systemtrayicon qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.cpp +--- qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.cpp.systemtrayicon 2014-03-30 15:36:45.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.cpp 2014-03-31 18:16:39.707974934 -0500 +@@ -158,15 +158,23 @@ void Window::createIconGroupBox() + iconComboBox->addItem(QIcon(":/images/bad.svg"), tr("Bad")); + iconComboBox->addItem(QIcon(":/images/heart.svg"), tr("Heart")); + iconComboBox->addItem(QIcon(":/images/trash.svg"), tr("Trash")); ++ iconComboBox->addItem(QIcon::fromTheme("system-file-manager"), tr("File Manager")); + + showIconCheckBox = new QCheckBox(tr("Show icon")); + showIconCheckBox->setChecked(true); + ++#if defined(Q_WS_X11) ++ jitToolTipCheckBox = new QCheckBox(tr("Just In Time Tooltip")); ++#endif ++ + QHBoxLayout *iconLayout = new QHBoxLayout; + iconLayout->addWidget(iconLabel); + iconLayout->addWidget(iconComboBox); + iconLayout->addStretch(); + iconLayout->addWidget(showIconCheckBox); ++#if defined(Q_WS_X11) ++ iconLayout->addWidget(jitToolTipCheckBox); ++#endif + iconGroupBox->setLayout(iconLayout); + } + +@@ -254,5 +262,37 @@ void Window::createTrayIcon() + trayIconMenu->addAction(quitAction); + + trayIcon = new QSystemTrayIcon(this); ++ QByteArray category = qgetenv("SNI_CATEGORY"); ++ if (!category.isEmpty()) { ++ trayIcon->setProperty("_qt_sni_category", QString::fromLocal8Bit(category)); ++ } + trayIcon->setContextMenu(trayIconMenu); ++ ++#if defined(Q_WS_X11) ++ trayIcon->installEventFilter(this); ++#endif ++} ++ ++#if defined(Q_WS_X11) ++bool Window::eventFilter(QObject *, QEvent *event) ++{ ++ switch(event->type()) { ++ case QEvent::ToolTip: ++ if (jitToolTipCheckBox->isChecked()) { ++ QString timeString = QTime::currentTime().toString(); ++ trayIcon->setToolTip(tr("Current Time: %1").arg(timeString)); ++ } ++ break; ++ case QEvent::Wheel: { ++ QWheelEvent *wheelEvent = static_cast(event); ++ int delta = wheelEvent->delta() > 0 ? 1 : -1; ++ int index = (iconComboBox->currentIndex() + delta) % iconComboBox->count(); ++ iconComboBox->setCurrentIndex(index); ++ break; ++ } ++ default: ++ break; ++ } ++ return false; + } ++#endif +diff -up qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.h.systemtrayicon qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.h +--- qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.h.systemtrayicon 2014-03-30 15:36:45.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.h 2014-03-31 18:16:39.707974934 -0500 +@@ -69,6 +69,9 @@ public: + + protected: + void closeEvent(QCloseEvent *event); ++#if defined(Q_WS_X11) ++ bool eventFilter(QObject *object, QEvent *event); ++#endif + + private slots: + void setIcon(int index); +@@ -86,6 +89,9 @@ private: + QLabel *iconLabel; + QComboBox *iconComboBox; + QCheckBox *showIconCheckBox; ++#if defined(Q_WS_X11) ++ QCheckBox *jitToolTipCheckBox; ++#endif + + QGroupBox *messageGroupBox; + QLabel *typeLabel; +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys.cpp.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys.cpp +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys.cpp.systemtrayicon 2014-03-31 18:16:39.707974934 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys.cpp 2014-03-31 18:16:39.707974934 -0500 +@@ -0,0 +1,65 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtGui module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** GNU Lesser General Public License Usage ++** This file may be used under the terms of the GNU Lesser General Public ++** License version 2.1 as published by the Free Software Foundation and ++** appearing in the file LICENSE.LGPL included in the packaging of this ++** file. Please review the following information to ensure the GNU Lesser ++** General Public License version 2.1 requirements will be met: ++** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU General ++** Public License version 3.0 as published by the Free Software Foundation ++** and appearing in the file LICENSE.GPL included in the packaging of this ++** file. Please review the following information to ensure the GNU General ++** Public License version 3.0 requirements will be met: ++** http://www.gnu.org/copyleft/gpl.html. ++** ++** Other Usage ++** Alternatively, this file may be used in accordance with the terms and ++** conditions contained in a signed written agreement between you and Nokia. ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include "qabstractsystemtrayiconsys_p.h" ++ ++ ++QSystemTrayIconSysFactoryInterface::QSystemTrayIconSysFactoryInterface() ++{ ++} ++ ++///////////////////////////////////////////////// ++QAbstractSystemTrayIconSys::QAbstractSystemTrayIconSys(QSystemTrayIcon *icon) ++: trayIcon(icon) ++{ ++} ++ ++QAbstractSystemTrayIconSys::~QAbstractSystemTrayIconSys() ++{ ++} ++ ++void QAbstractSystemTrayIconSys::sendActivated(QSystemTrayIcon::ActivationReason reason) ++{ ++ qtsystray_sendActivated(trayIcon, reason); ++} ++ ++#endif +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys_p.h.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys_p.h +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys_p.h.systemtrayicon 2014-03-31 18:16:39.708974924 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys_p.h 2014-03-31 18:16:39.708974924 -0500 +@@ -0,0 +1,106 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtGui module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** GNU Lesser General Public License Usage ++** This file may be used under the terms of the GNU Lesser General Public ++** License version 2.1 as published by the Free Software Foundation and ++** appearing in the file LICENSE.LGPL included in the packaging of this ++** file. Please review the following information to ensure the GNU Lesser ++** General Public License version 2.1 requirements will be met: ++** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU General ++** Public License version 3.0 as published by the Free Software Foundation ++** and appearing in the file LICENSE.GPL included in the packaging of this ++** file. Please review the following information to ensure the GNU General ++** Public License version 3.0 requirements will be met: ++** http://www.gnu.org/copyleft/gpl.html. ++** ++** Other Usage ++** Alternatively, this file may be used in accordance with the terms and ++** conditions contained in a signed written agreement between you and Nokia. ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#ifndef QABSTRACTSYSTEMTRAYICONSYS_P_H ++#define QABSTRACTSYSTEMTRAYICONSYS_P_H ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists for the convenience ++// of a number of Qt sources files. This header file may change from ++// version to version without notice, or even be removed. ++// ++// We mean it. ++// ++ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include ++#include ++ ++class QAbstractSystemTrayIconSys; ++ ++class Q_GUI_EXPORT QSystemTrayIconSysFactoryInterface : public QObject, public QFactoryInterface ++{ ++ Q_OBJECT ++public: ++ QSystemTrayIconSysFactoryInterface(); ++ virtual QAbstractSystemTrayIconSys * create(QSystemTrayIcon *) = 0; ++ virtual bool isAvailable() const = 0; ++ ++ // \reimp ++ virtual QStringList keys() const { return QStringList() << QLatin1String("default"); } ++ ++Q_SIGNALS: ++ void availableChanged(bool); ++}; ++ ++#define QSystemTrayIconSysFactoryInterface_iid "com.nokia.qt.QSystemTrayIconSysFactoryInterface" ++Q_DECLARE_INTERFACE(QSystemTrayIconSysFactoryInterface, QSystemTrayIconSysFactoryInterface_iid) ++ ++class QRect; ++ ++class Q_GUI_EXPORT QAbstractSystemTrayIconSys ++{ ++public: ++ QAbstractSystemTrayIconSys(QSystemTrayIcon *icon); ++ virtual ~QAbstractSystemTrayIconSys(); ++ ++ virtual QRect geometry() const = 0; ++ virtual void updateVisibility() = 0; ++ virtual void updateIcon() = 0; ++ virtual void updateToolTip() = 0; ++ virtual void updateMenu() = 0; ++ virtual void showMessage(const QString &title, const QString &message, ++ QSystemTrayIcon::MessageIcon icon, int msecs) = 0; ++ ++ void sendActivated(QSystemTrayIcon::ActivationReason); ++ ++protected: ++ QSystemTrayIcon *trayIcon; ++}; ++ ++#endif // QT_NO_SYSTEMTRAYICON ++ ++#endif // QABSTRACTSYSTEMTRAYICONSYS_P_H ++ +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon.cpp.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon.cpp +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon.cpp.systemtrayicon 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon.cpp 2014-03-31 18:16:39.708974924 -0500 +@@ -287,12 +287,6 @@ bool QSystemTrayIcon::isVisible() const + */ + bool QSystemTrayIcon::event(QEvent *e) + { +-#if defined(Q_WS_X11) +- if (e->type() == QEvent::ToolTip) { +- Q_D(QSystemTrayIcon); +- return d->sys->deliverToolTipEvent(e); +- } +-#endif + return QObject::event(e); + } + +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_p.h.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_p.h +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_p.h.systemtrayicon 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_p.h 2014-03-31 18:16:39.708974924 -0500 +@@ -62,10 +62,17 @@ + #include "QtGui/qpixmap.h" + #include "QtCore/qstring.h" + #include "QtCore/qpointer.h" ++#if defined(Q_WS_X11) ++#include "QtCore/qset.h" ++#endif + + QT_BEGIN_NAMESPACE + ++#if defined(Q_WS_X11) ++class QAbstractSystemTrayIconSys; ++#else + class QSystemTrayIconSys; ++#endif + class QToolButton; + class QLabel; + +@@ -75,6 +82,9 @@ class QSystemTrayIconPrivate : public QO + + public: + QSystemTrayIconPrivate() : sys(0), visible(false) { } ++ #if defined(Q_WS_X11) ++ ~QSystemTrayIconPrivate(); ++ #endif + + void install_sys(); + void remove_sys(); +@@ -90,7 +100,11 @@ public: + QPointer menu; + QIcon icon; + QString toolTip; ++ #if defined(Q_WS_X11) ++ QAbstractSystemTrayIconSys *sys; ++ #else + QSystemTrayIconSys *sys; ++ #endif + bool visible; + }; + +@@ -123,60 +137,37 @@ private: + }; + + #if defined(Q_WS_X11) +-QT_BEGIN_INCLUDE_NAMESPACE +-#include +-#include +-#include +-#include +-QT_END_INCLUDE_NAMESPACE ++class QSystemTrayIconSysFactoryInterface; + +-class QSystemTrayIconSys : public QWidget ++/** ++ * This class acts as a composite QSystemTrayIconSysFactory: It can create ++ * instances of QAbstractSystemTrayIconSys* using either a plugin or the ++ * builtin factory and will cause QSystemTrayIconPrivate to recreate their ++ * 'sys' instances if the plugin availability changes. ++ */ ++class QSystemTrayIconSysFactory : public QObject + { +- friend class QSystemTrayIconPrivate; +- ++ Q_OBJECT + public: +- QSystemTrayIconSys(QSystemTrayIcon *q); +- ~QSystemTrayIconSys(); +- enum { +- SYSTEM_TRAY_REQUEST_DOCK = 0, +- SYSTEM_TRAY_BEGIN_MESSAGE = 1, +- SYSTEM_TRAY_CANCEL_MESSAGE =2 +- }; +- +- void addToTray(); +- void updateIcon(); +- XVisualInfo* getSysTrayVisualInfo(); +- +- // QObject::event is public but QWidget's ::event() re-implementation +- // is protected ;( +- inline bool deliverToolTipEvent(QEvent *e) +- { return QWidget::event(e); } +- +- static Window sysTrayWindow; +- static QList trayIcons; +- static QCoreApplication::EventFilter oldEventFilter; +- static bool sysTrayTracker(void *message, long *result); +- static Window locateSystemTray(); +- static Atom sysTraySelection; +- static XVisualInfo sysTrayVisual; ++ QSystemTrayIconSysFactory(); ++ void registerSystemTrayIconPrivate(QSystemTrayIconPrivate *iconPrivate); ++ void unregisterSystemTrayIconPrivate(QSystemTrayIconPrivate *iconPrivate); + +-protected: +- void paintEvent(QPaintEvent *pe); +- void resizeEvent(QResizeEvent *re); +- bool x11Event(XEvent *event); +- void mousePressEvent(QMouseEvent *event); +- void mouseDoubleClickEvent(QMouseEvent *event); +-#ifndef QT_NO_WHEELEVENT +- void wheelEvent(QWheelEvent *event); +-#endif +- bool event(QEvent *e); ++ QAbstractSystemTrayIconSys *create(QSystemTrayIcon *) const; ++ ++ bool isAvailable() const; ++ ++private Q_SLOTS: ++ void refreshTrayIconPrivates(); + + private: +- QPixmap background; +- QSystemTrayIcon *q; +- Colormap colormap; ++ QSystemTrayIconSysFactoryInterface *factory() const; ++ void loadPluginFactory(); ++ ++ QSystemTrayIconSysFactoryInterface *pluginFactory; ++ QSet trayIconPrivates; + }; +-#endif // Q_WS_X11 ++#endif + + QT_END_NAMESPACE + +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_x11.cpp.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_x11.cpp +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_x11.cpp.systemtrayicon 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_x11.cpp 2014-03-31 18:16:39.709974914 -0500 +@@ -38,311 +38,122 @@ + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include + +-#include "private/qt_x11_p.h" +-#include "qlabel.h" +-#include "qx11info_x11.h" +-#include "qpainter.h" +-#include "qpixmap.h" +-#include "qbitmap.h" +-#include "qevent.h" +-#include "qapplication.h" +-#include "qlist.h" +-#include "qmenu.h" +-#include "qtimer.h" + #include "qsystemtrayicon_p.h" +-#include "qpaintengine.h" ++#include "qabstractsystemtrayiconsys_p.h" ++#include "qcoreapplication.h" ++#include "qxembedsystemtrayicon_x11_p.h" + +-#ifndef QT_NO_SYSTEMTRAYICON + QT_BEGIN_NAMESPACE + +-Window QSystemTrayIconSys::sysTrayWindow = XNone; +-QList QSystemTrayIconSys::trayIcons; +-QCoreApplication::EventFilter QSystemTrayIconSys::oldEventFilter = 0; +-Atom QSystemTrayIconSys::sysTraySelection = XNone; +-XVisualInfo QSystemTrayIconSys::sysTrayVisual = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +- +-// Locate the system tray +-Window QSystemTrayIconSys::locateSystemTray() +-{ +- Display *display = QX11Info::display(); +- if (sysTraySelection == XNone) { +- int screen = QX11Info::appScreen(); +- QString net_sys_tray = QString::fromLatin1("_NET_SYSTEM_TRAY_S%1").arg(screen); +- sysTraySelection = XInternAtom(display, net_sys_tray.toLatin1(), False); +- } +- +- return XGetSelectionOwner(QX11Info::display(), sysTraySelection); +-} ++Q_GLOBAL_STATIC(QSystemTrayIconSysFactory, qt_guiSystemTrayIconSysFactory) + +-XVisualInfo* QSystemTrayIconSys::getSysTrayVisualInfo() ++QSystemTrayIconSysFactory::QSystemTrayIconSysFactory() ++: pluginFactory(0) + { +- Display *display = QX11Info::display(); +- +- if (!sysTrayVisual.visual) { +- Window win = locateSystemTray(); +- if (win != XNone) { +- Atom actual_type; +- int actual_format; +- ulong nitems, bytes_remaining; +- uchar *data = 0; +- int result = XGetWindowProperty(display, win, ATOM(_NET_SYSTEM_TRAY_VISUAL), 0, 1, +- False, XA_VISUALID, &actual_type, +- &actual_format, &nitems, &bytes_remaining, &data); +- VisualID vid = 0; +- if (result == Success && data && actual_type == XA_VISUALID && actual_format == 32 && +- nitems == 1 && bytes_remaining == 0) +- vid = *(VisualID*)data; +- if (data) +- XFree(data); +- if (vid == 0) +- return 0; +- +- uint mask = VisualIDMask; +- XVisualInfo *vi, rvi; +- int count; +- rvi.visualid = vid; +- vi = XGetVisualInfo(display, mask, &rvi, &count); +- if (vi) { +- sysTrayVisual = vi[0]; +- XFree((char*)vi); +- } +- if (sysTrayVisual.depth != 32) +- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); +- } +- } +- +- return sysTrayVisual.visual ? &sysTrayVisual : 0; + } + +-bool QSystemTrayIconSys::sysTrayTracker(void *message, long *result) ++void QSystemTrayIconSysFactory::loadPluginFactory() + { +- bool retval = false; +- if (QSystemTrayIconSys::oldEventFilter) +- retval = QSystemTrayIconSys::oldEventFilter(message, result); +- +- if (trayIcons.isEmpty()) +- return retval; +- +- Display *display = QX11Info::display(); +- XEvent *ev = (XEvent *)message; +- if (ev->type == DestroyNotify && ev->xany.window == sysTrayWindow) { +- sysTrayWindow = locateSystemTray(); +- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); +- for (int i = 0; i < trayIcons.count(); i++) { +- if (sysTrayWindow == XNone) { +- QBalloonTip::hideBalloon(); +- trayIcons[i]->hide(); // still no luck +- trayIcons[i]->destroy(); +- trayIcons[i]->create(); +- } else +- trayIcons[i]->addToTray(); // add it to the new tray +- } +- retval = true; +- } else if (ev->type == ClientMessage && sysTrayWindow == XNone) { +- static Atom manager_atom = XInternAtom(display, "MANAGER", False); +- XClientMessageEvent *cm = (XClientMessageEvent *)message; +- if ((cm->message_type == manager_atom) && ((Atom)cm->data.l[1] == sysTraySelection)) { +- sysTrayWindow = cm->data.l[2]; +- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); +- XSelectInput(display, sysTrayWindow, StructureNotifyMask); +- for (int i = 0; i < trayIcons.count(); i++) { +- trayIcons[i]->addToTray(); +- } +- retval = true; +- } +- } else if (ev->type == PropertyNotify && ev->xproperty.atom == ATOM(_NET_SYSTEM_TRAY_VISUAL) && +- ev->xproperty.window == sysTrayWindow) { +- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); +- for (int i = 0; i < trayIcons.count(); i++) { +- trayIcons[i]->addToTray(); +- } +- } +- +- return retval; +-} +- +-QSystemTrayIconSys::QSystemTrayIconSys(QSystemTrayIcon *q) +- : QWidget(0, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint), +- q(q), colormap(0) +-{ +- setAttribute(Qt::WA_AlwaysShowToolTips); +- setAttribute(Qt::WA_QuitOnClose, false); +- setAttribute(Qt::WA_NoSystemBackground, true); +- setAttribute(Qt::WA_PaintOnScreen); +- +- static bool eventFilterAdded = false; +- Display *display = QX11Info::display(); +- if (!eventFilterAdded) { +- oldEventFilter = qApp->setEventFilter(sysTrayTracker); +- eventFilterAdded = true; +- Window root = QX11Info::appRootWindow(); +- XWindowAttributes attr; +- XGetWindowAttributes(display, root, &attr); +- if ((attr.your_event_mask & StructureNotifyMask) != StructureNotifyMask) { +- (void) QApplication::desktop(); // lame trick to ensure our event mask is not overridden +- XSelectInput(display, root, attr.your_event_mask | StructureNotifyMask); // for MANAGER selection +- } ++ if (pluginFactory) { ++ return; + } +- if (trayIcons.isEmpty()) { +- sysTrayWindow = locateSystemTray(); +- if (sysTrayWindow != XNone) +- XSelectInput(display, sysTrayWindow, StructureNotifyMask); // track tray events ++#ifndef QT_NO_LIBRARY ++ QFactoryLoader loader(QSystemTrayIconSysFactoryInterface_iid, QLatin1String("/systemtrayicon")); ++ pluginFactory = qobject_cast(loader.instance(QLatin1String("default"))); ++ if (pluginFactory) { ++ // Set parent to ensure factory destructor is called when application ++ // is closed ++ pluginFactory->setParent(QCoreApplication::instance()); ++ connect(pluginFactory, SIGNAL(availableChanged(bool)), SLOT(refreshTrayIconPrivates())); + } +- trayIcons.append(this); +- setMouseTracking(true); +-#ifndef QT_NO_TOOLTIP +- setToolTip(q->toolTip()); +-#endif +- if (sysTrayWindow != XNone) +- addToTray(); ++#endif // QT_NO_LIBRARY + } + +-QSystemTrayIconSys::~QSystemTrayIconSys() ++QSystemTrayIconSysFactoryInterface *QSystemTrayIconSysFactory::factory() const + { +- trayIcons.removeAt(trayIcons.indexOf(this)); +- Display *display = QX11Info::display(); +- if (trayIcons.isEmpty()) { +- if (sysTrayWindow == XNone) +- return; +- if (display) +- XSelectInput(display, sysTrayWindow, 0); // stop tracking the tray +- sysTrayWindow = XNone; ++ if (!pluginFactory) { ++ const_cast(this)->loadPluginFactory(); + } +- if (colormap) +- XFreeColormap(display, colormap); ++ if (pluginFactory && pluginFactory->isAvailable()) { ++ return pluginFactory; ++ } ++ static QXEmbedSystemTrayIconSysFactory def; ++ return def.isAvailable() ? &def : 0; + } + +-void QSystemTrayIconSys::addToTray() ++void QSystemTrayIconSysFactory::refreshTrayIconPrivates() + { +- Q_ASSERT(sysTrayWindow != XNone); +- Display *display = QX11Info::display(); +- +- XVisualInfo *vi = getSysTrayVisualInfo(); +- if (vi && vi->visual) { +- Window root = RootWindow(display, vi->screen); +- Window p = root; +- if (QWidget *pw = parentWidget()) +- p = pw->effectiveWinId(); +- colormap = XCreateColormap(display, root, vi->visual, AllocNone); +- XSetWindowAttributes wsa; +- wsa.background_pixmap = 0; +- wsa.colormap = colormap; +- wsa.background_pixel = 0; +- wsa.border_pixel = 0; +- Window wid = XCreateWindow(display, p, -1, -1, 1, 1, +- 0, vi->depth, InputOutput, vi->visual, +- CWBackPixmap|CWBackPixel|CWBorderPixel|CWColormap, &wsa); +- create(wid); +- } else { +- XSetWindowBackgroundPixmap(display, winId(), ParentRelative); +- } +- +- // GNOME, NET WM Specification +- static Atom netwm_tray_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False); +- long l[5] = { CurrentTime, SYSTEM_TRAY_REQUEST_DOCK, static_cast(winId()), 0, 0 }; +- XEvent ev; +- memset(&ev, 0, sizeof(ev)); +- ev.xclient.type = ClientMessage; +- ev.xclient.window = sysTrayWindow; +- ev.xclient.message_type = netwm_tray_atom; +- ev.xclient.format = 32; +- memcpy((char *)&ev.xclient.data, (const char *) l, sizeof(l)); +- XSendEvent(display, sysTrayWindow, False, 0, &ev); +- setMinimumSize(22, 22); // required at least on GNOME +-} +- +-void QSystemTrayIconSys::updateIcon() +-{ +- update(); +-} +- +-void QSystemTrayIconSys::resizeEvent(QResizeEvent *re) +-{ +- QWidget::resizeEvent(re); +- updateIcon(); +-} +- +-void QSystemTrayIconSys::paintEvent(QPaintEvent*) +-{ +- QPainter p(this); +- if (!getSysTrayVisualInfo()) { +- const QRegion oldSystemClip = p.paintEngine()->systemClip(); +- const QRect clearedRect = oldSystemClip.boundingRect(); +- XClearArea(QX11Info::display(), winId(), clearedRect.x(), clearedRect.y(), +- clearedRect.width(), clearedRect.height(), False); +- QPaintEngine *pe = p.paintEngine(); +- pe->setSystemClip(clearedRect); +- q->icon().paint(&p, rect()); +- pe->setSystemClip(oldSystemClip); +- } else { +- p.setCompositionMode(QPainter::CompositionMode_Source); +- p.fillRect(rect(), Qt::transparent); +- p.setCompositionMode(QPainter::CompositionMode_SourceOver); +- q->icon().paint(&p, rect()); ++ Q_FOREACH(QSystemTrayIconPrivate *trayIconPrivate, trayIconPrivates) { ++ if (trayIconPrivate->sys) { ++ delete trayIconPrivate->sys; ++ trayIconPrivate->sys = 0; ++ } ++ // When visible is true, sys is usually not 0 but it can be 0 if the ++ // call to install_sys() failed. ++ if (trayIconPrivate->visible) { ++ trayIconPrivate->install_sys(); ++ } + } + } + +-void QSystemTrayIconSys::mousePressEvent(QMouseEvent *ev) ++void QSystemTrayIconSysFactory::registerSystemTrayIconPrivate(QSystemTrayIconPrivate* trayIconPrivate) + { +- QPoint globalPos = ev->globalPos(); +- if (ev->button() == Qt::RightButton && q->contextMenu()) +- q->contextMenu()->popup(globalPos); +- +- if (QBalloonTip::isBalloonVisible()) { +- emit q->messageClicked(); +- QBalloonTip::hideBalloon(); +- } +- +- if (ev->button() == Qt::LeftButton) +- emit q->activated(QSystemTrayIcon::Trigger); +- else if (ev->button() == Qt::RightButton) +- emit q->activated(QSystemTrayIcon::Context); +- else if (ev->button() == Qt::MidButton) +- emit q->activated(QSystemTrayIcon::MiddleClick); ++ trayIconPrivates.insert(trayIconPrivate); + } + +-void QSystemTrayIconSys::mouseDoubleClickEvent(QMouseEvent *ev) ++void QSystemTrayIconSysFactory::unregisterSystemTrayIconPrivate(QSystemTrayIconPrivate* trayIconPrivate) + { +- if (ev->button() == Qt::LeftButton) +- emit q->activated(QSystemTrayIcon::DoubleClick); ++ trayIconPrivates.remove(trayIconPrivate); + } + +-#ifndef QT_NO_WHEELEVENT +-void QSystemTrayIconSys::wheelEvent(QWheelEvent *e) ++QAbstractSystemTrayIconSys *QSystemTrayIconSysFactory::create(QSystemTrayIcon *trayIcon) const + { +- QApplication::sendEvent(q, e); ++ QSystemTrayIconSysFactoryInterface *f = factory(); ++ if (!f) { ++ qWarning("No systemtrayicon available"); ++ return 0; ++ } ++ return f->create(trayIcon); + } +-#endif + +-bool QSystemTrayIconSys::event(QEvent *e) ++bool QSystemTrayIconSysFactory::isAvailable() const + { +- if (e->type() == QEvent::ToolTip) { +- return QApplication::sendEvent(q, e); +- } +- return QWidget::event(e); ++ return factory(); + } + +-bool QSystemTrayIconSys::x11Event(XEvent *event) ++//////////////////////////////////////////////// ++QSystemTrayIconPrivate::~QSystemTrayIconPrivate() + { +- if (event->type == ReparentNotify) +- show(); +- return QWidget::x11Event(event); ++ qt_guiSystemTrayIconSysFactory()->unregisterSystemTrayIconPrivate(this); ++ delete sys; + } + +-//////////////////////////////////////////////////////////////////////////// + void QSystemTrayIconPrivate::install_sys() + { + Q_Q(QSystemTrayIcon); +- if (!sys) +- sys = new QSystemTrayIconSys(q); ++ if (!sys) { ++ // Register ourself even if create() fails: our "sys" will get created ++ // later by refreshTrayIconPrivates() if a systemtray becomes ++ // available. This situation can happen for applications which are ++ // started at login time, while the desktop itself is starting up. ++ qt_guiSystemTrayIconSysFactory()->registerSystemTrayIconPrivate(this); ++ sys = qt_guiSystemTrayIconSysFactory()->create(q); ++ if (!sys) { ++ return; ++ } ++ } ++ sys->updateVisibility(); + } + + QRect QSystemTrayIconPrivate::geometry_sys() const + { +- if (!sys) +- return QRect(); +- return QRect(sys->mapToGlobal(QPoint(0, 0)), sys->size()); ++ if (!sys || !visible) ++ return QRect(); ++ return sys->geometry(); + } + + void QSystemTrayIconPrivate::remove_sys() +@@ -350,35 +161,35 @@ void QSystemTrayIconPrivate::remove_sys( + if (!sys) + return; + QBalloonTip::hideBalloon(); +- sys->hide(); // this should do the trick, but... +- delete sys; // wm may resize system tray only for DestroyEvents +- sys = 0; ++ sys->updateVisibility(); + } + + void QSystemTrayIconPrivate::updateIcon_sys() + { +- if (!sys) ++ if (!sys || !visible) + return; + sys->updateIcon(); + } + + void QSystemTrayIconPrivate::updateMenu_sys() + { +- ++ if (!sys || !visible) ++ return; ++ sys->updateMenu(); + } + + void QSystemTrayIconPrivate::updateToolTip_sys() + { +- if (!sys) ++ if (!sys || !visible) + return; + #ifndef QT_NO_TOOLTIP +- sys->setToolTip(toolTip); ++ sys->updateToolTip(); + #endif + } + + bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys() + { +- return QSystemTrayIconSys::locateSystemTray() != XNone; ++ return qt_guiSystemTrayIconSysFactory()->isAvailable(); + } + + bool QSystemTrayIconPrivate::supportsMessages_sys() +@@ -389,12 +200,9 @@ bool QSystemTrayIconPrivate::supportsMes + void QSystemTrayIconPrivate::showMessage_sys(const QString &message, const QString &title, + QSystemTrayIcon::MessageIcon icon, int msecs) + { +- if (!sys) ++ if (!sys || !visible) + return; +- QPoint g = sys->mapToGlobal(QPoint(0, 0)); +- QBalloonTip::showBalloon(icon, message, title, sys->q, +- QPoint(g.x() + sys->width()/2, g.y() + sys->height()/2), +- msecs); ++ sys->showMessage(message, title, icon, msecs); + } + + QT_END_NAMESPACE +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11.cpp.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11.cpp +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11.cpp.systemtrayicon 2014-03-31 18:16:39.709974914 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11.cpp 2014-03-31 18:16:39.709974914 -0500 +@@ -0,0 +1,469 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtGui module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** GNU Lesser General Public License Usage ++** This file may be used under the terms of the GNU Lesser General Public ++** License version 2.1 as published by the Free Software Foundation and ++** appearing in the file LICENSE.LGPL included in the packaging of this ++** file. Please review the following information to ensure the GNU Lesser ++** General Public License version 2.1 requirements will be met: ++** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU General ++** Public License version 3.0 as published by the Free Software Foundation ++** and appearing in the file LICENSE.GPL included in the packaging of this ++** file. Please review the following information to ensure the GNU General ++** Public License version 3.0 requirements will be met: ++** http://www.gnu.org/copyleft/gpl.html. ++** ++** Other Usage ++** Alternatively, this file may be used in accordance with the terms and ++** conditions contained in a signed written agreement between you and Nokia. ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++#include "qxembedsystemtrayicon_x11_p.h" ++ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include "private/qt_x11_p.h" ++#include "qapplication.h" ++#include "qevent.h" ++#include "qlist.h" ++#include "qmenu.h" ++#include "qpainter.h" ++#include "qpaintengine.h" ++#include "qsystemtrayicon_p.h" ++#include "qx11info_x11.h" ++ ++QT_BEGIN_INCLUDE_NAMESPACE ++#include ++#include ++#include ++#include ++QT_END_INCLUDE_NAMESPACE ++ ++QT_BEGIN_NAMESPACE ++ ++class QSystemTrayIconWidget : public QWidget ++{ ++public: ++ QSystemTrayIconWidget(QSystemTrayIcon *q, QXEmbedSystemTrayIconSys *s); ++ ~QSystemTrayIconWidget(); ++ ++ static Window locateSystemTray(); ++ ++protected: ++ void paintEvent(QPaintEvent *pe); ++ void resizeEvent(QResizeEvent *re); ++ bool x11Event(XEvent *event); ++ void mousePressEvent(QMouseEvent *event); ++ void mouseDoubleClickEvent(QMouseEvent *event); ++#ifndef QT_NO_WHEELEVENT ++ void wheelEvent(QWheelEvent *event); ++#endif ++ bool event(QEvent *e); ++ ++private: ++ enum { ++ SYSTEM_TRAY_REQUEST_DOCK = 0, ++ SYSTEM_TRAY_BEGIN_MESSAGE = 1, ++ SYSTEM_TRAY_CANCEL_MESSAGE =2 ++ }; ++ ++ void addToTray(); ++ static XVisualInfo* getSysTrayVisualInfo(); ++ ++ static Window sysTrayWindow; ++ static QList trayIcons; ++ static QCoreApplication::EventFilter oldEventFilter; ++ static bool sysTrayTracker(void *message, long *result); ++ static Atom sysTraySelection; ++ static XVisualInfo sysTrayVisual; ++ ++ QSystemTrayIcon *q; ++ QXEmbedSystemTrayIconSys *sys; ++ Colormap colormap; ++}; ++ ++Window QSystemTrayIconWidget::sysTrayWindow = XNone; ++QList QSystemTrayIconWidget::trayIcons; ++QCoreApplication::EventFilter QSystemTrayIconWidget::oldEventFilter = 0; ++Atom QSystemTrayIconWidget::sysTraySelection = XNone; ++XVisualInfo QSystemTrayIconWidget::sysTrayVisual = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; ++ ++QSystemTrayIconWidget::QSystemTrayIconWidget(QSystemTrayIcon* q, QXEmbedSystemTrayIconSys* sys) ++: QWidget(0, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint) ++, q(q) ++, sys(sys) ++, colormap(0) ++{ ++ setAttribute(Qt::WA_AlwaysShowToolTips); ++ setAttribute(Qt::WA_QuitOnClose, false); ++ setAttribute(Qt::WA_NoSystemBackground, true); ++ setAttribute(Qt::WA_PaintOnScreen); ++ setMouseTracking(true); ++#ifndef QT_NO_TOOLTIP ++ setToolTip(q->toolTip()); ++#endif ++ ++ static bool eventFilterAdded = false; ++ Display *display = QX11Info::display(); ++ if (!eventFilterAdded) { ++ oldEventFilter = qApp->setEventFilter(sysTrayTracker); ++ eventFilterAdded = true; ++ Window root = QX11Info::appRootWindow(); ++ XWindowAttributes attr; ++ XGetWindowAttributes(display, root, &attr); ++ if ((attr.your_event_mask & StructureNotifyMask) != StructureNotifyMask) { ++ (void) QApplication::desktop(); // lame trick to ensure our event mask is not overridden ++ XSelectInput(display, root, attr.your_event_mask | StructureNotifyMask); // for MANAGER selection ++ } ++ } ++ if (trayIcons.isEmpty()) { ++ sysTrayWindow = locateSystemTray(); ++ if (sysTrayWindow != XNone) ++ XSelectInput(display, sysTrayWindow, StructureNotifyMask); // track tray events ++ } ++ trayIcons.append(this); ++ if (sysTrayWindow != XNone) ++ addToTray(); ++} ++ ++QSystemTrayIconWidget::~QSystemTrayIconWidget() ++{ ++ trayIcons.removeAt(trayIcons.indexOf(this)); ++ Display *display = QX11Info::display(); ++ if (trayIcons.isEmpty()) { ++ if (sysTrayWindow == XNone) ++ return; ++ if (display) ++ XSelectInput(display, sysTrayWindow, 0); // stop tracking the tray ++ sysTrayWindow = XNone; ++ } ++ if (colormap) ++ XFreeColormap(display, colormap); ++} ++ ++void QSystemTrayIconWidget::resizeEvent(QResizeEvent *re) ++{ ++ QWidget::resizeEvent(re); ++ update(); ++} ++ ++void QSystemTrayIconWidget::paintEvent(QPaintEvent*) ++{ ++ QPainter p(this); ++ if (!getSysTrayVisualInfo()) { ++ const QRegion oldSystemClip = p.paintEngine()->systemClip(); ++ const QRect clearedRect = oldSystemClip.boundingRect(); ++ XClearArea(QX11Info::display(), winId(), clearedRect.x(), clearedRect.y(), ++ clearedRect.width(), clearedRect.height(), False); ++ QPaintEngine *pe = p.paintEngine(); ++ pe->setSystemClip(clearedRect); ++ q->icon().paint(&p, rect()); ++ pe->setSystemClip(oldSystemClip); ++ } else { ++ p.setCompositionMode(QPainter::CompositionMode_Source); ++ p.fillRect(rect(), Qt::transparent); ++ p.setCompositionMode(QPainter::CompositionMode_SourceOver); ++ q->icon().paint(&p, rect()); ++ } ++} ++ ++void QSystemTrayIconWidget::mousePressEvent(QMouseEvent *ev) ++{ ++ QPoint globalPos = ev->globalPos(); ++ if (ev->button() == Qt::RightButton && q->contextMenu()) ++ q->contextMenu()->popup(globalPos); ++ ++ if (QBalloonTip::isBalloonVisible()) { ++ QMetaObject::invokeMethod(q, "messageClicked"); ++ QBalloonTip::hideBalloon(); ++ } ++ ++ if (ev->button() == Qt::LeftButton) ++ qtsystray_sendActivated(q, QSystemTrayIcon::Trigger); ++ else if (ev->button() == Qt::RightButton) ++ qtsystray_sendActivated(q, QSystemTrayIcon::Context); ++ else if (ev->button() == Qt::MidButton) ++ qtsystray_sendActivated(q, QSystemTrayIcon::MiddleClick); ++} ++ ++void QSystemTrayIconWidget::mouseDoubleClickEvent(QMouseEvent *ev) ++{ ++ if (ev->button() == Qt::LeftButton) ++ qtsystray_sendActivated(q, QSystemTrayIcon::DoubleClick); ++} ++ ++#ifndef QT_NO_WHEELEVENT ++void QSystemTrayIconWidget::wheelEvent(QWheelEvent *e) ++{ ++ sys->sendWheelEventToTrayIcon(e->delta(), e->orientation()); ++} ++#endif ++ ++bool QSystemTrayIconWidget::event(QEvent *e) ++{ ++ if (e->type() == QEvent::ToolTip) { ++ sys->sendToolTipEventToTrayIcon(); ++ } ++ return QWidget::event(e); ++} ++ ++bool QSystemTrayIconWidget::x11Event(XEvent *event) ++{ ++ if (event->type == ReparentNotify) ++ show(); ++ return QWidget::x11Event(event); ++} ++ ++// Locate the system tray ++Window QSystemTrayIconWidget::locateSystemTray() ++{ ++ Display *display = QX11Info::display(); ++ if (sysTraySelection == XNone) { ++ int screen = QX11Info::appScreen(); ++ QString net_sys_tray = QString::fromLatin1("_NET_SYSTEM_TRAY_S%1").arg(screen); ++ sysTraySelection = XInternAtom(display, net_sys_tray.toLatin1(), False); ++ } ++ ++ return XGetSelectionOwner(QX11Info::display(), sysTraySelection); ++} ++ ++XVisualInfo* QSystemTrayIconWidget::getSysTrayVisualInfo() ++{ ++ Display *display = QX11Info::display(); ++ ++ if (!sysTrayVisual.visual) { ++ Window win = locateSystemTray(); ++ if (win != XNone) { ++ Atom actual_type; ++ int actual_format; ++ ulong nitems, bytes_remaining; ++ uchar *data = 0; ++ int result = XGetWindowProperty(display, win, ATOM(_NET_SYSTEM_TRAY_VISUAL), 0, 1, ++ False, XA_VISUALID, &actual_type, ++ &actual_format, &nitems, &bytes_remaining, &data); ++ VisualID vid = 0; ++ if (result == Success && data && actual_type == XA_VISUALID && actual_format == 32 && ++ nitems == 1 && bytes_remaining == 0) ++ vid = *(VisualID*)data; ++ if (data) ++ XFree(data); ++ if (vid == 0) ++ return 0; ++ ++ uint mask = VisualIDMask; ++ XVisualInfo *vi, rvi; ++ int count; ++ rvi.visualid = vid; ++ vi = XGetVisualInfo(display, mask, &rvi, &count); ++ if (vi) { ++ sysTrayVisual = vi[0]; ++ XFree((char*)vi); ++ } ++ if (sysTrayVisual.depth != 32) ++ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); ++ } ++ } ++ ++ return sysTrayVisual.visual ? &sysTrayVisual : 0; ++} ++ ++bool QSystemTrayIconWidget::sysTrayTracker(void *message, long *result) ++{ ++ bool retval = false; ++ if (QSystemTrayIconWidget::oldEventFilter) ++ retval = QSystemTrayIconWidget::oldEventFilter(message, result); ++ ++ if (trayIcons.isEmpty()) ++ return retval; ++ ++ Display *display = QX11Info::display(); ++ XEvent *ev = (XEvent *)message; ++ if (ev->type == DestroyNotify && ev->xany.window == sysTrayWindow) { ++ sysTrayWindow = locateSystemTray(); ++ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); ++ for (int i = 0; i < trayIcons.count(); i++) { ++ if (sysTrayWindow == XNone) { ++ QBalloonTip::hideBalloon(); ++ trayIcons[i]->hide(); // still no luck ++ trayIcons[i]->destroy(); ++ trayIcons[i]->create(); ++ } else ++ trayIcons[i]->addToTray(); // add it to the new tray ++ } ++ retval = true; ++ } else if (ev->type == ClientMessage && sysTrayWindow == XNone) { ++ static Atom manager_atom = XInternAtom(display, "MANAGER", False); ++ XClientMessageEvent *cm = (XClientMessageEvent *)message; ++ if ((cm->message_type == manager_atom) && ((Atom)cm->data.l[1] == sysTraySelection)) { ++ sysTrayWindow = cm->data.l[2]; ++ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); ++ XSelectInput(display, sysTrayWindow, StructureNotifyMask); ++ for (int i = 0; i < trayIcons.count(); i++) { ++ trayIcons[i]->addToTray(); ++ } ++ retval = true; ++ } ++ } else if (ev->type == PropertyNotify && ev->xproperty.atom == ATOM(_NET_SYSTEM_TRAY_VISUAL) && ++ ev->xproperty.window == sysTrayWindow) { ++ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); ++ for (int i = 0; i < trayIcons.count(); i++) { ++ trayIcons[i]->addToTray(); ++ } ++ } ++ ++ return retval; ++} ++ ++void QSystemTrayIconWidget::addToTray() ++{ ++ Q_ASSERT(sysTrayWindow != XNone); ++ Display *display = QX11Info::display(); ++ ++ XVisualInfo *vi = getSysTrayVisualInfo(); ++ if (vi && vi->visual) { ++ Window root = RootWindow(display, vi->screen); ++ Window p = root; ++ if (QWidget *pw = parentWidget()) ++ p = pw->effectiveWinId(); ++ colormap = XCreateColormap(display, root, vi->visual, AllocNone); ++ XSetWindowAttributes wsa; ++ wsa.background_pixmap = 0; ++ wsa.colormap = colormap; ++ wsa.background_pixel = 0; ++ wsa.border_pixel = 0; ++ Window wid = XCreateWindow(display, p, -1, -1, 1, 1, ++ 0, vi->depth, InputOutput, vi->visual, ++ CWBackPixmap|CWBackPixel|CWBorderPixel|CWColormap, &wsa); ++ create(wid); ++ } else { ++ XSetWindowBackgroundPixmap(display, winId(), ParentRelative); ++ } ++ ++ // GNOME, NET WM Specification ++ static Atom netwm_tray_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False); ++ long l[5] = { CurrentTime, SYSTEM_TRAY_REQUEST_DOCK, static_cast(winId()), 0, 0 }; ++ XEvent ev; ++ memset(&ev, 0, sizeof(ev)); ++ ev.xclient.type = ClientMessage; ++ ev.xclient.window = sysTrayWindow; ++ ev.xclient.message_type = netwm_tray_atom; ++ ev.xclient.format = 32; ++ memcpy((char *)&ev.xclient.data, (const char *) l, sizeof(l)); ++ XSendEvent(display, sysTrayWindow, False, 0, &ev); ++ setMinimumSize(22, 22); // required at least on GNOME ++} ++ ++//////////////////////////////////////////////////////////////////////////// ++QXEmbedSystemTrayIconSys::QXEmbedSystemTrayIconSys(QSystemTrayIcon *q) ++: QAbstractSystemTrayIconSys(q) ++, widget(0) ++{ ++} ++ ++QXEmbedSystemTrayIconSys::~QXEmbedSystemTrayIconSys() ++{ ++ delete widget; ++} ++ ++QRect QXEmbedSystemTrayIconSys::geometry() const ++{ ++ if (!widget) ++ return QRect(); ++ return QRect(widget->mapToGlobal(QPoint(0, 0)), widget->size()); ++} ++ ++void QXEmbedSystemTrayIconSys::updateIcon() ++{ ++ if (!widget) ++ return; ++ widget->update(); ++} ++ ++void QXEmbedSystemTrayIconSys::updateToolTip() ++{ ++ if (!widget) ++ return; ++ widget->setToolTip(trayIcon->toolTip()); ++} ++ ++void QXEmbedSystemTrayIconSys::showMessage(const QString &message, const QString &title, ++ QSystemTrayIcon::MessageIcon icon, int msecs) ++{ ++ if (!widget) ++ return; ++ QPoint point = geometry().center(); ++ QBalloonTip::showBalloon(icon, message, title, trayIcon, point, msecs); ++} ++ ++void QXEmbedSystemTrayIconSys::updateVisibility() ++{ ++ bool visible = trayIcon->isVisible(); ++ if (visible && !widget) ++ widget = new QSystemTrayIconWidget(trayIcon, this); ++ else if (!visible && widget) { ++ delete widget; ++ widget = 0; ++ } ++} ++ ++void QXEmbedSystemTrayIconSys::sendToolTipEventToTrayIcon() ++{ ++#ifndef QT_NO_TOOLTIP ++ // Pass the event through QSystemTrayIcon so that it gets a chance to ++ // update the tooltip, then asks widget to show the tooltip ++ Q_ASSERT(widget); ++ QPoint globalPos = QCursor::pos(); ++ QPoint pos = widget->mapFromGlobal(globalPos); ++ QHelpEvent event(QEvent::ToolTip, pos, globalPos); ++ QApplication::sendEvent(trayIcon, &event); ++#endif ++} ++ ++void QXEmbedSystemTrayIconSys::sendWheelEventToTrayIcon(int delta, Qt::Orientation orientation) ++{ ++#ifndef QT_NO_WHEELEVENT ++ Q_ASSERT(widget); ++ QPoint globalPos = QCursor::pos(); ++ QPoint pos = widget->mapFromGlobal(globalPos); ++ QWheelEvent event(pos, globalPos, delta, Qt::NoButton, Qt::NoModifier, orientation); ++ QApplication::sendEvent(trayIcon, &event); ++#endif ++} ++ ++void QXEmbedSystemTrayIconSys::updateMenu() ++{ ++} ++ ++///////////////////////////////////////////////////////////// ++QAbstractSystemTrayIconSys * QXEmbedSystemTrayIconSysFactory::create(QSystemTrayIcon *icon) ++{ ++ return new QXEmbedSystemTrayIconSys(icon); ++} ++ ++bool QXEmbedSystemTrayIconSysFactory::isAvailable() const ++{ ++ return QSystemTrayIconWidget::locateSystemTray() != XNone; ++} ++ ++QT_END_NAMESPACE ++#endif //QT_NO_SYSTEMTRAYICON +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11_p.h.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11_p.h +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11_p.h.systemtrayicon 2014-03-31 18:16:39.709974914 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11_p.h 2014-03-31 18:16:39.709974914 -0500 +@@ -0,0 +1,104 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtGui module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** GNU Lesser General Public License Usage ++** This file may be used under the terms of the GNU Lesser General Public ++** License version 2.1 as published by the Free Software Foundation and ++** appearing in the file LICENSE.LGPL included in the packaging of this ++** file. Please review the following information to ensure the GNU Lesser ++** General Public License version 2.1 requirements will be met: ++** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU General ++** Public License version 3.0 as published by the Free Software Foundation ++** and appearing in the file LICENSE.GPL included in the packaging of this ++** file. Please review the following information to ensure the GNU General ++** Public License version 3.0 requirements will be met: ++** http://www.gnu.org/copyleft/gpl.html. ++** ++** Other Usage ++** Alternatively, this file may be used in accordance with the terms and ++** conditions contained in a signed written agreement between you and Nokia. ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#ifndef QXEMBEDSYSTEMTRAYICON_X11_P_H ++#define QXEMBEDSYSTEMTRAYICON_X11_P_H ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists for the convenience ++// of a number of Qt sources files. This header file may change from ++// version to version without notice, or even be removed. ++// ++// We mean it. ++// ++ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include "qabstractsystemtrayiconsys_p.h" ++ ++QT_BEGIN_NAMESPACE ++ ++class QSystemTrayIconWidget; ++ ++class QXEmbedSystemTrayIconSys : public QAbstractSystemTrayIconSys ++{ ++public: ++ QXEmbedSystemTrayIconSys(QSystemTrayIcon *); ++ ~QXEmbedSystemTrayIconSys(); ++ ++ QRect geometry() const; ++ ++ void updateVisibility(); ++ ++ void updateIcon(); ++ ++ void updateToolTip(); ++ ++ void updateMenu(); ++ ++ void showMessage(const QString &message, const QString &title, ++ QSystemTrayIcon::MessageIcon icon, int msecs); ++ ++private: ++ friend class QSystemTrayIconWidget; ++ QSystemTrayIconWidget *widget; ++ ++ void sendToolTipEventToTrayIcon(); ++ ++ void sendWheelEventToTrayIcon(int delta, Qt::Orientation orientation); ++}; ++ ++struct QXEmbedSystemTrayIconSysFactory : public QSystemTrayIconSysFactoryInterface ++{ ++ QAbstractSystemTrayIconSys * create(QSystemTrayIcon *trayIcon); ++ bool isAvailable() const; ++}; ++ ++ ++QT_END_NAMESPACE ++ ++#endif // QT_NO_SYSTEMTRAYICON ++ ++#endif // QXEMBEDSYSTEMTRAYICON_X11_P_H ++ +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/util/util.pri.systemtrayicon qt-everywhere-opensource-src-4.8.6/src/gui/util/util.pri +--- qt-everywhere-opensource-src-4.8.6/src/gui/util/util.pri.systemtrayicon 2014-03-30 15:36:49.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/util.pri 2014-03-31 18:16:39.710974903 -0500 +@@ -29,8 +29,13 @@ wince* { + } + + unix:x11 { ++ HEADERS += \ ++ util/qabstractsystemtrayiconsys_p.h \ ++ util/qxembedsystemtrayicon_x11_p.h + SOURCES += \ +- util/qsystemtrayicon_x11.cpp ++ util/qabstractsystemtrayiconsys.cpp \ ++ util/qsystemtrayicon_x11.cpp \ ++ util/qxembedsystemtrayicon_x11.cpp + } + + embedded|qpa { diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.7-QT_VERSION_CHECK.patch b/SOURCES/qt-everywhere-opensource-src-4.8.7-QT_VERSION_CHECK.patch new file mode 100644 index 0000000..9bce98f --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.7-QT_VERSION_CHECK.patch @@ -0,0 +1,12 @@ +diff -up qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h.majmin qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h +--- qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h.majmin 2015-05-07 09:14:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h 2016-12-08 12:10:29.677359701 -0600 +@@ -52,7 +52,7 @@ + /* + can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0)) + */ +-#define QT_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch)) ++#define QT_VERSION_CHECK(qt_version_check_major, qt_version_check_minor, qt_version_check_patch) ((qt_version_check_major<<16)|(qt_version_check_minor<<8)|(qt_version_check_patch)) + + #define QT_PACKAGEDATE_STR "2015-05-07" + diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.7-alsa-1.1.patch b/SOURCES/qt-everywhere-opensource-src-4.8.7-alsa-1.1.patch new file mode 100644 index 0000000..aaa15cb --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.7-alsa-1.1.patch @@ -0,0 +1,12 @@ +diff -up qt-everywhere-opensource-src-4.8.7/config.tests/unix/alsa/alsatest.cpp.than qt-everywhere-opensource-src-4.8.7/config.tests/unix/alsa/alsatest.cpp +--- qt-everywhere-opensource-src-4.8.7/config.tests/unix/alsa/alsatest.cpp.than 2016-02-10 16:31:02.450152334 +0100 ++++ qt-everywhere-opensource-src-4.8.7/config.tests/unix/alsa/alsatest.cpp 2016-02-10 16:31:51.495307579 +0100 +@@ -40,7 +40,7 @@ + ****************************************************************************/ + + #include +-#if(!(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 10)) ++#if(!(SND_LIB_MAJOR == 1 && (SND_LIB_MINOR > 0 || SND_LIB_SUBMINOR >= 10))) + #error "Alsa version found too old, require >= 1.0.10" + #endif + diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.7-firebird.patch b/SOURCES/qt-everywhere-opensource-src-4.8.7-firebird.patch new file mode 100644 index 0000000..456abce --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.7-firebird.patch @@ -0,0 +1,45 @@ +diff -up qt-everywhere-opensource-src-4.8.7/config.tests/unix/ibase/ibase.cpp.ibase qt-everywhere-opensource-src-4.8.7/config.tests/unix/ibase/ibase.cpp +--- qt-everywhere-opensource-src-4.8.7/config.tests/unix/ibase/ibase.cpp.ibase 2015-05-07 09:14:42.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/config.tests/unix/ibase/ibase.cpp 2016-11-30 10:55:05.825339674 -0600 +@@ -39,7 +39,7 @@ + ** + ****************************************************************************/ + +-#include ++#include + + int main(int, char **) + { +diff -up qt-everywhere-opensource-src-4.8.7/config.tests/unix/ibase/ibase.pro.ibase qt-everywhere-opensource-src-4.8.7/config.tests/unix/ibase/ibase.pro +--- qt-everywhere-opensource-src-4.8.7/config.tests/unix/ibase/ibase.pro.ibase 2015-05-07 09:14:42.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/config.tests/unix/ibase/ibase.pro 2016-11-30 10:56:11.017740104 -0600 +@@ -1,4 +1,4 @@ + SOURCES = ibase.cpp + CONFIG -= qt dylib + mac:CONFIG -= app_bundle +-LIBS += -lgds ++LIBS += -lfbclient +diff -up qt-everywhere-opensource-src-4.8.7/src/sql/drivers/ibase/qsql_ibase.h.ibase qt-everywhere-opensource-src-4.8.7/src/sql/drivers/ibase/qsql_ibase.h +--- qt-everywhere-opensource-src-4.8.7/src/sql/drivers/ibase/qsql_ibase.h.ibase 2015-05-07 09:14:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/sql/drivers/ibase/qsql_ibase.h 2016-11-30 10:57:34.516252974 -0600 +@@ -45,7 +45,7 @@ + #include + #include + #include +-#include ++#include + + QT_BEGIN_HEADER + +diff -up qt-everywhere-opensource-src-4.8.7/src/sql/drivers/ibase/qsql_ibase.pri.ibase qt-everywhere-opensource-src-4.8.7/src/sql/drivers/ibase/qsql_ibase.pri +--- qt-everywhere-opensource-src-4.8.7/src/sql/drivers/ibase/qsql_ibase.pri.ibase 2015-05-07 09:14:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/sql/drivers/ibase/qsql_ibase.pri 2016-11-30 10:57:11.783113341 -0600 +@@ -2,7 +2,7 @@ HEADERS += $$PWD/qsql_ibase.h + SOURCES += $$PWD/qsql_ibase.cpp + + unix { +- !contains(LIBS, .*gds.*):!contains(LIBS, .*libfb.*):LIBS += -lgds ++ !contains(LIBS, .*gds.*):!contains(LIBS, .*libfb.*):LIBS += -lfbclient + } else { + !contains(LIBS, .*gds.*):!contains(LIBS, .*fbclient.*) { + win32-borland:LIBS += gds32.lib diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.7-gcc6.patch b/SOURCES/qt-everywhere-opensource-src-4.8.7-gcc6.patch new file mode 100644 index 0000000..aaf1c49 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.7-gcc6.patch @@ -0,0 +1,35 @@ +diff -up qt-everywhere-opensource-src-4.8.7/configure.gcc6 qt-everywhere-opensource-src-4.8.7/configure +--- qt-everywhere-opensource-src-4.8.7/configure.gcc6 2016-04-15 07:04:19.430268222 -0500 ++++ qt-everywhere-opensource-src-4.8.7/configure 2016-04-15 07:05:22.157568689 -0500 +@@ -7744,7 +7744,7 @@ case "$XPLATFORM" in + *-g++*) + # Check gcc's version + case "$(${QMAKE_CONF_COMPILER} -dumpversion)" in +- 5*|4*|3.4*) ++ 8*|7*|6*|5*|4*|3.4*) + ;; + 3.3*) + canBuildWebKit="no" +@@ -8060,7 +8060,7 @@ g++*) + 3.*) + COMPILER_VERSION="3.*" + ;; +- 5*|4.*) ++ 8*|7*|6*|5*|4.*) + COMPILER_VERSION="4" + ;; + *) +diff -up qt-everywhere-opensource-src-4.8.7/src/xmlpatterns/api/qcoloroutput_p.h.gcc6 qt-everywhere-opensource-src-4.8.7/src/xmlpatterns/api/qcoloroutput_p.h +--- qt-everywhere-opensource-src-4.8.7/src/xmlpatterns/api/qcoloroutput_p.h.gcc6 2015-05-07 09:14:48.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.7/src/xmlpatterns/api/qcoloroutput_p.h 2016-04-15 07:04:19.431268227 -0500 +@@ -70,8 +70,8 @@ namespace QPatternist + ForegroundShift = 10, + BackgroundShift = 20, + SpecialShift = 20, +- ForegroundMask = ((1 << ForegroundShift) - 1) << ForegroundShift, +- BackgroundMask = ((1 << BackgroundShift) - 1) << BackgroundShift ++ ForegroundMask = 0x1f << ForegroundShift, ++ BackgroundMask = 0x7 << BackgroundShift + }; + + public: diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.7-mips64.patch b/SOURCES/qt-everywhere-opensource-src-4.8.7-mips64.patch new file mode 100644 index 0000000..6456f2c --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.7-mips64.patch @@ -0,0 +1,13 @@ +diff -urp qt-everywhere-opensource-src-4.8.7/configure q/configure +--- qt-everywhere-opensource-src-4.8.7/configure 2016-04-03 16:49:50.218644449 +0200 ++++ q/configure 2016-04-03 17:22:35.376405024 +0200 +@@ -3331,6 +3331,9 @@ arm*) + CFG_ARCH=arm + COMPAT_ARCH=armv6 + ;; ++mips*) ++ CFG_ARCH=mips ++ ;; + esac + + if [ -d "$relpath/src/corelib/arch/$CFG_ARCH" ]; then diff --git a/SOURCES/qt-everywhere-opensource-src-4.8.7-revert-font-cache-fix.patch b/SOURCES/qt-everywhere-opensource-src-4.8.7-revert-font-cache-fix.patch new file mode 100644 index 0000000..ff93cf7 --- /dev/null +++ b/SOURCES/qt-everywhere-opensource-src-4.8.7-revert-font-cache-fix.patch @@ -0,0 +1,15 @@ +diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp +index d937f38d..2b996440 100644 +--- a/src/gui/text/qfontengine_ft.cpp ++++ b/src/gui/text/qfontengine_ft.cpp +@@ -1603,9 +1603,7 @@ void QFontEngineFT::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlag + (flags & HB_ShaperFlag_UseDesignMetrics)) && FT_IS_SCALABLE(freetype->face); + for (int i = 0; i < glyphs->numGlyphs; i++) { + Glyph *g = defaultGlyphSet.getGlyph(glyphs->glyphs[i]); +- // Since we are passing Format_None to loadGlyph, use same default format logic as loadGlyph +- GlyphFormat acceptableFormat = (defaultFormat != Format_None) ? defaultFormat : Format_Mono; +- if (g && g->format == acceptableFormat) { ++ if (g) { + glyphs->advances_x[i] = design ? QFixed::fromFixed(g->linearAdvance) : QFixed(g->advance); + } else { + if (!face) diff --git a/SOURCES/qt-gcc-warning-overflow.patch b/SOURCES/qt-gcc-warning-overflow.patch new file mode 100644 index 0000000..fe3fc70 --- /dev/null +++ b/SOURCES/qt-gcc-warning-overflow.patch @@ -0,0 +1,13 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/corelib/tools/qstring.h.than qt-everywhere-opensource-src-4.8.5/src/corelib/tools/qstring.h +diff -up qt-everywhere-opensource-src-4.8.5/src/sql/kernel/qsqldriver.cpp.than qt-everywhere-opensource-src-4.8.5/src/sql/kernel/qsqldriver.cpp +--- qt-everywhere-opensource-src-4.8.5/src/sql/kernel/qsqldriver.cpp.than 2013-11-21 10:51:56.200161500 +0100 ++++ qt-everywhere-opensource-src-4.8.5/src/sql/kernel/qsqldriver.cpp 2013-11-21 12:51:32.594269183 +0100 +@@ -530,7 +530,7 @@ QString QSqlDriver::sqlStatement(Stateme + s.clear(); + } else { + vals.chop(2); // remove trailing comma +- s[s.length() - 2] = QLatin1Char(')'); ++ s[uint(s.length()) - 2] = QLatin1Char(')'); + s.append(QLatin1String("VALUES (")).append(vals).append(QLatin1Char(')')); + } + break; } diff --git a/SOURCES/qt-prefer_adwaita_on_gnome.patch b/SOURCES/qt-prefer_adwaita_on_gnome.patch new file mode 100644 index 0000000..6a6239e --- /dev/null +++ b/SOURCES/qt-prefer_adwaita_on_gnome.patch @@ -0,0 +1,17 @@ +--- a/src/gui/kernel/qguiplatformplugin.cpp.adwaita 2015-02-12 14:32:45.217935391 +0100 ++++ b/src/gui/kernel/qguiplatformplugin.cpp 2015-02-12 14:46:11.471866038 +0100 +@@ -165,8 +165,13 @@ QString QGuiPlatformPlugin::styleName() + case DE_GNOME: { + QStringList availableStyles = QStyleFactory::keys(); + // Set QGtkStyle for GNOME if available ++ QString adwaitaStyleKey = QString::fromLatin1("adwaita"); + QString gtkStyleKey = QString::fromLatin1("GTK+"); +- if (availableStyles.contains(gtkStyleKey)) { ++ if (availableStyles.contains(adwaitaStyleKey)) { ++ stylename = adwaitaStyleKey; ++ break; ++ } ++ else if (availableStyles.contains(gtkStyleKey)) { + stylename = gtkStyleKey; + break; + } diff --git a/SOURCES/qt-revert-QTBUG-15319-fix-shortcuts-with-secondary-Xkb.patch b/SOURCES/qt-revert-QTBUG-15319-fix-shortcuts-with-secondary-Xkb.patch new file mode 100644 index 0000000..f6ea98c --- /dev/null +++ b/SOURCES/qt-revert-QTBUG-15319-fix-shortcuts-with-secondary-Xkb.patch @@ -0,0 +1,40 @@ +From 0bbc2108aa2fe60c32f3fb01926e707cc29e0b81 Mon Sep 17 00:00:00 2001 +From: Gatis Paeglis +Date: Sat, 31 Aug 2013 21:22:47 +0200 +Subject: [PATCH] Revert "QTBUG-15319: fix shortcuts with secondary Xkb + layout." + +The change which attempted to fix QTBUG-15319 broke keyboard +shortcuts for non latin keyboard layouts. + +This patch reverts QTBUG-15319 (f45cdeda8) since it caused a +regression. + +Task-number: QTBUG-32908 + +Change-Id: I47d7984fa7986d5218d1f3ff1fc36d2ec67c9ba7 +Reviewed-by: David Faure +--- + src/gui/kernel/qkeymapper_x11.cpp | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/src/gui/kernel/qkeymapper_x11.cpp b/src/gui/kernel/qkeymapper_x11.cpp +index 005ff3f..7daa41d 100644 +--- a/src/gui/kernel/qkeymapper_x11.cpp ++++ b/src/gui/kernel/qkeymapper_x11.cpp +@@ -282,12 +282,9 @@ QList QKeyMapperPrivate::possibleKeysXKB(QKeyEvent *event) + + // first, translate key only using lock modifiers (there are no Qt equivalents for these, so we must + // always use them when determining the baseKeySym) +- // Note: the Xkb group to be used for the conversion keycode->keysym has to be given to +- // XkbLookupKeySym(). This information is contained in the bits 8 to 15 of xmodifiers. +- // See https://bugreports.qt-project.org/browse/QTBUG-15319 . + KeySym baseKeySym; + uint consumedModifiers; +- if (!XkbLookupKeySym(X11->display, xkeycode, (xmodifiers & (0xff00 | LockMask | qt_num_lock_mask)), ++ if (!XkbLookupKeySym(X11->display, xkeycode, (xmodifiers & (LockMask | qt_num_lock_mask)), + &consumedModifiers, &baseKeySym)) + return QList(); + +-- +1.9.3 diff --git a/SOURCES/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch b/SOURCES/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch new file mode 100644 index 0000000..e5ab4ba --- /dev/null +++ b/SOURCES/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch @@ -0,0 +1,50 @@ +diff -ur qt-x11-opensource-src-4.5.0/src/corelib/arch/qatomic_i386.h qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm/src/corelib/arch/qatomic_i386.h +--- qt-x11-opensource-src-4.5.0/src/corelib/arch/qatomic_i386.h 2009-02-25 22:09:21.000000000 +0100 ++++ qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm/src/corelib/arch/qatomic_i386.h 2009-04-01 17:54:21.000000000 +0200 +@@ -115,8 +115,8 @@ + asm volatile("lock\n" + "incl %0\n" + "setne %1" +- : "=m" (_q_value), "=qm" (ret) +- : "m" (_q_value) ++ : "+m" (_q_value), "=qm" (ret) ++ : + : "memory"); + return ret != 0; + } +@@ -127,8 +127,8 @@ + asm volatile("lock\n" + "decl %0\n" + "setne %1" +- : "=m" (_q_value), "=qm" (ret) +- : "m" (_q_value) ++ : "+m" (_q_value), "=qm" (ret) ++ : + : "memory"); + return ret != 0; + } +diff -ur qt-x11-opensource-src-4.5.0/src/corelib/arch/qatomic_x86_64.h qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm/src/corelib/arch/qatomic_x86_64.h +--- qt-x11-opensource-src-4.5.0/src/corelib/arch/qatomic_x86_64.h 2009-02-25 22:09:21.000000000 +0100 ++++ qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm/src/corelib/arch/qatomic_x86_64.h 2009-04-01 17:54:32.000000000 +0200 +@@ -116,8 +116,8 @@ + asm volatile("lock\n" + "incl %0\n" + "setne %1" +- : "=m" (_q_value), "=qm" (ret) +- : "m" (_q_value) ++ : "+m" (_q_value), "=qm" (ret) ++ : + : "memory"); + return ret != 0; + } +@@ -128,8 +128,8 @@ + asm volatile("lock\n" + "decl %0\n" + "setne %1" +- : "=m" (_q_value), "=qm" (ret) +- : "m" (_q_value) ++ : "+m" (_q_value), "=qm" (ret) ++ : + : "memory"); + return ret != 0; + } diff --git a/SOURCES/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch b/SOURCES/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch new file mode 100644 index 0000000..4ab3ea4 --- /dev/null +++ b/SOURCES/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch @@ -0,0 +1,12 @@ +diff -up qt-x11-opensource-src-4.5.1/src/gui/text/qfontengine_ft.cpp.enable_ft_lcdfilter qt-x11-opensource-src-4.5.1/src/gui/text/qfontengine_ft.cpp +--- qt-x11-opensource-src-4.5.1/src/gui/text/qfontengine_ft.cpp.enable_ft_lcdfilter 2009-04-21 18:57:41.000000000 -0500 ++++ qt-x11-opensource-src-4.5.1/src/gui/text/qfontengine_ft.cpp 2009-04-24 11:17:49.562695405 -0500 +@@ -72,7 +72,7 @@ + #include FT_CONFIG_OPTIONS_H + #endif + +-#if defined(FT_LCD_FILTER_H) && defined(FT_CONFIG_OPTION_SUBPIXEL_RENDERING) ++#if defined(FT_LCD_FILTER_H) + #define QT_USE_FREETYPE_LCDFILTER + #endif + diff --git a/SOURCES/qtconfig.desktop b/SOURCES/qtconfig.desktop new file mode 100644 index 0000000..efc4d4a --- /dev/null +++ b/SOURCES/qtconfig.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Qt4 Config +Comment=Configure Qt4 behavior, styles, fonts +Exec=qtconfig-qt4 +Icon=qt4-logo +Terminal=false +Type=Application +Categories=Qt;Settings; diff --git a/SOURCES/qtdemo.desktop b/SOURCES/qtdemo.desktop new file mode 100644 index 0000000..9bcbf1b --- /dev/null +++ b/SOURCES/qtdemo.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Qt4 Demo +Comment=Show Qt4 demos and programming examples +Exec=qtdemo-qt4 +Icon=qt4-logo +Terminal=false +Type=Application +Categories=Qt;Development; diff --git a/SPECS/qt.spec b/SPECS/qt.spec new file mode 100644 index 0000000..1445784 --- /dev/null +++ b/SPECS/qt.spec @@ -0,0 +1,2345 @@ +# Fedora Review: http://bugzilla.redhat.com/188180 + +# configure options +# -no-pch disables precompiled headers, make ccache-friendly +%define no_pch -no-pch + +# See http://bugzilla.redhat.com/223663 +%define multilib_archs x86_64 %{ix86} %{mips} ppc64 ppc64le ppc s390x s390 sparc64 sparcv9 +%define multilib_basearchs x86_64 %{mips64} ppc64 ppc64le s390x sparc64 + +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 +# use external qt_settings pkg +%define qt_settings 1 +%endif + +%if (0%{?fedora} > 19 && 0%{?fedora} < 26) || 0%{?rhel} > 7 +%global system_clucene 1 +%endif + +%global rpm_macros_dir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d) + +# trim changelog included in binary rpms +%global _changelog_trimtime %(date +%s -d "1 year ago") + +Summary: Qt toolkit +Name: qt +Epoch: 1 +Version: 4.8.7 +Release: 4%{?dist} + +# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details +License: (LGPLv2 with exceptions or GPLv3 with exceptions) and ASL 2.0 and BSD and FTL and MIT +Group: System Environment/Libraries +Url: http://qt-project.org/ +%if 0%{?beta:1} +Source0: http://download.qt-project.org/development_releases/qt/4.8/%{version}-%{beta}/qt-everywhere-opensource-src-%{version}-%{beta}.tar.gz +%else +Source0: http://download.qt-project.org/official_releases/qt/4.8/%{version}/qt-everywhere-opensource-src-%{version}.tar.gz +%endif +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +Obsoletes: qt4 < %{version}-%{release} +Provides: qt4 = %{version}-%{release} +%{?_isa:Provides: qt4%{?_isa} = %{version}-%{release}} + +# default Qt config file +Source4: Trolltech.conf + +# header file to workaround multilib issue +Source5: qconfig-multilib.h + +# set default QMAKE_CFLAGS_RELEASE +Patch2: qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch + +# get rid of timestamp which causes multilib problem +Patch4: qt-everywhere-opensource-src-4.8.5-uic_multilib.patch + +# reduce debuginfo in qtwebkit (webcore) +Patch5: qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch + +# cups16 printer discovery +Patch6: qt-cupsEnumDests.patch + +# enable ft lcdfilter +Patch15: qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch + +# may be upstreamable, not sure yet +# workaround for gdal/grass crashers wrt glib_eventloop null deref's +Patch23: qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch + +# hack out largely useless (to users) warnings about qdbusconnection +# (often in kde apps), keep an eye on https://git.reviewboard.kde.org/r/103699/ +Patch25: qt-everywhere-opensource-src-4.8.3-qdbusconnection_no_debug.patch + +# lrelease-qt4 tries to run qmake not qmake-qt4 (http://bugzilla.redhat.com/820767) +Patch26: qt-everywhere-opensource-src-4.8.1-linguist_qmake-qt4.patch + +# enable debuginfo in libQt3Support +Patch27: qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch + +# kde4/multilib QT_PLUGIN_PATH +Patch28: qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch + +## upstreamable bits +# add support for pkgconfig's Requires.private to qmake +Patch50: qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch + +# FTBFS against newer firebird +Patch51: qt-everywhere-opensource-src-4.8.7-firebird.patch + +# workaround major/minor macros possibly being defined already +Patch52: qt-everywhere-opensource-src-4.8.7-QT_VERSION_CHECK.patch + +# fix invalid inline assembly in qatomic_{i386,x86_64}.h (de)ref implementations +Patch53: qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch + +# fix invalid assumptions about mysql_config --libs +# http://bugzilla.redhat.com/440673 +Patch54: qt-everywhere-opensource-src-4.8.5-mysql_config.patch + +# http://bugs.kde.org/show_bug.cgi?id=180051#c22 +Patch55: qt-everywhere-opensource-src-4.6.2-cups.patch + +# Fails to create debug build of Qt projects on mingw (rhbz#653674) +Patch64: qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch + +# fix QTreeView crash triggered by KPackageKit (patch by David Faure) +Patch65: qt-everywhere-opensource-src-4.8.0-tp-qtreeview-kpackagekit-crash.patch + +# fix the outdated standalone copy of JavaScriptCore +Patch67: qt-everywhere-opensource-src-4.8.6-s390.patch + +# https://bugs.webkit.org/show_bug.cgi?id=63941 +# -Wall + -Werror = fail +Patch68: qt-everywhere-opensource-src-4.8.3-no_Werror.patch + +# revert qlist.h commit that seems to induce crashes in qDeleteAll to disable +# set to -qt-sql- to enable *in* qt library +%global mysql -plugin-sql-mysql +%define odbc -plugin-sql-odbc +%define psql -plugin-sql-psql +%define sqlite -plugin-sql-sqlite +%if 0%{?fedora} < 21 && 0%{?rhel} < 8 +%define phonon -phonon +%define phonon_backend -phonon-backend +%endif +%define dbus -dbus-linked +%define graphicssystem -graphicssystem raster +%define gtkstyle -gtkstyle +%if 0%{?fedora} +# FIXME/TODO: use system webkit for assistant, examples/webkit, demos/browser +%define webkit -webkit +%define ibase -plugin-sql-ibase +%define tds -plugin-sql-tds +%endif +%if 0%{?rhel} +%define no_javascript_jit -no-javascript-jit +%define ibase -no-sql-ibase +%define tds -no-sql-tds +%endif + +# macros, be mindful to keep sync'd with macros.qt4 +Source1: macros.qt4 +# See http://bugzilla.redhat.com/196901 +%define _qt4 %{name} +%define _qt4_prefix %{_libdir}/qt4 +%define _qt4_bindir %{_qt4_prefix}/bin +# _qt4_datadir is not multilib clean, and hacks to workaround that breaks stuff. +#define _qt4_datadir %{_datadir}/qt4 +%define _qt4_datadir %{_qt4_prefix} +%define _qt4_demosdir %{_qt4_prefix}/demos +%define _qt4_docdir %{_docdir}/qt4 +%define _qt4_examplesdir %{_qt4_prefix}/examples +%define _qt4_headerdir %{_includedir} +%define _qt4_importdir %{_qt4_prefix}/imports +%define _qt4_libdir %{_libdir} +%define _qt4_plugindir %{_qt4_prefix}/plugins +%define _qt4_sysconfdir %{_sysconfdir} +%define _qt4_translationdir %{_datadir}/qt4/translations + +BuildRequires: cups-devel +BuildRequires: desktop-file-utils +BuildRequires: findutils +BuildRequires: libjpeg-devel +BuildRequires: libmng-devel +BuildRequires: libtiff-devel +BuildRequires: pkgconfig +BuildRequires: pkgconfig(alsa) +BuildRequires: pkgconfig(dbus-1) +BuildRequires: pkgconfig(fontconfig) +BuildRequires: pkgconfig(glib-2.0) +%if 0%{?fedora} || 0%{?rhel} > 6 +BuildRequires: pkgconfig(icu-i18n) +%endif +BuildRequires: pkgconfig(NetworkManager) +%if 0%{?fedora} > 25 || 0%{?rhel} > 7 +%global openssl -openssl-linked +# if openssl is loaded dynamically, add an explicit dependency +#Requires: openssl-libs%{?_isa} +BuildRequires: compat-openssl10-devel +%else +%global openssl -openssl-linked +BuildRequires: pkgconfig(openssl) +%endif +BuildRequires: pkgconfig(libpng) +BuildRequires: pkgconfig(libpulse) +BuildRequires: pkgconfig(xtst) +BuildRequires: pkgconfig(zlib) +BuildRequires: rsync + +%define gl_deps pkgconfig(gl) pkgconfig(glu) +%define x_deps pkgconfig(ice) pkgconfig(sm) pkgconfig(xcursor) pkgconfig(xext) pkgconfig(xfixes) pkgconfig(xft) pkgconfig(xi) pkgconfig(xinerama) pkgconfig(xrandr) pkgconfig(xrender) pkgconfig(xt) pkgconfig(xv) pkgconfig(x11) pkgconfig(xproto) +BuildRequires: %{gl_deps} +BuildRequires: %{x_deps} + +%if 0%{?system_clucene} +BuildRequires: clucene09-core-devel >= 0.9.21b-12 +%endif + +%if "%{?ibase}" != "-no-sql-ibase" +BuildRequires: firebird-devel +%endif + +%if "%{?mysql}" == "-no-sql-mysql" +Obsoletes: %{name}-mysql < %{epoch}:%{version}-%{release} +%else +BuildRequires: mysql-devel >= 4.0 +%endif + +%if "%{?phonon_backend}" == "-phonon-backend" +BuildRequires: pkgconfig(gstreamer-0.10) +BuildRequires: pkgconfig(gstreamer-plugins-base-0.10) +%endif + +%if "%{?gtkstyle}" == "-gtkstyle" +BuildRequires: pkgconfig(gtk+-2.0) +%endif + +%if "%{?psql}" != "-no-sql-psql" +BuildRequires: postgresql-devel +%endif + +%if "%{?odbc}" != "-no-sql-odbc" +BuildRequires: unixODBC-devel +%endif + +%if "%{?sqlite}" != "-no-sql-sqlite" +%define _system_sqlite -system-sqlite +BuildRequires: pkgconfig(sqlite3) +%endif + +Provides: qt4-sqlite = %{version}-%{release} +%{?_isa:Provides: qt4-sqlite%{?_isa} = %{version}-%{release}} +Obsoletes: qt-sqlite < 1:4.7.1-16 +Provides: qt-sqlite = %{?epoch:%{epoch}:}%{version}-%{release} +%{?_isa:Provides: qt-sqlite%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release}} + +%if "%{?tds}" != "-no-sql-tds" +BuildRequires: freetds-devel +%endif + +Obsoletes: qgtkstyle < 0.1 +Provides: qgtkstyle = 0.1-1 +Requires: ca-certificates +%if 0%{?qt_settings} +Requires: qt-settings +%endif + +%description +Qt is a software toolkit for developing applications. + +This package contains base tools, like string, xml, and network +handling. + +%package assistant +Summary: Documentation browser for Qt 4 +Group: Documentation +Requires: %{name}-sqlite%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Provides: qt4-assistant = %{version}-%{release} +%if ! 0%{?system_clucene} +Provides: bundled(clucene09) +%endif +Requires: %{name}-x11%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +%description assistant +%{summary}. + +%package config +Summary: Graphical configuration tool for programs using Qt 4 +Group: User Interface/Desktops +# -config introduced in 4.7.1-10 , for upgrade path +# seems to tickle a pk bug, https://bugzilla.redhat.com/674326 +#Obsoletes: %{name}-x11 < 1:4.7.1-10 +Obsoletes: qt4-config < 4.5.0 +Provides: qt4-config = %{version}-%{release} +Requires: %{name}-x11%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +%description config +%{summary}. + +%define demos 1 +%package demos +Summary: Demonstration applications for %{name} +Group: Documentation +Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release} +Requires: %{name}-doc +%description demos +%{summary}. + +%define docs 1 +%package doc +Summary: API documentation for %{name} +Group: Documentation +Requires: %{name} = %{?epoch:%{epoch}:}%{version}-%{release} +Requires: %{name}-assistant +Obsoletes: qt4-doc < %{version}-%{release} +Provides: qt4-doc = %{version}-%{release} +# help workaround yum bug http://bugzilla.redhat.com/502401 +Obsoletes: qt-doc < 1:4.5.1-4 +BuildArch: noarch +%description doc +%{summary}. + +%package designer-plugin-webkit +Summary: Qt designer plugin for WebKit +Group: Development/Libraries +Requires: %{name}-x11%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +%description designer-plugin-webkit +%{summary}. + +%package devel +Summary: Development files for the Qt toolkit +Group: Development/Libraries +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Requires: %{name}-x11%{?_isa} +Requires: %{name}-sqlite%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Requires: %{gl_deps} +Requires: %{x_deps} +Requires: pkgconfig +%if 0%{?phonon:1} +Provides: qt4-phonon-devel = %{version}-%{release} +%endif +Obsoletes: qt4-designer < %{version}-%{release} +Provides: qt4-designer = %{version}-%{release} +# as long as libQtUiTools.a is included +Provides: %{name}-static = %{?epoch:%{epoch}:}%{version}-%{release} +Provides: qt4-static = %{version}-%{release} +Obsoletes: qt4-devel < %{version}-%{release} +Provides: qt4-devel = %{version}-%{release} +%{?_isa:Provides: qt4-devel%{?_isa} = %{version}-%{release}} + +%description devel +This package contains the files necessary to develop +applications using the Qt toolkit. Includes: +Qt Linguist + +# make a devel private subpkg or not? +%define private 1 +%package devel-private +Summary: Private headers for Qt toolkit +Group: Development/Libraries +Provides: qt4-devel-private = %{version}-%{release} +Provides: %{name}-private-devel = %{?epoch:%{epoch}:}%{version}-%{release} +Provides: qt4-private-devel = %{version}-%{release} +Requires: %{name}-devel = %{?epoch:%{epoch}:}%{version}-%{release} +BuildArch: noarch +%description devel-private +%{summary}. + +%define examples 1 +%package examples +Summary: Programming examples for %{name} +Group: Documentation +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +%description examples +%{summary}. + +%define qvfb 1 +%package qvfb +Summary: Virtual frame buffer for Qt for Embedded Linux +Group: Applications/Emulators +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +%description qvfb +%{summary}. + +%package ibase +Summary: IBase driver for Qt's SQL classes +Group: System Environment/Libraries +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Provides: qt4-ibase = %{version}-%{release} +%{?_isa:Provides: qt4-ibase%{?_isa} = %{version}-%{release}} +%description ibase +%{summary}. + +%package mysql +Summary: MySQL driver for Qt's SQL classes +Group: System Environment/Libraries +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Obsoletes: qt4-MySQL < %{version}-%{release} +Provides: qt4-MySQL = %{version}-%{release} +Obsoletes: qt4-mysql < %{version}-%{release} +Provides: qt4-mysql = %{version}-%{release} +%{?_isa:Provides: qt4-mysql%{?_isa} = %{version}-%{release}} +%description mysql +%{summary}. + +%package odbc +Summary: ODBC driver for Qt's SQL classes +Group: System Environment/Libraries +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Obsoletes: qt4-ODBC < %{version}-%{release} +Provides: qt4-ODBC = %{version}-%{release} +Obsoletes: qt4-odbc < %{version}-%{release} +Provides: qt4-odbc = %{version}-%{release} +%{?_isa:Provides: qt4-odbc%{?_isa} = %{version}-%{release}} +%description odbc +%{summary}. + +%package postgresql +Summary: PostgreSQL driver for Qt's SQL classes +Group: System Environment/Libraries +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Obsoletes: qt4-PostgreSQL < %{version}-%{release} +Provides: qt4-PostgreSQL = %{version}-%{release} +Obsoletes: qt4-postgresql < %{version}-%{release} +Provides: qt4-postgresql = %{version}-%{release} +%{?_isa:Provides: qt4-postgresql%{?_isa} = %{version}-%{release}} +%description postgresql +%{summary}. + +%package tds +Summary: TDS driver for Qt's SQL classes +Group: System Environment/Libraries +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Provides: qt4-tds = %{version}-%{release} +%{?_isa:Provides: qt4-tds%{?_isa} = %{version}-%{release}} +%description tds +%{summary}. + +%package x11 +Summary: Qt GUI-related libraries +Group: System Environment/Libraries +# include Obsoletes here to be safe(r) bootstrap-wise with phonon-4.5.0 +# that will Provides: it -- Rex +Obsoletes: qt-designer-plugin-phonon < 1:4.7.2-6 +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Obsoletes: qt4-x11 < %{version}-%{release} +Provides: qt4-x11 = %{version}-%{release} +%{?_isa:Provides: qt4-x11%{?_isa} = %{version}-%{release}} +%description x11 +Qt libraries used for drawing widgets and OpenGL items. + +%package qdbusviewer +Summary: D-Bus debugger and viewer +# When split out from qt-x11 +Obsoletes: qt-x11 < 1:4.8.5-2 +Requires: %{name}-x11%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +%description qdbusviewer +QDbusviewer can be used to inspect D-Bus objects of running programs +and invoke methods on those objects. + + +%prep +%setup -q -n qt-everywhere-opensource-src-%{version} + +%patch2 -p1 -b .multilib-optflags +# drop backup file(s), else they get installed too, http://bugzilla.redhat.com/639463 +rm -fv mkspecs/linux-g++*/qmake.conf.multilib-optflags +%patch4 -p1 -b .uic_multilib +%patch5 -p1 -b .webcore_debuginfo +#patch6 -p1 -b .cupsEnumDests +%patch15 -p1 -b .enable_ft_lcdfilter +%patch23 -p1 -b .glib_eventloop_nullcheck +%patch25 -p1 -b .qdbusconnection_no_debug +%patch26 -p1 -b .linguist_qtmake-qt4 +%patch27 -p1 -b .qt3support_debuginfo +%patch28 -p1 -b .qt_plugin_path +%patch50 -p1 -b .qmake_pkgconfig_requires_private +%patch51 -p1 -b .firebird +%patch52 -p1 -b .QT_VERSION_CHECK +## TODO: still worth carrying? if so, upstream it. +%patch53 -p1 -b .qatomic-inline-asm +## TODO: upstream me +%patch54 -p1 -b .mysql_config +%patch55 -p1 -b .cups-1 +%patch64 -p1 -b .QTBUG-14467 +%patch65 -p1 -b .qtreeview-kpackagekit-crash +%patch67 -p1 -b .s390 +%patch68 -p1 -b .no_Werror +%patch69 -p1 -b .QTBUG-22037 +%patch71 -p1 -b .QTBUG-21900 +%patch74 -p1 -b .tds_no_strict_aliasing +%patch76 -p1 -b .s390-atomic +%patch77 -p1 -b .icu_no_debug +%patch81 -p1 -b .assistant-crash +%patch82 -p1 -b .QTBUG-4862 +%patch83 -p1 -b .poll +%patch85 -p1 -b .qt-aarch64 +%patch86 -p1 -b .gcc-overflow-warning +%patch87 -p1 -b .ppc64le +%patch88 -p1 -b .prefer_adwaita_on_gnome + +# regression fixes for the security fixes +%patch90 -p1 -b .QTBUG-35459 +%patch91 -p1 -b .systemtrayicon +%patch92 -p1 -b .QTBUG-37380 +%patch93 -p0 -b .QTBUG-34614 +%patch94 -p0 -b .QTBUG-38585 +%if 0%{?system_clucene} +%patch95 -p1 -b .system_clucene +# delete bundled copy +rm -rf src/3rdparty/clucene +%endif +%patch96 -p1 -b .mips64 +%patch97 -p1 -b .gcc6 +%patch98 -p1 -b .alsa1.1 +%patch99 -p1 -b .revert-font-cache-fix + +# upstream patches +%patch100 -p1 -b .QTgaHandler +%patch101 -p1 -R -b .QTBUG-30076 +%patch102 -p1 -b .qgtkstyle_disable_gtk_theme_check +%patch113 -p1 -b .QTBUG-22829 +# %patch114 -p1 -b .revert-QTBUG-15319-fix-shortcuts-with-secondary-Xkb.patch +%patch115 -p1 -b .qt-everywhere-opensource-src-4.8.5-do-not-close-apps-on-gnome-shutdown-dialog + +# upstream git + +# security fixes + +%define platform linux-g++ + +# some 64bit platforms assume -64 suffix, https://bugzilla.redhat.com/569542 +%if "%{?__isa_bits}" == "64" +%define platform linux-g++-64 +%endif + +# https://bugzilla.redhat.com/478481 +%ifarch x86_64 aarch64 +%define platform linux-g++ +%endif + +sed -i -e "s|-O2|$RPM_OPT_FLAGS|g" \ + mkspecs/%{platform}/qmake.conf + +sed -i -e "s|^\(QMAKE_LFLAGS_RELEASE.*\)|\1 $RPM_LD_FLAGS|" \ + mkspecs/common/g++-unix.conf + +# undefine QMAKE_STRIP (and friends), so we get useful -debuginfo pkgs (#193602) +sed -i -e 's|^\(QMAKE_STRIP.*=\).*$|\1|g' mkspecs/common/linux.conf + +# set correct lib path +if [ "%{_lib}" == "lib64" ] ; then + sed -i -e "s,/usr/lib /lib,/usr/%{_lib} /%{_lib},g" config.tests/{unix,x11}/*.test + sed -i -e "s,/lib /usr/lib,/%{_lib} /usr/%{_lib},g" config.tests/{unix,x11}/*.test +fi + +# MIPS does not accept -m64/-m32 flags +%ifarch %{mips} +sed -i -e 's,-m32,,' mkspecs/linux-g++-32/qmake.conf +sed -i -e 's,-m64,,' mkspecs/linux-g++-64/qmake.conf +%endif + +# let makefile create missing .qm files, the .qm files should be included in qt upstream +for f in translations/*.ts ; do + touch ${f%.ts}.qm +done + + +%build + +# drop -fexceptions from $RPM_OPT_FLAGS +RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS | sed 's|-fexceptions||g'` + +%if 0%{?fedora} > 23 || 0%{?rhel} > 7 +# workaround for class std::auto_ptr' is deprecated with gcc-6 +CXXFLAGS="$CXXFLAGS -std=gnu++98" +# javascriptcore FTBFS with gcc-6 +CXXFLAGS="$CXXFLAGS -Wno-deprecated" +%endif + +export QTDIR=$PWD +export PATH=$PWD/bin:$PATH +export LD_LIBRARY_PATH=$PWD/lib/ +# TODO: opensuse adds -DOPENSSL_LOAD_CONF, find out if we want that too -- rex +export CXXFLAGS="$CXXFLAGS $RPM_OPT_FLAGS" +export CFLAGS="$CFLAGS $RPM_OPT_FLAGS" +export LDFLAGS="$LDFLAGS $RPM_LD_FLAGS" +export MAKEFLAGS="%{?_smp_mflags}" + +./configure -v \ + -confirm-license \ + -opensource \ + -optimized-qmake \ + -fast \ + -prefix %{_qt4_prefix} \ + -bindir %{_qt4_bindir} \ + -datadir %{_qt4_datadir} \ + -demosdir %{_qt4_demosdir} \ + -docdir %{_qt4_docdir} \ + -examplesdir %{_qt4_examplesdir} \ + -headerdir %{_qt4_headerdir} \ + -importdir %{_qt4_importdir} \ + -libdir %{_qt4_libdir} \ + -plugindir %{_qt4_plugindir} \ + -sysconfdir %{_qt4_sysconfdir} \ + -translationdir %{_qt4_translationdir} \ + -platform %{platform} \ + -release \ + -shared \ + -cups \ + -fontconfig \ + -largefile \ + -gtkstyle \ + -no-rpath \ + -reduce-relocations \ + -no-separate-debug-info \ + %{?phonon} %{!?phonon:-no-phonon} \ + %{?phonon_backend} \ + %{?no_pch} \ + %{?no_javascript_jit} \ + -sm \ + -stl \ + -system-libmng \ + -system-libpng \ + -system-libjpeg \ + -system-libtiff \ + -system-zlib \ + -xinput \ + -xcursor \ + -xfixes \ + -xinerama \ + -xshape \ + -xrandr \ + -xrender \ + -xkb \ + -glib \ + -icu \ + %{?openssl} \ + -xmlpatterns \ + %{?dbus} %{!?dbus:-no-dbus} \ + %{?graphicssystem} \ + %{?webkit} %{!?webkit:-no-webkit } \ + %{?ibase} \ + %{?mysql} \ + %{?psql} \ + %{?odbc} \ + %{?sqlite} %{?_system_sqlite} \ + %{?tds} \ + %{!?docs:-nomake docs} \ + %{!?demos:-nomake demos} \ + %{!?examples:-nomake examples} + +# verify QT_BUILD_KEY +grep '^#define QT_BUILD_KEY ' src/corelib/global/qconfig.h +QT_BUILD_KEY_COMPILER="$(grep '^#define QT_BUILD_KEY ' src/corelib/global/qconfig.h | cut -d' ' -f5)" +if [ "$QT_BUILD_KEY_COMPILER" != 'g++-4' ]; then + echo "QT_BUILD_KEY_COMPILER failure" + exit 1 +fi + +# ensure qmake build using optflags (which can happen if not munging qmake.conf defaults) +make clean -C qmake +make %{?_smp_mflags} -C qmake \ + QMAKE_CFLAGS_RELEASE="${CFLAGS:-$RPM_OPT_FLAGS}" \ + QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS:-$RPM_OPT_FLAGS}" \ + QMAKE_LFLAGS_RELEASE="${LDFLAGS:-$RPM_LD_FLAGS}" \ + QMAKE_STRIP= + +make %{?_smp_mflags} + +# TODO: consider patching tools/tools.pro to enable building this by default +%{?qvfb:make %{?_smp_mflags} -C tools/qvfb} + +# recreate .qm files +bin/lrelease translations/*.ts + + +%install +rm -rf %{buildroot} + +make install INSTALL_ROOT=%{buildroot} + +%if 0%{?qvfb} +make install INSTALL_ROOT=%{buildroot} -C tools/qvfb +%find_lang qvfb --with-qt --without-mo +%else +rm -f %{buildroot}%{_qt4_translationdir}/qvfb*.qm +%endif + +%if 0%{?private} +# install private headers +# using rsync -R as easy way to preserve relative path names +# we're cheating and using %%_prefix (/usr) directly here +rsync -aR \ + include/Qt{Core,Declarative,Gui,Script}/private \ + src/{corelib,declarative,gui,script}/*/*_p.h \ + %{buildroot}%{_prefix}/ +%endif + +# Add desktop files, --vendor=qt4 helps avoid possible conflicts with qt3/qt5 +desktop-file-install \ + --dir=%{buildroot}%{_datadir}/applications \ + --vendor="qt4" \ + %{SOURCE20} %{SOURCE21} %{SOURCE22} %{?dbus:%{SOURCE23}} %{?demos:%{SOURCE24}} %{SOURCE25} + +## pkg-config +# strip extraneous dirs/libraries +# safe ones +glib2_libs=$(pkg-config --libs glib-2.0 gobject-2.0 gthread-2.0) +if [ "%{?openssl}" == "-openssl-linked" ]; then +ssl_libs=$(pkg-config --libs openssl) +fi +for dep in \ + -laudio -ldbus-1 -lfreetype -lfontconfig ${glib2_libs} \ + -ljpeg -lm -lmng -lpng -lpulse -lpulse-mainloop-glib ${ssl_libs} -lsqlite3 -lz \ + -L/usr/X11R6/lib -L/usr/X11R6/%{_lib} -L%{_libdir} ; do + sed -i -e "s|$dep ||g" %{buildroot}%{_qt4_libdir}/lib*.la +# sed -i -e "s|$dep ||g" %{buildroot}%{_qt4_libdir}/pkgconfig/*.pc + sed -i -e "s|$dep ||g" %{buildroot}%{_qt4_libdir}/*.prl +done +# riskier +for dep in -ldl -lphonon -lpthread -lICE -lSM -lX11 -lXcursor -lXext -lXfixes -lXft -lXinerama -lXi -lXrandr -lXrender -lXt ; do + sed -i -e "s|$dep ||g" %{buildroot}%{_qt4_libdir}/lib*.la +# sed -i -e "s|$dep ||g" %{buildroot}%{_qt4_libdir}/pkgconfig/*.pc + sed -i -e "s|$dep ||g" %{buildroot}%{_qt4_libdir}/*.prl +done + +# nuke dangling reference(s) to %buildroot +sed -i -e "/^QMAKE_PRL_BUILD_DIR/d" %{buildroot}%{_qt4_libdir}/*.prl +sed -i -e "s|-L%{_builddir}/qt-everywhere-opensource-src-%{version}%{?beta:-%{beta}}/lib||g" \ + %{buildroot}%{_qt4_libdir}/pkgconfig/*.pc \ + %{buildroot}%{_qt4_libdir}/*.prl + +# nuke QMAKE_PRL_LIBS, seems similar to static linking and .la files (#520323) +# don't nuke, just drop -lphonon (above) +#sed -i -e "s|^QMAKE_PRL_LIBS|#QMAKE_PRL_LIBS|" %{buildroot}%{_qt4_libdir}/*.prl + +# .la files, die, die, die. +rm -f %{buildroot}%{_qt4_libdir}/lib*.la + +%if 0 +#if "%{_qt4_docdir}" != "%{_qt4_prefix}/doc" +# -doc make symbolic link to _qt4_docdir +rm -rf %{buildroot}%{_qt4_prefix}/doc +ln -s ../../share/doc/qt4 %{buildroot}%{_qt4_prefix}/doc +%endif + +# hardlink files to %{_bindir}, add -qt4 postfix to not conflict +mkdir %{buildroot}%{_bindir} +pushd %{buildroot}%{_qt4_bindir} +for i in * ; do + case "${i}" in + assistant|designer|linguist|lrelease|lupdate|moc|qmake|qtconfig|qtdemo|uic) + ln -v ${i} %{buildroot}%{_bindir}/${i}-qt4 + ln -sv ${i} ${i}-qt4 + ;; + *) + ln -v ${i} %{buildroot}%{_bindir}/${i} + ;; + esac +done +popd + +# _debug targets (see bug #196513) +pushd %{buildroot}%{_qt4_libdir} +for lib in libQt*.so ; do + libbase=`basename $lib .so | sed -e 's/^lib//'` +# ln -s $lib lib${libbase}_debug.so + echo "INPUT(-l${libbase})" > lib${libbase}_debug.so +done +for lib in libQt*.a ; do + libbase=`basename $lib .a | sed -e 's/^lib//' ` +# ln -s $lib lib${libbase}_debug.a + echo "INPUT(-l${libbase})" > lib${libbase}_debug.a +done +popd + +%ifarch %{multilib_archs} +# multilib: qconfig.h + mv %{buildroot}%{_qt4_headerdir}/Qt/qconfig.h %{buildroot}%{_qt4_headerdir}/QtCore/qconfig-%{__isa_bits}.h + install -p -m644 -D %{SOURCE5} %{buildroot}%{_qt4_headerdir}/QtCore/qconfig-multilib.h + ln -sf qconfig-multilib.h %{buildroot}%{_qt4_headerdir}/QtCore/qconfig.h + ln -sf ../QtCore/qconfig.h %{buildroot}%{_qt4_headerdir}/Qt/qconfig.h +%endif + +%if "%{_qt4_libdir}" != "%{_libdir}" + mkdir -p %{buildroot}/etc/ld.so.conf.d + echo "%{_qt4_libdir}" > %{buildroot}/etc/ld.so.conf.d/qt4-%{__isa_bits}.conf +%endif + +%if ! 0%{?qt_settings} +# Trolltech.conf +install -p -m644 -D %{SOURCE4} %{buildroot}%{_qt4_sysconfdir}/Trolltech.conf +%endif + +# qt4-logo (generic) icons +install -p -m644 -D %{SOURCE30} %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/qt4-logo.png +install -p -m644 -D %{SOURCE31} %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/qt4-logo.png + +# assistant icons +install -p -m644 -D tools/assistant/tools/assistant/images/assistant.png %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/assistant.png +install -p -m644 -D tools/assistant/tools/assistant/images/assistant-128.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/assistant.png + +# designer icons +install -p -m644 -D tools/designer/src/designer/images/designer.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/designer.png + +# linguist icons +for icon in tools/linguist/linguist/images/icons/linguist-*-32.png ; do + size=$(echo $(basename ${icon}) | cut -d- -f2) + install -p -m644 -D ${icon} %{buildroot}%{_datadir}/icons/hicolor/${size}x${size}/apps/linguist.png +done + +# qdbusviewer icons +install -p -m644 -D tools/qdbus/qdbusviewer/images/qdbusviewer.png %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/qdbusviewer.png +install -p -m644 -D tools/qdbus/qdbusviewer/images/qdbusviewer-128.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/qdbusviewer.png + +# Qt.pc +cat >%{buildroot}%{_libdir}/pkgconfig/Qt.pc<%{buildroot}%{rpm_macros_dir}/macros.qt4<qt-x11.lang + +%find_lang designer --with-qt --without-mo +%find_lang linguist --with-qt --without-mo +cat designer.lang linguist.lang >qt-devel.lang + + +%clean +rm -rf %{buildroot} + + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%files -f qt.lang +%defattr(-,root,root,-) +%doc README LICENSE.GPL3 LICENSE.LGPL LGPL_EXCEPTION.txt +%if "%{_qt4_libdir}" != "%{_libdir}" +/etc/ld.so.conf.d/* +%dir %{_qt4_libdir} +%endif +%dir %{_qt4_prefix} +%if "%{_qt4_bindir}" == "%{_bindir}" +%{_qt4_prefix}/bin +%else +%dir %{_qt4_bindir} +%endif +%if "%{_qt4_datadir}" != "%{_datadir}/qt4" +%dir %{_datadir}/qt4 +%else +%dir %{_qt4_datadir} +%endif +%dir %{_qt4_docdir} +%dir %{_qt4_docdir}/html/ +%dir %{_qt4_docdir}/qch/ +%dir %{_qt4_docdir}/src/ + +%if "%{_qt4_sysconfdir}" != "%{_sysconfdir}" +%dir %{_qt4_sysconfdir} +%endif +%if ! 0%{?qt_settings} +%config(noreplace) %{_qt4_sysconfdir}/Trolltech.conf +%endif +%{_qt4_datadir}/phrasebooks/ +%{_qt4_libdir}/libQtCore.so.4* +%if 0%{?dbus:1} +%if "%{_qt4_bindir}" != "%{_bindir}" +%{_bindir}/qdbus +%endif +%{_qt4_bindir}/qdbus +%{_qt4_libdir}/libQtDBus.so.4* +%endif +%{_qt4_libdir}/libQtNetwork.so.4* +%{_qt4_libdir}/libQtScript.so.4* +%{_qt4_libdir}/libQtSql.so.4* +%{_qt4_libdir}/libQtTest.so.4* +%{_qt4_libdir}/libQtXml.so.4* +%{_qt4_libdir}/libQtXmlPatterns.so.4* +%dir %{_qt4_plugindir} +%dir %{_qt4_plugindir}/crypto/ +%dir %{_qt4_plugindir}/sqldrivers/ +%dir %{_qt4_translationdir}/ +%{_qt4_plugindir}/sqldrivers/libqsqlite* + +%post assistant +touch --no-create %{_datadir}/icons/hicolor ||: + +%posttrans assistant +gtk-update-icon-cache -q %{_datadir}/icons/hicolor 2> /dev/null ||: + +%postun assistant +if [ $1 -eq 0 ] ; then +touch --no-create %{_datadir}/icons/hicolor ||: +gtk-update-icon-cache -q %{_datadir}/icons/hicolor 2> /dev/null ||: +fi + +%files assistant +%defattr(-,root,root,-) +%if "%{_qt4_bindir}" != "%{_bindir}" +%{_bindir}/assistant* +%endif +%{_qt4_bindir}/assistant* +%{_datadir}/applications/*assistant.desktop +%{_datadir}/icons/hicolor/*/apps/assistant* + +%files config +%defattr(-,root,root,-) +%if "%{_qt4_bindir}" != "%{_bindir}" +%{_bindir}/qt*config* +%endif +%{_qt4_bindir}/qt*config* +%{_datadir}/applications/*qtconfig.desktop + +%if 0%{?demos} +%files demos +%defattr(-,root,root,-) +%{_qt4_bindir}/qt*demo* +%if "%{_qt4_bindir}" != "%{_bindir}" +%{_bindir}/qt*demo* +%endif +%{_datadir}/applications/*qtdemo.desktop +%{_qt4_demosdir}/ +%endif + +%if "%{?webkit}" == "-webkit" +%files designer-plugin-webkit +%defattr(-,root,root,-) +%{_qt4_plugindir}/designer/libqwebview.so +%endif + +%post devel +touch --no-create %{_datadir}/icons/hicolor ||: + +%posttrans devel +gtk-update-icon-cache -q %{_datadir}/icons/hicolor 2> /dev/null ||: +update-desktop-database -q &> /dev/null ||: + +%postun devel +if [ $1 -eq 0 ] ; then +touch --no-create %{_datadir}/icons/hicolor ||: +gtk-update-icon-cache -q %{_datadir}/icons/hicolor 2> /dev/null ||: +update-desktop-database -q &> /dev/null ||: +fi + +%files devel -f qt-devel.lang +%defattr(-,root,root,-) +%{rpm_macros_dir}/macros.qt4 +%{_qt4_bindir}/lconvert +%{_qt4_bindir}/lrelease* +%{_qt4_bindir}/lupdate* +%{_qt4_bindir}/moc* +%{_qt4_bindir}/pixeltool* +%{_qt4_bindir}/qdoc3* +%{_qt4_bindir}/qmake* +%{_qt4_bindir}/qmlviewer* +%{_qt4_bindir}/qmlplugindump +%{_qt4_bindir}/qt3to4 +%{_qt4_bindir}/qttracereplay +%{_qt4_bindir}/rcc* +%{_qt4_bindir}/uic* +%{_qt4_bindir}/qcollectiongenerator +%if 0%{?dbus:1} +%{_qt4_bindir}/qdbuscpp2xml +%{_qt4_bindir}/qdbusxml2cpp +%endif +%{_qt4_bindir}/qhelpconverter +%{_qt4_bindir}/qhelpgenerator +%{_qt4_bindir}/xmlpatterns +%{_qt4_bindir}/xmlpatternsvalidator +%if "%{_qt4_bindir}" != "%{_bindir}" +%{_bindir}/lrelease* +%{_bindir}/lupdate* +%{_bindir}/moc* +%{_bindir}/uic* +%{_bindir}/designer* +%{_bindir}/linguist* +%{_bindir}/lconvert +%{_bindir}/pixeltool +%{_bindir}/qcollectiongenerator +%{_bindir}/qdoc3 +%{_bindir}/qmake* +%{_bindir}/qmlviewer* +%{_bindir}/qt3to4 +%{_bindir}/qttracereplay +%if 0%{?dbus:1} +%{_bindir}/qdbuscpp2xml +%{_bindir}/qdbusxml2cpp +%endif +%{_bindir}/qhelpconverter +%{_bindir}/qhelpgenerator +%{_bindir}/qmlplugindump +%{_bindir}/rcc +%{_bindir}/xmlpatterns +%{_bindir}/xmlpatternsvalidator +%endif +%if "%{_qt4_headerdir}" != "%{_includedir}" +%dir %{_qt4_headerdir}/ +%endif +%{_qt4_headerdir}/* +%{_qt4_datadir}/mkspecs/ +%if "%{_qt4_datadir}" != "%{_qt4_prefix}" +%{_qt4_prefix}/mkspecs/ +%endif +%{_qt4_datadir}/q3porting.xml +%if 0%{?phonon:1} +## nuke this one too? -- Rex +%{_qt4_libdir}/libphonon.prl +%endif +%{_qt4_libdir}/libQt*.so +%{_qt4_libdir}/libQtUiTools*.a +%{_qt4_libdir}/libQt*.prl +%{_libdir}/pkgconfig/*.pc +# Qt designer +%{_qt4_bindir}/designer* +%{_datadir}/applications/*designer.desktop +%{_datadir}/icons/hicolor/*/apps/designer* +%{?docs:%{_qt4_docdir}/qch/designer.qch} +# Qt Linguist +%{_qt4_bindir}/linguist* +%{_datadir}/applications/*linguist.desktop +%{_datadir}/icons/hicolor/*/apps/linguist* +%{?docs:%{_qt4_docdir}/qch/linguist.qch} +%if 0%{?private} +%exclude %{_qt4_headerdir}/*/private/ + +%files devel-private +%defattr(-,root,root,-) +%{_qt4_headerdir}/QtCore/private/ +%{_qt4_headerdir}/QtDeclarative/private/ +%{_qt4_headerdir}/QtGui/private/ +%{_qt4_headerdir}/QtScript/private/ +%{_qt4_headerdir}/../src/corelib/ +%{_qt4_headerdir}/../src/declarative/ +%{_qt4_headerdir}/../src/gui/ +%{_qt4_headerdir}/../src/script/ +%endif + +%if 0%{?docs} +%files doc +%defattr(-,root,root,-) +%{_qt4_docdir}/html/* +%{_qt4_docdir}/qch/*.qch +%exclude %{_qt4_docdir}/qch/designer.qch +%exclude %{_qt4_docdir}/qch/linguist.qch +%{_qt4_docdir}/src/* +#{_qt4_prefix}/doc +%endif + +%if 0%{?examples} +%files examples +%defattr(-,root,root,-) +%{_qt4_examplesdir}/ +%endif + +%if 0%{?qvfb} +%files qvfb -f qvfb.lang +%defattr(-,root,root,-) +%{_bindir}/qvfb +%{_qt4_bindir}/qvfb +%endif + +%if "%{?ibase}" == "-plugin-sql-ibase" +%files ibase +%defattr(-,root,root,-) +%{_qt4_plugindir}/sqldrivers/libqsqlibase* +%endif + +%if "%{?mysql}" == "-plugin-sql-mysql" +%files mysql +%defattr(-,root,root,-) +%{_qt4_plugindir}/sqldrivers/libqsqlmysql* +%endif + +%if "%{?odbc}" == "-plugin-sql-odbc" +%files odbc +%defattr(-,root,root,-) +%{_qt4_plugindir}/sqldrivers/libqsqlodbc* +%endif + +%if "%{?psql}" == "-plugin-sql-psql" +%files postgresql +%defattr(-,root,root,-) +%{_qt4_plugindir}/sqldrivers/libqsqlpsql* +%endif + +%if "%{?tds}" == "-plugin-sql-tds" +%files tds +%defattr(-,root,root,-) +%{_qt4_plugindir}/sqldrivers/libqsqltds* +%endif + +%post x11 +/sbin/ldconfig +touch --no-create %{_datadir}/icons/hicolor ||: + +%posttrans x11 +gtk-update-icon-cache -q %{_datadir}/icons/hicolor 2> /dev/null ||: + +%postun x11 +/sbin/ldconfig +if [ $1 -eq 0 ] ; then +touch --no-create %{_datadir}/icons/hicolor ||: +gtk-update-icon-cache -q %{_datadir}/icons/hicolor 2> /dev/null ||: +fi + +%files x11 -f qt-x11.lang +%defattr(-,root,root,-) +%dir %{_qt4_importdir}/ +%{_qt4_importdir}/Qt/ +%{_qt4_libdir}/libQt3Support.so.4* +%{_qt4_libdir}/libQtCLucene.so.4* +%{_qt4_libdir}/libQtDesigner.so.4* +%{_qt4_libdir}/libQtDeclarative.so.4* +%{_qt4_libdir}/libQtDesignerComponents.so.4* +%{_qt4_libdir}/libQtGui.so.4* +%{_qt4_libdir}/libQtHelp.so.4* +%{_qt4_libdir}/libQtMultimedia.so.4* +%{_qt4_libdir}/libQtOpenGL.so.4* +%{_qt4_libdir}/libQtScriptTools.so.4* +%{_qt4_libdir}/libQtSvg.so.4* +%{_qt4_plugindir}/* +%exclude %{_qt4_plugindir}/crypto +%if "%{?webkit}" == "-webkit" +%exclude %{_qt4_plugindir}/designer/libqwebview.so +%endif +%exclude %{_qt4_plugindir}/sqldrivers +%{_datadir}/icons/hicolor/*/apps/qt4-logo.* + +%if 0%{?dbus:1} +%post qdbusviewer +touch --no-create %{_datadir}/icons/hicolor ||: + +%posttrans qdbusviewer +gtk-update-icon-cache -q %{_datadir}/icons/hicolor 2> /dev/null ||: + +%postun qdbusviewer +if [ $1 -eq 0 ] ; then +touch --no-create %{_datadir}/icons/hicolor ||: +gtk-update-icon-cache -q %{_datadir}/icons/hicolor 2> /dev/null ||: +fi + +%files qdbusviewer +%if "%{_qt4_bindir}" != "%{_bindir}" +%{_bindir}/qdbusviewer +%endif +%{_qt4_bindir}/qdbusviewer +%{_datadir}/applications/*qdbusviewer.desktop +%{_datadir}/icons/hicolor/*/apps/qdbusviewer.* +%endif + + +%changelog +* Tue Jul 23 2019 Jan Grulich - 1:4.8.7-4 +- Bump build version for RPM to not consider z-stream build as newer + Revert fix for font cache check in QFontEngineFT::recalcAdvances() + Resolves: bz#1684167 + +* Thu Mar 21 2019 Jan Grulich - 1:4.8.7-3 +- Revert fix for font cache check in QFontEngineFT::recalcAdvances() + Resolves: bz#1684167 + +* Thu Sep 14 2017 Jan Grulich - 1:4.8.7-2 +- Update aarch64 patch + Resolves: bz#1484361 + +* Mon Aug 28 2017 Jan Grulich - 1:4.8.7-1 +- Update to 4.8.7 (+ sync with Fedora) + Resolves: bz#1484361 + +- Don't close Qt apps in Gnome on shutdown dialog + Resolves: bz#1378865 + +* Wed May 24 2017 Jan Grulich - 1:4.8.5-14 + +* Mon May 02 2016 Jan Grulich - 1:4.8.5-13 +- Prefer adwaita-qt theme over gtk + Resolves: bz#1332094 + +* Thu Mar 24 2016 Jan Grulich - 1:4.8.5-12 +- Revert upstream fix for QTBUG-15319 + Resolves: bz#1259675 +- Do not use nonstandard linux-g++-aarch64 + Resolves: bz#1291461 + +* Wed Sep 02 2015 Jan Grulich - 1:4.8.5-11 +- aarch64 fixes + Resolves: bz#1258902 + +* Thu Aug 21 2014 Than Ngo - 1:4.8.5-10 +- Resolves: bz#1125662, add support ppc64le arch + +* Wed Aug 20 2014 Than Ngo - 1:4.8.5-9 +- Resolves: bz#1125662 + +* Fri Jan 24 2014 Daniel Mach - 1:4.8.5-8 +- Mass rebuild 2014-01-24 + +* Wed Jan 15 2014 Honza Horak - 1:4.8.5-7 +- Rebuild for mariadb-libs + Related: #1045013 + +* Fri Dec 27 2013 Daniel Mach - 1:4.8.5-6 +- Mass rebuild 2013-12-27 + +* Wed Nov 20 2013 Than Ngo - 1:4.8.5-5 +- add fix to prevent overflow warning + +* Wed Nov 20 2013 Than Ngo - 1:4.8.5-4 +- add AArch64 support, patches from Ubuntu + +* Wed Jul 31 2013 Than Ngo - 1:4.8.5-3 +- revert upstream postgresql driver changes wrt escaping (QTBUG-30076) + +* Tue Jul 02 2013 Rex Dieter 4.8.5-2 +- qdbusviewer subpkg (#968336) + +* Tue Jul 02 2013 Rex Dieter 4.8.5-1 +- 4.8.5 (final) + +* Wed Jun 26 2013 Rex Dieter 4.8.5-0.6.rc2 +- trim changelog +- cleaner rpm_macros_dir handling + +* Fri Jun 21 2013 Rex Dieter 4.8.5-0.5.rc2 +- drop multilib portion from qt_plugin_path.patch + +* Tue Jun 18 2013 Rex Dieter 4.8.5-0.4.rc2 +- (re)add kde4/multilib QT_PLUGIN_PATH + +* Mon Jun 10 2013 Rex Dieter 4.8.5-0.3.rc2 +- 4.8.5-rc2 + +* Mon Jun 10 2013 Rex Dieter 4.8.5-0.2.rc +- RFE: Add %%qmake_qt4 macro (#870199) + +* Sun Jun 09 2013 Rex Dieter 4.8.5-0.1.rc +- 4.8.5-RC + +* Thu May 30 2013 Rex Dieter 4.8.4-19 +- drop QTBUG-27809 candidate fix, causes regressions (#968794) + +* Tue May 28 2013 Than Ngo - 4.8.4-18 +- QTBUG-27809, fix multiple calls to QDBusPendingReply::waitForFinished on separate objects + +* Thu Apr 25 2013 Than Ngo - 4.8.4-17 +- Desktop file sanity, drop key "Encoding", it's deprecated + +* Fri Apr 19 2013 Rex Dieter 4.8.4-16 +- update URL (#859286) +- include qdbusviewer .desktop/icon +- .desktop files: +mime scriptlets, +GenericName keys + +* Wed Mar 20 2013 Rex Dieter 4.8.4-15 +- pull in a few more upstream fixes + +* Mon Feb 11 2013 Rex Dieter 4.8.4-14 +- SIGSEGV when called from QMetaObject::metaCall (QTBUG-29082, kde#311751) + +* Mon Feb 11 2013 Rex Dieter 4.8.4-13 +- qmake: add support for pkgconfig Requires.private + +* Mon Feb 11 2013 Rex Dieter 4.8.4-12 +- add more moc/boost workarounds, thanks boost-1.53 (QTBUG-22829) + +* Mon Feb 04 2013 Than Ngo - 4.8.4-11 +- backport: fix security flaw was found in the way QSharedMemory class, CVE-2013-0254 + +* Sat Jan 26 2013 Rex Dieter 1:4.8.4-10 +- rebuild (icu) + +* Thu Jan 24 2013 Rex Dieter 1:4.8.4-9 +- make qtchooser support non-conflicting + +* Mon Jan 21 2013 Adam Tkac - 1:4.8.4-8 +- rebuild due to "jpeg8-ABI" feature drop + +* Wed Jan 09 2013 Rex Dieter 4.8.4-7 +- add qtchooser support (disabled by default) + +* Mon Jan 07 2013 Rex Dieter 4.8.4-6 +- blacklist unauthorized SSL certificates by Türktrust + +* Fri Jan 04 2013 Rex Dieter 1:4.8.4-5 +- QGtkStyle was unable to detect the current GTK+ theme (#702493, QTBUG-5545)) + +* Fri Jan 04 2013 Rex Dieter 1:4.8.4-4 +- QSslSocket may report incorrect errors when certificate verification fails + +* Thu Jan 03 2013 Rex Dieter 1:4.8.4-3 +- -x11: %%exclude %%{_qt4_plugindir}/designer/libqwebview.so + +* Sun Dec 16 2012 Rex Dieter 1:4.8.4-2 +- -designer-plugin-webkit subpkg (#887501) +- fix/prune/changelog + +* Thu Nov 29 2012 Rex Dieter 1:4.8.4-1 +- 4.8.4 + +* Wed Oct 31 2012 Than Ngo - 1:4.8.3-8 +- add poll support to fix QAbstractSocket errors with more than + 1024 file descriptors, thanks Florian for the patch + +* Wed Oct 24 2012 Rex Dieter 1:4.8.3-7 +- Crash in Qt script (QTBUG-27322) + +* Tue Oct 23 2012 Rex Dieter 1:4.8.3-6 +- fix/respin qdevice_pri patch + +* Mon Oct 22 2012 Rex Dieter 1:4.8.3-5 +- QDir::homePath() should account for an empty $HOME (QTBUG-4862, kde#249217, #694385) + +* Sat Oct 20 2012 Rex Dieter 1:4.8.3-4 +- $RPM_LD_FLAGS should be propagated to qmake's defaults (#868554) + +* Fri Sep 28 2012 Rex Dieter 1:4.8.3-3 +- find qdevice.pri even for installed qt builds + +* Thu Sep 27 2012 Rex Dieter 1:4.8.3-2 +- upstream disable-SSL-compression patch + +* Thu Sep 13 2012 Rex Dieter - 1:4.8.3-1 +- qt-4.8.3 final +- revert QtScript-JIT commit + +* Tue Sep 04 2012 Rex Dieter 4.8.2-6 +- revert "fix QtScript JIT crash" patch, causes frequent segmentation faults (#853587) + +* Mon Aug 13 2012 Rex Dieter 4.8.2-5 +- fix QtScript JIT crash (QTBUG-23871, kde#297661) + +* Thu Jul 05 2012 Rex Dieter 4.8.2-4 +- text cursor blinks not in the current cell (kde#296490) + +* Tue Jun 19 2012 Than Ngo - 4.8.2-3 +- fix bz#810500, fix crash in assistant + +* Tue May 29 2012 Than Ngo - 4.8.2-2 +- fix bz#820767, lrelease-qt4 tries to run qmake not qmake-qt4 + +* Tue May 22 2012 Than Ngo - 4.8.2-1 +- 4.8.2 + +* Fri May 18 2012 Than Ngo - 4.8.1-15 +- add rhel/fedora condition + +* Thu May 17 2012 Rex Dieter 4.8.1-14 +- Can't build 32bit Qt release application on 64bit (#822710) + +* Wed May 16 2012 Than Ngo - 4.8.1-13 +- add upstream patch to fix crash on big endian machine + +* Fri May 11 2012 Rex Dieter 4.8.1-12 +- enable debuginfo in libQt3Support + +* Fri May 11 2012 Rex Dieter 4.8.1-11 +- lrelease-qt4 tries to run qmake not qmake-qt4 (#820767) + +* Thu May 10 2012 Rex Dieter 4.8.1-10 +- Requires: qt-settings (f17+) + +* Tue May 08 2012 Rex Dieter 4.8.1-9 +- rebuild (libtiff) + +* Thu May 03 2012 Than Ngo - 4.8.1-8 +- add rhel/fedora condition + +* Wed Apr 18 2012 Than Ngo - 4.8.1-7 +- add rhel condition + +* Tue Apr 17 2012 Rex Dieter 4.8.1-6 +- omit qdbusconnection warnings in release/no-debug mode + +* Tue Apr 03 2012 Jaroslav Reznik - 4.8.1-5 +- Fix a crash in cursorToX() when new block is added (QTBUG-24718) + +* Fri Mar 30 2012 Than Ngo - 4.8.1-4 +- Fix QTgaHandler::canRead() not obeying image plugin specs + +* Thu Mar 29 2012 Rex Dieter 4.8.1-3 +- Header file name mismatch in qt-devel i686 (#808087) + +* Thu Mar 29 2012 Than Ngo - 4.8.1-2 +- add correct flags + +* Wed Mar 28 2012 Than Ngo - 4.8.1-1 +- 4.8.1 + +* Wed Feb 22 2012 Rex Dieter 4.8.0-10 +- -demos: Requires: -doc (#795859) + +* Mon Feb 20 2012 Than Ngo - 4.8.0-9 +- get rid of timestamp which causes multilib problem + +* Tue Jan 24 2012 Than Ngo - 4.8.0-8 +- disable Using gold linker, g++ doesn't support flags gold linker +- fix gcc-4.7 issue + +* Tue Jan 10 2012 Rex Dieter 4.8.0-7 +- improved filter_event patch (kde#275469) + +* Mon Jan 09 2012 Than Ngo - 4.8.0-6 +- bz#772128, CVE-2011-3922, Stack-based buffer overflow in embedded harfbuzz code + +* Tue Dec 27 2011 Rex Dieter 4.8.0-5 +- fix qvfb + +* Tue Dec 27 2011 Rex Dieter 4.8.0-4 +- filter event patch, avoid "ghost entries in kde taskbar" problem (kde#275469) + +* Tue Dec 20 2011 Rex Dieter 4.8.0-3 +- don't spam if libicu is not present at runtime (#759923) + +* Mon Dec 19 2011 Dan Horák 4.8.0-2 +- add missing method for QBasicAtomicPointer on s390(x) + +* Thu Dec 15 2011 Jaroslav Reznik 4.8.0-1 +- 4.8.0 + +* Mon Dec 12 2011 Jaroslav Reznik 4.8.0-0.29.rc1 +- Fixes the position of misplaced mouse input (QTBUG-22420) + +* Sun Dec 04 2011 Rex Dieter 4.8.0-0.28.rc1 +- Control whether icu support is built (#759923) + +* Sat Dec 03 2011 Kevin Kofler 4.8.0-0.27.rc1 +- work around a MOC issue with Boost 1.48 headers (#756395) + +* Wed Nov 30 2011 Than Ngo - 4.8.0-0.26.rc1 +- workaround crash on ppc64 + +* Mon Nov 14 2011 Rex Dieter 4.8.0-0.25.rc1 +- BuildRequires: pkgconfig(libpng) +- -devel: drop Requires: libpng-devel libjpeg-devel +- qt4.macros: +%%_qt4_epoch, %%_qt4_evr + +* Thu Nov 03 2011 Rex Dieter 4.8.0-0.24.rc1 +- build tds sql driver with -fno-strict-aliasing + +* Fri Oct 28 2011 Rex Dieter 4.8.0-0.23.rc1 +- crash when using a visual with 24 bits per pixel (#749647,QTBUG-21754) + +* Fri Oct 28 2011 Kevin Kofler 4.8.0-0.22.rc1 +- fix FTBFS in QtWebKit's wtf library with GLib 2.31 + +* Thu Oct 27 2011 Kevin Kofler 4.8.0-0.21.rc1 +- fix missing NULL check in the toLocalFile patch (fixes Digikam segfault) + +* Thu Oct 27 2011 Rex Dieter 4.8.0-0.20.rc1 +- restore qt-4.7-compatible behavior to QUrl.toLocalFile (#749213) + +* Wed Oct 26 2011 Fedora Release Engineering - 1:4.8.0-0.19.rc1 +- Rebuilt for glibc bug#747377 + +* Mon Oct 24 2011 Than Ngo 4.8.0-0.18.rc1 +- bz#748297, update the URL of qt packages + +* Tue Oct 18 2011 Rex Dieter 4.8.0-0.17.rc1 +- Buttons in Qt applications not clickable when run under gnome-shell (#742658, QTBUG-21900) + +* Mon Oct 17 2011 Rex Dieter 4.8.0-0.16.rc1 +- Qt doesn't close orphaned file descriptors after printing (#746601, QTBUG-14724) + +* Sat Oct 15 2011 Rex Dieter 4.8.0-0.15.rc1 +- revert qlist.h commit that seems to induce crashes in qDeleteAll 4.8.0-0.14.rc1 +- pkgconfig-style deps + +* Thu Oct 13 2011 Rex Dieter 4.8.0-0.13.rc1 +- 4.8.0-rc1 + +* Mon Oct 03 2011 Rex Dieter 4.8.0-0.12.20111002 +- 20111002 4.8 branch snapshot + +* Sat Sep 17 2011 Rex Dieter 4.8.0-0.11.beta1 +- ./configure -webkit + +* Wed Sep 14 2011 Lukas Tinkl 1:4.8.0-0.10.beta1 +- fix missing CSS styles and JS functions in the generated HTML + documentation, omitted from the upstream tarball + +* Wed Aug 17 2011 Rex Dieter 1:4.8.0-0.9.beta1 +- -graphicssystem raster (#712617) +- drop sqlite_pkg option + +* Sun Jul 31 2011 Rex Dieter 1:4.8.0-0.8.beta1 +- macros.qt4: s|_qt47|_qt48| + +* Thu Jul 28 2011 Dan Horák 1:4.8.0-0.7.beta1 +- fix the outdated standalone copy of JavaScriptCore (s390) + +* Sat Jul 23 2011 Rex Dieter 1:4.8.0-0.6.beta1 +- fix QMAKE_LIBDIR_QT, for missing QT_SHARED define (#725183) + +* Wed Jul 20 2011 Rex Dieter 1:4.8.0-0.5.beta1 +- 4.8.0-beta1 +- drop webkit_packaged conditional +- drop old patches +- drop qvfb (for now, ftbfs) + +* Wed Jul 13 2011 Than Ngo - 1:4.8.0-0.4.tp +- move macros.* to -devel + +* Tue Jul 05 2011 Rex Dieter 1:4.8.0-0.3.tp +- Adding qt-sql-ibase driver for qt (#719002) +- qvfb subpackage (#718416) + +* Tue Jun 21 2011 Rex Dieter 1:4.8.0-0.2.tp +- fontconfig patch (#705348, QTBUG-19947) + +* Wed May 25 2011 Jaroslav Reznik 1:4.8.0-0.1.tp +- 4.8.0-tp +- drop phonon_internal, phonon_backend_packaged build options + +* Thu May 19 2011 Rex Dieter 1:4.7.3-3 +- omit %%{_qt4_plugindir}/designer/libqwebview.so too + +* Thu May 19 2011 Rex Dieter 1:4.7.3-2 +- omit bundled webkit on f16+ (in favor of separately packaged qtwebkit) + +* Thu May 05 2011 Jaroslav Reznik 1:4.7.3-1 +- 4.7.3 + +* Thu Apr 21 2011 Rex Dieter 1:4.7.2-9 +- -webkit-devel: move qt_webkit_version.pri here + +* Fri Apr 01 2011 Rex Dieter 1:4.7.2-8 +- -devel-private: qt-creator/QmlDesigner requires qt private headers (#657498) + +* Fri Mar 25 2011 Rex Dieter 1:4.7.2-7 +- followup patch for QTBUG-18338, blacklist fraudulent SSL certifcates + +* Fri Mar 25 2011 Rex Dieter 1:4.7.2-6 +- drop qt-designer-plugin-phonon + +* Fri Mar 25 2011 Than Ngo - 1:4.7.2-5 +- apply patch to fix QTBUG-18338, blacklist fraudulent SSL certifcates + +* Tue Mar 22 2011 Jaroslav Reznik 1:4.7.2-4 +- rebuild (mysql) + +* Fri Mar 11 2011 Dan Horák 1:4.7.2-3 +- workaround memory exhaustion during linking of libQtWebKit on s390 + +* Mon Mar 07 2011 Jaroslav Reznik 1:4.7.2-2 +- Fix QNetworkConfigurationManager crash due to null private pointer (#682656) + +* Tue Mar 01 2011 Jaroslav Reznik 1:4.7.2-1 +- 4.7.2 + +* Wed Feb 23 2011 Rex Dieter 1:4.7.1-18 +- libQtWebKit.so has no debug info (#667175) + +* Wed Feb 16 2011 Rex Dieter 1:4.7.1-17 +- Obsoletes: qt-sqlite < 1:4.7.1-16 + +* Tue Feb 15 2011 Rex Dieter 1:4.7.1-16 +- drop -sqlite subpkg, move into main (#677418) + +* Wed Feb 09 2011 Rex Dieter 1:4.7.1-15 +- -assistant subpkg (#660287) +- -config drop Obsoletes: qt-x11 (avoid/workaround #674326) +- -config unconditionally drop NoDisplay (since we're dropping the Obsoletes too) +- -designer-plugin-phonon subpkg (#672088) + +* Tue Feb 08 2011 Fedora Release Engineering - 1:4.7.1-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Jan 26 2011 Rex Dieter 4.7.1-13 +- -config: fix Obsoletes for real this time + +* Wed Jan 26 2011 Rex Dieter 4.7.1-12 +- fix qt-config related Obsoletes/Provides + +* Wed Jan 26 2011 Rex Dieter 4.7.1-11 +- upstream fix for QTextCursor regression (QTBUG-15857, kde#249373) + +* Tue Jan 25 2011 Rex Dieter 4.7.1-10 +- -config subpkg +- qt-x11 pulls in phonon (#672088) +- qtconfig.desktop: drop NoDisplay (f15+ only, for now) + +* Thu Jan 20 2011 Rex Dieter 4.7.1-9.1 +- apply the Assistant QtWebKit dependency removal (#660287) everywhere + +* Thu Jan 06 2011 Rex Dieter 4.7.1-9 +- qsortfilterproxymodel fix (merge_request/934) + +* Tue Jan 04 2011 Rex Dieter 4.7.1-8 +- only do Requires: phonon-backend if using qt's phonon + +* Fri Dec 24 2010 Kevin Kofler 4.7.1-7 +- fix QTreeView crash triggered by KPackageKit (patch by David Faure) + +* Fri Dec 24 2010 Rex Dieter 4.7.1-6 +- rebuild (mysql) + +* Wed Dec 08 2010 Kevin Kofler 4.7.1-5 +- make the Assistant QtWebKit dependency removal (#660287) F15+ only for now +- fix QTextCursor crash in Lokalize and Psi (QTBUG-15857, kde#249373, #660028) +- add some more NULL checks to the glib_eventloop_nullcheck patch (#622164) + +* Mon Dec 06 2010 Than Ngo 4.7.1-4 +- bz#660287, using QTextBrowser in assistant to drop qtwebkit dependency + +* Tue Nov 23 2010 Rex Dieter - 4.7.1-3 +- Fails to create debug build of Qt projects on mingw (#653674, QTBUG-14467) + +* Mon Nov 22 2010 Than Ngo - 4.7.1-2 +- bz#528303, Reordering of Malayalam Rakar not working properly + +* Thu Nov 11 2010 Than Ngo - 4.7.1-1 +- 4.7.1 + +* Mon Oct 25 2010 Jaroslav Reznik - 4.7.0-8 +- QtWebKit, CVE-2010-1822: crash by processing certain SVG images (#640290) + +* Mon Oct 18 2010 Rex Dieter - 4.7.0-7 +- qt-devel contains residues from patch run (#639463) + +* Fri Oct 15 2010 Than Ngo - 4.7.0-6 +- apply patch to fix the color issue in 24bit mode (cirrus driver) + +* Thu Sep 30 2010 Rex Dieter - 4.7.0-5 +- Wrong Cursor when widget become native on X11 (QTBUG-6185) + +* Mon Sep 27 2010 Than Ngo - 4.7.0-4 +- apply upstream patch to fix QTreeView-regression (QTBUG-13567) + +* Thu Sep 23 2010 Than Ngo - 4.7.0-3 +- fix typo in license + +* Thu Sep 23 2010 Than Ngo - 4.7.0-2 +- fix bz#562049, bn-IN Incorrect rendering +- fix bz#562058, bn_IN init feature is not applied properly +- fix bz#631732, indic invalid syllable's are not recognized properly +- fix bz#636399, oriya script open type features are not applied properly + +* Tue Sep 21 2010 Than Ngo - 4.7.0-1 +- 4.7.0 + +* Thu Sep 09 2010 Rex Dieter - 4.7.0-0.31.rc1 +- -webkit-devel: add missing %%defattr +- -webkit: move qml/webkit bits here + +* Wed Sep 08 2010 Rex Dieter - 4.7.0-0.30.rc1 +- Crash in drawPixmap in Qt 4.7rc1 (#631845, QTBUG-12826) + +* Mon Aug 30 2010 Than Ngo - 4.7.0-0.29.rc1 +- drop the patch, it's already fixed in upstream + +* Thu Aug 26 2010 Than Ngo - 4.7.0-0.28.rc1 +- 4.7.0 rc1 + +* Thu Jul 08 2010 Rex Dieter - 4.7.0-0.26.beta2 +- rebase patches, avoiding use of patch fuzz +- omit old qt-copy/kde-qt patches, pending review +- omit kde4_plugin patch +- ftbfs:s/qml/qmlviewer, libQtMediaServices no longer included + +* Thu Jul 08 2010 Rex Dieter - 4.7.0-0.25.beta2 +- 4.7.0-beta2 + +* Thu Jul 01 2010 Rex Dieter - 4.7.0-0.24.beta1 +- X11Embed broken (rh#609757, QTBUG-10809) + +* Thu Jul 01 2010 Kevin Kofler - 4.7.0-0.23.beta1 +- use find_lang to package the qm files (#609749) +- put the qm files into the correct subpackages +- remove qvfb translations, we don't ship qvfb + +* Tue Jun 29 2010 Rex Dieter 4.7.0-0.20.beta1 +- avoid timestamps in uic-generated files to be multilib-friendly + +* Fri Jun 18 2010 Rex Dieter 4.7.0-0.19.beta1 +- revert -no-javascript-jit change, false-alarm (#604003) +- QtWebKit does not search correct plugin path(s) (#568860) +- QtWebKit browsers crash with flash-plugin (rh#605677,webkit#40567) +- drop qt-x11-opensource-src-4.5.0-gcc_hack.patch + +* Wed Jun 16 2010 Rex Dieter 4.7.0-0.18.beta1 +- -no-javascript-jit on i686 (#604003) + +* Wed Jun 16 2010 Karsten Hopp 4.7.0-0.17.beta1 +- add s390 and s390x to 3rdparty/webkit/JavaScriptCore/wtf/Platform.h and + 3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h + +* Fri Jun 11 2010 Rex Dieter - 4.7.0-0.16.beta1 +- scrub -lpulse-mainloop-glib from .prl files (#599844) +- scrub references to %%buildroot in .pc, .prl files + +* Thu May 27 2010 Rex Dieter - 4.7.0-0.15.beta1 +- Unsafe use of rand() in X11 (QTBUG-9793) + +* Fri May 21 2010 Rex Dieter - 4.7.0-0.14.beta1 +- drop -no-javascript-jit (webkit#35154) + +* Mon May 17 2010 Rex Dieter - 4.7.0-0.13.beta1 +- QT_GRAPHICSSYSTEM env support + +* Sun May 16 2010 Rex Dieter - 4.7.0-0.12.beta1 +- -webkit-devel: move Qt/qweb*.h here (#592680) + +* Fri May 07 2010 Rex Dieter - 4.7.0-0.11.beta1 +- -webkit-devel: Obsoletes: qt-devel ... (upgrade path) + +* Thu May 06 2010 Rex Dieter - 4.7.0-0.10.beta1 +- -webkit-devel: Provides: qt4-webkit-devel , Requires: %%name-devel + +* Thu May 06 2010 Rex Dieter - 4.7.0-0.9.beta1 +- 4.7.0-beta1 +- -webkit-devel : it lives! brainz! + +* Fri Apr 30 2010 Rex Dieter - 4.7.0-0.8.tp +- prepping for separate QtWebKit(-2.0) +- -webkit subpkg, Provides: QtWebKit ... +- -devel: Provides: QtWebKit-devel ... +- TODO: -webkit-devel (and see what breaks) + +* Wed Apr 28 2010 Rex Dieter - 4.7.0-0.7.tp +- own %%{_qt4_plugindir}/crypto + +* Sat Apr 03 2010 Kevin Kofler - 4.7.0-0.6.tp +- backport fix for QTBUG-9354 which breaks kdeutils build + +* Fri Apr 02 2010 Rex Dieter - 4.7.0-0.5.tp +- Associate text/vnd.trolltech.linguist with linguist (#579082) + +* Tue Mar 23 2010 Tom "spot" Callaway - 4.7.0-0.4.tp +- fix type cast issue on sparc64 + +* Sun Mar 21 2010 Kevin Kofler - 4.7.0-0.3.tp +- also strip -lpulse from .prl files (fixes PyQt4 QtMultimedia binding build) + +* Tue Mar 16 2010 Rex Dieter - 4.7.0-0.2.tp +- qt-4.7.0-tp +- macros.qt4 : +%%_qt4_importdir +- don't strip libs from pkgconfig files, Libs.private is now used properly +- add -lphonon to stripped libs instead of brutally hacking out + QMAKE_PRL_LIBS altogether (#520323) +- qt-assistant-adp packaged separately now, not included here + +* Sat Mar 13 2010 Kevin Kofler - 4.6.2-7 +- BR alsa-lib-devel (for QtMultimedia) + +* Sat Mar 13 2010 Kevin Kofler - 4.6.2-6 +- Provides: qt-assistant-adp(-devel) + +* Fri Mar 05 2010 Than Ngo - 4.6.2-5 +- Make tablet detection work with new wacom drivers (#569132) + +* Mon Mar 01 2010 Rex Dieter - 4.6.2-4 +- fix 64bit platform logic, use linux-g++-64 everywhere except x86_64 (#569542) + +* Sun Feb 28 2010 Kevin Kofler - 4.6.2-3 +- fix CUPS patch not to crash if currentPPD is NULL (#566304) + +* Tue Feb 16 2010 Rex Dieter - 4.6.2-2 +- macros.qt4: s/qt45/qt46/ + +* Mon Feb 15 2010 Rex Dieter - 4.6.2-1 +- 4.6.2 + +* Fri Feb 05 2010 Rex Dieter - 4.6.1-3 +- improve cups support (#523846, kde#180051#c22) + +* Tue Jan 19 2010 Rex Dieter - 4.6.1-2 +- drop bitmap_font_speed patch, rejected upstream + +* Tue Jan 19 2010 Than Ngo - 4.6.1-1 +- 4.6.1 + +* Mon Jan 11 2010 Rex Dieter - 4.6.0-5 +- bitmap_font_speed patch (QTBUG-7255) + +* Sat Jan 09 2010 Rex Dieter - 4.6.0-4 +- Fix crash when QGraphicsItem destructor deletes other QGraphicsItem (kde-qt cec34b01) +- Fix a crash in KDE/Plasma with QGraphicsView. TopLevel list of items (kde-qt 63839f0c) + +* Wed Dec 23 2009 Kevin Kofler - 4.6.0-3 +- disable QtWebKit JavaScript JIT again, incompatible with SELinux (#549994) + +* Sat Dec 05 2009 Kevin Kofler - 4.6.0-2 +- own %%{_qt4_plugindir}/gui_platform + +* Tue Dec 01 2009 Than Ngo - 4.6.0-1 +- 4.6.0 + +* Tue Nov 17 2009 Rex Dieter - 4.6.0-0.6.rc1 +- qt-4.6.0-rc1 + +* Sat Nov 14 2009 Rex Dieter - 4.6.0-0.5.beta1 +- -tds: Add package with TDS sqldriver (#537586) +- add arch'd provides for sql drivers + +* Sun Nov 08 2009 Rex Dieter - 4.6.0-0.4.beta1 +- -x11: Requires: %%{name}-sqlite%{?_isa} + +* Mon Oct 26 2009 Rex Dieter - 4.6.0-0.3.beta1 +- kde-qt patches (as of 20091026) + +* Fri Oct 16 2009 Than Ngo - 4.6.0-0.2.beta1 +- subpackage sqlite plugin, add Require on qt-sqlite in qt-x11 + for assistant +- build/install qdoc3 again + +* Wed Oct 14 2009 Rex Dieter - 4.6.0-0.1.beta1 +- qt-4.6.0-beta1 +- no kde-qt patches (yet) + +* Sat Oct 10 2009 Than Ngo - 4.5.3-4 +- fix translation build issue +- rhel cleanup + +* Tue Oct 06 2009 Jaroslav Reznik - 4.5.3-3 +- disable JavaScriptCore JIT, SE Linux crashes (#527079) + +* Fri Oct 02 2009 Than Ngo - 4.5.3-2 +- cleanup patches +- if ! phonon_internal, exclude more/all phonon headers +- qt-devel must Requires: phonon-devel (#520323) + +* Thu Oct 01 2009 Rex Dieter - 4.5.3-1 +- qt-4.5.3 + +* Tue Sep 29 2009 Rex Dieter - 4.5.2-21 +- switch to external/kde phonon + +* Mon Sep 28 2009 Rex Dieter - 4.5.2-20 +- use internal Qt Assistant/Designer icons +- -devel: move designer.qch,linguist.qch here +- move ownership of %%_qt4_docdir, %%_qt4_docdir/qch to main pkg + +* Sun Sep 20 2009 Rex Dieter - 4.5.2-19 +- Missing Qt Designer icon (#476605) + +* Fri Sep 11 2009 Rex Dieter - 4.5.2-18 +- drop gcc -fno-var-tracking-assignments hack (#522576) + +* Fri Sep 11 2009 Than Ngo - 4.5.2-17 +- drop useless check for ossl patch, the patch works fine with old ossl + +* Wed Sep 09 2009 Than Ngo - 4.5.2-16 +- add a correct system_ca_certificates patch + +* Tue Sep 08 2009 Rex Dieter - 4.5.2-15 +- use system ca-certificates (#521911) + +* Tue Sep 01 2009 Than Ngo - 4.5.2-14 +- drop fedora < 9 support +- only apply ossl patch for fedora > 11 + +* Mon Aug 31 2009 Than Ngo - 4.5.2-13 +- fix for CVE-2009-2700 + +* Thu Aug 27 2009 Rex Dieter 4.5.2-12 +- use platform linux-g++ everywhere (ie, drop linux-g++-64 on 64 bit), + avoids plugin/linker weirdness (bug #478481) + +* Wed Aug 26 2009 Tomas Mraz - 1:4.5.2-11 +- rebuilt with new openssl + +* Thu Aug 20 2009 Than Ngo - 4.5.2-10 +- switch to kde-qt branch + +* Tue Aug 18 2009 Than Ngo - 4.5.2-9 +- security fix for CVE-2009-1725 (bz#513813) + +* Sun Aug 16 2009 Than Ngo - 4.5.2-8 +- fix phonon-backend-gstreamer for using pulsaudio (#513421) + +* Fri Aug 14 2009 Rex Dieter 4.5.2-7 +- kde-qt: 287-qmenu-respect-minwidth +- kde-qt: 0288-more-x-keycodes (#475247) + +* Wed Aug 05 2009 Rex Dieter 4.5.2-6 +- use linker scripts for _debug targets (#510246) +- tighten deps using %%{?_isa} +- -x11: Requires(post,postun): /sbin/ldconfig + +* Thu Jul 30 2009 Than Ngo - 4.5.2-5 +- apply upstream patch to fix issue in Copy and paste + +* Sun Jul 26 2009 Fedora Release Engineering - 1:4.5.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu Jul 02 2009 Than Ngo - 4.5.2-3 +- pregenerate PNG, drop BR on GraphicsMagick (bz#509244) + +* Fri Jun 26 2009 Kevin Kofler - 4.5.2-2 +- take current qt-copy-patches snapshot (20090626) +- disable patches which are already in 4.5.2 +- fix the qt-copy patch 0274-shm-native-image-fix.diff to apply against 4.5.2 + +* Thu Jun 25 2009 Lukáš Tinkl - 4.5.2-1 +- Qt 4.5.2 + +* Sun Jun 07 2009 Rex Dieter - 4.5.1-18 +- phonon-backend-gstreamer pkg, with icons +- optimize (icon-mostly) scriptlets + +* Sun Jun 07 2009 Than Ngo - 4.5.1-17 +- drop the hack, apply patch to install Global header, gstreamer.desktop + and dbus services file + +* Sat Jun 06 2009 Rex Dieter - 4.5.1-16 +- install awol Phonon/Global header + +* Fri Jun 05 2009 Kevin Kofler - 4.5.1-15 +- apply Phonon PulseAudio patch (needed for the xine-lib backend) + +* Fri Jun 05 2009 Than Ngo - 4.5.1-14 +- enable phonon and gstreamer-backend + +* Sat May 30 2009 Rex Dieter - 4.5.1-13 +- -doc: Obsoletes: qt-doc < 1:4.5.1-4 (workaround bug #502401) + +* Sat May 23 2009 Rex Dieter - 4.5.1-12 +- +phonon_internal macro to toggle packaging of qt's phonon (default off) + +* Fri May 22 2009 Rex Dieter - 4.5.1-11 +- qt-copy-patches-20090522 + +* Wed May 20 2009 Rex Dieter - 4.5.1-10.2 +- full (non-bootstrap) build + +* Wed May 20 2009 Rex Dieter - 4.5.1-10.1 +- allow for minimal bootstrap build (*cough* arm *cough*) + +* Wed May 06 2009 Rex Dieter - 4.5.1-10 +- improved kde4_plugins patch, skip expensive/unneeded canonicalPath + +* Wed May 06 2009 Rex Dieter - 4.5.1-9 +- include kde4 plugin path by default (#498809) + +* Mon May 04 2009 Rex Dieter - 4.5.1-8 +- fix invalid assumptions about mysql_config --libs (bug #440673) +- fix %%files breakage from 4.5.1-5 + +* Wed Apr 29 2009 Rex Dieter - 4.5.1-7 +- -devel: Provides: qt4-devel%%{?_isa} ... + +* Mon Apr 27 2009 Than Ngo - 4.5.1-6 +- drop useless hunk of qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch + +* Mon Apr 27 2009 Rex Dieter - 4.5.1-5 +- -devel: Provides: *-static for libQtUiTools.a + +* Fri Apr 24 2009 Rex Dieter - 4.5.1-4 +- qt-doc noarch +- qt-demos, qt-examples (split from -doc) +- (cosmetic) re-order subpkgs in alphabetical order +- drop unused profile.d bits + +* Fri Apr 24 2009 Rex Dieter - 4.5.1-3 +- enable FT_LCD_FILTER (uses freetype subpixel filters if available at runtime) + +* Fri Apr 24 2009 Than Ngo - 4.5.1-2 +- apply upstream patch to fix the svg rendering regression + +* Thu Apr 23 2009 Than Ngo - 4.5.1-1 +- 4.5.1 + +* Tue Apr 14 2009 Rex Dieter - 4.5.0-14 +- fix vrgb/vgbr corruption, disable QT_USE_FREETYPE_LCDFILTER (#490377) + +* Fri Apr 10 2009 Than Ngo - 4.5.0-13 +- unneeded executable permissions for profile.d scripts + +* Wed Apr 01 2009 Kevin Kofler - 4.5.0-12 +- fix inline asm in qatomic (de)ref (i386/x86_64), should fix Kolourpaint crash + +* Mon Mar 30 2009 Rex Dieter - 4.5.0-11 +- qt fails to build on ia64 (#492174) + +* Wed Mar 25 2009 Rex Dieter - 4.5.0-10 +- qt-copy-patches-20090325 + +* Tue Mar 24 2009 Than Ngo - 4.5.0-9 +- lrelease only shows warning when duplicate messages found in *.ts( #491514) + +* Fri Mar 20 2009 Rex Dieter - 4.5.0-8 +- qt-copy-patches-20090319 + +* Thu Mar 19 2009 Rex Dieter - 4.5.0-7 +- include more phonon bits, attempt to fix/provide phonon bindings + for qtscriptgenerator, PyQt, ... + +* Tue Mar 17 2009 Than Ngo - 4.5.0-6 +- fix lupdate segfault (#486866) + +* Sat Mar 14 2009 Dennis Gilmore - 4.5.0-5 +- add patch for sparc64. +- _Atomic_word is not always an int + +* Tue Mar 10 2009 Rex Dieter - 4.5.0-4 +- macros.qt4: %%_qt45 +- cleanup more phonon-related left-overs + +* Wed Mar 04 2009 Rex Dieter - 4.5.0-3 +- -no-phonon-backend +- include qdoc3 +- move designer plugins to runtime (#487622) + +* Tue Mar 03 2009 Rex Dieter - 4.5.0-2 +- License: LGPLv2 with exceptions or GPLv3 with exceptions +- BR: gstreamer-devel +- drop qgtkstyle patch (no longer needed) +- -x11: move libQtScriptTools here (linked with libQtGui) + +* Tue Mar 03 2009 Than Ngo - 4.5.0-1 +- 4.5.0 + +* Fri Feb 27 2009 Rex Dieter - 1:4.5.0-0.8.20090224 +- 20090224 snapshot +- adjust pkgconfig hackery + +* Wed Feb 25 2009 Fedora Release Engineering - 1:4.5.0-0.7.rc1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Sun Feb 22 2009 Rex Dieter 4.5.0-0.5.rc1 +- revert license, change won't land until official 4.5.0 release +- workaround broken qhostaddress.h (#485677) +- Provides: qgtkstyle = 0.1 + +* Fri Feb 20 2009 Rex Dieter 4.5.0-0.4.rc1 +- saner versioned Obsoletes +- -gtkstyle, Obsoletes: qgtkstyle < 0.1 +- enable phonon support and associated hackery + +* Mon Feb 16 2009 Than Ngo 4.5.0-0.3.rc1 +- fix callgrindChildExitCode is uninitialzed + +* Sun Feb 15 2009 Rex Dieter - 4.5.0-0.2.rc1 +- qt-copy-patches-20090215 +- License: +LGPLv2 + +* Wed Feb 11 2009 Than Ngo - 4.5.0-0.rc1.0 +- 4.5.0 rc1 + +* Thu Feb 05 2009 Rex Dieter 4.4.3-16 +- track branches/qt-copy/4.4, and backout previous trunk(qt45) ones + +* Mon Feb 02 2009 Than Ngo 4.4.3-15 +- disable 0269,0270,0271 patches, it causes issue in systray + +* Thu Jan 29 2009 Rex Dieter - 4.4.3-14 +- qt-copy-patches-20090129 + +* Mon Jan 26 2009 Rex Dieter - 4.4.3-13 +- Provides: qt4%%{?_isa} = %%version-%%release +- add %%_qt4 to macros.qt4 + +* Thu Jan 22 2009 Rex Dieter - 4.4.3-12 +- respin (mysql) + +* Fri Jan 16 2009 Kevin Kofler - 4.4.3-11 +- rebuild for new OpenSSL + +* Mon Jan 12 2009 Rex Dieter - 4.4.3-10 +- drop qt-x11-opensource-src-4.3.4-no-hardcoded-font-aliases.patch (#447298), + in favor of qt-copy's 0263-fix-fontconfig-handling.diff + +* Mon Jan 12 2009 Than Ngo - 4.4.3-9 +- qt-copy-patches-20090112 + +* Tue Dec 30 2008 Rex Dieter 4.4.3-8 +- qt-copy-patches-20081225 + +* Fri Dec 12 2008 Rex Dieter 4.4.3-7 +- rebuild for pkgconfig deps + +* Wed Nov 12 2008 Rex Dieter 4.4.3-6 +- qt-copy-patches-20081112 + +* Tue Nov 11 2008 Than Ngo 4.4.3-5 +- drop 0256-fix-recursive-backingstore-sync-crash.diff, it's + included in qt-copy-pathes-20081110 + +* Mon Nov 10 2008 Rex Dieter 4.4.3-4 +- qt-copy-patches-20081110 + +* Mon Nov 10 2008 Than Ngo 4.4.3-3 +- apply 0256-fix-recursive-backingstore-sync-crash.diff + +* Thu Nov 06 2008 Than Ngo 4.4.3-2 +- bz#468814, immodule selection behavior is unpredictable without QT_IM_MODULE, + patch from Peng Wu +- backport fix from 4.5 + +* Sun Sep 28 2008 Rex Dieter 4.4.3-1 +- 4.4.3 + +* Wed Sep 24 2008 Rex Dieter 4.4.2-2 +- omit systray patch (for now) + +* Sat Sep 20 2008 Than Ngo 4.4.2-1 +- 4.4.2 + +* Mon Sep 08 2008 Rex Dieter - 4.4.1-3 +- apply QMAKEPATH portion of multilib patch only if needed +- qt-copy-patches-20080908 + +* Wed Aug 06 2008 Than Ngo - 4.4.1-2 +- fix license tag +- fix Obsoletes: qt-sqlite (missing epoch) + +* Tue Aug 05 2008 Than Ngo - 4.4.1-1 +- 4.4.1 + +* Tue Aug 05 2008 Rex Dieter 4.4.0-17 +- fold -sqlite subpkg into main (#454930) + +* Wed Jul 23 2008 Rex Dieter 4.4.0-16 +- qt-copy-patches-20080723 (kde#162793) +- omit deprecated phonon bits + +* Sat Jul 19 2008 Rex Dieter 4.4.0-15 +- fix/workaround spec syntax + +* Sat Jul 19 2008 Rex Dieter 4.4.0-14 +- macros.qt4: fix %%_qt4_datadir, %%_qt4_translationdir + +* Thu Jul 17 2008 Rex Dieter 4.4.0-13 +- (re)fix qconfig-multilib.h for sparc64 + +* Fri Jul 11 2008 Rex Dieter 4.4.0-12 +- qt-copy-patches-20080711 + +* Mon Jun 23 2008 Rex Dieter 4.4.0-11 +- fix dbus conditional (#452487) + +* Sat Jun 14 2008 Rex Dieter 4.4.0-10 +- strip -lsqlite3 from .pc files (#451490) + +* Sat Jun 14 2008 Kevin Kofler 4.4.0-9 +- restore -qt4 suffixes + +* Fri Jun 13 2008 Than Ngo 4.4.0-8 +- drop qt wrapper, make symlinks to /usr/bin + +* Tue Jun 10 2008 Than Ngo 4.4.0-7 +- fix #450310, multilib issue + +* Fri Jun 06 2008 Rex Dieter 4.4.0-6 +- qt-copy-patches-20080606 +- drop BR: libungif-devel (not used) +- move libQtXmlPatters, -x11 -> main +- move qdbuscpp2xml, qdbusxml2cpp, xmlpatters, -x11 -> -devel + +* Tue May 27 2008 Kevin Kofler 4.4.0-5 +- under GNOME, default to QGtkStyle if available + +* Mon May 19 2008 Kevin Kofler 4.4.0-4 +- don't hardcode incorrect font substitutions (#447298) + +* Fri May 16 2008 Rex Dieter 4.4.0-3 +- qt-copy-patches-20080516 + +* Tue May 13 2008 Kevin Kofler 4.4.0-2 +- revert _qt4_bindir change for now, needs more work (#446167) + +* Tue May 06 2008 Rex Dieter 4.4.0-1 +- qt-4.4.0