Saxon, I have no problem if you need to add #include "signal.h" to APR's internal include/arch/win32/apr_private.h. We will know quickly enough if that is a problem. I agree with Brane here, we want to test #ifndef SIGFOO \n #define SIGFOO. That is much cleaner and assures you that it won't be broken just as soon as you substitute a different signal.h from another version of either VC or BCC.
Bill At 03:42 AM 5/13/2003, Saxon Druce wrote: >Hi, > >When compiling APR using Borland C++ Builder 6.0 (bcc32 5.6), I get about 37 >of these warnings: > >[C++ Warning] signal.h(65): W8017 Redefinition of 'SIGUSR1' is not identical >[C++ Warning] signal.h(66): W8017 Redefinition of 'SIGUSR2' is not identical > >And about 14 of these: > >[C++ Warning] apr_private.h(132): W8017 Redefinition of 'SIGUSR1' is not >identical >[C++ Warning] apr_private.h(134): W8017 Redefinition of 'SIGUSR2' is not >identical > >The reason is that include\arch\win32\apr_private.h has this: > >#define SIGHUP 1 >/* 2 is used for SIGINT on windows */ >#define SIGQUIT 3 >/* 4 is used for SIGILL on windows */ >#define SIGTRAP 5 >#define SIGIOT 6 >#define SIGBUS 7 >/* 8 is used for SIGFPE on windows */ >#define SIGKILL 9 >#define SIGUSR1 10 >/* 11 is used for SIGSEGV on windows */ >#define SIGUSR2 12 >#define SIGPIPE 13 >#define SIGALRM 14 >/* 15 is used for SIGTERM on windows */ >#define SIGSTKFLT 16 >#define SIGCHLD 17 >#define SIGCONT 18 >#define SIGSTOP 19 >#define SIGTSTP 20 >/* 21 is used for SIGBREAK on windows */ >/* 22 is used for SIGABRT on windows */ >#define SIGTTIN 23 >#define SIGTTOU 24 >#define SIGURG 25 >#define SIGXCPU 26 >#define SIGXFSZ 27 >#define SIGVTALRM 28 >#define SIGPROF 29 >#define SIGWINCH 30 >#define SIGIO 31 > >This is consistent with Microsoft Visual C++'s signal.h, which has this: > >#define SIGINT 2 >#define SIGILL 4 >#define SIGFPE 8 >#define SIGSEGV 11 >#define SIGTERM 15 >#define SIGBREAK 21 >#define SIGABRT 22 > >But it *isn't* consistent with Borland C++ Builder's signal.h, which has >this: > >#define SIGABRT 22 >#define SIGFPE 8 >#define SIGILL 4 >#define SIGINT 2 >#define SIGSEGV 11 >#define SIGTERM 15 >#define SIGUSR1 16 >#define SIGUSR2 17 >#define SIGUSR3 20 >#define SIGBREAK 21 > >About a year ago I submitted a patch for apr_private.h, which swapped >SIGSTKFLT with SIGUSR1 and SIGCHLD with SIGUSR2, then wrapped the SIGUSR1 >and SIGUSR2 in a #ifndef __BORLANDC__, ie like this: > >[snip] >#define SIGKILL 9 >#define SIGSTKFLT 10 >/* 11 is used for SIGSEGV on windows */ >#define SIGCHLD 12 >#define SIGPIPE 13 >#define SIGALRM 14 >/* 15 is used for SIGTERM on windows */ >#ifndef __BORLANDC__ >/* SIGUSR1 and SIGUSR2 are 16 and 17 for Borland C */ >#define SIGUSR1 16 >#define SIGUSR2 17 >#endif >#define SIGCONT 18 >[snip] > >At the time I received a response from Branko Cibej, suggesting that I >should use a conditional test on a symbol, not a tool (ie not on Borland's >__BORLANDC__ define). I replied asking if he meant this: > >[snip] >#define SIGKILL 9 >#define SIGSTKFLT 10 >/* 11 is used for SIGSEGV on windows */ >#define SIGCHLD 12 >#define SIGPIPE 13 >#define SIGALRM 14 >/* 15 is used for SIGTERM on windows */ >/* SIGUSR1 and SIGUSR2 are 16 and 17 for Borland C */ >#ifndef SIGUSR1 >#define SIGUSR1 16 >#endif >#ifndef SIGUSR2 >#define SIGUSR2 17 >#endif >#define SIGCONT 18 >[snip] > >Although that would only work for the warnings where apr_private.h is >included after signal.h, ie these ones: > >[C++ Warning] apr_private.h(132): W8017 Redefinition of 'SIGUSR1' is not >identical >[C++ Warning] apr_private.h(134): W8017 Redefinition of 'SIGUSR2' is not >identical > >And not these ones: > >[C++ Warning] signal.h(65): W8017 Redefinition of 'SIGUSR1' is not identical >[C++ Warning] signal.h(66): W8017 Redefinition of 'SIGUSR2' is not identical > >Unless apr_private.h was made to include signal.h itself before making the >definitions. > >I haven't had a chance until now to follow this up any further. > >Another approach would be to define them unconditionally, eg: > >[snip] >#define SIGKILL 9 >#define SIGSTKFLT 10 >/* 11 is used for SIGSEGV on windows */ >#define SIGCHLD 12 >#define SIGPIPE 13 >#define SIGALRM 14 >/* 15 is used for SIGTERM on windows */ >/* SIGUSR1 and SIGUSR2 are 16 and 17 for Borland C */ >#define SIGUSR1 16 >#define SIGUSR2 17 >#define SIGCONT 18 >[snip] > >Since Borland doesn't seem to mind having them re-defined to the same value. > >If someone could let me know which way this should be solved, I'll supply a >proper 'diff -u' patch. > >Thanks, >Saxon
