use an empty OEMASK if none is set
[bitbake.git] / bin / oe / parse / __init__.py
1 #!/usr/bin/env python
2 # ex:ts=4:sw=4:sts=4:et
3 # -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
4 """
5 OpenEmbedded Parsers
6
7 File parsers for the OpenEmbedded
8 (http://openembedded.org) build infrastructure.
9
10 Copyright: (c) 2003 Chris Larson
11
12 Based on functions from the base oe module, Copyright 2003 Holger Schurig
13 """
14 __version__ = '1.0'
15
16 __all__ = [ 'handlers', 'supports', 'handle', 'init', 'ConfHandler', 'OEHandler', 'SRPMHandler', 'ParseError' ]
17 handlers = []
18
19 class ParseError(Exception):
20     """Exception raised when parsing fails"""
21
22 class SkipPackage(Exception):
23     """Exception raised to skip this package"""
24
25 import ConfHandler
26 ConfHandler.ParseError = ParseError
27 import OEHandler
28 OEHandler.ParseError = ParseError
29 import SRPMHandler
30 SRPMHandler.ParseError = ParseError
31
32 __mtime_cache = {}
33
34 def cached_mtime(f):
35     import os
36     if not __mtime_cache.has_key(f):
37         __mtime_cache[f] = os.stat(f)[8]
38     return __mtime_cache[f]
39
40 def mark_dependency(d, f):
41     import oe, os
42     if f.startswith('./'):
43         f = "%s/%s" % (os.getcwd(), f[2:])
44     deps = (oe.data.getVar('__depends', d) or "").split()
45     deps.append("%s@%s" % (f, cached_mtime(f)))
46     oe.data.setVar('__depends', " ".join(deps), d)
47
48 def supports(fn, data):
49     """Returns true if we have a handler for this file, false otherwise"""
50     for h in handlers:
51         if h['supports'](fn, data):
52             return 1
53     return 0
54
55 def handle(fn, data, include = 0):
56     """Call the handler that is appropriate for this file"""
57     for h in handlers:
58         if h['supports'](fn, data):
59             return h['handle'](fn, data, include)
60     return None
61
62 def init(fn, data):
63     for h in handlers:
64         if h['supports'](fn):
65             return h['init'](data)