winewrap: C++ support
Dimitrie O. Paun
dpaun at rogers.com
Tue Dec 31 00:12:37 CST 2002
Relative to the "winewrap: add wrapper support" patch.
ChangeLog
Support C++ linking with a new -C switch.
Modify the app launcher to pass all options but
--debugmsg and --dll to the app.
Link the wrapper against all of the app's libs.
Drop support for passing the dll names to the launcher.
--- tools/winewrap.c.A0 2002-12-29 02:25:40.000000000 -0500
+++ tools/winewrap.c 2002-12-29 11:54:37.000000000 -0500
@@ -41,7 +41,6 @@
"#!/bin/sh\n"
"\n"
"appname=\"%s\"\n"
- "dlls=\"%s\"\n"
"# determine the application directory\n"
"appdir=''\n"
"case \"$0\" in\n"
@@ -61,6 +60,22 @@
" ;;\n"
"esac\n"
"\n"
+ "while true; do\n"
+ " case \"$1\" in\n"
+ " --debugmsg)\n"
+ " debugmsg=\"$1 $2\"\n"
+ " shift; shift;\n"
+ " ;;\n"
+ " --dll)\n"
+ " dll=\"$1 $2\"\n"
+ " shift; shift;\n"
+ " ;;\n"
+ " *)\n"
+ " break\n"
+ " ;;\n"
+ " esac\n"
+ "done\n"
+ "\n"
"# figure out the full app path\n"
"if [ -n \"$appdir\" ]; then\n"
" apppath=\"$appdir/$appname.exe.so\"\n"
@@ -72,7 +87,7 @@
"if [ ! -x \"$WINELOADER\" ]; then WINELOADER=\"wine\"; fi\n"
"\n"
"# and try to start the app\n"
- "exec \"$WINELOADER\" \"$apppath\" \"$@\"\n"
+ "exec \"$WINELOADER\" $debugmsg $dll \"$apppath\" -- \"$@\"\n"
;
static const char *app_gui_spec =
@@ -413,8 +428,8 @@
int main(int argc, char **argv)
{
- char *library = 0, *path = 0, *dlls="", *p;
- int i, j, no_opt = 0, gui_mode = 0, create_wrapper = 1;
+ char *library = 0, *path = 0, *p;
+ int i, j, cpp = 0, no_opt = 0, gui_mode = 0, create_wrapper = 1;
char *base_name, *app_temp_name, *wrp_temp_name;
char *spec_name, *spec_c_name, *spec_o_name;
char *wspec_name, *wspec_c_name, *wspec_o_name;
@@ -465,8 +480,8 @@
printf("winewrap v0.31\n");
exit(0);
break;
- case 'W':
- /* ignore such options for now for gcc compatibility */
+ case 'C':
+ cpp = 1;
break;
case '-':
if (argv[i][2]) error("No long option supported.");
@@ -545,7 +560,7 @@
/* build ld's argument list */
link_args = malloc( (nb_obj_files + 20) * sizeof (char *) );
j = 0;
- link_args[j++] = "gcc";
+ link_args[j++] = cpp ? "g++" : "gcc";
link_args[j++] = "-shared";
link_args[j++] = "-Wl,-Bsymbolic,-z,defs";
for (i = 0; i < nb_lib_files; i++)
@@ -581,9 +596,8 @@
wspec_args[j++] = output_name;
wspec_args[j++] = gui_mode ? "-mgui" : "-mcui";
wspec_args[j++] = wrap_o_name;
- wspec_args[j++] = "-L" WINEDLLS;
- wspec_args[j++] = "-luser32";
- wspec_args[j++] = "-lkernel32";
+ for (i = 0; i < nb_dll_files; i++)
+ wspec_args[j++] = dll_files[i];
wspec_args[j] = 0;
/* build wrapper gcc's argument list */
@@ -600,7 +614,7 @@
/* build wrapper ld's argument list */
wlink_args = malloc( 20 * sizeof (char *) );
j = 0;
- wlink_args[j++] = "gcc";
+ wlink_args[j++] = cpp ? "g++" : "gcc";
wlink_args[j++] = "-shared";
wlink_args[j++] = "-Wl,-Bsymbolic,-z,defs";
wlink_args[j++] = "-lwine";
@@ -642,9 +656,7 @@
}
/* create the loader script */
- for (i = 0; i < nb_dll_files; i++)
- if (dll_files[i][1] == 'l') dlls = strmake(" %s %s", dlls, dll_files[i]);
- create_file(base_name, app_loader_script, base_name, dlls);
+ create_file(base_name, app_loader_script, base_name);
chmod(base_name, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH);
return 0;
--
Dimi.
More information about the wine-patches
mailing list