Commit 76ac103b authored by Alexandre Julliard's avatar Alexandre Julliard

winebuild: Add support for generating import libs for 16-bit dlls.

parent 9d55475e
...@@ -657,7 +657,6 @@ int main(int argc, char **argv) ...@@ -657,7 +657,6 @@ int main(int argc, char **argv)
break; break;
case MODE_DEF: case MODE_DEF:
if (argv[0]) fatal_error( "file argument '%s' not allowed in this mode\n", argv[0] ); if (argv[0]) fatal_error( "file argument '%s' not allowed in this mode\n", argv[0] );
if (spec->type == SPEC_WIN16) fatal_error( "Cannot yet build .def file for 16-bit dlls\n" );
if (!spec_file_name) fatal_error( "missing .spec file\n" ); if (!spec_file_name) fatal_error( "missing .spec file\n" );
if (!parse_input_file( spec )) break; if (!parse_input_file( spec )) break;
BuildDef32File( spec ); BuildDef32File( spec );
......
...@@ -744,6 +744,13 @@ void add_16bit_exports( DLLSPEC *spec32, DLLSPEC *spec16 ) ...@@ -744,6 +744,13 @@ void add_16bit_exports( DLLSPEC *spec32, DLLSPEC *spec16 )
int i; int i;
ORDDEF *odp; ORDDEF *odp;
spec32->file_name = xstrdup( spec16->file_name );
if (spec16->characteristics & IMAGE_FILE_DLL)
{
spec32->characteristics = IMAGE_FILE_DLL;
spec32->init_func = xstrdup( "__wine_spec_dll_entry" );
}
/* add an export for the NE module */ /* add an export for the NE module */
odp = add_entry_point( spec32 ); odp = add_entry_point( spec32 );
......
...@@ -860,14 +860,6 @@ void output_spec16_file( DLLSPEC *spec16 ) ...@@ -860,14 +860,6 @@ void output_spec16_file( DLLSPEC *spec16 )
{ {
DLLSPEC *spec32 = alloc_dll_spec(); DLLSPEC *spec32 = alloc_dll_spec();
spec32->file_name = xstrdup( spec16->file_name );
if (spec16->characteristics & IMAGE_FILE_DLL)
{
spec32->characteristics = IMAGE_FILE_DLL;
spec32->init_func = xstrdup( "__wine_spec_dll_entry" );
}
resolve_imports( spec16 ); resolve_imports( spec16 );
add_16bit_exports( spec32, spec16 ); add_16bit_exports( spec32, spec16 );
......
...@@ -768,9 +768,17 @@ void output_fake_module( DLLSPEC *spec ) ...@@ -768,9 +768,17 @@ void output_fake_module( DLLSPEC *spec )
*/ */
void BuildDef32File( DLLSPEC *spec ) void BuildDef32File( DLLSPEC *spec )
{ {
DLLSPEC *spec32 = NULL;
const char *name; const char *name;
int i, total; int i, total;
if (spec->type == SPEC_WIN16)
{
spec32 = alloc_dll_spec();
add_16bit_exports( spec32, spec );
spec = spec32;
}
if (spec_file_name) if (spec_file_name)
output( "; File generated automatically from %s; do not edit!\n\n", output( "; File generated automatically from %s; do not edit!\n\n",
spec_file_name ); spec_file_name );
...@@ -835,4 +843,5 @@ void BuildDef32File( DLLSPEC *spec ) ...@@ -835,4 +843,5 @@ void BuildDef32File( DLLSPEC *spec )
output( "\n" ); output( "\n" );
} }
if (!total) warning( "%s: Import library doesn't export anything\n", spec->file_name ); if (!total) warning( "%s: Import library doesn't export anything\n", spec->file_name );
if (spec32) free_dll_spec( spec32 );
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment