From 40ad5397872bb753063e0edeefc1ad0fdc702f5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Wed, 9 Oct 2013 15:10:39 +0200 Subject: qmake: Allow QMAKE_MAC_XCODE_SETTINGS to be limited to debug or release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Xcode generator does not support exclusive builds, but still generates projects that contain both debug and release configurations, each with hard-coded differences such as whether or not to strip or to generate debug symbols. As a stop-gap solution we allow projects and mkspecs to add extra settings that are limited to a given build. Long term we want to rewrite the Xcode generator to support exclusive builds, but that is a much bigger task. Change-Id: I85056164bb1b3c8c6e0cf66410348cca7138eca5 Reviewed-by: Tor Arne Vestbø --- qmake/generators/mac/pbuilder_pbx.cpp | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) (limited to 'qmake') diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp index 719507c61d..ac9e4cc71a 100644 --- a/qmake/generators/mac/pbuilder_pbx.cpp +++ b/qmake/generators/mac/pbuilder_pbx.cpp @@ -301,6 +301,8 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) QString defaultConfig; for(int as_release = 0; as_release < 2; as_release++) { + QString configName = (as_release ? "Release" : "Debug"); + QMap settings; settings.insert("COPY_PHASE_STRIP", (as_release ? "YES" : "NO")); if(as_release) @@ -311,6 +313,12 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) const ProStringList &l = project->values("QMAKE_MAC_XCODE_SETTINGS"); for(int i = 0; i < l.size(); ++i) { ProString name = l.at(i); + const ProKey buildKey(name + ".build"); + if (!project->isEmpty(buildKey)) { + const QString build = project->values(buildKey).first().toQString(); + if (build.toLower() != configName.toLower()) + continue; + } const ProKey nkey(name + ".name"); if (!project->isEmpty(nkey)) name = project->first(nkey); @@ -319,10 +327,9 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) } } - QString name = (as_release ? "Release" : "Debug"); if (project->isActiveConfig("debug") != (bool)as_release) - defaultConfig = name; - QString key = keyFor("QMAKE_SUBDIR_PBX_BUILDCONFIG_" + name); + defaultConfig = configName; + QString key = keyFor("QMAKE_SUBDIR_PBX_BUILDCONFIG_" + configName); project->values("QMAKE_SUBDIR_PBX_BUILDCONFIGS").append(key); t << "\t\t" << key << " = {\n" << "\t\t\t" << writeSettings("isa", "XCBuildConfiguration", SettingsNoQuote) << ";\n" @@ -330,7 +337,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t) for (QMap::Iterator set_it = settings.begin(); set_it != settings.end(); ++set_it) t << "\t\t\t\t" << writeSettings(set_it.key(), set_it.value()) << ";\n"; t << "\t\t\t};\n" - << "\t\t\t" << writeSettings("name", name) << ";\n" + << "\t\t\t" << writeSettings("name", configName) << ";\n" << "\t\t};\n"; } t << "\t\t" << keyFor("QMAKE_SUBDIR_PBX_BUILDCONFIG_LIST") << " = {\n" @@ -1244,6 +1251,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) QString defaultConfig; for(int as_release = 0; as_release < 2; as_release++) { + QString configName = (as_release ? "Release" : "Debug"); + QMap settings; settings.insert("COPY_PHASE_STRIP", (as_release ? "YES" : "NO")); settings.insert("GCC_GENERATE_DEBUGGING_SYMBOLS", as_release ? "NO" : "YES"); @@ -1255,6 +1264,12 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) const ProStringList &l = project->values("QMAKE_MAC_XCODE_SETTINGS"); for(int i = 0; i < l.size(); ++i) { ProString name = l.at(i); + const ProKey buildKey(name + ".build"); + if (!project->isEmpty(buildKey)) { + const QString build = project->values(buildKey).first().toQString(); + if (build.toLower() != configName.toLower()) + continue; + } const QString value = project->values(ProKey(name + ".value")).join(QString(Option::field_sep)); const ProKey nkey(name + ".name"); if (!project->isEmpty(nkey)) @@ -1271,11 +1286,10 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) settings.insert("PRODUCT_NAME", escapeFilePath(lib.toQString())); } - QString name = (as_release ? "Release" : "Debug"); if (project->isActiveConfig("debug") != (bool)as_release) - defaultConfig = name; + defaultConfig = configName; for (int i = 0; i < buildConfigGroups.size(); i++) { - QString key = keyFor("QMAKE_PBX_BUILDCONFIG_" + name + buildConfigGroups.at(i)); + QString key = keyFor("QMAKE_PBX_BUILDCONFIG_" + configName + buildConfigGroups.at(i)); project->values(ProKey("QMAKE_PBX_BUILDCONFIGS_" + buildConfigGroups.at(i))).append(key); t << "\t\t" << key << " = {\n" << "\t\t\t" << writeSettings("isa", "XCBuildConfiguration", SettingsNoQuote) << ";\n" @@ -1429,7 +1443,7 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t) } } t << "\t\t\t};\n" - << "\t\t\t" << writeSettings("name", name) << ";\n" + << "\t\t\t" << writeSettings("name", configName) << ";\n" << "\t\t};\n"; } } -- cgit v1.2.3