summaryrefslogtreecommitdiffstats
path: root/qmake
diff options
context:
space:
mode:
Diffstat (limited to 'qmake')
-rw-r--r--qmake/doc/src/qmake-manual.qdoc52
-rw-r--r--qmake/generators/unix/unixmake2.cpp48
2 files changed, 84 insertions, 16 deletions
diff --git a/qmake/doc/src/qmake-manual.qdoc b/qmake/doc/src/qmake-manual.qdoc
index a4e28b4d0c..58c51502b0 100644
--- a/qmake/doc/src/qmake-manual.qdoc
+++ b/qmake/doc/src/qmake-manual.qdoc
@@ -1821,9 +1821,55 @@
Specifies the name of the property list file, \c{.plist}, you
would like to include in your \macos, iOS, tvOS, and watchOS application bundle.
- In the \c{.plist} file, you can define some variables, e.g., @EXECUTABLE@,
- which qmake will replace with the actual executable name. Other variables
- include @ICON@, @TYPEINFO@, @LIBRARY@, and @SHORT_VERSION@.
+ In the \c{.plist} file, you can define some variables which
+ qmake will replace with the relevant values:
+
+ \table
+ \header
+ \li Placeholder(s)
+ \li Effect
+ \row
+ \li \c ${PRODUCT_BUNDLE_IDENTIFIER}, \c @BUNDLEIDENTIFIER@
+ \li Expands to the target bundle's bundle identifier string,
+ for example: \c{com.example.myapp}. Determined by concatenating the
+ values of QMAKE_TARGET_BUNDLE_PREFIX and QMAKE_BUNDLE, separated
+ by a full stop (\c{.}).
+ \row
+ \li \c ${EXECUTABLE_NAME}, \c @EXECUTABLE@, \c @LIBRARY@
+ \li Equivalent to the value of QMAKE_APPLICATION_BUNDLE_NAME,
+ QMAKE_PLUGIN_BUNDLE_NAME, or QMAKE_FRAMEWORK_BUNDLE_NAME
+ (depending on the type of target being created),
+ or TARGET if none of the previous values are set.
+ \row
+ \li \c ${ASSETCATALOG_COMPILER_APPICON_NAME}, \c @ICON@
+ \li Expands to the value of ICON.
+ \row
+ \li \c ${QMAKE_PKGINFO_TYPEINFO}, \c @TYPEINFO@
+ \li Expands to the value of QMAKE_PKGINFO_TYPEINFO.
+ \row
+ \li \c ${QMAKE_FULL_VERSION}, \c @FULL_VERSION@
+ \li Expands to the value of VERSION expressed with three version components.
+ \row
+ \li \c ${QMAKE_SHORT_VERSION}, \c @SHORT_VERSION@
+ \li Expands to the value of VERSION expressed with two version components.
+ \row
+ \li \c ${MACOSX_DEPLOYMENT_TARGET}
+ \li Expands to the value of QMAKE_MACOSX_DEPLOYMENT_TARGET.
+ \row
+ \li \c ${IPHONEOS_DEPLOYMENT_TARGET}
+ \li Expands to the value of QMAKE_IPHONEOS_DEPLOYMENT_TARGET.
+ \row
+ \li \c ${TVOS_DEPLOYMENT_TARGET}
+ \li Expands to the value of QMAKE_TVOS_DEPLOYMENT_TARGET.
+ \row
+ \li \c ${WATCHOS_DEPLOYMENT_TARGET}
+ \li Expands to the value of QMAKE_WATCHOS_DEPLOYMENT_TARGET.
+ \endtable
+
+ \note When using the Xcode generator, the above \c{${var}}-style
+ placeholders are replaced directly by the Xcode build system and are not
+ handled by qmake. The \c{@var@} style placeholders work only with the qmake
+ Makefile generators and not with the Xcode generator.
If building for iOS, and the \c{.plist} file contains the key
\c NSPhotoLibraryUsageDescription, qmake will include an additional plugin
diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
index f7097e58dc..15ba4f0309 100644
--- a/qmake/generators/unix/unixmake2.cpp
+++ b/qmake/generators/unix/unixmake2.cpp
@@ -806,14 +806,23 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
t << mkdir_p_asstring(destdir) << "\n\t";
ProStringList commonSedArgs;
if (!project->values("VERSION").isEmpty()) {
- commonSedArgs << "-e \"s,@SHORT_VERSION@," << project->first("VER_MAJ") << "."
- << project->first("VER_MIN") << ",g\" ";
- commonSedArgs << "-e \"s,@FULL_VERSION@," << project->first("VER_MAJ") << "."
- << project->first("VER_MIN") << "."
- << project->first("VER_PAT") << ",g\" ";
+ const ProString shortVersion =
+ project->first("VER_MAJ") + "." +
+ project->first("VER_MIN");
+ commonSedArgs << "-e \"s,@SHORT_VERSION@," << shortVersion << ",g\" ";
+ commonSedArgs << "-e \"s,\\$${QMAKE_SHORT_VERSION}," << shortVersion << ",g\" ";
+ const ProString fullVersion =
+ project->first("VER_MAJ") + "." +
+ project->first("VER_MIN") + "." +
+ project->first("VER_PAT");
+ commonSedArgs << "-e \"s,@FULL_VERSION@," << fullVersion << ",g\" ";
+ commonSedArgs << "-e \"s,\\$${QMAKE_FULL_VERSION}," << fullVersion << ",g\" ";
}
- commonSedArgs << "-e \"s,@TYPEINFO@,"<< (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") ?
- QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4)) << ",g\" ";
+ const ProString typeInfo = project->isEmpty("QMAKE_PKGINFO_TYPEINFO")
+ ? QString::fromLatin1("????")
+ : project->first("QMAKE_PKGINFO_TYPEINFO").left(4);
+ commonSedArgs << "-e \"s,@TYPEINFO@," << typeInfo << ",g\" ";
+ commonSedArgs << "-e \"s,\\$${QMAKE_PKGINFO_TYPEINFO}," << typeInfo << ",g\" ";
QString bundlePrefix = project->first("QMAKE_TARGET_BUNDLE_PREFIX").toQString();
if (bundlePrefix.isEmpty())
@@ -828,6 +837,16 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
// replace invalid bundle id characters
bundleIdentifier.replace('_', '-');
commonSedArgs << "-e \"s,@BUNDLEIDENTIFIER@," << bundleIdentifier << ",g\" ";
+ commonSedArgs << "-e \"s,\\$${PRODUCT_BUNDLE_IDENTIFIER}," << bundleIdentifier << ",g\" ";
+
+ commonSedArgs << "-e \"s,\\$${MACOSX_DEPLOYMENT_TARGET},"
+ << project->first("QMAKE_MACOSX_DEPLOYMENT_TARGET").toQString() << ",g\" ";
+ commonSedArgs << "-e \"s,\\$${IPHONEOS_DEPLOYMENT_TARGET},"
+ << project->first("QMAKE_IPHONEOS_DEPLOYMENT_TARGET").toQString() << ",g\" ";
+ commonSedArgs << "-e \"s,\\$${TVOS_DEPLOYMENT_TARGET},"
+ << project->first("QMAKE_TVOS_DEPLOYMENT_TARGET").toQString() << ",g\" ";
+ commonSedArgs << "-e \"s,\\$${WATCHOS_DEPLOYMENT_TARGET},"
+ << project->first("QMAKE_WATCHOS_DEPLOYMENT_TARGET").toQString() << ",g\" ";
if (!isFramework) {
ProString app_bundle_name = var("QMAKE_APPLICATION_BUNDLE_NAME");
@@ -843,11 +862,14 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
<< "@sed ";
for (const ProString &arg : qAsConst(commonSedArgs))
t << arg;
- t << "-e \"s,@ICON@," << icon.section(Option::dir_sep, -1) << ",g\" "
+ const QString iconName = icon.section(Option::dir_sep, -1);
+ t << "-e \"s,@ICON@," << iconName << ",g\" "
+ << "-e \"s,\\$${ASSETCATALOG_COMPILER_APPICON_NAME}," << iconName << ",g\" "
<< "-e \"s,@EXECUTABLE@," << app_bundle_name << ",g\" "
<< "-e \"s,@LIBRARY@," << plugin_bundle_name << ",g\" "
- << "-e \"s,@TYPEINFO@,"<< (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") ?
- QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4)) << ",g\" "
+ << "-e \"s,\\$${EXECUTABLE_NAME}," << (app_bundle_name.isEmpty() ? app_bundle_name : plugin_bundle_name) << ",g\" "
+ << "-e \"s,@TYPEINFO@,"<< typeInfo << ",g\" "
+ << "-e \"s,\\$${QMAKE_PKGINFO_TYPEINFO},"<< typeInfo << ",g\" "
<< "" << info_plist << " >" << info_plist_out << endl;
//copy the icon
if (!project->isEmpty("ICON")) {
@@ -873,9 +895,9 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
for (const ProString &arg : qAsConst(commonSedArgs))
t << arg;
t << "-e \"s,@LIBRARY@," << lib_bundle_name << ",g\" "
- << "-e \"s,@TYPEINFO@,"
- << (project->isEmpty("QMAKE_PKGINFO_TYPEINFO") ?
- QString::fromLatin1("????") : project->first("QMAKE_PKGINFO_TYPEINFO").left(4)) << ",g\" "
+ << "-e \"s,\\$${EXECUTABLE_NAME}," << lib_bundle_name << ",g\" "
+ << "-e \"s,@TYPEINFO@," << typeInfo << ",g\" "
+ << "-e \"s,\\$${QMAKE_PKGINFO_TYPEINFO}," << typeInfo << ",g\" "
<< "" << info_plist << " >" << info_plist_out << endl;
}
break;