Package pyplusplus

Source Code for Package pyplusplus

 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   
 6  """Py++ - Boost.Python code generator 
 7  ======================================== 
 8   
 9  This package (together with the accompanying pygccxml package and 
10  U{Boost.Python<http://www.boost.org/libs/python/doc/index.html>}) 
11  assists you in creating Python bindings for a C/C++ library. This is 
12  done by parsing a set of header files that contain all the 
13  stuff you want to expose in Python. The result of this parsing 
14  step is a I{declaration tree} that represents all declarations found 
15  in the headers. You can then modify (decorate) this tree to customize 
16  the bindings. After that, a I{code creators} tree is created where 
17  each node represents a block of C++ source code. So you can change any piece of 
18  code befor it is written to disk. As a last step, these source code blocks are 
19  finally written into one or more C++ source files, which can then be compiled to 
20  generate the final Python module. 
21   
22  If you are just starting with U{Py++<http://www.language-binding.net>}, 
23  then consider to read documentation of L{module_builder} package. 
24  """ 
25   
26  import code_creators 
27  import file_writers 
28  import module_creator 
29  import code_repository 
30  import utils 
31  import decl_wrappers 
32  import module_builder 
33  import messages 
34   
35  from _logging_ import multi_line_formatter_t 
36   
37  __version__ = '1.0.0' 
38   
39  import pygccxml 
40  if not hasattr( pygccxml, '__revision__' ) or pygccxml.__revision__ < 1080: 
41      msg = 'This revision of Py++ requieres pygccxml revision to be ' \ 
42            'greater or equal to %d. ' \ 
43            'Please install right pygccxml version.'           
44      raise AssertionError( msg % pygccxml.__revision__ ) 
45   
46  #Known issues: 
47  #3. 
48  #~ > > 2. An other difference: when Py++ creates bindings for a set of 
49  #~ > > declarations, it 
50  #~ > > should (?) see all declarations that are going to be exported: 
51  #~ > >     reasons: 
52  #~ > >         to decide what class holder is. 
53  #~ > >             In one header file you define class, in an other you 
54  #~ > > define function that takes 
55  #~ > >             as argument shared_ptr to the class. 
56  #~ > 
57  #~ > You don't need to use a shared_ptr holder for that purpose.  The 
58  #~ > *only* reason you'd ever want to use a share_ptr holder is if you 
59  #~ > expect people to wrap functions taking non-const references to these 
60  #~ > shared_ptrs.  That is very rare -- it only happens when users want to 
61  #~ > replace one shared_ptr with another (possibly NULL) shared_ptr. 
62