winewrap: output to different dir
Dimitrie O. Paun
dpaun at rogers.com
Tue Dec 31 02:26:41 CST 2002
Relative to the C++ support one.
ChangeLog
Support outputing files to a different directory than pwd.
Small cleanups.
--- tools/winewrap.c.A1 2002-12-31 01:07:11.000000000 -0500
+++ tools/winewrap.c 2002-12-31 03:20:33.000000000 -0500
@@ -302,7 +302,8 @@
char *p;
va_list ap;
- if ((p = malloc (size)) == NULL) return NULL;
+ if ((p = malloc (size)) == NULL)
+ error("Can not malloc %d bytes.", size);
while (1)
{
@@ -311,7 +312,8 @@
va_end(ap);
if (n > -1 && n < size) return p;
size *= 2;
- if ((p = realloc (p, size)) == NULL) return NULL;
+ if ((p = realloc (p, size)) == NULL)
+ error("Can not realloc %d bytes.", size);
}
}
@@ -428,9 +430,9 @@
int main(int argc, char **argv)
{
- 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 *library = 0, *path = 0;
+ int i, j, len, cpp = 0, no_opt = 0, gui_mode = 0, create_wrapper = 1;
+ char *base_name, *base_file, *app_temp_name, *wrp_temp_name;
char *spec_name, *spec_c_name, *spec_o_name;
char *wspec_name, *wspec_c_name, *wspec_o_name;
char *wrap_c_name, *wrap_o_name;
@@ -453,8 +455,6 @@
if (argv[i][2]) output_name = strdup(argv[i]+ 2);
else if (i + 1 < argc) output_name = strdup(argv[++i]);
else error("The -o switch takes an argument.");
- if ( !(p = strstr(output_name, ".exe")) || *(p+4) )
- output_name = strmake("%s.exe", output_name);
break;
case 'L':
if (argv[i][2]) path = argv[i] + 2;
@@ -505,9 +505,16 @@
app_temp_name = tempnam(0, "wapp");
wrp_temp_name = tempnam(0, "wwrp");
-
- base_name = strdup(output_name);
- base_name[strlen(output_name) - 4 ] = 0; /* remove the .exe extension */
+
+ /* get base filename by removing the .exe extension, if present */
+ base_file = strdup(output_name);
+ len = strlen(base_file);
+ if (len > 4 && strcmp(base_file + len - 4, ".exe") == 0)
+ base_file[len - 4 ] = 0; /* remove the .exe extension */
+
+ /* we need to get rid of the directory part to get the base name */
+ if ( (base_name = strrchr(base_file, '/')) ) base_name++;
+ else base_name = base_file;
spec_name = strmake("%s.spec", app_temp_name);;
spec_c_name = strmake("%s.c", spec_name);
@@ -536,12 +543,11 @@
else
{
spec_args[j++] = "--exe";
- spec_args[j++] = output_name;
+ spec_args[j++] = strmake("%s.exe", base_name);
spec_args[j++] = gui_mode ? "-mgui" : "-mcui";
}
for (i = 0; i < nb_obj_files; i++)
spec_args[j++] = obj_files[i];
- spec_args[j++] = "-L" WINEDLLS;
for (i = 0; i < nb_dll_files; i++)
spec_args[j++] = dll_files[i];
spec_args[j] = 0;
@@ -568,7 +574,7 @@
link_args[j++] = "-lwine";
link_args[j++] = "-lm";
link_args[j++] = "-o";
- link_args[j++] = strmake("%s.%s.so", base_name, create_wrapper ? "dll" : "exe");
+ link_args[j++] = strmake("%s.%s.so", base_file, create_wrapper ? "dll" : "exe");
link_args[j++] = spec_o_name;
for (i = 0; i < nb_obj_files; i++)
if (!is_resource(obj_files[i])) link_args[j++] = obj_files[i];
@@ -587,13 +593,13 @@
wwrap_args[j] = 0;
/* build wrapper winebuild's argument list */
- wspec_args = malloc( 20 * sizeof (char *) );
+ wspec_args = malloc( (nb_lib_files + nb_dll_files + 20) * sizeof (char *) );
j = 0;
wspec_args[j++] = BINDIR "/winebuild";
wspec_args[j++] = "-o";
wspec_args[j++] = wspec_c_name;
wspec_args[j++] = "--exe";
- wspec_args[j++] = output_name;
+ wspec_args[j++] = strmake("%s.exe", base_name);
wspec_args[j++] = gui_mode ? "-mgui" : "-mcui";
wspec_args[j++] = wrap_o_name;
for (i = 0; i < nb_dll_files; i++)
@@ -620,7 +626,7 @@
wlink_args[j++] = "-lwine";
wlink_args[j++] = "-ldl";
wlink_args[j++] = "-o";
- wlink_args[j++] = strmake("%s.exe.so", base_name);
+ wlink_args[j++] = strmake("%s.exe.so", base_file);
wlink_args[j++] = wspec_o_name;
wlink_args[j++] = wrap_o_name;
wlink_args[j] = 0;
@@ -656,7 +662,7 @@
}
/* create the loader script */
- create_file(base_name, app_loader_script, base_name);
+ create_file(base_file, 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