From 83966ef65e28254071c911dc2bc7fd9621abed47 Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Thu, 11 Oct 2007 08:10:20 +0200 Subject: [PATCH] imported added files of Pyrex 0.9.6.2 --- Cython/Compiler/Builtin.py | 91 ++++++++++++++++++++++++++++++++ Cython/Distutils/extension.py | 79 +++++++++++++++++++++++++++ Cython/DistutilsOld/__init__.py | 22 ++++++++ Cython/DistutilsOld/build_ext.py | 63 ++++++++++++++++++++++ Cython/Mac/setup.py | 12 +++++ 5 files changed, 267 insertions(+) create mode 100644 Cython/Compiler/Builtin.py create mode 100644 Cython/Distutils/extension.py create mode 100644 Cython/DistutilsOld/__init__.py create mode 100644 Cython/DistutilsOld/build_ext.py create mode 100644 Cython/Mac/setup.py diff --git a/Cython/Compiler/Builtin.py b/Cython/Compiler/Builtin.py new file mode 100644 index 00000000..b3e50c4b --- /dev/null +++ b/Cython/Compiler/Builtin.py @@ -0,0 +1,91 @@ +# +# Pyrex - Builtin Definitions +# + +from Symtab import BuiltinScope +from TypeSlots import Signature + +builtin_function_table = [ + # name, args, return, C API func, has py equiv = True + ('abs', "O", "O", "PyNumber_Absolute"), + #('chr', "", "", ""), + #('cmp', "", "", "", ""), # int PyObject_Cmp(PyObject *o1, PyObject *o2, int *result) + #('compile', "", "", ""), # PyObject* Py_CompileString( char *str, char *filename, int start) + ('delattr', "OO", "r", "PyObject_DelAttr"), + ('dir', "O", "O", "PyObject_Dir"), + ('divmod', "OO", "O", "PyNumber_Divmod"), + #('eval', "", "", ""), + #('execfile', "", "", ""), + #('filter', "", "", ""), + ('getattr', "OO", "O", "PyObject_GetAttr"), + ('hasattr', "OO", "i", "PyObject_HasAttr"), + ('hash', "O", "i", "PyObject_Hash"), + #('hex', "", "", ""), + #('id', "", "", ""), + #('input', "", "", ""), + ('intern', "s", "O", "PyString_InternFromString"), + ('isinstance', "OO", "i", "PyObject_IsInstance"), + ('issubclass', "OO", "i", "PyObject_IsSubclass"), + ('iter', "O", "O", "PyObject_GetIter"), + ('len', "O", "Z", "PyObject_Length"), + #('map', "", "", ""), + #('max', "", "", ""), + #('min', "", "", ""), + #('oct', "", "", ""), + # Not worth doing open, when second argument would become mandatory + #('open', "ss", "O", "PyFile_FromString"), + #('ord', "", "", ""), + ('pow', "OOO", "O", "PyNumber_Power"), + #('range', "", "", ""), + #('raw_input', "", "", ""), + #('reduce', "", "", ""), + ('reload', "O", "O", "PyImport_ReloadModule"), + ('repr', "O", "O", "PyObject_Repr"), + #('round', "", "", ""), + ('setattr', "OOO", "r", "PyObject_SetAttr"), + #('sum', "", "", ""), + #('unichr', "", "", ""), + #('unicode', "", "", ""), + #('vars', "", "", ""), + #('zip', "", "", ""), + # Can't do these easily until we have builtin type entries. + #('typecheck', "OO", "i", "PyObject_TypeCheck", False), + #('issubtype', "OO", "i", "PyType_IsSubtype", False), +] + +# Builtin types +# bool +# buffer +# classmethod +# dict +# enumerate +# file +# float +# int +# list +# long +# object +# property +# slice +# staticmethod +# super +# str +# tuple +# type +# xrange + +builtin_scope = BuiltinScope() + +def declare_builtin_func(name, args, ret, cname, py_equiv = 1): + sig = Signature(args, ret) + type = sig.function_type() + builtin_scope.declare_builtin_cfunction(name, type, cname, py_equiv) + +def init_builtin_funcs(): + for desc in builtin_function_table: + declare_builtin_func(*desc) + +def init_builtins(): + init_builtin_funcs() + +init_builtins() diff --git a/Cython/Distutils/extension.py b/Cython/Distutils/extension.py new file mode 100644 index 00000000..bb30cc14 --- /dev/null +++ b/Cython/Distutils/extension.py @@ -0,0 +1,79 @@ +"""Pyrex.Distutils.extension + +Provides a modified Extension class, that understands hou to describe +Pyrex extension modules in setup scripts.""" + +__revision__ = "$Id:$" + +import os, string, sys +from types import * +import distutils.extension as _Extension + +try: + import warnings +except ImportError: + warnings = None + +class Extension(_Extension.Extension): + _Extension.Extension.__doc__ + \ + """pyrex_include_dirs : [string] + list of directories to search for Pyrex header files (.pxd) (in + Unix form for portability) + pyrex_create_listing_file : boolean + write pyrex error messages to a listing (.lis) file. + pyrex_cplus : boolean + use the C++ compiler for compiling and linking. + pyrex_c_in_temp : boolean + put generated C files in temp directory. + pyrex_gen_pxi : boolean + generate .pxi file for public declarations + """ + + # When adding arguments to this constructor, be sure to update + # user_options.extend in build_ext.py. + def __init__ (self, name, sources, + include_dirs = None, + define_macros = None, + undef_macros = None, + library_dirs = None, + libraries = None, + runtime_library_dirs = None, + extra_objects = None, + extra_compile_args = None, + extra_link_args = None, + export_symbols = None, + swig_opts = None, + depends = None, + language = None, + pyrex_include_dirs = None, + pyrex_create_listing = 0, + pyrex_cplus = 0, + pyrex_c_in_temp = 0, + pyrex_gen_pxi = 0, + **kw): + + _Extension.Extension.__init__(self, name, sources, + include_dirs = include_dirs, + define_macros = define_macros, + undef_macros = undef_macros, + library_dirs = library_dirs, + libraries = libraries, + runtime_library_dirs = runtime_library_dirs, + extra_objects = extra_objects, + extra_compile_args = extra_compile_args, + extra_link_args = extra_link_args, + export_symbols = export_symbols, + swig_opts = swig_opts, + depends = depends, + language = language, + **kw) + + self.pyrex_include_dirs = pyrex_include_dirs or [] + self.pyrex_create_listing = pyrex_create_listing + self.pyrex_cplus = pyrex_cplus + self.pyrex_c_in_temp = pyrex_c_in_temp + self.pyrex_gen_pxi = pyrex_gen_pxi + +# class Extension + +read_setup_file = _Extension.read_setup_file diff --git a/Cython/DistutilsOld/__init__.py b/Cython/DistutilsOld/__init__.py new file mode 100644 index 00000000..5033ac04 --- /dev/null +++ b/Cython/DistutilsOld/__init__.py @@ -0,0 +1,22 @@ +# July 2002, Graham Fawcett + +# + +# this hack was inspired by the way Thomas Heller got py2exe + +# to appear as a distutil command + +# + +# we replace distutils.command.build_ext with our own version + +# and keep the old one under the module name _build_ext, + +# so that *our* build_ext can make use of it. + + + +from build_ext import build_ext + + + diff --git a/Cython/DistutilsOld/build_ext.py b/Cython/DistutilsOld/build_ext.py new file mode 100644 index 00000000..95c0a745 --- /dev/null +++ b/Cython/DistutilsOld/build_ext.py @@ -0,0 +1,63 @@ +# Subclasses disutils.command.build_ext, +# replacing it with a Pyrex version that compiles pyx->c +# before calling the original build_ext command. +# July 2002, Graham Fawcett +# Modified by Darrell Gallion +# to allow inclusion of .c files along with .pyx files. +# Pyrex is (c) Greg Ewing. + +import distutils.command.build_ext +#import Pyrex.Compiler.Main +from Pyrex.Compiler.Main import CompilationOptions, default_options, compile +from Pyrex.Compiler.Errors import PyrexError +from distutils.dep_util import newer +import os +import sys + +def replace_suffix(path, new_suffix): + return os.path.splitext(path)[0] + new_suffix + +class build_ext (distutils.command.build_ext.build_ext): + + description = "compile Pyrex scripts, then build C/C++ extensions (compile/link to build directory)" + + def finalize_options (self): + distutils.command.build_ext.build_ext.finalize_options(self) + + # The following hack should no longer be needed. + if 0: + # compiling with mingw32 gets an "initializer not a constant" error + # doesn't appear to happen with MSVC! + # so if we are compiling with mingw32, + # switch to C++ mode, to avoid the problem + if self.compiler == 'mingw32': + self.swig_cpp = 1 + + def swig_sources (self, sources, extension = None): + if not self.extensions: + return + + # collect the names of the source (.pyx) files + pyx_sources = [] + pyx_sources = [source for source in sources if source.endswith('.pyx')] + other_sources = [source for source in sources if not source.endswith('.pyx')] + + #suffix = self.swig_cpp and '.cpp' or '.c' + suffix = '.c' + for pyx in pyx_sources: + # should I raise an exception if it doesn't exist? + if os.path.exists(pyx): + source = pyx + target = replace_suffix(source, suffix) + if newer(source, target) or self.force: + self.pyrex_compile(source) + + return [replace_suffix(src, suffix) for src in pyx_sources] + other_sources + + def pyrex_compile(self, source): + options = CompilationOptions(default_options, + include_path = self.include_dirs) + result = compile(source, options) + if result.num_errors <> 0: + sys.exit(1) + diff --git a/Cython/Mac/setup.py b/Cython/Mac/setup.py new file mode 100644 index 00000000..f0da28ed --- /dev/null +++ b/Cython/Mac/setup.py @@ -0,0 +1,12 @@ +# +# Setup file for compiling _Filemodule_patched.c +# + +from distutils.core import setup +from distutils.extension import Extension + +setup( + ext_modules = [ + Extension("_File", ["_Filemodule_patched.c"]) + ] +) -- 2.26.2