guile master fails to build on NetBSD because it passes characters to tolower, which is specified to take an int. It's really a macro, and this is a messy situation. The language weenies I've talked to about this think that in this case it's the program that passes a char that's wrong. Hence the following patch. Note that because tolower is specified to take an int, this promotion to int is what would happen if it really were a function, so this "can't be wrong" :-) See http://www.opengroup.org/onlinepubs/000095399/functions/tolower.html and the statement about the argument being of type int and being of a restricted set of values. diff --git a/libguile/strings.c b/libguile/strings.c index c3ea8b8..437cedc 100644 --- a/libguile/strings.c +++ b/libguile/strings.c @@ -1427,8 +1427,8 @@ unistring_escapes_to_guile_escapes (char **bufp, size_t *lenp) /* Convert \u00NN to \xNN */ after[j] = '\\'; after[j + 1] = 'x'; - after[j + 2] = tolower (before[i + 4]); - after[j + 3] = tolower (before[i + 5]); + after[j + 2] = tolower ((int) before[i + 4]); + after[j + 3] = tolower ((int) before[i + 5]); i += 6; j += 4; } @@ -1440,12 +1440,12 @@ unistring_escapes_to_guile_escapes (char **bufp, size_t *lenp) /* Convert \U00NNNNNN to \UNNNNNN */ after[j] = '\\'; after[j + 1] = 'U'; - after[j + 2] = tolower (before[i + 4]); - after[j + 3] = tolower (before[i + 5]); - after[j + 4] = tolower (before[i + 6]); - after[j + 5] = tolower (before[i + 7]); - after[j + 6] = tolower (before[i + 8]); - after[j + 7] = tolower (before[i + 9]); + after[j + 2] = tolower ((int) before[i + 4]); + after[j + 3] = tolower ((int) before[i + 5]); + after[j + 4] = tolower ((int) before[i + 6]); + after[j + 5] = tolower ((int) before[i + 7]); + after[j + 6] = tolower ((int) before[i + 8]); + after[j + 7] = tolower ((int) before[i + 9]); i += 10; j += 8; }