aboutsummaryrefslogtreecommitdiff
path: root/tools/mhmake/src/util.h
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2011-03-04 11:26:33 +0000
committermarha <marha@users.sourceforge.net>2011-03-04 11:26:33 +0000
commitdbe1b719f8037dda23279b8bc7d8200578415e15 (patch)
tree258cd8fc316da25de3df00dc36e00a1f54f0e125 /tools/mhmake/src/util.h
parentd2bdfe9f8d895ac64619f7bc2f7443ce886146e9 (diff)
downloadvcxsrv-dbe1b719f8037dda23279b8bc7d8200578415e15.tar.gz
vcxsrv-dbe1b719f8037dda23279b8bc7d8200578415e15.tar.bz2
vcxsrv-dbe1b719f8037dda23279b8bc7d8200578415e15.zip
Implement eval sort warning functions (see gnu make manual for description)
Solved errors in if and foreach implementations Removed message and reparse function (use info and eval instead) $n can be used to add new line define can be used to specify multi-line macros Solved error in argument expansion in call function
Diffstat (limited to 'tools/mhmake/src/util.h')
-rw-r--r--tools/mhmake/src/util.h44
1 files changed, 42 insertions, 2 deletions
diff --git a/tools/mhmake/src/util.h b/tools/mhmake/src/util.h
index f789584a1..68cb032d7 100644
--- a/tools/mhmake/src/util.h
+++ b/tools/mhmake/src/util.h
@@ -50,7 +50,7 @@
#define PLATFORM "linux"
#endif
-#define MHMAKEVER "2.4.5"
+#define MHMAKEVER "3.0.0"
class makecommand
{
@@ -139,6 +139,46 @@ inline const char *NextCharItem(const char *pTmp,string &Output,char Char)
}
///////////////////////////////////////////////////////////////////////////////
+inline const char *SkipMakeExpr(const char *pMacro)
+{
+#ifdef _DEBUG
+ const char *pMacroIn=pMacro;
+#endif
+ char Char=*pMacro++;
+ char EndChar;
+ if (Char=='(')
+ EndChar=')';
+ else if (Char=='{')
+ EndChar='}';
+ else
+ return pMacro;
+ Char=*pMacro++;
+ while (Char!=EndChar)
+ {
+ if (Char=='$')
+ {
+ pMacro=SkipMakeExpr(pMacro);
+ } else if (Char=='(')
+ {
+ pMacro=SkipMakeExpr(pMacro-1);
+ }
+#ifdef _DEBUG
+ if (!*pMacro)
+ throw(string(1,EndChar)+" not found in "+pMacroIn);
+#endif
+ Char=*pMacro++;
+ }
+ return pMacro;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+inline size_t SkipMakeExpr(const string &Expr,size_t i)
+{
+ const char *pTmp=Expr.c_str();
+ return SkipMakeExpr(pTmp+i)-pTmp;
+}
+
+///////////////////////////////////////////////////////////////////////////////
string Substitute(const string &ToSubst,const string &SrcStr,const string &ToStr);
@@ -170,7 +210,7 @@ struct loadedmakefile : public refbase
map<string,string> m_CommandLineVars;
vector<string> m_CommandLineTargets;
- refptr<mhmakefileparser> m_pParser;
+ refptr<mhmakefileparser> m_pMakefileParser;
loadedmakefile(const fileinfo *pDir, vector<string> &Args,const string &Makefile=g_EmptyString);