void
MakefileGenerator::verifyCompilers()
{
- QMap<QString, QStringList> &v = project->variables();
+ QHash<QString, QStringList> &v = project->variables();
QStringList &quc = v["QMAKE_EXTRA_COMPILERS"];
for(int i = 0; i < quc.size(); ) {
bool error = false;
return;
verifyCompilers();
init_opath_already = true;
- QMap<QString, QStringList> &v = project->variables();
+ QHash<QString, QStringList> &v = project->variables();
//for shadow builds
if(!v.contains("QMAKE_ABSOLUTE_SOURCE_PATH")) {
if(Option::mkfile::do_cache && !Option::mkfile::cachefile.isEmpty() &&
MakefileGenerator::findFilesInVPATH(QStringList l, uchar flags, const QString &vpath_var)
{
QStringList vpath;
- QMap<QString, QStringList> &v = project->variables();
+ QHash<QString, QStringList> &v = project->variables();
for(int val_it = 0; val_it < l.count(); ) {
bool remove_file = false;
QString &val = l[val_it];
void
MakefileGenerator::initCompiler(const MakefileGenerator::Compiler &comp)
{
- QMap<QString, QStringList> &v = project->variables();
+ QHash<QString, QStringList> &v = project->variables();
QStringList &l = v[comp.variable_in];
// find all the relevant file inputs
if(!init_compiler_already.contains(comp.variable_in)) {
verifyCompilers();
init_already = true;
- QMap<QString, QStringList> &v = project->variables();
+ QHash<QString, QStringList> &v = project->variables();
QStringList &quc = v["QMAKE_EXTRA_COMPILERS"];
//make sure the COMPILERS are in the correct input/output chain order
debug_msg(2, "Ignored meta file %s [%s]", real_meta_file.toLatin1().constData(), libinfo.type().toLatin1().constData());
} else {
ret = true;
- QMap<QString, QStringList> &vars = libinfo.variables();
- for(QMap<QString, QStringList>::Iterator it = vars.begin(); it != vars.end(); ++it)
+ QHash<QString, QStringList> &vars = libinfo.variables();
+ for(QHash<QString, QStringList>::Iterator it = vars.begin(); it != vars.end(); ++it)
processPrlVariable(it.key(), it.value());
if(try_replace_file && !libinfo.isEmpty("QMAKE_PRL_TARGET")) {
QString dir;
void
MakefileGenerator::writeExtraVariables(QTextStream &t)
{
- bool first = true;
- QMap<QString, QStringList> &vars = project->variables();
+ t << endl;
+
+ QStringList outlist;
+ QHash<QString, QStringList> &vars = project->variables();
QStringList &exports = project->values("QMAKE_EXTRA_VARIABLES");
- for(QMap<QString, QStringList>::Iterator it = vars.begin(); it != vars.end(); ++it) {
- for(QStringList::Iterator exp_it = exports.begin(); exp_it != exports.end(); ++exp_it) {
+ for (QHash<QString, QStringList>::Iterator it = vars.begin(); it != vars.end(); ++it) {
+ for (QStringList::Iterator exp_it = exports.begin(); exp_it != exports.end(); ++exp_it) {
QRegExp rx((*exp_it), Qt::CaseInsensitive, QRegExp::Wildcard);
- if(rx.exactMatch(it.key())) {
- if(first) {
- t << "\n####### Custom Variables" << endl;
- first = false;
- }
- t << "EXPORT_" << it.key() << " = " << it.value().join(" ") << endl;
- }
+ if (rx.exactMatch(it.key()))
+ outlist << ("EXPORT_" + it.key() + " = " + it.value().join(" "));
}
}
- if(!first)
- t << endl;
+ if (!outlist.isEmpty()) {
+ t << "####### Custom Variables" << endl;
+ t << outlist.join("\n") << endl << endl;
+ }
}
bool
#include <qregexp.h>
#include <qtextstream.h>
#include <qstack.h>
-#include <qhash.h>
#include <qdebug.h>
#ifdef Q_OS_UNIX
#include <unistd.h>
E_FIND, E_SYSTEM, E_UNIQUE, E_QUOTE, E_ESCAPE_EXPAND,
E_UPPER, E_LOWER, E_FILES, E_PROMPT, E_RE_ESCAPE, E_REPLACE,
E_SIZE, E_SORT_DEPENDS, E_RESOLVE_DEPENDS };
-QMap<QString, ExpandFunc> qmake_expandFunctions()
+QHash<QString, ExpandFunc> qmake_expandFunctions()
{
- static QMap<QString, ExpandFunc> *qmake_expand_functions = 0;
+ static QHash<QString, ExpandFunc> *qmake_expand_functions = 0;
if(!qmake_expand_functions) {
- qmake_expand_functions = new QMap<QString, ExpandFunc>;
- qmakeAddCacheClear(qmakeDeleteCacheClear<QMap<QString, ExpandFunc> >, (void**)&qmake_expand_functions);
+ qmake_expand_functions = new QHash<QString, ExpandFunc>;
+ qmakeAddCacheClear(qmakeDeleteCacheClear<QHash<QString, ExpandFunc> >, (void**)&qmake_expand_functions);
qmake_expand_functions->insert("member", E_MEMBER);
qmake_expand_functions->insert("first", E_FIRST);
qmake_expand_functions->insert("last", E_LAST);
T_RETURN, T_BREAK, T_NEXT, T_DEFINED, T_CONTAINS, T_INFILE,
T_COUNT, T_ISEMPTY, T_INCLUDE, T_LOAD, T_DEBUG, T_ERROR,
T_MESSAGE, T_WARNING, T_IF, T_OPTION };
-QMap<QString, TestFunc> qmake_testFunctions()
+QHash<QString, TestFunc> qmake_testFunctions()
{
- static QMap<QString, TestFunc> *qmake_test_functions = 0;
+ static QHash<QString, TestFunc> *qmake_test_functions = 0;
if(!qmake_test_functions) {
- qmake_test_functions = new QMap<QString, TestFunc>;
+ qmake_test_functions = new QHash<QString, TestFunc>;
qmake_test_functions->insert("requires", T_REQUIRES);
qmake_test_functions->insert("greaterThan", T_GREATERTHAN);
qmake_test_functions->insert("lessThan", T_LESSTHAN);
protected:
int ref_cnt;
virtual bool continueBlock() = 0;
- bool eval(QMakeProject *p, QMap<QString, QStringList> &place);
+ bool eval(QMakeProject *p, QHash<QString, QStringList> &place);
};
-bool ParsableBlock::eval(QMakeProject *p, QMap<QString, QStringList> &place)
+bool ParsableBlock::eval(QMakeProject *p, QHash<QString, QStringList> &place)
{
//save state
parser_info pi = parser;
{
FunctionBlock() : calling_place(0), scope_level(1), cause_return(false) { }
- QMap<QString, QStringList> vars;
- QMap<QString, QStringList> *calling_place;
+ QHash<QString, QStringList> vars;
+ QHash<QString, QStringList> *calling_place;
QStringList return_value;
int scope_level;
bool cause_return;
bool exec(const QList<QStringList> &args,
- QMakeProject *p, QMap<QString, QStringList> &place, QStringList &functionReturn);
+ QMakeProject *p, QHash<QString, QStringList> &place, QStringList &functionReturn);
virtual bool continueBlock() { return !cause_return; }
};
bool FunctionBlock::exec(const QList<QStringList> &args,
- QMakeProject *proj, QMap<QString, QStringList> &place,
+ QMakeProject *proj, QHash<QString, QStringList> &place,
QStringList &functionReturn)
{
//save state
bool loop_forever, cause_break, cause_next;
QStringList list;
- bool exec(QMakeProject *p, QMap<QString, QStringList> &place);
+ bool exec(QMakeProject *p, QHash<QString, QStringList> &place);
virtual bool continueBlock() { return !cause_next && !cause_break; }
};
-bool IteratorBlock::exec(QMakeProject *p, QMap<QString, QStringList> &place)
+bool IteratorBlock::exec(QMakeProject *p, QHash<QString, QStringList> &place)
{
bool ret = true;
QStringList::Iterator it;
{
if(own_prop)
delete prop;
- for(QMap<QString, FunctionBlock*>::iterator it = replaceFunctions.begin(); it != replaceFunctions.end(); ++it) {
+ for(QHash<QString, FunctionBlock*>::iterator it = replaceFunctions.begin(); it != replaceFunctions.end(); ++it) {
if(!it.value()->deref())
delete it.value();
}
replaceFunctions.clear();
- for(QMap<QString, FunctionBlock*>::iterator it = testFunctions.begin(); it != testFunctions.end(); ++it) {
+ for(QHash<QString, FunctionBlock*>::iterator it = testFunctions.begin(); it != testFunctions.end(); ++it) {
if(!it.value()->deref())
delete it.value();
}
void
-QMakeProject::init(QMakeProperty *p, const QMap<QString, QStringList> *vars)
+QMakeProject::init(QMakeProperty *p, const QHash<QString, QStringList> *vars)
{
if(vars)
base_vars = *vars;
reset();
}
-QMakeProject::QMakeProject(QMakeProject *p, const QMap<QString, QStringList> *vars)
+QMakeProject::QMakeProject(QMakeProject *p, const QHash<QString, QStringList> *vars)
{
init(p->properties(), vars ? vars : &p->variables());
- for(QMap<QString, FunctionBlock*>::iterator it = p->replaceFunctions.begin(); it != p->replaceFunctions.end(); ++it) {
+ for(QHash<QString, FunctionBlock*>::iterator it = p->replaceFunctions.begin(); it != p->replaceFunctions.end(); ++it) {
it.value()->ref();
replaceFunctions.insert(it.key(), it.value());
}
- for(QMap<QString, FunctionBlock*>::iterator it = p->testFunctions.begin(); it != p->testFunctions.end(); ++it) {
+ for(QHash<QString, FunctionBlock*>::iterator it = p->testFunctions.begin(); it != p->testFunctions.end(); ++it) {
it.value()->ref();
testFunctions.insert(it.key(), it.value());
}
}
bool
-QMakeProject::parse(const QString &t, QMap<QString, QStringList> &place, int numLines)
+QMakeProject::parse(const QString &t, QHash<QString, QStringList> &place, int numLines)
{
// To preserve the integrity of any UTF-8 characters in .pro file, temporarily replace the
// non-breaking space (0xA0) characters with another non-space character, so that
parser.file.toLatin1().constData(), parser.line_no, func.toLatin1().constData());
return false;
}
- QMap<QString, FunctionBlock*> *map = 0;
+ QHash<QString, FunctionBlock*> *map = 0;
if(func == "defineTest")
map = &testFunctions;
else
}
bool
-QMakeProject::read(QTextStream &file, QMap<QString, QStringList> &place)
+QMakeProject::read(QTextStream &file, QHash<QString, QStringList> &place)
{
int numLines = 0;
bool ret = true;
}
bool
-QMakeProject::read(const QString &file, QMap<QString, QStringList> &place)
+QMakeProject::read(const QString &file, QHash<QString, QStringList> &place)
{
parser_info pi = parser;
reset();
}
bool
-QMakeProject::isActiveConfig(const QString &x, bool regex, QMap<QString, QStringList> *place)
+QMakeProject::isActiveConfig(const QString &x, bool regex, QHash<QString, QStringList> *place)
{
if(x.isEmpty())
return true;
}
bool
-QMakeProject::doProjectTest(QString str, QMap<QString, QStringList> &place)
+QMakeProject::doProjectTest(QString str, QHash<QString, QStringList> &place)
{
QString chk = remove_quotes(str);
if(chk.isEmpty())
bool
QMakeProject::doProjectTest(QString func, const QString ¶ms,
- QMap<QString, QStringList> &place)
+ QHash<QString, QStringList> &place)
{
return doProjectTest(func, split_arg_list(params), place);
}
QMakeProject::IncludeStatus
-QMakeProject::doProjectInclude(QString file, uchar flags, QMap<QString, QStringList> &place)
+QMakeProject::doProjectInclude(QString file, uchar flags, QHash<QString, QStringList> &place)
{
enum { UnknownFormat, ProFormat, JSFormat } format = UnknownFormat;
if(flags & IncludeFlagFeature) {
QStringList
QMakeProject::doProjectExpand(QString func, const QString ¶ms,
- QMap<QString, QStringList> &place)
+ QHash<QString, QStringList> &place)
{
return doProjectExpand(func, split_arg_list(params), place);
}
QStringList
QMakeProject::doProjectExpand(QString func, QStringList args,
- QMap<QString, QStringList> &place)
+ QHash<QString, QStringList> &place)
{
QList<QStringList> args_list;
for(int i = 0; i < args.size(); ++i) {
static void
populateDeps(const QStringList &deps, const QString &prefix,
QHash<QString, QSet<QString> > &dependencies, QHash<QString, QStringList> &dependees,
- QStringList &rootSet, QMap<QString, QStringList> &place)
+ QStringList &rootSet, QHash<QString, QStringList> &place)
{
foreach (const QString &item, deps)
if (!dependencies.contains(item)) {
QStringList
QMakeProject::doProjectExpand(QString func, QList<QStringList> args_list,
- QMap<QString, QStringList> &place)
+ QHash<QString, QStringList> &place)
{
func = func.trimmed();
if(replaceFunctions.contains(func)) {
QString file = args[0], seek_var = args[1];
file = Option::fixPathToLocalOS(file);
- QMap<QString, QStringList> tmp;
+ QHash<QString, QStringList> tmp;
if(doProjectInclude(file, IncludeFlagNewParser, tmp) == IncludeSuccess) {
if(tmp.contains("QMAKE_INTERNAL_INCLUDED_FILES")) {
QStringList &out = place["QMAKE_INTERNAL_INCLUDED_FILES"];
parser.file.toLatin1().constData(), parser.line_no);
} else {
- const QMap<QString, QStringList> *source = &place;
+ const QHash<QString, QStringList> *source = &place;
if(args.count() == 2) {
if(args.at(1) == "Global") {
source = &vars;
QString tmp;
tmp.sprintf(".QMAKE_INTERNAL_TMP_VAR_%d", x++);
ret = QStringList(tmp);
- QStringList &lst = (*((QMap<QString, QStringList>*)&place))[tmp];
+ QStringList &lst = (*((QHash<QString, QStringList>*)&place))[tmp];
lst.clear();
for(QStringList::ConstIterator arg_it = args.begin();
arg_it != args.end(); ++arg_it)
}
bool
-QMakeProject::doProjectTest(QString func, QStringList args, QMap<QString, QStringList> &place)
+QMakeProject::doProjectTest(QString func, QStringList args, QHash<QString, QStringList> &place)
{
QList<QStringList> args_list;
for(int i = 0; i < args.size(); ++i) {
}
bool
-QMakeProject::doProjectTest(QString func, QList<QStringList> args_list, QMap<QString, QStringList> &place)
+QMakeProject::doProjectTest(QString func, QList<QStringList> args_list, QHash<QString, QStringList> &place)
{
func = func.trimmed();
}
bool ret = false;
- QMap<QString, QStringList> tmp;
+ QHash<QString, QStringList> tmp;
if(doProjectInclude(Option::fixPathToLocalOS(args[0]), IncludeFlagNewParser, tmp) == IncludeSuccess) {
if(tmp.contains("QMAKE_INTERNAL_INCLUDED_FILES")) {
QStringList &out = place["QMAKE_INTERNAL_INCLUDED_FILES"];
flags |= IncludeFlagFeature;
IncludeStatus stat = IncludeFailure;
if(!parseInto.isEmpty()) {
- QMap<QString, QStringList> symbols;
+ QHash<QString, QStringList> symbols;
stat = doProjectInclude(file, flags|IncludeFlagNewProject, symbols);
if(stat == IncludeSuccess) {
- QMap<QString, QStringList> out_place;
- for(QMap<QString, QStringList>::ConstIterator it = place.begin(); it != place.end(); ++it) {
+ QHash<QString, QStringList> out_place;
+ for(QHash<QString, QStringList>::ConstIterator it = place.begin(); it != place.end(); ++it) {
const QString var = it.key();
if(var != parseInto && !var.startsWith(parseInto + "."))
out_place.insert(var, it.value());
}
- for(QMap<QString, QStringList>::ConstIterator it = symbols.begin(); it != symbols.end(); ++it) {
+ for(QHash<QString, QStringList>::ConstIterator it = symbols.begin(); it != symbols.end(); ++it) {
const QString var = it.key();
if(!var.startsWith("."))
out_place.insert(parseInto + "." + it.key(), it.value());
}
bool
-QMakeProject::doProjectCheckReqs(const QStringList &deps, QMap<QString, QStringList> &place)
+QMakeProject::doProjectCheckReqs(const QStringList &deps, QHash<QString, QStringList> &place)
{
bool ret = false;
for(QStringList::ConstIterator it = deps.begin(); it != deps.end(); ++it) {
bool
QMakeProject::test(const QString &v)
{
- QMap<QString, QStringList> tmp = vars;
+ QHash<QString, QStringList> tmp = vars;
return doProjectTest(v, tmp);
}
bool
QMakeProject::test(const QString &func, const QList<QStringList> &args)
{
- QMap<QString, QStringList> tmp = vars;
+ QHash<QString, QStringList> tmp = vars;
return doProjectTest(func, args, tmp);
}
QMakeProject::expand(const QString &str)
{
bool ok;
- QMap<QString, QStringList> tmp = vars;
+ QHash<QString, QStringList> tmp = vars;
const QStringList ret = doVariableReplaceExpand(str, tmp, &ok);
if(ok)
return ret;
parser.file = file;
parser.line_no = line;
parser.from_file = false;
- QMap<QString, QStringList> tmp = vars;
+ QHash<QString, QStringList> tmp = vars;
const QStringList ret = doVariableReplaceExpand(str, tmp, &ok);
parser = pi;
return ok ? ret.join(QString(Option::field_sep)) : QString();
QStringList
QMakeProject::expand(const QString &func, const QList<QStringList> &args)
{
- QMap<QString, QStringList> tmp = vars;
+ QHash<QString, QStringList> tmp = vars;
return doProjectExpand(func, args, tmp);
}
bool
-QMakeProject::doVariableReplace(QString &str, QMap<QString, QStringList> &place)
+QMakeProject::doVariableReplace(QString &str, QHash<QString, QStringList> &place)
{
bool ret;
str = doVariableReplaceExpand(str, place, &ret).join(QString(Option::field_sep));
}
QStringList
-QMakeProject::doVariableReplaceExpand(const QString &str, QMap<QString, QStringList> &place, bool *ok)
+QMakeProject::doVariableReplaceExpand(const QString &str, QHash<QString, QStringList> &place, bool *ok)
{
QStringList ret;
if(ok)
return ret;
}
-QStringList &QMakeProject::values(const QString &_var, QMap<QString, QStringList> &place)
+QStringList &QMakeProject::values(const QString &_var, QHash<QString, QStringList> &place)
{
QString var = varMap(_var);
if(var == QLatin1String("LITERAL_WHITESPACE")) { //a real space in a token)
bool QMakeProject::isEmpty(const QString &v)
{
- QMap<QString, QStringList>::ConstIterator it = vars.constFind(varMap(v));
+ QHash<QString, QStringList>::ConstIterator it = vars.constFind(varMap(v));
return it == vars.constEnd() || it->isEmpty();
}
#include <qtextstream.h>
#include <qstring.h>
#include <qstack.h>
-#include <qmap.h>
+#include <qhash.h>
#include <qmetatype.h>
QT_BEGIN_NAMESPACE
QStack<FunctionBlock *> function_blocks;
IteratorBlock *iterator;
FunctionBlock *function;
- QMap<QString, FunctionBlock*> testFunctions, replaceFunctions;
+ QHash<QString, FunctionBlock*> testFunctions, replaceFunctions;
bool recursive;
bool own_prop;
QString pfile, cfile;
QMakeProperty *prop;
void reset();
- QMap<QString, QStringList> vars, base_vars, cache;
- bool parse(const QString &text, QMap<QString, QStringList> &place, int line_count=1);
+ QHash<QString, QStringList> vars, base_vars, cache;
+ bool parse(const QString &text, QHash<QString, QStringList> &place, int line_count=1);
enum IncludeStatus {
IncludeSuccess,
IncludeFlagNewParser = 0x02,
IncludeFlagNewProject = 0x04
};
- IncludeStatus doProjectInclude(QString file, uchar flags, QMap<QString, QStringList> &place);
+ IncludeStatus doProjectInclude(QString file, uchar flags, QHash<QString, QStringList> &place);
- bool doProjectCheckReqs(const QStringList &deps, QMap<QString, QStringList> &place);
- bool doVariableReplace(QString &str, QMap<QString, QStringList> &place);
- QStringList doVariableReplaceExpand(const QString &str, QMap<QString, QStringList> &place, bool *ok=0);
- void init(QMakeProperty *, const QMap<QString, QStringList> *);
- QStringList &values(const QString &v, QMap<QString, QStringList> &place);
+ bool doProjectCheckReqs(const QStringList &deps, QHash<QString, QStringList> &place);
+ bool doVariableReplace(QString &str, QHash<QString, QStringList> &place);
+ QStringList doVariableReplaceExpand(const QString &str, QHash<QString, QStringList> &place, bool *ok=0);
+ void init(QMakeProperty *, const QHash<QString, QStringList> *);
+ QStringList &values(const QString &v, QHash<QString, QStringList> &place);
void validateModes();
public:
QMakeProject() { init(0, 0); }
QMakeProject(QMakeProperty *p) { init(p, 0); }
- QMakeProject(QMakeProject *p, const QMap<QString, QStringList> *nvars=0);
- QMakeProject(const QMap<QString, QStringList> &nvars) { init(0, &nvars); }
- QMakeProject(QMakeProperty *p, const QMap<QString, QStringList> &nvars) { init(p, &nvars); }
+ QMakeProject(QMakeProject *p, const QHash<QString, QStringList> *nvars=0);
+ QMakeProject(const QHash<QString, QStringList> &nvars) { init(0, &nvars); }
+ QMakeProject(QMakeProperty *p, const QHash<QString, QStringList> &nvars) { init(p, &nvars); }
~QMakeProject();
enum { ReadCache=0x01, ReadConf=0x02, ReadCmdLine=0x04, ReadProFile=0x08,
QString projectFile();
inline QMakeProperty *properties() { return prop; }
- bool doProjectTest(QString str, QMap<QString, QStringList> &place);
+ bool doProjectTest(QString str, QHash<QString, QStringList> &place);
bool doProjectTest(QString func, const QString ¶ms,
- QMap<QString, QStringList> &place);
+ QHash<QString, QStringList> &place);
bool doProjectTest(QString func, QStringList args,
- QMap<QString, QStringList> &place);
+ QHash<QString, QStringList> &place);
bool doProjectTest(QString func, QList<QStringList> args,
- QMap<QString, QStringList> &place);
+ QHash<QString, QStringList> &place);
QStringList doProjectExpand(QString func, const QString ¶ms,
- QMap<QString, QStringList> &place);
+ QHash<QString, QStringList> &place);
QStringList doProjectExpand(QString func, QStringList args,
- QMap<QString, QStringList> &place);
+ QHash<QString, QStringList> &place);
QStringList doProjectExpand(QString func, QList<QStringList> args,
- QMap<QString, QStringList> &place);
+ QHash<QString, QStringList> &place);
QStringList expand(const QString &v);
QString expand(const QString &v, const QString &file, int line);
bool test(const QString &v);
bool test(const QString &func, const QList<QStringList> &args);
bool isActiveConfig(const QString &x, bool regex=false,
- QMap<QString, QStringList> *place=NULL);
+ QHash<QString, QStringList> *place=NULL);
bool isSet(const QString &v); // No compat mapping, no magic variables
bool isEmpty(const QString &v); // With compat mapping, but no magic variables
QStringList &values(const QString &v); // With compat mapping and magic variables
QString first(const QString &v); // ditto
- QMap<QString, QStringList> &variables(); // No compat mapping and magic, obviously
+ QHash<QString, QStringList> &variables(); // No compat mapping and magic, obviously
bool isRecursive() const { return recursive; }
protected:
friend class MakefileGenerator;
- bool read(const QString &file, QMap<QString, QStringList> &place);
- bool read(QTextStream &file, QMap<QString, QStringList> &place);
+ bool read(const QString &file, QHash<QString, QStringList> &place);
+ bool read(QTextStream &file, QHash<QString, QStringList> &place);
};
Q_DECLARE_METATYPE(QMakeProject*)
return vals.first();
}
-inline QMap<QString, QStringList> &QMakeProject::variables()
+inline QHash<QString, QStringList> &QMakeProject::variables()
{ return vars; }
QT_END_NAMESPACE