[pygccxml-commit] SF.net SVN: pygccxml: [1312] pygccxml_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2008-04-23 05:56:01
|
Revision: 1312 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1312&view=rev Author: roman_yakovenko Date: 2008-04-22 22:56:08 -0700 (Tue, 22 Apr 2008) Log Message: ----------- few fixes to problems caused by pdb parser integration Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/cpptypes.py pygccxml_dev/pygccxml/msvc/config.py pygccxml_dev/pygccxml/utils/__init__.py pygccxml_dev/unittests/autoconfig.py pygccxml_dev/unittests/core_tester.py Added Paths: ----------- pygccxml_dev/pygccxml/utils/fs_utils.py Modified: pygccxml_dev/pygccxml/declarations/cpptypes.py =================================================================== --- pygccxml_dev/pygccxml/declarations/cpptypes.py 2008-04-22 19:35:17 UTC (rev 1311) +++ pygccxml_dev/pygccxml/declarations/cpptypes.py 2008-04-23 05:56:08 UTC (rev 1312) @@ -17,6 +17,7 @@ self.cache = algorithms_cache.type_algs_cache_t() self._byte_size = 0 self._byte_align = 0 + self.compiler = None def __str__(self): res = self.decl_string Modified: pygccxml_dev/pygccxml/msvc/config.py =================================================================== --- pygccxml_dev/pygccxml/msvc/config.py 2008-04-22 19:35:17 UTC (rev 1311) +++ pygccxml_dev/pygccxml/msvc/config.py 2008-04-23 05:56:08 UTC (rev 1312) @@ -1,6 +1,7 @@ import os import sys import comtypes +from .. import utils import comtypes.client import _winreg as win_registry from distutils import msvccompiler @@ -20,8 +21,12 @@ def get_msvcr_path( self ): vss_installed = self.__get_installed_vs_dirs() - #TODO: better algorithm to find the path - return os.path.join( vss_installed[0], 'vc', 'redist', 'x86', 'microsoft.vc90.crt', 'MSVCR90.DLL' ) + for f in utils.files_walker( vss_installed, ["*.dll"], ): + f_path, f_name = os.path.split( f.upper() ) + if f_name.startswith( 'MSVCR' ): + return f + else: + raise RuntimeError( 'Unable to find msvcrXX.dll. Search path is: %s' % vss_installed ) def get_msdia_path( self ): vss_installed = self.__get_installed_vs_dirs() Modified: pygccxml_dev/pygccxml/utils/__init__.py =================================================================== --- pygccxml_dev/pygccxml/utils/__init__.py 2008-04-22 19:35:17 UTC (rev 1311) +++ pygccxml_dev/pygccxml/utils/__init__.py 2008-04-23 05:56:08 UTC (rev 1312) @@ -12,6 +12,8 @@ import sys import logging import tempfile +from fs_utils import files_walker +from fs_utils import directories_walker def _create_logger_( name ): """implementation details""" @@ -151,4 +153,4 @@ return name else: raise RuntimeError( 'Unable to find name for value(%d) in enumeration "%s"' - % ( enum_numeric_value, cls.__name__ ) ) \ No newline at end of file + % ( enum_numeric_value, cls.__name__ ) ) Added: pygccxml_dev/pygccxml/utils/fs_utils.py =================================================================== --- pygccxml_dev/pygccxml/utils/fs_utils.py (rev 0) +++ pygccxml_dev/pygccxml/utils/fs_utils.py 2008-04-23 05:56:08 UTC (rev 1312) @@ -0,0 +1,136 @@ +# Copyright 2004 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import os +from types import * + +##If you want include files that doesn't have extension then use filter like '*.' + +def _make_list( argument ): + if type(argument) in StringTypes: + if argument: + return [argument] + else: + return [] + elif type(argument) is ListType: + return argument + else: + raise TypeError( 'Argument "%s" must be or list of strings or string.' % argument ) + +class base_files_iterator: + def __init__(self, file_exts, is_include_exts = True): + self.__file_exts = _make_list( file_exts ) + self.__is_include_exts = is_include_exts + + def _is_to_skip(self, file_path): + if not self.__file_exts: + return 0 + file_ext = os.path.splitext( file_path )[1] + if not file_ext: + file_ext = '.' + file_ext + file_ext = '*' + file_ext + if file_ext.lower() in self.__file_exts: + return not self.__is_include_exts + else: + return self.__is_include_exts + + def _subdirectories_and_files(self, directory_path): + files, directories = [], [] + directory_contents = os.listdir(directory_path) + for object_name in directory_contents: + object_path = os.path.join(directory_path, object_name) + if os.path.isfile( object_path ) and not self._is_to_skip( object_path ): + files.append( object_path ) + elif os.path.isdir( object_path ): + directories.append( object_path ) + else: + pass + return directories, files + + def __iter__(self): + raise NotImplementedError + + def next(self): + raise NotImplementedError + + def restart(self): + raise NotImplementedError + +class files_walker(base_files_iterator): + def __init__(self, directories, file_ext_filter = '', is_include_filter = True, is_recursive = True): + base_files_iterator.__init__(self, file_ext_filter, is_include_filter) + self.__directories = _make_list( directories ) + self.__is_recursive = is_recursive + self.__file_generator = None + + def __walk(self): + directories = self.__directories[:] + while directories: + sub_directories, files = self._subdirectories_and_files( directories.pop(0) ) + if self.__is_recursive: + for directory in sub_directories: + directories.append( directory ) + for file_os in files: + yield file_os + + def __iter__(self): + self.__file_generator = self.__walk() + return self + + def next(self): + return self.__file_generator.next() + + def restart(self): + self.__file_generator = None + + +class directories_walker: + def __init__(self, directories, is_recursive = 1): + self.__directories = [] + for root in _make_list( directories ): + self.__directories.extend( self.__sub_directories( root ) ) + self.__is_recursive = is_recursive + self.__directory_generator = None + + def __sub_directories(self, directory_path): + sub_directories = [] + directory_contains = os.listdir(directory_path) + for object_in_directory in directory_contains: + full_path = os.path.join(directory_path, object_in_directory) + if os.path.isdir( full_path ): + sub_directories.append( full_path ) + return sub_directories + + def __walk(self): + directories = self.__directories[:] + for curr_directory in directories: + yield curr_directory + if self.__is_recursive: + for f in directories_walker( [curr_directory], True ): + yield f + + def __iter__(self): + self.__directory_generator = self.__walk() + return self + + def next(self): + return self.__directory_generator.next() + + def restart(self): + self.__directory_generator = None + + +if '__main__' == __name__: + pass + #lFileCount = 0 + #for file_os in files_iterator( r'C:\Program Files\Microsoft Visual Studio\VC98\Include\stlport', ['*.h', '*.'], True, False): + #print file_os + #lFileCount += 1 + #print lFileCount + + #~ for directory in directories_iterator( '/home/roman/language-binding', False ): + #~ print directory + #~ for directory in directories_iterator( '/home/roman/language-binding', True ): + #~ print directory Modified: pygccxml_dev/unittests/autoconfig.py =================================================================== --- pygccxml_dev/unittests/autoconfig.py 2008-04-22 19:35:17 UTC (rev 1311) +++ pygccxml_dev/unittests/autoconfig.py 2008-04-23 05:56:08 UTC (rev 1312) @@ -59,6 +59,7 @@ def get_pdb_global_ns(): + return None return cxx_parsers_cfg.get_pdb_loader().global_ns Modified: pygccxml_dev/unittests/core_tester.py =================================================================== --- pygccxml_dev/unittests/core_tester.py 2008-04-22 19:35:17 UTC (rev 1311) +++ pygccxml_dev/unittests/core_tester.py 2008-04-23 05:56:08 UTC (rev 1312) @@ -359,10 +359,10 @@ def create_suite(): suite = unittest.TestSuite() - #~ suite.addTest( unittest.makeSuite(core_all_at_once_t)) - #~ suite.addTest( unittest.makeSuite(core_all_at_once_no_opt_t)) - #~ suite.addTest( unittest.makeSuite(core_file_by_file_t)) - #~ suite.addTest( unittest.makeSuite(core_file_by_file_no_opt_t)) + suite.addTest( unittest.makeSuite(core_all_at_once_t)) + suite.addTest( unittest.makeSuite(core_all_at_once_no_opt_t)) + suite.addTest( unittest.makeSuite(core_file_by_file_t)) + suite.addTest( unittest.makeSuite(core_file_by_file_no_opt_t)) if sys.platform == 'win32': suite.addTest( unittest.makeSuite(pdb_based_core_tester_t)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |