diff --git a/bin/parse_install_log b/bin/parse_install_log
new file mode 100644
index 0000000000000000000000000000000000000000..c40654956e54210fb8eaf520586cabd3bbd27a23
--- /dev/null
+++ b/bin/parse_install_log
@@ -0,0 +1,123 @@
+#!/usr/local/bin/pike
+
+string basename(string s)
+{
+  return (s/"/")[-1];
+}
+
+mapping install_from=([]);
+mapping fake_dirs=([]);
+
+void install(string from, string to)
+{
+  if(search(from,"/CVS/")!=-1) return;
+  install_from[combine_path(".",to)]=combine_path(".",from);
+}
+
+int main(int argc, string *argv)
+{
+  string srcdir=argv[1];
+  string prefix=argv[2];
+  string *lines=Stdio.stdin->read(0x7fffffff)/"\n";
+
+  foreach(lines, string line)
+    {
+      string *args=line/" ";
+      args[0]=basename(args[0]);
+      
+      Getopt.find_all_options(args,
+			      ({
+				({"ignore",Getopt.NO_ARG,"-cvf"}),
+				  }),
+			      0,
+			      0);
+      args=Getopt.get_args(args,0,0);
+      
+      switch(args[0])
+      {
+	case "mkdir":
+	  for(int e=1;e<sizeof(args);e++)
+	    fake_dirs[args]=1;
+	  break;
+	  
+	case "install":
+	case "cp":
+	  mixed s=file_stat(args[-1]);
+	  
+	  if((s && s[1]==-2) || sizeof(args)>3 || fake_dirs[s])
+	  {
+	    for(int e=1;e<sizeof(args)-1;e++)
+	      install(args[e], combine_path(args[-1],basename(args[e])));
+	  }else{
+	    install(args[1], args[2]);
+	  }
+      }
+    }
+
+  string dirname=replace(version()," ","-");
+#if constant(uname)
+  mixed u=uname();
+  dirname+="-"+u->sysname+"-"+u->release+"-"+u->machine;
+#endif
+
+  Process.system("rm -rf "+dirname);
+  mkdir(dirname);
+  chmod(dirname,0755);
+
+  mkdir(dirname+"/files");
+  chmod(dirname+"/files",0755);
+  
+  Process.system("cp "+srcdir+"/install-sh "+srcdir+"/../ANNOUNCE "+dirname);
+  chmod(dirname+"/install-sh",0755);
+
+  mapping new_install_from=([]);
+  int fileno;
+
+  foreach(sort(indices(install_from)), mixed i)
+    {
+      Process.system("cp "+install_from[i]+" "+dirname+"/files/"+fileno);
+      new_install_from[i]="files/"+fileno;
+      fileno++;
+    }
+
+  string script="#!/bin/sh\n";
+  script+="cat <<\EOF\n";
+
+  script+=
+    "This script will install "+version()+" on this machine.\n"
+    "The following directories will be created if they do not\n"
+    "already exist:\n"
+    "\n"
+    "           "+prefix+"/bin/\n"
+    "           "+prefix+"/lib/pike/\n"
+    "           "+prefix+"/include/pike/\n"
+    "\n"
+    "Do you wish to continue? \n"
+    "EOF\n"
+    "if read answer ; then\n"
+    "  case x$answer in\n"
+    "    xy* | xY*) ;;\n"
+    "    *) echo See you later. ; exit 0\n"
+    "  esac\n"
+    "else\n"
+    "  :\n"
+    "fi\n"
+    ;
+
+  
+  foreach(sort(indices(new_install_from)), mixed i)
+    {
+      script+=
+	sprintf("echo installing %s\n",i)+
+	sprintf("if test -f %s ; then mv -f %s %s.old ; else : ; fi\n",i,i,i)+
+	sprintf("./install-sh %s %s\n",new_install_from[i],i);
+    }
+
+  rm(dirname+"/install");
+  Stdio.write_file(dirname+"/install",script);
+  chmod(dirname+"/install",0755);
+
+  Process.system("tar cvf - "+dirname+" | gzip -9 >"+dirname+".tar.gz");
+}
+
+