1 | // Specific definitions for GNU/Linux -*- C++ -*- |
2 | |
3 | // Copyright (C) 2000-2021 Free Software Foundation, Inc. |
4 | // |
5 | // This file is part of the GNU ISO C++ Library. This library is free |
6 | // software; you can redistribute it and/or modify it under the |
7 | // terms of the GNU General Public License as published by the |
8 | // Free Software Foundation; either version 3, or (at your option) |
9 | // any later version. |
10 | |
11 | // This library is distributed in the hope that it will be useful, |
12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | // GNU General Public License for more details. |
15 | |
16 | // Under Section 7 of GPL version 3, you are granted additional |
17 | // permissions described in the GCC Runtime Library Exception, version |
18 | // 3.1, as published by the Free Software Foundation. |
19 | |
20 | // You should have received a copy of the GNU General Public License and |
21 | // a copy of the GCC Runtime Library Exception along with this program; |
22 | // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see |
23 | // <http://www.gnu.org/licenses/>. |
24 | |
25 | /** @file bits/os_defines.h |
26 | * This is an internal header file, included by other library headers. |
27 | * Do not attempt to use it directly. @headername{iosfwd} |
28 | */ |
29 | |
30 | #ifndef _GLIBCXX_OS_DEFINES |
31 | #define _GLIBCXX_OS_DEFINES 1 |
32 | |
33 | // System-specific #define, typedefs, corrections, etc, go here. This |
34 | // file will come before all others. |
35 | |
36 | // This keeps isanum, et al from being propagated as macros. |
37 | #define __NO_CTYPE 1 |
38 | |
39 | #include <features.h> |
40 | |
41 | // Provide a declaration for the possibly deprecated gets function, as |
42 | // glibc 2.15 and later does not declare gets for ISO C11 when |
43 | // __GNU_SOURCE is defined. |
44 | #if __GLIBC_PREREQ(2,15) && defined(_GNU_SOURCE) |
45 | # undef _GLIBCXX_HAVE_GETS |
46 | #endif |
47 | |
48 | // Glibc 2.23 removed the obsolete isinf and isnan declarations. Check the |
49 | // version dynamically in case it has changed since libstdc++ was configured. |
50 | #define _GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC __GLIBC_PREREQ(2,23) |
51 | |
52 | #ifdef __linux__ |
53 | # if __GLIBC_PREREQ(2, 27) |
54 | // Since glibc 2.27 Linux' pthread_self() is usable without linking to libpthread. |
55 | # define _GLIBCXX_NATIVE_THREAD_ID pthread_self() |
56 | # else |
57 | // Before then it was in libc.so.6 but not libc.a, and always returns 0, |
58 | // which breaks the invariant this_thread::get_id() != thread::id{}. |
59 | // So only use it if we know the libpthread version is available. |
60 | // Otherwise use (__gthread_t)1 as the ID of the main (and only) thread. |
61 | # define _GLIBCXX_NATIVE_THREAD_ID \ |
62 | (__gthread_active_p() ? __gthread_self() : (__gthread_t)1) |
63 | # endif |
64 | |
65 | # if __GLIBC_PREREQ(2, 34) |
66 | // Since glibc 2.34 all Linux pthreads functions are usable without linking to |
67 | // libpthread. |
68 | # define _GLIBCXX_GTHREAD_USE_WEAK 0 |
69 | # endif |
70 | #endif |
71 | |
72 | #endif |
73 | |