diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/configure/configureapp.cpp | 169 | ||||
-rw-r--r-- | tools/configure/configureapp.h | 10 |
2 files changed, 90 insertions, 89 deletions
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index abc1ba4407..50b31bbb95 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -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); - tmpStream << "#include \"../../src/corelib/global/qconfig.h\"" << endl; - - tmpStream.flush(); - tmpFile2.flush(); + { + FileWriter tmpStream(buildPath + "/include/QtCore/qconfig.h"); - outName = buildPath + "/include/QtCore/qconfig.h"; - ::SetFileAttributes((wchar_t*)outName.utf16(), FILE_ATTRIBUTE_NORMAL); - QFile::remove(outName); + tmpStream << "#include \"../../src/corelib/global/qconfig.h\"" << endl; - tmpFile2.copy(outName); - tmpFile2.close(); + if (!tmpStream.flush()) + dictionary[ "DONE" ] = "error"; } - QTemporaryFile tmpFile2a; - if (tmpFile2a.open()) { - tmpStream.setDevice(&tmpFile2a); - tmpStream << "#include \"qconfig.h\"" << endl; - - tmpStream.flush(); - tmpFile2a.flush(); + { + FileWriter tmpStream(buildPath + "/include/QtCore/QtConfig"); - outName = buildPath + "/include/QtCore/QtConfig"; - ::SetFileAttributes((wchar_t*)outName.utf16(), FILE_ATTRIBUTE_NORMAL); - QFile::remove(outName); + tmpStream << "#include \"qconfig.h\"" << endl; - 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 diff --git a/tools/configure/configureapp.h b/tools/configure/configureapp.h index d77b136ac8..33fc22b27a 100644 --- a/tools/configure/configureapp.h +++ b/tools/configure/configureapp.h @@ -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 |