summaryrefslogtreecommitdiffstats
path: root/mkspecs/macx-ios-clang/features/qt.prf
blob: 9202a70a5a5d12b69133f4b779d2acade87f5a3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

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)