From: Morten Johan Sørvig Date: Wed, 24 Sep 2014 21:12:45 +0000 (+0200) Subject: Work around legacy framework structures. X-Git-Tag: v5.4.0~14^2^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d9cafeb0f1a097997a82aeb2e5cccac1d24750cc;p=platform%2Fupstream%2Fqttools.git Work around legacy framework structures. Existing versions of qmake produce application bundles which are incompatible with OS X code signing. Deploy framework Info.plist files to the correct location. Patch them to remove any "_debug" suffix on the value for CFBundleExecutable. Task-number: QTBUG-32896 Change-Id: Id657e394f3bf919713a43e395e716bf46488c644 Reviewed-by: Morten Johan Sørvig --- diff --git a/src/macdeployqt/shared/shared.cpp b/src/macdeployqt/shared/shared.cpp index c31bc7f..3e581a9 100644 --- a/src/macdeployqt/shared/shared.cpp +++ b/src/macdeployqt/shared/shared.cpp @@ -154,6 +154,19 @@ bool linkFilePrintStatus(const QString &file, const QString &link) } } +void patch_debugInInfoPlist(const QString &infoPlistPath) +{ + // Older versions of qmake may have the "_debug" binary as + // the value for CFBundleExecutable. Remove it. + QFile infoPlist(infoPlistPath); + infoPlist.open(QIODevice::ReadOnly); + QByteArray contents = infoPlist.readAll(); + infoPlist.close(); + infoPlist.open(QIODevice::WriteOnly | QIODevice::Truncate); + contents.replace("_debug", ""); // surely there are no legit uses of "_debug" in an Info.plist + infoPlist.write(contents); +} + FrameworkInfo parseOtoolLibraryLine(const QString &line, bool useDebugLibs) { FrameworkInfo info; @@ -525,6 +538,14 @@ QString copyFramework(const FrameworkInfo &framework, const QString path) linkFilePrintStatus("Versions/Current/Resources", frameworkDestinationDirectory + "/Resources"); linkFilePrintStatus(framework.version, frameworkDestinationDirectory + "/Versions/Current"); + // Correct Info.plist location for frameworks produced by older versions of qmake + // Contents/Info.plist should be Versions/5/Resources/Info.plist + const QString legacyInfoPlistPath = framework.frameworkPath + "/Contents/Info.plist"; + const QString correctInfoPlistPath = frameworkDestinationDirectory + "/Resources/Info.plist"; + if (QFile(legacyInfoPlistPath).exists()) { + copyFilePrintStatus(legacyInfoPlistPath, correctInfoPlistPath); + patch_debugInInfoPlist(correctInfoPlistPath); + } return frameworkDestinationBinaryPath; }