diff --git a/src/mklibpike.pike b/src/mklibpike.pike
index 0faa29263c32e13767fab722e6a59d57f9b5b824..95d5ea50fcaf080d04d818b6ed06a449d8955020 100644
--- a/src/mklibpike.pike
+++ b/src/mklibpike.pike
@@ -1,5 +1,5 @@
 /*
- * $Id: mklibpike.pike,v 1.3 2005/01/03 18:24:11 grubba Exp $
+ * $Id: mklibpike.pike,v 1.4 2005/01/03 18:57:29 grubba Exp $
  *
  * Create strapping code for a list of symbols in pike.so,
  * and the pike headerfiles.
@@ -80,7 +80,7 @@ int main(int argc, array(string) argv)
   array(string) srcdirs = ({ "." });
   array(string) symbols = ({ });
 
-  Stdio.File out = Stdio.stdout;
+  string out_name;
 
   foreach(Getopt.find_all_options(argv, ({
 		 ({ "help", Getopt.NO_ARG, ({ "-h", "--help" }) }),
@@ -112,15 +112,11 @@ int main(int argc, array(string) argv)
       break;
     case "out":
       //   -o	Specify output filename.
-      if (out != Stdio.stdout) {
+      if (out_name) {
 	werror("Output file specified multiple times.\n");
 	exit(1);
       }
-      out = Stdio.File();
-      if (!out->open(val, "wct")) {
-	werror("Failed to open %O for writing.\n", val);
-	exit(1);
-      }
+      out_name = val;
       break;
     case "sym":
       //   -s	Add single symbol.
@@ -133,7 +129,8 @@ int main(int argc, array(string) argv)
 	werror("Failed to open symbol file %O.\n", val);
 	exit(1);
       }
-      symbols += String.trim_whites((replace(raw_syms, "\r", "")/"\n")[*]);
+      symbols += String.trim_whites((replace(raw_syms, "\r", "")/"\n")[*]) -
+	({""});
       break;
     }
   }
@@ -158,6 +155,24 @@ int main(int argc, array(string) argv)
 
   mapping(string:array(array(Parser.C.Token))) symbol_info = parse(tokens);
 
+  Stdio.File out = Stdio.stdout;
+  if (out_name) {
+    out = Stdio.File();
+    if (!out->open(out_name, "wct")) {
+      werror("Failed to open %O for writing.\n", out_name);
+      exit(1);
+    }
+  }
+
+  out->write("/*\n"
+	     " * Automatically generated by " __FILE__ "\n"
+	     " * on " __DATE__ ". Do NOT edit.\n"
+	     " */\n"
+	     "\n"
+	     "%{#include \"%s\"\n%}\n"
+	     "\n",
+	     headers);
+
   int fail;
   foreach(Array.uniq(sort(symbols)), string sym) {
     array(array(Parser.C.Token)) info = symbol_info[sym];
@@ -171,6 +186,7 @@ int main(int argc, array(string) argv)
     out->write("static %s (*vec_%s)%s;\n"
 	       "%s %s%s\n"
 	       "{\n"
+	       // FIXME: Code to resolve the symbol here.
 	       "  %svec_%s(",
 	       rettype, sym, params,
 	       rettype, sym, params,
@@ -178,6 +194,8 @@ int main(int argc, array(string) argv)
     
     array(array(Parser.C.Token)) args = info[1][1..sizeof(info[1])-2]/({","});
     foreach(args; int n; array(Parser.C.Token) arg) {
+      if (sizeof(arg) == 1) continue;	// probable void.
+
       array(Parser.C.Token)|Parser.C.Token name = arg[-1];
       if (arrayp(name)) {
 	if (name[0]->text == "(") {