215 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			215 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								//  (C) Copyright David Abrahams 2000.
							 | 
						||
| 
								 | 
							
								// Distributed under the Boost Software License, Version 1.0. (See
							 | 
						||
| 
								 | 
							
								// accompanying file LICENSE_1_0.txt or copy at
							 | 
						||
| 
								 | 
							
								// http://www.boost.org/LICENSE_1_0.txt)
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  The author gratefully acknowleges the support of Dragon Systems, Inc., in
							 | 
						||
| 
								 | 
							
								//  producing this work.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  This file serves as a wrapper around <Python.h> which allows it to be
							 | 
						||
| 
								 | 
							
								//  compiled with GCC 2.95.2 under Win32 and which disables the default MSVC
							 | 
						||
| 
								 | 
							
								//  behavior so that a program may be compiled in debug mode without requiring a
							 | 
						||
| 
								 | 
							
								//  special debugging build of the Python library.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  To use the Python debugging library, #define BOOST_DEBUG_PYTHON on the
							 | 
						||
| 
								 | 
							
								//  compiler command-line.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Revision History:
							 | 
						||
| 
								 | 
							
								// 05 Mar 01  Suppress warnings under Cygwin with Python 2.0 (Dave Abrahams)
							 | 
						||
| 
								 | 
							
								// 04 Mar 01  Rolled in some changes from the Dragon fork (Dave Abrahams)
							 | 
						||
| 
								 | 
							
								// 01 Mar 01  define PyObject_INIT() for Python 1.x (Dave Abrahams)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef _DEBUG
							 | 
						||
| 
								 | 
							
								# ifndef BOOST_DEBUG_PYTHON
							 | 
						||
| 
								 | 
							
								#  ifdef _MSC_VER  
							 | 
						||
| 
								 | 
							
								    // VC8.0 will complain if system headers are #included both with
							 | 
						||
| 
								 | 
							
								    // and without _DEBUG defined, so we have to #include all the
							 | 
						||
| 
								 | 
							
								    // system headers used by pyconfig.h right here.
							 | 
						||
| 
								 | 
							
								#   include <stddef.h>
							 | 
						||
| 
								 | 
							
								#   include <stdarg.h>
							 | 
						||
| 
								 | 
							
								#   include <stdio.h>
							 | 
						||
| 
								 | 
							
								#   include <stdlib.h>
							 | 
						||
| 
								 | 
							
								#   include <assert.h>
							 | 
						||
| 
								 | 
							
								#   include <errno.h>
							 | 
						||
| 
								 | 
							
								#   include <ctype.h>
							 | 
						||
| 
								 | 
							
								#   include <wchar.h>
							 | 
						||
| 
								 | 
							
								#   include <basetsd.h>
							 | 
						||
| 
								 | 
							
								#   include <io.h>
							 | 
						||
| 
								 | 
							
								#   include <limits.h>
							 | 
						||
| 
								 | 
							
								#   include <float.h>
							 | 
						||
| 
								 | 
							
								#   include <string.h>
							 | 
						||
| 
								 | 
							
								#   include <math.h>
							 | 
						||
| 
								 | 
							
								#   include <time.h>
							 | 
						||
| 
								 | 
							
								#  endif
							 | 
						||
| 
								 | 
							
								#  undef _DEBUG // Don't let Python force the debug library just because we're debugging.
							 | 
						||
| 
								 | 
							
								#  define DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H
							 | 
						||
| 
								 | 
							
								# endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# include <pyconfig.h>
							 | 
						||
| 
								 | 
							
								# if defined(_SGI_COMPILER_VERSION) && _SGI_COMPILER_VERSION >= 740
							 | 
						||
| 
								 | 
							
								#  undef _POSIX_C_SOURCE
							 | 
						||
| 
								 | 
							
								#  undef _XOPEN_SOURCE
							 | 
						||
| 
								 | 
							
								#  undef HAVE_STDINT_H // undo Python 2.5.1 define
							 | 
						||
