[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: make 3.81rc1 / MSYS
From: |
Eli Zaretskii |
Subject: |
Re: make 3.81rc1 / MSYS |
Date: |
Sat, 25 Mar 2006 11:58:41 +0200 |
> From: David Ergo <address@hidden>
> Cc: address@hidden, Xavier Marichal <address@hidden>,
> =?ISO-8859-1?Q?S=E9bastien?= Frippiat <address@hidden>
> Date: Tue, 07 Mar 2006 09:28:46 +0100
>
> Ok, now I understand. But for MSYS, as it uses unix code, sh_chars_sh is
> not defined and the code doesn't compile, so maybe another solution is
> to define it at line 2310 (in the unix case) by something like this :
> ifdef __MSYS__
> char* sh_chars_sh = sh_chars;
> endif
> or still another solution, closer to other platforms: at line 2304
> define sh_chars_sh instead of sh_chars, and at line 2310, define
> char* sh_chars = sh_chars_sh;
Fixed with the patch below.
> > > Second one: the code is buggy even for other builds :
> > > Line 352 : check_lastslash = strchr (target, '/') == 0;
> > > So, check_lastslash is true if '/' is not found in target
> > > Line 354 : /* Didn't find it yet : check for DOS-type directories. */
> > > So we must check for DOS-type dirs if not found, so line 355 MUST be
> > > if (check_lastslash)
> > > i.e. if ('/' not found)
> >
> > Yes, you are right, sorry. I was looking at the wrong line when I
> > answered your original message.
> >
> > (Paul, this is the code you changed between beta4 and rc1.)
Paul fixed the inverted condition, I fixed it some more with the patch
below.
> > > MSYS has DOS and UNIX paths :
> > > c:\msys\bin, c:/msys/bin and /usr/local/bin are all valid paths under
> > > MSYS.
> >
> > Then why does the configure scripts says that DOS paths are not
> > supported on MSYS? Can you say what test there does the wrong thing
> > for MSYS?
>
> 'configure' just check for specific platforms to know if DOS paths are
> supported.
> file 'configure', just change line 8105 :
> #if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ &&
> !defined __EMX__
> into :
> #if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ &&
> !defined __EMX__ && !defined __MSYS__
Paul fixed this in config/dospaths.m4.
> > > I'm not sure about what is buggy, all I can tell is that if make is
> > > compiled with MSYS realpath then the test 'functions/realpath' in the
> > > tests/ subdir fails at line 19 where the test is :
> > > ifneq ($(realpath ///),/)
> > > $(error)
> > > endif
> > > I assume this means that realpath("///") should return "/", but it does
> > > not.
> >
> > Can you verify this with a simple test program? We need to know for
> > sure to modify the configure script.
>
> see simple test file in attachment :
> returns 0 if ok
> 1 if buggy
> [...]
> #include <limits.h>
> #include <stdlib.h>
>
> int main()
> {
> char resolved_path[PATH_MAX];
> if (realpath("///", resolved_path) && (strcmp(resolved_path, "/") == 0)) {
> return 0;
> } else {
> return 1;
> }
> }
Paul, this is still not fixed. How about adding the above test to
configure?
David, could you please see if make-3.81rc2 with the patch below
applied and HAVE_REALPATH undefined resolves your issues? Thanks.
2006-03-25 Eli Zaretskii <address@hidden>
* implicit.c (pattern_search) [HAVE_DOS_PATHS]: Don't compare b
with lastslash, since the latter points to filename, not to
target.
* job.c (construct_command_argv_internal) [HAVE_DOS_PATHS]:
Declare and define sh_chars_sh[].
--- implicit.c~ 2006-03-17 18:24:20.000000000 +0200
+++ implicit.c 2006-03-25 11:37:58.308894500 +0200
@@ -356,9 +356,8 @@ pattern_search (struct file *file, int a
/* Didn't find it yet: check for DOS-type directories. */
if (check_lastslash)
{
- char *b = strrchr (target, '\\');
- check_lastslash = !(b ? b > lastslash
- : (target[0] && target[1] == ':'));
+ char *b = strchr (target, '\\');
+ check_lastslash = !(b || (target[0] && target[1] == ':'));
}
#endif
#endif
--- job.c~ 2006-03-20 07:03:04.000000000 +0200
+++ job.c 2006-03-25 11:49:30.996394500 +0200
@@ -2297,6 +2297,12 @@ construct_command_argv_internal (char *l
0 };
char* sh_chars;
char** sh_cmds;
+#elif defined(HAVE_DOS_PATHS)
+ /* This is required if the MSYS/Cygwin ports (which do not define
+ WINDOWS32) are compiled with HAVE_DOS_PATHS defined, which uses
+ sh_chars_sh[] directly (see below). The value is identical to
+ the one above for WINDOWS32 platforms. */
+ static char sh_chars_sh[] = "#;\"*?[]&|<>(){}$`^";
#elif defined(__riscos__)
static char sh_chars[] = "";
static char *sh_cmds[] = { 0 };
Re: make 3.81rc1 / MSYS, David Ergo, 2006/03/29