diff --git a/tools/winebuild/build.h b/tools/winebuild/build.h index adcbed34f84..272f38efe15 100644 --- a/tools/winebuild/build.h +++ b/tools/winebuild/build.h @@ -207,24 +207,20 @@ extern void output_resources( FILE *outfile, DLLSPEC *spec ); extern void load_res16_file( const char *name, DLLSPEC *spec ); extern void output_res16_data( FILE *outfile, DLLSPEC *spec ); extern void output_res16_directory( FILE *outfile, DLLSPEC *spec, const char *header_name ); -extern void output_dll_init( FILE *outfile, const char *constructor, const char *destructor ); extern void BuildRelays16( FILE *outfile ); extern void BuildRelays32( FILE *outfile ); extern void BuildSpec16File( FILE *outfile, DLLSPEC *spec ); extern void BuildSpec32File( FILE *outfile, DLLSPEC *spec ); extern void BuildDef32File( FILE *outfile, DLLSPEC *spec ); -extern void BuildDebugFile( FILE *outfile, const char *srcdir, char **argv ); extern int parse_spec_file( FILE *file, DLLSPEC *spec ); extern int parse_def_file( FILE *file, DLLSPEC *spec ); -extern int parse_debug_channels( const char *srcdir, const char *filename ); /* global variables */ extern int current_line; extern int UsePIC; -extern int nb_debug_channels; extern int nb_lib_paths; extern int nb_errors; extern int display_warnings; @@ -235,7 +231,6 @@ extern int save_temps; extern char *input_file_name; extern char *spec_file_name; extern const char *output_file_name; -extern char **debug_channels; extern char **lib_path; extern char *as_command; diff --git a/tools/winebuild/main.c b/tools/winebuild/main.c index 9c75b51f0bb..98da64376fd 100644 --- a/tools/winebuild/main.c +++ b/tools/winebuild/main.c @@ -41,7 +41,6 @@ #include "build.h" int UsePIC = 0; -int nb_debug_channels = 0; int nb_lib_paths = 0; int nb_errors = 0; int display_warnings = 0; @@ -73,7 +72,6 @@ enum target_platform target_platform = PLATFORM_WINDOWS; enum target_platform target_platform = PLATFORM_UNSPECIFIED; #endif -char **debug_channels = NULL; char **lib_path = NULL; char *input_file_name = NULL; @@ -86,7 +84,6 @@ char *ld_command = NULL; char *nm_command = NULL; static FILE *output_file; -static const char *current_src_dir; static int nb_res_files; static char **res_files; @@ -97,7 +94,6 @@ enum exec_mode_values MODE_DLL, MODE_EXE, MODE_DEF, - MODE_DEBUG, MODE_RELAY16, MODE_RELAY32 }; @@ -248,7 +244,6 @@ static const char usage_str[] = "Usage: winebuild [OPTIONS] [FILES]\n\n" "Options:\n" " --as-cmd=AS Command to use for assembling (default: as)\n" -" -C, --source-dir=DIR Look for source files in DIR\n" " -d, --delay-lib=LIB Import the specified library in delayed mode\n" " -D SYM Ignored for C flags compatibility\n" " -E, --export=FILE Export the symbols defined in the .spec or .def file\n" @@ -280,7 +275,6 @@ static const char usage_str[] = " --dll Build a .c file from a .spec or .def file\n" " --def Build a .def file from a .spec file\n" " --exe Build a .c file for an executable\n" -" --debug [FILES] Build a .c file with the debug channels declarations\n" " --relay16 Build the 16-bit relay assembly routines\n" " --relay32 Build the 32-bit relay assembly routines\n\n" "The mode options are mutually exclusive; you must specify one and only one.\n\n"; @@ -290,7 +284,6 @@ enum long_options_values LONG_OPT_DLL = 1, LONG_OPT_DEF, LONG_OPT_EXE, - LONG_OPT_DEBUG, LONG_OPT_ASCMD, LONG_OPT_LDCMD, LONG_OPT_NMCMD, @@ -309,7 +302,6 @@ static const struct option long_options[] = { "dll", 0, 0, LONG_OPT_DLL }, { "def", 0, 0, LONG_OPT_DEF }, { "exe", 0, 0, LONG_OPT_EXE }, - { "debug", 0, 0, LONG_OPT_DEBUG }, { "as-cmd", 1, 0, LONG_OPT_ASCMD }, { "ld-cmd", 1, 0, LONG_OPT_LDCMD }, { "nm-cmd", 1, 0, LONG_OPT_NMCMD }, @@ -320,7 +312,6 @@ static const struct option long_options[] = { "target", 1, 0, LONG_OPT_TARGET }, { "version", 0, 0, LONG_OPT_VERSION }, /* aliases for short options */ - { "source-dir", 1, 0, 'C' }, { "delay-lib", 1, 0, 'd' }, { "export", 1, 0, 'E' }, { "entry", 1, 0, 'e' }, @@ -363,9 +354,6 @@ static char **parse_options( int argc, char **argv, DLLSPEC *spec ) { switch(optc) { - case 'C': - current_src_dir = optarg; - break; case 'D': /* ignored */ break; @@ -475,9 +463,6 @@ static char **parse_options( int argc, char **argv, DLLSPEC *spec ) set_exec_mode( MODE_EXE ); if (!spec->subsystem) spec->subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI; break; - case LONG_OPT_DEBUG: - set_exec_mode( MODE_DEBUG ); - break; case LONG_OPT_ASCMD: as_command = xstrdup( optarg ); break; @@ -632,9 +617,6 @@ int main(int argc, char **argv) if (!parse_input_file( spec )) break; BuildDef32File( output_file, spec ); break; - case MODE_DEBUG: - BuildDebugFile( output_file, current_src_dir, argv ); - break; case MODE_RELAY16: if (argv[0]) fatal_error( "file argument '%s' not allowed in this mode\n", argv[0] ); BuildRelays16( output_file ); diff --git a/tools/winebuild/parser.c b/tools/winebuild/parser.c index 3cf3722cf41..00f1f4d86f0 100644 --- a/tools/winebuild/parser.c +++ b/tools/winebuild/parser.c @@ -967,80 +967,3 @@ int parse_def_file( FILE *file, DLLSPEC *spec ) assign_ordinals( spec ); return !nb_errors; } - - -/******************************************************************* - * add_debug_channel - */ -static void add_debug_channel( const char *name ) -{ - int i; - - for (i = 0; i < nb_debug_channels; i++) - if (!strcmp( debug_channels[i], name )) return; - - debug_channels = xrealloc( debug_channels, (nb_debug_channels + 1) * sizeof(*debug_channels)); - debug_channels[nb_debug_channels++] = xstrdup(name); -} - - -/******************************************************************* - * parse_debug_channels - * - * Parse a source file and extract the debug channel definitions. - */ -int parse_debug_channels( const char *srcdir, const char *filename ) -{ - FILE *file; - int eol_seen = 1; - - file = open_input_file( srcdir, filename ); - while (fgets( ParseBuffer, sizeof(ParseBuffer), file )) - { - char *channel, *end, *p = ParseBuffer; - - p = ParseBuffer + strlen(ParseBuffer) - 1; - if (!eol_seen) /* continuation line */ - { - eol_seen = (*p == '\n'); - continue; - } - if ((eol_seen = (*p == '\n'))) *p = 0; - - p = ParseBuffer; - while (isspace(*p)) p++; - if (!memcmp( p, "WINE_DECLARE_DEBUG_CHANNEL", 26 ) || - !memcmp( p, "WINE_DEFAULT_DEBUG_CHANNEL", 26 )) - { - p += 26; - while (isspace(*p)) p++; - if (*p != '(') - { - error( "invalid debug channel specification '%s'\n", ParseBuffer ); - goto next; - } - p++; - while (isspace(*p)) p++; - if (!isalpha(*p)) - { - error( "invalid debug channel specification '%s'\n", ParseBuffer ); - goto next; - } - channel = p; - while (isalnum(*p) || *p == '_') p++; - end = p; - while (isspace(*p)) p++; - if (*p != ')') - { - error( "invalid debug channel specification '%s'\n", ParseBuffer ); - goto next; - } - *end = 0; - add_debug_channel( channel ); - } - next: - current_line++; - } - close_input_file( file ); - return !nb_errors; -} diff --git a/tools/winebuild/spec32.c b/tools/winebuild/spec32.c index 686207f1f6b..041cd5748cf 100644 --- a/tools/winebuild/spec32.c +++ b/tools/winebuild/spec32.c @@ -36,46 +36,6 @@ #include "build.h" -static int string_compare( const void *ptr1, const void *ptr2 ) -{ - const char * const *str1 = ptr1; - const char * const *str2 = ptr2; - return strcmp( *str1, *str2 ); -} - - -/******************************************************************* - * output_debug - * - * Output the debug channels. - */ -static int output_debug( FILE *outfile ) -{ - int i; - - if (!nb_debug_channels) return 0; - qsort( debug_channels, nb_debug_channels, sizeof(debug_channels[0]), string_compare ); - - fprintf( outfile, "#include \"wine/debug.h\"\n\n" ); - - for (i = 0; i < nb_debug_channels; i++) - fprintf( outfile, "struct __wine_debug_channel __wine_dbch_%s = { 3, \"%s\" };\n", - debug_channels[i], debug_channels[i] ); - - fprintf( outfile, "\nstatic struct __wine_debug_channel * const debug_channels[%d] =\n{\n", - nb_debug_channels ); - for (i = 0; i < nb_debug_channels; i++) - { - fprintf( outfile, " &__wine_dbch_%s", debug_channels[i] ); - if (i < nb_debug_channels - 1) fprintf( outfile, ",\n" ); - } - fprintf( outfile, "\n};\n\n" ); - fprintf( outfile, "static void *debug_registration;\n\n" ); - - return nb_debug_channels; -} - - /******************************************************************* * output_exports * @@ -253,96 +213,6 @@ static void output_exports( FILE *outfile, DLLSPEC *spec ) } -/******************************************************************* - * output_dll_init - * - * Output code for calling a dll constructor and destructor. - */ -void output_dll_init( FILE *outfile, const char *constructor, const char *destructor ) -{ - if (target_platform == PLATFORM_APPLE) - { - /* Mach-O doesn't have an init section */ - if (constructor) - { - fprintf( outfile, "asm(\"\\t.mod_init_func\\n\"\n" ); - fprintf( outfile, " \"\\t.align 2\\n\"\n" ); - fprintf( outfile, " \"\\t.long %s\\n\"\n", asm_name(constructor) ); - fprintf( outfile, " \"\\t.text\\n\");\n" ); - } - if (destructor) - { - fprintf( outfile, "asm(\"\\t.mod_term_func\\n\"\n" ); - fprintf( outfile, " \"\\t.align 2\\n\"\n" ); - fprintf( outfile, " \"\\t.long %s\\n\"\n", asm_name(destructor) ); - fprintf( outfile, " \"\\t.text\\n\");\n" ); - } - } - else switch(target_cpu) - { - case CPU_x86: - case CPU_x86_64: - if (constructor) - { - fprintf( outfile, "asm(\"\\t.section\\t\\\".init\\\" ,\\\"ax\\\"\\n\"\n" ); - fprintf( outfile, " \"\\tcall %s\\n\"\n", asm_name(constructor) ); - fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" ); - } - if (destructor) - { - fprintf( outfile, "asm(\"\\t.section\\t\\\".fini\\\" ,\\\"ax\\\"\\n\"\n" ); - fprintf( outfile, " \"\\tcall %s\\n\"\n", asm_name(destructor) ); - fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" ); - } - break; - case CPU_SPARC: - if (constructor) - { - fprintf( outfile, "asm(\"\\t.section\\t\\\".init\\\" ,\\\"ax\\\"\\n\"\n" ); - fprintf( outfile, " \"\\tcall %s\\n\"\n", asm_name(constructor) ); - fprintf( outfile, " \"\\tnop\\n\"\n" ); - fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" ); - } - if (destructor) - { - fprintf( outfile, "asm(\"\\t.section\\t\\\".fini\\\" ,\\\"ax\\\"\\n\"\n" ); - fprintf( outfile, " \"\\tcall %s\\n\"\n", asm_name(destructor) ); - fprintf( outfile, " \"\\tnop\\n\"\n" ); - fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" ); - } - break; - case CPU_ALPHA: - if (constructor) - { - fprintf( outfile, "asm(\"\\t.section\\t\\\".init\\\" ,\\\"ax\\\"\\n\"\n" ); - fprintf( outfile, " \"\\tjsr $26,%s\\n\"\n", asm_name(constructor) ); - fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" ); - } - if (destructor) - { - fprintf( outfile, "asm(\"\\t.section\\t\\\".fini\\\" ,\\\"ax\\\"\\n\"\n" ); - fprintf( outfile, " \"\\tjsr $26,%s\\n\"\n", asm_name(destructor) ); - fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" ); - } - break; - case CPU_POWERPC: - if (constructor) - { - fprintf( outfile, "asm(\"\\t.section\\t\\\".init\\\" ,\\\"ax\\\"\\n\"\n" ); - fprintf( outfile, " \"\\tbl %s\\n\"\n", asm_name(constructor) ); - fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" ); - } - if (destructor) - { - fprintf( outfile, "asm(\"\\t.section\\t\\\".fini\\\" ,\\\"ax\\\"\\n\"\n" ); - fprintf( outfile, " \"\\tbl %s\\n\"\n", asm_name(destructor) ); - fprintf( outfile, " \"\\t.section\\t\\\".text\\\"\\n\");\n" ); - } - break; - } -} - - /******************************************************************* * output_asm_constructor * @@ -597,70 +467,3 @@ void BuildDef32File( FILE *outfile, DLLSPEC *spec ) } if (!total) warning( "%s: Import library doesn't export anything\n", spec->file_name ); } - - -/******************************************************************* - * BuildDebugFile - * - * Build the debugging channels source file. - */ -void BuildDebugFile( FILE *outfile, const char *srcdir, char **argv ) -{ - int nr_debug; - char *prefix, *p, *constructor, *destructor; - - while (*argv) - { - if (!parse_debug_channels( srcdir, *argv++ )) exit(1); - } - - output_standard_file_header( outfile ); - nr_debug = output_debug( outfile ); - if (!nr_debug) - { - fprintf( outfile, "/* no debug channels found for this module */\n" ); - return; - } - - if (output_file_name) - { - if ((p = strrchr( output_file_name, '/' ))) p++; - prefix = xstrdup( p ? p : output_file_name ); - if ((p = strchr( prefix, '.' ))) *p = 0; - strcpy( p, make_c_identifier(p) ); - } - else prefix = xstrdup( "_" ); - - /* Output the DLL constructor */ - - constructor = xmalloc( strlen(prefix) + 17 ); - destructor = xmalloc( strlen(prefix) + 17 ); - sprintf( constructor, "__wine_dbg_%s_init", prefix ); - sprintf( destructor, "__wine_dbg_%s_fini", prefix ); - fprintf( outfile, - "#ifdef __GNUC__\n" - "void %s(void) __attribute__((constructor));\n" - "void %s(void) __attribute__((destructor));\n" - "#else\n" - "static void __asm__dummy_dll_init(void) {\n", - constructor, destructor ); - output_dll_init( outfile, constructor, destructor ); - fprintf( outfile, "}\n#endif /* defined(__GNUC__) */\n\n" ); - - fprintf( outfile, - "void %s(void)\n" - "{\n" - " extern void *__wine_dbg_register( struct __wine_debug_channel * const *, int );\n" - " if (!debug_registration) debug_registration = __wine_dbg_register( debug_channels, %d );\n" - "}\n\n", constructor, nr_debug ); - fprintf( outfile, - "void %s(void)\n" - "{\n" - " extern void __wine_dbg_unregister( void* );\n" - " __wine_dbg_unregister( debug_registration );\n" - "}\n", destructor ); - - free( constructor ); - free( destructor ); - free( prefix ); -} diff --git a/tools/winebuild/winebuild.man.in b/tools/winebuild/winebuild.man.in index 5bd6b8248ea..2b277eb6397 100644 --- a/tools/winebuild/winebuild.man.in +++ b/tools/winebuild/winebuild.man.in @@ -6,9 +6,8 @@ winebuild \- Wine dll builder .BI winebuild\ [options]\ [input\ files] .SH DESCRIPTION .B winebuild -generates the C and assembly files that are necessary to build a Wine -dll, which is basically a Win32 dll encapsulated inside a Unix -library. +generates the assembly files that are necessary to build a Wine dll, +which is basically a Win32 dll encapsulated inside a Unix library. .PP .B winebuild has different modes, depending on what kind of file it is asked to @@ -47,14 +46,6 @@ executable, and all the other object files must be listed as Build a .def file from a spec file. The .spec file is specified via the -E option. This is used when building dlls with a PE (Win32) compiler. .TP -.B \--debug -Build a C file containing the definitions for debugging channels. In -that mode the -.I input files -should be a list of C files to search for debug channel -definitions. The resulting C file must be compiled and linked with the -dll. -.TP .B \--relay16 Generate the assembly code for the 16-bit relay routines. This is for Wine internal usage only, you should never need to use this option. @@ -68,11 +59,6 @@ Wine internal usage only, you should never need to use this option. Specify the command to use to compile assembly files; the default is \fBas\fR. .TP -.BI \-C,\ --source-dir= directory -Change to the specified directory before reading source files. Only -meaningful in -.BR \--debug\ mode. -.TP .BI \-d,\ --delay-lib= name Set the delayed import mode for the specified library, which must be one of the libraries imported with the \fB-l\fR option. Delayed mode