var WshShell = new ActiveXObject("WScript.Shell")

function ExecAndWait(cmd) {
    var oExec = WshShell.Exec(cmd);               
    while (oExec.Status == 0)
    {
       WScript.Sleep(100);
    }
    if (oExec.ExitCode != 0) {
       WScript.echo("Error: " + oExec.ExitCode);
    }
}

var fso = new ActiveXObject("Scripting.FileSystemObject")
var ForReading = 1;
var stm = fso.OpenTextFile("makefile8",ForReading);
var makefile = stm.ReadAll();
stm.Close();

var lines = makefile.split("\n");
var target = null;
var commands = new Array();
var comments = new Array();
var count = 0;

for (l = 0; l < lines.length; l++) {
  var line = lines[l];
  try {
    var i = line.indexOf(":");  
    if (i >= 0) {        
      target = line.substr(0,i);
      assem = null;
      assemblyNameLength = target.indexOf(".dll");
      if (assemblyNameLength > -1) {   
        assem = target.substr(0,assemblyNameLength);        
      }
      continue;      
    }
        
    if (line.indexOf("GacInstall")>=0 || line.indexOf("GacRegInstall")>=0) {
      comments[count] = "Ungacing " + assem;
      commands[count++] = "gacutil /silent /nologo /u "+assem;
    }
    
    if (line.indexOf("RegInstall")>=0 || line.indexOf("GacRegInstall")>=0) {
      comments[count] = "Unregistering " + target;
      commands[count++] = "regasm /nologo /u "+target;
    }
  } catch (e) {
      WScript.echo("error: " + e.description);
  }  
}

// uninstall in reverse order
for (i = count-1; i >= 0; i--) {
   WScript.echo(comments[i]);
   ExecAndWait(commands[i]);
}