| 
								 | 
							
								# endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Python's LongObject.h helpfully #defines ULONGLONG_MAX for us,
							 | 
						||
| 
								 | 
							
								// which confuses Boost's config
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								#include <limits.h>
							 | 
						||
| 
								 | 
							
								#ifndef ULONG_MAX
							 | 
						||
| 
								 | 
							
								# define BOOST_PYTHON_ULONG_MAX_UNDEFINED
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#ifndef LONGLONG_MAX
							 | 
						||
| 
								 | 
							
								# define BOOST_PYTHON_LONGLONG_MAX_UNDEFINED
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#ifndef ULONGLONG_MAX
							 | 
						||
| 
								 | 
							
								# define BOOST_PYTHON_ULONGLONG_MAX_UNDEFINED
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Get ahold of Python's version number
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								#include <patchlevel.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if PY_MAJOR_VERSION<2 || PY_MAJOR_VERSION==2 && PY_MINOR_VERSION<2
							 | 
						||
| 
								 | 
							
								#error Python 2.2 or higher is required for this version of Boost.Python.
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Some things we need in order to get Python.h to work with compilers other
							 | 
						||
| 
								 | 
							
								// than MSVC on Win32
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								#if defined(_WIN32) || defined(__CYGWIN__)
							 | 
						||
| 
								 | 
							
								# if defined(__GNUC__) && defined(__CYGWIN__)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#  if defined(__LP64__)
							 | 
						||
| 
								 | 
							
								#   define SIZEOF_LONG 8
							 | 
						||
| 
								 | 
							
								#  else
							 | 
						||
| 
								 | 
							
								#   define SIZEOF_LONG 4
							 | 
						||
| 
								 | 
							
								#  endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#  if PY_MAJOR_VERSION < 2 || PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef int pid_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#   if defined(__LP64__)
							 | 
						||
| 
								 | 
							
								#    define WORD_BIT 64
							 | 
						||
| 
								 | 
							
								#   else
							 | 
						||
| 
								 | 
							
								#    define WORD_BIT 32
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								#   define hypot _hypot
							 | 
						||
| 
								 | 
							
								#   include <stdio.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#   if PY_MAJOR_VERSION < 2
							 | 
						||
| 
								 | 
							
								#    define HAVE_CLOCK
							 | 
						||
| 
								 | 
							
								#    define HAVE_STRFTIME
							 | 
						||
| 
								 | 
							
								#    define HAVE_STRERROR
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#   define NT_THREADS
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#   ifndef NETSCAPE_PI
							 | 
						||
| 
								 | 
							
								#    define USE_SOCKET
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#   ifdef USE_DL_IMPORT
							 | 
						||
| 
								 | 
							
								#    define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#   ifdef USE_DL_EXPORT
							 | 
						||
| 
								 | 
							
								#    define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE
							 | 
						||
| 
								 | 
							
								#    define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE
							 | 
						||
| 
								 | 
							
								#   endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#   define HAVE_LONG_LONG 1
							 | 
						||
| 
								 | 
							
								#   define LONG_LONG long long
							 | 
						||
| 
								 | 
							
								#  endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# elif defined(__MWERKS__)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#  ifndef _MSC_VER
							 | 
						||
| 
								 | 
							
								#   define PY_MSC_VER_DEFINED_FROM_WRAP_PYTHON_H 1
							 | 
						||
| 
								 | 
							
								#   define _MSC_VER 900
							 | 
						||
| 
								 | 
							
								#  endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#  undef hypot // undo the evil #define left by Python.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# elif defined(__BORLANDC__)
							 | 
						||
| 
								 | 
							
								#  undef HAVE_HYPOT
							 | 
						||
| 
								 | 
							
								#  define HAVE_HYPOT 1
							 | 
						||
| 
								 | 
							
								# endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // _WIN32
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION == 2 && PY_MICRO_VERSION < 2
							 | 
						||
