1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-06-24 21:19:12 +08:00
CMake/Source/CursesDialog/cmCursesStandardIncludes.h
Brad King 3b7be02480 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.
2018-03-20 11:39:28 -04:00

46 lines
1.0 KiB
C

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#ifndef cmCursesStandardIncludes_h
#define cmCursesStandardIncludes_h
#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>
#endif
#include <form.h>
// on some machines move erase and clear conflict with stl
// so remove them from the namespace
inline void curses_move(unsigned int x, unsigned int y)
{
move(x, y);
}
inline void curses_clear()
{
erase();
clearok(stdscr, TRUE);
}
#undef move
#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