17d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters#ifndef Py_PYPORT_H 214a4d88a2eb576f66573bbae3db46065e26bccd2Vladimir Marangozov#define Py_PYPORT_H 37d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters 44f1cd8bdcbd20bb0acdbe9e240f28c09dd38370fMartin v. Löwis#include "pyconfig.h" /* include for defines */ 525f68944c20a3a37da6776277057c2d19a80211fPeter Schneider-Kamp 6835a6c8467a5c2d63a23b392d21c79c5f5a9e300Mark Dickinson#include <inttypes.h> 789f507fe8c497b3f70fdcecce8bc240f9af2bbe2Thomas Wouters 87d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters/************************************************************************** 97d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim PetersSymbols and macros to supply platform-independent interfaces to basic 101be46844d9c858a21021e2c3ad0ef9bbee64d9e0Tim PetersC language & library operations whose spellings vary across platforms. 117d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters 127d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim PetersPlease try to make documentation here as clear as possible: by definition, 137d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Petersthe stuff here is trying to illuminate C's darkest corners. 147d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters 157d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim PetersConfig #defines referenced here: 167d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters 177d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim PetersSIGNED_RIGHT_SHIFT_ZERO_FILLS 187d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim PetersMeaning: To be defined iff i>>j does not extend the sign bit when i is a 197d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters signed integral type and i < 0. 207d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim PetersUsed in: Py_ARITHMETIC_RIGHT_SHIFT 211be46844d9c858a21021e2c3ad0ef9bbee64d9e0Tim Peters 228315ea579046727bb234dc4692ca28c8514eacbeTim PetersPy_DEBUG 238315ea579046727bb234dc4692ca28c8514eacbeTim PetersMeaning: Extra checks compiled in for debug mode. 248315ea579046727bb234dc4692ca28c8514eacbeTim PetersUsed in: Py_SAFE_DOWNCAST 25fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw 267d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters**************************************************************************/ 277d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters 28fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw/* typedefs for some C9X-defined synonyms for integral types. 29fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw * 30fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw * The names in Python are exactly the same as the C9X names, except with a 31fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw * Py_ prefix. Until C9X is universally implemented, this is the only way 32fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw * to ensure that Python gets reliable names that don't conflict with names 33fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw * in non-Python code that are playing their own tricks to define the C9X 34fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw * names. 35fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw * 36fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw * NOTE: don't go nuts here! Python has no use for *most* of the C9X 37fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw * integral synonyms. Only define the ones we actually need. 38fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw */ 39fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw 4007e6cbd7b9e5b6047a608cedd5cc9b20891a3972n.d. parker/* long long is required. Ensure HAVE_LONG_LONG is defined for compatibility. */ 410d5742dec0a44c6fdbb544bc683855ff78554e72Benjamin Peterson#ifndef HAVE_LONG_LONG 42a251fb02f4400a2ea32677110e430742fd1444bcVictor Stinner#define HAVE_LONG_LONG 1 430d5742dec0a44c6fdbb544bc683855ff78554e72Benjamin Peterson#endif 44b9a0f9121876cbc728cbef88f16bb32b92712d2dMartin v. Löwis#ifndef PY_LONG_LONG 45b9a0f9121876cbc728cbef88f16bb32b92712d2dMartin v. Löwis#define PY_LONG_LONG long long 46cd16bf640405065e4702539632ce577536207d88Guido van Rossum/* If LLONG_MAX is defined in limits.h, use that. */ 47cd16bf640405065e4702539632ce577536207d88Guido van Rossum#define PY_LLONG_MIN LLONG_MIN 48cd16bf640405065e4702539632ce577536207d88Guido van Rossum#define PY_LLONG_MAX LLONG_MAX 49cd16bf640405065e4702539632ce577536207d88Guido van Rossum#define PY_ULLONG_MAX ULLONG_MAX 50fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw#endif 51fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw 52bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson#define PY_UINT32_T uint32_t 53bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson#define PY_UINT64_T uint64_t 54bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson 55bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson/* Signed variants of the above */ 56bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson#define PY_INT32_T int32_t 57bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson#define PY_INT64_T int64_t 58bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson 59bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson/* If PYLONG_BITS_IN_DIGIT is not defined then we'll use 30-bit digits if all 60bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson the necessary integer types are available, and we're on a 64-bit platform 61bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson (as determined by SIZEOF_VOID_P); otherwise we use 15-bit digits. */ 62bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson 63bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson#ifndef PYLONG_BITS_IN_DIGIT 644fe55106d1bd99015b18118bf1067a1189e070eaBenjamin Peterson#if SIZEOF_VOID_P >= 8 65bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson#define PYLONG_BITS_IN_DIGIT 30 66bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson#else 67bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson#define PYLONG_BITS_IN_DIGIT 15 68bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson#endif 69bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson#endif 70bd7926478de92a2a0ef4440e1a9ae61b706a80d2Mark Dickinson 71fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw/* uintptr_t is the C9X name for an unsigned integral type such that a 72fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw * legitimate void* can be cast to uintptr_t and then back to void* again 7379248aa1e4a8f6510b1f0ef95dc9592d51e16d6cTim Peters * without loss of information. Similarly for intptr_t, wrt a signed 7479248aa1e4a8f6510b1f0ef95dc9592d51e16d6cTim Peters * integral type. 75fd847b23e64180d117af44e51eeb03b61e2f04d2Barry Warsaw */ 76f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitroutypedef uintptr_t Py_uintptr_t; 77f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitroutypedef intptr_t Py_intptr_t; 7879248aa1e4a8f6510b1f0ef95dc9592d51e16d6cTim Peters 7949fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters/* Py_ssize_t is a signed integral type such that sizeof(Py_ssize_t) == 8049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * sizeof(size_t). C99 doesn't define such a thing directly (size_t is an 8149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * unsigned integral type). See PEP 353 for details. 8249fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters */ 8318e165558b24d29e7e0ca501842b9236589b012aMartin v. Löwis#ifdef HAVE_SSIZE_T 84f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitroutypedef ssize_t Py_ssize_t; 8518e165558b24d29e7e0ca501842b9236589b012aMartin v. Löwis#elif SIZEOF_VOID_P == SIZEOF_SIZE_T 86f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitroutypedef Py_intptr_t Py_ssize_t; 8718e165558b24d29e7e0ca501842b9236589b012aMartin v. Löwis#else 8818e165558b24d29e7e0ca501842b9236589b012aMartin v. Löwis# error "Python needs a typedef for Py_ssize_t in pyport.h." 8918e165558b24d29e7e0ca501842b9236589b012aMartin v. Löwis#endif 9049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters 918f67d0893f7170986b0ad370844318544270cbccBenjamin Peterson/* Py_hash_t is the same size as a pointer. */ 92985ecdcfc29adfc36ce2339acf03f819ad414869Christian Heimes#define SIZEOF_PY_HASH_T SIZEOF_SIZE_T 938f67d0893f7170986b0ad370844318544270cbccBenjamin Petersontypedef Py_ssize_t Py_hash_t; 948035bc5c048ff08f652649754eb8ea769337afa0Benjamin Peterson/* Py_uhash_t is the unsigned equivalent needed to calculate numeric hash. */ 95985ecdcfc29adfc36ce2339acf03f819ad414869Christian Heimes#define SIZEOF_PY_UHASH_T SIZEOF_SIZE_T 968035bc5c048ff08f652649754eb8ea769337afa0Benjamin Petersontypedef size_t Py_uhash_t; 978f67d0893f7170986b0ad370844318544270cbccBenjamin Peterson 98ebdcb50b8a0d37af4acd7d2387eae8ff2b5f0b9bLarry Hastings/* Only used for compatibility with code that may not be PY_SSIZE_T_CLEAN. */ 99ebdcb50b8a0d37af4acd7d2387eae8ff2b5f0b9bLarry Hastings#ifdef PY_SSIZE_T_CLEAN 100ebdcb50b8a0d37af4acd7d2387eae8ff2b5f0b9bLarry Hastingstypedef Py_ssize_t Py_ssize_clean_t; 101ebdcb50b8a0d37af4acd7d2387eae8ff2b5f0b9bLarry Hastings#else 102ebdcb50b8a0d37af4acd7d2387eae8ff2b5f0b9bLarry Hastingstypedef int Py_ssize_clean_t; 103ebdcb50b8a0d37af4acd7d2387eae8ff2b5f0b9bLarry Hastings#endif 104ebdcb50b8a0d37af4acd7d2387eae8ff2b5f0b9bLarry Hastings 1052f8bfef1587b3e8f43c0ce7cd9546137c5b56782Benjamin Peterson/* Largest possible value of size_t. */ 1069c74b14fe9b6dddc9d41dd37f431f174350004d4Amaury Forgeot d'Arc#define PY_SIZE_MAX SIZE_MAX 1079c74b14fe9b6dddc9d41dd37f431f174350004d4Amaury Forgeot d'Arc 10849fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters/* Largest positive value of type Py_ssize_t. */ 10918e165558b24d29e7e0ca501842b9236589b012aMartin v. Löwis#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1)) 11049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters/* Smallest negative value of type Py_ssize_t. */ 11149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1) 11249fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters 11349fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters/* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf 11449fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * format to convert an argument with the width of a size_t or Py_ssize_t. 11549fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * C99 introduced "z" for this purpose, but not all platforms support that; 11649fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * e.g., MS compilers use "I" instead. 11749fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * 11849fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * These "high level" Python format functions interpret "z" correctly on 11949fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * all platforms (Python interprets the format string itself, and does whatever 12049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * the platform C requires to convert a size_t/Py_ssize_t argument): 12149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * 12272b710a59617ebe6dd1c41613d2c7eb81702efd9Christian Heimes * PyBytes_FromFormat 12349fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * PyErr_Format 12472b710a59617ebe6dd1c41613d2c7eb81702efd9Christian Heimes * PyBytes_FromFormatV 1257696ed7b926dd73700ff9972d7a47beb7ec13191Walter Dörwald * PyUnicode_FromFormatV 12649fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * 12749fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * Lower-level uses require that you interpolate the correct format modifier 12849fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * yourself (e.g., calling printf, fprintf, sprintf, PyOS_snprintf); for 12949fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * example, 13049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * 13149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * Py_ssize_t index; 13249fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index); 13349fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * 13449fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * That will expand to %ld, or %Id, or to something else correct for a 13549fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * Py_ssize_t on the platform. 13649fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters */ 13749fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters#ifndef PY_FORMAT_SIZE_T 13889f507fe8c497b3f70fdcecce8bc240f9af2bbe2Thomas Wouters# if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__) 13949fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters# define PY_FORMAT_SIZE_T "" 14049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters# elif SIZEOF_SIZE_T == SIZEOF_LONG 14149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters# define PY_FORMAT_SIZE_T "l" 14249fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters# elif defined(MS_WINDOWS) 14349fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters# define PY_FORMAT_SIZE_T "I" 14449fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters# else 14549fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters# error "This platform's pyconfig.h needs to define PY_FORMAT_SIZE_T" 14649fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters# endif 14749fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters#endif 14818e165558b24d29e7e0ca501842b9236589b012aMartin v. Löwis 149477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters/* Py_LOCAL can be used instead of static to get the fastest possible calling 150477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * convention for functions that are local to a given module. 151477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * 152477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * Py_LOCAL_INLINE does the same thing, and also explicitly requests inlining, 153477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * for platforms that support that. 154477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * 155477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * If PY_LOCAL_AGGRESSIVE is defined before python.h is included, more 1564882cacab6bcaf90ac496fc8878987598e7665c1Berker Peksag * "aggressive" inlining/optimization is enabled for the entire module. This 157477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * may lead to code bloat, and may slow things down for those reasons. It may 158477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * also lead to errors, if the code relies on pointer aliasing. Use with 159477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * care. 160477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * 161477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * NOTE: You can only use this for functions that are entirely local to a 162477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * module; functions that are exported via method tables, callbacks, etc, 163477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters * should keep using static. 164477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters */ 165477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters 166477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#if defined(_MSC_VER) 167477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#if defined(PY_LOCAL_AGGRESSIVE) 168477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters/* enable more aggressive optimization for visual studio */ 169477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#pragma optimize("agtw", on) 170477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#endif 171f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou/* ignore warnings if the compiler decides not to inline a function */ 172477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#pragma warning(disable: 4710) 173477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters/* fastest possible local call under MSVC */ 174477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#define Py_LOCAL(type) static type __fastcall 175477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#define Py_LOCAL_INLINE(type) static __inline type __fastcall 176477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#elif defined(USE_INLINE) 177477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#define Py_LOCAL(type) static type 178477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#define Py_LOCAL_INLINE(type) static inline type 179477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#else 180477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#define Py_LOCAL(type) static type 181477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#define Py_LOCAL_INLINE(type) static type 182477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#endif 183477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters 184f051e43b22af014364e231c36489e6745993ea34Christian Heimes/* Py_MEMCPY is kept for backwards compatibility, 185f051e43b22af014364e231c36489e6745993ea34Christian Heimes * see https://bugs.python.org/issue28126 */ 1864d70c3d9dded0f0fa7a73c67217a71111d05df4dThomas Wouters#define Py_MEMCPY memcpy 1874d70c3d9dded0f0fa7a73c67217a71111d05df4dThomas Wouters 1887e018909862a3fe6c571bbb7143f4ffb18ae834cPeter Schneider-Kamp#include <stdlib.h> 1897e018909862a3fe6c571bbb7143f4ffb18ae834cPeter Schneider-Kamp 190a4962cb694c5fc7ae53f762a682cdc1ca72410eeMark Dickinson#ifdef HAVE_IEEEFP_H 191a4962cb694c5fc7ae53f762a682cdc1ca72410eeMark Dickinson#include <ieeefp.h> /* needed for 'finite' declaration on some platforms */ 192a4962cb694c5fc7ae53f762a682cdc1ca72410eeMark Dickinson#endif 193a4962cb694c5fc7ae53f762a682cdc1ca72410eeMark Dickinson 1942c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#include <math.h> /* Moved here from the math section, before extern "C" */ 1952c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov 1962c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov/******************************************** 1972c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov * WRAPPER FOR <time.h> and/or <sys/time.h> * 1982c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov ********************************************/ 1992c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov 2002c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#ifdef TIME_WITH_SYS_TIME 2012c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#include <sys/time.h> 2022c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#include <time.h> 2032c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#else /* !TIME_WITH_SYS_TIME */ 2042c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#ifdef HAVE_SYS_TIME_H 2052c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#include <sys/time.h> 2062c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#else /* !HAVE_SYS_TIME_H */ 2072c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#include <time.h> 2082c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#endif /* !HAVE_SYS_TIME_H */ 2092c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#endif /* !TIME_WITH_SYS_TIME */ 2102c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov 2112c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov 2122c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov/****************************** 2132c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov * WRAPPER FOR <sys/select.h> * 2142c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov ******************************/ 2152c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov 2162c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov/* NB caller must include <sys/types.h> */ 2172c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov 2182c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#ifdef HAVE_SYS_SELECT_H 2192c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#include <sys/select.h> 2202c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov#endif /* !HAVE_SYS_SELECT_H */ 2212c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov 22260f42b50d894d3c9798c50e063ae758a1a5987a2Tim Peters/******************************* 22360f42b50d894d3c9798c50e063ae758a1a5987a2Tim Peters * stat() and fstat() fiddling * 22460f42b50d894d3c9798c50e063ae758a1a5987a2Tim Peters *******************************/ 22560f42b50d894d3c9798c50e063ae758a1a5987a2Tim Peters 2260e3f591aeeef9ed715f8770320f4c4c7332a8794Thomas Wouters#ifdef HAVE_SYS_STAT_H 22760f42b50d894d3c9798c50e063ae758a1a5987a2Tim Peters#include <sys/stat.h> 22860f42b50d894d3c9798c50e063ae758a1a5987a2Tim Peters#elif defined(HAVE_STAT_H) 22960f42b50d894d3c9798c50e063ae758a1a5987a2Tim Peters#include <stat.h> 23060f42b50d894d3c9798c50e063ae758a1a5987a2Tim Peters#endif 23160f42b50d894d3c9798c50e063ae758a1a5987a2Tim Peters 23299d6135a157f6626fddd5d61007d363b3a14990dChristian Heimes#ifndef S_IFMT 233f9836ba4fea66d74fc2afddc434a147265a9caa7Martin v. Löwis/* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */ 23499d6135a157f6626fddd5d61007d363b3a14990dChristian Heimes#define S_IFMT 0170000 23599d6135a157f6626fddd5d61007d363b3a14990dChristian Heimes#endif 23699d6135a157f6626fddd5d61007d363b3a14990dChristian Heimes 23799d6135a157f6626fddd5d61007d363b3a14990dChristian Heimes#ifndef S_IFLNK 23899d6135a157f6626fddd5d61007d363b3a14990dChristian Heimes/* Windows doesn't define S_IFLNK but posixmodule.c maps 23999d6135a157f6626fddd5d61007d363b3a14990dChristian Heimes * IO_REPARSE_TAG_SYMLINK to S_IFLNK */ 24099d6135a157f6626fddd5d61007d363b3a14990dChristian Heimes# define S_IFLNK 0120000 241f9836ba4fea66d74fc2afddc434a147265a9caa7Martin v. Löwis#endif 242f9836ba4fea66d74fc2afddc434a147265a9caa7Martin v. Löwis 243f9836ba4fea66d74fc2afddc434a147265a9caa7Martin v. Löwis#ifndef S_ISREG 244f9836ba4fea66d74fc2afddc434a147265a9caa7Martin v. Löwis#define S_ISREG(x) (((x) & S_IFMT) == S_IFREG) 245f9836ba4fea66d74fc2afddc434a147265a9caa7Martin v. Löwis#endif 246f9836ba4fea66d74fc2afddc434a147265a9caa7Martin v. Löwis 247f9836ba4fea66d74fc2afddc434a147265a9caa7Martin v. Löwis#ifndef S_ISDIR 248f9836ba4fea66d74fc2afddc434a147265a9caa7Martin v. Löwis#define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR) 249f9836ba4fea66d74fc2afddc434a147265a9caa7Martin v. Löwis#endif 250f9836ba4fea66d74fc2afddc434a147265a9caa7Martin v. Löwis 251c6ebd16a203b84de020fb236f32e8c58db92718dVictor Stinner#ifndef S_ISCHR 252c6ebd16a203b84de020fb236f32e8c58db92718dVictor Stinner#define S_ISCHR(x) (((x) & S_IFMT) == S_IFCHR) 253c6ebd16a203b84de020fb236f32e8c58db92718dVictor Stinner#endif 254c6ebd16a203b84de020fb236f32e8c58db92718dVictor Stinner 2557d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters#ifdef __cplusplus 2567e018909862a3fe6c571bbb7143f4ffb18ae834cPeter Schneider-Kamp/* Move this down here since some C++ #include's don't like to be included 2577e018909862a3fe6c571bbb7143f4ffb18ae834cPeter Schneider-Kamp inside an extern "C" */ 2587d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Petersextern "C" { 2597d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters#endif 2607d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters 2612c57e076fe7653e38fb0a52679bb3ac219793143Vladimir Marangozov 2627d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters/* Py_ARITHMETIC_RIGHT_SHIFT 2637d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters * C doesn't define whether a right-shift of a signed integer sign-extends 2647d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters * or zero-fills. Here a macro to force sign extension: 2657d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters * Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) 26616f966ee2618f7a6604b94de2e478637676f550eMark Dickinson * Return I >> J, forcing sign extension. Arithmetically, return the 26716f966ee2618f7a6604b94de2e478637676f550eMark Dickinson * floor of I/2**J. 2687d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters * Requirements: 26916f966ee2618f7a6604b94de2e478637676f550eMark Dickinson * I should have signed integer type. In the terminology of C99, this can 27016f966ee2618f7a6604b94de2e478637676f550eMark Dickinson * be either one of the five standard signed integer types (signed char, 27116f966ee2618f7a6604b94de2e478637676f550eMark Dickinson * short, int, long, long long) or an extended signed integer type. 27216f966ee2618f7a6604b94de2e478637676f550eMark Dickinson * J is an integer >= 0 and strictly less than the number of bits in the 27316f966ee2618f7a6604b94de2e478637676f550eMark Dickinson * type of I (because C doesn't define what happens for J outside that 27416f966ee2618f7a6604b94de2e478637676f550eMark Dickinson * range either). 27516f966ee2618f7a6604b94de2e478637676f550eMark Dickinson * TYPE used to specify the type of I, but is now ignored. It's been left 27616f966ee2618f7a6604b94de2e478637676f550eMark Dickinson * in for backwards compatibility with versions <= 2.6 or 3.0. 2777d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters * Caution: 2787d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters * I may be evaluated more than once. 2797d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters */ 2807d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters#ifdef SIGNED_RIGHT_SHIFT_ZERO_FILLS 2817d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) \ 282f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou ((I) < 0 ? -1-((-1-(I)) >> (J)) : (I) >> (J)) 2837d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters#else 2847d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) ((I) >> (J)) 2857d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters#endif 2867d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters 28739dce29365d287dc6b353b2a527dc11fe58dcfa6Tim Peters/* Py_FORCE_EXPANSION(X) 2881be46844d9c858a21021e2c3ad0ef9bbee64d9e0Tim Peters * "Simply" returns its argument. However, macro expansions within the 2891be46844d9c858a21021e2c3ad0ef9bbee64d9e0Tim Peters * argument are evaluated. This unfortunate trickery is needed to get 2901be46844d9c858a21021e2c3ad0ef9bbee64d9e0Tim Peters * token-pasting to work as desired in some cases. 2911be46844d9c858a21021e2c3ad0ef9bbee64d9e0Tim Peters */ 2921be46844d9c858a21021e2c3ad0ef9bbee64d9e0Tim Peters#define Py_FORCE_EXPANSION(X) X 2931be46844d9c858a21021e2c3ad0ef9bbee64d9e0Tim Peters 2948315ea579046727bb234dc4692ca28c8514eacbeTim Peters/* Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) 2958315ea579046727bb234dc4692ca28c8514eacbeTim Peters * Cast VALUE to type NARROW from type WIDE. In Py_DEBUG mode, this 2968315ea579046727bb234dc4692ca28c8514eacbeTim Peters * assert-fails if any information is lost. 2978315ea579046727bb234dc4692ca28c8514eacbeTim Peters * Caution: 2988315ea579046727bb234dc4692ca28c8514eacbeTim Peters * VALUE may be evaluated more than once. 2998315ea579046727bb234dc4692ca28c8514eacbeTim Peters */ 3008315ea579046727bb234dc4692ca28c8514eacbeTim Peters#ifdef Py_DEBUG 3018315ea579046727bb234dc4692ca28c8514eacbeTim Peters#define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) \ 302f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou (assert((WIDE)(NARROW)(VALUE) == (VALUE)), (NARROW)(VALUE)) 3038315ea579046727bb234dc4692ca28c8514eacbeTim Peters#else 3048315ea579046727bb234dc4692ca28c8514eacbeTim Peters#define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) (NARROW)(VALUE) 3058315ea579046727bb234dc4692ca28c8514eacbeTim Peters#endif 3068315ea579046727bb234dc4692ca28c8514eacbeTim Peters 30777d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang/* Py_SET_ERRNO_ON_MATH_ERROR(x) 308a40c793d06ee2b42a5013015352616b4ca6b288bTim Peters * If a libm function did not set errno, but it looks like the result 30977d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang * overflowed or not-a-number, set errno to ERANGE or EDOM. Set errno 31077d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang * to 0 before calling a libm function, and invoke this macro after, 31177d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang * passing the function result. 312a40c793d06ee2b42a5013015352616b4ca6b288bTim Peters * Caution: 313a40c793d06ee2b42a5013015352616b4ca6b288bTim Peters * This isn't reliable. See Py_OVERFLOWED comments. 314a40c793d06ee2b42a5013015352616b4ca6b288bTim Peters * X is evaluated more than once. 315a40c793d06ee2b42a5013015352616b4ca6b288bTim Peters */ 316539c662f10b41d15f658cabfa03cc02902862adcGuido van Rossum#if defined(__FreeBSD__) || defined(__OpenBSD__) || (defined(__hpux) && defined(__ia64)) 31777d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang#define _Py_SET_EDOM_FOR_NAN(X) if (isnan(X)) errno = EDOM; 31877d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang#else 31977d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang#define _Py_SET_EDOM_FOR_NAN(X) ; 32077d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang#endif 32177d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang#define Py_SET_ERRNO_ON_MATH_ERROR(X) \ 322f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou do { \ 323f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (errno == 0) { \ 324f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL) \ 325f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou errno = ERANGE; \ 326f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou else _Py_SET_EDOM_FOR_NAN(X) \ 327f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } \ 328f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } while(0) 32957f282a2a06c01417abec74926e770fb12f95610Tim Peters 33077d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang/* Py_SET_ERANGE_ON_OVERFLOW(x) 33177d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang * An alias of Py_SET_ERRNO_ON_MATH_ERROR for backward-compatibility. 33277d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang */ 33377d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang#define Py_SET_ERANGE_IF_OVERFLOW(X) Py_SET_ERRNO_ON_MATH_ERROR(X) 33477d9a3effa21b8987ceac26d67ad676e1c5afb49Hye-Shik Chang 335dc5a508761d7260bc863a2f3068723c298336382Tim Peters/* Py_ADJUST_ERANGE1(x) 336dc5a508761d7260bc863a2f3068723c298336382Tim Peters * Py_ADJUST_ERANGE2(x, y) 337dc5a508761d7260bc863a2f3068723c298336382Tim Peters * Set errno to 0 before calling a libm function, and invoke one of these 338dc5a508761d7260bc863a2f3068723c298336382Tim Peters * macros after, passing the function result(s) (Py_ADJUST_ERANGE2 is useful 339dc5a508761d7260bc863a2f3068723c298336382Tim Peters * for functions returning complex results). This makes two kinds of 340dc5a508761d7260bc863a2f3068723c298336382Tim Peters * adjustments to errno: (A) If it looks like the platform libm set 341dc5a508761d7260bc863a2f3068723c298336382Tim Peters * errno=ERANGE due to underflow, clear errno. (B) If it looks like the 342dc5a508761d7260bc863a2f3068723c298336382Tim Peters * platform libm overflowed but didn't set errno, force errno to ERANGE. In 343dc5a508761d7260bc863a2f3068723c298336382Tim Peters * effect, we're trying to force a useful implementation of C89 errno 344dc5a508761d7260bc863a2f3068723c298336382Tim Peters * behavior. 345dc5a508761d7260bc863a2f3068723c298336382Tim Peters * Caution: 346dc5a508761d7260bc863a2f3068723c298336382Tim Peters * This isn't reliable. See Py_OVERFLOWED comments. 347dc5a508761d7260bc863a2f3068723c298336382Tim Peters * X and Y may be evaluated more than once. 348dc5a508761d7260bc863a2f3068723c298336382Tim Peters */ 349f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou#define Py_ADJUST_ERANGE1(X) \ 350f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou do { \ 351f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (errno == 0) { \ 352f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL) \ 353f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou errno = ERANGE; \ 354f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } \ 355f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou else if (errno == ERANGE && (X) == 0.0) \ 356f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou errno = 0; \ 357f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } while(0) 358f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou 359f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou#define Py_ADJUST_ERANGE2(X, Y) \ 360f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou do { \ 361f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL || \ 362f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou (Y) == Py_HUGE_VAL || (Y) == -Py_HUGE_VAL) { \ 363f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (errno == 0) \ 364f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou errno = ERANGE; \ 365f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } \ 366f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou else if (errno == ERANGE) \ 367f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou errno = 0; \ 368f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } while(0) 369dc5a508761d7260bc863a2f3068723c298336382Tim Peters 370a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson/* The functions _Py_dg_strtod and _Py_dg_dtoa in Python/dtoa.c (which are 371a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * required to support the short float repr introduced in Python 3.1) require 372a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * that the floating-point unit that's being used for arithmetic operations 373a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * on C doubles is set to use 53-bit precision. It also requires that the 374a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * FPU rounding mode is round-half-to-even, but that's less often an issue. 375a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * 376a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * If your FPU isn't already set to 53-bit precision/round-half-to-even, and 377a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * you want to make use of _Py_dg_strtod and _Py_dg_dtoa, then you should 378a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * 379a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * #define HAVE_PY_SET_53BIT_PRECISION 1 380a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * 381a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * and also give appropriate definitions for the following three macros: 382a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * 383a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * _PY_SET_53BIT_PRECISION_START : store original FPU settings, and 384a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * set FPU to 53-bit precision/round-half-to-even 385a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * _PY_SET_53BIT_PRECISION_END : restore original FPU settings 386a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * _PY_SET_53BIT_PRECISION_HEADER : any variable declarations needed to 387a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * use the two macros above. 388a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * 389a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * The macros are designed to be used within a single C function: see 390a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson * Python/pystrtod.c for an example of their use. 391a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson */ 392b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson 393a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson/* get and set x87 control word for gcc/x86 */ 3947abf8d4066e9b4dd21f9a498427ac1ec8914c0abMark Dickinson#ifdef HAVE_GCC_ASM_FOR_X87 395a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson#define HAVE_PY_SET_53BIT_PRECISION 1 396a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson/* _Py_get/set_387controlword functions are defined in Python/pymath.c */ 397f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou#define _Py_SET_53BIT_PRECISION_HEADER \ 398f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou unsigned short old_387controlword, new_387controlword 399f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou#define _Py_SET_53BIT_PRECISION_START \ 400f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou do { \ 401f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou old_387controlword = _Py_get_387controlword(); \ 402f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou new_387controlword = (old_387controlword & ~0x0f00) | 0x0200; \ 403f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (new_387controlword != old_387controlword) \ 404f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou _Py_set_387controlword(new_387controlword); \ 405f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou } while (0) 406f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou#define _Py_SET_53BIT_PRECISION_END \ 407f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou if (new_387controlword != old_387controlword) \ 408f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou _Py_set_387controlword(old_387controlword) 409a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson#endif 410a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson 41118e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson/* get and set x87 control word for VisualStudio/x86 */ 41218e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson#if defined(_MSC_VER) && !defined(_WIN64) /* x87 not supported in 64-bit */ 41318e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson#define HAVE_PY_SET_53BIT_PRECISION 1 41418e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson#define _Py_SET_53BIT_PRECISION_HEADER \ 41518e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson unsigned int old_387controlword, new_387controlword, out_387controlword 41618e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson/* We use the __control87_2 function to set only the x87 control word. 41718e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson The SSE control word is unaffected. */ 41818e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson#define _Py_SET_53BIT_PRECISION_START \ 41918e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson do { \ 42018e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson __control87_2(0, 0, &old_387controlword, NULL); \ 42118e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson new_387controlword = \ 42218e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson (old_387controlword & ~(_MCW_PC | _MCW_RC)) | (_PC_53 | _RC_NEAR); \ 42318e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson if (new_387controlword != old_387controlword) \ 42418e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson __control87_2(new_387controlword, _MCW_PC | _MCW_RC, \ 42518e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson &out_387controlword, NULL); \ 42618e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson } while (0) 42718e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson#define _Py_SET_53BIT_PRECISION_END \ 42818e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson do { \ 42918e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson if (new_387controlword != old_387controlword) \ 43018e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson __control87_2(old_387controlword, _MCW_PC | _MCW_RC, \ 43118e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson &out_387controlword, NULL); \ 43218e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson } while (0) 43318e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson#endif 43418e3d81f96a592a0307fa41645017483eabcfc51Mark Dickinson 4358bdeb1672ce1d0412e1fcc6cff0821bb66f02c1aBenjamin Peterson#ifdef HAVE_GCC_ASM_FOR_MC68881 4368bdeb1672ce1d0412e1fcc6cff0821bb66f02c1aBenjamin Peterson#define HAVE_PY_SET_53BIT_PRECISION 1 4378bdeb1672ce1d0412e1fcc6cff0821bb66f02c1aBenjamin Peterson#define _Py_SET_53BIT_PRECISION_HEADER \ 4388bdeb1672ce1d0412e1fcc6cff0821bb66f02c1aBenjamin Peterson unsigned int old_fpcr, new_fpcr 439f051e43b22af014364e231c36489e6745993ea34Christian Heimes#define _Py_SET_53BIT_PRECISION_START \ 440f051e43b22af014364e231c36489e6745993ea34Christian Heimes do { \ 441f051e43b22af014364e231c36489e6745993ea34Christian Heimes __asm__ ("fmove.l %%fpcr,%0" : "=g" (old_fpcr)); \ 442f051e43b22af014364e231c36489e6745993ea34Christian Heimes /* Set double precision / round to nearest. */ \ 443f051e43b22af014364e231c36489e6745993ea34Christian Heimes new_fpcr = (old_fpcr & ~0xf0) | 0x80; \ 444f051e43b22af014364e231c36489e6745993ea34Christian Heimes if (new_fpcr != old_fpcr) \ 445f051e43b22af014364e231c36489e6745993ea34Christian Heimes __asm__ volatile ("fmove.l %0,%%fpcr" : : "g" (new_fpcr)); \ 4468bdeb1672ce1d0412e1fcc6cff0821bb66f02c1aBenjamin Peterson } while (0) 447f051e43b22af014364e231c36489e6745993ea34Christian Heimes#define _Py_SET_53BIT_PRECISION_END \ 448f051e43b22af014364e231c36489e6745993ea34Christian Heimes do { \ 449f051e43b22af014364e231c36489e6745993ea34Christian Heimes if (new_fpcr != old_fpcr) \ 450f051e43b22af014364e231c36489e6745993ea34Christian Heimes __asm__ volatile ("fmove.l %0,%%fpcr" : : "g" (old_fpcr)); \ 4518bdeb1672ce1d0412e1fcc6cff0821bb66f02c1aBenjamin Peterson } while (0) 4528bdeb1672ce1d0412e1fcc6cff0821bb66f02c1aBenjamin Peterson#endif 4538bdeb1672ce1d0412e1fcc6cff0821bb66f02c1aBenjamin Peterson 454a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson/* default definitions are empty */ 455a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson#ifndef HAVE_PY_SET_53BIT_PRECISION 456b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson#define _Py_SET_53BIT_PRECISION_HEADER 457b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson#define _Py_SET_53BIT_PRECISION_START 458b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson#define _Py_SET_53BIT_PRECISION_END 459b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson#endif 460b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson 461b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson/* If we can't guarantee 53-bit precision, don't use the code 462b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson in Python/dtoa.c, but fall back to standard code. This 463b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson means that repr of a float will be long (17 sig digits). 464b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson 465b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson Realistically, there are two things that could go wrong: 466b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson 467b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson (1) doubles aren't IEEE 754 doubles, or 468b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson (2) we're on x86 with the rounding precision set to 64-bits 469b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson (extended precision), and we don't know how to change 470b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson the rounding precision. 471b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson */ 472b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson 473b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson#if !defined(DOUBLE_IS_LITTLE_ENDIAN_IEEE754) && \ 474b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson !defined(DOUBLE_IS_BIG_ENDIAN_IEEE754) && \ 475b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson !defined(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754) 476b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson#define PY_NO_SHORT_FLOAT_REPR 477b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson#endif 478b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson 47960fd0999cce17ec8603edf4219f686c37a260d7bMark Dickinson/* double rounding is symptomatic of use of extended precision on x86. If 48060fd0999cce17ec8603edf4219f686c37a260d7bMark Dickinson we're seeing double rounding, and we don't have any mechanism available for 48160fd0999cce17ec8603edf4219f686c37a260d7bMark Dickinson changing the FPU rounding precision, then don't use Python/dtoa.c. */ 482a4262b93ebb4d6a0419d10832c56b689c7a2e208Mark Dickinson#if defined(X87_DOUBLE_ROUNDING) && !defined(HAVE_PY_SET_53BIT_PRECISION) 483b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson#define PY_NO_SHORT_FLOAT_REPR 484b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson#endif 485b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson 486b08a53a99def3fa949643974f713b5b189e21bc7Mark Dickinson 487802926482ca55342316c315ed3d20e9a2f7087b7Neal Norwitz/* Py_DEPRECATED(version) 48893344ab0365c4b55ef895c9fd3873dd06690ca00Neal Norwitz * Declare a variable, type, or function deprecated. 489802926482ca55342316c315ed3d20e9a2f7087b7Neal Norwitz * Usage: 490802926482ca55342316c315ed3d20e9a2f7087b7Neal Norwitz * extern int old_var Py_DEPRECATED(2.3); 491802926482ca55342316c315ed3d20e9a2f7087b7Neal Norwitz * typedef int T1 Py_DEPRECATED(2.4); 492802926482ca55342316c315ed3d20e9a2f7087b7Neal Norwitz * extern int x() Py_DEPRECATED(2.5); 493802926482ca55342316c315ed3d20e9a2f7087b7Neal Norwitz */ 49449fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters#if defined(__GNUC__) && ((__GNUC__ >= 4) || \ 495f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) 496802926482ca55342316c315ed3d20e9a2f7087b7Neal Norwitz#define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__)) 497802926482ca55342316c315ed3d20e9a2f7087b7Neal Norwitz#else 4984643bd9a9cf43332992d10982c52debf3f0d980cTim Peters#define Py_DEPRECATED(VERSION_UNUSED) 499802926482ca55342316c315ed3d20e9a2f7087b7Neal Norwitz#endif 500802926482ca55342316c315ed3d20e9a2f7087b7Neal Norwitz 5011e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters/************************************************************************** 5021e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas WoutersPrototypes that are missing from the standard include files on some systems 5031e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters(and possibly only some versions of such systems.) 5041e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters 5051e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas WoutersPlease be conservative with adding new ones, document them and enclose them 5061e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Woutersin platform-specific #ifdefs. 5071e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters**************************************************************************/ 5081e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters 5091e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters#ifdef SOLARIS 5101e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters/* Unchecked */ 5111e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Woutersextern int gethostname(char *, int); 5121e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters#endif 5131e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters 5141e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters#ifdef HAVE__GETPTY 515f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou#include <sys/types.h> /* we need to import mode_t */ 5161e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Woutersextern char * _getpty(int *, int, mode_t, int); 5171e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters#endif 5181e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters 519f78e02b79862ac555fe052240bda55fa770a2d6fGeorg Brandl/* On QNX 6, struct termio must be declared by including sys/termio.h 520f78e02b79862ac555fe052240bda55fa770a2d6fGeorg Brandl if TCGETA, TCSETA, TCSETAW, or TCSETAF are used. sys/termio.h must 521f78e02b79862ac555fe052240bda55fa770a2d6fGeorg Brandl be included before termios.h or it will generate an error. */ 5222cbbed6541d7d79176ff7dcd0eafcada95b4fa80Stefan Krah#if defined(HAVE_SYS_TERMIO_H) && !defined(__hpux) 523f78e02b79862ac555fe052240bda55fa770a2d6fGeorg Brandl#include <sys/termio.h> 524f78e02b79862ac555fe052240bda55fa770a2d6fGeorg Brandl#endif 525f78e02b79862ac555fe052240bda55fa770a2d6fGeorg Brandl 5261e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters#if defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) 5271e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters#if !defined(HAVE_PTY_H) && !defined(HAVE_LIBUTIL_H) 5281e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters/* BSDI does not supply a prototype for the 'openpty' and 'forkpty' 5291e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters functions, even though they are included in libutil. */ 5301e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters#include <termios.h> 531aa2b22abf342dd000d243512c620d5b5022381cfSerhiy Storchakaextern int openpty(int *, int *, char *, struct termios *, struct winsize *); 532aa2b22abf342dd000d243512c620d5b5022381cfSerhiy Storchakaextern pid_t forkpty(int *, char *, struct termios *, struct winsize *); 5331e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters#endif /* !defined(HAVE_PTY_H) && !defined(HAVE_LIBUTIL_H) */ 5341e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters#endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) */ 5351e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters 5361e0c2f4bee43728930bd5f4dc77283f09c4ba004Thomas Wouters 53749fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters/* On 4.4BSD-descendants, ctype functions serves the whole range of 53849fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * wchar_t character set rather than single byte code points only. 53949fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * This characteristic can break some operations of string object 54049fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * including str.upper() and str.split() on UTF-8 locales. This 54149fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters * workaround was provided by Tim Robbins of FreeBSD project. 54249fd7fa4431da299196d74087df4a04f99f9c46fThomas Wouters */ 543b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang 544b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#ifdef __FreeBSD__ 545b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#include <osreldate.h> 5463d4559936a0e628c1c910c48b26907f2b2f2c9cbNed Deily#if (__FreeBSD_version >= 500040 && __FreeBSD_version < 602113) || \ 5473d4559936a0e628c1c910c48b26907f2b2f2c9cbNed Deily (__FreeBSD_version >= 700000 && __FreeBSD_version < 700054) || \ 5483d4559936a0e628c1c910c48b26907f2b2f2c9cbNed Deily (__FreeBSD_version >= 800000 && __FreeBSD_version < 800001) 549501aeffba3673fdce742054a5e0014dbe3ab40a7Ronald Oussoren# define _PY_PORT_CTYPE_UTF8_ISSUE 550501aeffba3673fdce742054a5e0014dbe3ab40a7Ronald Oussoren#endif 551501aeffba3673fdce742054a5e0014dbe3ab40a7Ronald Oussoren#endif 552501aeffba3673fdce742054a5e0014dbe3ab40a7Ronald Oussoren 553501aeffba3673fdce742054a5e0014dbe3ab40a7Ronald Oussoren 554501aeffba3673fdce742054a5e0014dbe3ab40a7Ronald Oussoren#if defined(__APPLE__) 555501aeffba3673fdce742054a5e0014dbe3ab40a7Ronald Oussoren# define _PY_PORT_CTYPE_UTF8_ISSUE 556501aeffba3673fdce742054a5e0014dbe3ab40a7Ronald Oussoren#endif 557501aeffba3673fdce742054a5e0014dbe3ab40a7Ronald Oussoren 558501aeffba3673fdce742054a5e0014dbe3ab40a7Ronald Oussoren#ifdef _PY_PORT_CTYPE_UTF8_ISSUE 5597659aab5e990dd33fab47bd29c445ed7202e0cacNed Deily#ifndef __cplusplus 5607659aab5e990dd33fab47bd29c445ed7202e0cacNed Deily /* The workaround below is unsafe in C++ because 5617659aab5e990dd33fab47bd29c445ed7202e0cacNed Deily * the <locale> defines these symbols as real functions, 5627659aab5e990dd33fab47bd29c445ed7202e0cacNed Deily * with a slightly different signature. 5637659aab5e990dd33fab47bd29c445ed7202e0cacNed Deily * See issue #10910 5647659aab5e990dd33fab47bd29c445ed7202e0cacNed Deily */ 565b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#include <ctype.h> 566b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#include <wctype.h> 567b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#undef isalnum 568b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#define isalnum(c) iswalnum(btowc(c)) 569b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#undef isalpha 570b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#define isalpha(c) iswalpha(btowc(c)) 571b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#undef islower 572b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#define islower(c) iswlower(btowc(c)) 573b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#undef isspace 574b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#define isspace(c) iswspace(btowc(c)) 575b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#undef isupper 576b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#define isupper(c) iswupper(btowc(c)) 577b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#undef tolower 578b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#define tolower(c) towlower(btowc(c)) 579b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#undef toupper 580b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#define toupper(c) towupper(btowc(c)) 581b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang#endif 5827659aab5e990dd33fab47bd29c445ed7202e0cacNed Deily#endif 583b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang 584b5047fd01948ab108edcc1b3c2c901d915814cfdHye-Shik Chang 5858235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond/* Declarations for symbol visibility. 5868235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond 5878235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond PyAPI_FUNC(type): Declares a public Python API function and return type 5884643bd9a9cf43332992d10982c52debf3f0d980cTim Peters PyAPI_DATA(type): Declares public Python data and its type 5898235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond PyMODINIT_FUNC: A Python module init function. If these functions are 5904643bd9a9cf43332992d10982c52debf3f0d980cTim Peters inside the Python core, they are private to the core. 5914643bd9a9cf43332992d10982c52debf3f0d980cTim Peters If in an extension module, it may be declared with 5928235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond external linkage depending on the platform. 5938235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond 5948235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond As a number of platforms support/require "__declspec(dllimport/dllexport)", 5958235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond we support a HAVE_DECLSPEC_DLL macro to save duplication. 5968235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond*/ 5978235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond 5984643bd9a9cf43332992d10982c52debf3f0d980cTim Peters/* 599f163d10fbe5d90aace7325400c3d597ed6c9e62aMichael W. Hudson All windows ports, except cygwin, are handled in PC/pyconfig.h. 600f163d10fbe5d90aace7325400c3d597ed6c9e62aMichael W. Hudson 601eb33e5ae79542371a165bdb67099d14b7557a698Skip Montanaro Cygwin is the only other autoconf platform requiring special 602eb33e5ae79542371a165bdb67099d14b7557a698Skip Montanaro linkage handling and it uses __declspec(). 6038235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond*/ 604eb33e5ae79542371a165bdb67099d14b7557a698Skip Montanaro#if defined(__CYGWIN__) 605f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define HAVE_DECLSPEC_DLL 6068235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond#endif 6078235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond 6083076559ea5d36d9795edc32e2fae7949b875d7efJason Tishler/* only get special linkage if built as shared or platform is Cygwin */ 6093076559ea5d36d9795edc32e2fae7949b875d7efJason Tishler#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) 610f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# if defined(HAVE_DECLSPEC_DLL) 611f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# ifdef Py_BUILD_CORE 612f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE 613f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE 61438615993b0b13729cc2afaa69686f5bff17547c4Daniel Stutzbach /* module init functions inside the core need no external linkage */ 61538615993b0b13729cc2afaa69686f5bff17547c4Daniel Stutzbach /* except for Cygwin to handle embedding */ 616f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# if defined(__CYGWIN__) 617f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define PyMODINIT_FUNC __declspec(dllexport) PyObject* 618f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# else /* __CYGWIN__ */ 619f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define PyMODINIT_FUNC PyObject* 620f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# endif /* __CYGWIN__ */ 621f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# else /* Py_BUILD_CORE */ 62238615993b0b13729cc2afaa69686f5bff17547c4Daniel Stutzbach /* Building an extension module, or an embedded situation */ 62338615993b0b13729cc2afaa69686f5bff17547c4Daniel Stutzbach /* public Python functions and data are imported */ 62438615993b0b13729cc2afaa69686f5bff17547c4Daniel Stutzbach /* Under Cygwin, auto-import functions to prevent compilation */ 62538615993b0b13729cc2afaa69686f5bff17547c4Daniel Stutzbach /* failures similar to those described at the bottom of 4.1: */ 62638615993b0b13729cc2afaa69686f5bff17547c4Daniel Stutzbach /* http://docs.python.org/extending/windows.html#a-cookbook-approach */ 627f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# if !defined(__CYGWIN__) 628f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE 629f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# endif /* !__CYGWIN__ */ 630f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE 63138615993b0b13729cc2afaa69686f5bff17547c4Daniel Stutzbach /* module init functions outside the core must be exported */ 632f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# if defined(__cplusplus) 633f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define PyMODINIT_FUNC extern "C" __declspec(dllexport) PyObject* 634f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# else /* __cplusplus */ 635f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define PyMODINIT_FUNC __declspec(dllexport) PyObject* 636f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# endif /* __cplusplus */ 637f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# endif /* Py_BUILD_CORE */ 638f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# endif /* HAVE_DECLSPEC */ 6398235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond#endif /* Py_ENABLE_SHARED */ 6408235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond 6418235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond/* If no external linkage macros defined by now, create defaults */ 6428235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond#ifndef PyAPI_FUNC 643f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define PyAPI_FUNC(RTYPE) RTYPE 6448235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond#endif 6458235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond#ifndef PyAPI_DATA 646f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define PyAPI_DATA(RTYPE) extern RTYPE 6478235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond#endif 6488235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond#ifndef PyMODINIT_FUNC 649f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# if defined(__cplusplus) 650f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define PyMODINIT_FUNC extern "C" PyObject* 651f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# else /* __cplusplus */ 652f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# define PyMODINIT_FUNC PyObject* 653f95a1b3c53bdd678b64aa608d4375660033460c3Antoine Pitrou# endif /* __cplusplus */ 6548235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond#endif 6558235ea1c3a5c57c9279668b5bff3d5f021ceb2d5Mark Hammond 656d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake/* limits.h constants that may be missing */ 657d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake 658d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#ifndef INT_MAX 659d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#define INT_MAX 2147483647 660d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#endif 661d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake 662d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#ifndef LONG_MAX 663d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#if SIZEOF_LONG == 4 664d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#define LONG_MAX 0X7FFFFFFFL 665d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#elif SIZEOF_LONG == 8 666d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#define LONG_MAX 0X7FFFFFFFFFFFFFFFL 667d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#else 668d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#error "could not set LONG_MAX in pyport.h" 669d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#endif 670d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#endif 671d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake 672d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#ifndef LONG_MIN 673d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#define LONG_MIN (-LONG_MAX-1) 674d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake#endif 675d5fadf75e4d18df61db41205ace0cda28d98eeaaFred Drake 676d57731f74bdaaf6bb5ce190b5ccebadad218ed2bTim Peters#ifndef LONG_BIT 677d57731f74bdaaf6bb5ce190b5ccebadad218ed2bTim Peters#define LONG_BIT (8 * SIZEOF_LONG) 678d57731f74bdaaf6bb5ce190b5ccebadad218ed2bTim Peters#endif 679d57731f74bdaaf6bb5ce190b5ccebadad218ed2bTim Peters 680d57731f74bdaaf6bb5ce190b5ccebadad218ed2bTim Peters#if LONG_BIT != 8 * SIZEOF_LONG 681d57731f74bdaaf6bb5ce190b5ccebadad218ed2bTim Peters/* 04-Oct-2000 LONG_BIT is apparently (mis)defined as 64 on some recent 682d57731f74bdaaf6bb5ce190b5ccebadad218ed2bTim Peters * 32-bit platforms using gcc. We try to catch that here at compile-time 683d57731f74bdaaf6bb5ce190b5ccebadad218ed2bTim Peters * rather than waiting for integer multiplication to trigger bogus 684d57731f74bdaaf6bb5ce190b5ccebadad218ed2bTim Peters * overflows. 685d57731f74bdaaf6bb5ce190b5ccebadad218ed2bTim Peters */ 686234fb632a376622ddf8b7c3fd600b9b434e21b14Andrew M. Kuchling#error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)." 687d57731f74bdaaf6bb5ce190b5ccebadad218ed2bTim Peters#endif 688d57731f74bdaaf6bb5ce190b5ccebadad218ed2bTim Peters 6897d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters#ifdef __cplusplus 6907d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters} 6917d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters#endif 6927d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters 693156910851e31d4e7f8d1441a3b05a44b31349adfNeil Schemenauer/* 694156910851e31d4e7f8d1441a3b05a44b31349adfNeil Schemenauer * Hide GCC attributes from compilers that don't support them. 695156910851e31d4e7f8d1441a3b05a44b31349adfNeil Schemenauer */ 696bd67d6f32c813eb3c17a07d305db7004c2dcee0aGuido van Rossum#if (!defined(__GNUC__) || __GNUC__ < 2 || \ 6977a98be2efbdc44a6271e3bf6117a1e6c77828414Skip Montanaro (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ) 69896aa0acef021f77d6e5b861201ccd952aa6f6469Neil Schemenauer#define Py_GCC_ATTRIBUTE(x) 69996aa0acef021f77d6e5b861201ccd952aa6f6469Neil Schemenauer#else 70096aa0acef021f77d6e5b861201ccd952aa6f6469Neil Schemenauer#define Py_GCC_ATTRIBUTE(x) __attribute__(x) 701156910851e31d4e7f8d1441a3b05a44b31349adfNeil Schemenauer#endif 702156910851e31d4e7f8d1441a3b05a44b31349adfNeil Schemenauer 70389f507fe8c497b3f70fdcecce8bc240f9af2bbe2Thomas Wouters/* 704058e31ef2aec3ea079cdf297fc0d4f40d3d9975aBenjamin Peterson * Specify alignment on compilers that support it. 705058e31ef2aec3ea079cdf297fc0d4f40d3d9975aBenjamin Peterson */ 706058e31ef2aec3ea079cdf297fc0d4f40d3d9975aBenjamin Peterson#if defined(__GNUC__) && __GNUC__ >= 3 707058e31ef2aec3ea079cdf297fc0d4f40d3d9975aBenjamin Peterson#define Py_ALIGNED(x) __attribute__((aligned(x))) 708058e31ef2aec3ea079cdf297fc0d4f40d3d9975aBenjamin Peterson#else 709058e31ef2aec3ea079cdf297fc0d4f40d3d9975aBenjamin Peterson#define Py_ALIGNED(x) 710058e31ef2aec3ea079cdf297fc0d4f40d3d9975aBenjamin Peterson#endif 711058e31ef2aec3ea079cdf297fc0d4f40d3d9975aBenjamin Peterson 7129ba301e589b47af776294804240cc10e08e38498Nicholas Bastin/* Eliminate end-of-loop code not reached warnings from SunPro C 7139ba301e589b47af776294804240cc10e08e38498Nicholas Bastin * when using do{...}while(0) macros 7149ba301e589b47af776294804240cc10e08e38498Nicholas Bastin */ 7159ba301e589b47af776294804240cc10e08e38498Nicholas Bastin#ifdef __SUNPRO_C 7169ba301e589b47af776294804240cc10e08e38498Nicholas Bastin#pragma error_messages (off,E_END_OF_LOOP_CODE_NOT_REACHED) 7179ba301e589b47af776294804240cc10e08e38498Nicholas Bastin#endif 7189ba301e589b47af776294804240cc10e08e38498Nicholas Bastin 719477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#ifndef Py_LL 720477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#define Py_LL(x) x##LL 721477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#endif 722477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters 723477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#ifndef Py_ULL 724477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#define Py_ULL(x) Py_LL(x##U) 725477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters#endif 726477c8d5e70240744d24631b18341ad892c8a8e1cThomas Wouters 7270c21214f3e583d541227df2239de377e796b55faBenjamin Peterson#define Py_VA_COPY va_copy 728f0f45142d52436d26ce8ed888c73496949caae90Alexander Belopolsky 729743e0cd6b5d59767aae2524700857f188ca1e80eChristian Heimes/* 7303962d5e8926e71496d111946cad534860300b437Georg Brandl * Convenient macros to deal with endianness of the platform. WORDS_BIGENDIAN is 731743e0cd6b5d59767aae2524700857f188ca1e80eChristian Heimes * detected by configure and defined in pyconfig.h. The code in pyconfig.h 7328e7586bd44cf2a117228bb8d2b2de52ae1e88fabTerry Jan Reedy * also takes care of Apple's universal builds. 733743e0cd6b5d59767aae2524700857f188ca1e80eChristian Heimes */ 734743e0cd6b5d59767aae2524700857f188ca1e80eChristian Heimes 735743e0cd6b5d59767aae2524700857f188ca1e80eChristian Heimes#ifdef WORDS_BIGENDIAN 736743e0cd6b5d59767aae2524700857f188ca1e80eChristian Heimes#define PY_BIG_ENDIAN 1 737743e0cd6b5d59767aae2524700857f188ca1e80eChristian Heimes#define PY_LITTLE_ENDIAN 0 738743e0cd6b5d59767aae2524700857f188ca1e80eChristian Heimes#else 739743e0cd6b5d59767aae2524700857f188ca1e80eChristian Heimes#define PY_BIG_ENDIAN 0 740743e0cd6b5d59767aae2524700857f188ca1e80eChristian Heimes#define PY_LITTLE_ENDIAN 1 741743e0cd6b5d59767aae2524700857f188ca1e80eChristian Heimes#endif 742743e0cd6b5d59767aae2524700857f188ca1e80eChristian Heimes 743918aa89483817c63c6e34a4cbdae0d17d19372e6Benjamin Peterson#ifdef Py_BUILD_CORE 7448fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower/* 7458fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower * Macros to protect CRT calls against instant termination when passed an 7468fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower * invalid parameter (issue23524). 7478fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower */ 7488fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower#if defined _MSC_VER && _MSC_VER >= 1900 7498fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower 7508fc8980c96f58a7f06e4e3133735807bd245c658Steve Dowerextern _invalid_parameter_handler _Py_silent_invalid_parameter_handler; 7518fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower#define _Py_BEGIN_SUPPRESS_IPH { _invalid_parameter_handler _Py_old_handler = \ 7528fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower _set_thread_local_invalid_parameter_handler(_Py_silent_invalid_parameter_handler); 7538fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower#define _Py_END_SUPPRESS_IPH _set_thread_local_invalid_parameter_handler(_Py_old_handler); } 7548fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower 7558fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower#else 7568fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower 7578fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower#define _Py_BEGIN_SUPPRESS_IPH 7588fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower#define _Py_END_SUPPRESS_IPH 7598fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower 7608fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower#endif /* _MSC_VER >= 1900 */ 7618fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower#endif /* Py_BUILD_CORE */ 7628fc8980c96f58a7f06e4e3133735807bd245c658Steve Dower 7631f9eb879d573454cd3ea321993e72ad2cca65c9dStefan Krah#ifdef __ANDROID__ 7641f9eb879d573454cd3ea321993e72ad2cca65c9dStefan Krah#include <android/api-level.h> 7651f9eb879d573454cd3ea321993e72ad2cca65c9dStefan Krah#endif 7661f9eb879d573454cd3ea321993e72ad2cca65c9dStefan Krah 7677d3a511a40a8c90eac66d3d59edbbe3c3d4559b1Tim Peters#endif /* Py_PYPORT_H */ 768