summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2018-03-20 15:39:28 (GMT)
committerBrad King <brad.king@kitware.com>2018-03-20 15:39:28 (GMT)
commit3b7be02480bbc462f2ebdd0eff156675dd57c50a (patch)
tree922f1e38d468d587f54fddbc4199d93e2eab5927 /Source
parent1c3bbda2f2920f416304086ece139ba1b50015ea (diff)
downloadCMake-3b7be02480bbc462f2ebdd0eff156675dd57c50a.zip
CMake-3b7be02480bbc462f2ebdd0eff156675dd57c50a.tar.gz
CMake-3b7be02480bbc462f2ebdd0eff156675dd57c50a.tar.bz2
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.
Diffstat (limited to 'Source')
-rw-r--r--Source/CursesDialog/cmCursesStandardIncludes.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/Source/CursesDialog/cmCursesStandardIncludes.h b/Source/CursesDialog/cmCursesStandardIncludes.h
index 332d2af..60bad94 100644
--- a/Source/CursesDialog/cmCursesStandardIncludes.h
+++ b/Source/CursesDialog/cmCursesStandardIncludes.h
@@ -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