aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qmlimportscanner/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/qmlimportscanner/main.cpp')
-rw-r--r--tools/qmlimportscanner/main.cpp75
1 files changed, 46 insertions, 29 deletions
diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp
index ce91062edc..2569d78c63 100644
--- a/tools/qmlimportscanner/main.cpp
+++ b/tools/qmlimportscanner/main.cpp
@@ -1,31 +1,26 @@
/****************************************************************************
**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
**
** This file is part of the tools applications of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:LGPL21$
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 or version 3 as published by the Free
-** Software Foundation and appearing in the file LICENSE.LGPLv21 and
-** LICENSE.LGPLv3 included in the packaging of this file. Please review the
-** following information to ensure the GNU Lesser General Public License
-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** As a special exception, The Qt Company gives you certain additional
-** rights. These rights are described in The Qt Company LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
@@ -162,24 +157,46 @@ QVariantMap pluginsForModulePath(const QString &modulePath) {
// Search for a given qml import in g_qmlImportPaths.
QString resolveImportPath(const QString &uri, const QString &version)
{
- // Create path from uri (QtQuick.Controls -> QtQuick/Controls)
- QString path = uri;
- path.replace(QLatin1Char('.'), QLatin1Char('/'));
- // search for the most spesifc version first
- QString versionedName = path + QLatin1Char('.') + version;
+ const QLatin1Char dot('.');
+ const QLatin1Char slash('/');
+ const QStringList parts = uri.split(dot, QString::SkipEmptyParts);
+
+ QString ver = version;
while (true) {
- // look in all g_qmlImportPaths
foreach (const QString &qmlImportPath, g_qmlImportPaths) {
- QString candidatePath = QDir::cleanPath(qmlImportPath + QLatin1Char('/') + versionedName);
- if (QDir(candidatePath).exists())
- return candidatePath; // import found
+ // Search for the most specific version first, and search
+ // also for the version in parent modules. For example:
+ // - qml/QtQml/Models.2.0
+ // - qml/QtQml.2.0/Models
+ // - qml/QtQml/Models.2
+ // - qml/QtQml.2/Models
+ // - qml/QtQml/Models
+ if (ver.isEmpty()) {
+ const QString candidatePath = QDir::cleanPath(qmlImportPath + slash + parts.join(slash));
+ if (QDir(candidatePath).exists())
+ return candidatePath; // import found
+ } else {
+ for (int index = parts.count() - 1; index >= 0; --index) {
+ const QString candidatePath = QDir::cleanPath(qmlImportPath + slash
+ + parts.mid(0, index + 1).join(slash)
+ + dot + ver + slash
+ + parts.mid(index + 1).join(slash));
+
+ if (QDir(candidatePath).exists())
+ return candidatePath; // import found
+ }
+ }
}
// remove the last version digit; stop if there are none left
- int lastDot = versionedName.lastIndexOf(QLatin1Char('.'));
- if (lastDot == -1)
+ if (ver.isEmpty())
break;
- versionedName = versionedName.mid(0, lastDot);
+
+ int lastDot = ver.lastIndexOf(dot);
+ if (lastDot == -1)
+ ver.clear();
+ else
+ ver = ver.mid(0, lastDot);
}
return QString(); // not found