qmake/generators/symbian/symmake.cpp
changeset 30 5dc02b23752f
parent 29 b72c6db6890b
child 33 3e2da88830cd
--- a/qmake/generators/symbian/symmake.cpp	Wed Jun 23 19:07:03 2010 +0300
+++ b/qmake/generators/symbian/symmake.cpp	Tue Jul 06 15:10:48 2010 +0300
@@ -48,17 +48,16 @@
 #include <qdatetime.h>
 #include <stdlib.h>
 #include <qdebug.h>
-#include <qxmlstream.h>
 #include <QSettings>
 
 // Included from tools/shared
 #include <symbian/epocroot.h>
 
 #define RESOURCE_DIRECTORY_MMP "/resource/apps"
-#define RESOURCE_DIRECTORY_RESOURCE "\\\\resource\\\\apps\\\\"
 #define REGISTRATION_RESOURCE_DIRECTORY_HW "/private/10003a3f/import/apps"
 #define PLUGIN_COMMON_DEF_FILE_FOR_MMP "./plugin_common.def"
-#define PLUGIN_COMMON_DEF_FILE_ACTUAL "plugin_commonU.def"
+#define PLUGIN_COMMON_DEF_FILE_ACTUAL "plugin_commonu.def"
+#define BLD_INF_FILENAME_LEN (sizeof(BLD_INF_FILENAME) - 1)
 
 #define BLD_INF_RULES_BASE "BLD_INF_RULES."
 #define BLD_INF_TAG_PLATFORMS "prj_platforms"
@@ -67,17 +66,6 @@
 #define BLD_INF_TAG_EXTENSIONS "prj_extensions"
 #define BLD_INF_TAG_TESTEXTENSIONS "prj_testextensions"
 
-#define RSS_RULES "RSS_RULES"
-#define RSS_RULES_BASE "RSS_RULES."
-#define RSS_TAG_NBROFICONS "number_of_icons"
-#define RSS_TAG_ICONFILE "icon_file"
-#define RSS_TAG_HEADER "header"
-#define RSS_TAG_SERVICE_LIST "service_list"
-#define RSS_TAG_FILE_OWNERSHIP_LIST "file_ownership_list"
-#define RSS_TAG_DATATYPE_LIST "datatype_list"
-#define RSS_TAG_FOOTER "footer"
-#define RSS_TAG_DEFAULT "default_rules" // Same as just giving rules without tag
-
 #define MMP_TARGET "TARGET"
 #define MMP_TARGETTYPE "TARGETTYPE"
 #define MMP_SECUREID "SECUREID"
@@ -97,22 +85,6 @@
 #define VAR_CFLAGS "QMAKE_CFLAGS"
 #define VAR_LFLAGS "QMAKE_LFLAGS"
 
-#define SIS_TARGET "sis"
-#define INSTALLER_SIS_TARGET "installer_sis"
-#define ROM_STUB_SIS_TARGET "stub_sis"
-#define OK_SIS_TARGET "ok_sis"
-#define OK_INSTALLER_SIS_TARGET "ok_installer_sis"
-#define OK_ROM_STUB_SIS_TARGET "ok_stub_sis"
-#define FAIL_SIS_NOPKG_TARGET "fail_sis_nopkg"
-#define FAIL_SIS_NOCACHE_TARGET "fail_sis_nocache"
-
-#define PRINT_FILE_CREATE_ERROR(filename) fprintf(stderr, "Error: Could not create '%s'\n", qPrintable(filename));
-
-#define MANUFACTURER_NOTE_FILE "manufacturer_note.txt"
-#define DEFAULT_MANUFACTURER_NOTE \
-    "The package is not supported for devices from this manufacturer. Please try the selfsigned " \
-    "version of the package instead."
-
 QString SymbianMakefileGenerator::fixPathForMmp(const QString& origPath, const QDir& parentDir)
 {
     static QString epocRootStr;
@@ -170,7 +142,7 @@
     return resultPath;
 }
 
-SymbianMakefileGenerator::SymbianMakefileGenerator() : MakefileGenerator() { }
+SymbianMakefileGenerator::SymbianMakefileGenerator() : MakefileGenerator(), SymbianCommonGenerator(this) { }
 SymbianMakefileGenerator::~SymbianMakefileGenerator() { }
 
 void SymbianMakefileGenerator::writeHeader(QTextStream &t)
@@ -197,13 +169,19 @@
     bldinfDefine.append(generate_uid(project->projectFile()));
 
     bldinfDefine.prepend("BLD_INF_");
