Hello *,

I'm the maintainer of the qmapshack package in Gentoo. I wanted to update it to 1.15.0, but found that it does not compile with the current Qt, which is 5.15. I suppose that older versions of qmapshack also don't compile, and now all versions of qmapshack in Gentoo (1.14.0, 1.14.1) are broken.

Qt-5.15 has rearranged its include files, thus breaking a lot of Qt-based software. For example, qwt (https://sourceforge.net/p/qwt/bugs/314/), rpcs3 (https://github.com/RPCS3/rpcs3/pull/7832), nextcloud-client (https://bugs.gentoo.org/727474) and many others. In https://sourceforge.net/p/qwt/bugs/314/ I read:

There are many places where '#include qpainterpath.h' is missing. The problem has been introduced with Qt 5.15-Beta2 and was not there with Beta1. As this probably breaks application code in many, many projects I filed a bug report: https://bugreports.qt.io/browse/QTBUG-83159

Nevertheless I have added the missing includes where needed in all branches >= 6.2. I did not decide about what to do with 6.1 - waiting for the decisision being made downstream for 5.15 final.

The Qt bug https://bugreports.qt.io/browse/QTBUG-83159 has been closed as Won't Do.

In qmapshack-1.15, I get

/var/tmp/portage/sci-geosciences/qmapshack-1.15.0/work/qmapshack-V_1.14.0/src/qmapshack/helpers/CDraw.cpp:210:18: error: aggregate ‘QPainterPath bubblePath’ has incomplete type and cannot be defined
  210 |     QPainterPath bubblePath;
      |                  ^~~~~~~~~~
/var/tmp/portage/sci-geosciences/qmapshack-1.15.0/work/qmapshack-V_1.14.0/src/qmapshack/helpers/CDraw.cpp:240:22: error: aggregate ‘QPainterPath pointerPath’ has incomplete type and cannot be defined
  240 |         QPainterPath pointerPath;
      |                      ^~~~~~~~~~~

Some extra #include's are now needed. According to https://doc.qt.io/qt-5/qpainterpath.html, for using the QPainterPath class

#include <QPainterPath>

is needed. I inserted it into CDraw.cpp after other #include's, but this has not fixed the problem.

As an example, I attach the Gentoo patch for qwt-6.1.4. Something similar (probably, shorter) is needed for qmapshack. But, as I said, my first attempt has failed. And I have no idea know what else to #include.

C++ and Qt experts out here, could you please help? Currently we have no working qmapshack in Gentoo.

I tried to search other distros. Debian (even unstable) has some ancient Qt. Even Fedora has no Qt-5.15. Arch has Qt-5.15, but its qmapshack package is older than Qt; they will face the same problem soon.

Hope to your help,
Andrey
From a5bdaa3b3a34b8a018fe67dfdd34bf8c890de2fa Mon Sep 17 00:00:00 2001
From: Andreas Sturmlechner <ast...@gentoo.org>
Date: Fri, 22 May 2020 17:56:55 +0200
Subject: [PATCH] Fix build with Qt 5.15 (missing headers)

Signed-off-by: Andreas Sturmlechner <ast...@gentoo.org>
---
 examples/dials/attitude_indicator.cpp | 1 +
 examples/itemeditor/editor.cpp        | 2 ++
 examples/sinusplot/sinusplot.cpp      | 1 +
 playground/graphicscale/mainwindow.h  | 1 +
 playground/symbols/symbols.cpp        | 1 +
 src/qwt_compass_rose.cpp              | 1 +
 src/qwt_dial_needle.cpp               | 1 +
 src/qwt_graphic.h                     | 1 +
 src/qwt_null_paintdevice.cpp          | 1 +
 src/qwt_null_paintdevice.h            | 1 +
 src/qwt_painter.cpp                   | 1 +
 src/qwt_painter.h                     | 2 ++
 src/qwt_painter_command.h             | 2 ++
 src/qwt_plot_canvas.cpp               | 1 +
 src/qwt_plot_canvas.h                 | 1 +
 src/qwt_plot_glcanvas.cpp             | 1 +
 src/qwt_plot_glcanvas.h               | 2 ++
 src/qwt_plot_panner.cpp               | 2 ++
 src/qwt_plot_renderer.cpp             | 1 +
 src/qwt_plot_shapeitem.cpp            | 3 +++
 src/qwt_symbol.h                      | 2 ++
 src/qwt_widget_overlay.cpp            | 1 +
 22 files changed, 30 insertions(+)

diff --git a/examples/dials/attitude_indicator.cpp 
b/examples/dials/attitude_indicator.cpp
index ea0d5ab..a01611e 100644
--- a/examples/dials/attitude_indicator.cpp
+++ b/examples/dials/attitude_indicator.cpp
@@ -3,6 +3,7 @@
 #include <qwt_round_scale_draw.h>
 #include <qevent.h>
 #include <qpainter.h>
+#include <qpainterpath.h>
 #include <qpolygon.h>
 
 AttitudeIndicatorNeedle::AttitudeIndicatorNeedle( const QColor &color )
diff --git a/examples/itemeditor/editor.cpp b/examples/itemeditor/editor.cpp
index bd06372..c741b01 100644
--- a/examples/itemeditor/editor.cpp
+++ b/examples/itemeditor/editor.cpp
@@ -4,6 +4,8 @@
 #include <qwt_scale_map.h>
 #include <qwt_plot_shapeitem.h>
 #include <qevent.h>
+#include <qpainter.h>
+#include <qpainterpath.h>
 
 class Overlay: public QwtWidgetOverlay
 {
diff --git a/examples/sinusplot/sinusplot.cpp b/examples/sinusplot/sinusplot.cpp
index 119fa4a..6a9bfe7 100644
--- a/examples/sinusplot/sinusplot.cpp
+++ b/examples/sinusplot/sinusplot.cpp
@@ -1,5 +1,6 @@
 #include <qapplication.h>
 #include <qlayout.h>
+#include <qpainterpath.h>
 #include <qwt_plot.h>
 #include <qwt_plot_marker.h>
 #include <qwt_plot_curve.h>
diff --git a/playground/graphicscale/mainwindow.h 
b/playground/graphicscale/mainwindow.h
index d284413..3b544de 100644
--- a/playground/graphicscale/mainwindow.h
+++ b/playground/graphicscale/mainwindow.h
@@ -2,6 +2,7 @@
 #define MAIN_WINDOW_H
 
 #include <qmainwindow.h>
+#include <qpainterpath.h>
 
 class Canvas;
 class QPainterPath;
diff --git a/playground/symbols/symbols.cpp b/playground/symbols/symbols.cpp
index f7b2ed6..5b9f56d 100644
--- a/playground/symbols/symbols.cpp
+++ b/playground/symbols/symbols.cpp
@@ -1,5 +1,6 @@
 #include <qapplication.h>
 #include <qpainter.h>
+#include <qpainterpath.h>
 #include <qbuffer.h>
 #ifdef QT_SVG_LIB
 #include <qsvggenerator.h>
diff --git a/src/qwt_compass_rose.cpp b/src/qwt_compass_rose.cpp
index 05f7039..fbd30fe 100644
--- a/src/qwt_compass_rose.cpp
+++ b/src/qwt_compass_rose.cpp
@@ -11,6 +11,7 @@
 #include "qwt_point_polar.h"
 #include "qwt_painter.h"
 #include <qpainter.h>
+#include <qpainterpath.h>
 
 static QPointF qwtIntersection(
     QPointF p11, QPointF p12, QPointF p21, QPointF p22 )
diff --git a/src/qwt_dial_needle.cpp b/src/qwt_dial_needle.cpp
index 49dd44a..d98f68c 100644
--- a/src/qwt_dial_needle.cpp
+++ b/src/qwt_dial_needle.cpp
@@ -13,6 +13,7 @@
 #include "qwt_painter.h"
 #include <qapplication.h>
 #include <qpainter.h>
+#include <qpainterpath.h>
 
 #if QT_VERSION < 0x040601
 #define qFastSin(x) qSin(x)
diff --git a/src/qwt_graphic.h b/src/qwt_graphic.h
index cbd41f9..6881ea9 100644
--- a/src/qwt_graphic.h
+++ b/src/qwt_graphic.h
@@ -14,6 +14,7 @@
 #include "qwt_null_paintdevice.h"
 #include <qmetatype.h>
 #include <qimage.h>
+#include <qpainterpath.h>
 #include <qpixmap.h>
 
 class QwtPainterCommand;
diff --git a/src/qwt_null_paintdevice.cpp b/src/qwt_null_paintdevice.cpp
index 3baf0e9..468a838 100644
--- a/src/qwt_null_paintdevice.cpp
+++ b/src/qwt_null_paintdevice.cpp
@@ -9,6 +9,7 @@
 
 #include "qwt_null_paintdevice.h"
 #include <qpaintengine.h>
+#include <qpainterpath.h>
 #include <qpixmap.h>
 
 class QwtNullPaintDevice::PrivateData
diff --git a/src/qwt_null_paintdevice.h b/src/qwt_null_paintdevice.h
index e4e9cad..b804429 100644
--- a/src/qwt_null_paintdevice.h
+++ b/src/qwt_null_paintdevice.h
@@ -13,6 +13,7 @@
 #include "qwt_global.h"
 #include <qpaintdevice.h>
 #include <qpaintengine.h>
+#include <qpainterpath.h>
 
 /*!
   \brief A null paint device doing nothing
diff --git a/src/qwt_painter.cpp b/src/qwt_painter.cpp
index 7959fe5..626677f 100644
--- a/src/qwt_painter.cpp
+++ b/src/qwt_painter.cpp
@@ -17,6 +17,7 @@
 #include <qframe.h>
 #include <qrect.h>
 #include <qpainter.h>
+#include <qpainterpath.h>
 #include <qpalette.h>
 #include <qpaintdevice.h>
 #include <qpixmap.h>
diff --git a/src/qwt_painter.h b/src/qwt_painter.h
index c0a0ff7..bcbe289 100644
--- a/src/qwt_painter.h
+++ b/src/qwt_painter.h
@@ -16,6 +16,8 @@
 #include <qrect.h>
 #include <qpen.h>
 #include <qline.h>
+#include <qpainter.h>
+#include <qpainterpath.h>
 #include <qpalette.h>
 
 class QPainter;
diff --git a/src/qwt_painter_command.h b/src/qwt_painter_command.h
index a2f509a..a49ee52 100644
--- a/src/qwt_painter_command.h
+++ b/src/qwt_painter_command.h
@@ -12,6 +12,8 @@
 
 #include "qwt_global.h"
 #include <qpaintengine.h>
+#include <qpainter.h>
+#include <qpainterpath.h>
 #include <qpixmap.h>
 #include <qimage.h>
 #include <qpolygon.h>
diff --git a/src/qwt_plot_canvas.cpp b/src/qwt_plot_canvas.cpp
index 9438f15..bfe660d 100644
--- a/src/qwt_plot_canvas.cpp
+++ b/src/qwt_plot_canvas.cpp
@@ -13,6 +13,7 @@
 #include "qwt_math.h"
 #include "qwt_plot.h"
 #include <qpainter.h>
+#include <qpainterpath.h>
 #include <qstyle.h>
 #include <qstyleoption.h>
 #include <qpaintengine.h>
diff --git a/src/qwt_plot_canvas.h b/src/qwt_plot_canvas.h
index c79e4e4..90a32ce 100644
--- a/src/qwt_plot_canvas.h
+++ b/src/qwt_plot_canvas.h
@@ -12,6 +12,7 @@
 
 #include "qwt_global.h"
 #include <qframe.h>
+#include <qpainter.h>
 #include <qpainterpath.h>
 
 class QwtPlot;
diff --git a/src/qwt_plot_glcanvas.cpp b/src/qwt_plot_glcanvas.cpp
index 996c0ad..6975863 100644
--- a/src/qwt_plot_glcanvas.cpp
+++ b/src/qwt_plot_glcanvas.cpp
@@ -12,6 +12,7 @@
 #include "qwt_painter.h"
 #include <qevent.h>
 #include <qpainter.h>
+#include <qpainterpath.h>
 #include <qdrawutil.h>
 #include <qstyle.h>
 #include <qstyleoption.h>
diff --git a/src/qwt_plot_glcanvas.h b/src/qwt_plot_glcanvas.h
index 7ca9b5a..a6c01e0 100644
--- a/src/qwt_plot_glcanvas.h
+++ b/src/qwt_plot_glcanvas.h
@@ -13,6 +13,8 @@
 #include "qwt_global.h"
 #include <qframe.h>
 #include <qgl.h>
+#include <qpainter.h>
+#include <qpainterpath.h>
 
 class QwtPlot;
 
diff --git a/src/qwt_plot_panner.cpp b/src/qwt_plot_panner.cpp
index b7daa05..2f31d05 100644
--- a/src/qwt_plot_panner.cpp
+++ b/src/qwt_plot_panner.cpp
@@ -14,6 +14,8 @@
 #include <qbitmap.h>
 #include <qstyle.h>
 #include <qstyleoption.h>
+#include <qpainter.h>
+#include <qpainterpath.h>
 
 #if QT_VERSION >= 0x050000
 #if QT_VERSION < 0x050100
diff --git a/src/qwt_plot_renderer.cpp b/src/qwt_plot_renderer.cpp
index 549c4bc..71cadec 100644
--- a/src/qwt_plot_renderer.cpp
+++ b/src/qwt_plot_renderer.cpp
@@ -20,6 +20,7 @@
 #include "qwt_math.h"
 
 #include <qpainter.h>
+#include <qpainterpath.h>
 #include <qtransform.h>
 #include <qprinter.h>
 #include <qfiledialog.h>
diff --git a/src/qwt_plot_shapeitem.cpp b/src/qwt_plot_shapeitem.cpp
index db7896b..09efd95 100644
--- a/src/qwt_plot_shapeitem.cpp
+++ b/src/qwt_plot_shapeitem.cpp
@@ -13,6 +13,9 @@
 #include "qwt_curve_fitter.h"
 #include "qwt_clipper.h"
 
+#include <qpainter.h>
+#include <qpainterpath.h>
+
 static QPainterPath qwtTransformPath( const QwtScaleMap &xMap,
         const QwtScaleMap &yMap, const QPainterPath &path, bool doAlign )
 {
diff --git a/src/qwt_symbol.h b/src/qwt_symbol.h
index 538778d..2961ebe 100644
--- a/src/qwt_symbol.h
+++ b/src/qwt_symbol.h
@@ -11,6 +11,8 @@
 #define QWT_SYMBOL_H
 
 #include "qwt_global.h"
+#include <qpainter.h>
+#include <qpainterpath.h>
 #include <qpolygon.h>
 
 class QPainter;
diff --git a/src/qwt_widget_overlay.cpp b/src/qwt_widget_overlay.cpp
index 5974413..fa6da48 100644
--- a/src/qwt_widget_overlay.cpp
+++ b/src/qwt_widget_overlay.cpp
@@ -10,6 +10,7 @@
 #include "qwt_widget_overlay.h"
 #include "qwt_painter.h"
 #include <qpainter.h>
+#include <qpainterpath.h>
 #include <qpaintengine.h>
 #include <qimage.h>
 #include <qevent.h>
-- 
2.26.2

_______________________________________________
Qlandkartegt-users mailing list
Qlandkartegt-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/qlandkartegt-users

Reply via email to