summaryrefslogtreecommitdiffstats
path: root/mkspecs/common/symbian/symbian.conf
blob: 4e9690d3da48eaad4d5c6ed3d0da66622d747b37 (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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
#
# qmake configuration for all symbian mkspecs
#

TEMPLATE		= app
CONFIG			+= prepend_includepath qt warn_on release incremental link_prl sis_targets run_on_phone
QT			+= core gui
QMAKE_INCREMENTAL_STYLE = sublib

DEFINES			+= UNICODE QT_KEYPAD_NAVIGATION QT_SOFTKEYS_ENABLED QT_USE_MATH_H_FLOATS

QMAKE_COMPILER_DEFINES  += SYMBIAN

QMAKE_EXT_OBJ           = .o
QMAKE_EXT_RES           = _res.o
QMAKE_EXTENSION_SHLIB   = dll
QMAKE_EXTENSION_PLUGIN  = dll
QMAKE_EXTENSION_STATICLIB = lib

QMAKE_LEX		= flex
QMAKE_LEXFLAGS		=
QMAKE_YACC		= byacc
QMAKE_YACCFLAGS		= -d
QMAKE_CFLAGS		=
QMAKE_CFLAGS_DEPS	=
QMAKE_CFLAGS_WARN_ON	=
QMAKE_CFLAGS_WARN_OFF	=
QMAKE_CFLAGS_RELEASE	=
QMAKE_CFLAGS_DEBUG	=
QMAKE_CFLAGS_YACC	= -Wno-unused -Wno-parentheses

MMP_OPTION_KEYWORDS = CW ARMCC GCCE
VERSION_FLAGS.ARMCC = ARMCC_4
QMAKE_CXXFLAGS		= $$QMAKE_CFLAGS
# Symbian build system applies -cwd source on the MWCC command line.
# this causes problems with include paths, -cwd include uses the same
# rules for include paths as ARMCC
# This should really be fixed in raptor, as using CXXFLAGS means we pass
# both on the command line and rely on the compiler using the last specified
QMAKE_CXXFLAGS.CW	= -cwd include
QMAKE_CXXFLAGS.ARMCC      = --visibility_inlines_hidden
QMAKE_CXXFLAGS.ARMCC_4  = --import_all_vtbl
QMAKE_CXXFLAGS.GCCE	= -fvisibility-inlines-hidden
QMAKE_CXXFLAGS_DEPS	= $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON	= $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF	= $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE	= $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG	= $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC	= $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD	= $$QMAKE_CFLAGS_THREAD
QMAKE_CXXFLAGS_RTTI_ON	=
QMAKE_CXXFLAGS_RTTI_OFF	=
QMAKE_CXXFLAGS_EXCEPTIONS_ON =
QMAKE_CXXFLAGS_EXCEPTIONS_OFF =

QMAKE_INCDIR		=
QMAKE_INCDIR_QT		= $$[QT_INSTALL_HEADERS]

QMAKE_LFLAGS            =
QMAKE_LFLAGS.ARMCC      =
QMAKE_LFLAGS.GCCE       =
QMAKE_LFLAGS_EXCEPTIONS_ON =
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE    =
QMAKE_LFLAGS_DEBUG      =
QMAKE_LFLAGS_CONSOLE    =
QMAKE_LFLAGS_WINDOWS    =
QMAKE_LFLAGS_DLL        =
QMAKE_LINK_OBJECT_MAX   =
QMAKE_LINK_OBJECT_SCRIPT=

QMAKE_LIBS		= -llibc -llibm -leuser -llibdl
QMAKE_LIBS_CORE         = $$QMAKE_LIBS -lefsrv -lhal -lbafl -lapparc
QMAKE_LIBS_CFBSBITMAP   = -lfbscli -lbitgdi -lgdi
QMAKE_LIBS_GUI          = $$QMAKE_LIBS_CORE $$QMAKE_LIBS_CFBSBITMAP -lws32 -lapgrfx -lcone -leikcore -lmediaclientaudio -lcentralrepository
QMAKE_LIBS_NETWORK      = 
QMAKE_LIBS_EGL          = -llibEGL
QMAKE_LIBS_OPENGL       = -llibGLESv2
QMAKE_LIBS_OPENGL_ES1   = -llibGLESv1_CM
QMAKE_LIBS_OPENGL_ES2   = -llibGLESv2
QMAKE_LIBS_OPENGL_QT     = $$QMAKE_LIBS_OPENGL $$QMAKE_LIBS_CFBSBITMAP -lcone -lws32
QMAKE_LIBS_OPENGL_ES1_QT = $$QMAKE_LIBS_OPENGL_ES1 $$QMAKE_LIBS_CFBSBITMAP -lcone -lws32
QMAKE_LIBS_OPENGL_ES2_QT = $$QMAKE_LIBS_OPENGL_ES2 $$QMAKE_LIBS_CFBSBITMAP -lcone -lws32
QMAKE_LIBS_OPENVG       = $$QMAKE_LIBS_CFBSBITMAP -llibOpenVG
QMAKE_LIBS_THREAD       = -llibpthread
QMAKE_LIBS_COMPAT       = 
QMAKE_LIBS_S60          = -lavkon -leikcoctl

exists($${EPOCROOT}epoc32/include/platform/mw/akntranseffect.h) {
    QMAKE_LIBS_S60 += -lgfxtrans
}

exists($${EPOCROOT}epoc32/include/platform/sgresource/sgimage.h) {
    QMAKE_LIBS_OPENVG += -lsgresource
    QMAKE_LIBS_OPENGL_QT += -lsgresource
    QMAKE_LIBS_OPENGL_ES1_QT += -lsgresource
    QMAKE_LIBS_OPENGL_ES2_QT += -lsgresource
}

contains(QMAKE_HOST.os,Windows) {
    QMAKE_COPY           = copy /y
    QMAKE_COPY_DIR       = xcopy /s /q /y /i
    QMAKE_MOVE           = move
    QMAKE_DEL_FILE       = del /q 2> NUL
    QMAKE_MKDIR          = mkdir
    QMAKE_DEL_DIR        = rmdir
    QMAKE_DEL_TREE       = rmdir /s /q
    QMAKE_CHK_DIR_EXISTS = if not exist

    QMAKE_MOC            = $$[QT_INSTALL_BINS]\\moc.exe
    QMAKE_UIC            = $$[QT_INSTALL_BINS]\\uic.exe
    QMAKE_IDC            = $$[QT_INSTALL_BINS]\\idc.exe
} else {
    QMAKE_COPY           = cp
    QMAKE_COPY_DIR       = cp -r
    QMAKE_MOVE           = mv
    QMAKE_DEL_FILE       = rm -f
    QMAKE_MKDIR          = mkdir -p
    QMAKE_DEL_DIR        = rmdir
    QMAKE_DEL_TREE       = rm -rf
    QMAKE_CHK_DIR_EXISTS = test -d

    QMAKE_MOC            = $$[QT_INSTALL_BINS]/moc
    QMAKE_UIC            = $$[QT_INSTALL_BINS]/uic
    QMAKE_IDC            = $$[QT_INSTALL_BINS]/idc
}

QMAKE_IDL		  = midl
QMAKE_ZIP		  = zip -r -9
QMAKE_UNZIP               = unzip -o

QMAKE_WRITE_DEFAULT_RC    = 1

QMAKE_TAR                 = tar -cf
QMAKE_GZIP                = gzip -9f

QT_ARCH               = symbian

load(qt_config)

QMAKE_LIBS_QT_ENTRY     = -lqtmain$${QT_LIBINFIX}.lib
QMAKE_LIBS_NO_QT_ENTRY  = -llibcrt0.lib
QMAKE_LIBS_NO_QT_ENTRY_GCCE  = -llibcrt0_gcce.lib

# List of languages that have a Symbian language code mapping provided in localize_deployment.prf
SYMBIAN_SUPPORTED_LANGUAGES = \
    af sq am ar hy bn bg my be ca \
    hr cs da nl en et fi fr gd ka \
    de el gu he hi hu is id ga it \
    ja kn kk ko lo lv lt mk ms ml \
    mr mo mn nb pl pt pa ro ru sr \
    si sk sl so es sw sv tl ta te \
    th bo ti tr tk uk ur vi cy zu \
    nn eu zh gl fa st en_us fr_be \
    pt_br en_ca fr_ca el_cy tr_cy \
    en_tw en_hk en_cn en_jp en_th \
    sv_fi zh_hk es_419 en_za fr_ch \
    de_ch it_ch zh_tw en_in

SYMBIAN_LANGUAGES_WITH_TWO_CODES = ms id

# These directories must match what configure uses for QT_INSTALL_PLUGINS and QT_INSTALL_IMPORTS
QT_PLUGINS_BASE_DIR = /resource/qt$${QT_LIBINFIX}/plugins
QT_IMPORTS_BASE_DIR = /resource/qt$${QT_LIBINFIX}/imports

load(symbian/platform_paths)

# If environment.prf is provided by platform, load that.
# It is used for platform specific variable settings, such as SYMBIAN_VERSION.
exists($${EPOCROOT}epoc32/tools/qt/mkspecs/features/environment.prf) {
    load($${EPOCROOT}epoc32/tools/qt/mkspecs/features/environment.prf)
}

# Try to detect SDK version if it wasn't set by environment.prf
isEmpty(SYMBIAN_VERSION)|isEmpty(S60_VERSION) {
    exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.4.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.4.sis) {
        isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 5.4
        isEmpty(S60_VERSION): S60_VERSION = 5.4
    } else {
        exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.3.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.3.sis) {
            isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 5.3
            isEmpty(S60_VERSION): S60_VERSION = 5.3
        } else {
            # The Symbian^3 PDK does not necessarily contain the required sis files.
            # However, libstdcppv5 first appeared in Symbian^3 (S60 5.2), so check for that too.
            exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.2.sis)|exists($${EPOCROOT}epoc32/release/armv5/lib/libstdcppv5.dso) {
                isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = Symbian3
                isEmpty(S60_VERSION): S60_VERSION = 5.2
            } else {
                exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.1.sis) {
                    isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = Symbian2
                    isEmpty(S60_VERSION): S60_VERSION = 5.1
                } else {
                    exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v5.0.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v5.0.sis) {
                        isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 9.4
                        isEmpty(S60_VERSION): S60_VERSION = 5.0
                    } else {
                        exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.2.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.2.sis) {
                            isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 9.3
                            isEmpty(S60_VERSION): S60_VERSION = 3.2
                        } else {
                            exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/series60v3.1.sis)|exists($${EPOCROOT}epoc32/data/z/system/install/series60v3.1.sis) {
                                isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = 9.2
                                isEmpty(S60_VERSION): S60_VERSION = 3.1
                            } else {
                                isEmpty(SYMBIAN_VERSION): SYMBIAN_VERSION = Unknown
                                isEmpty(S60_VERSION): S60_VERSION = Unknown
                            }
                        }
                    }
                }
            }
        }
    }
}

