Update of /cvsroot/pygccxml/source/pyplusplus/examples/tnfox
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31188/pyplusplus/examples/tnfox
Modified Files:
call_policies.py create_tnfox.py declarations_to_exclude.py
files_to_exclude.py
Log Message:
1. adding most of the aliases needed to functionality needed by user to module builder package
2. updating examples and cleaning unittests
Index: files_to_exclude.py
===================================================================
RCS file: /cvsroot/pygccxml/source/pyplusplus/examples/tnfox/files_to_exclude.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** files_to_exclude.py 16 Nov 2005 07:01:12 -0000 1.2
--- files_to_exclude.py 29 Mar 2006 04:26:58 -0000 1.3
***************
*** 5,8 ****
--- 5,10 ----
# http://www.boost.org/LICENSE_1_0.txt)
+ import os
+
files = [
"FXArray.h"
***************
*** 35,36 ****
--- 37,45 ----
, "QThread.h"
]
+
+ def is_excluded( decl ):
+ global files
+ if None is decl.location:
+ return False
+ file_name = os.path.split( decl.location.file_name )[1]
+ return file_name in files
Index: create_tnfox.py
===================================================================
RCS file: /cvsroot/pygccxml/source/pyplusplus/examples/tnfox/create_tnfox.py,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** create_tnfox.py 28 Feb 2006 07:31:33 -0000 1.15
--- create_tnfox.py 29 Mar 2006 04:26:58 -0000 1.16
***************
*** 8,11 ****
--- 8,12 ----
import time
from environment import settings
+
from pygccxml import parser
from pygccxml import declarations
***************
*** 14,17 ****
--- 15,20 ----
from pyplusplus import file_writers
from pyplusplus import utils as pypp_utils
+ from pyplusplus import decl_wrappers
+ from pyplusplus import module_builder
import aliases
***************
*** 22,92 ****
import declarations_to_exclude
! def should_stay(decl):
! if isinstance( decl, declarations.namespace_t ):
! return True
! fname = declarations.full_name( decl )
! if not fname.startswith( '::FX' ):
! return False
! if fname in declarations_to_exclude.declarations:
! return False
! if decl.name.startswith('FXIPCMsg'):
! return False
! file_name = os.path.split( decl.location.file_name )[1]
! #pyplusplus could be very powerfull :-)
! if declarations_to_exclude.deprecated.has_key( file_name ):
! if decl.location.line in declarations_to_exclude.deprecated[ file_name ]:
! return False
! if fname.startswith( '::FX::Pol::' ):
! return False
! file_name = os.path.split( decl.location.file_name )[1]
! if file_name in files_to_exclude.files:
! return False
! if isinstance( decl, declarations.constructor_t ) \
! and decl.name == 'FXFunctorTarget' \
! and len(decl.arguments) == 1:
! return False #there are some problems to compile this constructor
! if fname.startswith('::FX::QValueList<FX::Pol::knowReferrers::ReferrerEntry>') or fname.startswith('::FX::QPtrVector<FX::Generic::BoundFunctorV>'):
! return False
#Niall? wrapper for this function could not be compiled
! if decl.name == 'bind' and decl.parent.name == 'FXSQLDBStatement' and len( decl.arguments ) == 3:
! return False
! if isinstance( decl, declarations.calldef_t ):
#I want to exclude all functions that returns pointer to pointer
#and returns pointer to fundamental type
! if declarations.is_pointer( decl.return_type ):
! temp = declarations.remove_pointer( decl.return_type )
if declarations.is_fundamental( temp ) and not declarations.is_const(temp):
! return False
! temp = declarations.remove_cv( decl.return_type )
temp = declarations.remove_pointer( temp )
if declarations.is_pointer( temp ):
! return False
!
! return True
!
! def set_call_policies( decl ):
#first of all call policies defined within data base
! full_name = declarations.full_name( decl )
! if call_policies.db.has_key( full_name ):
! return call_policies.db[ full_name ]
! if 'FXGL' in decl.parent.name and decl.name == 'copy':
! return code_creators.return_value_policy( code_creators.manage_new_object )
! if 'QPtrVector<' in decl.parent.name and decl.name == 'take':
! # Set reference_existing object only on the overload not returning a bool
! if declarations.is_pointer( decl.return_type ):
! return code_creators.return_value_policy( code_creators.reference_existing_object )
! if decl.name == 'manufacture':
! return code_creators.return_value_policy( code_creators.manage_new_object )
! if decl.name == 'getMetaClass':
! return code_creators.return_value_policy( code_creators.reference_existing_object )
! #second build in
! built_in_resolver = module_creator.built_in_resolver_t()
! policy = built_in_resolver( decl )
! if policy:
! return policy
#third calculated
! return_by_value = code_creators.return_value_policy( code_creators.return_by_value )
! return_internal_ref = code_creators.return_internal_reference()
const_t = declarations.const_t
pointer_t = declarations.pointer_t
--- 25,77 ----
import declarations_to_exclude
! def filter_decls(mb):
! mb.global_ns.exclude()
! fx_ns = mb.namespace( 'FX' )
! fx_ns.include()
! fx_ns.decls( declarations_to_exclude.is_excluded ).exclude()
! fx_ns.decls( lambda decl: decl.name.startswith('FXIPCMsg') ).exclude()
! fx_ns.namespace( 'Pol' ).exclude()
! fx_ns.decls( files_to_exclude.is_excluded ).exclude()
! #find FXFunctorTarget constructor that takes 1 argument of some type
! fx_ns.constructors( name='FXFunctorTarget', arg_type=[None] ).exclude()
! fx_ns.class_( 'QValueList<FX::Pol::knowReferrers::ReferrerEntry>').exclude()
! fx_ns.class_( 'QPtrVector<FX::Generic::BoundFunctorV>').exclude()
#Niall? wrapper for this function could not be compiled
! FXSQLDBStatement = fx_ns.class_( 'FXSQLDBStatement' )
! FXSQLDBStatement.member_function( name='bind', arg_types=[None,None,None] ).exclude()
!
! for func in fx_ns.calldefs():
#I want to exclude all functions that returns pointer to pointer
#and returns pointer to fundamental type
! if declarations.is_pointer( func.return_type ):
! temp = declarations.remove_pointer( func.return_type )
if declarations.is_fundamental( temp ) and not declarations.is_const(temp):
! func.exclude()
! temp = declarations.remove_cv( func.return_type )
temp = declarations.remove_pointer( temp )
if declarations.is_pointer( temp ):
! func.exclude()
! def set_call_policies(mb):
#first of all call policies defined within data base
! for fname, call_pol in call_policies.db.items():
! mb.calldefs( fname ).call_policies = call_pol
!
! copy_funcs = mb.calldefs( lambda decl: 'FXGL' in decl.parent.name and decl.name == 'copy' )
! copy_funcs.call_policies = decl_wrappers.return_value_policy( decl_wrappers.manage_new_object )
!
! take_funcs = mb.calldefs( lambda decl: 'QPtrVector<' in decl.parent.name \
! and decl.name == 'take' \
! and declarations.is_pointer( decl.return_type ) )
! # Set reference_existing object only on the overload not returning a bool
! take_funcs.call_policies = decl_wrappers.return_value_policy( decl_wrappers.reference_existing_object )
! mb.calldefs( 'manufacture' ).call_policies \
! = decl_wrappers.return_value_policy( decl_wrappers.manage_new_object )
! mb.calldefs( 'getMetaClass' ).call_policies \
! = decl_wrappers.return_value_policy( decl_wrappers.reference_existing_object )
!
#third calculated
! return_by_value = decl_wrappers.return_value_policy( decl_wrappers.return_by_value )
! return_internal_ref = decl_wrappers.return_internal_reference()
const_t = declarations.const_t
pointer_t = declarations.pointer_t
***************
*** 102,132 ****
for type_, policy in system_wide.items():
! if declarations.is_same( type_, decl.return_type ):
! return policy
- if isinstance( decl, declarations.casting_operator_t ):
- #Niall?
- if decl.parent.name in ( 'FXVec4d', 'FXVec4f', 'FXVec3d', 'FXVec3f', 'QMemArray<unsigned char>' ):
- return return_internal_ref
- #better solution could be implemented
- #casting_operator_t : ::FX::FXVec4d::operator 38
- #---> ::FX::FXVec3d & ( ::FX::FXVec4d::* )( )
- #casting_operator_t : ::FX::FXVec4f::operator 40
- #---> ::FX::FXVec3f & ( ::FX::FXVec4f::* )( )
- #casting_operator_t : ::FX::FXVec3d::operator 31
- #---> ::FX::FXVec2d & ( ::FX::FXVec3d::* )( )
- #casting_operator_t : ::FX::FXVec3f::operator 36
- #---> ::FX::FXVec2f & ( ::FX::FXVec3f::* )( )
- #casting_operator_t : ::FX::QMemArray<unsigned char>::operator 24
- #---> unsigned char const * ( ::FX::QMemArray<unsigned char>::* )( ) const
return None
! def fix_default_args( code_creator ):
! for arg in code_creator.declaration.arguments:
! if arg.default_value == 'FX::FXString::null':
! arg.default_value = 'FX::FXString::nullStr()'
! def customize_module( extmodule ):
extmodule.license = customization_data.license
--- 87,113 ----
for type_, policy in system_wide.items():
! mb.calldefs( return_type=type_ ).call_policies = policy
!
! for name in 'FXVec4d', 'FXVec4f', 'FXVec3d', 'FXVec3f', 'QMemArray<unsigned char>':
! mb.casting_operators( name ).call_policies = return_internal_ref
return None
! def customize_decls( mb ):
! classes = mb.classes()
! classes.always_expose_using_scope = True #better error reporting from compiler
! classes.redefine_operators = True #redefine all operators found in base classes
! for class_ in classes:
! if class_.name in aliases.db:
! class_.alias = aliases.db[ class_.name ]
! class_.wrapper_alias = class_.alias + '_wrapper'
+ for func in mb.calldefs():
+ for arg in func.arguments:
+ if arg.default_value == 'FX::FXString::null':
+ arg.default_value = 'FX::FXString::nullStr()'
! def customize_module( mb ):
! extmodule = mb.code_creator
extmodule.license = customization_data.license
***************
*** 136,213 ****
map( lambda creator: extmodule.remove_creator( creator ), includes )
extmodule.adopt_include( code_creators.include_t( header="fx.h" ) )
- ##extmodule.adopt_include( code_creators.include_t( header="CArrays.h" ) )
- ##extmodule.adopt_include( code_creators.include_t( color_array.file_name ) )
position = extmodule.last_include_index() + 1
extmodule.adopt_creator( code_creators.namespace_using_t('::FX'), position )
extmodule.user_defined_directories.append( settings.generated_files_dir )
- #Niall?
- #extmodule.precompiled_header = ???
- class_creators = filter( lambda creator: isinstance( creator, code_creators.class_t )
- , code_creators.make_flatten( extmodule.body.creators ) )
- for creator in class_creators:
- creator.always_expose_using_scope = True #better error reporting from compiler
- creator.redefine_operators = True #redefine all operators found in base classes
- if aliases.db.has_key( creator.declaration.name ):
- creator.alias = aliases.db[ creator.declaration.name ]
- ##fname = declarations.full_name( creator.declaration )
- ##if fname in color_array.classes:
- ##creator.adopt_creator( color_array.register_color_array_t( creator.declaration.name ) )
-
#some times it is much easier to exclude declarations by alias
! for creator in code_creators.make_flatten( extmodule.creators ):
! if not isinstance( creator, code_creators.declaration_based_t ):
! continue
! if creator.alias in declarations_to_exclude.declarations_aliases:
! creator.parent.remove_creator( creator )
! if creator.alias == "as_unsigned_char_const__ptr_" \
! and creator.declaration.parent.name == 'QMemArray<unsigned char>':
! creator.parent.remove_creator( creator )
! if isinstance( creator.declaration, declarations.calldef_t):
! fix_default_args( creator )
- pypp_utils.missing_call_policies.print_( extmodule )
! def prepare_module():
parser_config = parser.config_t( gccxml_path=settings.gccxml_path
, include_paths=[settings.boost_path, settings.tnfox_include_path]
, define_symbols=settings.defined_symbols_gccxml )
! reader = parser.source_reader_t( parser_config )
fx_xml = os.path.join( settings.xml_files, 'fx.xml' )
! if not os.path.exists( fx_xml ):
! print 'compiling fx.h file'
! reader.create_xml_file( 'fx.h', fx_xml )
! print 'compiling fx.h file - done'
! print 'reading declarations'
! decls = reader.read_xml_file( fx_xml )
! print 'reading declarations - done'
print 'filtering declarations'
! decls = declarations.filtering.user_defined( decls, should_stay )
print 'filtering declarations - done'
print 'creating module'
! creator = module_creator.creator_t( decls
! , settings.module_name
! , create_castinig_constructor=True
! , call_policies_resolver_=set_call_policies)
! extmodule = creator.create()
print 'creating module - done'
print 'customizing module'
! customize_module( extmodule )
print 'customizing module - done'
!
! return extmodule
! def write_module( extmodule ):
print 'writing module to files'
start_time = time.clock()
file_writers.write_file( os.path.join( settings.generated_files_dir, color_array.file_name )
, color_array.create_file_content())
! file_writers.write_multiple_files( extmodule, settings.generated_files_dir )
print 'time taken : ', time.clock() - start_time, ' seconds'
print 'writing module to files - done'
def export():
! extmodule = prepare_module()
! write_module( extmodule )
if __name__ == '__main__':
--- 117,174 ----
map( lambda creator: extmodule.remove_creator( creator ), includes )
extmodule.adopt_include( code_creators.include_t( header="fx.h" ) )
position = extmodule.last_include_index() + 1
extmodule.adopt_creator( code_creators.namespace_using_t('::FX'), position )
extmodule.user_defined_directories.append( settings.generated_files_dir )
#some times it is much easier to exclude declarations by alias
! #for creator in code_creators.make_flatten( extmodule.creators ):
! #if not isinstance( creator, code_creators.declaration_based_t ):
! #continue
! #if creator.alias in declarations_to_exclude.declarations_aliases:
! #creator.parent.remove_creator( creator )
! #if creator.alias == "as_unsigned_char_const__ptr_" \
! #and creator.declaration.parent.name == 'QMemArray<unsigned char>':
! #creator.parent.remove_creator( creator )
! def create_module():
parser_config = parser.config_t( gccxml_path=settings.gccxml_path
, include_paths=[settings.boost_path, settings.tnfox_include_path]
, define_symbols=settings.defined_symbols_gccxml )
!
fx_xml = os.path.join( settings.xml_files, 'fx.xml' )
! mb = module_builder.module_builder_t( [ parser.create_cached_source_fc( 'fx.h', fx_xml ) ]
! , parser_config )
! mb.run_query_optimizer()
print 'filtering declarations'
! filter_decls( mb )
print 'filtering declarations - done'
+ print 'set call policies'
+ set_call_policies( mb )
+ print 'set call policies - done'
+ print 'customize declarations'
+ customize_decls( mb )
+ print 'customize declarations - done'
print 'creating module'
! mb.build_code_creator(settings.module_name )
print 'creating module - done'
print 'customizing module'
! customize_module( mb )
print 'customizing module - done'
! return mb
! def write_module( mb ):
print 'writing module to files'
+ assert isinstance( mb, module_builder.module_builder_t )
start_time = time.clock()
file_writers.write_file( os.path.join( settings.generated_files_dir, color_array.file_name )
, color_array.create_file_content())
! mb.split_module( settings.generated_files_dir )
print 'time taken : ', time.clock() - start_time, ' seconds'
print 'writing module to files - done'
def export():
! mb = create_module()
! write_module( mb )
if __name__ == '__main__':
Index: declarations_to_exclude.py
===================================================================
RCS file: /cvsroot/pygccxml/source/pyplusplus/examples/tnfox/declarations_to_exclude.py,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** declarations_to_exclude.py 25 Jan 2006 07:27:23 -0000 1.9
--- declarations_to_exclude.py 29 Mar 2006 04:26:58 -0000 1.10
***************
*** 7,12 ****
import os
from environment import settings
! declarations = [
"::FX::FXACL::int_toWin32SecurityDescriptor"
, "::FX::FXApp::dispatchEvent"
--- 7,13 ----
import os
from environment import settings
+ from pygccxml import declarations
! to_be_excluded = [
"::FX::FXACL::int_toWin32SecurityDescriptor"
, "::FX::FXApp::dispatchEvent"
***************
*** 154,155 ****
--- 155,166 ----
deprecated = find_deprecated()
+
+ def is_deprecated( decl ):
+ global deprecated
+ if None is decl.location:
+ return False
+ file_name = os.path.split( decl.location.file_name )[1]
+ return deprecated.has_key( file_name ) and decl.location.line in deprecated[ file_name ]
+
+ def is_excluded( decl ):
+ return declarations.full_name( decl ) in to_be_excluded or is_deprecated( decl )
\ No newline at end of file
Index: call_policies.py
===================================================================
RCS file: /cvsroot/pygccxml/source/pyplusplus/examples/tnfox/call_policies.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** call_policies.py 31 Jan 2006 08:19:23 -0000 1.6
--- call_policies.py 29 Mar 2006 04:26:58 -0000 1.7
***************
*** 8,22 ****
from environment import settings
! from pyplusplus import code_creators
! from pyplusplus.code_creators import return_self
! from pyplusplus.code_creators import return_internal_reference
! from pyplusplus.code_creators import with_custodian_and_ward
! from pyplusplus.code_creators import copy_const_reference
! from pyplusplus.code_creators import copy_non_const_reference
! from pyplusplus.code_creators import manage_new_object
! from pyplusplus.code_creators import reference_existing_object
! from pyplusplus.code_creators import return_by_value
! from pyplusplus.code_creators import return_opaque_pointer
! from pyplusplus.code_creators import return_value_policy
db = {
--- 8,22 ----
from environment import settings
! from pyplusplus import decl_wrappers
! from pyplusplus.decl_wrappers import return_self
! from pyplusplus.decl_wrappers import return_internal_reference
! from pyplusplus.decl_wrappers import with_custodian_and_ward
! from pyplusplus.decl_wrappers import copy_const_reference
! from pyplusplus.decl_wrappers import copy_non_const_reference
! from pyplusplus.decl_wrappers import manage_new_object
! from pyplusplus.decl_wrappers import reference_existing_object
! from pyplusplus.decl_wrappers import return_by_value
! from pyplusplus.decl_wrappers import return_opaque_pointer
! from pyplusplus.decl_wrappers import return_value_policy
db = {
***************
*** 73,77 ****
, "::FX::FXBitmap::getData" : return_internal_reference()
, "::FX::FXBitmapView::getBitmap" : return_internal_reference()
- , "::FX::FXCharset::clear" : return_self()
, "::FX::FXColorSelector::acceptButton" : return_internal_reference()
, "::FX::FXColorSelector::cancelButton" : return_internal_reference()
--- 73,76 ----
***************
*** 91,95 ****
, "::FX::FXDirSelector::acceptButton" : return_internal_reference()
, "::FX::FXDirSelector::cancelButton" : return_internal_reference()
- , "::FX::FXDockBar::findDockAtSide" : return_value_policy( reference_existing_object )
, "::FX::FXDockBar::findDockNear" : return_value_policy( reference_existing_object )
, "::FX::FXDockBar::getDryDock" : return_value_policy( reference_existing_object )
--- 90,93 ----
***************
*** 207,211 ****
, "::FX::FXId::getApp" : return_value_policy( reference_existing_object )
, "::FX::FXId::getEventLoop" : return_value_policy( reference_existing_object )
- , "::FX::FXId::getVisual" : return_value_policy( reference_existing_object )
, "::FX::FXImageFrame::getImage" : return_internal_reference()
, "::FX::FXImage::getData" : return_internal_reference()
--- 205,208 ----
***************
*** 259,264 ****
, "::FX::FXMDIChild::getIcon" : return_internal_reference()
, "::FX::FXMDIChild::getMenu" : return_internal_reference()
- , "::FX::FXMDIChild::getWindowIcon" : return_internal_reference()
- , "::FX::FXMDIChild::getWindowMenu" : return_internal_reference()
, "::FX::FXMDIClient::getActiveChild" : return_internal_reference()
, "::FX::FXMenuButton::getMenu" : return_internal_reference()
--- 256,259 ----
***************
*** 283,287 ****
, "::FX::FXOptionMenu::getCurrent" : return_internal_reference()
, "::FX::FXOptionMenu::getMenu" : return_internal_reference()
- , "::FX::FXOptionMenu::getPopup" : return_internal_reference()
, "::FX::FXPopup::getGrabOwner" : return_internal_reference()
, "::FX::FXPopup::getNextActive" : return_internal_reference()
--- 278,281 ----
***************
*** 293,299 ****
, "::FX::FXQuatd::adjust" : return_self()
, "::FX::FXQuatf::adjust" : return_self()
- , "::FX::FXRanged::clipTo" : return_self()
, "::FX::FXRanged::include" : return_self()
- , "::FX::FXRangef::clipTo" : return_self()
, "::FX::FXRangef::include" : return_self()
, "::FX::FXRealSpinner::getFont" : return_internal_reference()
--- 287,291 ----
***************
*** 317,321 ****
, "::FX::FXSpheref::include" : return_self()
, "::FX::FXSpinner::getFont" : return_internal_reference()
- , "::FX::FXSplashWindow::getFont" : return_internal_reference()
, "::FX::FXSplashWindow::getIcon" : return_internal_reference()
, "::FX::FXSplitter::findHSplit" : return_internal_reference()
--- 309,312 ----
***************
*** 365,371 ****
, "::FX::FXToggleButton::getAltIcon" : return_internal_reference()
, "::FX::FXToolBar::findDockAtSide" : return_value_policy( reference_existing_object )
- , "::FX::FXToolBar::findDockNear" : return_value_policy( reference_existing_object )
- , "::FX::FXToolBar::getDryDock" : return_value_policy( reference_existing_object )
- , "::FX::FXToolBar::getWetDock" : return_value_policy( reference_existing_object )
, "::FX::FXToolTip::getFont" : return_internal_reference()
, "::FX::FXTopWindow::getIcon" : return_value_policy( reference_existing_object )
--- 356,359 ----
***************
*** 442,446 ****
, "::FX::QDir::entryInfoList" : return_internal_reference()
, "::FX::QGZipDevice::GZData" : return_value_policy( reference_existing_object )
- , "::FX::QIODevice::permissions" : return_internal_reference()
, "::FX::QMemArray<unsigned char>::data" : return_internal_reference()
, "::FX::QMemArray<unsigned char>::assign" : return_self()
--- 430,433 ----
|