void QtOptionsPageWidget::showEnvironmentPage(QTreeWidgetItem *item) { if (item) { int index = indexForTreeItem(item); QSharedPointerQtVersion qtVersion; if (index >= 0) qtVersion = m_versions.at(index); if (qtVersion.isNull() || !qtVersion->isValid()) { m_versionUi->errorLabel->setText(""); makeS60Visible(false); return; } ProjectExplorer::Abi qtAbi = qtVersion->qtAbis().at(0); if (qtAbi.os() == ProjectExplorer::Abi::SymbianOS) { makeS60Visible(true); m_versionUi->s60SDKPath->setPath(QDir::toNativeSeparators(m_versions.at(index)->s60SDKDirectory())); m_versionUi->sbsV2Path->setPath(m_versions.at(index)->sbsV2Directory()); m_versionUi->sbsV2Path->setEnabled(m_versions.at(index)->isBuildWithSymbianSbsV2()); } else { makeS60Visible(false); } m_versionUi->errorLabel->setText(m_versions.at(index)->description()); } else { makeS60Visible(false); } }
QStringList QmakeBuildConfiguration::deduceArgumnetsForTargetAbi(const ProjectExplorer::Abi &targetAbi, const BaseQtVersion *version) { QStringList arguments; if ((targetAbi.os() == ProjectExplorer::Abi::MacOS) && (targetAbi.binaryFormat() == ProjectExplorer::Abi::MachOFormat)) { if (targetAbi.architecture() == ProjectExplorer::Abi::X86Architecture) { if (targetAbi.wordWidth() == 32) arguments << QLatin1String("CONFIG+=x86"); else if (targetAbi.wordWidth() == 64) arguments << QLatin1String("CONFIG+=x86_64"); const char IOSQT[] = "Qt4ProjectManager.QtVersion.Ios"; if (version && version->type() == QLatin1String(IOSQT)) // ugly, we can't distinguish between ios and mac toolchains arguments << QLatin1String("CONFIG+=iphonesimulator"); } else if (targetAbi.architecture() == ProjectExplorer::Abi::PowerPCArchitecture) { if (targetAbi.wordWidth() == 32) arguments << QLatin1String("CONFIG+=ppc"); else if (targetAbi.wordWidth() == 64) arguments << QLatin1String("CONFIG+=ppc64"); } else if (targetAbi.architecture() == ProjectExplorer::Abi::ArmArchitecture) { arguments << QLatin1String("CONFIG+=iphoneos"); } } return arguments; }
static QStringList targetOSList(const ProjectExplorer::Abi &abi, const ProjectExplorer::Kit *k) { const Core::Id device = ProjectExplorer::DeviceTypeKitInformation::deviceTypeId(k); QStringList os; switch (abi.os()) { case ProjectExplorer::Abi::WindowsOS: if (device == WINRT_DEVICE_TYPE_LOCAL || device == WINRT_DEVICE_TYPE_PHONE || device == WINRT_DEVICE_TYPE_EMULATOR) { os << QLatin1String("winrt"); } else if (abi.osFlavor() == ProjectExplorer::Abi::WindowsCEFlavor) { os << QLatin1String("windowsce"); } os << QLatin1String("windows"); break; case ProjectExplorer::Abi::MacOS: if (device == DESKTOP_DEVICE_TYPE) os << QLatin1String("osx"); else if (device == IOS_DEVICE_TYPE) os << QLatin1String("ios"); else if (device == IOS_SIMULATOR_TYPE) os << QLatin1String("ios-simulator") << QLatin1String("ios"); os << QLatin1String("darwin") << QLatin1String("bsd") << QLatin1String("unix"); break; case ProjectExplorer::Abi::LinuxOS: if (abi.osFlavor() == ProjectExplorer::Abi::AndroidLinuxFlavor) os << QLatin1String("android"); os << QLatin1String("linux") << QLatin1String("unix"); break; case ProjectExplorer::Abi::BsdOS: switch (abi.osFlavor()) { case ProjectExplorer::Abi::FreeBsdFlavor: os << QLatin1String("freebsd"); break; case ProjectExplorer::Abi::NetBsdFlavor: os << QLatin1String("netbsd"); break; case ProjectExplorer::Abi::OpenBsdFlavor: os << QLatin1String("openbsd"); break; default: break; } os << QLatin1String("bsd") << QLatin1String("unix"); break; case ProjectExplorer::Abi::UnixOS: if (device == QNX_BB_OS_TYPE) os << QLatin1String("blackberry") << QLatin1String("qnx"); else if (device == QNX_QNX_OS_TYPE) os << QLatin1String("qnx"); else if (abi.osFlavor() == ProjectExplorer::Abi::SolarisUnixFlavor) os << QLatin1String("solaris"); os << QLatin1String("unix"); break; default: break; } return os; }
/// /// moreArguments, /// -unix for Maemo /// QMAKE_VAR_QMLJSDEBUGGER_PATH QStringList QMakeStep::deducedArguments() { QStringList arguments; ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(target()->profile()); ProjectExplorer::Abi targetAbi; if (tc) targetAbi = tc->targetAbi(); #if defined(Q_OS_WIN) || defined(Q_OS_MAC) if ((targetAbi.osFlavor() == ProjectExplorer::Abi::HarmattanLinuxFlavor || targetAbi.osFlavor() == ProjectExplorer::Abi::MaemoLinuxFlavor)) arguments << QLatin1String("-unix"); #endif // explicitly add architecture to CONFIG if ((targetAbi.os() == ProjectExplorer::Abi::MacOS) && (targetAbi.binaryFormat() == ProjectExplorer::Abi::MachOFormat)) { if (targetAbi.architecture() == ProjectExplorer::Abi::X86Architecture) { if (targetAbi.wordWidth() == 32) arguments << QLatin1String("CONFIG+=x86"); else if (targetAbi.wordWidth() == 64) arguments << QLatin1String("CONFIG+=x86_64"); } else if (targetAbi.architecture() == ProjectExplorer::Abi::PowerPCArchitecture) { if (targetAbi.wordWidth() == 32) arguments << QLatin1String("CONFIG+=ppc"); else if (targetAbi.wordWidth() == 64) arguments << QLatin1String("CONFIG+=ppc64"); } } QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target()->profile()); if (linkQmlDebuggingLibrary() && version) { if (!version->needsQmlDebuggingLibrary()) { // This Qt version has the QML debugging services built in, however // they still need to be enabled at compile time arguments << (version->qtVersion().majorVersion >= 5 ? QLatin1String(Constants::QMAKEVAR_DECLARATIVE_DEBUG5) : QLatin1String(Constants::QMAKEVAR_DECLARATIVE_DEBUG4)); } else { const QString qmlDebuggingHelperLibrary = version->qmlDebuggingHelperLibrary(true); if (!qmlDebuggingHelperLibrary.isEmpty()) { // Do not turn debugger path into native path separators: Qmake does not like that! const QString debuggingHelperPath = QFileInfo(qmlDebuggingHelperLibrary).dir().path(); arguments << QLatin1String(Constants::QMAKEVAR_QMLJSDEBUGGER_PATH) + QLatin1Char('=') + debuggingHelperPath; } } } return arguments; }
/// /// moreArguments, /// iphoneos/iphonesimulator for ios /// QMAKE_VAR_QMLJSDEBUGGER_PATH QStringList QMakeStep::deducedArguments() { QStringList arguments; ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target()->kit()); ProjectExplorer::Abi targetAbi; if (tc) targetAbi = tc->targetAbi(); // explicitly add architecture to CONFIG if ((targetAbi.os() == ProjectExplorer::Abi::MacOS) && (targetAbi.binaryFormat() == ProjectExplorer::Abi::MachOFormat)) { if (targetAbi.architecture() == ProjectExplorer::Abi::X86Architecture) { if (targetAbi.wordWidth() == 32) arguments << QLatin1String("CONFIG+=x86"); else if (targetAbi.wordWidth() == 64) arguments << QLatin1String("CONFIG+=x86_64"); const char IOSQT[] = "Qt4ProjectManager.QtVersion.Ios"; // from Ios::Constants (include header?) QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); if (version && version->type() == QLatin1String(IOSQT)) arguments << QLatin1String("CONFIG+=iphonesimulator"); } else if (targetAbi.architecture() == ProjectExplorer::Abi::PowerPCArchitecture) { if (targetAbi.wordWidth() == 32) arguments << QLatin1String("CONFIG+=ppc"); else if (targetAbi.wordWidth() == 64) arguments << QLatin1String("CONFIG+=ppc64"); } else if (targetAbi.architecture() == ProjectExplorer::Abi::ArmArchitecture) { arguments << QLatin1String("CONFIG+=iphoneos"); } } QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(target()->kit()); if (linkQmlDebuggingLibrary() && version) { arguments << QLatin1String(Constants::QMAKEVAR_QUICK1_DEBUG); if (version->qtVersion().majorVersion >= 5) arguments << QLatin1String(Constants::QMAKEVAR_QUICK2_DEBUG); } return arguments; }
void QbsManager::addProfileFromKit(const ProjectExplorer::Kit *k) { QStringList usedProfileNames = profileNames(); const QString name = ProjectExplorer::Project::makeUnique( QString::fromLatin1("qtc_") + k->fileSystemFriendlyName(), usedProfileNames); setProfileForKit(name, k); QVariantMap data; QtSupport::BaseQtVersion *qt = QtSupport::QtKitInformation::qtVersion(k); if (qt) { data.insert(QLatin1String(QTCORE_BINPATH), qt->binPath().toUserOutput()); QStringList builds; if (qt->hasDebugBuild()) builds << QLatin1String("debug"); if (qt->hasReleaseBuild()) builds << QLatin1String("release"); data.insert(QLatin1String(QTCORE_BUILDVARIANT), builds); data.insert(QLatin1String(QTCORE_DOCPATH), qt->docsPath().toUserOutput()); data.insert(QLatin1String(QTCORE_INCPATH), qt->headerPath().toUserOutput()); data.insert(QLatin1String(QTCORE_LIBPATH), qt->libraryPath().toUserOutput()); Utils::FileName mkspecPath = qt->mkspecsPath(); mkspecPath.appendPath(qt->mkspec().toString()); data.insert(QLatin1String(QTCORE_MKSPEC), mkspecPath.toUserOutput()); data.insert(QLatin1String(QTCORE_NAMESPACE), qt->qtNamespace()); data.insert(QLatin1String(QTCORE_LIBINFIX), qt->qtLibInfix()); data.insert(QLatin1String(QTCORE_VERSION), qt->qtVersionString()); if (qt->isFrameworkBuild()) data.insert(QLatin1String(QTCORE_FRAMEWORKBUILD), true); } if (ProjectExplorer::SysRootKitInformation::hasSysRoot(k)) data.insert(QLatin1String(QBS_SYSROOT), ProjectExplorer::SysRootKitInformation::sysRoot(k).toUserOutput()); ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(k); if (tc) { // FIXME/CLARIFY: How to pass the sysroot? ProjectExplorer::Abi targetAbi = tc->targetAbi(); QString architecture = ProjectExplorer::Abi::toString(targetAbi.architecture()); if (targetAbi.wordWidth() == 64) architecture.append(QLatin1String("_64")); data.insert(QLatin1String(QBS_ARCHITECTURE), architecture); if (targetAbi.endianness() == ProjectExplorer::Abi::BigEndian) data.insert(QLatin1String(QBS_ENDIANNESS), QLatin1String("big")); else data.insert(QLatin1String(QBS_ENDIANNESS), QLatin1String("little")); if (targetAbi.os() == ProjectExplorer::Abi::WindowsOS) { data.insert(QLatin1String(QBS_TARGETOS), QLatin1String("windows")); data.insert(QLatin1String(QBS_TOOLCHAIN), targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMSysFlavor ? QStringList() << QLatin1String("mingw") << QLatin1String("gcc") : QStringList() << QLatin1String("msvc")); } else if (targetAbi.os() == ProjectExplorer::Abi::MacOS) { data.insert(QLatin1String(QBS_TARGETOS), QStringList() << QLatin1String("osx") << QLatin1String("darwin") << QLatin1String("unix")); if (tc->type() != QLatin1String("clang")) { data.insert(QLatin1String(QBS_TOOLCHAIN), QLatin1String("gcc")); } else { data.insert(QLatin1String(QBS_TOOLCHAIN), QStringList() << QLatin1String("clang") << QLatin1String("llvm") << QLatin1String("gcc")); } } else if (targetAbi.os() == ProjectExplorer::Abi::LinuxOS) { data.insert(QLatin1String(QBS_TARGETOS), QStringList() << QLatin1String("linux") << QLatin1String("unix")); if (tc->type() != QLatin1String("clang")) { data.insert(QLatin1String(QBS_TOOLCHAIN), QLatin1String("gcc")); } else { data.insert(QLatin1String(QBS_TOOLCHAIN), QStringList() << QLatin1String("clang") << QLatin1String("llvm") << QLatin1String("gcc")); } } Utils::FileName cxx = tc->compilerCommand(); data.insert(QLatin1String(CPP_TOOLCHAINPATH), cxx.toFileInfo().absolutePath()); data.insert(QLatin1String(CPP_COMPILERNAME), cxx.toFileInfo().fileName()); } addProfile(name, data); }
ProjectExplorer::Abi QmlProjectRunConfiguration::abi() const { ProjectExplorer::Abi hostAbi = ProjectExplorer::Abi::hostAbi(); return ProjectExplorer::Abi(hostAbi.architecture(), hostAbi.os(), hostAbi.osFlavor(), ProjectExplorer::Abi::RuntimeQmlFormat, hostAbi.wordWidth()); }
void CMakeRunPage::initializePage() { if (m_mode == Initial) { m_complete = m_cmakeWizard->existsUpToDateXmlFile(); m_buildDirectory = m_cmakeWizard->buildDirectory(); if (m_cmakeWizard->existsUpToDateXmlFile()) { m_descriptionLabel->setText( tr("The directory %1 already contains a cbp file, which is recent enough. " "You can pass special arguments or change the used tool chain here and rerun CMake. " "Or simply finish the wizard directly.").arg(m_buildDirectory)); } else { m_descriptionLabel->setText( tr("The directory %1 does not contain a cbp file. Qt Creator needs to create this file by running CMake. " "Some projects require command line arguments to the initial CMake call.").arg(m_buildDirectory)); } } else if (m_mode == CMakeRunPage::NeedToUpdate) { m_descriptionLabel->setText(tr("The directory %1 contains an outdated .cbp file. Qt " "Creator needs to update this file by running CMake. " "If you want to add additional command line arguments, " "add them below. Note that CMake remembers command " "line arguments from the previous runs.").arg(m_buildDirectory)); } else if (m_mode == CMakeRunPage::Recreate) { m_descriptionLabel->setText(tr("The directory %1 specified in a build-configuration, " "does not contain a cbp file. Qt Creator needs to " "recreate this file, by running CMake. " "Some projects require command line arguments to " "the initial CMake call. Note that CMake remembers command " "line arguments from the previous runs.").arg(m_buildDirectory)); } else if (m_mode == CMakeRunPage::ChangeDirectory) { m_buildDirectory = m_cmakeWizard->buildDirectory(); m_descriptionLabel->setText(tr("Qt Creator needs to run CMake in the new build directory. " "Some projects require command line arguments to the " "initial CMake call.")); } else if (m_mode == CMakeRunPage::WantToUpdate) { m_descriptionLabel->setText(tr("Refreshing cbp file in %1.").arg(m_buildDirectory)); } // Try figuring out generator and toolchain from CMakeCache.txt QString cachedGenerator; QString cmakeCxxCompiler; QFile fi(m_buildDirectory + "/CMakeCache.txt"); if (fi.exists()) { // Cache exists, then read it... if (fi.open(QIODevice::ReadOnly | QIODevice::Text)) { while (!fi.atEnd()) { QString line = fi.readLine(); if (line.startsWith("CMAKE_GENERATOR:INTERNAL=")) { int splitpos = line.indexOf('='); if (splitpos != -1) cachedGenerator = line.mid(splitpos + 1).trimmed(); } if (line.startsWith("CMAKE_CXX_COMPILER:FILEPATH=")) { int splitpos = line.indexOf("="); if (splitpos != -1) cmakeCxxCompiler = line.mid(splitpos +1).trimmed(); } if (!cachedGenerator.isEmpty() && !cmakeCxxCompiler.isEmpty()) break; } } } // Build the list of generators/toolchains we want to offer // restrict toolchains based on CMAKE_CXX_COMPILER ? Q_UNUSED(cmakeCxxCompiler); m_generatorComboBox->clear(); bool hasCodeBlocksGenerator = m_cmakeWizard->cmakeManager()->hasCodeBlocksMsvcGenerator(); QList<ProjectExplorer::Profile *> profileList = ProjectExplorer::ProfileManager::instance()->profiles(); foreach (ProjectExplorer::Profile *p, profileList) { QVariant profileVariant = qVariantFromValue(static_cast<void *>(p)); ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(p); if (!tc) continue; ProjectExplorer::Abi targetAbi = tc->targetAbi(); if (targetAbi.os() == ProjectExplorer::Abi::WindowsOS) { if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2005Flavor || targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2008Flavor || targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMsvc2010Flavor) { if (hasCodeBlocksGenerator && (cachedGenerator.isEmpty() || cachedGenerator == "NMake Makefiles")) m_generatorComboBox->addItem(tr("NMake Generator (%1)").arg(p->displayName()), profileVariant); } else if (targetAbi.osFlavor() == ProjectExplorer::Abi::WindowsMSysFlavor) { if (cachedGenerator.isEmpty() || cachedGenerator == "MinGW Makefiles") m_generatorComboBox->addItem(tr("MinGW Generator (%1)").arg(p->displayName()), profileVariant); } } else { // Non windows if (cachedGenerator.isEmpty() || cachedGenerator == "Unix Makefiles") m_generatorComboBox->addItem(tr("Unix Generator (%1)").arg(p->displayName()), profileVariant); } }