summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/symbian/def_files.prf
blob: 8bcd096e6a5ba105fa9059e19ffa464d55331b21 (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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# With DEF files enabled, removed exported symbols are treated as errors
# and there is binary compatibility between successive builds.

CONFIG -= def_files_disabled

symbian-abld|symbian-sbsv2 {
    # Firstly, if the MMP_RULES already contain a defBlock variable, don't generate another one
    # (this bit is slightly magic, because it depends upon everyone creating their DEFFILE statements
    # in a defBlock variable; but otherwise we have to expand MMP_RULES then scan for the DEFFILE keyword)
    !contains(MMP_RULES, defBlock) {
        # Apps are executables on Symbian, so don't have exports, and therefore don't have DEF files
        # Plugins use standard DEF files, which qmake generates, so shouldn't be using these DEFFILE
        # statements - they use the qmake generated statements instead
        # Static libraries obviously don't have DEF files, as they don't take part in dynamic linkage
        !contains(TEMPLATE, app):!contains(CONFIG, plugin):!contains(CONFIG, staticlib): {
            !isEmpty(DEF_FILE) {
                defBlock = \
                "$${LITERAL_HASH}ifdef WINSCW" \
                "DEFFILE $$DEF_FILE/bwins/$${TARGET}.def" \
                "$${LITERAL_HASH}elif defined EABI" \
                "DEFFILE $$DEF_FILE/eabi/$${TARGET}.def" \
                "$${LITERAL_HASH}endif"
            } else:!isEmpty(defFilePath) {
                defBlock = \
                "$${LITERAL_HASH}ifdef WINSCW" \
                "DEFFILE $$defFilePath/bwins/$${TARGET}.def" \
                "$${LITERAL_HASH}elif defined EABI" \
                "DEFFILE $$defFilePath/eabi/$${TARGET}.def" \
                "$${LITERAL_HASH}endif"
            } else {
                # If defFilePath is not defined, then put the folders containing the DEF files at the
                # same level as the .pro (and generated MMP) file(s)
                defBlock = \
                "$${LITERAL_HASH}ifdef WINSCW" \
                "DEFFILE ./bwins/$${TARGET}.def" \
                "$${LITERAL_HASH}elif defined EABI" \
                "DEFFILE ./eabi/$${TARGET}.def" \
                "$${LITERAL_HASH}endif"
            }
            MMP_RULES += defBlock
        }
    }

} else:contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) {
    !isEmpty(DEF_FILE) {
        defFile = $$DEF_FILE
    } else {
        defFile = .
    }
    system("$$QMAKE_CHK_DIR_EXISTS $$_PRO_FILE_PWD_/$$defFile") {
        !exists("$$_PRO_FILE_PWD_/$$defFile/eabi") {
            system("$$QMAKE_MKDIR $$_PRO_FILE_PWD_/$$defFile/eabi")
        }
        elf2e32FileToAdd = $$_PRO_FILE_PWD_/$$defFile/eabi/$$basename(TARGET)u.def
    } else {
        elf2e32FileToAdd = $$_PRO_FILE_PWD_/$$defFile
    }
    QMAKE_ELF2E32_FLAGS += "`test -e $$elf2e32FileToAdd && echo --definput=$$elf2e32FileToAdd`"

    symbianObjdir = $$OBJECTS_DIR
    isEmpty(symbianObjdir):symbianObjdir = .

    freeze_target.target = freeze
    freeze_target.depends = first
    # The perl part is to convert to unix line endings and remove comments, which the s60 tools refuse to do.
    freeze_target.commands = perl -n -e \'next if (/; NEW/); s/\r//g; if (/MISSING:(.*)/x) { print(\"\$\$1 ABSENT\\n\"); } else { print; }\' < $$symbianObjdir/$${TARGET}.def >  $$elf2e32FileToAdd
    QMAKE_EXTRA_TARGETS += freeze_target
} else:contains(TEMPLATE, subdirs) {
    freeze_target.target = freeze
    freeze_target.CONFIG = recursive
    freeze_target.recurse = $$SUBDIRS
    QMAKE_EXTRA_TARGETS += freeze_target
} else {
    freeze_target.target = freeze
    freeze_target.commands =
    QMAKE_EXTRA_TARGETS += freeze_target
}