de-duplicate writeout of config files
Change-Id: Iaad06f170cf2be3d3fca533a735b69316347ed5b Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
This commit is contained in:
parent
8a245c9fc2
commit
ca645afdc4
@ -2806,21 +2806,19 @@ void Configure::generateOutputVars()
|
||||
void Configure::generateCachefile()
|
||||
{
|
||||
// Generate .qmake.cache
|
||||
QFile cacheFile(buildPath + "/.qmake.cache");
|
||||
if (cacheFile.open(QFile::WriteOnly | QFile::Text)) { // Truncates any existing file.
|
||||
QTextStream cacheStream(&cacheFile);
|
||||
{
|
||||
FileWriter cacheStream(buildPath + "/.qmake.cache");
|
||||
|
||||
cacheStream << "QT_SOURCE_TREE = " << formatPath(dictionary["QT_SOURCE_TREE"]) << endl;
|
||||
cacheStream << "QT_BUILD_TREE = " << formatPath(dictionary["QT_BUILD_TREE"]) << endl;
|
||||
|
||||
cacheStream.flush();
|
||||
cacheFile.close();
|
||||
if (!cacheStream.flush())
|
||||
dictionary[ "DONE" ] = "error";
|
||||
}
|
||||
|
||||
// Generate qmodule.pri
|
||||
QFile moduleFile(dictionary[ "QT_BUILD_TREE" ] + "/mkspecs/qmodule.pri");
|
||||
if (moduleFile.open(QFile::WriteOnly | QFile::Text)) { // Truncates any existing file.
|
||||
QTextStream moduleStream(&moduleFile);
|
||||
{
|
||||
FileWriter moduleStream(dictionary[ "QT_BUILD_TREE" ] + "/mkspecs/qmodule.pri");
|
||||
|
||||
moduleStream << "QT_BUILD_PARTS += " << buildParts.join(' ') << endl;
|
||||
if (!skipModules.isEmpty())
|
||||
@ -2882,8 +2880,8 @@ void Configure::generateCachefile()
|
||||
for (QStringList::Iterator var = qmakeVars.begin(); var != qmakeVars.end(); ++var)
|
||||
moduleStream << (*var) << endl;
|
||||
|
||||
moduleStream.flush();
|
||||
moduleFile.close();
|
||||
if (!moduleStream.flush())
|
||||
dictionary[ "DONE" ] = "error";
|
||||
}
|
||||
}
|
||||
|
||||
@ -3079,9 +3077,8 @@ bool Configure::compilerSupportsFlag(const QString &compilerAndArgs)
|
||||
void Configure::generateQConfigPri()
|
||||
{
|
||||
// Generate qconfig.pri
|
||||
QFile configFile(dictionary[ "QT_BUILD_TREE" ] + "/mkspecs/qconfig.pri");
|
||||
if (configFile.open(QFile::WriteOnly | QFile::Text)) { // Truncates any existing file.
|
||||
QTextStream configStream(&configFile);
|
||||
{
|
||||
FileWriter configStream(dictionary[ "QT_BUILD_TREE" ] + "/mkspecs/qconfig.pri");
|
||||
|
||||
configStream << "CONFIG+= ";
|
||||
configStream << dictionary[ "BUILD" ];
|
||||
@ -3151,8 +3148,8 @@ void Configure::generateQConfigPri()
|
||||
if (dictionary[ "SHARED" ] == "no")
|
||||
configStream << "QT_DEFAULT_QPA_PLUGIN = q" << qpaPlatformName() << endl;
|
||||
|
||||
configStream.flush();
|
||||
configFile.close();
|
||||
if (!configStream.flush())
|
||||
dictionary[ "DONE" ] = "error";
|
||||
}
|
||||
}
|
||||
|
||||
@ -3190,13 +3187,8 @@ QString Configure::addDefine(QString def)
|
||||
|
||||
void Configure::generateConfigfiles()
|
||||
{
|
||||
QDir(buildPath).mkpath("src/corelib/global");
|
||||
QString outName(buildPath + "/src/corelib/global/qconfig.h");
|
||||
QTemporaryFile tmpFile;
|
||||
QTextStream tmpStream;
|
||||
|
||||
if (tmpFile.open()) {
|
||||
tmpStream.setDevice(&tmpFile);
|
||||
{
|
||||
FileWriter tmpStream(buildPath + "/src/corelib/global/qconfig.h");
|
||||
|
||||
if (dictionary[ "QCONFIG" ] == "full") {
|
||||
tmpStream << "/* Everything */" << endl;
|
||||
@ -3206,8 +3198,7 @@ void Configure::generateConfigfiles()
|
||||
tmpStream << "#ifndef QT_BOOTSTRAPPED" << endl;
|
||||
QFile inFile(sourcePath + "/src/corelib/global/" + configName);
|
||||
if (inFile.open(QFile::ReadOnly)) {
|
||||
QByteArray buffer = inFile.readAll();
|
||||
tmpFile.write(buffer.constData(), buffer.size());
|
||||
tmpStream << QTextStream(&inFile).readAll();
|
||||
inFile.close();
|
||||
}
|
||||
tmpStream << "#endif // QT_BOOTSTRAPPED" << endl;
|
||||
@ -3338,68 +3329,40 @@ void Configure::generateConfigfiles()
|
||||
|
||||
tmpStream<<"#define QT_QPA_DEFAULT_PLATFORM_NAME \"" << qpaPlatformName() << "\""<<endl;
|
||||
|
||||
tmpStream.flush();
|
||||
tmpFile.flush();
|
||||
|
||||
// Replace old qconfig.h with new one
|
||||
::SetFileAttributes((wchar_t*)outName.utf16(), FILE_ATTRIBUTE_NORMAL);
|
||||
QFile::remove(outName);
|
||||
tmpFile.copy(outName);
|
||||
tmpFile.close();
|
||||
if (!tmpStream.flush())
|
||||
dictionary[ "DONE" ] = "error";
|
||||
}
|
||||
|
||||
QTemporaryFile tmpFile2;
|
||||
if (tmpFile2.open()) {
|
||||
tmpStream.setDevice(&tmpFile2);
|
||||
{
|
||||
FileWriter tmpStream(buildPath + "/include/QtCore/qconfig.h");
|
||||
|
||||
tmpStream << "#include \"../../src/corelib/global/qconfig.h\"" << endl;
|
||||
|
||||
tmpStream.flush();
|
||||
tmpFile2.flush();
|
||||
|
||||
outName = buildPath + "/include/QtCore/qconfig.h";
|
||||
::SetFileAttributes((wchar_t*)outName.utf16(), FILE_ATTRIBUTE_NORMAL);
|
||||
QFile::remove(outName);
|
||||
|
||||
tmpFile2.copy(outName);
|
||||
tmpFile2.close();
|
||||
if (!tmpStream.flush())
|
||||
dictionary[ "DONE" ] = "error";
|
||||
}
|
||||
QTemporaryFile tmpFile2a;
|
||||
if (tmpFile2a.open()) {
|
||||
tmpStream.setDevice(&tmpFile2a);
|
||||
{
|
||||
FileWriter tmpStream(buildPath + "/include/QtCore/QtConfig");
|
||||
|
||||
tmpStream << "#include \"qconfig.h\"" << endl;
|
||||
|
||||
tmpStream.flush();
|
||||
tmpFile2a.flush();
|
||||
|
||||
outName = buildPath + "/include/QtCore/QtConfig";
|
||||
::SetFileAttributes((wchar_t*)outName.utf16(), FILE_ATTRIBUTE_NORMAL);
|
||||
QFile::remove(outName);
|
||||
|
||||
tmpFile2a.copy(outName);
|
||||
tmpFile2a.close();
|
||||
if (!tmpStream.flush())
|
||||
dictionary[ "DONE" ] = "error";
|
||||
}
|
||||
|
||||
QTemporaryFile tmpFile3;
|
||||
if (tmpFile3.open()) {
|
||||
tmpStream.setDevice(&tmpFile3);
|
||||
if (dictionary["EDITION"] == "Evaluation" || qmakeDefines.contains("QT_EVAL")) {
|
||||
FileWriter tmpStream(buildPath + "/src/corelib/global/qconfig_eval.cpp");
|
||||
|
||||
tmpStream << "/* Evaluation license key */" << endl
|
||||
<< "static const volatile char qt_eval_key_data [512 + 12] = \"qt_qevalkey=" << licenseInfo["LICENSEKEYEXT"] << "\";" << endl;
|
||||
|
||||
tmpStream.flush();
|
||||
tmpFile3.flush();
|
||||
|
||||
outName = buildPath + "/src/corelib/global/qconfig_eval.cpp";
|
||||
::SetFileAttributes((wchar_t*)outName.utf16(), FILE_ATTRIBUTE_NORMAL);
|
||||
QFile::remove(outName);
|
||||
|
||||
if (dictionary["EDITION"] == "Evaluation" || qmakeDefines.contains("QT_EVAL"))
|
||||
tmpFile3.copy(outName);
|
||||
tmpFile3.close();
|
||||
if (!tmpStream.flush())
|
||||
dictionary[ "DONE" ] = "error";
|
||||
}
|
||||
|
||||
QFile qdeviceFile(dictionary["QT_BUILD_TREE"] + "/mkspecs/qdevice.pri");
|
||||
if (qdeviceFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||
tmpStream.setDevice(&qdeviceFile);
|
||||
{
|
||||
FileWriter tmpStream(dictionary["QT_BUILD_TREE"] + "/mkspecs/qdevice.pri");
|
||||
|
||||
QString android_platform(dictionary.contains("ANDROID_PLATFORM")
|
||||
? dictionary["ANDROID_PLATFORM"]
|
||||
: QString("android-9"));
|
||||
@ -3420,8 +3383,9 @@ void Configure::generateConfigfiles()
|
||||
tmpStream << " DEFAULT_ANDROID_TARGET_ARCH = " << android_arch << endl;
|
||||
tmpStream << " DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION = " << android_tc_vers << endl;
|
||||
tmpStream << "}" << endl;
|
||||
tmpStream.flush();
|
||||
qdeviceFile.close();
|
||||
|
||||
if (!tmpStream.flush())
|
||||
dictionary[ "DONE" ] = "error";
|
||||
}
|
||||
}
|
||||
|
||||
@ -3716,17 +3680,13 @@ void Configure::generateQConfigCpp()
|
||||
if (dictionary["QT_HOST_DATA"].isEmpty())
|
||||
dictionary["QT_HOST_DATA"] = haveHpx ? dictionary["QT_HOST_PREFIX"] : dictionary["QT_INSTALL_ARCHDATA"];
|
||||
|
||||
// Generate the new qconfig.cpp file
|
||||
QDir(buildPath).mkpath("src/corelib/global");
|
||||
const QString outName(buildPath + "/src/corelib/global/qconfig.cpp");
|
||||
|
||||
QString specPfx = dictionary["QT_HOST_DATA"] + "/mkspecs/";
|
||||
QString hostSpec = stripPrefix(dictionary["QMAKESPEC"], specPfx);
|
||||
QString targSpec = dictionary.contains("XQMAKESPEC") ? stripPrefix(dictionary["XQMAKESPEC"], specPfx) : hostSpec;
|
||||
|
||||
QTemporaryFile tmpFile;
|
||||
if (tmpFile.open()) {
|
||||
QTextStream tmpStream(&tmpFile);
|
||||
// Generate the new qconfig.cpp file
|
||||
{
|
||||
FileWriter tmpStream(buildPath + "/src/corelib/global/qconfig.cpp");
|
||||
tmpStream << "/* Licensed */" << endl
|
||||
<< "static const char qt_configure_licensee_str [512 + 12] = \"qt_lcnsuser=" << licenseInfo["LICENSEE"] << "\";" << endl
|
||||
<< "static const char qt_configure_licensed_products_str [512 + 12] = \"qt_lcnsprod=" << dictionary["EDITION"] << "\";" << endl
|
||||
@ -3771,14 +3731,8 @@ void Configure::generateQConfigCpp()
|
||||
if ((platform() != WINDOWS) && (platform() != WINDOWS_CE))
|
||||
tmpStream << "#define QT_CONFIGURE_SETTINGS_PATH qt_configure_settings_path_str + 12;" << endl;
|
||||
|
||||
tmpStream.flush();
|
||||
tmpFile.flush();
|
||||
|
||||
// Replace old qconfig.cpp with new one
|
||||
::SetFileAttributes((wchar_t*)outName.utf16(), FILE_ATTRIBUTE_NORMAL);
|
||||
QFile::remove(outName);
|
||||
tmpFile.copy(outName);
|
||||
tmpFile.close();
|
||||
if (!tmpStream.flush())
|
||||
dictionary[ "DONE" ] = "error";
|
||||
}
|
||||
}
|
||||
|
||||
@ -4270,4 +4224,41 @@ int Configure::platform() const
|
||||
return WINDOWS;
|
||||
}
|
||||
|
||||
FileWriter::FileWriter(const QString &name)
|
||||
: QTextStream()
|
||||
, m_name(name)
|
||||
{
|
||||
m_buffer.open(QIODevice::WriteOnly);
|
||||
setDevice(&m_buffer);
|
||||
}
|
||||
|
||||
bool FileWriter::flush()
|
||||
{
|
||||
QTextStream::flush();
|
||||
QString dir = QFileInfo(m_name).absolutePath();
|
||||
if (!QDir().mkpath(dir)) {
|
||||
cout << "Cannot create directory " << qPrintable(QDir::toNativeSeparators(dir)) << ".\n";
|
||||
return false;
|
||||
}
|
||||
QFile file(m_name + ".new");
|
||||
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||
if (file.write(m_buffer.data()) == m_buffer.data().size()) {
|
||||
file.close();
|
||||
if (file.error() == QFile::NoError) {
|
||||
::SetFileAttributes((wchar_t*)m_name.utf16(), FILE_ATTRIBUTE_NORMAL);
|
||||
QFile::remove(m_name);
|
||||
if (!file.rename(m_name)) {
|
||||
cout << "Cannot replace file " << qPrintable(QDir::toNativeSeparators(m_name)) << ".\n";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
cout << "Cannot create file " << qPrintable(QDir::toNativeSeparators(file.fileName()))
|
||||
<< ": " << qPrintable(file.errorString()) << ".\n";
|
||||
file.remove();
|
||||
return false;
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -43,6 +43,7 @@
|
||||
#include <qstring.h>
|
||||
#include <qstringlist.h>
|
||||
#include <qlist.h>
|
||||
#include <qbuffer.h>
|
||||
#include <qtextstream.h>
|
||||
#include <qdir.h>
|
||||
|
||||
@ -191,5 +192,14 @@ public:
|
||||
Configure::ProjectType qmakeTemplate;
|
||||
};
|
||||
|
||||
class FileWriter : public QTextStream
|
||||
{
|
||||
public:
|
||||
FileWriter(const QString &name);
|
||||
bool flush();
|
||||
private:
|
||||
QString m_name;
|
||||
QBuffer m_buffer;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
Loading…
Reference in New Issue
Block a user