summaryrefslogtreecommitdiffstats
path: root/qmake/generators/symbian
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2010-11-24 21:24:30 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2010-11-24 21:24:30 (GMT)
commitcb34d11e4c98e768432e00c867b3321d3b89dd9d (patch)
treec57918ee4d95e0642d195b4b8b7a4dc9c2b2863d /qmake/generators/symbian
parent422282c4f3e439990abc6c6b79699d943b9541d7 (diff)
parentd13d0246352a5d6c26d28d2b8ff8313eb30f6299 (diff)
downloadQt-cb34d11e4c98e768432e00c867b3321d3b89dd9d.zip
Qt-cb34d11e4c98e768432e00c867b3321d3b89dd9d.tar.gz
Qt-cb34d11e4c98e768432e00c867b3321d3b89dd9d.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public: (28 commits) Fixed tst_qwidget::winIdChangeEvent Use parent class function to generate Makefile headers in Symbian Fix spaces Fix QPixmap::fromImage() in the OpenVG pixmap backend. Native color dialog on symbian Fix non-stroked filled paths in OpenVG paint engine. Fix symbian-mmp.conf include path Fix a build break when namespace is defined Fixed namespace issues related to epocroot.cpp Corrected ASCII comparison and removed extra braces Add symbian scope for qfiledialog_symbian.cpp Resolve EPOCROOT in qt.conf using same logic as in .pro Make epocroot resolving compatible with more build environments Fix for QtOpenGL RVCT4 compilation error Removed extra cpp and done changes based on comments Correct flags for Symbian file dialogs Fix for WServ 64 crash on Symbian. Use include(original mkspec) instead of copying of mkspec to default Fixed code style of d92cbfc5, reported by git push. Switched qdesktopservices to use SchemeHandler for Symbian^3 and later. ...
Diffstat (limited to 'qmake/generators/symbian')
-rw-r--r--qmake/generators/symbian/initprojectdeploy_symbian.cpp12
-rw-r--r--qmake/generators/symbian/symbian_makefile.h10
-rw-r--r--qmake/generators/symbian/symbiancommon.cpp471
-rw-r--r--qmake/generators/symbian/symbiancommon.h35
-rw-r--r--qmake/generators/symbian/symmake.cpp47
-rw-r--r--qmake/generators/symbian/symmake.h5
-rw-r--r--qmake/generators/symbian/symmake_abld.cpp25
-rw-r--r--qmake/generators/symbian/symmake_sbsv2.cpp33
8 files changed, 366 insertions, 272 deletions
diff --git a/qmake/generators/symbian/initprojectdeploy_symbian.cpp b/qmake/generators/symbian/initprojectdeploy_symbian.cpp
index 22a4a82..81236d4 100644
--- a/qmake/generators/symbian/initprojectdeploy_symbian.cpp
+++ b/qmake/generators/symbian/initprojectdeploy_symbian.cpp
@@ -47,7 +47,7 @@
#include <qdebug.h>
// Included from tools/shared
-#include <symbian/epocroot.h>
+#include <symbian/epocroot_p.h>
#define SYSBIN_DIR "/sys/bin"
#define HW_Z_DIR "epoc32/data/z"
@@ -75,7 +75,7 @@ static bool isPlugin(const QFileInfo& info, const QString& devicePath)
&& (devicePath.size() < 8
|| (0 != devicePath.compare(QLatin1String(SYSBIN_DIR), Qt::CaseInsensitive)
&& 0 != devicePath.mid(1).compare(QLatin1String(":" SYSBIN_DIR), Qt::CaseInsensitive)
- && 0 != devicePath.compare(epocRoot() + QLatin1String(HW_Z_DIR SYSBIN_DIR))))) {
+ && 0 != devicePath.compare(qt_epocRoot() + QLatin1String(HW_Z_DIR SYSBIN_DIR))))) {
return true;
} else {
return false;
@@ -182,7 +182,7 @@ void initProjectDeploySymbian(QMakeProject* project,
QString deploymentDrive;
if (0 == platform.compare(QLatin1String(ROM_DEPLOYMENT_PLATFORM))) {
- deploymentDrive = epocRoot() + HW_Z_DIR;
+ deploymentDrive = qt_epocRoot() + HW_Z_DIR;
} else {
deploymentDrive = targetPathHasDriveLetter ? targetPath.left(2) : QLatin1String("c:");
}
@@ -225,9 +225,9 @@ void initProjectDeploySymbian(QMakeProject* project,
} else {
if (0 == platform.compare(QLatin1String(EMULATOR_DEPLOYMENT_PLATFORM))) {
if (devicePathHasDriveLetter) {
- devicePath = epocRoot() + "epoc32/winscw/" + devicePath.remove(1, 1);
+ devicePath = qt_epocRoot() + "epoc32/winscw/" + devicePath.remove(1, 1);
} else {
- devicePath = epocRoot() + "epoc32/winscw/c" + devicePath;
+ devicePath = qt_epocRoot() + "epoc32/winscw/c" + devicePath;
}
} else {
if (devicePathHasDriveLetter
@@ -278,7 +278,7 @@ void initProjectDeploySymbian(QMakeProject* project,
// Executables and libraries are deployed to \sys\bin
QFileInfo targetPath;
if (epocBuild)
- targetPath.setFile(epocRoot() + "epoc32/release/" + platform + "/" + build + "/");
+ targetPath.setFile(qt_epocRoot() + "epoc32/release/" + platform + "/" + build + "/");
else
targetPath.setFile(info.path() + QDir::separator());
if(devicePathHasDriveLetter) {
diff --git a/qmake/generators/symbian/symbian_makefile.h b/qmake/generators/symbian/symbian_makefile.h
index 94f0145..28a6206 100644
--- a/qmake/generators/symbian/symbian_makefile.h
+++ b/qmake/generators/symbian/symbian_makefile.h
@@ -79,18 +79,18 @@ public:
}
}
+ SymbianLocalizationList symbianLocalizationList;
+ parseTsFiles(&symbianLocalizationList);
+
if (generatePkg) {
- generatePkgFile(iconFile, false);
+ generatePkgFile(iconFile, false, symbianLocalizationList);
}
- // Get the application translations and convert to symbian OS lang code, i.e. decical number
- QStringList symbianLangCodes = symbianLangCodesFromTsFiles();
-
if (targetType == TypeExe) {
if (!this->project->values("CONFIG").contains("no_icon", Qt::CaseInsensitive)) {
writeRegRssFile(userRssRules);
writeRssFile(numberOfIcons, iconFile);
- writeLocFile(symbianLangCodes);
+ writeLocFile(symbianLocalizationList);
}
}
diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp
index 9d4f27e..602bcc2 100644
--- a/qmake/generators/symbian/symbiancommon.cpp
+++ b/qmake/generators/symbian/symbiancommon.cpp
@@ -41,9 +41,10 @@
#include "symbiancommon.h"
#include <qdebug.h>
+#include <qxmlstream.h>
// Included from tools/shared
-#include <symbian/epocroot.h>
+#include <symbian/epocroot_p.h>
#define RESOURCE_DIRECTORY_RESOURCE "\\\\resource\\\\apps\\\\"
@@ -151,7 +152,9 @@ QString romPath(const QString& path)
return QLatin1String("z:") + path;
}
-void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocBuild)
+void SymbianCommonGenerator::generatePkgFile(const QString &iconFile,
+ bool epocBuild,
+ const SymbianLocalizationList &symbianLocalizationList)
{
QMakeProject *project = generator->project;
QString pkgFilename = Option::output_dir + QLatin1Char('/') +
@@ -270,8 +273,17 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB
// Apply some defaults if specific data does not exist in PKG pre-rules
if (languageRules.isEmpty()) {
- // language, (*** hardcoded to english atm, should be parsed from TRANSLATIONS)
- languageRules << "; Language\n&EN\n\n";
+ if (symbianLocalizationList.isEmpty()) {
+ languageRules << "; Language\n&EN\n\n";
+ } else {
+ QStringList langCodes;
+ SymbianLocalizationListIterator iter(symbianLocalizationList);
+ while (iter.hasNext()) {
+ const SymbianLocalization &loc = iter.next();
+ langCodes << loc.symbianLanguageCode;
+ }
+ languageRules << QString("; Languages\n&%1\n\n").arg(langCodes.join(","));
+ }
} else if (headerRules.isEmpty()) {
// In case user defines langs, he must take care also about SIS header
fprintf(stderr, "Warning: If language is defined with DEPLOYMENT pkg_prerules, also the SIS header must be defined\n");
@@ -320,12 +332,14 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB
// Package header
QString sisHeader = "; SIS header: name, uid, version\n#{\"%1\"},(%2),%3\n\n";
- QString visualTarget = project->values("DEPLOYMENT.display_name").join(" ");
- if (visualTarget.isEmpty())
- visualTarget = generator->escapeFilePath(project->first("TARGET"));
- visualTarget = removePathSeparators(visualTarget);
- QString wrapperTarget = visualTarget + " installer";
+ QString defaultVisualTarget = project->values("DEPLOYMENT.display_name").join(" ");
+ if (defaultVisualTarget.isEmpty())
+ defaultVisualTarget = generator->escapeFilePath(project->first("TARGET"));
+ defaultVisualTarget = removePathSeparators(defaultVisualTarget);
+
+ QString visualTarget = generatePkgNameForHeader(symbianLocalizationList, defaultVisualTarget, false);
+ QString wrapperTarget = generatePkgNameForHeader(symbianLocalizationList, defaultVisualTarget, true);
if (installerSisHeader.startsWith("0x", Qt::CaseInsensitive)) {
tw << sisHeader.arg(wrapperTarget).arg(installerSisHeader).arg(applicationVersion);
@@ -344,7 +358,13 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB
// Vendor name
if (!containsStartWithItem('%', vendorRules)) {
- vendorRules << "; Default localized vendor name\n%{\"Vendor\"}\n\n";
+ QString vendorStr = QLatin1String("\"Vendor\",");
+ QString locVendors = vendorStr;
+ for (int i = 1; i < symbianLocalizationList.size(); i++) {
+ locVendors.append(vendorStr);
+ }
+ locVendors.chop(1);
+ vendorRules << QString("; Default localized vendor name\n%{%1}\n\n").arg(locVendors);
}
if (!containsStartWithItem(':', vendorRules)) {
vendorRules << "; Default unique vendor name\n:\"Vendor\"\n\n";
@@ -385,12 +405,19 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB
t << manufacturerStr << endl;
}
+ // ### FIXME: remove epocBuild check once makefile based mkspecs support localized resource generation
+ if (epocBuild && symbianLocalizationList.size()) {
+ // Add localized resources to DEPLOYMENT if default resource deployment is done
+ addLocalizedResourcesToDeployment("default_resource_deployment.sources", symbianLocalizationList);
+ addLocalizedResourcesToDeployment("default_reg_deployment.sources", symbianLocalizationList);
+ }
+
// deploy files specified by DEPLOYMENT variable
QString remoteTestPath;
QString zDir;
remoteTestPath = QString("!:\\private\\%1").arg(privateDirUid);
if (epocBuild)
- zDir = epocRoot() + QLatin1String("epoc32/data/z");
+ zDir = qt_epocRoot() + QLatin1String("epoc32/data/z");
DeploymentList depList;
initProjectDeploySymbian(project, depList, remoteTestPath, true, epocBuild, "$(PLATFORM)", "$(TARGET)", generatedDirs, generatedFiles);
@@ -633,12 +660,9 @@ void SymbianCommonGenerator::writeRssFile(QString &numberOfIcons, QString &iconF
}
}
-void SymbianCommonGenerator::writeLocFile(QStringList &symbianLangCodes)
+void SymbianCommonGenerator::writeLocFile(const SymbianLocalizationList &symbianLocalizationList)
{
- QString filename(fixedTarget);
- if (!Option::output_dir.isEmpty())
- filename = Option::output_dir + '/' + filename;
- filename.append(".loc");
+ QString filename = generateLocFileName();
QFile ft(filename);
if (ft.open(QIODevice::WriteOnly)) {
generatedFiles << ft.fileName();
@@ -658,11 +682,22 @@ void SymbianCommonGenerator::writeLocFile(QStringList &symbianLangCodes)
t << "#ifdef LANGUAGE_SC" << endl;
t << "#define STRING_r_short_caption \"" << displayName << "\"" << endl;
t << "#define STRING_r_caption \"" << displayName << "\"" << endl;
- foreach(QString lang, symbianLangCodes) {
- t << "#elif defined LANGUAGE_" << lang << endl;
- t << "#define STRING_r_short_caption \"" << displayName << "\"" << endl;
- t << "#define STRING_r_caption \"" << displayName << "\"" << endl;
+
+ SymbianLocalizationListIterator iter(symbianLocalizationList);
+ while (iter.hasNext()) {
+ const SymbianLocalization &loc = iter.next();
+ QString shortCaption = loc.shortCaption;
+ QString longCaption = loc.longCaption;
+ if (shortCaption.isEmpty())
+ shortCaption = displayName;
+ if (longCaption.isEmpty())
+ longCaption = displayName;
+
+ t << "#elif defined LANGUAGE_" << loc.symbianLanguageCode << endl;
+ t << "#define STRING_r_short_caption \"" << shortCaption << "\"" << endl;
+ t << "#define STRING_r_caption \"" << longCaption << "\"" << endl;
}
+
t << "#else" << endl;
t << "#define STRING_r_short_caption \"" << displayName << "\"" << endl;
t << "#define STRING_r_caption \"" << displayName << "\"" << endl;
@@ -803,195 +838,49 @@ void SymbianCommonGenerator::writeCustomDefFile()
}
}
-QStringList SymbianCommonGenerator::symbianLangCodesFromTsFiles()
+void SymbianCommonGenerator::parseTsFiles(SymbianLocalizationList *symbianLocalizationList)
{
- QStringList tsfiles;
- QStringList symbianLangCodes;
- tsfiles << generator->project->values("TRANSLATIONS");
+ if (!generator->project->isActiveConfig("localize_deployment")) {
+ return;
+ }
- fillQt2S60LangMapTable();
+ QStringList symbianTsFiles;
- foreach(QString file, tsfiles) {
- int extIndex = file.lastIndexOf(".");
- int langIndex = file.lastIndexOf("_", (extIndex - file.length()));
- langIndex += 1;
- QString qtlang = file.mid(langIndex, extIndex - langIndex);
- QString s60lang = qt2S60LangMapTable.value(qtlang, QString("SC"));
+ symbianTsFiles << generator->project->values("SYMBIAN_MATCHED_TRANSLATIONS");
- if (!symbianLangCodes.contains(s60lang) && s60lang != "SC")
- symbianLangCodes += s60lang;
- }
+ if (!symbianTsFiles.isEmpty()) {
+ fillQt2SymbianLocalizationList(symbianLocalizationList);
- return symbianLangCodes;
+ QMutableListIterator<SymbianLocalization> iter(*symbianLocalizationList);
+ while (iter.hasNext()) {
+ SymbianLocalization &loc = iter.next();
+ static QString matchStrTemplate = QLatin1String(".*_%1\\.ts");
+ QString matchStr = matchStrTemplate.arg(loc.qtLanguageCode);
+
+ foreach (QString file, symbianTsFiles) {
+ QRegExp matcher(matchStr);
+ if (matcher.exactMatch(file) && parseTsContent(file, &loc))
+ break;
+ }
+ }
+ }
}
-void SymbianCommonGenerator::fillQt2S60LangMapTable()
+void SymbianCommonGenerator::fillQt2SymbianLocalizationList(SymbianLocalizationList *symbianLocalizationList)
{
- qt2S60LangMapTable.reserve(170); // 165 items at time of writing.
- qt2S60LangMapTable.insert("ab", "SC"); //Abkhazian //
- qt2S60LangMapTable.insert("om", "SC"); //Afan //
- qt2S60LangMapTable.insert("aa", "SC"); //Afar //
- qt2S60LangMapTable.insert("af", "34"); //Afrikaans //Afrikaans
- qt2S60LangMapTable.insert("sq", "35"); //Albanian //Albanian
- qt2S60LangMapTable.insert("am", "36"); //Amharic //Amharic
- qt2S60LangMapTable.insert("ar", "37"); //Arabic //Arabic
- qt2S60LangMapTable.insert("hy", "38"); //Armenian //Armenian
- qt2S60LangMapTable.insert("as", "SC"); //Assamese //
- qt2S60LangMapTable.insert("ay", "SC"); //Aymara //
- qt2S60LangMapTable.insert("az", "SC"); //Azerbaijani //
- qt2S60LangMapTable.insert("ba", "SC"); //Bashkir //
- qt2S60LangMapTable.insert("eu", "SC"); //Basque //
- qt2S60LangMapTable.insert("bn", "41"); //Bengali //Bengali
- qt2S60LangMapTable.insert("dz", "SC"); //Bhutani //
- qt2S60LangMapTable.insert("bh", "SC"); //Bihari //
- qt2S60LangMapTable.insert("bi", "SC"); //Bislama //
- qt2S60LangMapTable.insert("br", "SC"); //Breton //
- qt2S60LangMapTable.insert("bg", "42"); //Bulgarian //Bulgarian
- qt2S60LangMapTable.insert("my", "43"); //Burmese //Burmese
- qt2S60LangMapTable.insert("be", "40"); //Byelorussian //Belarussian
- qt2S60LangMapTable.insert("km", "SC"); //Cambodian //
- qt2S60LangMapTable.insert("ca", "44"); //Catalan //Catalan
- qt2S60LangMapTable.insert("zh", "SC"); //Chinese //
- qt2S60LangMapTable.insert("co", "SC"); //Corsican //
- qt2S60LangMapTable.insert("hr", "45"); //Croatian //Croatian
- qt2S60LangMapTable.insert("cs", "25"); //Czech //Czech
- qt2S60LangMapTable.insert("da", "07"); //Danish //Danish
- qt2S60LangMapTable.insert("nl", "18"); //Dutch //Dutch
- qt2S60LangMapTable.insert("en", "01"); //English //English(UK)
- qt2S60LangMapTable.insert("eo", "SC"); //Esperanto //
- qt2S60LangMapTable.insert("et", "49"); //Estonian //Estonian
- qt2S60LangMapTable.insert("fo", "SC"); //Faroese //
- qt2S60LangMapTable.insert("fj", "SC"); //Fiji //
- qt2S60LangMapTable.insert("fi", "09"); //Finnish //Finnish
- qt2S60LangMapTable.insert("fr", "02"); //French //French
- qt2S60LangMapTable.insert("fy", "SC"); //Frisian //
- qt2S60LangMapTable.insert("gd", "52"); //Gaelic //Gaelic
- qt2S60LangMapTable.insert("gl", "SC"); //Galician //
- qt2S60LangMapTable.insert("ka", "53"); //Georgian //Georgian
- qt2S60LangMapTable.insert("de", "03"); //German //German
- qt2S60LangMapTable.insert("el", "54"); //Greek //Greek
- qt2S60LangMapTable.insert("kl", "SC"); //Greenlandic //
- qt2S60LangMapTable.insert("gn", "SC"); //Guarani //
- qt2S60LangMapTable.insert("gu", "56"); //Gujarati //Gujarati
- qt2S60LangMapTable.insert("ha", "SC"); //Hausa //
- qt2S60LangMapTable.insert("he", "57"); //Hebrew //Hebrew
- qt2S60LangMapTable.insert("hi", "58"); //Hindi //Hindi
- qt2S60LangMapTable.insert("hu", "17"); //Hungarian //Hungarian
- qt2S60LangMapTable.insert("is", "15"); //Icelandic //Icelandic
- qt2S60LangMapTable.insert("id", "59"); //Indonesian //Indonesian
- qt2S60LangMapTable.insert("ia", "SC"); //Interlingua //
- qt2S60LangMapTable.insert("ie", "SC"); //Interlingue //
- qt2S60LangMapTable.insert("iu", "SC"); //Inuktitut //
- qt2S60LangMapTable.insert("ik", "SC"); //Inupiak //
- qt2S60LangMapTable.insert("ga", "60"); //Irish //Irish
- qt2S60LangMapTable.insert("it", "05"); //Italian //Italian
- qt2S60LangMapTable.insert("ja", "32"); //Japanese //Japanese
- qt2S60LangMapTable.insert("jv", "SC"); //Javanese //
- qt2S60LangMapTable.insert("kn", "62"); //Kannada //Kannada
- qt2S60LangMapTable.insert("ks", "SC"); //Kashmiri //
- qt2S60LangMapTable.insert("kk", "63"); //Kazakh //Kazakh
- qt2S60LangMapTable.insert("rw", "SC"); //Kinyarwanda //
- qt2S60LangMapTable.insert("ky", "SC"); //Kirghiz //
- qt2S60LangMapTable.insert("ko", "65"); //Korean //Korean
- qt2S60LangMapTable.insert("ku", "SC"); //Kurdish //
- qt2S60LangMapTable.insert("rn", "SC"); //Kurundi //
- qt2S60LangMapTable.insert("lo", "66"); //Laothian //Laothian
- qt2S60LangMapTable.insert("la", "SC"); //Latin //
- qt2S60LangMapTable.insert("lv", "67"); //Latvian //Latvian
- qt2S60LangMapTable.insert("ln", "SC"); //Lingala //
- qt2S60LangMapTable.insert("lt", "68"); //Lithuanian //Lithuanian
- qt2S60LangMapTable.insert("mk", "69"); //Macedonian //Macedonian
- qt2S60LangMapTable.insert("mg", "SC"); //Malagasy //
- qt2S60LangMapTable.insert("ms", "70"); //Malay //Malay
- qt2S60LangMapTable.insert("ml", "71"); //Malayalam //Malayalam
- qt2S60LangMapTable.insert("mt", "SC"); //Maltese //
- qt2S60LangMapTable.insert("mi", "SC"); //Maori //
- qt2S60LangMapTable.insert("mr", "72"); //Marathi //Marathi
- qt2S60LangMapTable.insert("mo", "73"); //Moldavian //Moldovian
- qt2S60LangMapTable.insert("mn", "74"); //Mongolian //Mongolian
- qt2S60LangMapTable.insert("na", "SC"); //Nauru //
- qt2S60LangMapTable.insert("ne", "SC"); //Nepali //
- qt2S60LangMapTable.insert("nb", "08"); //Norwegian //Norwegian
- qt2S60LangMapTable.insert("oc", "SC"); //Occitan //
- qt2S60LangMapTable.insert("or", "SC"); //Oriya //
- qt2S60LangMapTable.insert("ps", "SC"); //Pashto //
- qt2S60LangMapTable.insert("fa", "SC"); //Persian //
- qt2S60LangMapTable.insert("pl", "27"); //Polish //Polish
- qt2S60LangMapTable.insert("pt", "13"); //Portuguese //Portuguese
- qt2S60LangMapTable.insert("pa", "77"); //Punjabi //Punjabi
- qt2S60LangMapTable.insert("qu", "SC"); //Quechua //
- qt2S60LangMapTable.insert("rm", "SC"); //RhaetoRomance //
- qt2S60LangMapTable.insert("ro", "78"); //Romanian //Romanian
- qt2S60LangMapTable.insert("ru", "16"); //Russian //Russian
- qt2S60LangMapTable.insert("sm", "SC"); //Samoan //
- qt2S60LangMapTable.insert("sg", "SC"); //Sangho //
- qt2S60LangMapTable.insert("sa", "SC"); //Sanskrit //
- qt2S60LangMapTable.insert("sr", "79"); //Serbian //Serbian
- qt2S60LangMapTable.insert("sh", "SC"); //SerboCroatian //
- qt2S60LangMapTable.insert("st", "SC"); //Sesotho //
- qt2S60LangMapTable.insert("tn", "SC"); //Setswana //
- qt2S60LangMapTable.insert("sn", "SC"); //Shona //
- qt2S60LangMapTable.insert("sd", "SC"); //Sindhi //
- qt2S60LangMapTable.insert("si", "80"); //Singhalese //Sinhalese
- qt2S60LangMapTable.insert("ss", "SC"); //Siswati //
- qt2S60LangMapTable.insert("sk", "26"); //Slovak //Slovak
- qt2S60LangMapTable.insert("sl", "28"); //Slovenian //Slovenian
- qt2S60LangMapTable.insert("so", "81"); //Somali //Somali
- qt2S60LangMapTable.insert("es", "04"); //Spanish //Spanish
- qt2S60LangMapTable.insert("su", "SC"); //Sundanese //
- qt2S60LangMapTable.insert("sw", "84"); //Swahili //Swahili
- qt2S60LangMapTable.insert("sv", "06"); //Swedish //Swedish
- qt2S60LangMapTable.insert("tl", "39"); //Tagalog //Tagalog
- qt2S60LangMapTable.insert("tg", "SC"); //Tajik //
- qt2S60LangMapTable.insert("ta", "87"); //Tamil //Tamil
- qt2S60LangMapTable.insert("tt", "SC"); //Tatar //
- qt2S60LangMapTable.insert("te", "88"); //Telugu //Telugu
- qt2S60LangMapTable.insert("th", "33"); //Thai //Thai
- qt2S60LangMapTable.insert("bo", "89"); //Tibetan //Tibetan
- qt2S60LangMapTable.insert("ti", "90"); //Tigrinya //Tigrinya
- qt2S60LangMapTable.insert("to", "SC"); //Tonga //
- qt2S60LangMapTable.insert("ts", "SC"); //Tsonga //
- qt2S60LangMapTable.insert("tr", "14"); //Turkish //Turkish
- qt2S60LangMapTable.insert("tk", "92"); //Turkmen //Turkmen
- qt2S60LangMapTable.insert("tw", "SC"); //Twi //
- qt2S60LangMapTable.insert("ug", "SC"); //Uigur //
- qt2S60LangMapTable.insert("uk", "93"); //Ukrainian //Ukrainian
- qt2S60LangMapTable.insert("ur", "94"); //Urdu //Urdu
- qt2S60LangMapTable.insert("uz", "SC"); //Uzbek //
- qt2S60LangMapTable.insert("vi", "96"); //Vietnamese //Vietnamese
- qt2S60LangMapTable.insert("vo", "SC"); //Volapuk //
- qt2S60LangMapTable.insert("cy", "97"); //Welsh //Welsh
- qt2S60LangMapTable.insert("wo", "SC"); //Wolof //
- qt2S60LangMapTable.insert("xh", "SC"); //Xhosa //
- qt2S60LangMapTable.insert("yi", "SC"); //Yiddish //
- qt2S60LangMapTable.insert("yo", "SC"); //Yoruba //
- qt2S60LangMapTable.insert("za", "SC"); //Zhuang //
- qt2S60LangMapTable.insert("zu", "98"); //Zulu //Zulu
- qt2S60LangMapTable.insert("nn", "75"); //Nynorsk //NorwegianNynorsk
- qt2S60LangMapTable.insert("bs", "SC"); //Bosnian //
- qt2S60LangMapTable.insert("dv", "SC"); //Divehi //
- qt2S60LangMapTable.insert("gv", "SC"); //Manx //
- qt2S60LangMapTable.insert("kw", "SC"); //Cornish //
- qt2S60LangMapTable.insert("ak", "SC"); //Akan //
- qt2S60LangMapTable.insert("kok", "SC"); //Konkani //
- qt2S60LangMapTable.insert("gaa", "SC"); //Ga //
- qt2S60LangMapTable.insert("ig", "SC"); //Igbo //
- qt2S60LangMapTable.insert("kam", "SC"); //Kamba //
- qt2S60LangMapTable.insert("syr", "SC"); //Syriac //
- qt2S60LangMapTable.insert("byn", "SC"); //Blin //
- qt2S60LangMapTable.insert("gez", "SC"); //Geez //
- qt2S60LangMapTable.insert("kfo", "SC"); //Koro //
- qt2S60LangMapTable.insert("sid", "SC"); //Sidamo //
- qt2S60LangMapTable.insert("cch", "SC"); //Atsam //
- qt2S60LangMapTable.insert("tig", "SC"); //Tigre //
- qt2S60LangMapTable.insert("kaj", "SC"); //Jju //
- qt2S60LangMapTable.insert("fur", "SC"); //Friulian //
- qt2S60LangMapTable.insert("ve", "SC"); //Venda //
- qt2S60LangMapTable.insert("ee", "SC"); //Ewe //
- qt2S60LangMapTable.insert("wa", "SC"); //Walamo //
- qt2S60LangMapTable.insert("haw", "SC"); //Hawaiian //
- qt2S60LangMapTable.insert("kcg", "SC"); //Tyap //
- qt2S60LangMapTable.insert("ny", "SC"); //Chewa //
+ static QString symbianCodePrefix = QLatin1String("SYMBIAN_LANG.");
+
+ QStringList symbianLanguages = generator->project->values("SYMBIAN_MATCHED_LANGUAGES");
+
+ foreach (QString qtCode, symbianLanguages) {
+ SymbianLocalization newLoc;
+ QString symbianCodeVariable = symbianCodePrefix + qtCode;
+ newLoc.symbianLanguageCode = generator->project->first(symbianCodeVariable);
+ if (!newLoc.symbianLanguageCode.isEmpty()) {
+ newLoc.qtLanguageCode = qtCode;
+ symbianLocalizationList->append(newLoc);
+ }
+ }
}
void SymbianCommonGenerator::parsePreRules(const QString &deploymentVariable,
@@ -1057,3 +946,183 @@ void SymbianCommonGenerator::parsePostRules(const QString &deploymentVariable,
}
}
+bool SymbianCommonGenerator::parseTsContent(const QString &tsFilename, SymbianLocalization *loc)
+{
+ bool retval = true;
+ QMakeProject *project = generator->project;
+ QFile tsFile(tsFilename);
+
+ if (tsFile.exists()) {
+ if (tsFile.open(QIODevice::ReadOnly)) {
+ static QString applicationCaptionsContext = QLatin1String("QtApplicationCaptions");
+ static QString pkgNameContext = QLatin1String("QtPackageNames");
+ static QString tsElement = QLatin1String("TS");
+ static QString contextElement = QLatin1String("context");
+ static QString nameElement = QLatin1String("name");
+ static QString messageElement = QLatin1String("message");
+ static QString sourceElement = QLatin1String("source");
+ static QString translationElement = QLatin1String("translation");
+ static QString shortCaptionId = QLatin1String("Application short caption");
+ static QString longCaptionId = QLatin1String("Application long caption");
+ static QString pkgDisplayNameId = QLatin1String("Package name");
+ static QString installerPkgDisplayNameId = QLatin1String("Smart installer package name");
+ static QString languageAttribute = QLatin1String("language");
+ static QChar underscoreChar = QLatin1Char('_');
+
+ enum CurrentContext {
+ ContextUnknown,
+ ContextUninteresting,
+ ContextInteresting
+ };
+
+ QXmlStreamReader xml(&tsFile);
+
+ while (xml.name() != tsElement)
+ xml.readNextStartElement();
+
+ while (xml.readNextStartElement()) {
+ if (xml.name() == contextElement) {
+ CurrentContext currentContext = ContextUnknown;
+ while (xml.readNextStartElement()) {
+ if (currentContext == ContextUnknown) {
+ // Expect name element before message elements
+ if (xml.name() == nameElement) {
+ QString nameText = xml.readElementText();
+ if (nameText == applicationCaptionsContext || nameText == pkgNameContext) {
+ currentContext = ContextInteresting;
+ } else {
+ currentContext = ContextUninteresting;
+ }
+ } else {
+ xml.skipCurrentElement();
+ }
+ } else if (currentContext == ContextInteresting) {
+ if (xml.name() == messageElement) {
+ QString source;
+ QString translation;
+ while (xml.readNextStartElement()) {
+ if (xml.name() == sourceElement) {
+ source = xml.readElementText();
+ } else if (xml.name() == translationElement) {
+ translation = xml.readElementText();
+ } else {
+ xml.skipCurrentElement();
+ }
+ }
+
+ if (source == shortCaptionId) {
+ if (loc->shortCaption.isEmpty()) {
+ loc->shortCaption = translation;
+ } else {
+ fprintf(stderr, "Warning: Duplicate application short caption defined in (%s).\n",
+ qPrintable(tsFilename));
+ }
+ } else if (source == longCaptionId) {
+ if (loc->longCaption.isEmpty()) {
+ loc->longCaption = translation;
+ } else {
+ fprintf(stderr, "Warning: Duplicate application long caption defined in (%s).\n",
+ qPrintable(tsFilename));
+ }
+ } else if (source == pkgDisplayNameId) {
+ if (loc->pkgDisplayName.isEmpty()) {
+ loc->pkgDisplayName = translation;
+ } else {
+ fprintf(stderr, "Warning: Duplicate package display name defined in (%s).\n",
+ qPrintable(tsFilename));
+ }
+ } else if (source == installerPkgDisplayNameId) {
+ if (loc->installerPkgDisplayName.isEmpty()) {
+ loc->installerPkgDisplayName = translation;
+ } else {
+ fprintf(stderr, "Warning: Duplicate smart installer package display name defined in (%s).\n",
+ qPrintable(tsFilename));
+ }
+ }
+ } else {
+ xml.skipCurrentElement();
+ }
+ } else {
+ xml.skipCurrentElement();
+ }
+ }
+ } else {
+ xml.skipCurrentElement();
+ }
+ }
+ if (xml.hasError()) {
+ retval = false;
+ fprintf(stderr, "ERROR: Encountered error \"%s\" when parsing ts file (%s).\n",
+ qPrintable(xml.errorString()), qPrintable(tsFilename));
+ }
+ } else {
+ retval = false;
+ fprintf(stderr, "Warning: Could not open ts file (%s).\n", qPrintable(tsFilename));
+ }
+ } else {
+ retval = false;
+ fprintf(stderr, "Warning: ts file does not exist: (%s), unable to parse it.\n",
+ qPrintable(tsFilename));
+ }
+
+ return retval;
+}
+
+QString SymbianCommonGenerator::generatePkgNameForHeader(const SymbianLocalizationList &symbianLocalizationList,
+ const QString &defaultName,
+ bool isForSmartInstaller)
+{
+ QStringList allNames;
+ QString noTranslation = defaultName;
+
+ if (isForSmartInstaller)
+ noTranslation += QLatin1String(" installer");
+
+ SymbianLocalizationListIterator iter(symbianLocalizationList);
+ while (iter.hasNext()) {
+ const SymbianLocalization &loc = iter.next();
+ QString currentName;
+ if (isForSmartInstaller) {
+ currentName = loc.installerPkgDisplayName;
+ } else {
+ currentName = loc.pkgDisplayName;
+ }
+
+ if (currentName.isEmpty())
+ currentName = noTranslation;
+
+ allNames << currentName;
+ }
+
+ if (!allNames.size())
+ allNames << noTranslation;
+
+ return allNames.join("\",\"");
+
+}
+
+void SymbianCommonGenerator::addLocalizedResourcesToDeployment(const QString &deploymentFilesVar,
+ const SymbianLocalizationList &symbianLocalizationList)
+{
+ QStringList locResources;
+ foreach (QString defaultResource, generator->project->values(deploymentFilesVar)) {
+ if (defaultResource.endsWith(".rsc")) {
+ defaultResource.chop(2);
+ SymbianLocalizationListIterator iter(symbianLocalizationList);
+ while (iter.hasNext()) {
+ const SymbianLocalization &loc = iter.next();
+ locResources << QString(defaultResource + loc.symbianLanguageCode);
+ }
+ }
+ }
+ generator->project->values(deploymentFilesVar) << locResources;
+}
+
+QString SymbianCommonGenerator::generateLocFileName()
+{
+ QString fileName(fixedTarget);
+ if (!Option::output_dir.isEmpty())
+ fileName = Option::output_dir + QLatin1Char('/') + fileName;
+ fileName.append(".loc");
+ return fileName;
+}
diff --git a/qmake/generators/symbian/symbiancommon.h b/qmake/generators/symbian/symbiancommon.h
index 80f2079..1db5890 100644
--- a/qmake/generators/symbian/symbiancommon.h
+++ b/qmake/generators/symbian/symbiancommon.h
@@ -48,6 +48,20 @@
#define PRINT_FILE_CREATE_ERROR(filename) fprintf(stderr, "Error: Could not create '%s'\n", qPrintable(filename));
+class SymbianLocalization
+{
+public:
+ QString qtLanguageCode;
+ QString symbianLanguageCode;
+ QString shortCaption;
+ QString longCaption;
+ QString pkgDisplayName;
+ QString installerPkgDisplayName;
+};
+
+typedef QList<SymbianLocalization> SymbianLocalizationList;
+typedef QListIterator<SymbianLocalization> SymbianLocalizationListIterator;
+
class SymbianCommonGenerator
{
public:
@@ -59,6 +73,7 @@ public:
TypeSubdirs
};
+
SymbianCommonGenerator(MakefileGenerator *generator);
virtual void init();
@@ -68,7 +83,9 @@ protected:
QString removePathSeparators(QString &file);
void removeSpecialCharacters(QString& str);
void removeEpocSpecialCharacters(QString& str);
- void generatePkgFile(const QString &iconFile, bool epocBuild);
+ void generatePkgFile(const QString &iconFile,
+ bool epocBuild,
+ const SymbianLocalizationList &symbianLocalizationList);
bool containsStartWithItem(const QChar &c, const QStringList& src);
void writeRegRssFile(QMap<QString, QStringList> &useritems);
@@ -76,15 +93,15 @@ protected:
const QString &listTag,
const QString &listItem);
void writeRssFile(QString &numberOfIcons, QString &iconfile);
- void writeLocFile(QStringList &symbianLangCodes);
+ void writeLocFile(const SymbianLocalizationList &symbianLocalizationList);
void readRssRules(QString &numberOfIcons,
QString &iconFile,
QMap<QString, QStringList> &userRssRules);
void writeCustomDefFile();
- QStringList symbianLangCodesFromTsFiles();
- void fillQt2S60LangMapTable();
+ void parseTsFiles(SymbianLocalizationList *symbianLocalizationList);
+ void fillQt2SymbianLocalizationList(SymbianLocalizationList *symbianLocalizationList);
void parsePreRules(const QString &deploymentVariable,
const QString &variableSuffix,
@@ -95,7 +112,13 @@ protected:
void parsePostRules(const QString &deploymentVariable,
const QString &variableSuffix,
QStringList *rawRuleList);
-
+ bool parseTsContent(const QString &tsFilename, SymbianLocalization *loc);
+ QString generatePkgNameForHeader(const SymbianLocalizationList &symbianLocalizationList,
+ const QString &defaultName,
+ bool isForSmartInstaller);
+ void addLocalizedResourcesToDeployment(const QString &deploymentFilesVar,
+ const SymbianLocalizationList &symbianLocalizationList);
+ QString generateLocFileName();
protected:
MakefileGenerator *generator;
@@ -106,8 +129,6 @@ protected:
QString privateDirUid;
QString uid3;
TargetType targetType;
-
- QHash<QString, QString> qt2S60LangMapTable;
};
#endif // SYMBIANCOMMON_H
diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp
index 0b0033a..7bebd56 100644
--- a/qmake/generators/symbian/symmake.cpp
+++ b/qmake/generators/symbian/symmake.cpp
@@ -50,7 +50,7 @@
#include <qdebug.h>
// Included from tools/shared
-#include <symbian/epocroot.h>
+#include <symbian/epocroot_p.h>
#define RESOURCE_DIRECTORY_MMP "/resource/apps"
#define REGISTRATION_RESOURCE_DIRECTORY_HW "/private/10003a3f/import/apps"
@@ -87,10 +87,10 @@ QString SymbianMakefileGenerator::fixPathForMmp(const QString& origPath, const Q
{
static QString epocRootStr;
if (epocRootStr.isEmpty()) {
- epocRootStr = epocRoot();
+ epocRootStr = qt_epocRoot();
QFileInfo efi(epocRootStr);
if (!efi.exists() || epocRootStr.isEmpty()) {
- fprintf(stderr, "Unable to resolve epocRoot '%s' to real dir on current drive, defaulting to '/' for mmp paths\n", qPrintable(epocRoot()));
+ fprintf(stderr, "Unable to resolve epocRoot '%s' to real dir on current drive, defaulting to '/' for mmp paths\n", qPrintable(qt_epocRoot()));
epocRootStr = "/";
} else {
epocRootStr = efi.absoluteFilePath();
@@ -122,7 +122,7 @@ QString SymbianMakefileGenerator::absolutizePath(const QString& origPath)
// Prepend epocroot to any paths beginning with "/epoc32/"
QString resultPath = QDir::fromNativeSeparators(origPath);
if (resultPath.startsWith("/epoc32/", Qt::CaseInsensitive))
- resultPath = QDir::fromNativeSeparators(epocRoot()) + resultPath.mid(1);
+ resultPath = QDir::fromNativeSeparators(qt_epocRoot()) + resultPath.mid(1);
QFileInfo fi(fileInfo(resultPath));
@@ -187,8 +187,8 @@ bool SymbianMakefileGenerator::writeMakefile(QTextStream &t)
QMap<QString, QStringList> userRssRules;
readRssRules(numberOfIcons, iconFile, userRssRules);
- // Get the application translations and convert to symbian OS lang code, i.e. decical number
- QStringList symbianLangCodes = symbianLangCodesFromTsFiles();
+ SymbianLocalizationList symbianLocalizationList;
+ parseTsFiles(&symbianLocalizationList);
// Generate pkg files if there are any actual files to deploy
bool generatePkg = false;
@@ -205,7 +205,7 @@ bool SymbianMakefileGenerator::writeMakefile(QTextStream &t)
}
if (generatePkg) {
- generatePkgFile(iconFile, true);
+ generatePkgFile(iconFile, true, symbianLocalizationList);
}
writeBldInfContent(t, generatePkg, iconFile);
@@ -242,13 +242,13 @@ bool SymbianMakefileGenerator::writeMakefile(QTextStream &t)
writeMkFile(wrapperFileName, false);
QString absoluteMmpFileName = Option::output_dir + QLatin1Char('/') + mmpFileName;
- writeMmpFile(absoluteMmpFileName, symbianLangCodes);
+ writeMmpFile(absoluteMmpFileName, symbianLocalizationList);
if (targetType == TypeExe) {
if (!project->isActiveConfig("no_icon")) {
writeRegRssFile(userRssRules);
writeRssFile(numberOfIcons, iconFile);
- writeLocFile(symbianLangCodes);
+ writeLocFile(symbianLocalizationList);
}
}
@@ -489,7 +489,7 @@ void SymbianMakefileGenerator::writeMmpFileHeader(QTextStream &t)
t << "// ==============================================================================" << endl << endl;
}
-void SymbianMakefileGenerator::writeMmpFile(QString &filename, QStringList &symbianLangCodes)
+void SymbianMakefileGenerator::writeMmpFile(QString &filename, const SymbianLocalizationList &symbianLocalizationList)
{
QFile ft(filename);
if (ft.open(QIODevice::WriteOnly)) {
@@ -501,7 +501,7 @@ void SymbianMakefileGenerator::writeMmpFile(QString &filename, QStringList &symb
writeMmpFileTargetPart(t);
- writeMmpFileResourcePart(t, symbianLangCodes);
+ writeMmpFileResourcePart(t, symbianLocalizationList);
writeMmpFileMacrosPart(t);
@@ -643,7 +643,7 @@ void SymbianMakefileGenerator::writeMmpFileTargetPart(QTextStream& t)
Application registration resource files should be installed to the
\private\10003a3f\import\apps directory.
*/
-void SymbianMakefileGenerator::writeMmpFileResourcePart(QTextStream& t, QStringList &symbianLangCodes)
+void SymbianMakefileGenerator::writeMmpFileResourcePart(QTextStream& t, const SymbianLocalizationList &symbianLocalizationList)
{
if ((targetType == TypeExe) &&
!project->isActiveConfig("no_icon")) {
@@ -653,8 +653,10 @@ void SymbianMakefileGenerator::writeMmpFileResourcePart(QTextStream& t, QStringL
t << "SOURCEPATH\t\t\t. " << endl;
t << "LANG SC "; // no endl
- foreach(QString lang, symbianLangCodes) {
- t << lang << " "; // no endl
+ SymbianLocalizationListIterator iter(symbianLocalizationList);
+ while (iter.hasNext()) {
+ const SymbianLocalization &loc = iter.next();
+ t << loc.symbianLanguageCode << " "; // no endl
}
t << endl;
t << MMP_START_RESOURCE "\t\t" << locTarget << endl;
@@ -717,7 +719,7 @@ void SymbianMakefileGenerator::writeMmpFileLibraryPart(QTextStream& t)
// Hacky way to find out what kind of library it is. Check the
// ARMV5 build directory for library type. We default to shared
// library, since that is more common.
- QString udebStaticLibLocation(epocRoot());
+ QString udebStaticLibLocation(qt_epocRoot());
QString urelStaticLibLocation(udebStaticLibLocation);
udebStaticLibLocation += QString("epoc32/release/armv5/udeb/%1.lib").arg(lib);
urelStaticLibLocation += QString("epoc32/release/armv5/urel/%1.lib").arg(lib);
@@ -1108,3 +1110,18 @@ void SymbianMakefileGenerator::generateDistcleanTargets(QTextStream& t)
t << "distclean: clean dodistclean" << endl;
t << endl;
}
+
+// Returns a string that can be used as a dependency to loc file on other targets
+QString SymbianMakefileGenerator::generateLocFileTarget(QTextStream& t, const QString& locCmd)
+{
+ QString locFile;
+ if (targetType == TypeExe && !project->isActiveConfig("no_icon")) {
+ locFile = Option::fixPathToLocalOS(generateLocFileName());
+ t << locFile << QLatin1String(": ") << project->values("SYMBIAN_MATCHED_TRANSLATIONS").join(" ") << endl;
+ t << locCmd << endl;
+ t << endl;
+ locFile += QLatin1Char(' ');
+ }
+
+ return locFile;
+} \ No newline at end of file
diff --git a/qmake/generators/symbian/symmake.h b/qmake/generators/symbian/symmake.h
index a1a8e88..aba11de 100644
--- a/qmake/generators/symbian/symmake.h
+++ b/qmake/generators/symbian/symmake.h
@@ -97,11 +97,11 @@ protected:
static bool removeDuplicatedStrings(QStringList& stringList);
void writeMmpFileHeader(QTextStream &t);
- void writeMmpFile(QString &filename, QStringList &symbianLangCodes);
+ void writeMmpFile(QString &filename, const SymbianLocalizationList &symbianLocalizationList);
void writeMmpFileMacrosPart(QTextStream& t);
void addMacro(QTextStream& t, const QString& value);
void writeMmpFileTargetPart(QTextStream& t);
- void writeMmpFileResourcePart(QTextStream& t, QStringList &symbianLangCodes);
+ void writeMmpFileResourcePart(QTextStream& t, const SymbianLocalizationList &symbianLocalizationList);
void writeMmpFileSystemIncludePart(QTextStream& t);
void writeMmpFileIncludePart(QTextStream& t);
void writeMmpFileLibraryPart(QTextStream& t);
@@ -131,6 +131,7 @@ protected:
const QString& itemSuffix);
void generateDistcleanTargets(QTextStream& t);
+ QString generateLocFileTarget(QTextStream& t, const QString& locCmd);
// Subclass implements
virtual void writeBldInfExtensionRulesPart(QTextStream& t, const QString &iconTargetFile) = 0;
diff --git a/qmake/generators/symbian/symmake_abld.cpp b/qmake/generators/symbian/symmake_abld.cpp
index f895109..eb39d36 100644
--- a/qmake/generators/symbian/symmake_abld.cpp
+++ b/qmake/generators/symbian/symmake_abld.cpp
@@ -49,7 +49,7 @@
#include <qdebug.h>
// Included from tools/shared
-#include <symbian/epocroot.h>
+#include <symbian/epocroot_p.h>
#define DO_NOTHING_TARGET "do_nothing"
#define CREATE_TEMPS_TARGET "create_temps"
@@ -184,16 +184,7 @@ void SymbianAbldMakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool
QTextStream t(&wrapperFile);
- t << "# ==============================================================================" << endl;
- t << "# Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: ";
- t << QDateTime::currentDateTime().toString() << endl;
- t << "# This file is generated by qmake and should not be modified by the" << endl;
- t << "# user." << endl;
- t << "# Name : " << wrapperFile.fileName() << endl;
- t << "# Description : Wrapper Makefile for calling Symbian build tools" << endl;
- t << "#" << endl;
- t << "# ==============================================================================" << "\n" << endl;
- t << endl;
+ MakefileGenerator::writeHeader(t);
t << "MAKEFILE = " << fileInfo(wrapperFile.fileName()).fileName() << endl;
t << "QMAKE = " << var("QMAKE_QMAKE") << endl;
@@ -267,12 +258,14 @@ void SymbianAbldMakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool
t << "\tbldmake bldfiles" << endl;
t << endl;
- t << "debug: $(ABLD)" << endl;
+ QString locFileDep = generateLocFileTarget(t, qmakeCmd);
+
+ t << "debug: " << locFileDep << "$(ABLD)" << endl;
foreach(QString item, debugPlatforms) {
t << "\t$(ABLD)" << testClause << " build " << item << " udeb" << endl;
}
t << endl;
- t << "release: $(ABLD)" << endl;
+ t << "release: " << locFileDep << "$(ABLD)" << endl;
foreach(QString item, releasePlatforms) {
t << "\t$(ABLD)" << testClause << " build " << item << " urel" << endl;
}
@@ -280,12 +273,12 @@ void SymbianAbldMakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool
// For more specific builds, targets are in this form: build-platform, e.g. release-armv5
foreach(QString item, debugPlatforms) {
- t << "debug-" << item << ": $(ABLD)" << endl;
+ t << "debug-" << item << ": " << locFileDep << "$(ABLD)" << endl;
t << "\t$(ABLD)" << testClause << " build " << item << " udeb" << endl;
}
foreach(QString item, releasePlatforms) {
- t << "release-" << item << ": $(ABLD)" << endl;
+ t << "release-" << item << ": " << locFileDep << "$(ABLD)" << endl;
t << "\t$(ABLD)" << testClause << " build " << item << " urel" << endl;
}
@@ -429,7 +422,7 @@ bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t, bool i
else
t << WINSCW_DEPLOYMENT_TARGET ":" << endl;
- QString remoteTestPath = epocRoot()
+ QString remoteTestPath = qt_epocRoot()
+ QDir::toNativeSeparators(QLatin1String(isRom ? "epoc32/data/z/private/"
: "epoc32/winscw/c/private/"))
+ privateDirUid;
diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp
index d650e08..c4b51f2 100644
--- a/qmake/generators/symbian/symmake_sbsv2.cpp
+++ b/qmake/generators/symbian/symmake_sbsv2.cpp
@@ -49,7 +49,7 @@
#include <qdebug.h>
// Included from tools/shared
-#include <symbian/epocroot.h>
+#include <symbian/epocroot_p.h>
SymbianSbsv2MakefileGenerator::SymbianSbsv2MakefileGenerator() : SymbianMakefileGenerator() { }
SymbianSbsv2MakefileGenerator::~SymbianSbsv2MakefileGenerator() { }
@@ -82,7 +82,7 @@ void SymbianSbsv2MakefileGenerator::exportFlm()
QDir sourceDir = QDir(QLibraryInfo::location(QLibraryInfo::PrefixPath) + FLM_SOURCE_DIR);
QFileInfoList sourceInfos = sourceDir.entryInfoList(QDir::Files);
- QDir destDir(epocRoot() + FLM_DEST_DIR);
+ QDir destDir(qt_epocRoot() + FLM_DEST_DIR);
if (!destDir.exists()) {
if (destDir.mkpath(destDir.absolutePath()))
generatedDirs << destDir.absolutePath();
@@ -324,16 +324,8 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo
QTextStream t(&wrapperFile);
- t << "# ==============================================================================" << endl;
- t << "# Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: ";
- t << QDateTime::currentDateTime().toString() << endl;
- t << "# This file is generated by qmake and should not be modified by the" << endl;
- t << "# user." << endl;
- t << "# Name : " << wrapperFile.fileName() << endl;
- t << "# Description : Wrapper Makefile for calling Symbian build tools" << endl;
- t << "#" << endl;
- t << "# ==============================================================================" << "\n" << endl;
- t << endl;
+ MakefileGenerator::writeHeader(t);
+
t << "MAKEFILE = " << fileInfo(wrapperFile.fileName()).fileName() << endl;
t << "QMAKE = " << var("QMAKE_QMAKE") << endl;
t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl;
@@ -386,8 +378,9 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo
t << endl;
QString currentClause;
+ QString locFileDep = generateLocFileTarget(t, qmakeCmd);
- t << "debug: " << BLD_INF_FILENAME << endl;
+ t << "debug: " << locFileDep << BLD_INF_FILENAME << endl;
t << "\t$(SBS)";
foreach(QString clause, debugClauses) {
t << clause;
@@ -399,7 +392,7 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo
t << clause;
}
t << endl;
- t << "release: " << BLD_INF_FILENAME << endl;
+ t << "release: " << locFileDep << BLD_INF_FILENAME << endl;
t << "\t$(SBS)";
foreach(QString clause, releaseClauses) {
t << clause;
@@ -431,7 +424,7 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo
else // use generic arm clause
clause = configClause(item, debugBuild, defaultRvctCompilerVersion, genericArmClause);
- t << "debug-" << item << ": " << BLD_INF_FILENAME << endl;
+ t << "debug-" << item << ": " << locFileDep << BLD_INF_FILENAME << endl;
t << "\t$(SBS)" << clause << endl;
t << "clean-debug-" << item << ": " << BLD_INF_FILENAME << endl;
t << "\t$(SBS) reallyclean" << clause << endl;
@@ -444,7 +437,7 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo
else // use generic arm clause
clause = configClause(item, releaseBuild, defaultRvctCompilerVersion, genericArmClause);
- t << "release-" << item << ": " << BLD_INF_FILENAME << endl;
+ t << "release-" << item << ": " << locFileDep << BLD_INF_FILENAME << endl;
t << "\t$(SBS)" << clause << endl;
t << "clean-release-" << item << ": " << BLD_INF_FILENAME << endl;
t << "\t$(SBS) reallyclean" << clause << endl;
@@ -454,11 +447,11 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo
foreach(QString compilerVersion, allArmCompilerVersions) {
QString debugClause = configClause(item, debugBuild, compilerVersion, armClause);
QString releaseClause = configClause(item, releaseBuild, compilerVersion, armClause);
- t << "debug-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl;
+ t << "debug-" << item << "-" << compilerVersion << ": " << locFileDep << BLD_INF_FILENAME << endl;
t << "\t$(SBS)" << debugClause << endl;
t << "clean-debug-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl;
t << "\t$(SBS) reallyclean" << debugClause << endl;
- t << "release-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl;
+ t << "release-" << item << "-" << compilerVersion << ": " << locFileDep << BLD_INF_FILENAME << endl;
t << "\t$(SBS)" << releaseClause << endl;
t << "clean-release-" << item << "-" << compilerVersion << ": " << BLD_INF_FILENAME << endl;
t << "\t$(SBS) reallyclean" << releaseClause << endl;
@@ -629,7 +622,7 @@ void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t
t << endl;
// Write deployment rules
- QString remoteTestPath = epocRoot() + QLatin1String("epoc32/winscw/c/private/") + privateDirUid;
+ QString remoteTestPath = qt_epocRoot() + QLatin1String("epoc32/winscw/c/private/") + privateDirUid;
DeploymentList depList;
//write emulator deployment
@@ -640,7 +633,7 @@ void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t
t << "#endif" << endl;
//write ROM deployment
- remoteTestPath = epocRoot() + QLatin1String("epoc32/data/z/private/") + privateDirUid;
+ remoteTestPath = qt_epocRoot() + QLatin1String("epoc32/data/z/private/") + privateDirUid;
depList.clear();
initProjectDeploySymbian(project, depList, remoteTestPath, false, true,
QLatin1String(ROM_DEPLOYMENT_PLATFORM), QString(), generatedDirs, generatedFiles);