On 31/01/2015 16:15, Duncan Moore wrote:
On 31/01/2015 13:11, Duncan Moore wrote:
As to why \n is causing problems, I'm not sure. It looks like some weird
interaction between 'make' and 'printf'.

I'm wondering if it's due to 'make' calling exec() and then the argument
list being manipulated. I seem to recall that it quotes both " and '.
Maybe it's doing something with the \ of \n too, and that's messing
things up.


No, that's wrong. The problem is with 'make'.
This code is in job.c:

#elif defined (__riscos__)

char default_shell[] = "";
int batch_mode_shell = 0;

#else

It's not just in the RISC OS version, but in the GNU make version itself.
If I remove this code (so default_shell becomes "/bin/sh"), then everything works.
For example, this Makefile:

dir :
    @printf '$$(CC)   = $(CC)\\n'
    @printf "$$(CC)   = $(CC)\\n"
    @printf "$$(sfix) = $(sfix)\\n"

gives:

  *make
  $(CC)   = cc
  $(CC)   = cc
  $(sfix) = c:cc:h:hh:d:o:s:y:cxx:cpp:c++:f:for:fpp:i:ii

With the single quotes printf, the arguments to execvp() are:

  printf
  $(CC)   = cc\\n

With double quotes printf, the arguments to execvp() are:

  /bin/sh
  -c
  printf "$(CC)   = cc\\n"

It's any of the characters \$` within double quotes that cause /bin/sh to be used instead. What was happening before was that /bin/sh was missing, and -c was the first argument, causing the failure.

So we could remove the above code. But it must have been put in for a reason. Was it for efficiency? Maybe it was put in before changes were made to execvp() to handle /bin/sh -c. Maybe it is required by other RISC OS compilers? Does anyone have any ideas?

If there is some reason why the above code is needed in 'make', it's possible to modify job.c later on, so that double quotes are handled like single quotes. But the above change seems simpler.

Duncan

_______________________________________________
GCCSDK mailing list gcc@gccsdk.riscos.info
Bugzilla: http://www.riscos.info/bugzilla/index.cgi
List Info: http://www.riscos.info/mailman/listinfo/gcc
Main Page: http://www.riscos.info/index.php/GCCSDK

Reply via email to