| 
								 | 
							
								# include <boost/python/detail/python22_fixed.h>
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								# include <Python.h>
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef BOOST_PYTHON_ULONG_MAX_UNDEFINED
							 | 
						||
| 
								 | 
							
								# undef ULONG_MAX
							 | 
						||
| 
								 | 
							
								# undef BOOST_PYTHON_ULONG_MAX_UNDEFINED
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef BOOST_PYTHON_LONGLONG_MAX_UNDEFINED
							 | 
						||
| 
								 | 
							
								# undef LONGLONG_MAX
							 | 
						||
| 
								 | 
							
								# undef BOOST_PYTHON_LONGLONG_MAX_UNDEFINED
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef BOOST_PYTHON_ULONGLONG_MAX_UNDEFINED
							 | 
						||
| 
								 | 
							
								# undef ULONGLONG_MAX
							 | 
						||
| 
								 | 
							
								# undef BOOST_PYTHON_ULONGLONG_MAX_UNDEFINED
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef PY_MSC_VER_DEFINED_FROM_WRAP_PYTHON_H
							 | 
						||
| 
								 | 
							
								# undef _MSC_VER
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H
							 | 
						||
| 
								 | 
							
								# undef DEBUG_UNDEFINED_FROM_WRAP_PYTHON_H
							 | 
						||
| 
								 | 
							
								# define _DEBUG
							 | 
						||
| 
								 | 
							
								# ifdef _CRT_NOFORCE_MANIFEST_DEFINED_FROM_WRAP_PYTHON_H
							 | 
						||
| 
								 | 
							
								#  undef _CRT_NOFORCE_MANIFEST_DEFINED_FROM_WRAP_PYTHON_H
							 | 
						||
| 
								 | 
							
								#  undef _CRT_NOFORCE_MANIFEST
							 | 
						||
| 
								 | 
							
								# endif
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if !defined(PY_MAJOR_VERSION) || PY_MAJOR_VERSION < 2
							 | 
						||
| 
								 | 
							
								# define PyObject_INIT(op, typeobj) \
							 | 
						||
| 
								 | 
							
								        ( (op)->ob_type = (typeobj), _Py_NewReference((PyObject *)(op)), (op) )
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Define Python 3 macros for Python 2.x
							 | 
						||
| 
								 | 
							
								#if PY_VERSION_HEX < 0x02060000
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# define Py_TYPE(o)    (((PyObject*)(o))->ob_type)
							 | 
						||
| 
								 | 
							
								# define Py_REFCNT(o)  (((PyObject*)(o))->ob_refcnt)
							 | 
						||
| 
								 | 
							
								# define Py_SIZE(o)    (((PyVarObject*)(o))->ob_size)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# define PyVarObject_HEAD_INIT(type, size) \
							 | 
						||
| 
								 | 
							
								        PyObject_HEAD_INIT(type) size,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __MWERKS__
							 | 
						||
| 
								 | 
							
								# pragma warn_possunwant off
							 | 
						||
| 
								 | 
							
								#elif _MSC_VER
							 | 
						||
| 
								 | 
							
								# pragma warning(disable:4786)
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if defined(HAVE_LONG_LONG)
							 | 
						||
| 
								 | 
							
								# if defined(PY_LONG_LONG)
							 | 
						||
| 
								 | 
							
								#  define BOOST_PYTHON_LONG_LONG PY_LONG_LONG
							 | 
						||
| 
								 | 
							
								# elif defined(LONG_LONG)
							 | 
						||
| 
								 | 
							
								#  define BOOST_PYTHON_LONG_LONG LONG_LONG
							 | 
						||
| 
								 | 
							
								# else
							 | 
						||
| 
								 | 
							
								#  error "HAVE_LONG_LONG defined but not PY_LONG_LONG or LONG_LONG"
							 | 
						||
| 
								 | 
							
								# endif
							 | 
						||
| 
								 | 
							
								#endif
							 |