void doSetupQtProfile(const QString &profileName, Settings *settings, const QtEnvironment &_qtEnvironment) { QtEnvironment qtEnvironment = _qtEnvironment; qtEnvironment.staticBuild = checkForStaticBuild(qtEnvironment); // determine whether user apps require C++11 if (qtEnvironment.qtConfigItems.contains(QLatin1String("c++11")) && qtEnvironment.staticBuild) qtEnvironment.configItems.append(QLatin1String("c++11")); Profile profile(profileName, settings); profile.removeProfile(); const QString settingsTemplate(QLatin1String("Qt.core.%1")); profile.setValue(settingsTemplate.arg(QLatin1String("config")), qtEnvironment.configItems); profile.setValue(settingsTemplate.arg(QLatin1String("qtConfig")), qtEnvironment.qtConfigItems); profile.setValue(settingsTemplate.arg(QLatin1String("binPath")), qtEnvironment.binaryPath); profile.setValue(settingsTemplate.arg(QLatin1String("libPath")), qtEnvironment.libraryPath); profile.setValue(settingsTemplate.arg(QLatin1String("pluginPath")), qtEnvironment.pluginPath); profile.setValue(settingsTemplate.arg(QLatin1String("incPath")), qtEnvironment.includePath); profile.setValue(settingsTemplate.arg(QLatin1String("mkspecPath")), qtEnvironment.mkspecPath); profile.setValue(settingsTemplate.arg(QLatin1String("docPath")), qtEnvironment.documentationPath); profile.setValue(settingsTemplate.arg(QLatin1String("version")), qtEnvironment.qtVersion); profile.setValue(settingsTemplate.arg(QLatin1String("libInfix")), qtEnvironment.qtLibInfix); profile.setValue(settingsTemplate.arg(QLatin1String("buildVariant")), qtEnvironment.buildVariant); // TODO: Remove in 1.5 profile.setValue(settingsTemplate.arg(QLatin1String("availableBuildVariants")), qtEnvironment.buildVariant); profile.setValue(settingsTemplate.arg(QLatin1String("staticBuild")), qtEnvironment.staticBuild); // Set the minimum operating system versions appropriate for this Qt version const QString windowsVersion = guessMinimumWindowsVersion(qtEnvironment); QString osxVersion, iosVersion, androidVersion; if (!windowsVersion.isEmpty()) { // Is target OS Windows? const Version qtVersion = Version(qtEnvironment.qtMajorVersion, qtEnvironment.qtMinorVersion, qtEnvironment.qtPatchVersion); qtEnvironment.entryPointLibsDebug = fillEntryPointLibs(qtEnvironment, qtVersion, true); qtEnvironment.entryPointLibsRelease = fillEntryPointLibs(qtEnvironment, qtVersion, false); } else if (qtEnvironment.mkspecPath.contains(QLatin1String("macx"))) { profile.setValue(settingsTemplate.arg(QLatin1String("frameworkBuild")), qtEnvironment.frameworkBuild); if (qtEnvironment.qtMajorVersion >= 5) { osxVersion = QLatin1String("10.6"); } else if (qtEnvironment.qtMajorVersion == 4 && qtEnvironment.qtMinorVersion >= 6) { QDir qconfigDir; if (qtEnvironment.frameworkBuild) { qconfigDir.setPath(qtEnvironment.libraryPath); qconfigDir.cd(QLatin1String("QtCore.framework/Headers")); } else { qconfigDir.setPath(qtEnvironment.includePath); qconfigDir.cd(QLatin1String("Qt")); } QFile qconfig(qconfigDir.absoluteFilePath(QLatin1String("qconfig.h"))); if (qconfig.open(QIODevice::ReadOnly)) { bool qtCocoaBuild = false; QTextStream ts(&qconfig); QString line; do { line = ts.readLine(); if (QRegExp(QLatin1String("\\s*#define\\s+QT_MAC_USE_COCOA\\s+1\\s*"), Qt::CaseSensitive).exactMatch(line)) { qtCocoaBuild = true; break; } } while (!line.isNull()); if (ts.status() == QTextStream::Ok) osxVersion = qtCocoaBuild ? QLatin1String("10.5") : QLatin1String("10.4"); } if (osxVersion.isEmpty()) { throw ErrorInfo(Internal::Tr::tr("Error reading qconfig.h; could not determine " "whether Qt is using Cocoa or Carbon")); } } if (qtEnvironment.qtConfigItems.contains(QLatin1String("c++11"))) osxVersion = QLatin1String("10.7"); } if (qtEnvironment.mkspecPath.contains(QLatin1String("ios")) && qtEnvironment.qtMajorVersion >= 5) iosVersion = QLatin1String("5.0"); if (qtEnvironment.mkspecPath.contains(QLatin1String("android"))) { if (qtEnvironment.qtMajorVersion >= 5) androidVersion = QLatin1String("2.3"); else if (qtEnvironment.qtMajorVersion == 4 && qtEnvironment.qtMinorVersion >= 8) androidVersion = QLatin1String("1.6"); // Necessitas } // ### TODO: wince, winphone, blackberry if (!windowsVersion.isEmpty()) profile.setValue(QLatin1String("cpp.minimumWindowsVersion"), windowsVersion); if (!osxVersion.isEmpty()) profile.setValue(QLatin1String("cpp.minimumOsxVersion"), osxVersion); if (!iosVersion.isEmpty()) profile.setValue(QLatin1String("cpp.minimumIosVersion"), iosVersion); if (!androidVersion.isEmpty()) profile.setValue(QLatin1String("cpp.minimumAndroidVersion"), androidVersion); createModules(profile, settings, qtEnvironment); }
// Every unix must have its own. It's a standard. Here is AIX. void qt_parseQconfig(QList<QPrinterDescription> *printers) { QFile qconfig(QLatin1String("/etc/qconfig")); if (!qconfig.open(QIODevice::ReadOnly)) return; QTextStream ts(&qconfig); QString line; QString stanzaName; // either a queue or a device name bool up = true; // queue up? default true, can be false QString remoteHost; // null if local QString deviceName; // null if remote QRegExp newStanza(QLatin1String("^[0-z\\-]*:$")); // our basic strategy here is to process each line, detecting new // stanzas. each time we see a new stanza, we check if the // previous stanza was a valid queue for a) a remote printer or b) // a local printer. if it wasn't, we assume that what we see is // the start of the first stanza, or that the previous stanza was // a device stanza, or that there is some syntax error (we don't // report those). do { line = ts.readLine(); bool indented = line[0].isSpace(); line = line.simplified(); int i = line.indexOf(QLatin1Char('=')); if (indented && i != -1) { // line in stanza QString variable = line.left(i).simplified(); QString value=line.mid(i+1, line.length()).simplified(); if (variable == QLatin1String("device")) deviceName = value; else if (variable == QLatin1String("host")) remoteHost = value; else if (variable == QLatin1String("up")) up = !(value.toLower() == QLatin1String("false")); } else if (line[0] == QLatin1Char('*')) { // comment // nothing to do } else if (ts.atEnd() || // end of file, or beginning of new stanza (!indented && line.contains(newStanza))) { if (up && stanzaName.length() > 0 && stanzaName.length() < 21) { if (remoteHost.length()) // remote printer qt_perhapsAddPrinter(printers, stanzaName, remoteHost, QString()); else if (deviceName.length()) // local printer qt_perhapsAddPrinter(printers, stanzaName, QString(), QString()); } line.chop(1); if (line.length() >= 1 && line.length() <= 20) stanzaName = line; up = true; remoteHost.clear(); deviceName.clear(); } else { // syntax error? ignore. } } while (!ts.atEnd()); }