make-w32
[Top][All Lists]
Advanced

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

Re: Fix for HAVE_DOS_PATHS build on cygwin


From: Christopher Faylor
Subject: Re: Fix for HAVE_DOS_PATHS build on cygwin
Date: Thu, 17 Aug 2006 11:42:04 -0400
User-agent: Mutt/1.5.11

On Thu, Aug 17, 2006 at 10:23:35AM -0400, Bill Hoffman wrote:
>At 11:40 PM 8/16/2006, Christopher Faylor wrote:
>>I don't understand why isn't this just using the UNIX-ish settings for
>>Cygwin.  The settings should, at the very least, be the same as the
>>UNIX-sh case.
>
>Because there was a bug where sh_chars_sh was being directly referenced if
>HAVE_DOS_PATHS was on.  I have a new patch.

Yes, I got that.  I didn't like the duplication of blocks of code,
especially since it changed one of the tables from what is currently
being used for Cygwin.

>diff -p make381orig/make-3.81/config.h.in make-3.81/config.h.in
>*** make381orig/make-3.81/config.h.in   Sat Apr  1 01:40:00 2006
>--- make-3.81/config.h.in       Wed Aug 16 16:31:10 2006
>***************
>*** 75,80 ****
>--- 75,84 ----
>
>  /* Use platform specific coding */
>  #undef HAVE_DOS_PATHS
>+ #ifdef __CYGWIN__
>+ #define HAVE_DOS_PATHS 1
>+ #endif
>+
>
>  /* Define to 1 if you have the `dup2' function. */
>  #undef HAVE_DUP2
>
>diff -p make381orig/make-3.81/job.c make-3.81/job.c
>*** make381orig/make-3.81/job.c Sun Mar 19 22:03:04 2006
>--- make-3.81/job.c     Thu Aug 17 10:06:24 2006
>*************** construct_command_argv_internal (char *l
>*** 2521,2527 ****
>  #endif
>                    if (p[1] != '\\' && p[1] != '\''
>                        && !isspace ((unsigned char)p[1])
>!                       && strchr (sh_chars_sh, p[1]) == 0)
>                      /* back up one notch, to copy the backslash */
>                      --p;
>  #endif  /* HAVE_DOS_PATHS */
>--- 2521,2527 ----
>  #endif
>                    if (p[1] != '\\' && p[1] != '\''
>                        && !isspace ((unsigned char)p[1])
>!                       && strchr (sh_chars, p[1]) == 0)
>                      /* back up one notch, to copy the backslash */
>                      --p;

I don't think this is right.  The comment above this line refers to operations
on "Unixy shells".  I think that just adding something like:

#ifdef HAVE_DOS_PATHS
static const char *sh_chars_sh = sh_chars;
#endif

in the "#else /* must be UNIX-ish */" clause would probably handle this.

>  #endif  /* HAVE_DOS_PATHS */
>diff -p make381orig/make-3.81/make.h make-3.81/make.h
>*** make381orig/make-3.81/make.h        Wed Feb 15 18:54:43 2006
>--- make-3.81/make.h    Thu Aug 17 10:10:39 2006
>*************** extern int strcmpi (const char *,const c
>*** 347,353 ****
>  #define S_(msg1,msg2,num)   ngettext (msg1,msg2,num)
>
>  /* Handle other OSs.  */
>! #if defined(HAVE_DOS_PATHS)
>  # define PATH_SEPARATOR_CHAR ';'
>  #elif defined(VMS)
>  # define PATH_SEPARATOR_CHAR ','
>--- 347,353 ----
>  #define S_(msg1,msg2,num)   ngettext (msg1,msg2,num)
>
>  /* Handle other OSs.  */
>! #if defined(HAVE_DOS_PATHS) && !defined(__CYGWIN__)
>  # define PATH_SEPARATOR_CHAR ';'
>  #elif defined(VMS)
>  # define PATH_SEPARATOR_CHAR ','

This is probably too big a change for this particular problem (and maybe
it's already been discussed to death) but I don't see why this setting
couldn't be in configure.in, too.  Then MinGW could set
PATH_SEPARATOR_CHAR to ';', VMS could set it to ',' (shouldn't that be
'.'?), and Cygwin and every other "UNIX system" could just use the default.

cgf




reply via email to

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