00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef __PROJECT_H__
00037 #define __PROJECT_H__
00038
00039 #include <qstringlist.h>
00040 #include <qstring.h>
00041 #include <qmap.h>
00042
00043 class QMakeProperty;
00044
00045 class QMakeProject
00046 {
00047 enum TestStatus { TestNone, TestFound, TestSeek } test_status;
00048 int scope_block, scope_flag;
00049
00050 QString pfile, cfile;
00051 QMakeProperty *prop;
00052 void reset();
00053 QMap<QString, QStringList> vars, base_vars, cache;
00054 bool parse(const QString &text, QMap<QString, QStringList> &place);
00055 bool doProjectTest(const QString &func, const QString ¶ms, QMap<QString, QStringList> &place);
00056 bool doProjectTest(const QString &func, QStringList args, QMap<QString, QStringList> &place);
00057 bool doProjectCheckReqs(const QStringList &deps, QMap<QString, QStringList> &place);
00058 QString doVariableReplace(QString &str, const QMap<QString, QStringList> &place);
00059
00060 public:
00061 QMakeProject();
00062 QMakeProject(QMakeProperty *);
00063
00064 enum { ReadCache=0x01, ReadConf=0x02, ReadCmdLine=0x04, ReadProFile=0x08, ReadPostFiles=0x10, ReadAll=0xFF };
00065 bool read(const QString &project, const QString &pwd, uchar cmd=ReadAll);
00066 bool read(uchar cmd=ReadAll);
00067
00068 QString projectFile();
00069 QString configFile();
00070
00071 bool isEmpty(const QString &v);
00072 QStringList &values(const QString &v);
00073 QString first(const QString &v);
00074 QMap<QString, QStringList> &variables();
00075 bool isActiveConfig(const QString &x, bool regex=FALSE, QMap<QString, QStringList> *place=NULL);
00076
00077 protected:
00078 friend class MakefileGenerator;
00079 bool read(const QString &file, QMap<QString, QStringList> &place);
00080
00081 };
00082
00083 inline QString QMakeProject::projectFile()
00084 {
00085 #if defined(Q_CC_SUN) && (__SUNPRO_CC == 0x500) || defined(Q_CC_HP)
00086
00087 if (pfile == "-")
00088 return QString("(stdin)");
00089 else
00090 return pfile;
00091 #else
00092 return pfile == "-" ? QString("(stdin)") : pfile;
00093 #endif
00094 }
00095
00096 inline QString QMakeProject::configFile()
00097 { return cfile; }
00098
00099 inline bool QMakeProject::isEmpty(const QString &v)
00100 { return !vars.contains(v) || vars[v].isEmpty(); }
00101
00102 inline QStringList &QMakeProject::values(const QString &v)
00103 { return vars[v]; }
00104
00105 inline QString QMakeProject::first(const QString &v)
00106 {
00107 #if defined(Q_CC_SUN) && (__SUNPRO_CC == 0x500) || defined(Q_CC_HP)
00108
00109 if (isEmpty(v))
00110 return QString("");
00111 else
00112 return vars[v].first();
00113 #else
00114 return isEmpty(v) ? QString("") : vars[v].first();
00115 #endif
00116 }
00117
00118 inline QMap<QString, QStringList> &QMakeProject::variables()
00119 { return vars; }
00120
00121 #endif