Trees | Indices | Help |
---|
|
1 #============================================================================ 2 #Name : scanners.py 3 #Part of : Helium 4 5 #Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 6 #All rights reserved. 7 #This component and the accompanying materials are made available 8 #under the terms of the License "Eclipse Public License v1.0" 9 #which accompanies this distribution, and is available 10 #at the URL "http://www.eclipse.org/legal/epl-v10.html". 11 # 12 #Initial Contributors: 13 #Nokia Corporation - initial contribution. 14 # 15 #Contributors: 16 # 17 #Description: 18 #=============================================================================== 19 20 """ Implementation of the available scanner for """ 21 22 import os 23 import fileutils 24 import selectors 25 import logging 26 import codecs 27 import pathaddition 28 29 logger = logging.getLogger('archive.scanners') 30 logger_abld = logging.getLogger('archive.scanners.abld') 31 logging.basicConfig() 32 #logger_abld.setLevel(logging.DEBUG) 3335 """ Abstract class that represent and input source. """ 36 4179 8043 """ Setting up the scanner. """ 44 [self.add_include(inc) for inc in self._config.get_list('include', [])] 45 [self.add_exclude(ex) for ex in self._config.get_list('exclude', [])] 46 [self.add_exclude_file(ex) for ex in self._config.get_list('exclude_file', [])] 47 [self.add_exclude_lst(filename) for filename in self._config.get_list('exclude.lst', [])] 48 [self.add_filetype(filetype) for filetype in self._config.get_list('filetype', [])] 49 [self.add_selector(selectors.get_selector(selector, self._config)) for selector in self._config.get_list('selector', [])] 50 # To support old features. 51 # TODO: inform customers and remove. 52 if 'distribution.policy.s60' in self._config: 53 self.add_selector(selectors.get_selector('distribution.policy.s60', self._config))5456 """ Adding excludes from exclude list. """ 57 if not os.path.exists(filename): 58 raise Exception("Could not find '%s'." % filename) 59 root_dir = os.path.normpath(self._config['root.dir']) 60 flh = codecs.open(filename, 'r', 'utf-8') 61 for line in flh: 62 path = os.path.normpath(line.strip()) 63 if os.path.splitdrive(root_dir)[0] != "": 64 path = os.path.join(os.path.splitdrive(root_dir)[0], path) 65 if fileutils.destinsrc(root_dir, path): 66 pathrel = pathaddition.relative.abs2rel(path, root_dir) 67 logger.debug("pathrel: %s" % (pathrel)) 68 self.add_exclude(pathrel) 69 else: 70 logger.warning("path '%s' is not under '%s', ignoring." % (path, root_dir)) 71 flh.close()7282 """ Scanning the filesystem. """ 83136 13785 Scanner.__init__(self, config) 86 self.root_dir = unicode(os.path.normpath(self._config['root.dir']))8789 """ 90 Abld what commands. 91 include property have not effect on the selection mechanism. 92 """ 93 os.environ["SYMBIANBUILD_DEPENDENCYOFF"] = "1" 94 for path in self._config.get_list('abld.exportpath', []): 95 logger_abld.debug("abld.exportpath: %s" % path) 96 if os.path.exists(os.path.join(self.root_dir, path, 'bld.inf')): 97 os.chdir(os.path.join(self.root_dir, path)) 98 os.popen('bldmake bldfiles -k') 99 for result in self._scan_abld_what("abld export -what -k"): 100 yield result 101 102 for path in self._config.get_list('abld.buildpath', []): 103 logger_abld.debug("abld.buildpath: %s" % path) 104 if os.path.exists(os.path.join(self.root_dir, path, 'bld.inf')): 105 for type_ in self._config.get_list('abld.type', ['armv5']): 106 os.environ["EPOCROOT"] = self._config.get('abld.epocroot','\\') 107 os.environ["PATH"] = os.environ["EPOCROOT"] + "epoc32\\tools;" + os.environ["EPOCROOT"] + "epoc32\\gcc\\bin;" + os.environ["PATH"] 108 logger_abld.debug("abld.type: %s" % type_) 109 os.chdir(os.path.join(self.root_dir, path)) 110 os.popen("bldmake bldfiles -k") 111 os.popen("abld makefile %s -k" % type_) 112 for result in self._scan_abld_what("abld build -what %s" % type_): 113 yield result114116 """ Run command.""" 117 logger_abld.debug("command: %s" % cmd) 118 process = os.popen(cmd) 119 abld_output = process.read() 120 err = process.close() 121 return (err, abld_output)122124 """ Abld what output parser.""" 125 (err, abld_output) = self._run_cmd(cmd) 126 logger_abld.debug("abld_output: %s" % abld_output) 127 for what_path in abld_output.split("\n"): 128 what_path = what_path.strip() 129 if (what_path.startswith('\\') or what_path.startswith('/')) and self.is_filetype(what_path) \ 130 and not self.is_excluded(what_path) and self.is_selected(what_path): 131 if os.path.exists(what_path): 132 logger_abld.debug("adding: %s" % what_path) 133 yield what_path 134 else: 135 logger.error("Could not find '%s'." % what_path)139 """ Scanning the filesystem. """ 140152 153142 fileutils.FileScanner.__init__(self, unicode(os.path.normpath(config['root.dir']))) 143 Scanner.__init__(self, config)144146 """ 147 Implement the scanning of the filesystem. 148 Actually delegate scanning of a directory to Filescanner. 149 """ 150 for path in fileutils.FileScanner.scan(self): 151 yield path155 """ Scanning the filesystem. """ 156183 184 __scanners = {'default': FileSystemScanner, 185 'input.file': InputFileScanner, 186 'abld.what': AbldWhatScanner, 187 } 188158 """ Initialisation. """ 159 fileutils.FileScanner.__init__(self, unicode(os.path.normpath(config['root.dir']))) 160 Scanner.__init__(self, config)161163 """ 164 :: 165 166 <set name="scanners" value="input.file"/> 167 <set name="root.dir" value="${build.drive}"/> 168 <set name="input.files" value="file1.lst,file2.lst,file3.lst"/> 169 <set name="exclude" value="epoc32/**/*.dll"/> 170 """ 171 for input_file in self._config.get_list('input.files', []): 172 logger.info("Include content from: %s" % input_file) 173 handle = open(input_file, "r") 174 for line in handle.readlines(): 175 path = os.path.join(self._config['root.dir'], line.strip()) 176 if os.path.exists(path): 177 if self.is_filetype(path) \ 178 and not self.is_excluded(path) and self.is_selected(path): 179 yield path 180 else: 181 logger.info("File not found: %s" % path) 182 handle.close()190 result = [] 191 for name in names: 192 if name in __scanners: 193 result.append(__scanners[name](config)) 194 else: 195 raise Exception("ERROR: Could not find scanner '%s'." % name) 196 return result197
Trees | Indices | Help |
---|
Generated by Epydoc 3.0beta1 on Wed Sep 09 13:44:19 2009 | http://epydoc.sourceforge.net |