Skip to content

Commit e0aa5e1

Browse files
authored
Merge pull request #5817 from m-kuhn/noQtScript
Remove dependency on deprecated QtScript library
2 parents b1db8da + 02b6976 commit e0aa5e1

File tree

13 files changed

+98
-124
lines changed

13 files changed

+98
-124
lines changed

.docker/Dockerfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ RUN apt-get update \
6969
qt5keychain-dev \
7070
qtbase5-dev \
7171
qtpositioning5-dev \
72-
qtscript5-dev \
7372
qttools5-dev \
7473
qttools5-dev-tools \
7574
spawn-fcgi \

CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,6 @@ IF(WITH_CORE)
291291
ENDIF(WITH_QTWEBKIT)
292292
FIND_PACKAGE(Qt5Test REQUIRED)
293293
FIND_PACKAGE(Qt5UiTools REQUIRED)
294-
FIND_PACKAGE(Qt5Script REQUIRED)
295294
FIND_PACKAGE(Qt5Sql REQUIRED)
296295
IF (WITH_3D)
297296
FIND_PACKAGE(Qt53DCore REQUIRED)

INSTALL

Lines changed: 7 additions & 7 deletions
Large diffs are not rendered by default.

debian/control

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Build-Depends:
2020
libspatialite-dev,
2121
libsqlite3-dev,
2222
libspatialindex-dev,
23-
qtbase5-dev, qttools5-dev-tools, qttools5-dev, qtscript5-dev, qtpositioning5-dev,
23+
qtbase5-dev, qttools5-dev-tools, qttools5-dev, qtpositioning5-dev,
2424
libqt5svg5-dev, libqt5xmlpatterns5-dev, libqt5webkit5-dev, libqt5opengl5-dev, libqt5sql5-sqlite, libqt5scintilla2-dev,
2525
libqwt-qt5-dev, libqca-qt5-2-dev, libqca-qt5-2-plugins,
2626
python3-dev, python3-all-dev, python3-sip, python3-sip-dev,
@@ -203,7 +203,6 @@ Depends:
203203
libqt5webkit5-dev,
204204
libqca-qt5-2-dev,
205205
libqwt-qt5-dev,
206-
qtscript5-dev,
207206
qtpositioning5-dev,
208207
pyqt5-dev-tools,
209208
python3-pyqt5,

debian/control.in

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Build-Depends:
2121
libsqlite3-dev,
2222
libspatialindex-dev,
2323
libzip-dev,
24-
qtbase5-dev, qttools5-dev-tools, qttools5-dev, qtscript5-dev, qtpositioning5-dev, qt5keychain-dev,
24+
qtbase5-dev, qttools5-dev-tools, qttools5-dev, qtpositioning5-dev, qt5keychain-dev,
2525
libqt5svg5-dev, libqt5xmlpatterns5-dev, libqt5webkit5-dev, libqt5opengl5-dev, libqt5sql5-sqlite, libqt5scintilla2-dev,
2626
libqwt-qt5-dev, libqca-qt5-2-dev, libqca-qt5-2-plugins,
2727
python3-dev, python3-all-dev, python3-sip, python3-sip-dev,
@@ -232,7 +232,6 @@ Depends:
232232
libqt5webkit5-dev,
233233
libqca-qt5-2-dev,
234234
libqwt-qt5-dev,
235-
qtscript5-dev,
236235
qtpositioning5-dev,
237236
pyqt5-dev-tools,
238237
python3-pyqt5,

doc/INSTALL.html

Lines changed: 7 additions & 7 deletions
Large diffs are not rendered by default.

doc/linux.t2t

Lines changed: 7 additions & 7 deletions
Large diffs are not rendered by default.

mac/cmake/1qt.cmake.in

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ SET (QT_FWVER @QT_VERSION_MAJOR@)
1616
# build list of Qt frameworks to bundle
1717

1818
# core list, includes dependencies and used by extra plugins
19-
SET (QTLISTQG QtCore QtGui phonon QtXml QtNetwork QtScript QtSvg QtSql QtWebKit QtXmlPatterns QtDBus QtMultimedia QtOpenGL QtTest)
20-
SET (PYQTLIST Qt QtCore QtGui phonon QtXml QtNetwork QtScript QtSvg QtSql QtWebKit QtXmlPatterns QtDBus QtMultimedia QtOpenGL QtTest)
19+
SET (QTLISTQG QtCore QtGui phonon QtXml QtNetwork QtSvg QtSql QtWebKit QtXmlPatterns QtDBus QtMultimedia QtOpenGL QtTest)
20+
SET (PYQTLIST Qt QtCore QtGui phonon QtXml QtNetwork QtSvg QtSql QtWebKit QtXmlPatterns QtDBus QtMultimedia QtOpenGL QtTest)
2121

