Thread: [pygccxml-development] Project architecture and Py++
Brought to you by:
mbaas,
roman_yakovenko
From: Alexey S. <Ale...@ro...> - 2010-07-16 11:20:26
|
Hi, I'd like to use Python in the following way: 1) create a library (pyd) with some interfaces of the main program taken outside; generate then its code with py++ 2) create a set of scripts, that use this library 3) execute these scripts with boost::python from the main program Unwillingness to carry out any manual corrections of the generated code is an important part of the solution. The code is being generated authomatically, and only the script and the imported header are to be corrected in case of any problem. It is motivated by the fact, that the program is developing dynamically and it is better to see and solve immedeately the emerging discrepancies. Thus, the main task of implementation phase been solved already, but there arose the following problem: there appeared a desire to transfer into python our objects (from those being exposed). But all wrappers are being generated into the library from the point 1, and are in the cpp files. I'm ready to make the dependance of the main module on the library. But how to get the wrappers, if it is undesirable to correct the generated code manually? Thanks, Alex |
From: Benoit L. <ben...@mo...> - 2010-07-16 11:33:25
|
Alexey Stepanov wrote: > I’d like to use Python in the following way: > 1) create a library (pyd) with some interfaces of the main program taken > outside; generate then its code with py++ > 2) create a set of scripts, that use this library > 3) execute these scripts with boost::python from the main program > Unwillingness to carry out any manual corrections of the generated code > is an important part of the solution. The code is being generated > authomatically, and only the script and the imported header are to be > corrected in case of any problem. It is motivated by the fact, that > the program is developing dynamically and it is better to see and solve > immedeately the emerging discrepancies. > Thus, the main task of implementation phase been solved already, but > there arose the following problem: there appeared a desire to transfer > into python our objects (from those being exposed). But all wrappers are > being generated into the library from the point 1, and are in the > cpp files. > I’m ready to make the dependance of the main module on the library. But > how to get the wrappers, if it is undesirable to correct the generated > code manually? Was my answer on cplusplus-sig irrelevant? As you moved the discussion here, here it is for reference: --- Manually fixing the generated code is indeed a bad idea. You should take a look at the code injection feature of py++. What you can do is having your "binding generator" detecting some custom files and then injecting the code in the wrappers. - you define a "custom code" folder, - whenever your generator detects a "MyClass_injection.cpp" file, then it will inject the code of this file into the wrapper of 'MyClass', cls.add_wrapper_code( custom_code ) This is the basic approach, you may need to inject declaration code, registration code, some code at the module level and not the class level, handle templates, etc. but once you get the basic system in place, you can add more features as the need arise. This way, you don't have to change your original headers nor the generated code directly. Hope that helps, --- Best, Benoit |
From: Alexey S. <Ale...@ro...> - 2010-07-19 04:50:50
|
Thanks a lot the reply. If I understood your advice correctly, such an approach is not good for me, for it had got some important drawbacks. (i.e. I have to make header files, and cpp for them is to be generated with the code injection) Firstly, in any case this code is being located in the same cpp files with the wrappers, though I have not corrected them (time of compilation!). Secondly, before correction the code must be written first in the separate files, and then the generating script is be executed (time on gccxml!). Thirdly, the manually made headers have to be corrected separately from realizations. Looking at the generated file structure I surmised, that there is an ordinary possibility to move the wrapeprs into the header file (I have not found such a one) and simply include them into the generated file (I've found such a possibility). Do you have any ideas how to move in this direction? |
From: Roman Y. <rom...@gm...> - 2010-07-19 05:15:14
|
On Mon, Jul 19, 2010 at 7:50 AM, Alexey Stepanov <Ale...@ro...> wrote: > Thanks a lot the reply. If I understood your advice correctly, such an approach is not good for me, for it had got some important drawbacks. > (i.e. I have to make header files, and cpp for them is to be generated with the code injection) > > Firstly, in any case this code is being located in the same cpp files with the wrappers, though I have not corrected them (time of compilation!). > Secondly, before correction the code must be written first in the separate files, and then the generating script is be executed (time on gccxml!). > Thirdly, the manually made headers have to be corrected separately from realizations. > > Looking at the generated file structure I surmised, that there is an ordinary possibility to move the wrapeprs into the header file > (I have not found such a one) and simply include them into the generated file (I've found such a possibility). > > Do you have any ideas how to move in this direction? May be it is my English, but I am not able to understand you. What Benoit described, is just a way to integrate generated code with the hand-written one. If you don't like it, you can choose your own one. py++ is pretty flexible. -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |