qmake/project.cpp
changeset 18 2f34d5167611
parent 0 1918ee327afb
child 30 5dc02b23752f
equal deleted inserted replaced
3:41300fa6a67c 18:2f34d5167611
     1 /****************************************************************************
     1 /****************************************************************************
     2 **
     2 **
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     4 ** All rights reserved.
     4 ** All rights reserved.
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
     6 **
     6 **
     7 ** This file is part of the qmake application of the Qt Toolkit.
     7 ** This file is part of the qmake application of the Qt Toolkit.
     8 **
     8 **
    42 #include "project.h"
    42 #include "project.h"
    43 #include "property.h"
    43 #include "property.h"
    44 #include "option.h"
    44 #include "option.h"
    45 #include "cachekeys.h"
    45 #include "cachekeys.h"
    46 
    46 
    47 #include "epocroot.h"
       
    48 
       
    49 #include <qdatetime.h>
    47 #include <qdatetime.h>
    50 #include <qfile.h>
    48 #include <qfile.h>
    51 #include <qfileinfo.h>
    49 #include <qfileinfo.h>
    52 #include <qdir.h>
    50 #include <qdir.h>
    53 #include <qregexp.h>
    51 #include <qregexp.h>
    62 #include <windows.h>
    60 #include <windows.h>
    63 #endif
    61 #endif
    64 #include <stdio.h>
    62 #include <stdio.h>
    65 #include <stdlib.h>
    63 #include <stdlib.h>
    66 
    64 
       
    65 // Included from tools/shared
       
    66 #include <symbian/epocroot.h>
       
    67 
    67 #ifdef Q_OS_WIN32
    68 #ifdef Q_OS_WIN32
    68 #define QT_POPEN _popen
    69 #define QT_POPEN _popen
    69 #define QT_PCLOSE _pclose
    70 #define QT_PCLOSE _pclose
    70 #else
    71 #else
    71 #define QT_POPEN popen
    72 #define QT_POPEN popen
    77 //expand fucntions
    78 //expand fucntions
    78 enum ExpandFunc { E_MEMBER=1, E_FIRST, E_LAST, E_CAT, E_FROMFILE, E_EVAL, E_LIST,
    79 enum ExpandFunc { E_MEMBER=1, E_FIRST, E_LAST, E_CAT, E_FROMFILE, E_EVAL, E_LIST,
    79                   E_SPRINTF, E_JOIN, E_SPLIT, E_BASENAME, E_DIRNAME, E_SECTION,
    80                   E_SPRINTF, E_JOIN, E_SPLIT, E_BASENAME, E_DIRNAME, E_SECTION,
    80                   E_FIND, E_SYSTEM, E_UNIQUE, E_QUOTE, E_ESCAPE_EXPAND,
    81                   E_FIND, E_SYSTEM, E_UNIQUE, E_QUOTE, E_ESCAPE_EXPAND,
    81                   E_UPPER, E_LOWER, E_FILES, E_PROMPT, E_RE_ESCAPE, E_REPLACE,
    82                   E_UPPER, E_LOWER, E_FILES, E_PROMPT, E_RE_ESCAPE, E_REPLACE,
    82                   E_SIZE };
    83                   E_SIZE, E_GENERATE_UID };
    83 QMap<QString, ExpandFunc> qmake_expandFunctions()
    84 QMap<QString, ExpandFunc> qmake_expandFunctions()
    84 {
    85 {
    85     static QMap<QString, ExpandFunc> *qmake_expand_functions = 0;
    86     static QMap<QString, ExpandFunc> *qmake_expand_functions = 0;
    86     if(!qmake_expand_functions) {
    87     if(!qmake_expand_functions) {
    87         qmake_expand_functions = new QMap<QString, ExpandFunc>;
    88         qmake_expand_functions = new QMap<QString, ExpandFunc>;
   109         qmake_expand_functions->insert("re_escape", E_RE_ESCAPE);
   110         qmake_expand_functions->insert("re_escape", E_RE_ESCAPE);
   110         qmake_expand_functions->insert("files", E_FILES);
   111         qmake_expand_functions->insert("files", E_FILES);
   111         qmake_expand_functions->insert("prompt", E_PROMPT);
   112         qmake_expand_functions->insert("prompt", E_PROMPT);
   112         qmake_expand_functions->insert("replace", E_REPLACE);
   113         qmake_expand_functions->insert("replace", E_REPLACE);
   113         qmake_expand_functions->insert("size", E_SIZE);
   114         qmake_expand_functions->insert("size", E_SIZE);
       
   115         qmake_expand_functions->insert("generate_uid", E_GENERATE_UID);
   114     }
   116     }
   115     return *qmake_expand_functions;
   117     return *qmake_expand_functions;
   116 }
   118 }
   117 //replace functions
   119 //replace functions
   118 enum TestFunc { T_REQUIRES=1, T_GREATERTHAN, T_LESSTHAN, T_EQUALS,
   120 enum TestFunc { T_REQUIRES=1, T_GREATERTHAN, T_LESSTHAN, T_EQUALS,
  1862         args_list += tmp;
  1864         args_list += tmp;
  1863     }
  1865     }
  1864     return doProjectExpand(func, args_list, place);
  1866     return doProjectExpand(func, args_list, place);
  1865 }
  1867 }
  1866 
  1868 
       
  1869 // defined in symbian generator
       
  1870 extern QString generate_test_uid(const QString& target);
       
  1871 
  1867 QStringList
  1872 QStringList
  1868 QMakeProject::doProjectExpand(QString func, QList<QStringList> args_list,
  1873 QMakeProject::doProjectExpand(QString func, QList<QStringList> args_list,
  1869                               QMap<QString, QStringList> &place)
  1874                               QMap<QString, QStringList> &place)
  1870 {
  1875 {
  1871     func = func.trimmed();
  1876     func = func.trimmed();
  2299             //QString target = args[0];
  2304             //QString target = args[0];
  2300             int size = values(args[0]).size();
  2305             int size = values(args[0]).size();
  2301             ret += QString::number(size);
  2306             ret += QString::number(size);
  2302         }
  2307         }
  2303         break; }
  2308         break; }
       
  2309     case E_GENERATE_UID:
       
  2310         if (args.count() != 1) {
       
  2311             fprintf(stderr, "%s:%d: generate_uid(var) requires one argument.\n",
       
  2312                     parser.file.toLatin1().constData(), parser.line_no);
       
  2313         } else {
       
  2314             ret += generate_test_uid(args.first());
       
  2315         }
       
  2316         break;
  2304     default: {
  2317     default: {
  2305         fprintf(stderr, "%s:%d: Unknown replace function: %s\n",
  2318         fprintf(stderr, "%s:%d: Unknown replace function: %s\n",
  2306                 parser.file.toLatin1().constData(), parser.line_no,
  2319                 parser.file.toLatin1().constData(), parser.line_no,
  2307                 func.toLatin1().constData());
  2320                 func.toLatin1().constData());
  2308         break; }
  2321         break; }
  3053     } else if(var == QLatin1String("_PRO_FILE_")) {
  3066     } else if(var == QLatin1String("_PRO_FILE_")) {
  3054         var = ".BUILTIN." + var;
  3067         var = ".BUILTIN." + var;
  3055         place[var] = QStringList(pfile);
  3068         place[var] = QStringList(pfile);
  3056     } else if(var == QLatin1String("_PRO_FILE_PWD_")) {
  3069     } else if(var == QLatin1String("_PRO_FILE_PWD_")) {
  3057         var = ".BUILTIN." + var;
  3070         var = ".BUILTIN." + var;
  3058         place[var] =  QStringList(QFileInfo(pfile).absolutePath());
  3071         place[var] = QStringList(pfile.isEmpty() ? qmake_getpwd() : QFileInfo(pfile).absolutePath());
  3059     } else if(var == QLatin1String("_QMAKE_CACHE_")) {
  3072     } else if(var == QLatin1String("_QMAKE_CACHE_")) {
  3060         var = ".BUILTIN." + var;
  3073         var = ".BUILTIN." + var;
  3061         if(Option::mkfile::do_cache)
  3074         if(Option::mkfile::do_cache)
  3062             place[var] = QStringList(Option::mkfile::cachefile);
  3075             place[var] = QStringList(Option::mkfile::cachefile);
  3063     } else if(var == QLatin1String("TEMPLATE")) {
  3076     } else if(var == QLatin1String("TEMPLATE")) {