Changed the Win32 dll descriptor to be in IMAGE_NT_HEADERS format.
Generate the import table directly in PE format.
Added gui/cuiexe_no_main modes in EXE spec files, and use this for the
main wine binary.

diff --git a/tools/winebuild/import.c b/tools/winebuild/import.c
new file mode 100644
index 0000000..e27fe47
--- /dev/null
+++ b/tools/winebuild/import.c
@@ -0,0 +1,114 @@
+/*
+ * DLL imports support
+ *
+ * Copyright 2000 Alexandre Julliard
+ */
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "winnt.h"
+#include "build.h"
+
+struct import
+{
+    char        *dll;         /* dll name */
+    char       **imports;     /* functions we want to import from this dll */
+    int          nb_imports;  /* number of imported functions */
+};
+
+
+static struct import **dll_imports = NULL;
+static int nb_imports = 0;  /* number of imported dlls */
+static int total_imports = 0;  /* total number of imported functions */
+
+
+/* add a dll to the list of imports */
+void add_import_dll( const char *name )
+{
+    struct import *imp = xmalloc( sizeof(*imp) );
+    imp->dll        = xstrdup( name );
+    imp->imports    = NULL;
+    imp->nb_imports = 0;
+
+    dll_imports = xrealloc( dll_imports, (nb_imports+1) * sizeof(*dll_imports) );
+    dll_imports[nb_imports++] = imp;
+}
+
+#ifdef notyet
+/* add a function to the list of imports from a given dll */
+static void add_import_func( struct import *imp, const char *name )
+{
+    imp->imports = xrealloc( imp->imports, (imp->nb_imports+1) * sizeof(*imp->imports) );
+    imp->imports[imp->nb_imports++] = xstrdup( name );
+    total_imports++;
+}
+#endif
+
+/* output the import table of a Win32 module */
+int output_imports( FILE *outfile )
+{
+    int i, j, pos;
+
+    if (!nb_imports) goto done;
+
+    /* main import header */
+
+    fprintf( outfile, "\n\n/* imports */\n\n" );
+    fprintf( outfile, "static struct {\n" );
+    fprintf( outfile, "  struct {\n" );
+    fprintf( outfile, "    void        *OriginalFirstThunk;\n" );
+    fprintf( outfile, "    unsigned int TimeDateStamp;\n" );
+    fprintf( outfile, "    unsigned int ForwarderChain;\n" );
+    fprintf( outfile, "    const char  *Name;\n" );
+    fprintf( outfile, "    void        *FirstThunk;\n" );
+    fprintf( outfile, "  } imp[%d];\n", nb_imports+1 );
+    fprintf( outfile, "  const char *data[%d];\n", total_imports + nb_imports );
+    fprintf( outfile, "} imports = {\n  {\n" );
+
+    /* list of dlls */
+
+    for (i = j = 0; i < nb_imports; i++)
+    {
+        fprintf( outfile, "    { 0, 0, 0, \"%s\", &imports.data[%d] },\n",
+                 dll_imports[i]->dll, j );
+        j += dll_imports[i]->nb_imports + 1;
+    }
+    fprintf( outfile, "    { 0, 0, 0, 0, 0 },\n" );
+    fprintf( outfile, "  },\n  {\n" );
+
+    /* list of imported functions */
+
+    for (i = 0; i < nb_imports; i++)
+    {
+        fprintf( outfile, "    /* %s */\n", dll_imports[i]->dll );
+        for (j = 0; j < dll_imports[i]->nb_imports; j++)
+            fprintf( outfile, "    \"\\0\\0%s\",\n", dll_imports[i]->imports[j] );
+        fprintf( outfile, "    0,\n" );
+    }
+    fprintf( outfile, "  }\n};\n\n" );
+
+    /* thunks for imported functions */
+
+    fprintf( outfile, "#ifndef __GNUC__\nstatic void __asm__dummy_import(void) {\n#endif\n\n" );
+    pos = 20 * (nb_imports + 1);  /* offset of imports.data from start of imports */
+    fprintf( outfile, "asm(\".align 4\");\n" );
+    for (i = 0; i < nb_imports; i++, pos += 4)
+    {
+        for (j = 0; j < dll_imports[i]->nb_imports; j++, pos += 4)
+        {
+            fprintf( outfile,
+                     "asm(\".type " PREFIX "%s,@function\\n\\t"
+                     ".globl " PREFIX "%s\\n"
+                     PREFIX "%s:\\tjmp *(imports+%d)\\n\\t"
+                     "movl %%esi,%%esi\");\n",
+                     dll_imports[i]->imports[j], dll_imports[i]->imports[j],
+                     dll_imports[i]->imports[j], pos );
+        }
+    }
+    fprintf( outfile, "#ifndef __GNUC__\n}\n#endif\n\n" );
+
+ done:
+    return nb_imports;
+}