QString Option::fixString(QString string, uchar flags) { //const QString orig_string = string; static QHash<FixStringCacheKey, QString> *cache = 0; if(!cache) { cache = new QHash<FixStringCacheKey, QString>; qmakeAddCacheClear(qmakeDeleteCacheClear<QHash<FixStringCacheKey, QString> >, (void**)&cache); } FixStringCacheKey cacheKey(string, flags); QHash<FixStringCacheKey, QString>::const_iterator it = cache->constFind(cacheKey); if (it != cache->constEnd()) { //qDebug() << "Fix (cached) " << orig_string << "->" << it.value(); return it.value(); } //fix the environment variables if(flags & Option::FixEnvVars) { int rep; static QRegExp reg_var("\\$\\(.*\\)"); reg_var.setMinimal(true); while((rep = reg_var.indexIn(string)) != -1) string.replace(rep, reg_var.matchedLength(), QString::fromLocal8Bit(qgetenv(string.mid(rep + 2, reg_var.matchedLength() - 3).toLatin1().constData()).constData())); } //canonicalize it (and treat as a path) if(flags & Option::FixPathCanonicalize) { #if 0 string = QFileInfo(string).canonicalFilePath(); #endif string = QDir::cleanPath(string); } if(string.length() > 2 && string[0].isLetter() && string[1] == QLatin1Char(':')) string[0] = string[0].toLower(); //fix separators Q_ASSERT(!((flags & Option::FixPathToLocalSeparators) && (flags & Option::FixPathToTargetSeparators))); if(flags & Option::FixPathToLocalSeparators) { #if defined(Q_OS_WIN32) string = string.replace('/', '\\'); #else string = string.replace('\\', '/'); #endif } else if(flags & Option::FixPathToTargetSeparators) { string = string.replace('/', Option::dir_sep).replace('\\', Option::dir_sep); } if ((string.startsWith("\"") && string.endsWith("\"")) || (string.startsWith("\'") && string.endsWith("\'"))) string = string.mid(1, string.length()-2); //cache //qDebug() << "Fix" << orig_string << "->" << string; cache->insert(cacheKey, string); return string; }
const char *qmake_version() { static char *ret = NULL; if(ret) return ret; ret = (char *)malloc(15); qmakeAddCacheClear(qmakeFreeCacheClear, (void**)&ret); #if defined(_MSC_VER) && _MSC_VER >= 1400 sprintf_s(ret, 15, "%d.%02d%c", QMAKE_VERSION_MAJOR, QMAKE_VERSION_MINOR, 'a' + QMAKE_VERSION_PATCH); #else sprintf(ret, "%d.%02d%c", QMAKE_VERSION_MAJOR, QMAKE_VERSION_MINOR, 'a' + QMAKE_VERSION_PATCH); #endif return ret; }