Fix qmlcachegen command line parameters
Add support for specifying the output file name Change-Id: I3ec3cecae2334a7640baa928c0739c5521496d2d Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
parent
38919dc825
commit
1102f6ca7f
|
@ -77,13 +77,7 @@ namespace QV4 {
|
||||||
|
|
||||||
namespace CompiledData {
|
namespace CompiledData {
|
||||||
|
|
||||||
#ifdef V4_BOOTSTRAP
|
#if !defined(V4_BOOTSTRAP)
|
||||||
static QString cacheFilePath(const QString &localSourcePath)
|
|
||||||
{
|
|
||||||
const QString localCachePath = localSourcePath + QLatin1Char('c');
|
|
||||||
return localCachePath;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static QString cacheFilePath(const QUrl &url)
|
static QString cacheFilePath(const QUrl &url)
|
||||||
{
|
{
|
||||||
const QString localSourcePath = QQmlFile::urlToLocalFileOrQrc(url);
|
const QString localSourcePath = QQmlFile::urlToLocalFileOrQrc(url);
|
||||||
|
@ -408,7 +402,7 @@ bool CompilationUnit::memoryMapCode(QString *errorString)
|
||||||
#endif // V4_BOOTSTRAP
|
#endif // V4_BOOTSTRAP
|
||||||
|
|
||||||
#if defined(V4_BOOTSTRAP)
|
#if defined(V4_BOOTSTRAP)
|
||||||
bool CompilationUnit::saveToDisk(const QString &unitUrl, QString *errorString)
|
bool CompilationUnit::saveToDisk(const QString &outputFileName, QString *errorString)
|
||||||
#else
|
#else
|
||||||
bool CompilationUnit::saveToDisk(const QUrl &unitUrl, QString *errorString)
|
bool CompilationUnit::saveToDisk(const QUrl &unitUrl, QString *errorString)
|
||||||
#endif
|
#endif
|
||||||
|
@ -425,11 +419,12 @@ bool CompilationUnit::saveToDisk(const QUrl &unitUrl, QString *errorString)
|
||||||
*errorString = QStringLiteral("File has to be a local file.");
|
*errorString = QStringLiteral("File has to be a local file.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
const QString outputFileName = cacheFilePath(unitUrl);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if QT_CONFIG(temporaryfile)
|
#if QT_CONFIG(temporaryfile)
|
||||||
// Foo.qml -> Foo.qmlc
|
// Foo.qml -> Foo.qmlc
|
||||||
QSaveFile cacheFile(cacheFilePath(unitUrl));
|
QSaveFile cacheFile(outputFileName);
|
||||||
if (!cacheFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
|
if (!cacheFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
|
||||||
*errorString = cacheFile.errorString();
|
*errorString = cacheFile.errorString();
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -908,7 +908,7 @@ protected:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
#if defined(V4_BOOTSTRAP)
|
#if defined(V4_BOOTSTRAP)
|
||||||
bool saveToDisk(const QString &unitUrl, QString *errorString);
|
bool saveToDisk(const QString &outputFileName, QString *errorString);
|
||||||
#else
|
#else
|
||||||
bool saveToDisk(const QUrl &unitUrl, QString *errorString);
|
bool saveToDisk(const QUrl &unitUrl, QString *errorString);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -80,7 +80,7 @@ QString diagnosticErrorMessage(const QString &fileName, const QQmlJS::Diagnostic
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool compileQmlFile(const QString &inputFileName, QV4::EvalISelFactory *iselFactory, Error *error)
|
static bool compileQmlFile(const QString &inputFileName, const QString &outputFileName, QV4::EvalISelFactory *iselFactory, Error *error)
|
||||||
{
|
{
|
||||||
QmlIR::Document irDocument(/*debugMode*/false);
|
QmlIR::Document irDocument(/*debugMode*/false);
|
||||||
|
|
||||||
|
@ -153,7 +153,7 @@ static bool compileQmlFile(const QString &inputFileName, QV4::EvalISelFactory *i
|
||||||
unit->flags |= QV4::CompiledData::Unit::PendingTypeCompilation;
|
unit->flags |= QV4::CompiledData::Unit::PendingTypeCompilation;
|
||||||
irDocument.javaScriptCompilationUnit->data = unit;
|
irDocument.javaScriptCompilationUnit->data = unit;
|
||||||
|
|
||||||
if (!irDocument.javaScriptCompilationUnit->saveToDisk(inputFileName, &error->message))
|
if (!irDocument.javaScriptCompilationUnit->saveToDisk(outputFileName, &error->message))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
free(unit);
|
free(unit);
|
||||||
|
@ -161,7 +161,7 @@ static bool compileQmlFile(const QString &inputFileName, QV4::EvalISelFactory *i
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool compileJSFile(const QString &inputFileName, QV4::EvalISelFactory *iselFactory, Error *error)
|
static bool compileJSFile(const QString &inputFileName, const QString &outputFileName, QV4::EvalISelFactory *iselFactory, Error *error)
|
||||||
{
|
{
|
||||||
QmlIR::Document irDocument(/*debugMode*/false);
|
QmlIR::Document irDocument(/*debugMode*/false);
|
||||||
|
|
||||||
|
@ -233,7 +233,8 @@ static bool compileJSFile(const QString &inputFileName, QV4::EvalISelFactory *is
|
||||||
|
|
||||||
// ### translation binding simplification
|
// ### translation binding simplification
|
||||||
|
|
||||||
QScopedPointer<QV4::EvalInstructionSelection> isel(iselFactory->create(/*engine*/nullptr, /*executable allocator*/nullptr, &irDocument.jsModule, &irDocument.jsGenerator));
|
QV4::ExecutableAllocator allocator;
|
||||||
|
QScopedPointer<QV4::EvalInstructionSelection> isel(iselFactory->create(/*engine*/nullptr, &allocator, &irDocument.jsModule, &irDocument.jsGenerator));
|
||||||
// Disable lookups in non-standalone (aka QML) mode
|
// Disable lookups in non-standalone (aka QML) mode
|
||||||
isel->setUseFastLookups(false);
|
isel->setUseFastLookups(false);
|
||||||
irDocument.javaScriptCompilationUnit = isel->compile(/*generate unit*/false);
|
irDocument.javaScriptCompilationUnit = isel->compile(/*generate unit*/false);
|
||||||
|
@ -243,7 +244,7 @@ static bool compileJSFile(const QString &inputFileName, QV4::EvalISelFactory *is
|
||||||
unit->flags |= QV4::CompiledData::Unit::StaticData;
|
unit->flags |= QV4::CompiledData::Unit::StaticData;
|
||||||
irDocument.javaScriptCompilationUnit->data = unit;
|
irDocument.javaScriptCompilationUnit->data = unit;
|
||||||
|
|
||||||
if (!irDocument.javaScriptCompilationUnit->saveToDisk(inputFileName, &error->message)) {
|
if (!irDocument.javaScriptCompilationUnit->saveToDisk(outputFileName, &error->message)) {
|
||||||
engine->setDirectives(oldDirs);
|
engine->setDirectives(oldDirs);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -270,6 +271,9 @@ int main(int argc, char **argv)
|
||||||
QCommandLineOption targetArchitectureOption(QStringLiteral("target-architecture"), QCoreApplication::translate("main", "Target architecture"), QCoreApplication::translate("main", "architecture"));
|
QCommandLineOption targetArchitectureOption(QStringLiteral("target-architecture"), QCoreApplication::translate("main", "Target architecture"), QCoreApplication::translate("main", "architecture"));
|
||||||
parser.addOption(targetArchitectureOption);
|
parser.addOption(targetArchitectureOption);
|
||||||
|
|
||||||
|
QCommandLineOption outputFileOption(QStringLiteral("o"), QCoreApplication::translate("main", "Output file name"), QCoreApplication::translate("main", "file name"));
|
||||||
|
parser.addOption(outputFileOption);
|
||||||
|
|
||||||
parser.addPositionalArgument(QStringLiteral("[qml file]"),
|
parser.addPositionalArgument(QStringLiteral("[qml file]"),
|
||||||
QStringLiteral("QML source file to generate cache for."));
|
QStringLiteral("QML source file to generate cache for."));
|
||||||
|
|
||||||
|
@ -294,13 +298,17 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
Error error;
|
Error error;
|
||||||
|
|
||||||
|
QString outputFileName = inputFile + QLatin1Char('c');
|
||||||
|
if (parser.isSet(outputFileOption))
|
||||||
|
outputFileName = parser.value(outputFileOption);
|
||||||
|
|
||||||
if (inputFile.endsWith(QLatin1String(".qml"))) {
|
if (inputFile.endsWith(QLatin1String(".qml"))) {
|
||||||
if (!compileQmlFile(inputFile, isel.data(), &error)) {
|
if (!compileQmlFile(inputFile, outputFileName, isel.data(), &error)) {
|
||||||
error.augment(QLatin1String("Error compiling qml file: ")).print();
|
error.augment(QLatin1String("Error compiling qml file: ")).print();
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
} else if (inputFile.endsWith(QLatin1String(".js"))) {
|
} else if (inputFile.endsWith(QLatin1String(".js"))) {
|
||||||
if (!compileJSFile(inputFile, isel.data(), &error)) {
|
if (!compileJSFile(inputFile, outputFileName, isel.data(), &error)) {
|
||||||
error.augment(QLatin1String("Error compiling qml file: ")).print();
|
error.augment(QLatin1String("Error compiling qml file: ")).print();
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue