diff --git a/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp b/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp index 49d8ccd8a30b8fae206084f729fca3d942663e92..fcbff3f5dcc7628ca43e40bc4a2fd15790270ad8 100644 --- a/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp +++ b/src/plugins/qt4projectmanager/gdbmacrosbuildstep.cpp @@ -62,72 +62,105 @@ bool GdbMacrosBuildStep::init(const QString &buildConfiguration) void GdbMacrosBuildStep::run(QFutureInterface<bool> & fi) { - // TODO CONFIG handling + QVariant v = value("clean"); + if (v.isNull() || v.toBool() == false) { + // Normal run + QString dumperPath = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>() + ->resourcePath() + "/gdbmacros/"; + QStringList files; + files << "gdbmacros.cpp" + << "gdbmacros.pro"; + + + QString destDir = m_buildDirectory + "/qtc-gdbmacros/"; + QDir dir; + dir.mkpath(destDir); + foreach (const QString &file, files) { + QFile destination(destDir + file); + if (destination.exists()) + destination.remove(); + QFile::copy(dumperPath + file, destDir + file); + } - QString dumperPath = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>() - ->resourcePath() + "/gdbmacros/"; - QStringList files; - files << "gdbmacros.cpp" - << "gdbmacros.pro"; + Qt4Project *qt4Project = static_cast<Qt4Project *>(project()); + + QProcess qmake; + qmake.setEnvironment(qt4Project->environment(m_buildConfiguration).toStringList()); + qmake.setWorkingDirectory(destDir); + QStringList configarguments; + QStringList makeArguments; + + // Find qmake step... + QMakeStep *qmakeStep = qt4Project->qmakeStep(); + // Find out which configuration is used in this build configuration + // and what kind of CONFIG we need to pass to qmake for that + if (qmakeStep->value(m_buildConfiguration, "buildConfiguration").isValid()) { + QtVersion::QmakeBuildConfig defaultBuildConfiguration = qt4Project->qtVersion(m_buildConfiguration)->defaultBuildConfig(); + QtVersion::QmakeBuildConfig projectBuildConfiguration = QtVersion::QmakeBuildConfig(qmakeStep->value(m_buildConfiguration, "buildConfiguration").toInt()); + if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll)) + configarguments << "CONFIG-=debug_and_release"; + if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll)) + configarguments << "CONFIG+=debug_and_release"; + if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild)) + configarguments << "CONFIG+=release"; + if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild)) + configarguments << "CONFIG+=debug"; + if (projectBuildConfiguration & QtVersion::BuildAll) + makeArguments << (projectBuildConfiguration & QtVersion::DebugBuild ? "debug" : "release"); + + } else { + // Old style with CONFIG+=debug_and_release + configarguments << "CONFIG+=debug_and_release"; + const MakeStep *ms = qt4Project->makeStep(); + QStringList makeargs = ms->value(m_buildConfiguration, "makeargs").toStringList(); + if (makeargs.contains("debug")) { + makeArguments << "debug"; + } else if (makeargs.contains("release")) { + makeArguments << "release"; + } + } + QString mkspec = qt4Project->qtVersion(m_buildConfiguration)->mkspec(); + qmake.start(m_qmake, QStringList()<<"-spec"<<mkspec<<configarguments<<"gdbmacros.pro"); + qmake.waitForFinished(); - QString destDir = m_buildDirectory + "/qtc-gdbmacros/"; - QDir dir; - dir.mkpath(destDir); - foreach (const QString &file, files) { - QFile destination(destDir + file); - if (destination.exists()) - destination.remove(); - QFile::copy(dumperPath + file, destDir + file); - } - Qt4Project *qt4Project = static_cast<Qt4Project *>(project()); - - QProcess qmake; - qmake.setEnvironment(qt4Project->environment(m_buildConfiguration).toStringList()); - qmake.setWorkingDirectory(destDir); - QStringList configarguments; - QStringList makeArguments; - - // Find qmake step... - QMakeStep *qmakeStep = qt4Project->qmakeStep(); - // Find out which configuration is used in this build configuration - // and what kind of CONFIG we need to pass to qmake for that - if (qmakeStep->value(m_buildConfiguration, "buildConfiguration").isValid()) { - QtVersion::QmakeBuildConfig defaultBuildConfiguration = qt4Project->qtVersion(m_buildConfiguration)->defaultBuildConfig(); - QtVersion::QmakeBuildConfig projectBuildConfiguration = QtVersion::QmakeBuildConfig(qmakeStep->value(m_buildConfiguration, "buildConfiguration").toInt()); - if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll)) - configarguments << "CONFIG-=debug_and_release"; - if (!(defaultBuildConfiguration & QtVersion::BuildAll) && (projectBuildConfiguration & QtVersion::BuildAll)) - configarguments << "CONFIG+=debug_and_release"; - if ((defaultBuildConfiguration & QtVersion::DebugBuild) && !(projectBuildConfiguration & QtVersion::DebugBuild)) - configarguments << "CONFIG+=release"; - if (!(defaultBuildConfiguration & QtVersion::DebugBuild) && (projectBuildConfiguration & QtVersion::DebugBuild)) - configarguments << "CONFIG+=debug"; - if (projectBuildConfiguration & QtVersion::BuildAll) - makeArguments << (projectBuildConfiguration & QtVersion::DebugBuild ? "debug" : "release"); + qmake.start(qt4Project->qtVersion(m_buildConfiguration)->makeCommand(), makeArguments); + qmake.waitForFinished(); + fi.reportResult(true); } else { - // Old style with CONFIG+=debug_and_release - configarguments << "CONFIG+=debug_and_release"; - const MakeStep *ms = qt4Project->makeStep(); - QStringList makeargs = ms->value(m_buildConfiguration, "makeargs").toStringList(); - if (makeargs.contains("debug")) { - makeArguments << "debug"; - } else if (makeargs.contains("release")) { - makeArguments << "release"; + // Clean step, we want to remove the directory + QString destDir = m_buildDirectory + "/qtc-gdbmacros/"; + Qt4Project *qt4Project = static_cast<Qt4Project *>(project()); + + QProcess make; + make.setEnvironment(qt4Project->environment(m_buildConfiguration).toStringList()); + make.setWorkingDirectory(destDir); + make.start(qt4Project->qtVersion(m_buildConfiguration)->makeCommand(), QStringList()<<"distclean"); + make.waitForFinished(); + + QStringList files; + files << "gdbmacros.cpp" + << "gdbmacros.pro"; + + QStringList directories; + directories << "debug" + << "release"; + + foreach(const QString &file, files) { + QFile destination(destDir + file); + destination.remove(); } - } - - QString mkspec = qt4Project->qtVersion(m_buildConfiguration)->mkspec(); - qmake.start(m_qmake, QStringList()<<"-spec"<<mkspec<<configarguments<<"gdbmacros.pro"); - qmake.waitForFinished(); + foreach(const QString &dir, directories) { + QDir destination(destDir + dir); + destination.rmdir(destDir + dir); + } - qmake.start(qt4Project->qtVersion(m_buildConfiguration)->makeCommand(), makeArguments); - qmake.waitForFinished(); - - fi.reportResult(true); + QDir(destDir).rmdir(destDir); + fi.reportResult(true); + } } QString GdbMacrosBuildStep::name() diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 7af448e233173f92f0ef9bd97459eef0f8dca814..611d4930b407c062d9ed982442e521eb48440fd4 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -610,9 +610,13 @@ void Qt4Project::addDefaultBuild() makeStep = new MakeStep(this); insertBuildStep(2, makeStep); + GdbMacrosBuildStep *gdbmacrosCleanStep = new GdbMacrosBuildStep(this); + gdbmacrosCleanStep->setValue("clean", true); + insertCleanStep(0, gdbmacrosCleanStep); + MakeStep* cleanStep = new MakeStep(this); cleanStep->setValue("clean", true); - insertCleanStep(0, cleanStep); + insertCleanStep(1, cleanStep); ProjectLoadWizard wizard(this); wizard.execDialog(); @@ -629,6 +633,10 @@ void Qt4Project::addDefaultBuild() if (v.isValid() && v.toBool()) { GdbMacrosBuildStep *gdbmacrostep = new GdbMacrosBuildStep(this); insertBuildStep(0, gdbmacrostep); + + GdbMacrosBuildStep *gdbmacrosCleanStep = new GdbMacrosBuildStep(this); + gdbmacrosCleanStep ->setValue("clean", true); + insertCleanStep(0, gdbmacrosCleanStep ); break; } }