summaryrefslogtreecommitdiffstats
path: root/src/tools
diff options
context:
space:
mode:
authorAlexey Edelev <alexey.edelev@qt.io>2021-03-09 18:03:21 +0100
committerAlexey Edelev <alexey.edelev@qt.io>2021-03-25 12:58:04 +0100
commitfef850c51a069ed89ba400e6ffccbbea4b0cbb9f (patch)
tree7a5724d342258ca98b80d1b7a6eaa543157286d1 /src/tools
parent5fb347c93daabfb6ab554fa6f8a08a6d02c64cc2 (diff)
Extend qtpaths functionally to replicate the 'qmake -query' behavior
'qt-version', 'install-prefix', 'binaries-dir' and 'plugin-dir' are covered by the introduced qt-query option. So make them obsolete and hidden in the application help. Note that the 'qtconf' option will affect the output of options associated with QLibraryInfo. [ChangeLog][Tools] qtpaths got new --qt-query argument that can be used instead of qmake -query. The new --qtconf, --query-format arguments allow you to further tweak its output. [ChangeLog][Tools] The qt-version, install-prefix, binaries-dir and plugin-dir options of the qtpaths tool are deprecated. [ChangeLog][Tools] The qtpaths tool has been moved from the qttools repository to the qtbase repository. Fixes: QTBUG-75870 Change-Id: I949acf79c8ce321811ee81cf707c1ae0eccb547d Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/qtpaths/CMakeLists.txt7
-rw-r--r--src/tools/qtpaths/qtpaths.cpp75
2 files changed, 80 insertions, 2 deletions
diff --git a/src/tools/qtpaths/CMakeLists.txt b/src/tools/qtpaths/CMakeLists.txt
index 412ef5a0f9..e1df1d6422 100644
--- a/src/tools/qtpaths/CMakeLists.txt
+++ b/src/tools/qtpaths/CMakeLists.txt
@@ -12,11 +12,18 @@ qt_internal_add_tool(${target_name}
qtpaths.cpp
DEFINES
QT_NO_FOREACH
+ QTPATHS_VERSION_STR="2.0"
)
## Scopes:
#####################################################################
+qt_internal_extend_target(${target_name} CONDITION QT_FEATURE_settings
+ LIBRARIES
+ QtLibraryInfo
+ Qt::CorePrivate
+)
+
if(WIN32 AND TARGET ${target_name})
set_target_properties(${target_name} PROPERTIES
WIN32_EXECUTABLE FALSE
diff --git a/src/tools/qtpaths/qtpaths.cpp b/src/tools/qtpaths/qtpaths.cpp
index 93e2e42a5f..16fc1284f5 100644
--- a/src/tools/qtpaths/qtpaths.cpp
+++ b/src/tools/qtpaths/qtpaths.cpp
@@ -58,6 +58,13 @@
#include <stdio.h>
+#if QT_CONFIG(settings)
+# include <private/qlibraryinfo_p.h>
+# include <qmakelibraryinfo.h>
+# include <propertyprinter.h>
+# include <property.h>
+#endif
+
QT_USE_NAMESPACE
/**
@@ -162,7 +169,7 @@ static QString searchStringOrError(QCommandLineParser *parser)
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
- app.setApplicationVersion("1.0");
+ app.setApplicationVersion(QTPATHS_VERSION_STR);
#ifdef Q_OS_WIN
const QLatin1Char pathsep(';');
@@ -171,8 +178,10 @@ int main(int argc, char **argv)
#endif
QCommandLineParser parser;
- parser.setApplicationDescription(QCoreApplication::translate("qtpaths", "Command line client to QStandardPaths"));
+ parser.setApplicationDescription(QCoreApplication::translate("qtpaths", "Command line client to QStandardPaths and QLibraryInfo"));
parser.addPositionalArgument(QCoreApplication::translate("qtpaths", "[name]"), QCoreApplication::tr("Name of file or directory"));
+ parser.addPositionalArgument(QCoreApplication::translate("qtpaths", "[properties]"), QCoreApplication::tr("List of the Qt properties to query by the --qt-query argument."));
+ parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
parser.addHelpOption();
parser.addVersionOption();
@@ -216,23 +225,51 @@ int main(int argc, char **argv)
parser.addOption(testmode);
QCommandLineOption qtversion(QStringLiteral("qt-version"), QCoreApplication::translate("qtpaths", "Qt version."));
+ qtversion.setFlags(QCommandLineOption::HiddenFromHelp);
parser.addOption(qtversion);
QCommandLineOption installprefix(QStringLiteral("install-prefix"), QCoreApplication::translate("qtpaths", "Installation prefix for Qt."));
+ installprefix.setFlags(QCommandLineOption::HiddenFromHelp);
parser.addOption(installprefix);
QCommandLineOption bindir(QStringList() << QStringLiteral("binaries-dir") << QStringLiteral("binaries-directory"),
QCoreApplication::translate("qtpaths", "Location of Qt executables."));
+ bindir.setFlags(QCommandLineOption::HiddenFromHelp);
parser.addOption(bindir);
QCommandLineOption plugindir(QStringList() << QStringLiteral("plugin-dir") << QStringLiteral("plugin-directory"),
QCoreApplication::translate("qtpaths", "Location of Qt plugins."));
+ plugindir.setFlags(QCommandLineOption::HiddenFromHelp);
parser.addOption(plugindir);
+ QCommandLineOption query(
+ QStringList() << QStringLiteral("qt-query") << QStringLiteral("query"),
+ QCoreApplication::translate("qtpaths",
+ "List of Qt properties. Can be used standalone or with the "
+ "--query-format and --qtconf options."));
+ parser.addOption(query);
+
+ QCommandLineOption queryformat(QStringLiteral("query-format"),
+ QCoreApplication::translate("qtpaths", "Output format for --qt-query.\nSupported formats: qmake (default), json"),
+ QCoreApplication::translate("qtpaths", "format"));
+ queryformat.setDefaultValue("qmake");
+ parser.addOption(queryformat);
+
+ QCommandLineOption qtconf(QStringLiteral("qtconf"),
+ QCoreApplication::translate("qtpaths", "Path to qt.conf file that will be used to override the queried Qt properties."),
+ QCoreApplication::translate("qtpaths", "path"));
+ parser.addOption(qtconf);
+
parser.process(app);
QStandardPaths::setTestModeEnabled(parser.isSet(testmode));
+#if QT_CONFIG(settings)
+ if (parser.isSet(qtconf)) {
+ QLibraryInfoPrivate::qtconfManualPath = parser.value(qtconf);
+ }
+#endif
+
QStringList results;
if (parser.isSet(qtversion)) {
QString qtversionstring = QString::fromLatin1(qVersion());
@@ -310,6 +347,40 @@ int main(int argc, char **argv)
QStringList paths = QStandardPaths::locateAll(location.enumvalue, searchitem, QStandardPaths::LocateFile);
results << location.mapName(paths.join(pathsep));
}
+
+#if !QT_CONFIG(settings)
+ if (parser.isSet(query) || parser.isSet(qtconf) || parser.isSet(queryformat)) {
+ error(QStringLiteral("--qt-query, --qtconf and --query-format options are not supported. The 'settings' feature is missing."));
+ }
+#else
+ if (parser.isSet(query)) {
+ if (!results.isEmpty()) {
+ QString errorMessage = QCoreApplication::translate("qtpaths", "Several options given, only one is supported at a time.");
+ error(errorMessage);
+ }
+
+ PropertyPrinter printer;
+ if (parser.isSet(queryformat)) {
+ QString formatValue = parser.value(queryformat);
+ if (formatValue == "json") {
+ printer = jsonPropertyPrinter;
+ } else if (formatValue != "qmake") {
+ QString errorMessage = QCoreApplication::translate("qtpaths", "Invalid output format %1. Supported formats: qmake, json").arg(formatValue);
+ error(errorMessage);
+ }
+ }
+
+ QStringList optionProperties = parser.positionalArguments();
+ QMakeProperty prop;
+ if (printer) {
+ return prop.queryProperty(optionProperties, printer);
+ }
+ return prop.queryProperty(optionProperties);
+ } else if (parser.isSet(queryformat)) {
+ error(QCoreApplication::translate("qtpaths", "--query-format is set, but --qt-query is not requested."));
+ }
+#endif
+
if (results.isEmpty()) {
parser.showHelp();
} else if (results.size() == 1) {