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>
This commit is contained in:
parent
5fb347c93d
commit
fef850c51a
@ -12,11 +12,18 @@ qt_internal_add_tool(${target_name}
|
|||||||
qtpaths.cpp
|
qtpaths.cpp
|
||||||
DEFINES
|
DEFINES
|
||||||
QT_NO_FOREACH
|
QT_NO_FOREACH
|
||||||
|
QTPATHS_VERSION_STR="2.0"
|
||||||
)
|
)
|
||||||
|
|
||||||
## Scopes:
|
## Scopes:
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
||||||
|
qt_internal_extend_target(${target_name} CONDITION QT_FEATURE_settings
|
||||||
|
LIBRARIES
|
||||||
|
QtLibraryInfo
|
||||||
|
Qt::CorePrivate
|
||||||
|
)
|
||||||
|
|
||||||
if(WIN32 AND TARGET ${target_name})
|
if(WIN32 AND TARGET ${target_name})
|
||||||
set_target_properties(${target_name} PROPERTIES
|
set_target_properties(${target_name} PROPERTIES
|
||||||
WIN32_EXECUTABLE FALSE
|
WIN32_EXECUTABLE FALSE
|
||||||
|
@ -58,6 +58,13 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#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
|
QT_USE_NAMESPACE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -162,7 +169,7 @@ static QString searchStringOrError(QCommandLineParser *parser)
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
QCoreApplication app(argc, argv);
|
QCoreApplication app(argc, argv);
|
||||||
app.setApplicationVersion("1.0");
|
app.setApplicationVersion(QTPATHS_VERSION_STR);
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
const QLatin1Char pathsep(';');
|
const QLatin1Char pathsep(';');
|
||||||
@ -171,8 +178,10 @@ int main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
QCommandLineParser parser;
|
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", "[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.addHelpOption();
|
||||||
parser.addVersionOption();
|
parser.addVersionOption();
|
||||||
|
|
||||||
@ -216,23 +225,51 @@ int main(int argc, char **argv)
|
|||||||
parser.addOption(testmode);
|
parser.addOption(testmode);
|
||||||
|
|
||||||
QCommandLineOption qtversion(QStringLiteral("qt-version"), QCoreApplication::translate("qtpaths", "Qt version."));
|
QCommandLineOption qtversion(QStringLiteral("qt-version"), QCoreApplication::translate("qtpaths", "Qt version."));
|
||||||
|
qtversion.setFlags(QCommandLineOption::HiddenFromHelp);
|
||||||
parser.addOption(qtversion);
|
parser.addOption(qtversion);
|
||||||
|
|
||||||
QCommandLineOption installprefix(QStringLiteral("install-prefix"), QCoreApplication::translate("qtpaths", "Installation prefix for Qt."));
|
QCommandLineOption installprefix(QStringLiteral("install-prefix"), QCoreApplication::translate("qtpaths", "Installation prefix for Qt."));
|
||||||
|
installprefix.setFlags(QCommandLineOption::HiddenFromHelp);
|
||||||
parser.addOption(installprefix);
|
parser.addOption(installprefix);
|
||||||
|
|
||||||
QCommandLineOption bindir(QStringList() << QStringLiteral("binaries-dir") << QStringLiteral("binaries-directory"),
|
QCommandLineOption bindir(QStringList() << QStringLiteral("binaries-dir") << QStringLiteral("binaries-directory"),
|
||||||
QCoreApplication::translate("qtpaths", "Location of Qt executables."));
|
QCoreApplication::translate("qtpaths", "Location of Qt executables."));
|
||||||
|
bindir.setFlags(QCommandLineOption::HiddenFromHelp);
|
||||||
parser.addOption(bindir);
|
parser.addOption(bindir);
|
||||||
|
|
||||||
QCommandLineOption plugindir(QStringList() << QStringLiteral("plugin-dir") << QStringLiteral("plugin-directory"),
|
QCommandLineOption plugindir(QStringList() << QStringLiteral("plugin-dir") << QStringLiteral("plugin-directory"),
|
||||||
QCoreApplication::translate("qtpaths", "Location of Qt plugins."));
|
QCoreApplication::translate("qtpaths", "Location of Qt plugins."));
|
||||||
|
plugindir.setFlags(QCommandLineOption::HiddenFromHelp);
|
||||||
parser.addOption(plugindir);
|
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);
|
parser.process(app);
|
||||||
|
|
||||||
QStandardPaths::setTestModeEnabled(parser.isSet(testmode));
|
QStandardPaths::setTestModeEnabled(parser.isSet(testmode));
|
||||||
|
|
||||||
|
#if QT_CONFIG(settings)
|
||||||
|
if (parser.isSet(qtconf)) {
|
||||||
|
QLibraryInfoPrivate::qtconfManualPath = parser.value(qtconf);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
QStringList results;
|
QStringList results;
|
||||||
if (parser.isSet(qtversion)) {
|
if (parser.isSet(qtversion)) {
|
||||||
QString qtversionstring = QString::fromLatin1(qVersion());
|
QString qtversionstring = QString::fromLatin1(qVersion());
|
||||||
@ -310,6 +347,40 @@ int main(int argc, char **argv)
|
|||||||
QStringList paths = QStandardPaths::locateAll(location.enumvalue, searchitem, QStandardPaths::LocateFile);
|
QStringList paths = QStandardPaths::locateAll(location.enumvalue, searchitem, QStandardPaths::LocateFile);
|
||||||
results << location.mapName(paths.join(pathsep));
|
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()) {
|
if (results.isEmpty()) {
|
||||||
parser.showHelp();
|
parser.showHelp();
|
||||||
} else if (results.size() == 1) {
|
} else if (results.size() == 1) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user