diff options
Diffstat (limited to 'scipy/weave/base_info.py')
-rw-r--r-- | scipy/weave/base_info.py | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/scipy/weave/base_info.py b/scipy/weave/base_info.py new file mode 100644 index 000000000..7e2b1ad35 --- /dev/null +++ b/scipy/weave/base_info.py @@ -0,0 +1,141 @@ +""" + base_info holds classes that define the information + needed for building C++ extension modules for Python that + handle different data types. The information includes + such as include files, libraries, and even code snippets. + + base_info -- base class for cxx_info, blitz_info, etc. + info_list -- a handy list class for working with multiple + info classes at the same time. +""" +import os +import UserList + +class base_info: + _warnings =[] + _headers = [] + _include_dirs = [] + _libraries = [] + _library_dirs = [] + _support_code = [] + _module_init_code = [] + _sources = [] + _define_macros = [] + _undefine_macros = [] + _extra_compile_args = [] + _extra_link_args = [] + compiler = '' + def set_compiler(self,compiler): + self.check_compiler(compiler) + self.compiler = compiler + # it would probably be better to specify what the arguments are + # to avoid confusion, but I don't think these classes will get + # very complicated, and I don't really know the variety of things + # that should be passed in at this point. + def check_compiler(self,compiler): + pass + def warnings(self): + return self._warnings + def headers(self): + return self._headers + def include_dirs(self): + return self._include_dirs + def libraries(self): + return self._libraries + def library_dirs(self): + return self._library_dirs + def support_code(self): + return self._support_code + def module_init_code(self): + return self._module_init_code + def sources(self): + return self._sources + def define_macros(self): + return self._define_macros + def undefine_macros(self): + return self._undefine_macros + def extra_compile_args(self): + return self._extra_compile_args + def extra_link_args(self): + return self._extra_link_args + +class custom_info(base_info): + def __init__(self): + self._warnings =[] + self._headers = [] + self._include_dirs = [] + self._libraries = [] + self._library_dirs = [] + self._support_code = [] + self._module_init_code = [] + self._sources = [] + self._define_macros = [] + self._undefine_macros = [] + self._extra_compile_args = [] + self._extra_link_args = [] + + def add_warning(self,warning): + self._warnings.append(warning) + def add_header(self,header): + self._headers.append(header) + def add_include_dir(self,include_dir): + self._include_dirs.append(include_dir) + def add_library(self,library): + self._libraries.append(library) + def add_library_dir(self,library_dir): + self._library_dirs.append(library_dir) + def add_support_code(self,support_code): + self._support_code.append(support_code) + def add_module_init_code(self,module_init_code): + self._module_init_code.append(module_init_code) + def add_source(self,source): + self._sources.append(source) + def add_define_macro(self,define_macro): + self._define_macros.append(define_macro) + def add_undefine_macro(self,undefine_macro): + self._undefine_macros.append(undefine_macro) + def add_extra_compile_arg(self,compile_arg): + return self._extra_compile_args.append(compile_arg) + def add_extra_link_arg(self,link_arg): + return self._extra_link_args.append(link_arg) + +class info_list(UserList.UserList): + def get_unique_values(self,attribute): + all_values = [] + for info in self: + vals = eval('info.'+attribute+'()') + all_values.extend(vals) + return unique_values(all_values) + + def extra_compile_args(self): + return self.get_unique_values('extra_compile_args') + def extra_link_args(self): + return self.get_unique_values('extra_link_args') + def sources(self): + return self.get_unique_values('sources') + def define_macros(self): + return self.get_unique_values('define_macros') + def sources(self): + return self.get_unique_values('sources') + def warnings(self): + return self.get_unique_values('warnings') + def headers(self): + return self.get_unique_values('headers') + def include_dirs(self): + return self.get_unique_values('include_dirs') + def libraries(self): + return self.get_unique_values('libraries') + def library_dirs(self): + return self.get_unique_values('library_dirs') + def support_code(self): + return self.get_unique_values('support_code') + def module_init_code(self): + return self.get_unique_values('module_init_code') + +def unique_values(lst): + all_values = [] + for value in lst: + if value not in all_values or value == '-framework': + all_values.append(value) + return all_values + |