ccache: applied a number of patches from the ccache-win32 issue tracker
[msysgit.git] / src / ccache-win32 / patches / 0003-One-extra-execv-spawnv-called-if-invoked-as-ccache-i.patch
blob4f0de9c745479b29395203ff39c33070c9b8b269
1 From 5ba2b678af30b8b9693704734c398132af6caf32 Mon Sep 17 00:00:00 2001
2 From: Jie Meng <zuxy.meng@gmail.com>
3 Date: Mon, 9 Feb 2009 09:00:00 +0000
4 Subject: [PATCH] One extra execv/spawnv called if invoked as "ccache" instead
5 of "ccache.exe"
7 The situation could be improved if we define "ccache" as MYNAME2 and
8 accept it as a valid base name.
10 Signed-off-by: Jie Meng <zuxy.meng@gmail.com>
11 Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
12 ---
13 ccache.c | 26 +++++++++++++++++---------
14 ccache.h | 1 +
15 2 files changed, 18 insertions(+), 9 deletions(-)
17 diff --git a/ccache.c b/ccache.c
18 index 93b65bd..780310f 100644
19 --- a/ccache.c
20 +++ b/ccache.c
21 @@ -93,6 +93,7 @@ static struct {
22 static void failed(void)
24 char *e;
25 + int ret;
27 /* delete intermediate pre-processor file if needed */
28 if (i_tmpfile) {
29 @@ -115,17 +116,21 @@ static void failed(void)
31 if ((e=getenv("CCACHE_PREFIX"))) {
32 char *p = find_executable(e, MYNAME);
33 - if (!p) {
34 + if (!p && !(p = find_executable(e, MYNAME2))) {
35 perror(e);
36 exit(1);
38 args_add_prefix(orig_args, p);
41 - execv(orig_args->argv[0], orig_args->argv);
42 - cc_log("execv returned (%s)!\n", strerror(errno));
43 - perror(orig_args->argv[0]);
44 - exit(1);
45 + _flushall();
46 + errno = 0;
47 + ret = spawnv(_P_WAIT, orig_args->argv[0], (const char* const*)orig_args->argv);
48 + if (errno) {
49 + cc_log("execv returned (%s)!\n", strerror(errno));
50 + perror(orig_args->argv[0]);
51 + }
52 + exit(ret);
56 @@ -577,7 +582,7 @@ static void find_compiler(int argc, char **argv)
57 base = str_basename(argv[0]);
59 /* we might be being invoked like "ccache gcc -c foo.c" */
60 - if (strcmp(base, MYNAME) == 0) {
61 + if (strcmp(base, MYNAME) == 0 || strcmp(base, MYNAME2) == 0) {
62 args_remove_first(orig_args);
63 free(base);
64 // if (strchr(argv[1],'/')) {
65 @@ -593,7 +598,8 @@ static void find_compiler(int argc, char **argv)
66 base = strdup(path);
69 - orig_args->argv[0] = find_executable(base, MYNAME);
70 + if (!(orig_args->argv[0] = find_executable(base, MYNAME)))
71 + orig_args->argv[0] = find_executable(base, MYNAME2);
73 /* can't find the compiler! */
74 if (!orig_args->argv[0]) {
75 @@ -839,7 +845,7 @@ static void process_args(int argc, char **argv)
77 if ((e=getenv("CCACHE_PREFIX"))) {
78 char *p = find_executable(e, MYNAME);
79 - if (!p) {
80 + if (!p && !(p = find_executable(e, MYNAME2))) {
81 perror(e);
82 exit(1);
84 @@ -1026,7 +1032,9 @@ int main(int argc, char *argv[])
86 /* check if we are being invoked as "ccache" */
87 if (strlen(argv[0]) >= strlen(MYNAME) &&
88 - strcmp(argv[0] + strlen(argv[0]) - strlen(MYNAME), MYNAME) == 0) {
89 + strcmp(argv[0] + strlen(argv[0]) - strlen(MYNAME), MYNAME) == 0 ||
90 + strlen(argv[0]) >= strlen(MYNAME2) &&
91 + strcmp(argv[0] + strlen(argv[0]) - strlen(MYNAME2), MYNAME2) == 0) {
92 if (argc < 2) {
93 usage();
94 exit(1);
95 diff --git a/ccache.h b/ccache.h
96 index e65888d..588848f 100644
97 --- a/ccache.h
98 +++ b/ccache.h
99 @@ -37,6 +37,7 @@
101 #ifdef _WIN32
102 #define MYNAME "ccache.exe"
103 + #define MYNAME2 "ccache"
104 #else
105 #define MYNAME "ccache"
106 #endif
108 1.8.1.msysgit.1