bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: make bug with ONESHELL and SHELLFLAGS


From: michael_rytting
Subject: RE: make bug with ONESHELL and SHELLFLAGS
Date: Thu, 22 Dec 2011 15:01:29 -0700

Since I build make myself I went ahead and applied this patch and it works 
great.  I'll let you guys decide if this should go into the official release, 
but we are happy.

-Mike

-----Original Message-----
From: David Boyce [mailto:address@hidden 
Sent: Thursday, December 22, 2011 2:43 PM
To: RYTTING,MICHAEL (A-ColSprings,ex1)
Cc: address@hidden
Subject: Re: make bug with ONESHELL and SHELLFLAGS

I believe the patch below would fix this. It's up to Paul of course whether he 
considers it a bug and considers the patch worthy. The only concern I have with 
it is that there may be places where the argv is assumed to be exactly 4 slots 
wide (shell, flags, recipe, null) and only the first 3 slots are freed, but I 
couldn't find any. Also this over-allocates new_argv a bit in the cause of 
simplicity.

-David Boyce

Index: job.c
===================================================================
RCS file: /sources/make/make/job.c,v
retrieving revision 1.215
diff -u -r1.215 job.c
--- job.c       15 Nov 2011 21:12:54 -0000      1.215
+++ job.c       22 Dec 2011 21:31:48 -0000
@@ -2960,12 +2960,21 @@
             *t = '\0';
           }

-       new_argv = xmalloc (4 * sizeof (char *));
-       new_argv[0] = xstrdup(shell);
-       new_argv[1] = xstrdup(shellflags ? shellflags : "");
-       new_argv[2] = line;
-       new_argv[3] = NULL;
-       return new_argv;
+       {
+         char *sfcopy;
+         char *sftok;
+         int n = 0;
+
+         sfcopy = xstrdup(shellflags ? shellflags : "");
+         new_argv = xmalloc ((4 + sflags_len/2) * sizeof (char *));
+         new_argv[n++] = xstrdup(shell);
+         for (sftok = strtok(sfcopy, " "); sftok; sftok = strtok(NULL, " "))
+           new_argv[n++] = xstrdup(sftok);
+         new_argv[n++] = line;
+         new_argv[n] = NULL;
+         free(sfcopy);
+         return new_argv;
+       }
       }

     new_line = alloca ((shell_len*2) + 1 + sflags_len + 1

On Thu, Dec 22, 2011 at 12:30 PM,  <address@hidden> wrote:
> Sorry if this has already been reported but I haven't found anything 
> searching through the archives.
>
>
>
> SHELL = /bin/bash
>
> .SHELLFLAGS = -e -o pipefail -c
>
>
>
> Works
>
>
>
> .ONESHELL:
>
> SHELL = /bin/bash
>
> .SHELLFLAGS = -e -o pipefail -c
>
>
>
> Doesn't
>
>
>
> When the ONESHELL target is set .SHELLFLAGS must be set to a single 
> value, i.e. -ec.
>
>
>
> I am using
>
>
>
> Michael Rytting
>
> Agilent Technologies
>
> address@hidden
>
> 719-590-3708
>
>
>
>
> _______________________________________________
> Bug-make mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/bug-make
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]