On 31.07.2019 10:55, coypu%sdf.org@localhost wrote: > hi folks, > > while building an updated Mono, I came across a familiar issue: > > icall.c:9175:35: error: ‘ICALL_SIG_TYPE__Bool’ undeclared here (not in a function); did you mean ‘ICALL_SIG_TYPE_bool’? > #define ICALL_SIG_TYPES_1(a) ICALL_SIG_TYPE_ ## a, > > > I've had this issue before with macros, but in this case, the macro is > mandated by the C standard, so there's no escaping it. > > A reduced version of it is: > > #include <stdbool.h> > > #define function(name, type) int name##_##type() { return 3; } > #define useless_wrapper(name, type) function(name, type) > > useless_wrapper(something, bool) > > int main() { > return something_bool(); > } > > > ----- > > In this case, Mono doesn't include stdbool.h, it's side-loaded for us. > I can avoid the issue with a hack #undef bool, but I'd like to see a > future where Mono works unmodified on unmodified NetBSD, without the use > of hacks. > > I'm thinking of the following solution: avoid directly including > stdbool.h in any regular userland headers, and having headers use > _Bool as a type. > > I needed to change net/if.h, net/route.h and sys/psref.h. > In that case this definition of bool is mandated as a part of the C specification. It's a well established tradition to use a macro for it as it is compatible with pre-C99 code and _Bool does not exist in C++ so it will break the headers for at least C++ and pre-C99 build mode. In the mono case, I recommend to rename in the code usage of bool with boolean (optionally with uppercase). Alternatively go for: #undef or #define __bool_true_false_are_defined. > Thoughts? >
Attachment:
signature.asc
Description: OpenPGP digital signature