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