Skip to content

Commit b0ff5c1

Browse files
committed
#249 fix --eval command line switch
1 parent 6f9cd27 commit b0ff5c1

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

src/omake/MakeMain.cpp

+2-13
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ CmdSwitchBool MakeMain::touch(switchParser, 't');
4747
CmdSwitchBool MakeMain::query(switchParser, 'q');
4848
CmdSwitchBool MakeMain::keepGoing(switchParser, 'k');
4949
CmdSwitchBool MakeMain::ignoreErrors(switchParser, 'i');
50-
CmdSwitchDefine MakeMain::defines(switchParser, 'D');
51-
CmdSwitchDefine MakeMain::evals(switchParser, '-');
50+
CmdSwitchDefine MakeMain::defines(switchParser, 'D', "eval");
5251
CmdSwitchBool MakeMain::rebuild(switchParser, 'B');
5352
CmdSwitchCombineString MakeMain::newFiles(switchParser, 'W', ' ');
5453
CmdSwitchCombineString MakeMain::oldFiles(switchParser, 'o', ' ');
@@ -304,17 +303,7 @@ void MakeMain::LoadCmdDefines()
304303
for (int i = 0; i < defines.GetCount(); i++)
305304
{
306305
const CmdSwitchDefine::define* def = defines.GetValue(i);
307-
SetVariable(def->name, def->value, Variable::o_command_line, false);
308-
}
309-
for (int i = 0; i < evals.GetCount(); i++)
310-
{
311-
const CmdSwitchDefine::define* def = evals.GetValue(i);
312-
if (std::string(def->name) != "eval")
313-
{
314-
Eval::error(std::string("Invalid switch --") + def->name);
315-
exit(1);
316-
}
317-
Parser p(def->value, "<eval>", 1, false, Variable::o_default);
306+
Parser p(def->name + "=" + def->value, "<eval>", 1, false, Variable::o_default);
318307
p.SetAutoExport();
319308
p.Parse();
320309
}

src/util/CmdSwitch.cpp

+16-2
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,13 @@ CmdSwitchDefine::~CmdSwitchDefine()
137137
}
138138
int CmdSwitchDefine::Parse(const char* data)
139139
{
140+
if (!data[0])
141+
return INT_MAX;
142+
int str=0;
140143
int rv = strlen(data);
141144
char name[10000], *p = name;
145+
if (data[0] == '"')
146+
str = *data++;
142147
if (!isalpha(*data) && *data != '_')
143148
return -1;
144149
while (*data && (isalnum(*data) || *data == '_'))
@@ -154,11 +159,13 @@ int CmdSwitchDefine::Parse(const char* data)
154159
{
155160
data++;
156161
p = name;
157-
while (*data)
162+
while (*data && *data != str)
158163
{
159164
*p++ = *data++;
160165
}
161166
*p = 0;
167+
if (*data)
168+
data++;
162169
newDefine->value = name;
163170
}
164171
else
@@ -276,6 +283,9 @@ CmdSwitchBase* CmdSwitchParser::Find(const char *name, bool useLongName)
276283
{
277284
std::string bigmatch = "";
278285
int max = strlen(name);
286+
const char *s = strchr(name,'=');
287+
if (s && s - name < max)
288+
max = s - name;
279289
for (int i = max; i >= 1; i--)
280290
{
281291
for (auto s : switches)
@@ -333,7 +343,11 @@ bool CmdSwitchParser::Parse(int* argc, char* argv[])
333343
if (longName)
334344
{
335345
b = Find(data, true);
336-
data += strlen(data);
346+
const char *p = strchr(data, '=');
347+
if (p)
348+
data = p+1;
349+
else
350+
data += strlen(data);
337351
}
338352
else
339353
{

0 commit comments

Comments
 (0)