-    removeSpecialCharacters(bldinfDefine);
+    removeEpocSpecialCharacters(bldinfDefine);
 
     t << "#define " << bldinfDefine.toUpper() << endl << endl;
 }
 
 bool SymbianMakefileGenerator::writeMakefile(QTextStream &t)
 {
+    if(!project->values("QMAKE_FAILED_REQUIREMENTS").isEmpty()) {
+        fprintf(stderr, "Project files not generated because all requirements are not met:\n\t%s\n",
+                qPrintable(var("QMAKE_FAILED_REQUIREMENTS")));
+        return false;
+    }
+
     writeHeader(t);
 
     QString numberOfIcons;
@@ -216,7 +194,6 @@
 
     // Generate pkg files if there are any actual files to deploy
     bool generatePkg = false;
-    DeploymentList depList;
 
     if (targetType == TypeExe) {
         generatePkg = true;
@@ -230,15 +207,15 @@
     }
 
     if (generatePkg) {
-        generatePkgFile(iconFile, depList);
+        generatePkgFile(iconFile, true);
     }
 
-    writeBldInfContent(t, generatePkg, iconFile, depList);
+    writeBldInfContent(t, generatePkg, iconFile);
 
     // Generate empty wrapper makefile here, because wrapper makefile must exist before writeMkFile,
     // but all required data is not yet available.
     bool isPrimaryMakefile = true;
-    QString wrapperFileName("Makefile");
+    QString wrapperFileName = Option::output_dir + QLatin1Char('/') + QLatin1String("Makefile");
     QString outputFileName = fileInfo(Option::output.fileName()).fileName();
     if (outputFileName != BLD_INF_FILENAME) {
         wrapperFileName.append(".").append(outputFileName.startsWith(BLD_INF_FILENAME)
@@ -274,10 +251,8 @@
     shortProFilename.replace(0, shortProFilename.lastIndexOf("/") + 1, QString(""));
     shortProFilename.replace(Option::pro_ext, QString(""));
 
-    QString mmpFilename = shortProFilename;
-    mmpFilename.append("_");
-    mmpFilename.append(uid3);
-    mmpFilename.append(Option::mmp_ext);
+    QString mmpFilename = Option::output_dir + QLatin1Char('/') + shortProFilename + QLatin1Char('_')
+                          + uid3 + Option::mmp_ext;
     writeMmpFile(mmpFilename, symbianLangCodes);
 
     if (targetType == TypeExe) {
@@ -286,7 +261,8 @@
             writeRssFile(numberOfIcons, iconFile);
             writeLocFile(symbianLangCodes);
             if (!project->values("SYMBIANTRANSLATIONS").isEmpty())
-                writeSymbianLocFile(symbianLangCodes);        
+                writeSymbianLocFile(symbianLangCodes);
+                    
         }
     }
 
@@ -296,306 +272,11 @@
     return true;
 }
 
-void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile, DeploymentList &depList)
-{
-    QString pkgFilename = QString("%1_template.%2")
-                          .arg(fixedTarget)
-                          .arg("pkg");
-    QFile pkgFile(pkgFilename);
-    if (!pkgFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
-        PRINT_FILE_CREATE_ERROR(pkgFilename);
-        return;
-    }
-    if (Option::mkfile::listgen) {
-        generatePrint(fileInfo(pkgFile.fileName()).absoluteFilePath());
-    }
-    generatedFiles << pkgFile.fileName();
-    QTextStream t(&pkgFile);
-
-    QString installerSisHeader = project->values("DEPLOYMENT.installer_header").join("\n");
-    if (installerSisHeader.isEmpty())
-        installerSisHeader = "0xA000D7CE"; // Use default self-signable UID if not defined
-
-    QString wrapperStreamBuffer;
-    QTextStream tw(&wrapperStreamBuffer);
-
-    QString dateStr = QDateTime::currentDateTime().toString(Qt::ISODate);
-
-    // Header info
-    QString wrapperPkgFilename = QString("%1_installer.%2")
-                                .arg(fixedTarget)
-                                .arg("pkg");
-    QString headerComment = "; %1 generated by qmake at %2\n"
-        "; This file is generated by qmake and should not be modified by the user\n"
-        ";\n\n";
-    t << headerComment.arg(pkgFilename).arg(dateStr);
-    tw << headerComment.arg(wrapperPkgFilename).arg(dateStr);
-
-    // Construct QStringList from pkg_prerules since we need search it before printed to file
-    // Note: Though there can't be more than one language or header line, use stringlists
-    // in case user wants comments to go with the rules.
-    QStringList rawPkgPreRules;
-    QStringList languageRules;
-    QStringList headerRules;
-    foreach(QString deploymentItem, project->values("DEPLOYMENT")) {
-        foreach(QString pkgrulesItem, project->values(deploymentItem + ".pkg_prerules")) {
-            QStringList pkgrulesValue = project->values(pkgrulesItem);
-            // If there is no stringlist defined for a rule, use rule name directly
-            // This is convenience for defining single line mmp statements
-            if (pkgrulesValue.isEmpty()) {
-                if (pkgrulesItem.startsWith("&"))
-                    languageRules << pkgrulesItem;
-                else if (pkgrulesItem.startsWith("#"))
-                    headerRules << pkgrulesItem;
-                else
-                    rawPkgPreRules << pkgrulesItem;
-            } else {
-                if (containsStartWithItem('&', pkgrulesValue)) {
-                    foreach(QString pkgrule, pkgrulesValue) {
-                        languageRules << pkgrule;
-                    }
-                } else if (containsStartWithItem('#', pkgrulesValue)) {
-                    foreach(QString pkgrule, pkgrulesValue) {
-                        headerRules << pkgrule;
-                    }
-                } else {
-                    foreach(QString pkgrule, pkgrulesValue) {
-                        rawPkgPreRules << pkgrule;
-                    }
-                }
-            }
-        }
-    }
-
-    // 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";
-    } 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");
-    }
-
-    t << languageRules.join("\n") << endl;
-    tw << languageRules.join("\n") << endl;
-
-    // name of application, UID and version
-    QString applicationVersion = project->first("VERSION").isEmpty() ? "1,0,0" : project->first("VERSION").replace('.', ',');
-    QString sisHeader = "; SIS header: name, uid, version\n#{\"%1\"},(%2),%3\n\n";
-    QString visualTarget = escapeFilePath(fileFixify(project->first("TARGET")));
-    visualTarget = removePathSeparators(visualTarget);
-    QString wrapperTarget = visualTarget + " installer";
-
-    if (installerSisHeader.startsWith("0x", Qt::CaseInsensitive)) {
-        tw << sisHeader.arg(wrapperTarget).arg(installerSisHeader).arg(applicationVersion);
-    } else {
-        tw << installerSisHeader << endl;
-    }
-
-    if (headerRules.isEmpty())
-        t << sisHeader.arg(visualTarget).arg(uid3).arg(applicationVersion);
-    else
-        t << headerRules.join("\n") << endl;
-
-    // Localized vendor name
-    QString vendorName;
-    if (!containsStartWithItem('%', rawPkgPreRules)) {
-        vendorName += "; Localised Vendor name\n%{\"Vendor\"}\n\n";
-    }
-
-    // Unique vendor name
-    if (!containsStartWithItem(':', rawPkgPreRules)) {
-        vendorName += "; Unique Vendor name\n:\"Vendor\"\n\n";
-    }
-
-    t << vendorName;
-    tw << vendorName;
-
-    // PKG pre-rules - these are added before actual file installations i.e. SIS package body
-    if (rawPkgPreRules.size()) {
-        QString comment = "\n; Manual PKG pre-rules from PRO files\n";
-        t << comment;
-        tw << comment;
-
-        foreach(QString item, rawPkgPreRules) {
-            // Only regular pkg file should have package dependencies or pkg header if that is
-            // defined using prerules.
-            if (!item.startsWith("(") && !item.startsWith("#")) {
-                tw << item << endl;
-            }
-            t << item << endl;
-        }
-        t << endl;
-        tw << endl;
-    }
-
-    // Begin Manufacturer block
-    if (!project->values("DEPLOYMENT.manufacturers").isEmpty()) {
-        QString manufacturerStr("IF ");
-        foreach(QString manufacturer, project->values("DEPLOYMENT.manufacturers")) {
-            manufacturerStr.append(QString("(MANUFACTURER)=(%1) OR \n   ").arg(manufacturer));
-        }
-        // Remove the final OR
-        manufacturerStr.chop(8);
-        t << manufacturerStr << endl;
-    }
-
-    // Install paths on the phone *** should be dynamic at some point
-    QString installPathBin = "!:\\sys\\bin";
-    QString installPathResource = "!:\\resource\\apps";
-    QString installPathRegResource = "!:\\private\\10003a3f\\import\\apps";
-
-    // Find location of builds
-    QString epocReleasePath = QString("%1epoc32/release/$(PLATFORM)/$(TARGET)")
-                              .arg(epocRoot());
-
-    if (targetType == TypeExe) {
-        // deploy .exe file
-        t << "; Executable and default resource files" << endl;
-        QString exeFile = fixedTarget + ".exe";
-        t << QString("\"%1/%2\"    - \"%3\\%4\"")
-             .arg(epocReleasePath)
-             .arg(exeFile)
-             .arg(installPathBin)
-             .arg(exeFile) << endl;
-
-        // deploy rsc & reg_rsc file
-        if (!project->isActiveConfig("no_icon")) {
-            t << QString("\"%1epoc32/data/z/resource/apps/%2\"    - \"%3\\%4\"")
-                 .arg(epocRoot())
-                 .arg(fixedTarget + ".rsc")
-                 .arg(installPathResource)
-                 .arg(fixedTarget + ".rsc") << endl;
-
-            t << QString("\"%1epoc32/data/z/private/10003a3f/import/apps/%2\"    - \"%3\\%4\"")
-                 .arg(epocRoot())
-                 .arg(fixedTarget + "_reg.rsc")
-                 .arg(installPathRegResource)
-                 .arg(fixedTarget + "_reg.rsc") << endl;
-
-            if (!iconFile.isEmpty())  {
-                t << QString("\"%1epoc32/data/z%2\"    - \"!:%3\"")
-                     .arg(epocRoot())
-                     .arg(iconFile)
-                     .arg(QDir::toNativeSeparators(iconFile)) << endl << endl;
-            }
-        }
-    }
-
-    // deploy any additional DEPLOYMENT  files
-    QString remoteTestPath;
-    remoteTestPath = QString("!:\\private\\%1").arg(privateDirUid);
-    QString zDir = epocRoot() + QLatin1String("epoc32/data/z");
-
-    initProjectDeploySymbian(project, depList, remoteTestPath, true, "$(PLATFORM)", "$(TARGET)", generatedDirs, generatedFiles);
-    if (depList.size())
-        t << "; DEPLOYMENT" << endl;
-    for (int i = 0; i < depList.size(); ++i)  {
-        QString from = depList.at(i).from;
-        QString to = depList.at(i).to;
-
-        // Deploy anything not already deployed from under epoc32 instead from under
-        // \epoc32\data\z\ to enable using pkg file without rebuilding
-        // the project, which can be useful for some binary only distributions.
-        if (!from.contains(QLatin1String("epoc32"), Qt::CaseInsensitive)) {
-            from = to;
-            if (from.size() > 1 && from.at(1) == QLatin1Char(':'))
-                from = from.mid(2);
-            from.prepend(zDir);
-        } else {
-            if (from.size() > 1 && from.at(1) == QLatin1Char(':'))
-                from = from.mid(2);
-        }
-
-        t << QString("\"%1\"    - \"%2\"").arg(from.replace('\\','/')).arg(to) << endl;
-    }
-    t << endl;
-
-    // PKG post-rules - these are added after actual file installations i.e. SIS package body
-    t << "; Manual PKG post-rules from PRO files" << endl;
-    foreach(QString deploymentItem, project->values("DEPLOYMENT")) {
-        foreach(QString pkgrulesItem, project->values(deploymentItem + ".pkg_postrules")) {
-            QStringList pkgrulesValue = project->values(pkgrulesItem);
-            // If there is no stringlist defined for a rule, use rule name directly
-            // This is convenience for defining single line statements
-            if (pkgrulesValue.isEmpty()) {
-                t << pkgrulesItem << endl;
-            } else {
-                foreach(QString pkgrule, pkgrulesValue) {
-                    t << pkgrule << endl;
-                }
-            }
-            t << endl;
-        }
-    }
-
-    // Close Manufacturer block
-    if (!project->values("DEPLOYMENT.manufacturers").isEmpty()) {
-        QString manufacturerFailNoteFile;
-        if (project->values("DEPLOYMENT.manufacturers.fail_note").isEmpty()) {
-            manufacturerFailNoteFile = QString("%1_" MANUFACTURER_NOTE_FILE).arg(uid3);
-            QFile ft(manufacturerFailNoteFile);
-            if (ft.open(QIODevice::WriteOnly)) {
-                generatedFiles << ft.fileName();
-                QTextStream t2(&ft);
-
-                t2 << QString(DEFAULT_MANUFACTURER_NOTE) << endl;
-            } else {
-                PRINT_FILE_CREATE_ERROR(manufacturerFailNoteFile)
-            }
-        } else {
-            manufacturerFailNoteFile = project->values("DEPLOYMENT.manufacturers.fail_note").join("");
-        }
-
-        t << "ELSEIF NOT(0) ; MANUFACTURER" << endl
-          << "\"" << fileInfo(manufacturerFailNoteFile).absoluteFilePath() << "\""
-          << " - \"\", FILETEXT, TEXTEXIT" << endl
-          << "ENDIF ; MANUFACTURER" << endl;
-    }
-
-    // Write wrapper pkg
-    if (!installerSisHeader.isEmpty()) {
-        QFile wrapperPkgFile(wrapperPkgFilename);
-        if (!wrapperPkgFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
-            PRINT_FILE_CREATE_ERROR(wrapperPkgFilename);
-            return;
-        }
-
-        generatedFiles << wrapperPkgFile.fileName();
-        QTextStream twf(&wrapperPkgFile);
-
-        twf << wrapperStreamBuffer << endl;
-
-        // Wrapped files deployment
-        QString currentPath = qmake_getpwd();
-        QString sisName = QString("%1.sis").arg(fixedTarget);
-        twf << "\"" << currentPath << "/" << sisName << "\" - \"c:\\adm\\" << sisName << "\"" << endl;
-
-        QString bootStrapPath = QLibraryInfo::location(QLibraryInfo::PrefixPath);
-        bootStrapPath.append("/smartinstaller.sis");
-        QFileInfo fi(fileInfo(bootStrapPath));
-        twf << "@\"" << fi.absoluteFilePath() << "\",(0x2002CCCD)" << endl;
-    }
-}
-
-bool SymbianMakefileGenerator::containsStartWithItem(const QChar &c, const QStringList& src)
-{
-    bool result = false;
-    foreach(QString str, src) {
-        if (str.startsWith(c)) {
-            result =  true;
-            break;
-        }
-    }
-    return result;
-}
-
 void SymbianMakefileGenerator::writeCustomDefFile()
 {
     if (targetType == TypePlugin && !project->isActiveConfig("stdbinary")) {
         // Create custom def file for plugin
-        QFile ft(QLatin1String(PLUGIN_COMMON_DEF_FILE_ACTUAL));
+        QFile ft(Option::output_dir + QLatin1Char('/') + QLatin1String(PLUGIN_COMMON_DEF_FILE_ACTUAL));
 
         if (ft.open(QIODevice::WriteOnly)) {
             if (Option::mkfile::listgen) {
@@ -631,18 +312,7 @@
 void SymbianMakefileGenerator::init()
 {
     MakefileGenerator::init();
-    fixedTarget = escapeFilePath(fileFixify(project->first("TARGET")));
-    fixedTarget = removePathSeparators(fixedTarget);
-    removeSpecialCharacters(fixedTarget);
-    
- 		translationFileName = escapeFilePath(fileFixify(project->first("TRANSLATIONS")));
- 		if (!translationFileName.isEmpty()){
- 		 		translationFileName.chop(3);
- 				translationFileName = removePathSeparators(translationFileName);
- 				removeSpecialCharacters(translationFileName);
- 			}
- 			else
- 				translationFileName = fixedTarget;
+    SymbianCommonGenerator::init();
 
     if (0 != project->values("QMAKE_PLATFORM").size())
         platform = varGlue("QMAKE_PLATFORM", "", " ", "");
@@ -659,60 +329,9 @@
     // .mmp
     initMmpVariables();
 
-    // Check TARGET.UID3 presence
-    if (0 != project->values("TARGET.UID3").size()) {
-        uid3 = project->first("TARGET.UID3");
-    } else {
-        uid3 = generateUID3();
-    }
-
-    if ((project->values("TEMPLATE")).contains("app"))
-        targetType = TypeExe;
-    else if ((project->values("TEMPLATE")).contains("lib")) {
-        // Check CONFIG to see if we are to build staticlib or dll
-        if (project->isActiveConfig("staticlib") || project->isActiveConfig("static"))
-            targetType = TypeLib;
-        else if (project->isActiveConfig("plugin"))
-            targetType = TypePlugin;
-        else
-            targetType = TypeDll;
-    } else {
-        targetType = TypeSubdirs;
-    }
-
-    if (0 != project->values("TARGET.UID2").size()) {
-        uid2 = project->first("TARGET.UID2");
-    } else if (project->isActiveConfig("stdbinary")) {
-        uid2 = "0x20004C45";
-    } else {
-        if (targetType == TypeExe) {
-            if (project->values("QT").contains("gui", Qt::CaseInsensitive)) {
-                // exe and gui -> uid2 needed
-                uid2 = "0x100039CE";
-            } else {
-                // exe but not gui: uid2 is ignored anyway -> set it to 0
-                uid2 = "0";
-            }
-        } else if (targetType == TypeDll || targetType == TypeLib || targetType == TypePlugin) {
-            uid2 = "0x1000008d";
-        }
-    }
+    uid2 = project->first("TARGET.UID2");
 
     uid2 = uid2.trimmed();
-    uid3 = uid3.trimmed();
-
-    // UID is valid as either hex or decimal, so just convert it to number and back to hex
-    // to get proper string for private dir
-    bool conversionOk = false;
-    uint uidNum = uid3.toUInt(&conversionOk, 0);
-
-    if (!conversionOk) {
-        fprintf(stderr, "Error: Invalid UID \"%s\".\n", uid3.toUtf8().constData());
-    } else {
-        privateDirUid.setNum(uidNum, 16);
-        while (privateDirUid.length() < 8)
-            privateDirUid.insert(0, QLatin1Char('0'));
-    }
 }
 
 QString SymbianMakefileGenerator::getTargetExtension()
@@ -1078,8 +697,21 @@
         locTarget.append(".rss");
 
         t << "SOURCEPATH\t\t\t. " << endl;
-
-        if (!project->values("SYMBIANTRANSLATIONS").isEmpty()) {
+        
+		//QTP: org 47 start
+		/*   t << "LANG SC ";    // no endl
+        foreach(QString lang, symbianLangCodes) {
+            t << lang << " "; // no endl
+        }
+        t << endl;
+        t << MMP_START_RESOURCE "\t\t" << locTarget << endl;
+        t << "HEADER" << endl;
+        t << "TARGETPATH\t\t\t" RESOURCE_DIRECTORY_MMP << endl;
+        t << MMP_END_RESOURCE << endl << endl;*/
+		//QTP: org 47 end
+		
+        //QTP: loc change start
+          if (!project->values("SYMBIANTRANSLATIONS").isEmpty()) {
             t << MMP_START_RESOURCE "\t\t" << locTarget << endl;
             t << "LANGUAGE_IDS" << endl;
             t << "HEADER" << endl;
@@ -1089,14 +721,14 @@
             t << "LANG SC ";    // no endl
             foreach(QString lang, symbianLangCodes) {
                 t << lang << " "; // no endl
-            }
+            }  
             t << endl;
             t << MMP_START_RESOURCE "\t\t" << locTarget << endl;
             t << "HEADER" << endl;
             t << "TARGETPATH\t\t\t" RESOURCE_DIRECTORY_MMP << endl;
             t << MMP_END_RESOURCE << endl << endl;
         }
-
+        //QTP: loc change end
         QString regTarget = fixedTarget;
         regTarget.append("_reg.rss");
 
@@ -1299,7 +931,7 @@
     }
 }
 
-void SymbianMakefileGenerator::writeBldInfContent(QTextStream &t, bool addDeploymentExtension, const QString &iconFile, DeploymentList &depList)
+void SymbianMakefileGenerator::writeBldInfContent(QTextStream &t, bool addDeploymentExtension, const QString &iconFile)
 {
     // Read user defined bld inf rules
 
@@ -1376,7 +1008,7 @@
         QString uid = generate_uid(fullProName);
         QString bldinfDefine = QString("BLD_INF_") + subdirFileName + QString("_") + uid;
         bldinfDefine = bldinfDefine.toUpper();
-        removeSpecialCharacters(bldinfDefine);
+        removeEpocSpecialCharacters(bldinfDefine);
 
         if (!condition.isEmpty())
             t << "#if defined(" << condition << ")" << endl;
@@ -1455,606 +1087,6 @@
     }
 }
 
-void SymbianMakefileGenerator::writeRegRssFile(QMap<QString, QStringList> &userItems)
-{
-    QString filename(fixedTarget);
-    filename.append("_reg.rss");
-    QFile ft(filename);
-    if (ft.open(QIODevice::WriteOnly)) {
-        if (Option::mkfile::listgen) {
-            generatePrint(fileInfo(ft.fileName()).absoluteFilePath());
-            }
-        generatedFiles << ft.fileName();
-        QTextStream t(&ft);
-        t << "// ============================================================================" << endl;
-        t << "// * Generated by qmake (" << qmake_version() << ") (Qt " QT_VERSION_STR ") on: ";
-        t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl;
-        t << "// * This file is generated by qmake and should not be modified by the" << endl;
-        t << "// * user." << endl;
-        t << "// ============================================================================" << endl;
-        t << endl;
-        t << "#include <" << fixedTarget << ".rsg>" << endl;
-        t << "#include <appinfo.rh>" << endl;
-        foreach(QString item, userItems[RSS_TAG_HEADER])
-            t << item << endl;
-        t << endl;
-        t << "UID2 KUidAppRegistrationResourceFile" << endl;
-        t << "UID3 " << uid3 << endl << endl;
-        t << "RESOURCE APP_REGISTRATION_INFO" << endl;
-        t << "\t{" << endl;
-        t << "\tapp_file=\"" << fixedTarget << "\";" << endl;
-        t << "\tlocalisable_resource_file=\"" RESOURCE_DIRECTORY_RESOURCE << fixedTarget << "\";" << endl;
-
-        writeRegRssList(t, userItems[RSS_TAG_SERVICE_LIST],
-                        QLatin1String(RSS_TAG_SERVICE_LIST),
-                        QLatin1String("SERVICE_INFO"));
-        writeRegRssList(t, userItems[RSS_TAG_FILE_OWNERSHIP_LIST],
-                        QLatin1String(RSS_TAG_FILE_OWNERSHIP_LIST),
-                        QLatin1String("FILE_OWNERSHIP_INFO"));
-        writeRegRssList(t, userItems[RSS_TAG_DATATYPE_LIST],
-                        QLatin1String(RSS_TAG_DATATYPE_LIST),
-                        QLatin1String("DATATYPE"));
-        t << endl;
-
-        foreach(QString item, userItems[RSS_TAG_DEFAULT])
-            t << "\t" << item.replace("\n","\n\t") << endl;
-        t << "\t}" << endl;
-
-        foreach(QString item, userItems[RSS_TAG_FOOTER])
-            t << item << endl;
-    } else {
-        PRINT_FILE_CREATE_ERROR(filename)
-    }
-}
-
-void SymbianMakefileGenerator::writeRegRssList(QTextStream &t,
-                                               QStringList &userList,
-                                               const QString &listTag,
-                                               const QString &listItem)
-{
-    int itemCount = userList.count();
-    if (itemCount) {
-        t << "\t" << listTag << " ="<< endl;
-        t << "\t\t{" << endl;
-        foreach(QString item, userList) {
-            t << "\t\t" << listItem << endl;
-            t << "\t\t\t{" << endl;
-            t << "\t\t\t" << item.replace("\n","\n\t\t\t") << endl;
-            t << "\t\t\t}";
-            if (--itemCount)
-                t << ",";
-            t << endl;
-        }
-        t << "\t\t}; "<< endl;
-    }
-}
-
-void SymbianMakefileGenerator::writeRssFile(QString &numberOfIcons, QString &iconFile)
-{
-    QString filename(fixedTarget);
-    filename.append(".rss");
-    QFile ft(filename);
-    if (ft.open(QIODevice::WriteOnly)) {
-        if (Option::mkfile::listgen) {
-            generatePrint(fileInfo(ft.fileName()).absoluteFilePath());
-            }
-        generatedFiles << ft.fileName();
-        QTextStream t(&ft);
-        t << "// ============================================================================" << endl;
-        t << "// * Generated by qmake (" << qmake_version() << ") (Qt " QT_VERSION_STR ") on: ";
-        t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl;
-        t << "// * This file is generated by qmake and should not be modified by the" << endl;
-        t << "// * user." << endl;
-        t << "// ============================================================================" << endl;
-        t << endl;
-        t << "#include <appinfo.rh>" << endl;
-        t << "#include <" << translationFileName << ".loc>" << endl;
-        t << endl;
-        t << "RESOURCE LOCALISABLE_APP_INFO r_localisable_app_info" << endl;
-        t << "\t{" << endl;
-        t << "\tshort_caption = STRING_r_short_caption;" << endl;
-        t << "\tcaption_and_icon =" << endl;
-        t << "\tCAPTION_AND_ICON_INFO" << endl;
-        t << "\t\t{" << endl;
-        t << "\t\tcaption = STRING_r_caption;" << endl;
-
-        QString rssIconFile = iconFile;
-        rssIconFile = rssIconFile.replace("/", "\\\\");
-
-        if (numberOfIcons.isEmpty() || rssIconFile.isEmpty()) {
-            // There can be maximum one item in this tag, validated when parsed
-            t << "\t\tnumber_of_icons = 0;" << endl;
-            t << "\t\ticon_file = \"\";" << endl;
-        } else {
-            // There can be maximum one item in this tag, validated when parsed
-            t << "\t\tnumber_of_icons = " << numberOfIcons << ";" << endl;
-            t << "\t\ticon_file = \"" << rssIconFile << "\";" << endl;
-        }
-        t << "\t\t};" << endl;
-        t << "\t}" << endl;
-        t << endl;
-    } else {
-        PRINT_FILE_CREATE_ERROR(filename);
-    }
-}
-
-void SymbianMakefileGenerator::writeLocFile(QStringList &symbianLangCodes)
-{
-    QString filename(translationFileName);
-    if (project->values("SYMBIANTRANSLATIONS").isEmpty()) {
-        filename.append(".loc");
-    } else { 
-        if (!project->first("SYMBIANLOCFILESDIR").isEmpty()) { 
-            filename.insert(0,project->first("SYMBIANLOCFILESDIR"));         
-        } else {	
-            filename.insert(0,"/epoc32/include/platform/mw/loc/");    
-        }
-        filename.append(".loc");
-    }
-    
-    QFile ft(filename);
-    if (ft.open(QIODevice::WriteOnly)) {
-        if (Option::mkfile::listgen) {
-            generatePrint(fileInfo(ft.fileName()).absoluteFilePath());
-        }
-        generatedFiles << ft.fileName();
-        QTextStream t(&ft);
-        t << "// ============================================================================" << endl;
-        t << "// * Generated by qmake (" << qmake_version() << ") (Qt " QT_VERSION_STR ") on: ";
-        t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl;
-        t << "// * This file is generated by qmake and should not be modified by the" << endl;
-        t << "// * user." << endl;
-        t << "// ============================================================================" << endl;
-        t << endl;
-        if (project->values("SYMBIANTRANSLATIONS").isEmpty()) {
-        t << "#ifdef LANGUAGE_SC" << endl;
-        t << "#define STRING_r_short_caption \"" << fixedTarget  << "\"" << endl;
-        t << "#define STRING_r_caption \"" << fixedTarget  << "\"" << endl;
-        foreach(QString lang, symbianLangCodes) {
-            t << "#elif defined LANGUAGE_" << lang << endl;
-            t << "#define STRING_r_short_caption \"" << fixedTarget  << "\"" << endl;
-            t << "#define STRING_r_caption \"" << fixedTarget  << "\"" << endl;
-        }
-        t << "#else" << endl;
-        t << "#define STRING_r_short_caption \"" << fixedTarget  << "\"" << endl;
-        t << "#define STRING_r_caption \"" << fixedTarget  << "\"" << endl;
-        t << "#endif" << endl;
-    } else {
-            t << "#if LANGUAGE_SC" << endl;    
-            t << "#include <" << "01/" << translationFileName  << "_01.loc>" << endl;
-            t << "#elif LANGUAGE_01" << endl;       
-            t << "#include <" << "01/" << translationFileName  << "_01.loc>" << endl;
-            foreach(QString lang, symbianLangCodes) {
-                if (lang.localeAwareCompare("01") != 0) {
-                    t << "#elif LANGUAGE_" << lang << endl;
-                    t << "#include <" << lang << "/" << translationFileName  << "_" << lang << ".loc" << ">" << endl;
-                }
-            }
-            t << "#endif" << endl;
-        }
-    } else {
-        PRINT_FILE_CREATE_ERROR(filename);
-    }
-}
-
-void SymbianMakefileGenerator::writeSymbianLocFile(QStringList &symbianLangCodes)
-{	
-	QString filename(translationFileName); 
-	foreach(QString lang, symbianLangCodes) {
-        
-		QString tsFilename(filename);  
-		QString language = qt2S60LangMapTable.key(lang, QString("en"));
-		tsFilename.append("_"+language+".ts");
-	
-		tsFilename.insert(0,project->first("SYMBIANTRANSLATIONSRCDIR")); 	
-		
-        QString locFilename(filename); 
-        locFilename.append("_"+lang+".loc");
-        if (!project->first("SYMBIANLOCFILESDIR").isEmpty()) {    
-            locFilename.insert(0,lang+"/");
-            locFilename.insert(0,project->first("SYMBIANLOCFILESDIR"));
-        } else {	
-            locFilename.insert(0,"/epoc32/include/platform/mw/loc/"+lang+"/");
-        }
-                
-        QString shortCaption;
-        QString longCaption;
-        
-        // get captions from ts file
-        QFile tsFile(tsFilename);
-        if (tsFile.exists()) {
-            if (tsFile.open(QIODevice::ReadOnly)) {
-                QString shortCaptionId = QLatin1String("txt_short_caption_");
-                QString longCaptionId = QLatin1String("txt_long_caption_");
-                QXmlStreamReader xml(&tsFile);
-                while (!xml.atEnd()) {
-                    xml.readNext();
-                    if (xml.isStartElement() && xml.name() == "context") {
-                        while (!(xml.isEndElement() && xml.name() == "context") && !xml.atEnd()) {
-                            xml.readNext();  
-                            if (xml.isStartElement() && xml.name() == "message" && 
-                                xml.attributes().value("numerus") == "no" && 
-                                xml.attributes().value("id").toString().left(shortCaptionId.length()) == shortCaptionId) {
-                                while (!(xml.isEndElement() && xml.name() == "message") && !xml.atEnd()) {
-                                    xml.readNext();
-                                    if (xml.isStartElement() && xml.name() == "translation") {
-                            		   shortCaption = xml.readElementText();
-                                    }
-                                }
-                            }
-                            if (xml.isStartElement() && xml.name() == "message" && 
-                                xml.attributes().value("numerus") == "no" && 
-                                xml.attributes().value("id").toString().left(longCaptionId.length()) == longCaptionId) {
-                                while (!(xml.isEndElement() && xml.name() == "message") && !xml.atEnd()) {   
-                                    xml.readNext();
-                                    if (xml.isStartElement() && xml.name() == "translation") {
-                                        longCaption = xml.readElementText();
-                                    }
-                                }
-                            }
-                        }
-                    }         
-                }
-                if (shortCaption.isEmpty()){
-                    fprintf(stderr, "Short caption generated from target name '#%s'.\n", qPrintable(fixedTarget));
-                  }
-                if (longCaption.isEmpty()){
-                    fprintf(stderr, "Warning: STRING_r_caption not generated from file '%s'.\n", qPrintable(tsFilename));
-                    fprintf(stderr, "       : caption generated from target name '#%s'.\n", qPrintable(fixedTarget));
-                  }
-                if (xml.hasError())
-                    fprintf(stderr, "ERROR: \"%s\" when parsing ts file\n", qPrintable(xml.errorString()));
-            } else {
-                fprintf(stderr, "Could not open ts file (%s)\n", qPrintable(tsFilename));
-            }
-        } else {
-            fprintf(stderr, "Warning: ts file does not exist: (%s)\n", qPrintable(tsFilename));
-            fprintf(stderr, "       : short and long caption generated from target name '#%s'.\n", qPrintable(fixedTarget));
-        }
-
-        // generate language specific caption loc file
-        QFile ft(locFilename);
-        if (ft.open(QIODevice::WriteOnly)) {
-            generatedFiles << ft.fileName();
-            QTextStream t(&ft);
-            t << "// ============================================================================" << endl;
-            t << "// * Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: ";
-            t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl;
-            t << "// * This file is generated by qmake and should not be modified by the" << endl;
-            t << "// * user." << endl;
-            t << "// ============================================================================" << endl;
-            t << endl;
-            if (!shortCaption.isEmpty()) {
-                t << "#define STRING_r_short_caption \"" << shortCaption  << "\"" << endl;    
-            } else {
-                t << "#define STRING_r_short_caption \"" "#"<< fixedTarget  << "\"" << endl;
-            }    
-            if (!longCaption.isEmpty()) {
-                t << "#define STRING_r_caption \"" << longCaption  << "\"" << endl;  
-            } else {    
-                t << "#define STRING_r_caption \"" "#"<< fixedTarget  << "\"" << endl;
-            }
-            ft.close();
-        } else {
-            PRINT_FILE_CREATE_ERROR(locFilename);	
-	    }
-    }
-}
-
-void SymbianMakefileGenerator::readRssRules(QString &numberOfIcons,
-                                            QString &iconFile, QMap<QString,
-                                            QStringList> &userRssRules)
-{
-    for (QMap<QString, QStringList>::iterator it = project->variables().begin(); it != project->variables().end(); ++it) {
-        if (it.key().startsWith(RSS_RULES_BASE)) {
-            QString newKey = it.key().mid(sizeof(RSS_RULES_BASE) - 1);
-            if (newKey.isEmpty()) {
-                fprintf(stderr, "Warning: Empty RSS_RULES_BASE key encountered\n");
-                continue;
-            }
-            QStringList newValues;
-            QStringList values = it.value();
-            foreach(QString item, values) {
-                // If there is no stringlist defined for a rule, use rule value directly
-                // This is convenience for defining single line statements
-                if (project->values(item).isEmpty()) {
-                    newValues << item;
-                } else {
-                    QStringList itemList;
-                    foreach(QString itemRow, project->values(item)) {
-                        itemList << itemRow;
-                    }
-                    newValues << itemList.join("\n");
-                }
-            }
-            // Verify thet there is exactly one value in RSS_TAG_NBROFICONS
-            if (newKey == RSS_TAG_NBROFICONS) {
-                if (newValues.count() == 1) {
-                    numberOfIcons = newValues[0];
-                } else {
-                    fprintf(stderr, "Warning: There must be exactly one value in '%s%s'\n",
-                            RSS_RULES_BASE, RSS_TAG_NBROFICONS);
-                    continue;
-                }
-            // Verify thet there is exactly one value in RSS_TAG_ICONFILE
-            } else if (newKey == RSS_TAG_ICONFILE) {
-                if (newValues.count() == 1) {
-                    iconFile = newValues[0];
-                } else {
-                    fprintf(stderr, "Warning: There must be exactly one value in '%s%s'\n",
-                            RSS_RULES_BASE, RSS_TAG_ICONFILE);
-                    continue;
-                }
-            } else if (newKey == RSS_TAG_HEADER
-                       || newKey == RSS_TAG_SERVICE_LIST
-                       || newKey == RSS_TAG_FILE_OWNERSHIP_LIST
-                       || newKey == RSS_TAG_DATATYPE_LIST
-                       || newKey == RSS_TAG_FOOTER
-                       || newKey == RSS_TAG_DEFAULT) {
-                userRssRules[newKey] = newValues;
-                continue;
-            } else {
-                fprintf(stderr, "Warning: Unsupported key:'%s%s'\n",
-                        RSS_RULES_BASE, newKey.toLatin1().constData());
-                continue;
-            }
-        }
-    }
-
-    QStringList newValues;
-    foreach(QString item, project->values(RSS_RULES)) {
-        // If there is no stringlist defined for a rule, use rule value directly
-        // This is convenience for defining single line statements
-        if (project->values(item).isEmpty()) {
-            newValues << item;
-        } else {
-            newValues << project->values(item);
-        }
-    }
-    userRssRules[RSS_TAG_DEFAULT] << newValues;
-
-    // Validate that either both RSS_TAG_NBROFICONS and RSS_TAG_ICONFILE keys exist
-    // or neither of them exist
-    if (!((numberOfIcons.isEmpty() && iconFile.isEmpty()) ||
-            (!numberOfIcons.isEmpty() && !iconFile.isEmpty()))) {
-        numberOfIcons.clear();
-        iconFile.clear();
-        fprintf(stderr, "Warning: Both or neither of '%s%s' and '%s%s' keys must exist.\n",
-                RSS_RULES_BASE, RSS_TAG_NBROFICONS, RSS_RULES_BASE, RSS_TAG_ICONFILE);
-    }
-
-    // Validate that RSS_TAG_NBROFICONS contains only numbers
-    if (!numberOfIcons.isEmpty()) {
-        bool ok;
-        numberOfIcons = numberOfIcons.simplified();
-        numberOfIcons.toInt(&ok);
-        if (!ok) {
-            numberOfIcons.clear();
-            iconFile.clear();
-            fprintf(stderr, "Warning: '%s%s' must be integer in decimal format.\n",
-                    RSS_RULES_BASE, RSS_TAG_NBROFICONS);
-        }
-    }
-}
-
-QStringList SymbianMakefileGenerator::symbianLangCodesFromTsFiles()
-{
-    QStringList tsfiles;
-    QStringList symbianLangCodes;
-    tsfiles << project->values("TRANSLATIONS");
-
-    fillQt2S60LangMapTable();
-
-    if (project->values("SYMBIANTRANSLATIONS").isEmpty()) {
-        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"));
-            if (!symbianLangCodes.contains(s60lang) && s60lang != "SC")
-                symbianLangCodes += s60lang;
-        }
-    } else {
-        modifyQt2S60LangMapTable(); // Modify the table according to the system_languages.ini file 
-        foreach(QString symbianTranslation, project->values("SYMBIANTRANSLATIONS")) {
-            QString s60lang = qt2S60LangMapTable.value(symbianTranslation, QString("SC"));
-
-            if (!symbianLangCodes.contains(s60lang) && s60lang != "SC")
-                symbianLangCodes += s60lang;
-        }
-    }
-        
-    return symbianLangCodes;
-}
-
-void SymbianMakefileGenerator::fillQt2S60LangMapTable()
-{
-    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                         //
-}
-
-void SymbianMakefileGenerator::modifyQt2S60LangMapTable()
-{
-	QString systemLanguagesIniFile = project->first("SYMBIANTRANSLATIONDIR").
-                                     append(QLatin1String("system_languages.ini"));
-    QFileInfo systemLangFileInfo(systemLanguagesIniFile);
-    if (systemLangFileInfo.exists()) {
-        QSettings systemLanguages(systemLanguagesIniFile, QSettings::IniFormat);
-        QStringList keys = systemLanguages.allKeys();
-        foreach (const QString &qtlang, keys){
-            QString s60lang = systemLanguages.value(qtlang).toString();
-            if (s60lang.localeAwareCompare(qt2S60LangMapTable.value(qtlang, QString("SC"))) != 0) {
-                qt2S60LangMapTable.insert(qtlang, s60lang);
-                fprintf(stderr, "Inserted: s60lang '%s' for qtlang '%s'.\n", qPrintable(s60lang), qPrintable(qtlang));
-            }
-        }
-    }
-}
-
 void SymbianMakefileGenerator::appendIfnotExist(QStringList &list, QString value)
 {
     if (!list.contains(value))
@@ -2067,16 +1099,6 @@
         appendIfnotExist(list, item);
 }
 
