| 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)
33
35 """ Abstract class that represent and input source. """
36
41
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
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
79
80
82 """ Scanning the filesystem. """
83
85 Scanner.__init__(self, config)
86 self.root_dir = unicode(os.path.normpath(self._config['root.dir']))
87
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
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
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
139 """ Scanning the filesystem. """
140
142 fileutils.FileScanner.__init__(self, unicode(os.path.normpath(config['root.dir'])))
143 Scanner.__init__(self, config)
144
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
155 """ Scanning the filesystem. """
156
158 """ Initialisation. """
159 fileutils.FileScanner.__init__(self, unicode(os.path.normpath(config['root.dir'])))
160 Scanner.__init__(self, config)
161
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
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
| Trees | Indices | Help |
|---|
| Generated by Epydoc 3.0beta1 on Wed Sep 09 13:44:19 2009 | http://epydoc.sourceforge.net |