# pkg_depends_webkit, pkg_depends_core, and pkg_platform_dependencies can be removed by developer
# if multiple languages need to be supported by pkg file. In that case the developer should declare
# multiple language compatible dependency statements him/herself.

default_deployment.pkg_prerules += pkg_depends_webkit pkg_depends_qt pkg_platform_dependencies
DEPLOYMENT += default_deployment default_bin_deployment default_resource_deployment default_reg_deployment

defineReplace(symbianRemoveSpecialCharacters) {
    # Produce identical string to what SymbianCommonGenerator::removeSpecialCharacters

    fixedStr = $$1

    fixedStr = $$replace(fixedStr, /,_)
    fixedStr = $$replace(fixedStr, \\\\,_)
    fixedStr = $$replace(fixedStr, " ",_)
    fixedStr = $$replace(fixedStr, :,_)

    return ($$fixedStr)
}

# Determines translations that are Symbian supported
defineTest(matchSymbianLanguages) {
    # Qt language codes for which we need to parse .ts file
    SYMBIAN_MATCHED_LANGUAGES =
    # List of translation files for matched languages
    SYMBIAN_MATCHED_TRANSLATIONS =
    # List of Qt language codes for which we have no mapped Symbian code but we have a fallback code
    # and therefore need to generate a mapping for in localize_deployment.prf.
    # The fallback code means plain language code for languages that have both language and country codes.
    # E.g. the fallback code for language "zh_CN" would be "zh".
    SYMBIAN_UNMAPPED_LANGUAGES =
    # List of handled Qt language codes to avoid duplicate Symbian language codes in case both
    # unmapped language+country combination and its fallback code, or multiple unmapped language+country
    # combinations that have same fallback code are included.
    HANDLED_LANGUAGES =

    # Cannot parse .ts file for language here, so detect it from filename.
    # Allow two and three character language and country codes.
    for(translation, TRANSLATIONS) {
        low_translation = $$lower($$translation)
        language = $$replace(low_translation, "^(.*/)?[^/]+_(([^_]{2,3}_)?[^_]{2,3})\\.ts$", \\2)
        !contains(HANDLED_LANGUAGES, $$language) {
            HANDLED_LANGUAGES += $$language
            # Make sure translation path is absolute or shadow builds will not work
            !contains(translation, "(^/|^\\\\|^.:).*"): translation = $$_PRO_FILE_PWD_/$$translation

            contains(SYMBIAN_SUPPORTED_LANGUAGES, $$language) {
                SYMBIAN_MATCHED_LANGUAGES += $$language
                SYMBIAN_MATCHED_TRANSLATIONS += $$translation
            } else {
                # No direct mapping for specified language found. Check if a fallback language code can be used.
                strippedLanguage = $$replace(language, "_.*$",)
                contains(SYMBIAN_SUPPORTED_LANGUAGES, $$strippedLanguage):!contains(HANDLED_LANGUAGES, $$strippedLanguage) {
                    HANDLED_LANGUAGES += $$strippedLanguage
                    SYMBIAN_UNMAPPED_LANGUAGES += $$language
                    SYMBIAN_MATCHED_LANGUAGES += $$language
                    SYMBIAN_MATCHED_TRANSLATIONS += $$translation
                    SYMBIAN_LANGUAGE_FALLBACK.$$language = $$strippedLanguage
                    export(SYMBIAN_LANGUAGE_FALLBACK.$$language)
                }
            }
        }
    }

    isEmpty(SYMBIAN_MATCHED_LANGUAGES): SYMBIAN_MATCHED_LANGUAGES = en

    export(SYMBIAN_MATCHED_LANGUAGES)
    export(SYMBIAN_MATCHED_TRANSLATIONS)
    export(SYMBIAN_UNMAPPED_LANGUAGES)
}

