I downloaded yesterday the code below that fails on cygwin. The first #ifndef is at line 675 (which does not line up with what you said was at line 688). The true path of the first #ifdef OS_CYGWIN makes an unreasonable assumption about the value of the user's PATH variable. My path variable starts with "/usr/bin:" as set by me in my .bashrc file. It could have started with ".:/usr/bin:". I don't understand the author's expectation here.
----------------------------------------
#ifndef NDEBUG
void var_expand_unit_test()
{
LOL lol[1];
LIST* l, *l2;
LIST *expected = list_new( list_new( L0, newstr( "axb" ) ), newstr( "ayb" ) );
LIST *e2;
char axyb[] = "a$(xy)b";
char azb[] = "a$($(z))b";
char path[] = "$(p:W)";
# ifdef OS_CYGWIN
char cygpath[256];
{
const char * P = getenv("PATH");
const char * slash = 0;
slash = strchr(P+1,'/');
assert(slash != 0);
strncpy(cygpath,P,slash-P+1);
cygpath[slash-P+1] = '\0';
assert(strlen(cygpath) < 246);
strcat(cygpath,"c/foo/bar");
}
# else
char cygpath[] = "/cygdrive/c/foo/bar";
# endif
lol_init(lol);
var_set("xy",
list_new( list_new( L0, newstr( "x" ) ), newstr( "y" ) ), VAR_SET );
var_set("z", list_new( L0, newstr( "xy" ) ), VAR_SET );
var_set("p", list_new( L0, newstr( cygpath ) ), VAR_SET );
l = var_expand( 0, axyb, axyb + sizeof(axyb) - 1, lol, 0 );
for ( l2 = l, e2 = expected; l2 && e2; l2 = list_next(l2), e2 = list_next(e2) )
assert( !strcmp( e2->string, l2->string ) );
assert(l2 == 0 && e2 == 0);
list_free(l);
l = var_expand( 0, azb, azb + sizeof(azb) - 1, lol, 0 );
for ( l2 = l, e2 = expected; l2 && e2; l2 = list_next(l2), e2 = list_next(e2) )
assert( !strcmp( e2->string, l2->string ) );
assert(l2 == 0 &&
e2 == 0);
list_free(l);
l = var_expand( 0, path, path + sizeof(path) - 1, lol, 0 );
assert(l != 0);
assert(list_next(l) == 0);
# ifdef OS_CYGWIN
assert( !strcmp( l->string, "c:\\foo\\bar" ) );
# else
assert( !strcmp( l->string, cygpath ) );
# endif
list_free(l);
list_free(expected);
lol_free(lol);
}
#endif
----------------------------------
OS_CYGWIN is defined in jam.h -
John Maddock <john@johnmaddock.co.uk> wrote: >> The value of the string l->string at the point of
failure, at:
>>
>> assertion "!strcmp( l->string, "c:\\foo\\bar" )" failed: file
>> "expand.c", line 723
>>
>> is "C:\\cygwin\\usr\\c\\foo\\bar". Back to the drawing board. :-)
I don't understand that, it's certainly building OK for me at present.
Can you check that:
In expand.c line 688:
after the call to cygwin_conv_to_posix_path the variable "cygpath" should
contain "/cygdrive/c/foo/bar"
and then in expand.c line 665:
the variable out->value should be "/cygdrive/c/foo/bar", and after the call
to cygwin_conv_to_win32_path "result" should contain "c:\\foo\\bar".
John.
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build