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