| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | /**************************************************************************
 | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** This file is part of Qt Creator | 
					
						
							|  |  |  | ** | 
					
						
							| 
									
										
										
										
											2012-01-26 18:33:46 +01:00
										 |  |  | ** Copyright (c) 2012 Nokia Corporation and/or its subsidiary(-ies). | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2012-07-19 12:26:56 +02:00
										 |  |  | ** Contact: http://www.qt-project.org/
 | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | ** | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** GNU Lesser General Public License Usage | 
					
						
							|  |  |  | ** | 
					
						
							| 
									
										
										
										
											2011-04-13 08:42:33 +02:00
										 |  |  | ** This file may be used under the terms of the GNU Lesser General Public | 
					
						
							|  |  |  | ** License version 2.1 as published by the Free Software Foundation and | 
					
						
							|  |  |  | ** appearing in the file LICENSE.LGPL included in the packaging of this file. | 
					
						
							|  |  |  | ** Please review the following information to ensure the GNU Lesser General | 
					
						
							|  |  |  | ** Public License version 2.1 requirements will be met: | 
					
						
							|  |  |  | ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | ** | 
					
						
							| 
									
										
										
										
											2010-12-17 16:01:08 +01:00
										 |  |  | ** In addition, as a special exception, Nokia gives you certain additional | 
					
						
							| 
									
										
										
										
											2011-04-13 08:42:33 +02:00
										 |  |  | ** rights. These rights are described in the Nokia Qt LGPL Exception | 
					
						
							| 
									
										
										
										
											2010-12-17 16:01:08 +01:00
										 |  |  | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | 
					
						
							|  |  |  | ** | 
					
						
							| 
									
										
										
										
											2011-04-13 08:42:33 +02:00
										 |  |  | ** Other Usage | 
					
						
							|  |  |  | ** | 
					
						
							|  |  |  | ** Alternatively, this file may be used in accordance with the terms and | 
					
						
							|  |  |  | ** conditions contained in a signed written agreement between you and Nokia. | 
					
						
							|  |  |  | ** | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | ** | 
					
						
							|  |  |  | **************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "qt4buildconfiguration.h"
 | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 13:29:45 +01:00
										 |  |  | #include "qt4project.h"
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | #include "qt4projectconfigwidget.h"
 | 
					
						
							| 
									
										
										
										
											2010-02-25 16:51:27 +01:00
										 |  |  | #include "qt4projectmanagerconstants.h"
 | 
					
						
							| 
									
										
										
										
											2010-03-17 17:45:33 +01:00
										 |  |  | #include "qt4nodes.h"
 | 
					
						
							|  |  |  | #include "qmakestep.h"
 | 
					
						
							|  |  |  | #include "makestep.h"
 | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | #include <utils/qtcassert.h>
 | 
					
						
							| 
									
										
										
										
											2010-10-19 11:14:03 +02:00
										 |  |  | #include <utils/qtcprocess.h>
 | 
					
						
							| 
									
										
										
										
											2010-09-09 17:00:26 +02:00
										 |  |  | #include <limits>
 | 
					
						
							| 
									
										
										
										
											2010-07-16 14:00:41 +02:00
										 |  |  | #include <projectexplorer/buildsteplist.h>
 | 
					
						
							|  |  |  | #include <projectexplorer/projectexplorerconstants.h>
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | #include <projectexplorer/target.h>
 | 
					
						
							| 
									
										
										
										
											2011-05-30 16:45:32 +02:00
										 |  |  | #include <projectexplorer/toolchain.h>
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | #include <projectexplorer/profileinformation.h>
 | 
					
						
							|  |  |  | #include <qtsupport/qtsupportconstants.h>
 | 
					
						
							| 
									
										
										
										
											2011-05-20 21:40:53 +02:00
										 |  |  | #include <qtsupport/qtversionfactory.h>
 | 
					
						
							|  |  |  | #include <qtsupport/baseqtversion.h>
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | #include <qtsupport/qtprofileinformation.h>
 | 
					
						
							| 
									
										
										
										
											2011-08-18 16:46:44 +02:00
										 |  |  | #include <qtsupport/qtversionmanager.h>
 | 
					
						
							| 
									
										
										
										
											2012-02-15 10:42:41 +01:00
										 |  |  | #include <QDebug>
 | 
					
						
							| 
									
										
										
										
											2010-02-19 10:51:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-15 10:42:41 +01:00
										 |  |  | #include <QInputDialog>
 | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | using namespace Qt4ProjectManager; | 
					
						
							|  |  |  | using namespace Qt4ProjectManager::Internal; | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | using namespace ProjectExplorer; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace { | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  | const char * const QT4_BC_ID("Qt4ProjectManager.Qt4BuildConfiguration"); | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  | const char * const USE_SHADOW_BUILD_KEY("Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild"); | 
					
						
							|  |  |  | const char * const BUILD_DIRECTORY_KEY("Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory"); | 
					
						
							|  |  |  | const char * const BUILD_CONFIGURATION_KEY("Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration"); | 
					
						
							| 
									
										
										
										
											2010-01-19 13:41:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-19 16:33:44 +01:00
										 |  |  | enum { debug = 0 }; | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | Qt4BuildConfiguration::Qt4BuildConfiguration(Target *target) : | 
					
						
							| 
									
										
										
										
											2012-03-15 17:17:40 +01:00
										 |  |  |     BuildConfiguration(target, Core::Id(QT4_BC_ID)), | 
					
						
							| 
									
										
										
										
											2010-03-25 11:55:29 +01:00
										 |  |  |     m_shadowBuild(true), | 
					
						
							| 
									
										
										
										
											2011-01-19 15:46:01 +01:00
										 |  |  |     m_isEnabled(false), | 
					
						
							| 
									
										
										
										
											2010-01-13 18:00:02 +01:00
										 |  |  |     m_qmakeBuildConfiguration(0), | 
					
						
							| 
									
										
										
										
											2012-05-04 16:25:41 +03:00
										 |  |  |     m_subNodeBuild(0), | 
					
						
							|  |  |  |     m_fileNodeBuild(0) | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  |     ctor(); | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | Qt4BuildConfiguration::Qt4BuildConfiguration(Target *target, const Core::Id id) : | 
					
						
							| 
									
										
										
										
											2010-02-08 15:50:06 +01:00
										 |  |  |     BuildConfiguration(target, id), | 
					
						
							| 
									
										
										
										
											2010-03-25 11:55:29 +01:00
										 |  |  |     m_shadowBuild(true), | 
					
						
							| 
									
										
										
										
											2011-01-19 15:46:01 +01:00
										 |  |  |     m_isEnabled(false), | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  |     m_qmakeBuildConfiguration(0), | 
					
						
							| 
									
										
										
										
											2012-05-04 16:25:41 +03:00
										 |  |  |     m_subNodeBuild(0), | 
					
						
							|  |  |  |     m_fileNodeBuild(0) | 
					
						
							| 
									
										
										
										
											2009-12-08 12:21:11 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  |     ctor(); | 
					
						
							| 
									
										
										
										
											2009-12-08 12:21:11 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | Qt4BuildConfiguration::Qt4BuildConfiguration(Target *target, Qt4BuildConfiguration *source) : | 
					
						
							| 
									
										
										
										
											2010-02-08 15:50:06 +01:00
										 |  |  |     BuildConfiguration(target, source), | 
					
						
							| 
									
										
										
										
											2009-12-08 12:21:11 +01:00
										 |  |  |     m_shadowBuild(source->m_shadowBuild), | 
					
						
							| 
									
										
										
										
											2011-01-19 15:46:01 +01:00
										 |  |  |     m_isEnabled(false), | 
					
						
							| 
									
										
										
										
											2009-12-08 12:21:11 +01:00
										 |  |  |     m_buildDirectory(source->m_buildDirectory), | 
					
						
							| 
									
										
										
										
											2010-01-13 18:00:02 +01:00
										 |  |  |     m_qmakeBuildConfiguration(source->m_qmakeBuildConfiguration), | 
					
						
							| 
									
										
										
										
											2012-05-04 16:25:41 +03:00
										 |  |  |     m_subNodeBuild(0), // temporary value, so not copied
 | 
					
						
							|  |  |  |     m_fileNodeBuild(0) | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-02-08 15:50:06 +01:00
										 |  |  |     cloneSteps(source); | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  |     ctor(); | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Qt4BuildConfiguration::~Qt4BuildConfiguration() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  | QVariantMap Qt4BuildConfiguration::toMap() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QVariantMap map(BuildConfiguration::toMap()); | 
					
						
							|  |  |  |     map.insert(QLatin1String(USE_SHADOW_BUILD_KEY), m_shadowBuild); | 
					
						
							|  |  |  |     map.insert(QLatin1String(BUILD_DIRECTORY_KEY), m_buildDirectory); | 
					
						
							|  |  |  |     map.insert(QLatin1String(BUILD_CONFIGURATION_KEY), int(m_qmakeBuildConfiguration)); | 
					
						
							|  |  |  |     return map; | 
					
						
							| 
									
										
										
										
											2009-11-23 12:11:48 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  | bool Qt4BuildConfiguration::fromMap(const QVariantMap &map) | 
					
						
							| 
									
										
										
										
											2009-12-08 12:21:11 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-02-08 15:50:06 +01:00
										 |  |  |     if (!BuildConfiguration::fromMap(map)) | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-25 11:55:29 +01:00
										 |  |  |     m_shadowBuild = map.value(QLatin1String(USE_SHADOW_BUILD_KEY), true).toBool(); | 
					
						
							| 
									
										
										
										
											2011-05-20 21:40:53 +02:00
										 |  |  |     m_qmakeBuildConfiguration = QtSupport::BaseQtVersion::QmakeBuildConfigs(map.value(QLatin1String(BUILD_CONFIGURATION_KEY)).toInt()); | 
					
						
							| 
									
										
										
										
											2011-03-23 13:32:42 +01:00
										 |  |  |     m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY), defaultShadowBuildDirectory()).toString(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-04 13:14:46 +02:00
										 |  |  |     m_lastEmmitedBuildDirectory = buildDirectory(); | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     m_qtVersionSupportsShadowBuilds =  supportsShadowBuilds(); | 
					
						
							| 
									
										
										
										
											2010-09-22 15:14:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-08 15:50:06 +01:00
										 |  |  |     return true; | 
					
						
							| 
									
										
										
										
											2009-12-08 12:21:11 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  | void Qt4BuildConfiguration::ctor() | 
					
						
							| 
									
										
										
										
											2009-12-03 18:37:27 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-10-06 13:47:01 +02:00
										 |  |  |     connect(this, SIGNAL(environmentChanged()), | 
					
						
							|  |  |  |             this, SLOT(emitBuildDirectoryChanged())); | 
					
						
							| 
									
										
										
										
											2011-04-20 21:16:17 +02:00
										 |  |  |     connect(this, SIGNAL(environmentChanged()), | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |             this, SLOT(emitEvaluateBuildSystem())); | 
					
						
							|  |  |  |     connect(target(), SIGNAL(profileChanged()), | 
					
						
							|  |  |  |             this, SLOT(profileChanged())); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2010-10-06 13:47:01 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | void Qt4BuildConfiguration::profileChanged() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     emit requestBuildSystemEvaluation(); | 
					
						
							|  |  |  |     emit environmentChanged(); | 
					
						
							|  |  |  |     emitBuildDirectoryChanged(); | 
					
						
							| 
									
										
										
										
											2009-12-03 18:37:27 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 13:47:01 +02:00
										 |  |  | void Qt4BuildConfiguration::emitBuildDirectoryChanged() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2012-07-26 16:08:41 +02:00
										 |  |  |     // We also emit buildDirectoryChanged if the the Qt version's supportShadowBuild changed
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     if (buildDirectory() != m_lastEmmitedBuildDirectory | 
					
						
							|  |  |  |             || supportsShadowBuilds() != m_qtVersionSupportsShadowBuilds) { | 
					
						
							| 
									
										
										
										
											2010-10-06 13:47:01 +02:00
										 |  |  |         m_lastEmmitedBuildDirectory = buildDirectory(); | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |         m_qtVersionSupportsShadowBuilds = supportsShadowBuilds(); | 
					
						
							| 
									
										
										
										
											2010-10-06 13:47:01 +02:00
										 |  |  |         emit buildDirectoryChanged(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-23 10:35:23 +02:00
										 |  |  | Utils::Environment Qt4BuildConfiguration::baseEnvironment() const | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-09-23 10:35:23 +02:00
										 |  |  |     Utils::Environment env = BuildConfiguration::baseEnvironment(); | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     target()->profile()->addToEnvironment(env); | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |     return env; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | BuildConfigWidget *Qt4BuildConfiguration::createConfigWidget() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return new Qt4ProjectConfigWidget(target()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 13:32:42 +01:00
										 |  |  | QString Qt4BuildConfiguration::defaultShadowBuildDirectory() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // todo displayName isn't ideal
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     return Qt4Project::shadowBuildDirectory(target()->project()->document()->fileName(), | 
					
						
							|  |  |  |                                             target()->profile(), displayName()); | 
					
						
							| 
									
										
										
										
											2011-03-23 13:32:42 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 13:47:01 +02:00
										 |  |  | /// returns the unexpanded build directory
 | 
					
						
							|  |  |  | QString Qt4BuildConfiguration::rawBuildDirectory() const | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     QString workingDirectory; | 
					
						
							| 
									
										
										
										
											2010-05-19 13:41:52 +02:00
										 |  |  |     if (m_shadowBuild) { | 
					
						
							|  |  |  |         if (!m_buildDirectory.isEmpty()) | 
					
						
							|  |  |  |             workingDirectory = m_buildDirectory; | 
					
						
							|  |  |  |         else | 
					
						
							| 
									
										
										
										
											2011-03-23 13:32:42 +01:00
										 |  |  |             workingDirectory = defaultShadowBuildDirectory(); | 
					
						
							| 
									
										
										
										
											2010-05-19 13:41:52 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |     if (workingDirectory.isEmpty()) | 
					
						
							| 
									
										
										
										
											2010-03-25 13:19:27 +01:00
										 |  |  |         workingDirectory = target()->project()->projectDirectory(); | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |     return workingDirectory; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 13:47:01 +02:00
										 |  |  | /// returns the build directory
 | 
					
						
							|  |  |  | QString Qt4BuildConfiguration::buildDirectory() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return QDir::cleanPath(environment().expandVariables(rawBuildDirectory())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | bool Qt4BuildConfiguration::supportsShadowBuilds() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target()->profile()); | 
					
						
							|  |  |  |     return !version || version->supportsShadowBuilds(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 18:00:02 +01:00
										 |  |  | /// If only a sub tree should be build this function returns which sub node
 | 
					
						
							|  |  |  | /// should be build
 | 
					
						
							|  |  |  | /// \see Qt4BuildConfiguration::setSubNodeBuild
 | 
					
						
							| 
									
										
										
										
											2011-05-25 11:23:25 +02:00
										 |  |  | Qt4ProjectManager::Qt4ProFileNode *Qt4BuildConfiguration::subNodeBuild() const | 
					
						
							| 
									
										
										
										
											2010-01-13 18:00:02 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     return m_subNodeBuild; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /// A sub node build on builds a sub node of the project
 | 
					
						
							|  |  |  | /// That is triggered by a right click in the project explorer tree
 | 
					
						
							|  |  |  | /// The sub node to be build is set via this function immediately before
 | 
					
						
							|  |  |  | /// calling BuildManager::buildProject( BuildConfiguration * )
 | 
					
						
							|  |  |  | /// and reset immediately afterwards
 | 
					
						
							|  |  |  | /// That is m_subNodesBuild is set only temporarly
 | 
					
						
							| 
									
										
										
										
											2011-05-25 11:23:25 +02:00
										 |  |  | void Qt4BuildConfiguration::setSubNodeBuild(Qt4ProjectManager::Qt4ProFileNode *node) | 
					
						
							| 
									
										
										
										
											2010-01-13 18:00:02 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     m_subNodeBuild = node; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-04 16:25:41 +03:00
										 |  |  | FileNode *Qt4BuildConfiguration::fileNodeBuild() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return m_fileNodeBuild; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void Qt4BuildConfiguration::setFileNodeBuild(FileNode *node) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_fileNodeBuild = node; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-07 15:55:00 +01:00
										 |  |  | /// returns whether this is a shadow build configuration or not
 | 
					
						
							|  |  |  | /// note, even if shadowBuild() returns true, it might be using the
 | 
					
						
							| 
									
										
										
										
											2010-01-11 10:22:55 +01:00
										 |  |  | /// source directory as the shadow build directory, thus it
 | 
					
						
							|  |  |  | /// still is a in-source build
 | 
					
						
							| 
									
										
										
										
											2009-12-07 15:55:00 +01:00
										 |  |  | bool Qt4BuildConfiguration::shadowBuild() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2009-12-08 12:21:11 +01:00
										 |  |  |     return m_shadowBuild; | 
					
						
							| 
									
										
										
										
											2009-12-07 15:55:00 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /// returns the shadow build directory if set
 | 
					
						
							|  |  |  | /// \note buildDirectory() is probably the function you want to call
 | 
					
						
							|  |  |  | QString Qt4BuildConfiguration::shadowBuildDirectory() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2010-05-19 13:41:52 +02:00
										 |  |  |     if (m_buildDirectory.isEmpty()) | 
					
						
							| 
									
										
										
										
											2011-03-23 13:32:42 +01:00
										 |  |  |         return defaultShadowBuildDirectory(); | 
					
						
							| 
									
										
										
										
											2009-12-08 12:21:11 +01:00
										 |  |  |     return m_buildDirectory; | 
					
						
							| 
									
										
										
										
											2009-12-07 15:55:00 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-03 18:37:27 +01:00
										 |  |  | void Qt4BuildConfiguration::setShadowBuildAndDirectory(bool shadowBuild, const QString &buildDirectory) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target()->profile()); | 
					
						
							| 
									
										
										
										
											2010-10-06 13:47:01 +02:00
										 |  |  |     QString directoryToSet = buildDirectory; | 
					
						
							| 
									
										
										
										
											2011-05-04 13:14:46 +02:00
										 |  |  |     bool toSet = (shadowBuild && version && version->isValid() && version->supportsShadowBuilds()); | 
					
						
							| 
									
										
										
										
											2010-03-10 16:13:53 +01:00
										 |  |  |     if (m_shadowBuild == toSet && m_buildDirectory == directoryToSet) | 
					
						
							| 
									
										
										
										
											2009-12-07 15:55:00 +01:00
										 |  |  |         return; | 
					
						
							| 
									
										
										
										
											2010-03-10 16:55:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-10 16:13:53 +01:00
										 |  |  |     m_shadowBuild = toSet; | 
					
						
							|  |  |  |     m_buildDirectory = directoryToSet; | 
					
						
							| 
									
										
										
										
											2010-09-22 15:14:07 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     emit environmentChanged(); | 
					
						
							| 
									
										
										
										
											2010-10-06 13:47:01 +02:00
										 |  |  |     emitBuildDirectoryChanged(); | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     emitEvaluateBuildSystem(); | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | QString Qt4BuildConfiguration::defaultMakeTarget() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     ToolChain *tc = ProjectExplorer::ToolChainProfileInformation::toolChain(target()->profile()); | 
					
						
							|  |  |  |     QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target()->profile()); | 
					
						
							| 
									
										
										
										
											2012-08-22 13:27:25 +02:00
										 |  |  |     if (!tc || !version) | 
					
						
							| 
									
										
										
										
											2010-02-02 17:09:41 +01:00
										 |  |  |         return QString(); | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-22 13:27:25 +02:00
										 |  |  |     return tc->defaultMakeTarget(); | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-05 17:38:45 +02:00
										 |  |  | QString Qt4BuildConfiguration::makefile() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     return static_cast<Qt4Project *>(target()->project())->rootQt4ProjectNode()->makefile(); | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-20 21:40:53 +02:00
										 |  |  | QtSupport::BaseQtVersion::QmakeBuildConfigs Qt4BuildConfiguration::qmakeBuildConfiguration() const | 
					
						
							| 
									
										
										
										
											2009-12-03 18:37:27 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-12-08 12:21:11 +01:00
										 |  |  |     return m_qmakeBuildConfiguration; | 
					
						
							| 
									
										
										
										
											2009-12-03 18:37:27 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-20 21:40:53 +02:00
										 |  |  | void Qt4BuildConfiguration::setQMakeBuildConfiguration(QtSupport::BaseQtVersion::QmakeBuildConfigs config) | 
					
						
							| 
									
										
										
										
											2009-12-03 18:37:27 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-12-08 12:21:11 +01:00
										 |  |  |     if (m_qmakeBuildConfiguration == config) | 
					
						
							| 
									
										
										
										
											2009-12-03 18:37:27 +01:00
										 |  |  |         return; | 
					
						
							| 
									
										
										
										
											2009-12-08 12:21:11 +01:00
										 |  |  |     m_qmakeBuildConfiguration = config; | 
					
						
							| 
									
										
										
										
											2010-03-10 16:55:37 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     emitEvaluateBuildSystem(); | 
					
						
							| 
									
										
										
										
											2009-12-03 18:37:27 +01:00
										 |  |  |     emit qmakeBuildConfigurationChanged(); | 
					
						
							| 
									
										
										
										
											2011-03-23 13:32:42 +01:00
										 |  |  |     emitBuildDirectoryChanged(); | 
					
						
							| 
									
										
										
										
											2009-12-03 18:37:27 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | void Qt4BuildConfiguration::emitEvaluateBuildSystem() | 
					
						
							| 
									
										
										
										
											2010-09-01 12:33:53 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     emit requestBuildSystemEvaluation(); | 
					
						
							| 
									
										
										
										
											2010-09-01 12:33:53 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-12 17:20:15 +01:00
										 |  |  | void Qt4BuildConfiguration::emitQMakeBuildConfigurationChanged() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     emit qmakeBuildConfigurationChanged(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-01 12:33:53 +02:00
										 |  |  | QStringList Qt4BuildConfiguration::configCommandLineArguments() const | 
					
						
							| 
									
										
										
										
											2009-12-03 18:37:27 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-09-01 12:33:53 +02:00
										 |  |  |     QStringList result; | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target()->profile()); | 
					
						
							|  |  |  |     QtSupport::BaseQtVersion::QmakeBuildConfigs defaultBuildConfiguration =  version ? version->defaultBuildConfig() : (QtSupport::BaseQtVersion::DebugBuild | QtSupport::BaseQtVersion::BuildAll); | 
					
						
							| 
									
										
										
										
											2011-05-20 21:40:53 +02:00
										 |  |  |     QtSupport::BaseQtVersion::QmakeBuildConfigs userBuildConfiguration = m_qmakeBuildConfiguration; | 
					
						
							|  |  |  |     if ((defaultBuildConfiguration & QtSupport::BaseQtVersion::BuildAll) && !(userBuildConfiguration & QtSupport::BaseQtVersion::BuildAll)) | 
					
						
							| 
									
										
										
										
											2012-01-13 14:20:45 +01:00
										 |  |  |         result << QLatin1String("CONFIG-=debug_and_release"); | 
					
						
							| 
									
										
										
										
											2010-09-01 12:33:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-20 21:40:53 +02:00
										 |  |  |     if (!(defaultBuildConfiguration & QtSupport::BaseQtVersion::BuildAll) && (userBuildConfiguration & QtSupport::BaseQtVersion::BuildAll)) | 
					
						
							| 
									
										
										
										
											2012-01-13 14:20:45 +01:00
										 |  |  |         result << QLatin1String("CONFIG+=debug_and_release"); | 
					
						
							| 
									
										
										
										
											2011-05-24 19:08:31 +02:00
										 |  |  |     if ((defaultBuildConfiguration & QtSupport::BaseQtVersion::DebugBuild) && !(userBuildConfiguration & QtSupport::BaseQtVersion::DebugBuild)) | 
					
						
							| 
									
										
										
										
											2012-01-13 14:20:45 +01:00
										 |  |  |         result << QLatin1String("CONFIG+=release"); | 
					
						
							| 
									
										
										
										
											2011-05-24 19:08:31 +02:00
										 |  |  |     if (!(defaultBuildConfiguration & QtSupport::BaseQtVersion::DebugBuild) && (userBuildConfiguration & QtSupport::BaseQtVersion::DebugBuild)) | 
					
						
							| 
									
										
										
										
											2012-01-13 14:20:45 +01:00
										 |  |  |         result << QLatin1String("CONFIG+=debug"); | 
					
						
							| 
									
										
										
										
											2010-09-01 12:33:53 +02:00
										 |  |  |     return result; | 
					
						
							| 
									
										
										
										
											2009-12-03 18:37:27 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | QMakeStep *Qt4BuildConfiguration::qmakeStep() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QMakeStep *qs = 0; | 
					
						
							| 
									
										
										
										
											2012-03-15 17:17:40 +01:00
										 |  |  |     BuildStepList *bsl = stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD)); | 
					
						
							| 
									
										
										
										
											2010-07-16 14:00:41 +02:00
										 |  |  |     Q_ASSERT(bsl); | 
					
						
							|  |  |  |     for (int i = 0; i < bsl->count(); ++i) | 
					
						
							|  |  |  |         if ((qs = qobject_cast<QMakeStep *>(bsl->at(i))) != 0) | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |             return qs; | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MakeStep *Qt4BuildConfiguration::makeStep() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2010-07-16 14:00:41 +02:00
										 |  |  |     MakeStep *ms = 0; | 
					
						
							| 
									
										
										
										
											2012-03-15 17:17:40 +01:00
										 |  |  |     BuildStepList *bsl = stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD)); | 
					
						
							| 
									
										
										
										
											2010-07-16 14:00:41 +02:00
										 |  |  |     Q_ASSERT(bsl); | 
					
						
							|  |  |  |     for (int i = 0; i < bsl->count(); ++i) | 
					
						
							|  |  |  |         if ((ms = qobject_cast<MakeStep *>(bsl->at(i))) != 0) | 
					
						
							|  |  |  |             return ms; | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // returns true if both are equal
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | Qt4BuildConfiguration::MakefileState Qt4BuildConfiguration::compareToImportFrom(const QString &makefile) | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     QMakeStep *qs = qmakeStep(); | 
					
						
							| 
									
										
										
										
											2010-10-05 17:38:45 +02:00
										 |  |  |     if (QFileInfo(makefile).exists() && qs) { | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |         Utils::FileName qmakePath = QtSupport::QtVersionManager::findQMakeBinaryFromMakefile(makefile); | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |         QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(target()->profile()); | 
					
						
							| 
									
										
										
										
											2011-05-04 13:14:46 +02:00
										 |  |  |         if (!version) | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |             return MakefileForWrongProject; | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |         if (version->qmakeCommand() == qmakePath) { | 
					
						
							|  |  |  |             // same qtversion
 | 
					
						
							| 
									
										
										
										
											2011-05-20 21:40:53 +02:00
										 |  |  |             QPair<QtSupport::BaseQtVersion::QmakeBuildConfigs, QString> result = | 
					
						
							|  |  |  |                     QtSupport::QtVersionManager::scanMakeFile(makefile, version->defaultBuildConfig()); | 
					
						
							| 
									
										
										
										
											2009-12-02 17:43:43 +01:00
										 |  |  |             if (qmakeBuildConfiguration() == result.first) { | 
					
						
							| 
									
										
										
										
											2010-02-16 13:53:29 +01:00
										 |  |  |                 // The qmake Build Configuration are the same,
 | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |                 // now compare arguments lists
 | 
					
						
							|  |  |  |                 // we have to compare without the spec/platform cmd argument
 | 
					
						
							|  |  |  |                 // and compare that on its own
 | 
					
						
							| 
									
										
										
										
											2010-10-05 17:38:45 +02:00
										 |  |  |                 QString workingDirectory = QFileInfo(makefile).absolutePath(); | 
					
						
							| 
									
										
										
										
											2011-06-07 17:09:32 +02:00
										 |  |  |                 QStringList actualArgs; | 
					
						
							|  |  |  |                 QString userArgs = qs->userArguments(); | 
					
						
							|  |  |  |                 // This copies the settings from userArgs to actualArgs (minus some we
 | 
					
						
							|  |  |  |                 // are not interested in), splitting them up into individual strings:
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |                 extractSpecFromArguments(&userArgs, workingDirectory, version, &actualArgs); | 
					
						
							| 
									
										
										
										
											2012-05-03 16:15:38 +02:00
										 |  |  |                 actualArgs = qs->deducedArguments() + actualArgs + qs->deducedArgumentsAfter(); | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |                 Utils::FileName actualSpec = qs->mkspec(); | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-19 11:14:03 +02:00
										 |  |  |                 QString qmakeArgs = result.second; | 
					
						
							|  |  |  |                 QStringList parsedArgs; | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |                 Utils::FileName parsedSpec = extractSpecFromArguments(&qmakeArgs, workingDirectory, version, &parsedArgs); | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |                 if (debug) { | 
					
						
							|  |  |  |                     qDebug()<<"Actual args:"<<actualArgs; | 
					
						
							|  |  |  |                     qDebug()<<"Parsed args:"<<parsedArgs; | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |                     qDebug()<<"Actual spec:"<<actualSpec.toString(); | 
					
						
							|  |  |  |                     qDebug()<<"Parsed spec:"<<parsedSpec.toString(); | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |                 } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-30 16:41:59 +02:00
										 |  |  |                 // Comparing the sorted list is obviously wrong
 | 
					
						
							|  |  |  |                 // Though haven written a more complete version
 | 
					
						
							|  |  |  |                 // that managed had around 200 lines and yet faild
 | 
					
						
							|  |  |  |                 // to be actually foolproof at all, I think it's
 | 
					
						
							|  |  |  |                 // not feasible without actually taking the qmake
 | 
					
						
							|  |  |  |                 // command line parsing code
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 // Things, sorting gets wrong:
 | 
					
						
							|  |  |  |                 // parameters to positional parameters matter
 | 
					
						
							|  |  |  |                 //  e.g. -o -spec is different from -spec -o
 | 
					
						
							|  |  |  |                 //       -o 1 -spec 2 is diffrent from -spec 1 -o 2
 | 
					
						
							|  |  |  |                 // variable assignment order matters
 | 
					
						
							|  |  |  |                 // variable assignment vs -after
 | 
					
						
							|  |  |  |                 // -norecursive vs. recursive
 | 
					
						
							|  |  |  |                 actualArgs.sort(); | 
					
						
							|  |  |  |                 parsedArgs.sort(); | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |                 if (actualArgs == parsedArgs) { | 
					
						
							|  |  |  |                     // Specs match exactly
 | 
					
						
							|  |  |  |                     if (actualSpec == parsedSpec) | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |                         return MakefileMatches; | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |                     // Actual spec is the default one
 | 
					
						
							|  |  |  | //                    qDebug()<<"AS vs VS"<<actualSpec<<version->mkspec();
 | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |                     if ((actualSpec == version->mkspec() || actualSpec == Utils::FileName::fromString(QLatin1String("default"))) | 
					
						
							|  |  |  |                         && (parsedSpec == version->mkspec() || parsedSpec == Utils::FileName::fromString(QLatin1String("default")) || parsedSpec.isEmpty())) | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |                         return MakefileMatches; | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |                 } | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |                 return MakefileIncompatible; | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 if (debug) | 
					
						
							|  |  |  |                     qDebug()<<"different qmake buildconfigurations buildconfiguration:"<<qmakeBuildConfiguration()<<" Makefile:"<<result.first; | 
					
						
							|  |  |  |                 return MakefileIncompatible; | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             if (debug) | 
					
						
							| 
									
										
										
										
											2012-07-26 16:08:41 +02:00
										 |  |  |                 qDebug() << "different Qt versions, buildconfiguration:" << version->qmakeCommand().toString() << " Makefile:"<< qmakePath.toString(); | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |             return MakefileForWrongProject; | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     return MakefileMissing; | 
					
						
							| 
									
										
										
										
											2009-11-25 18:50:20 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-01 16:16:59 +02:00
										 |  |  | bool Qt4BuildConfiguration::removeQMLInspectorFromArguments(QString *args) | 
					
						
							| 
									
										
										
										
											2010-08-30 13:24:34 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-09-01 16:16:59 +02:00
										 |  |  |     bool removedArgument = false; | 
					
						
							|  |  |  |     for (Utils::QtcProcess::ArgIterator ait(args); ait.next(); ) { | 
					
						
							| 
									
										
										
										
											2011-09-01 09:43:08 +02:00
										 |  |  |         const QString arg = ait.value(); | 
					
						
							|  |  |  |         if (arg.contains(QLatin1String(Constants::QMAKEVAR_QMLJSDEBUGGER_PATH)) | 
					
						
							| 
									
										
										
										
											2012-04-10 17:22:10 +02:00
										 |  |  |             || arg.contains(QLatin1String(Constants::QMAKEVAR_DECLARATIVE_DEBUG4)) | 
					
						
							|  |  |  |             || arg.contains(QLatin1String(Constants::QMAKEVAR_DECLARATIVE_DEBUG5))) { | 
					
						
							| 
									
										
										
										
											2011-10-13 14:01:28 +02:00
										 |  |  |             ait.deleteArg(); | 
					
						
							| 
									
										
										
										
											2011-09-01 16:16:59 +02:00
										 |  |  |             removedArgument = true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return removedArgument; | 
					
						
							| 
									
										
										
										
											2010-08-30 13:24:34 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  | Utils::FileName Qt4BuildConfiguration::extractSpecFromArguments(QString *args, | 
					
						
							|  |  |  |                                                                 const QString &directory, const QtSupport::BaseQtVersion *version, | 
					
						
							|  |  |  |                                                                 QStringList *outArgs) | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |     Utils::FileName parsedSpec; | 
					
						
							| 
									
										
										
										
											2010-10-19 11:14:03 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  |     bool ignoreNext = false; | 
					
						
							| 
									
										
										
										
											2010-10-19 11:14:03 +02:00
										 |  |  |     bool nextIsSpec = false; | 
					
						
							|  |  |  |     for (Utils::QtcProcess::ArgIterator ait(args); ait.next(); ) { | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  |         if (ignoreNext) { | 
					
						
							|  |  |  |             ignoreNext = false; | 
					
						
							| 
									
										
										
										
											2010-10-19 11:14:03 +02:00
										 |  |  |             ait.deleteArg(); | 
					
						
							|  |  |  |         } else if (nextIsSpec) { | 
					
						
							|  |  |  |             nextIsSpec = false; | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |             parsedSpec = Utils::FileName::fromUserInput(ait.value()); | 
					
						
							| 
									
										
										
										
											2010-10-19 11:14:03 +02:00
										 |  |  |             ait.deleteArg(); | 
					
						
							|  |  |  |         } else if (ait.value() == QLatin1String("-spec") || ait.value() == QLatin1String("-platform")) { | 
					
						
							|  |  |  |             nextIsSpec = true; | 
					
						
							|  |  |  |             ait.deleteArg(); | 
					
						
							|  |  |  |         } else if (ait.value() == QLatin1String("-cache")) { | 
					
						
							|  |  |  |             // We ignore -cache, because qmake contained a bug that it didn't
 | 
					
						
							|  |  |  |             // mention the -cache in the Makefile.
 | 
					
						
							|  |  |  |             // That means changing the -cache option in the additional arguments
 | 
					
						
							|  |  |  |             // does not automatically rerun qmake. Alas, we could try more
 | 
					
						
							|  |  |  |             // intelligent matching for -cache, but i guess people rarely
 | 
					
						
							|  |  |  |             // do use that.
 | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  |             ignoreNext = true; | 
					
						
							| 
									
										
										
										
											2010-10-19 11:14:03 +02:00
										 |  |  |             ait.deleteArg(); | 
					
						
							|  |  |  |         } else if (outArgs && ait.isSimple()) { | 
					
						
							|  |  |  |             outArgs->append(ait.value()); | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-19 11:14:03 +02:00
										 |  |  |     if (parsedSpec.isEmpty()) | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |         return Utils::FileName(); | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-18 17:06:00 +02:00
										 |  |  |     Utils::FileName baseMkspecDir = Utils::FileName::fromUserInput( | 
					
						
							| 
									
										
										
										
											2012-07-06 13:29:45 +02:00
										 |  |  |             version->qmakeProperty("QT_HOST_DATA") + QLatin1String("/mkspecs")); | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // if the path is relative it can be
 | 
					
						
							|  |  |  |     // relative to the working directory (as found in the Makefiles)
 | 
					
						
							|  |  |  |     // or relatively to the mkspec directory
 | 
					
						
							|  |  |  |     // if it is the former we need to get the canonical form
 | 
					
						
							|  |  |  |     // for the other one we don't need to do anything
 | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |     if (parsedSpec.toFileInfo().isRelative()) { | 
					
						
							|  |  |  |         if (QFileInfo(directory + QLatin1Char('/') + parsedSpec.toString()).exists()) { | 
					
						
							|  |  |  |             parsedSpec = Utils::FileName::fromUserInput(directory + QLatin1Char('/') + parsedSpec.toString()); | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |             parsedSpec = Utils::FileName::fromUserInput(baseMkspecDir.toString() + QLatin1Char('/') + parsedSpec.toString()); | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |     QFileInfo f2 = parsedSpec.toFileInfo(); | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  |     while (f2.isSymLink()) { | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |         parsedSpec = Utils::FileName::fromString(f2.symLinkTarget()); | 
					
						
							|  |  |  |         f2.setFile(parsedSpec.toString()); | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |     if (parsedSpec.isChildOf(baseMkspecDir)) { | 
					
						
							|  |  |  |         parsedSpec = parsedSpec.relativeChildPath(baseMkspecDir); | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2012-01-13 14:20:45 +01:00
										 |  |  |         Utils::FileName sourceMkSpecPath = Utils::FileName::fromString(version->sourcePath().toString() | 
					
						
							|  |  |  |                                                                        + QLatin1String("/mkspecs")); | 
					
						
							| 
									
										
										
										
											2011-11-25 13:19:58 +01:00
										 |  |  |         if (parsedSpec.isChildOf(sourceMkSpecPath)) { | 
					
						
							|  |  |  |             parsedSpec = parsedSpec.relativeChildPath(sourceMkSpecPath); | 
					
						
							| 
									
										
										
										
											2009-11-26 16:49:45 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return parsedSpec; | 
					
						
							| 
									
										
										
										
											2009-12-02 17:43:43 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-07 16:32:23 +02:00
										 |  |  | ProjectExplorer::IOutputParser *Qt4BuildConfiguration::createOutputParser() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     ToolChain *tc = ToolChainProfileInformation::toolChain(target()->profile()); | 
					
						
							|  |  |  |     return tc ? tc->outputParser() : 0; | 
					
						
							| 
									
										
										
										
											2010-07-07 16:32:23 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-19 15:46:01 +01:00
										 |  |  | bool Qt4BuildConfiguration::isEnabled() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return m_isEnabled; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-26 15:56:36 +02:00
										 |  |  | QString Qt4BuildConfiguration::disabledReason() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (!m_isEnabled) | 
					
						
							|  |  |  |         return tr("Parsing the .pro file"); | 
					
						
							|  |  |  |     return QString(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-19 15:46:01 +01:00
										 |  |  | void Qt4BuildConfiguration::setEnabled(bool enabled) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (m_isEnabled == enabled) | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     m_isEnabled = enabled; | 
					
						
							|  |  |  |     emit enabledChanged(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | /*!
 | 
					
						
							|  |  |  |   \class Qt4BuildConfigurationFactory | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  | Qt4BuildConfigurationFactory::Qt4BuildConfigurationFactory(QObject *parent) : | 
					
						
							|  |  |  |     ProjectExplorer::IBuildConfigurationFactory(parent) | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     update(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-20 21:40:53 +02:00
										 |  |  |     QtSupport::QtVersionManager *vm = QtSupport::QtVersionManager::instance(); | 
					
						
							| 
									
										
										
										
											2012-02-24 18:57:33 +01:00
										 |  |  |     connect(vm, SIGNAL(qtVersionsChanged(QList<int>,QList<int>,QList<int>)), | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  |             this, SLOT(update())); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Qt4BuildConfigurationFactory::~Qt4BuildConfigurationFactory() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void Qt4BuildConfigurationFactory::update() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     emit availableCreationIdsChanged(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | bool Qt4BuildConfigurationFactory::canHandle(const Target *t) const | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     if (!t->project()->supportsProfile(t->profile())) | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     return qobject_cast<Qt4Project *>(t->project()); | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | QList<Core::Id> Qt4BuildConfigurationFactory::availableCreationIds(const Target *parent) const | 
					
						
							| 
									
										
										
										
											2012-04-04 16:06:35 +02:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     if (!canHandle(parent)) | 
					
						
							|  |  |  |         return QList<Core::Id>(); | 
					
						
							|  |  |  |     return QList<Core::Id>() << Core::Id(QT4_BC_ID); | 
					
						
							| 
									
										
										
										
											2012-04-04 16:06:35 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-15 17:17:40 +01:00
										 |  |  | QString Qt4BuildConfigurationFactory::displayNameForId(const Core::Id id) const | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-08-03 15:24:33 +02:00
										 |  |  |     if (id == QT4_BC_ID) | 
					
						
							|  |  |  |         return tr("Qmake based build"); | 
					
						
							|  |  |  |     return QString(); | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | bool Qt4BuildConfigurationFactory::canCreate(const Target *parent, const Core::Id id) const | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     if (!canHandle(parent)) | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  |         return false; | 
					
						
							| 
									
										
										
										
											2012-08-03 15:24:33 +02:00
										 |  |  |     return id == QT4_BC_ID; | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | BuildConfiguration *Qt4BuildConfigurationFactory::create(ProjectExplorer::Target *parent, const Core::Id id, const QString &name) | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     if (!canCreate(parent, id)) | 
					
						
							|  |  |  |         return 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(parent->profile()); | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  |     Q_ASSERT(version); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     bool ok = true; | 
					
						
							|  |  |  |     QString buildConfigurationName = name; | 
					
						
							|  |  |  |     if (buildConfigurationName.isEmpty()) | 
					
						
							|  |  |  |         buildConfigurationName = QInputDialog::getText(0, | 
					
						
							|  |  |  |                                                        tr("New Configuration"), | 
					
						
							|  |  |  |                                                        tr("New configuration name:"), | 
					
						
							|  |  |  |                                                        QLineEdit::Normal, | 
					
						
							|  |  |  |                                                        version->displayName(), &ok); | 
					
						
							| 
									
										
										
										
											2010-10-04 17:50:55 +02:00
										 |  |  |     buildConfigurationName = buildConfigurationName.trimmed(); | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  |     if (!ok || buildConfigurationName.isEmpty()) | 
					
						
							| 
									
										
										
										
											2010-07-16 14:00:41 +02:00
										 |  |  |         return 0; | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-18 09:59:49 +01:00
										 |  |  |     //: Debug build configuration. We recommend not translating it.
 | 
					
						
							| 
									
										
										
										
											2012-04-17 17:10:56 +02:00
										 |  |  |     QString defaultFirstName = tr("%1 Debug").arg(version->displayName()); | 
					
						
							|  |  |  |     QString customFirstName; | 
					
						
							| 
									
										
										
										
											2011-05-20 12:52:59 +02:00
										 |  |  |     if (buildConfigurationName != version->displayName()) | 
					
						
							| 
									
										
										
										
											2012-04-17 17:10:56 +02:00
										 |  |  |         customFirstName = tr("%1 Debug").arg(buildConfigurationName); | 
					
						
							| 
									
										
										
										
											2011-05-04 13:14:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-10 16:48:16 +02:00
										 |  |  |     //: Release build configuration. We recommend not translating it.
 | 
					
						
							| 
									
										
										
										
											2012-04-17 17:10:56 +02:00
										 |  |  |     QString defaultSecondName = tr("%1 Release").arg(version->displayName()); | 
					
						
							|  |  |  |     QString customSecondName; | 
					
						
							| 
									
										
										
										
											2012-04-10 16:48:16 +02:00
										 |  |  |     if (buildConfigurationName != version->displayName()) | 
					
						
							| 
									
										
										
										
											2012-04-17 17:10:56 +02:00
										 |  |  |         customSecondName = tr("%1 Release").arg(buildConfigurationName); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!(version->defaultBuildConfig() & QtSupport::BaseQtVersion::DebugBuild)) { | 
					
						
							|  |  |  |         qSwap(defaultFirstName, defaultSecondName); | 
					
						
							|  |  |  |         qSwap(customFirstName, customSecondName); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2012-04-10 16:48:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     BuildConfiguration *bc | 
					
						
							|  |  |  |             = Qt4BuildConfiguration::setup(parent, defaultFirstName, customFirstName, | 
					
						
							|  |  |  |                                            version->defaultBuildConfig(), QString(), QString(), false); | 
					
						
							|  |  |  |     parent->addBuildConfiguration( | 
					
						
							|  |  |  |                 Qt4BuildConfiguration::setup(parent, defaultSecondName, customSecondName, | 
					
						
							|  |  |  |                                              (version->defaultBuildConfig() ^ QtSupport::BaseQtVersion::DebugBuild), | 
					
						
							|  |  |  |                                              QString(), QString(), false)); | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  |     return bc; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | bool Qt4BuildConfigurationFactory::canClone(const Target *parent, ProjectExplorer::BuildConfiguration *source) const | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     return canHandle(parent) && qobject_cast<Qt4BuildConfiguration *>(source); | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-08 15:50:06 +01:00
										 |  |  | BuildConfiguration *Qt4BuildConfigurationFactory::clone(Target *parent, BuildConfiguration *source) | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  |     if (!canClone(parent, source)) | 
					
						
							|  |  |  |         return 0; | 
					
						
							|  |  |  |     Qt4BuildConfiguration *oldbc(static_cast<Qt4BuildConfiguration *>(source)); | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     return new Qt4BuildConfiguration(parent, oldbc); | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | bool Qt4BuildConfigurationFactory::canRestore(const Target *parent, const QVariantMap &map) const | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     if (!canHandle(parent)) | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  |         return false; | 
					
						
							| 
									
										
										
										
											2012-08-03 15:24:33 +02:00
										 |  |  |     return ProjectExplorer::idFromMap(map) == QT4_BC_ID; | 
					
						
							| 
									
										
										
										
											2010-01-07 18:17:24 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-08 15:50:06 +01:00
										 |  |  | BuildConfiguration *Qt4BuildConfigurationFactory::restore(Target *parent, const QVariantMap &map) | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     if (!canRestore(parent, map)) | 
					
						
							|  |  |  |         return 0; | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(parent); | 
					
						
							| 
									
										
										
										
											2010-01-18 12:11:04 +01:00
										 |  |  |     if (bc->fromMap(map)) | 
					
						
							|  |  |  |         return bc; | 
					
						
							|  |  |  |     delete bc; | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2011-01-13 13:38:43 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | QList<BuildConfigurationInfo> Qt4BuildConfigurationFactory::availableBuildConfigurations(const ProjectExplorer::Profile *p, | 
					
						
							|  |  |  |                                                                                          const QString &proFilePath) | 
					
						
							| 
									
										
										
										
											2011-01-13 13:38:43 +01:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     QList<BuildConfigurationInfo> infoList; | 
					
						
							| 
									
										
										
										
											2011-01-13 13:38:43 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     QtSupport::BaseQtVersion *version = QtSupport::QtProfileInformation::qtVersion(p); | 
					
						
							|  |  |  |     if (!version || !version->isValid()) | 
					
						
							|  |  |  |         return infoList; | 
					
						
							|  |  |  |     QtSupport::BaseQtVersion::QmakeBuildConfigs config = version->defaultBuildConfig(); | 
					
						
							|  |  |  |     BuildConfigurationInfo info = BuildConfigurationInfo(config, QString(), QString(), false); | 
					
						
							|  |  |  |     info.directory = Qt4Project::shadowBuildDirectory(proFilePath, p, buildConfigurationDisplayName(info)); | 
					
						
							|  |  |  |     infoList.append(info); | 
					
						
							| 
									
										
										
										
											2011-01-13 13:38:43 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     info.buildConfig = config ^ QtSupport::BaseQtVersion::DebugBuild; | 
					
						
							|  |  |  |     info.directory = Qt4Project::shadowBuildDirectory(proFilePath, p, buildConfigurationDisplayName(info)); | 
					
						
							| 
									
										
										
										
											2012-07-04 15:42:55 +02:00
										 |  |  |     infoList.append(info); | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  |     return infoList; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Return name of a build configuration.
 | 
					
						
							|  |  |  | QString Qt4BuildConfigurationFactory::buildConfigurationDisplayName(const BuildConfigurationInfo &info) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return (info.buildConfig & QtSupport::BaseQtVersion::DebugBuild) ? | 
					
						
							|  |  |  |                 //: Name of a debug build configuration to created by a project wizard. We recommend not translating it.
 | 
					
						
							|  |  |  |                 tr("Debug") : | 
					
						
							|  |  |  |                 //: Name of a release build configuration to be created by a project wizard. We recommend not translating it.
 | 
					
						
							|  |  |  |                 tr("Release"); | 
					
						
							| 
									
										
										
										
											2011-01-13 13:38:43 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2011-03-03 16:12:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | BuildConfiguration::BuildType Qt4BuildConfiguration::buildType() const | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2011-05-20 21:40:53 +02:00
										 |  |  |     if (qmakeBuildConfiguration() & QtSupport::BaseQtVersion::DebugBuild) | 
					
						
							| 
									
										
										
										
											2011-03-03 16:12:00 +01:00
										 |  |  |         return Debug; | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         return Release; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-04-24 15:49:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | Qt4BuildConfiguration *Qt4BuildConfiguration::setup(Target *t, QString defaultDisplayName, | 
					
						
							|  |  |  |                                                     QString displayName, | 
					
						
							|  |  |  |                                                     QtSupport::BaseQtVersion::QmakeBuildConfigs qmakeBuildConfiguration, | 
					
						
							|  |  |  |                                                     QString additionalArguments, QString directory, | 
					
						
							|  |  |  |                                                     bool importing) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     bool debug = qmakeBuildConfiguration & QtSupport::BaseQtVersion::DebugBuild; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Add the buildconfiguration
 | 
					
						
							|  |  |  |     Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(t); | 
					
						
							|  |  |  |     bc->setDefaultDisplayName(defaultDisplayName); | 
					
						
							|  |  |  |     bc->setDisplayName(displayName); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ProjectExplorer::BuildStepList *buildSteps = | 
					
						
							|  |  |  |             bc->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD)); | 
					
						
							|  |  |  |     ProjectExplorer::BuildStepList *cleanSteps = | 
					
						
							|  |  |  |             bc->stepList(Core::Id(ProjectExplorer::Constants::BUILDSTEPS_CLEAN)); | 
					
						
							|  |  |  |     Q_ASSERT(buildSteps); | 
					
						
							|  |  |  |     Q_ASSERT(cleanSteps); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     QMakeStep *qmakeStep = new QMakeStep(buildSteps); | 
					
						
							|  |  |  |     buildSteps->insertStep(0, qmakeStep); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     MakeStep *makeStep = new MakeStep(buildSteps); | 
					
						
							|  |  |  |     buildSteps->insertStep(1, makeStep); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     MakeStep* cleanStep = new MakeStep(cleanSteps); | 
					
						
							|  |  |  |     cleanStep->setClean(true); | 
					
						
							|  |  |  |     cleanStep->setUserArguments(QLatin1String("clean")); | 
					
						
							|  |  |  |     cleanSteps->insertStep(0, cleanStep); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bool enableQmlDebugger | 
					
						
							|  |  |  |             = Qt4BuildConfiguration::removeQMLInspectorFromArguments(&additionalArguments); | 
					
						
							|  |  |  |     if (!additionalArguments.isEmpty()) | 
					
						
							|  |  |  |         qmakeStep->setUserArguments(additionalArguments); | 
					
						
							|  |  |  |     if (importing) | 
					
						
							|  |  |  |         qmakeStep->setLinkQmlDebuggingLibrary(enableQmlDebugger); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // set some options for qmake and make
 | 
					
						
							|  |  |  |     if (qmakeBuildConfiguration & QtSupport::BaseQtVersion::BuildAll) // debug_and_release => explicit targets
 | 
					
						
							|  |  |  |         makeStep->setUserArguments(debug ? QLatin1String("debug") : QLatin1String("release")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bc->setQMakeBuildConfiguration(qmakeBuildConfiguration); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!directory.isEmpty()) | 
					
						
							|  |  |  |         bc->setShadowBuildAndDirectory(directory != t->project()->projectDirectory(), directory); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return bc; | 
					
						
							|  |  |  | } |