1# Copyright 2004-2008 Roman Yakovenko. 2# Distributed under the Boost Software License, Version 1.0. (See 3# accompanying file LICENSE_1_0.txt or copy at 4# http://www.boost.org/LICENSE_1_0.txt) 5 6import os 7from . import code_creator 8from . import include_directories 9 10class include_t(code_creator.code_creator_t): 11 """ 12 Creates C++ code for include directive 13 """ 14 def __init__( self, header, user_defined=False, system=False ): 15 code_creator.code_creator_t.__init__(self) 16 self._header = include_directories.include_directories_t.normalize( header ) 17 self._include_dirs_optimization = None #This parameter will be set from bpmodule_t.create function 18 self._user_defined = user_defined 19 self._system = system 20 self.__created_code = None 21 22 @property 23 def is_user_defined(self): 24 return self._user_defined 25 26 @property 27 def is_system(self): 28 """Return True if header file is system( Boost.Python or `Py++` ) header file""" 29 return self._system 30 31 def _get_header(self): 32 return self._header 33 def _set_header(self, header): 34 self._header = include_directories.include_directories_t.normalize( header ) 35 header = property( _get_header, _set_header ) 36 37 def _get_include_dirs_optimization(self): 38 return self._include_dirs_optimization 39 def _set_include_dirs_optimization(self, include_dirs): 40 self._include_dirs_optimization = include_dirs 41 include_dirs_optimization = property( _get_include_dirs_optimization, _set_include_dirs_optimization ) 42 43 def _create_include_directive_code(self): 44 header = self.header.strip() 45 if header.startswith( '"' ) or header.startswith( '<' ): 46 return '#include %s' % self.header 47 48 if not self.include_dirs_optimization: 49 return '#include "%s"' % self.header 50 else: 51 normalize_header = self.include_dirs_optimization.normalize_header( self.header ) 52 if self.include_dirs_optimization.is_std(self.header): 53 return '#include <%s>' % normalize_header 54 else: 55 return '#include "%s"' % normalize_header 56 57 def _create_impl(self): 58 if not self.__created_code: 59 self.__created_code = self._create_include_directive_code() 60 return self.__created_code 61 62 def _get_system_files_impl( self ): 63 return [] 64 65 66class import_t(code_creator.code_creator_t): 67 """Creates Python import directive""" 68 def __init__( self, module_name ): 69 code_creator.code_creator_t.__init__(self) 70 self._module_name = module_name 71 72 def _create_impl(self): 73 return 'import %(module)s' % dict( module=os.path.splitext(self._module_name)[0] ) 74 75 def _get_system_files_impl( self ): 76 return [] 77