diff -r 7685cec9fd3c -r f2ddfa555b0f doc/api/python/archive.scanners-pysrc.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/api/python/archive.scanners-pysrc.html Fri Sep 11 11:54:49 2009 +0100 @@ -0,0 +1,1730 @@ + + + + + archive.scanners + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Package archive :: + Module scanners + + + + + + +
[hide private]
[frames] | no frames]
+
+

Source Code for Module archive.scanners

+
+  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) 
+ 33   
+
34 -class Scanner(fileutils.AbstractScanner): +
35 """ Abstract class that represent and input source. """ + 36 +
37 - def __init__(self, config): +
38 fileutils.AbstractScanner.__init__(self) + 39 self._config = config + 40 self.setup() +
41 +
42 - def setup(self): +
43 """ 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)) +
54 +
55 - def add_exclude_lst(self, filename): +
56 """ 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() +
72 +
73 - def scan(self): +
74 """ Generator method that scan the relevant input source. + 75 This method need to be overloaded by the specialized class. + 76 return fullpath name + 77 """ + 78 raise NotImplementedError() +
79 + 80 +
81 -class AbldWhatScanner(Scanner): +
82 """ Scanning the filesystem. """ + 83 +
84 - def __init__(self, config): +
85 Scanner.__init__(self, config) + 86 self.root_dir = unicode(os.path.normpath(self._config['root.dir'])) +
87 +
88 - def scan(self): +
89 """ + 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 result +
114 +
115 - def _run_cmd(self, cmd): +
116 """ 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) +
122 +
123 - def _scan_abld_what(self, cmd): +
124 """ 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) +
136 +137 +
138 -class FileSystemScanner(fileutils.FileScanner, Scanner): +
139 """ Scanning the filesystem. """ +140 +
141 - def __init__(self, config): +
142 fileutils.FileScanner.__init__(self, unicode(os.path.normpath(config['root.dir']))) +143 Scanner.__init__(self, config) +
144 +
145 - def scan(self): +
146 """ +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 path +
152 +153 +
154 -class InputFileScanner(fileutils.FileScanner, Scanner): +
155 """ Scanning the filesystem. """ +156 +
157 - def __init__(self, config): +
158 """ Initialisation. """ +159 fileutils.FileScanner.__init__(self, unicode(os.path.normpath(config['root.dir']))) +160 Scanner.__init__(self, config) +
161 +
162 - def scan(self): +
163 """ +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() +
183 +184 __scanners = {'default': FileSystemScanner, +185 'input.file': InputFileScanner, +186 'abld.what': AbldWhatScanner, +187 } +188 +
189 -def get_scanners(names, config): +
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 result +
197 +
+
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + +