diff options
Diffstat (limited to 'src/plugins/qtsupport/qtversionmanager.cpp')
-rw-r--r-- | src/plugins/qtsupport/qtversionmanager.cpp | 238 |
1 files changed, 0 insertions, 238 deletions
diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index ea1e99851b..7513ad40e3 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -64,13 +64,6 @@ namespace QtSupport { using namespace Internal; -struct QMakeAssignment -{ - QString variable; - QString op; - QString value; -}; - const char QTVERSION_DATA_KEY[] = "QtVersion."; const char QTVERSION_TYPE_KEY[] = "QtVersion.Type"; const char QTVERSION_FILE_VERSION_KEY[] = "Version"; @@ -107,36 +100,6 @@ bool qtVersionNumberCompare(BaseQtVersion *a, BaseQtVersion *b) { return a->qtVersion() > b->qtVersion() || (a->qtVersion() == b->qtVersion() && a->uniqueId() < b->uniqueId()); } - -static QString findQMakeLine(const QString &makefile, const QString &key) -{ - QFile fi(makefile); - if (fi.exists() && fi.open(QFile::ReadOnly)) { - QTextStream ts(&fi); - while (!ts.atEnd()) { - const QString line = ts.readLine(); - if (line.startsWith(key)) - return line; - } - } - return QString(); -} - -/// This function trims the "#Command /path/to/qmake" from the line -static QString trimLine(const QString &line) -{ - - // Actually the first space after #Command: /path/to/qmake - const int firstSpace = line.indexOf(QLatin1Char(' '), 11); - return line.mid(firstSpace).trimmed(); -} - -static void parseArgs(const QString &args, - QList<QMakeAssignment> *assignments, - QList<QMakeAssignment> *afterAssignments, - QString *additionalArguments); -static BaseQtVersion::QmakeBuildConfigs qmakeBuildConfigFromCmdArgs(QList<QMakeAssignment> *assignments, - BaseQtVersion::QmakeBuildConfigs defaultBuildConfig); static bool restoreQtVersions(); static void findSystemQt(); static void saveQtVersions(); @@ -608,210 +571,9 @@ void QtVersionManager::setNewQtVersions(QList<BaseQtVersion *> newVersions) emit m_instance->qtVersionsChanged(addedVersions, removedVersions, changedVersions); } -// Returns the version that was used to build the project in that directory -// That is returns the directory -// To find out whether we already have a qtversion for that directory call -// QtVersion *QtVersionManager::qtVersionForDirectory(const QString directory); -FileName QtVersionManager::findQMakeBinaryFromMakefile(const QString &makefile) -{ - bool debugAdding = false; - QFile fi(makefile); - if (fi.exists() && fi.open(QFile::ReadOnly)) { - QTextStream ts(&fi); - QRegExp r1(QLatin1String("QMAKE\\s*=(.*)")); - while (!ts.atEnd()) { - QString line = ts.readLine(); - if (r1.exactMatch(line)) { - if (debugAdding) - qDebug()<<"#~~ QMAKE is:"<<r1.cap(1).trimmed(); - QFileInfo qmake(r1.cap(1).trimmed()); - QString qmakePath = qmake.filePath(); - if (!QString::fromLatin1(QTC_HOST_EXE_SUFFIX).isEmpty() - && !qmakePath.endsWith(QLatin1String(QTC_HOST_EXE_SUFFIX))) { - qmakePath.append(QLatin1String(QTC_HOST_EXE_SUFFIX)); - } - // Is qmake still installed? - QFileInfo fi(qmakePath); - if (fi.exists()) - return FileName(fi); - } - } - } - return FileName(); -} - BaseQtVersion *QtVersionManager::qtVersionForQMakeBinary(const FileName &qmakePath) { return Utils::findOrDefault(versions(), Utils::equal(&BaseQtVersion::qmakeCommand, qmakePath)); } -void dumpQMakeAssignments(const QList<QMakeAssignment> &list) -{ - foreach (const QMakeAssignment &qa, list) { - qDebug()<<qa.variable<<qa.op<<qa.value; - } -} - -QtVersionManager::MakefileCompatible QtVersionManager::makefileIsFor(const QString &makefile, const QString &proFile) -{ - if (proFile.isEmpty()) - return CouldNotParse; - - // The Makefile.Debug / Makefile.Release lack a # Command: line - if (findQMakeLine(makefile, QLatin1String("# Command:")).trimmed().isEmpty()) - return CouldNotParse; - - QString line = findQMakeLine(makefile, QLatin1String("# Project:")).trimmed(); - if (line.isEmpty()) - return CouldNotParse; - - line.remove(0, line.indexOf(QLatin1Char(':')) + 1); - line = line.trimmed(); - - QFileInfo srcFileInfo(QFileInfo(makefile).absoluteDir(), line); - QFileInfo proFileInfo(proFile); - return (srcFileInfo == proFileInfo) ? SameProject : DifferentProject; -} - -QPair<BaseQtVersion::QmakeBuildConfigs, QString> QtVersionManager::scanMakeFile(const QString &makefile, BaseQtVersion::QmakeBuildConfigs defaultBuildConfig) -{ - if (debug) - qDebug()<<"ScanMakeFile, the gory details:"; - BaseQtVersion::QmakeBuildConfigs result = defaultBuildConfig; - QString result2; - - QString line = findQMakeLine(makefile, QLatin1String("# Command:")); - if (!line.isEmpty()) { - if (debug) - qDebug()<<"Found line"<<line; - line = trimLine(line); - QList<QMakeAssignment> assignments; - QList<QMakeAssignment> afterAssignments; - parseArgs(line, &assignments, &afterAssignments, &result2); - - if (debug) { - dumpQMakeAssignments(assignments); - if (!afterAssignments.isEmpty()) - qDebug()<<"-after"; - dumpQMakeAssignments(afterAssignments); - } - - // Search in assignments for CONFIG(+=,-=,=)(debug,release,debug_and_release) - // Also remove them from the list - result = qmakeBuildConfigFromCmdArgs(&assignments, defaultBuildConfig); - - if (debug) - dumpQMakeAssignments(assignments); - - foreach (const QMakeAssignment &qa, assignments) - QtcProcess::addArg(&result2, qa.variable + qa.op + qa.value); - if (!afterAssignments.isEmpty()) { - QtcProcess::addArg(&result2, QLatin1String("-after")); - foreach (const QMakeAssignment &qa, afterAssignments) - QtcProcess::addArg(&result2, qa.variable + qa.op + qa.value); - } - } - - // Dump the gathered information: - if (debug) { - qDebug()<<"\n\nDumping information from scanMakeFile"; - qDebug()<<"QMake CONFIG variable parsing"; - qDebug()<<" "<< (result & BaseQtVersion::NoBuild ? QByteArray("No Build") : QByteArray::number(int(result))); - qDebug()<<" "<< (result & BaseQtVersion::DebugBuild ? "debug" : "release"); - qDebug()<<" "<< (result & BaseQtVersion::BuildAll ? "debug_and_release" : "no debug_and_release"); - qDebug()<<"\nAddtional Arguments"; - qDebug()<<result2; - qDebug()<<"\n\n"; - } - return qMakePair(result, result2); -} - -static void parseArgs(const QString &args, QList<QMakeAssignment> *assignments, QList<QMakeAssignment> *afterAssignments, QString *additionalArguments) -{ - QRegExp regExp(QLatin1String("([^\\s\\+-]*)\\s*(\\+=|=|-=|~=)(.*)")); - bool after = false; - bool ignoreNext = false; - *additionalArguments = args; - QtcProcess::ArgIterator ait(additionalArguments); - while (ait.next()) { - if (ignoreNext) { - // Ignoring - ignoreNext = false; - ait.deleteArg(); - } else if (ait.value() == QLatin1String("-after")) { - after = true; - ait.deleteArg(); - } else if (ait.value().contains(QLatin1Char('='))) { - if (regExp.exactMatch(ait.value())) { - QMakeAssignment qa; - qa.variable = regExp.cap(1); - qa.op = regExp.cap(2); - qa.value = regExp.cap(3).trimmed(); - if (after) - afterAssignments->append(qa); - else - assignments->append(qa); - } else { - qDebug()<<"regexp did not match"; - } - ait.deleteArg(); - } else if (ait.value() == QLatin1String("-o")) { - ignoreNext = true; - ait.deleteArg(); -#if defined(Q_OS_WIN32) - } else if (ait.value() == QLatin1String("-win32")) { -#elif defined(Q_OS_MAC) - } else if (ait.value() == QLatin1String("-macx")) { -#elif defined(Q_OS_QNX6) - } else if (ait.value() == QLatin1String("-qnx6")) { -#else - } else if (ait.value() == QLatin1String("-unix")) { -#endif - ait.deleteArg(); - } - } - ait.deleteArg(); // The .pro file is always the last arg -} - -/// This function extracts all the CONFIG+=debug, CONFIG+=release -static BaseQtVersion::QmakeBuildConfigs qmakeBuildConfigFromCmdArgs(QList<QMakeAssignment> *assignments, BaseQtVersion::QmakeBuildConfigs defaultBuildConfig) -{ - BaseQtVersion::QmakeBuildConfigs result = defaultBuildConfig; - QList<QMakeAssignment> oldAssignments = *assignments; - assignments->clear(); - foreach (const QMakeAssignment &qa, oldAssignments) { - if (qa.variable == QLatin1String("CONFIG")) { - QStringList values = qa.value.split(QLatin1Char(' ')); - QStringList newValues; - foreach (const QString &value, values) { - if (value == QLatin1String("debug")) { - if (qa.op == QLatin1String("+=")) - result = result | BaseQtVersion::DebugBuild; - else - result = result & ~BaseQtVersion::DebugBuild; - } else if (value == QLatin1String("release")) { - if (qa.op == QLatin1String("+=")) - result = result & ~BaseQtVersion::DebugBuild; - else - result = result | BaseQtVersion::DebugBuild; - } else if (value == QLatin1String("debug_and_release")) { - if (qa.op == QLatin1String("+=")) - result = result | BaseQtVersion::BuildAll; - else - result = result & ~BaseQtVersion::BuildAll; - } else { - newValues.append(value); - } - QMakeAssignment newQA = qa; - newQA.value = newValues.join(QLatin1Char(' ')); - if (!newValues.isEmpty()) - assignments->append(newQA); - } - } else { - assignments->append(qa); - } - } - return result; -} - } // namespace QtVersion |