[libc++] Avoid including <semaphore.h> on Apple

It turns out that <semaphore.h> is not well-behaved, as it transitively
includes <sys/param.h>, and that one defines several non-reserved macros
that clash with some downstream projects in modular builds. For the time
being, using <sys/semaphore.h> instead gives us the declarations we need
without the macros.

rdar://59744472
This commit is contained in:
Louis Dionne 2020-02-25 17:52:34 -05:00
parent 8594f3d899
commit 3b5530cf96

View File

@ -26,7 +26,15 @@
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
# include <pthread.h>
# include <sched.h>
// FIXME: On Apple, <semaphore.h> transitively includes <sys/param.h>, which
// is not well behaved because it defines several macros. This causes
// name collisions in some downstream projects. Instead, <sys/semaphore.h>
// gives us the declarations we need without the bad stuff.
#ifdef __APPLE__
# include <sys/semaphore.h>
#else
# include <semaphore.h>
#endif
# ifdef __APPLE__
# define _LIBCPP_NO_NATIVE_SEMAPHORES
# endif