2222
# add Qsci.so, if available
2323
IF (@QSCI_FOUND@)

rpm/qgis.spec.template

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ BuildRequires: qscintilla-qt5-devel
8484

8585
# Qt5 stuff
8686
BuildRequires: qt5-qtlocation-devel
87-
BuildRequires: qt5-qtscript-devel
8887
BuildRequires: qt5-qtsvg-devel
8988
BuildRequires: qt5-qttools-static
9089
BuildRequires: qt5-qtwebkit-devel

src/providers/wms/CMakeLists.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ INCLUDE_DIRECTORIES(
5050
INCLUDE_DIRECTORIES(SYSTEM
5151
${GDAL_INCLUDE_DIR}
5252
${GEOS_INCLUDE_DIR}
53-
${QT_QTSCRIPT_INCLUDE_DIR}
5453
${QCA_INCLUDE_DIR}
5554
${QTKEYCHAIN_INCLUDE_DIR}
5655
)
@@ -60,14 +59,12 @@ ADD_LIBRARY(wmsprovider MODULE ${WMS_SRCS} ${WMS_MOC_SRCS})
6059

6160
TARGET_LINK_LIBRARIES(wmsprovider
6261
qgis_core
63-
${QT_QTSCRIPT_LIBRARY}
6462
${GDAL_LIBRARY} # for OGR_G_CreateGeometryFromJson()
6563
)
6664

6765

6866
TARGET_LINK_LIBRARIES(wmsprovider_a
6967
qgis_core
70-
${QT_QTSCRIPT_LIBRARY}
7168
)
7269

7370

src/providers/wms/qgswmsprovider.cpp

Lines changed: 49 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,6 @@
6464
#include <QEventLoop>
6565
#include <QTextCodec>
6666
#include <QThread>
67-
#include <QScriptEngine>
68-
#include <QScriptValue>
69-
#include <QScriptValueIterator>
7067
#include <QNetworkDiskCache>
7168
#include <QTimer>
7269

@@ -2972,39 +2969,33 @@ QgsRasterIdentifyResult QgsWmsProvider::identify( const QgsPointXY &point, QgsRa
29722969
else if ( jsonPart != -1 )
29732970
{
29742971
QString json = QString::fromUtf8( mIdentifyResultBodies.value( jsonPart ) );
2975-
json.prepend( '(' ).append( ')' );
2976-
2977-
QScriptEngine engine;
2978-
engine.evaluate( QStringLiteral( "function json_stringify(obj) { return JSON.stringify(obj); }" ) );
2979-
QScriptValue json_stringify = engine.globalObject().property( QStringLiteral( "json_stringify" ) );
2980-
Q_ASSERT( json_stringify.isFunction() );
2981-
2982-
QScriptValue result = engine.evaluate( json );
29832972

29842973
QgsFeatureStoreList featureStoreList;
29852974
QgsCoordinateTransform coordinateTransform;
29862975

29872976
try
29882977
{
2989-
QgsDebugMsg( QString( "result:%1" ).arg( result.toString() ) );
2990-
2991-
if ( !result.isObject() )
2992-
throw QStringLiteral( "object expected" );
2978+
QJsonDocument doc = QJsonDocument::fromJson( json.toUtf8() );
2979+
if ( doc.isNull() )
2980+
throw QStringLiteral( "Doc expected" );
2981+
if ( !doc.isObject() )
2982+
throw QStringLiteral( "Object expected" );
29932983

2994-
if ( result.property( QStringLiteral( "type" ) ).toString() != QLatin1String( "FeatureCollection" ) )
2995-
throw QStringLiteral( "type FeatureCollection expected: %1" ).arg( result.property( QStringLiteral( "type" ) ).toString() );
2984+
QJsonObject result = doc.object();
2985+
if ( result.value( QLatin1String( "type" ) ).toString() != QLatin1String( "FeatureCollection" ) )
2986+
throw QStringLiteral( "Type FeatureCollection expected: %1" ).arg( result.value( QLatin1String( "type" ) ).toString() );
29962987

2997-
if ( result.property( QStringLiteral( "crs" ) ).isValid() )
2988+
if ( result.value( QLatin1String( "crs" ) ).isObject() )
29982989
{
2999-
QString crsType = result.property( QStringLiteral( "crs" ) ).property( QStringLiteral( "type" ) ).toString();
2990+
QString crsType = result.value( QLatin1String( "crs" ) ).toObject().value( QLatin1String( "type" ) ).toString();
30002991
QString crsText;
30012992
if ( crsType == QLatin1String( "name" ) )
3002-
crsText = result.property( QStringLiteral( "crs" ) ).property( QStringLiteral( "properties" ) ).property( QStringLiteral( "name" ) ).toString();
2993+
crsText = result.value( QStringLiteral( "crs" ) ).toObject().value( QLatin1String( "properties" ) ).toObject().value( QLatin1String( "name" ) ).toString();
30032994
else if ( crsType == QLatin1String( "EPSG" ) )
3004-
crsText = QStringLiteral( "%1:%2" ).arg( crsType, result.property( QStringLiteral( "crs" ) ).property( QStringLiteral( "properties" ) ).property( QStringLiteral( "code" ) ).toString() );
2995+
crsText = QStringLiteral( "%1:%2" ).arg( crsType, result.value( QLatin1String( "crs" ) ).toObject().value( QLatin1String( "properties" ) ).toObject().value( QStringLiteral( "code" ) ).toString() );
30052996
else
30062997
{
3007-
QgsDebugMsg( QString( "crs not supported:%1" ).arg( result.property( "crs" ).toString() ) );
2998+
QgsDebugMsg( QStringLiteral( "crs not supported:%1" ).arg( result.value( QLatin1String( "crs" ) ).toString() ) );
30082999
}
30093000

30103001
QgsCoordinateReferenceSystem featuresCrs = QgsCoordinateReferenceSystem::fromOgcWmsCrs( crsText );
@@ -3018,69 +3009,71 @@ QgsRasterIdentifyResult QgsWmsProvider::identify( const QgsPointXY &point, QgsRa
30183009
}
30193010
}
30203011

3021-
QScriptValue fc = result.property( QStringLiteral( "features" ) );
3012+
const QJsonValue fc = result.value( QLatin1String( "features" ) );
30223013
if ( !fc.isArray() )
30233014
throw QStringLiteral( "FeatureCollection array expected" );
30243015

3025-
QScriptValue f;
3026-
for ( int i = 0; f = fc.property( i ), f.isValid(); i++ )
3027-
{
3028-
QgsDebugMsg( QString( "feature %1" ).arg( i ) );
3016+
const QJsonArray features = fc.toArray();
30293017

3030-
QScriptValue props = f.property( QStringLiteral( "properties" ) );
3018+
int i = -1;
3019+
for ( const QJsonValue &fv : features )
3020+
{
3021+
++i;
3022+
const QJsonObject f = fv.toObject();
3023+
const QJsonValue props = f.value( QLatin1String( "properties" ) );
30313024
if ( !props.isObject() )
30323025
{
30333026
QgsDebugMsg( "no properties found" );
30343027
continue;
30353028
}
30363029

30373030
QgsFields fields;
3038-
QScriptValueIterator it( props );
3039-
while ( it.hasNext() )
3031+
3032+
const QJsonObject properties = props.toObject();
3033+
auto fieldIterator = properties.constBegin();
3034+
3035+
for ( ; fieldIterator != properties.constEnd(); ++fieldIterator )
30403036
{
3041-
it.next();
3042-
fields.append( QgsField( it.name(), QVariant::String ) );
3037+
fields.append( QgsField( fieldIterator.key(), QVariant::String ) );
30433038
}
30443039

30453040
QgsFeature feature( fields );
30463041

3047-
if ( f.property( QStringLiteral( "geometry" ) ).isValid() )
3042+
if ( f.value( QLatin1String( "geometry" ) ).isObject() )
30483043
{
3049-
QScriptValue geom = json_stringify.call( QScriptValue(), QScriptValueList() << f.property( QStringLiteral( "geometry" ) ) );
3050-
if ( geom.isString() )
3044+
QJsonDocument serializer( f.value( QLatin1String( "geometry" ) ).toObject() );
3045+
QString geom = serializer.toJson( QJsonDocument::JsonFormat::Compact );
3046+
3047+
gdal::ogr_geometry_unique_ptr ogrGeom( OGR_G_CreateGeometryFromJson( geom.toUtf8() ) );
3048+
if ( ogrGeom )
30513049
{
3052-
gdal::ogr_geometry_unique_ptr ogrGeom( OGR_G_CreateGeometryFromJson( geom.toString().toUtf8() ) );
3053-
if ( ogrGeom )
3050+
int wkbSize = OGR_G_WkbSize( ogrGeom.get() );
3051+
unsigned char *wkb = new unsigned char[ wkbSize ];
3052+
OGR_G_ExportToWkb( ogrGeom.get(), ( OGRwkbByteOrder ) QgsApplication::endian(), wkb );
3053+
3054+
QgsGeometry g;
3055+
g.fromWkb( wkb, wkbSize );
3056+
feature.setGeometry( g );
3057+
3058+
if ( coordinateTransform.isValid() && feature.hasGeometry() )
30543059
{
3055-
int wkbSize = OGR_G_WkbSize( ogrGeom.get() );
3056-
unsigned char *wkb = new unsigned char[ wkbSize ];
3057-
OGR_G_ExportToWkb( ogrGeom.get(), ( OGRwkbByteOrder ) QgsApplication::endian(), wkb );
3058-
3059-
QgsGeometry g;
3060-
g.fromWkb( wkb, wkbSize );
3061-
feature.setGeometry( g );
3062-
3063-
if ( coordinateTransform.isValid() && feature.hasGeometry() )
3064-
{
3065-
QgsGeometry transformed = feature.geometry();
3066-
transformed.transform( coordinateTransform );
3067-
feature.setGeometry( transformed );
3068-
}
3060+
QgsGeometry transformed = feature.geometry();
3061+
transformed.transform( coordinateTransform );
3062+
feature.setGeometry( transformed );
30693063
}
30703064
}
30713065
}
30723066

30733067
int j = 0;
3074-
it.toFront();
3075-
while ( it.hasNext() )
3068+
fieldIterator = properties.constBegin();
3069+
for ( ; fieldIterator != properties.constEnd(); ++fieldIterator )
30763070
{
3077-
it.next();
3078-
feature.setAttribute( j++, it.value().toString() );
3071+
feature.setAttribute( j++, fieldIterator.value().toString() );
30793072
}
30803073

30813074
QgsFeatureStore featureStore( fields, crs() );
30823075

3083-
QMap<QString, QVariant> params;
3076+
QVariantMap params;
30843077
params.insert( QStringLiteral( "sublayer" ), layerList[count] );
30853078
params.insert( QStringLiteral( "featureType" ), QStringLiteral( "%1_%2" ).arg( count ).arg( i ) );
30863079
params.insert( QStringLiteral( "getFeatureInfoUrl" ), requestUrl.toString() );

tests/src/providers/CMakeLists.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,17 +104,13 @@ IF(UNIX AND NOT ANDROID AND CMAKE_BUILD_TYPE MATCHES Debug)
104104
${CMAKE_CURRENT_SOURCE_DIR}/../../../src/core/raster
105105
${CMAKE_CURRENT_SOURCE_DIR}/../../../src/providers/wcs
106106
)
107-
INCLUDE_DIRECTORIES(SYSTEM
108-
${QT_QTSCRIPT_INCLUDE_DIR}
109-
)
110107

111108
TARGET_LINK_LIBRARIES(qgis_wcstest
112109
${QT_QTCORE_LIBRARY}
113110
${QT_QTNETWORK_LIBRARY}
114111
${QT_QTSVG_LIBRARY}
115112
${QT_QTXML_LIBRARY}
116113
${OPTIONAL_QTWEBKIT}
117-
${QT_QTSCRIPT_LIBRARY}
118114
qgis_core
119115
)
120116

tests/src/providers/testqgswcspublicservers.cpp

Lines changed: 24 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@
2121
#include <QString>
2222
#include <QStringList>
2323
#include <QTextStream>
24-
#include <QScriptEngine>
25-
#include <QScriptValue>
26-
#include <QScriptValueIterator>
2724

2825
#include "qgsapplication.h"
2926
#include "qgsdatasourceuri.h"
@@ -121,56 +118,52 @@ void TestQgsWcsPublicServers::init()
121118
QString data = file.readAll();
122119
//QgsDebugMsg("servers: \n" + str );
123120
file.close();
124-
QScriptEngine engine;
125-
QScriptValue result = engine.evaluate( data );
121+
QJsonDocument doc = QJsonDocument::fromJson( data.toUtf8() );
122+
const QJsonObject result = doc.object();
126123

127-
QScriptValueIterator serverIt( result );
128-
while ( serverIt.hasNext() )
124+
QJsonObject::ConstIterator serverIt = result.constBegin();
125+
for ( ; serverIt != result.constEnd(); serverIt++ )
129126
{
130-
serverIt.next();
131-
QScriptValue serverValue = serverIt.value();
127+
const QJsonObject serverObject = serverIt.value().toObject();
128+
const QString serverUrl = serverObject.value( QLatin1String( "url" ) ).toString();
132129

133-
QString serverUrl = serverValue.property( QStringLiteral( "url" ) ).toString();
134130
QgsDebugMsg( "serverUrl: " + serverUrl );
135131

136132
Server server( serverUrl );
137-
server.description = serverValue.property( QStringLiteral( "description" ) ).toString();
133+
server.description = serverObject.value( QLatin1String( "description" ) ).toString();
138134

139-
QScriptValueIterator paramsIt( serverValue.property( QStringLiteral( "params" ) ) );
140-
while ( paramsIt.hasNext() )
135+
const QJsonObject serverParams = serverObject.value( QLatin1String( "params" ) ).toObject();
136+
QJsonObject::ConstIterator paramsIt = serverParams.constBegin();
137+
for ( ; paramsIt != serverParams.constEnd(); paramsIt++ )
141138
{
142-
paramsIt.next();
143139
QgsDebugMsg( QString( "params value: %1" ).arg( paramsIt.value().toString() ) );
144-
server.params.insert( paramsIt.name(), paramsIt.value().toString() );
140+
server.params.insert( paramsIt.key(), paramsIt.value().toString() );
145141
}
146142

147-
QScriptValue issuesValue = serverValue.property( QStringLiteral( "issues" ) );
143+
QJsonObject issuesObject = serverObject.value( QLatin1String( "issues" ) ).toObject();
148144

149-
QScriptValueIterator issuesIt( issuesValue );
150-
while ( issuesIt.hasNext() )
145+
QJsonObject::ConstIterator issuesIt = issuesObject.constBegin();
146+
for ( ; issuesIt != issuesObject.constEnd(); ++issuesIt )
151147
{
152-
issuesIt.next();
153-
QScriptValue issueValue = issuesIt.value();
148+
QJsonObject issueObject = issuesIt.value().toObject();
154149

155-
QString description = issueValue.property( QStringLiteral( "description" ) ).toString();
150+
QString description = issueObject.value( QLatin1String( "description" ) ).toString();
156151
QgsDebugMsg( "description: " + description );
157152
Issue issue( description );
158153

159-
issue.offender = issueValue.property( QStringLiteral( "offender" ) ).toString();
154+
issue.offender = issueObject.value( QLatin1String( "offender" ) ).toString();
160155

161-
QScriptValue coveragesValue = issueValue.property( QStringLiteral( "coverages" ) );
162-
QScriptValueIterator coveragesIt( coveragesValue );
163-
while ( coveragesIt.hasNext() )
156+
QJsonObject coveragesObject = issueObject.value( QLatin1String( "coverages" ) ).toObject();
157+
QJsonObject::ConstIterator coverageIt = coveragesObject.constBegin();
158+
for ( ; coverageIt != coveragesObject.constEnd(); ++coverageIt )
164159
{
165-
coveragesIt.next();
166-
issue.coverages << coveragesIt.value().toString();
160+
issue.coverages << coverageIt.value().toString();
167161
}
168162

169-
QScriptValue versionsValue = issueValue.property( QStringLiteral( "versions" ) );
170-
QScriptValueIterator versionsIt( versionsValue );
171-
while ( versionsIt.hasNext() )
163+
QJsonObject versionsObject = issueObject.value( QLatin1String( "versions" ) ).toObject();
164+
QJsonObject::ConstIterator versionsIt = versionsObject.constBegin();
165+
for ( ; versionsIt != versionsObject.constEnd(); ++versionsIt )
172166
{
173-
versionsIt.next();
174167
issue.versions << versionsIt.value().toString();
175168
}
176169

0 commit comments

Comments
 (0)