use an empty OEMASK if none is set
[bitbake.git] / bin / oeimage
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 import sys, os, oe
6 from oe import *
7
8 __version__ = 1.0
9 type = "jffs2"
10 cfg_oe = data.init()
11 cfg_oespawn = data.init()
12
13
14 def usage():
15     print "Usage: oeimage [options ...]"
16     print "Creates an image for a target device from a root filesystem,"
17     print "obeying configuration parameters from the OpenEmbedded"
18     print "configuration files, thereby easing handling of deviceisms."
19     print ""
20     print "  %s\t\t%s" % ("-r [arg], --root [arg]", "root directory (default=${IMAGE_ROOTFS})")
21     print "  %s\t\t%s" % ("-t [arg], --type [arg]", "image type (jffs2[default], cramfs)")
22     print "  %s\t\t%s" % ("-v, --version", "output version information and exit")
23     sys.exit(0)
24
25 def version():
26     print "OpenEmbedded Build Infrastructure Core version %s" % oe.__version__
27     print "OEImage version %s" % __version__
28
29 def emit_oe(d, base_d = {}):
30     for v in d.keys():
31         if d[v] != base_d[v]:
32             data.emit_var(v, d)
33
34 def getopthash(l):
35     h = {}
36     for (opt, val) in l:
37         h[opt] = val
38     return h
39
40 import getopt
41 try:
42     (opts, args) = getopt.getopt(sys.argv[1:], 'vr:t:e:', [ 'version', 'root=', 'type=', 'oefile=' ])
43 except getopt.GetoptError:
44     usage()
45
46 # handle opts
47 opthash = getopthash(opts)
48
49 if '--version' in opthash or '-v' in opthash:
50     version()
51     sys.exit(0)
52
53 try:
54     cfg_oe = parse.handle("conf/oe.conf", cfg_oe)
55 except IOError:
56     fatal("Unable to open oe.conf")
57
58 # sanity check
59 if cfg_oe is None:
60     fatal("Unable to open/parse conf/oe.conf")
61     usage(1)
62
63 rootfs = None
64 extra_files = []
65
66 if '--root' in opthash:
67     rootfs = opthash['--root']
68 if '-r' in opthash:
69     rootfs = opthash['-r']
70
71 if '--type' in opthash:
72     type = opthash['--type']
73 if '-t' in opthash:
74     type = opthash['-t']
75
76 if '--oefile' in opthash:
77     extra_files.append(opthash['--oefile'])
78 if '-e' in opthash:
79     extra_files.append(opthash['-e'])
80
81 for f in extra_files:
82     try:
83         cfg_oe = parse.handle(f, cfg_oe)
84     except IOError:
85         print "unable to open %s" % f
86
87 if not rootfs:
88     rootfs = data.getVar('IMAGE_ROOTFS', cfg_oe, 1)
89
90 if not rootfs:
91     oe.fatal("IMAGE_ROOTFS not defined")
92
93 data.setVar('IMAGE_ROOTFS', rootfs, cfg_oe)
94
95 from copy import copy, deepcopy
96 localdata = deepcopy(cfg_oe)
97
98 overrides = data.getVar('OVERRIDES', localdata)
99 if not overrides:
100     oe.fatal("OVERRIDES not defined.")
101 data.setVar('OVERRIDES', '%s:%s' % (overrides, type), localdata)
102 data.update_data(localdata)
103 data.setVar('OVERRIDES', overrides, localdata)
104
105 topdir = data.getVar('TOPDIR', localdata, 1) or os.getcwd()
106
107 cmd = data.getVar('IMAGE_CMD', localdata, 1)
108 if not cmd:
109     oe.fatal("IMAGE_CMD not defined")
110
111 outdir = data.getVar('DEPLOY_DIR_IMAGE', localdata, 1)
112 if not outdir:
113     oe.fatal('DEPLOY_DIR_IMAGE not defined')
114 mkdirhier(outdir)
115
116 #depends = data.getVar('IMAGE_DEPENDS', localdata, 1) or ""
117 #if depends:
118 #       oe.note("Spawning oemake to satisfy dependencies: %s" % depends)
119 #       ret = os.system('oemake %s' % depends)
120 #       if ret != 0:
121 #           oe.error("executing oemake to satisfy dependencies")
122
123 oe.note("Executing %s" % cmd)
124 data.setVar('T', '${TMPDIR}', localdata)
125 data.setVar('image_cmd', cmd, localdata)
126 data.setVarFlag('image_cmd', 'func', 1, localdata)
127 try:
128     oe.build.exec_func('image_cmd', localdata)
129 except oe.build.FuncFailed:
130     sys.exit(1)
131 #ret = os.system(cmd)
132 #sys.exit(ret)