qmake: Use PBXResourcesBuildPhase for QMAKE_BUNDLE_DATA without a path
The PBXResourcesBuildPhase will optimize resources, such as turning XIB files into NIB files, running pngcrush on images, turning string files into binary plists, etc, so we prefer that if possible. Unfortunatly this phase does not support custom paths, so whenever we encounter bundle data with a custom path we fall back to the regular PBXCopyFilesBuildPhase. Change-Id: I539db03dd7982fd37293123b6428cdb695f64d2b Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
This commit is contained in:
parent
3cc738dfc7
commit
0e548b5856
@ -993,24 +993,6 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
|
||||
<< "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";" << "\n"
|
||||
<< "\t\t" << "};" << "\n";
|
||||
}
|
||||
if(project->isActiveConfig("app_bundle") && project->first("TEMPLATE") == "app") { //BUNDLE RESOURCES
|
||||
QString grp("Bundle Resources"), key = keyFor(grp);
|
||||
project->values("QMAKE_PBX_BUILDPHASES").append(key);
|
||||
t << "\t\t" << key << " = {" << "\n"
|
||||
<< "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << "files = (" << "\n";
|
||||
if(!project->isEmpty("ICON")) {
|
||||
ProString icon = project->first("ICON");
|
||||
if (icon.length() >= 2 && (icon.at(0) == '"' || icon.at(0) == '\'') && icon.endsWith(icon.at(0)))
|
||||
icon = icon.mid(1, icon.length()-2);
|
||||
t << "\t\t\t\t" << keyFor(icon + ".BUILDABLE") << ",\n";
|
||||
}
|
||||
t << "\t\t\t" << ");" << "\n"
|
||||
<< "\t\t\t" << writeSettings("isa", "PBXResourcesBuildPhase", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";" << "\n"
|
||||
<< "\t\t" << "};" << "\n";
|
||||
}
|
||||
if (!project->isEmpty("DESTDIR")) {
|
||||
QString phase_key = keyFor("QMAKE_PBX_TARGET_COPY_PHASE");
|
||||
QString destDir = project->first("DESTDIR").toQString();
|
||||
@ -1029,55 +1011,87 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
|
||||
<< "\t\t\t" << writeSettings("shellScript", fixForOutput("cp -r $BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME " + escapeFilePath(destDir))) << ";" << "\n"
|
||||
<< "\t\t" << "};\n";
|
||||
}
|
||||
//BUNDLE_DATA BUILDPHASE (copy)
|
||||
if(!project->isEmpty("QMAKE_BUNDLE_DATA")) {
|
||||
// Copy Bundle Resources
|
||||
if (!project->isEmpty("QMAKE_BUNDLE_DATA")) {
|
||||
ProStringList bundle_file_refs;
|
||||
ProStringList bundle_resources_files;
|
||||
|
||||
bool useCopyResourcesPhase = project->isActiveConfig("app_bundle") && project->first("TEMPLATE") == "app";
|
||||
|
||||
//all bundle data
|
||||
const ProStringList &bundle_data = project->values("QMAKE_BUNDLE_DATA");
|
||||
for(int i = 0; i < bundle_data.count(); i++) {
|
||||
ProStringList pbx_files;
|
||||
ProStringList bundle_files;
|
||||
ProString path = project->first(ProKey(bundle_data[i] + ".path"));
|
||||
//all files
|
||||
const ProStringList &files = project->values(ProKey(bundle_data[i] + ".files"));
|
||||
for(int file = 0; file < files.count(); file++) {
|
||||
QString fn = files[file].toQString();
|
||||
QString file_ref_key = keyFor("QMAKE_PBX_BUNDLE_COPY_FILE_REF." + bundle_data[i] + "-" + fn);
|
||||
QString file_ref_key = keyFor("QMAKE_PBX_BUNDLE_DATA_FILE_REF." + bundle_data[i] + "-" + fn);
|
||||
bundle_file_refs += file_ref_key;
|
||||
t << "\t\t" << file_ref_key << " = {" << "\n"
|
||||
<< "\t\t\t" << writeSettings("isa", "PBXFileReference", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("path", escapeFilePath(fn)) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("sourceTree", sourceTreeForFile(fn)) << ";" << "\n"
|
||||
<< "\t\t" << "};" << "\n";
|
||||
QString copy_file_key = keyFor("QMAKE_PBX_BUNDLE_COPY_FILE." + bundle_data[i] + "-" + fn);
|
||||
pbx_files += copy_file_key;
|
||||
t << "\t\t" << copy_file_key << " = {\n"
|
||||
QString file_key = keyFor("QMAKE_PBX_BUNDLE_DATA_FILE." + bundle_data[i] + "-" + fn);
|
||||
bundle_files += file_key;
|
||||
t << "\t\t" << file_key << " = {\n"
|
||||
<< "\t\t\t" << writeSettings("fileRef", file_ref_key) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("isa", "PBXBuildFile", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t" << "}" << ";" << "\n";
|
||||
}
|
||||
//the phase
|
||||
QString phase_key = keyFor("QMAKE_PBX_BUNDLE_COPY." + bundle_data[i]);
|
||||
QString path;
|
||||
if (!project->isEmpty(ProKey(bundle_data[i] + ".version"))) {
|
||||
//###
|
||||
|
||||
if (!useCopyResourcesPhase || !path.isEmpty()) {
|
||||
// The resource copy phase doesn't support paths, so we have to use
|
||||
// a regular file copy phase (which doesn't optimize the resources).
|
||||
QString phase_key = keyFor("QMAKE_PBX_BUNDLE_COPY." + bundle_data[i]);
|
||||
if (!project->isEmpty(ProKey(bundle_data[i] + ".version"))) {
|
||||
//###
|
||||
}
|
||||
|
||||
project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES").append(phase_key);
|
||||
t << "\t\t" << phase_key << " = {\n"
|
||||
<< "\t\t\t" << writeSettings("name", "Copy '" + bundle_data[i] + "' Files to Bundle") << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("dstPath", escapeFilePath(path)) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("dstSubfolderSpec", "1", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("files", bundle_files, SettingsAsList, 4) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("isa", "PBXCopyFilesBuildPhase", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t" << "}" << ";" << "\n";
|
||||
} else {
|
||||
// Otherwise we leave it to the resource copy phase below
|
||||
bundle_resources_files += bundle_files;
|
||||
}
|
||||
path += project->first(ProKey(bundle_data[i] + ".path"));
|
||||
project->values("QMAKE_PBX_PRESCRIPT_BUILDPHASES").append(phase_key);
|
||||
t << "\t\t" << phase_key << " = {\n"
|
||||
<< "\t\t\t" << writeSettings("name", "Bundle Copy [" + bundle_data[i] + "]") << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("dstPath", escapeFilePath(path)) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("dstSubfolderSpec", "1", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("files", pbx_files, SettingsAsList, 4) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("isa", "PBXCopyFilesBuildPhase", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t" << "}" << ";" << "\n";
|
||||
}
|
||||
QString bundle_copy_key = keyFor("QMAKE_PBX_BUNDLE_COPY");
|
||||
project->values("QMAKE_PBX_GROUPS").append(bundle_copy_key);
|
||||
t << "\t\t" << bundle_copy_key << " = {" << "\n"
|
||||
|
||||
if (useCopyResourcesPhase) {
|
||||
if (!project->isEmpty("ICON")) {
|
||||
ProString icon = project->first("ICON");
|
||||
if (icon.length() >= 2 && (icon.at(0) == '"' || icon.at(0) == '\'') && icon.endsWith(icon.at(0))) {
|
||||
icon = icon.mid(1, icon.length() - 2);
|
||||
bundle_resources_files += keyFor(icon + ".BUILDABLE");
|
||||
}
|
||||
}
|
||||
|
||||
QString grp("Copy Bundle Resources"), key = keyFor(grp);
|
||||
project->values("QMAKE_PBX_BUILDPHASES").append(key);
|
||||
t << "\t\t" << key << " = {" << "\n"
|
||||
<< "\t\t\t" << writeSettings("buildActionMask", "2147483647", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("files", bundle_resources_files, SettingsAsList, 4) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("isa", "PBXResourcesBuildPhase", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("runOnlyForDeploymentPostprocessing", "0", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("name", escapeFilePath(grp)) << ";" << "\n"
|
||||
<< "\t\t" << "};" << "\n";
|
||||
}
|
||||
|
||||
QString bundle_data_key = keyFor("QMAKE_PBX_BUNDLE_DATA");
|
||||
project->values("QMAKE_PBX_GROUPS").append(bundle_data_key);
|
||||
t << "\t\t" << bundle_data_key << " = {" << "\n"
|
||||
<< "\t\t\t" << writeSettings("children", bundle_file_refs, SettingsAsList, 4) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("isa", "PBXGroup", SettingsNoQuote) << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("name", "Source [bundle data]") << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("name", "Bundle Resources") << ";" << "\n"
|
||||
<< "\t\t\t" << writeSettings("sourceTree", "<Group>") << ";" << "\n"
|
||||
<< "\t\t" << "};" << "\n";
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user