ccmake: Fix compilation with ncurses on Solaris

On Solaris the ncurses header may define an `__attribute__` macro.
This breaks C++ headers that use `__attribute__(...)` syntax.
Somehow it causes references to unresolved symbols:

    __gthrw_pthread_once
    __gthrw_pthread_mutex_lock
    __gthrw_pthread_mutex_unlock

instead of references to the correct symbols:

    pthread_once
    pthread_mutex_lock
    pthread_mutex_unlock

Detect this case and undefine the `__attribute__` macro after
including the curses headers.
This commit is contained in:
Brad King
2018-03-20 11:39:28 -04:00
parent 1c3bbda2f2
commit 3b7be02480

View File

@@ -5,6 +5,11 @@
#include "cmConfigure.h" // IWYU pragma: keep
// Record whether __attribute__ is currently defined. See purpose below.
#ifndef __attribute__
#define cm_no__attribute__
#endif
#if defined(__hpux)
#define _BOOL_DEFINED
#include <sys/time.h>
@@ -29,4 +34,12 @@ inline void curses_clear()
#undef erase
#undef clear
// The curses headers on some platforms (e.g. Solaris) may
// define __attribute__ as a macro. This breaks C++ headers
// in some cases, so undefine it now.
#if defined(cm_no__attribute__) && defined(__attribute__)
#undef __attribute__
#endif
#undef cm_no__attribute__
#endif // cmCursesStandardIncludes_h