diff -r 000000000000 -r ca70ae20a155 src/misc/gen_mod_template.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/misc/gen_mod_template.py Tue Feb 16 10:07:05 2010 +0530 @@ -0,0 +1,138 @@ +# Copyright (c) 2009 Nokia Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +excluded_modules = [] +module_paths = [] +pyd_path_name = [] + + +def get_mod_list(arg, dirname, names): + for name in names: + # This check is done for not including the test_ files for modules + if not name.startswith('test_') and name.endswith('.py'): + path = os.path.join(dirname, name) + path = path.replace(lib_path + '\\', '') + # This check for 'test' is done to remove those files which fall + # under test or crashers + if not 'test' in path: + module_paths.append(path) + + +def gen_excluded_list(): + global excluded_modules + py_module = [] + module_type = [] + pyd_modules = [] + builtin_modules = [] + modules_cfg_path = \ + os.path.abspath('..\\newcore\\Symbian\\src\\modules.cfg') + config_file = open(modules_cfg_path, 'r') + for line in config_file: + line = line.strip() + if line in ['PYD', 'PY_MODULES', 'BUILTIN', 'EXT-MODULES', + 'EXT-PYD', 'EXT-MOD-CFGS']: + module_type = line + continue + if line and line[0] != '#': + if module_type == 'PYD': + pyd_modules.append(line.split(',')[0]) + elif module_type == 'BUILTIN': + builtin_modules.append(line.split('=')[0]) + elif module_type == 'PY_MODULES': + py_module.append(line.split(':')[1]) + excluded_modules = py_module + builtin_modules + pyd_modules + + +def get_pyd_list(arg, dirname, names): + for name in names: + if name.endswith('.c'): + path = os.path.join(dirname, name) + buf = open(path, 'r').read() + if "Py_InitModule" in buf: + pyd_path_name.append(path) + + +def add_pyd(): + pyd_name = [] + for pyd in pyd_path_name: + fp = open(pyd, 'r') + file_name = os.path.basename(pyd) + for line in fp: + if "Py_InitModule" in line: + try: + pyd_name.append(line.split('"')[1]) + except: + # Some files do not have their pyd names in Py_InitModule, + # a split on these files would not yield the names so their + # names are hard coded + if file_name == 'unicodedata.c': + pyd_name.append('unicodedata') + elif file_name == 'posixmodule.c': + pyd_name.append('posix') + elif file_name == 'pyexpat.c': + pyd_name.append('pyexpat') + elif file_name == 'socketmodule.c': + pyd_name.append('_socket') + elif file_name == '_bsddb.c': + pyd_name.append('_bsddb') + continue + fp.close() + module_paths.extend(pyd_name) + + +def gen_mod_dep_cfg_template(): + # These are the module dependency map for modules that are not + # found by the module_config_parser and hence they need an explicit mention + additional_modules = {'__main__': {'type': 'base', 'deps': []}, + '__builtin__': {'type': 'base', 'deps': []}, + 'sys': {'type': 'base', 'deps': []}, + 'nt': {'type': 'excluded', 'deps': []}, + 'win32evtlogutil':{'type': 'excluded', 'deps': []}, + 'win32evtlog': {'type': 'excluded', 'deps': []}} + + for module in excluded_modules: + if module in module_paths: + module_paths.remove(module) + + # The exclude py_files() are parsed here + dep_map = {} + mod_dep_cfg_template_path = \ + os.path.abspath( + '..\\newcore\\Symbian\\src\\module_dependency.cfg.template') + dep_map = eval(open(mod_dep_cfg_template_path, 'r').read()) + dep_map.update(additional_modules) + mod_map = {} + for mod in module_paths: + mod_map['type'] = 'excluded' + mod_map['deps'] = [] + mod_name = os.path.splitext(mod)[0].replace('\\', '.') + dep_map[mod_name] = mod_map + open(mod_dep_cfg_template_path, 'w').write(str(dep_map)) + + fp = open(mod_dep_cfg_template_path, 'r') + buf = fp.read() + buf = buf.replace("}, '", "}, \n'") + fp.close() + open(mod_dep_cfg_template_path, 'w').write(buf) + +if __name__ == "__main__": + # Walk through the Lib path for inbuilt modules + lib_path = os.path.abspath("..\\newcore\\Lib") + os.path.walk(lib_path, get_mod_list, None) + gen_excluded_list() + os.path.walk(os.path.abspath("..\\newcore\\Modules"), get_pyd_list, None) + add_pyd() + gen_mod_dep_cfg_template()