bug-make
[Top][All Lists]
Advanced

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

multi-line commands with quoted SHELL


From: Petr Machata
Subject: multi-line commands with quoted SHELL
Date: Thu, 22 Feb 2007 19:00:36 +0100
User-agent: Thunderbird 1.5.0.9 (X11/20070102)

Hi list!

There is a bug tracked in Red Hat bugzilla
        http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=219409

The problem is best demonstrated by this Makefile snippet:

all:;@echo e\
        cho

With this make invocation, it works as intended:

$ make 'SHELL=/bin/sh'
echo

But when the SHELL variable contains quotes, it fails:

$ make 'SHELL="/bin/sh"'
e
/bin/sh: line 1: cho: command not found
make: *** [all] Error 127

The problem is that when SHELL contains quotations etc., /bin/sh is invoked, and whole command is passed through that. But the outer shell then destroys the backslash-newline sequences. The solution is to singly-quote these. The attached patch against make 3.81 does this.

Testsuite passes.  Comments welcome.

Thanks,
PM
--- make-3.81-orig/job.c        2007-02-21 19:10:54.000000000 +0100
+++ make-3.81-pm/job.c  2007-02-22 18:13:59.000000000 +0100
@@ -2706,7 +2706,7 @@
     unsigned int line_len = strlen (line);
 
     char *new_line = (char *) alloca (shell_len + (sizeof (minus_c) - 1)
-                                     + (line_len * 2) + 1);
+                                     + (line_len * 4) + 1);
     char *command_ptr = NULL; /* used for batch_mode_shell mode */
 
 # ifdef __EMX__ /* is this necessary? */
@@ -2740,9 +2740,10 @@
 #endif
            if (PRESERVE_BSNL)
              {
-               *(ap++) = '\\';
+               *(ap++) = '\'';
                *(ap++) = '\\';
                *(ap++) = '\n';
+               *(ap++) = '\'';
              }
 
            ++p;

reply via email to

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