-QString SymbianMakefileGenerator::removePathSeparators(QString &file)
-{
-    QString ret = file;
-    while (ret.indexOf(QDir::separator()) > 0) {
-        ret.remove(0, ret.indexOf(QDir::separator()) + 1);
-    }
-
-    return ret;
-}
-
 
 QString SymbianMakefileGenerator::removeTrailingPathSeparators(QString &file)
 {
@@ -2102,111 +1124,12 @@
         t << "\t-@ if EXIST \"" << QDir::toNativeSeparators(item) << "\" ";
         t << cmd << " " << cmdOptions << " \"" << QDir::toNativeSeparators(item) << "\"" << endl;
 #else
-        t << "\t-if test -f " << QDir::toNativeSeparators(item) << "; then ";
+        t << "\t-if test -e " << QDir::toNativeSeparators(item) << "; then ";
         t << cmd << " " << cmdOptions << " " << QDir::toNativeSeparators(item) << "; fi" << endl;
 #endif
     }
 }
 
-void SymbianMakefileGenerator::removeSpecialCharacters(QString& str)
-{
-    // When modifying this method check also application_icon.prf
-    str.replace(QString("/"), QString("_"));
-    str.replace(QString("\\"), QString("_"));
-    str.replace(QString("-"), QString("_"));
-    str.replace(QString(":"), QString("_"));
-    str.replace(QString("."), QString("_"));
-    str.replace(QString(" "), QString("_"));
-}
-
-void SymbianMakefileGenerator::writeSisTargets(QTextStream &t)
-{
-    t << "-include " MAKE_CACHE_NAME << endl;
-    t << endl;
-
-    t << SIS_TARGET ":" << endl;
-    QString siscommand = QString::fromLatin1("\t$(if $(wildcard %1_template.%2),$(if $(wildcard %3)," \
-                                  "$(MAKE) -s -f $(MAKEFILE) %4," \
-                                  "$(if $(QT_SIS_TARGET),$(MAKE) -s -f $(MAKEFILE) %4," \
-                                  "$(MAKE) -s -f $(MAKEFILE) %5))," \
-                                  "$(MAKE) -s -f $(MAKEFILE) %6)")
-                          .arg(fixedTarget)
-                          .arg("pkg")
-                          .arg(MAKE_CACHE_NAME)
-                          .arg(OK_SIS_TARGET)
-                          .arg(FAIL_SIS_NOCACHE_TARGET)
-                          .arg(FAIL_SIS_NOPKG_TARGET);
-    t << siscommand << endl;
-    t << endl;
-
-    t << OK_SIS_TARGET ":" << endl;
-
-    QString pkgcommand = QString::fromLatin1("\tcreatepackage.bat $(QT_SIS_OPTIONS) %1_template.%2 $(QT_SIS_TARGET) " \
-                                 "$(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)")
-                          .arg(fixedTarget)
-                          .arg("pkg");
-    t << pkgcommand << endl;
-    t << endl;
-
-    QString sisName = fixedTarget;
-    sisName += ".sis";
-
-    t << sisName << ":" << endl;
-    t << "\t$(MAKE) -s -f $(MAKEFILE) " SIS_TARGET << endl << endl;
-
-    t << ROM_STUB_SIS_TARGET ":" << endl;
-    QString stubsiscommand = QString::fromLatin1("\t$(if $(wildcard %1_template.%2),$(if $(wildcard %3)," \
-                                  "$(MAKE) -s -f $(MAKEFILE) %4," \
-                                  "$(if $(QT_SIS_TARGET),$(MAKE) -s -f $(MAKEFILE) %4," \
-                                  "$(MAKE) -s -f $(MAKEFILE) %5))," \
-                                  "$(MAKE) -s -f $(MAKEFILE) %6)")
-                          .arg(fixedTarget)
-                          .arg("pkg")
-                          .arg(MAKE_CACHE_NAME)
-                          .arg(OK_ROM_STUB_SIS_TARGET)
-                          .arg(FAIL_SIS_NOCACHE_TARGET)
-                          .arg(FAIL_SIS_NOPKG_TARGET);
-    t << stubsiscommand << endl;
-    t << endl;
-
-    t << OK_ROM_STUB_SIS_TARGET ":" << endl;
-
-    QString stubpkgcommand = QString::fromLatin1("\tcreatepackage.bat -s $(QT_SIS_OPTIONS) %1_template.%2 $(QT_SIS_TARGET) " \
-                                 "$(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)")
-                          .arg(fixedTarget)
-                          .arg("pkg");
-    t << stubpkgcommand << endl;
-    t << endl;
-
-    t << INSTALLER_SIS_TARGET ": " << sisName << endl;
-    siscommand = QString::fromLatin1("\t$(if $(wildcard %1_installer.%2)," \
-                                  "$(MAKE) -s -f $(MAKEFILE) %3," \
-                                  "$(MAKE) -s -f $(MAKEFILE) %4)")
-                          .arg(fixedTarget)
-                          .arg("pkg")
-                          .arg(OK_INSTALLER_SIS_TARGET)
-                          .arg(FAIL_SIS_NOPKG_TARGET);
-    t << siscommand << endl;
-    t << endl;
-
-    t << OK_INSTALLER_SIS_TARGET ": " << endl;
-
-    pkgcommand = QString::fromLatin1("\tcreatepackage.bat $(QT_SIS_OPTIONS) %1_installer.%2 - " \
-                         "$(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)")
-                  .arg(fixedTarget)
-                  .arg("pkg");
-    t << pkgcommand << endl;
-    t << endl;
-
-    t << FAIL_SIS_NOPKG_TARGET ":" << endl;
-    t << "\t$(error PKG file does not exist, '" SIS_TARGET "' and '" INSTALLER_SIS_TARGET "' target are only supported for executables or projects with DEPLOYMENT statement)" << endl;
-    t << endl;
-
-    t << FAIL_SIS_NOCACHE_TARGET ":" << endl;
-    t << "\t$(error Project has to be built or QT_SIS_TARGET environment variable has to be set before calling 'SIS' target)" << endl;
-    t << endl;
-}
-
 void SymbianMakefileGenerator::generateDistcleanTargets(QTextStream& t)
 {
     t << "dodistclean:" << endl;