public void ParseArguments(string[] args)
{
bool loadStdLib = true;
for (int i = 0; i < args.Length; i++) {
string arg = (string) args[i];
if (arg[0] == '-') {
string[] vals = arg.Split(':');
string name, value;
name = vals[0];
if (vals.Length == 2)
value = vals[1];
else
value = "";
switch (name) {
case "-reference":
case "-r":
references.Add(value);
break;
case "-lib":
string[] dirs = value.Split(',');
foreach (string dir in dirs) {
linkPaths.Add(value);
}
break;
case "-target":
case "-t":
switch (value) {
case "exe":
target = Target.Exe;
break;
case "winexe":
target = Target.WinExe;
break;
case "library":
target = Target.Library;
break;
case "module":
target = Target.Module;
break;
default:
Console.Error.WriteLine("unknown target: `{0}'",
value);
Environment.Exit(1);
break;
}
break;
case "-out":
outputFileName = value;
break;
case "-nostdlib":
loadStdLib = false;
break;
case "-version":
case "-v":
PrintVersion();
Environment.Exit(0);
break;
case "-help":
case "-h":
PrintUsage();
Environment.Exit(0);
break;
default:
Console.Error.WriteLine("unknown option: `{0}'", name);
Environment.Exit(1);
break;
}
}
else {
inputFiles.Add(args[i]);
}
}
if (inputFiles.Count == 0) {
Console.Error.WriteLine("no input files");
PrintUsage();
Environment.Exit(1);
}
if (outputFileName == null) {
string firstInputFile = (string) inputFiles[0];
string ext = "";
switch (target) {
case Target.Exe:
case Target.WinExe:
ext = ".exe";
break;
case Target.Library:
case Target.Module:
ext = ".dll";
break;
}
if (firstInputFile.LastIndexOf(".") > 0) {
outputFileName =
Path.GetFileNameWithoutExtension(firstInputFile) + ext;
}
else {
outputFileName = firstInputFile + ext;
}
}
if (loadStdLib) {
softReferences.Add("Babel.Base");
softReferences.Add("Babel.IO");
}
}