qt5base-lts/mkspecs/macx-ios-clang/features/qt.prf
Tor Arne Vestbø 9b8c4b3dea iOS: Be more specific in where we look for object files to rename main
When building under Xcode we can limit the object files search to the
current SDK and debug/release configuration.

Change-Id: Ic405f13f46a594e3ed20d82ca6b84e7e67edebfc
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
2013-10-31 10:00:49 +01:00

55 lines
2.5 KiB
Plaintext

equals(TEMPLATE, app):contains(QT, gui(-private)?) {
LIBS *= -L$$[QT_INSTALL_PLUGINS/get]/platforms
lib_name = qios
lib_path_and_base = $$[QT_INSTALL_PLUGINS/get]/platforms/lib$${lib_name}$$qtPlatformTargetSuffix()
LIBS += -l$${lib_name}$$qtPlatformTargetSuffix() $$fromfile($${lib_path_and_base}.prl, QMAKE_PRL_LIBS)
# By marking qt_registerPlatformPlugin as undefined, we ensure that
# the plugin.o translation unit is considered for inclusion in
# the final binary, which in turn ensures that the plugin's
# static initializer is included and run.
QMAKE_LFLAGS += -u _qt_registerPlatformPlugin
# We do link and dependency resolution for the platform plugin
# manually, since we know we always need the plugin, so we don't
# need to generate an import for it.
CONFIG -= import_qpa_plugin
!no_main_wrapper {
# We use ld to rename the _main symbol to _qt_main, so that we don't get a symbol clash
# with the _main we provide that calls UIApplicationMain. We need to make a copy of the
# original object file, as ld will not copy over DWARF debug information to the output
# file. Instead, it will inject a reference back to the original object file, so when
# Xcode runs dsymutil to make the final dSYM file it will still find the debug info
# for the object file that provided the original _main. This back-reference has the
# interesting side-effect of the debug information still referring to the original
# symbol name, so stack-traces will show both our wrapper main and the original
# user main as 'main', and adding a symbolic breakpoint for 'main' will break on
# both functions. Although a bit weird, it's a good thing, as the user will still be
# able to add symbolic breakpoints for 'main', not caring that the symbol is actually
# called 'qt_main' now.
macx-xcode {
objects_dir = "${OBJECT_FILE_DIR}-${CURRENT_VARIANT}/${CURRENT_ARCH}"
} else {
objects_dir = $$OBJECTS_DIR
isEmpty(objects_dir): \
objects_dir = .
}
!isEmpty(QMAKE_PRE_LINK): \
QMAKE_PRE_LINK += ";"
QMAKE_PRE_LINK += \
"for f in $(find $${objects_dir} -name '*.o'); do" \
"(nm $f | grep -q 'T _main' && cp $f $f.original" \
"&& ld -r -alias _main _qt_main -unexported_symbol _main $f.original -o $f)" \
"|| true" \
"; done"
}
}
load(qt)