# Symbian pkg files that define multiple languages require a language specific string to be
# defined for various items, even though the string often needs to be same for all languages.
# This replacement method will generate correct string for such cases based on TRANSLATIONS
# variable.
defineReplace(addLanguageDependentPkgItem) {
    localize_deployment:!isEmpty(TRANSLATIONS):isEmpty(SYMBIAN_MATCHED_LANGUAGES) {
        matchSymbianLanguages()
    }

    pkgItem = $$eval($$1)
    pkgLanguageList =

    for(matchedLanguage, SYMBIAN_MATCHED_LANGUAGES) {
        pkgLanguageList += "\"$$pkgItem\""
        # If the language has two mappings, add the item another time.
        contains(SYMBIAN_LANGUAGES_WITH_TWO_CODES, $$matchedLanguage): pkgLanguageList += "\"$$pkgItem\""
    }

    isEmpty(pkgLanguageList): pkgLanguageList = "\"$$pkgItem\""

    return($$join(pkgLanguageList,",",,))
}

# Sometimes a relative path to original .pro file directory is necessary when doing shadow builds.
defineReplace(relativeProPath) {
    RELATIVE_PRO_FILE_PWD = $$replace(OUT_PWD, "^.:", "")  # Lose drive letter if any
    RELATIVE_PRO_FILE_PWD = $$replace(RELATIVE_PRO_FILE_PWD, "/[^/]*", "../")$$replace(_PRO_FILE_PWD_, "^[^/]*/", "")
    return($$RELATIVE_PRO_FILE_PWD)
}