diff options
Diffstat (limited to 'meta/lib/oe/sdk.py')
-rw-r--r-- | meta/lib/oe/sdk.py | 76 |
1 files changed, 52 insertions, 24 deletions
diff --git a/meta/lib/oe/sdk.py b/meta/lib/oe/sdk.py index 53da0f01ad..3103f48894 100644 --- a/meta/lib/oe/sdk.py +++ b/meta/lib/oe/sdk.py | |||
@@ -5,6 +5,7 @@ from oe.package_manager import * | |||
5 | import os | 5 | import os |
6 | import shutil | 6 | import shutil |
7 | import glob | 7 | import glob |
8 | import traceback | ||
8 | 9 | ||
9 | 10 | ||
10 | class Sdk(object): | 11 | class Sdk(object): |
@@ -25,7 +26,7 @@ class Sdk(object): | |||
25 | else: | 26 | else: |
26 | self.manifest_dir = manifest_dir | 27 | self.manifest_dir = manifest_dir |
27 | 28 | ||
28 | bb.utils.remove(self.sdk_output, True) | 29 | self.remove(self.sdk_output, True) |
29 | 30 | ||
30 | self.install_order = Manifest.INSTALL_ORDER | 31 | self.install_order = Manifest.INSTALL_ORDER |
31 | 32 | ||
@@ -34,29 +35,56 @@ class Sdk(object): | |||
34 | pass | 35 | pass |
35 | 36 | ||
36 | def populate(self): | 37 | def populate(self): |
37 | bb.utils.mkdirhier(self.sdk_output) | 38 | self.mkdirhier(self.sdk_output) |
38 | 39 | ||
39 | # call backend dependent implementation | 40 | # call backend dependent implementation |
40 | self._populate() | 41 | self._populate() |
41 | 42 | ||
42 | # Don't ship any libGL in the SDK | 43 | # Don't ship any libGL in the SDK |
43 | bb.utils.remove(os.path.join(self.sdk_output, self.sdk_native_path, | 44 | self.remove(os.path.join(self.sdk_output, self.sdk_native_path, |
44 | self.d.getVar('libdir_nativesdk', True).strip('/'), | 45 | self.d.getVar('libdir_nativesdk', True).strip('/'), |
45 | "libGL*")) | 46 | "libGL*")) |
46 | 47 | ||
47 | # Fix or remove broken .la files | 48 | # Fix or remove broken .la files |
48 | bb.utils.remove(os.path.join(self.sdk_output, self.sdk_native_path, | 49 | self.remove(os.path.join(self.sdk_output, self.sdk_native_path, |
49 | self.d.getVar('libdir_nativesdk', True).strip('/'), | 50 | self.d.getVar('libdir_nativesdk', True).strip('/'), |
50 | "*.la")) | 51 | "*.la")) |
51 | 52 | ||
52 | # Link the ld.so.cache file into the hosts filesystem | 53 | # Link the ld.so.cache file into the hosts filesystem |
53 | link_name = os.path.join(self.sdk_output, self.sdk_native_path, | 54 | link_name = os.path.join(self.sdk_output, self.sdk_native_path, |
54 | self.sysconfdir, "ld.so.cache") | 55 | self.sysconfdir, "ld.so.cache") |
55 | bb.utils.mkdirhier(os.path.dirname(link_name)) | 56 | self.mkdirhier(os.path.dirname(link_name)) |
56 | os.symlink("/etc/ld.so.cache", link_name) | 57 | os.symlink("/etc/ld.so.cache", link_name) |
57 | 58 | ||
58 | execute_pre_post_process(self.d, self.d.getVar('SDK_POSTPROCESS_COMMAND', True)) | 59 | execute_pre_post_process(self.d, self.d.getVar('SDK_POSTPROCESS_COMMAND', True)) |
59 | 60 | ||
61 | def movefile(self, sourcefile, destdir): | ||
62 | try: | ||
63 | # FIXME: this check of movefile's return code to None should be | ||
64 | # fixed within the function to use only exceptions to signal when | ||
65 | # something goes wrong | ||
66 | if (bb.utils.movefile(sourcefile, destdir) == None): | ||
67 | raise OSError("moving %s to %s failed" | ||
68 | %(sourcefile, destdir)) | ||
69 | #FIXME: using umbrella exc catching because bb.utils method raises it | ||
70 | except Exception as e: | ||
71 | bb.debug(1, "printing the stack trace\n %s" %traceback.format_exc()) | ||
72 | bb.error("unable to place %s in final SDK location" % sourcefile) | ||
73 | |||
74 | def mkdirhier(self, dirpath): | ||
75 | try: | ||
76 | bb.utils.mkdirhier(dirpath) | ||
77 | except OSError as e: | ||
78 | bb.debug(1, "printing the stack trace\n %s" %traceback.format_exc()) | ||
79 | bb.fatal("cannot make dir for SDK: %s" % dirpath) | ||
80 | |||
81 | def remove(self, path, recurse=False): | ||
82 | try: | ||
83 | bb.utils.remove(path, recurse) | ||
84 | #FIXME: using umbrella exc catching because bb.utils method raises it | ||
85 | except Exception as e: | ||
86 | bb.debug(1, "printing the stack trace\n %s" %traceback.format_exc()) | ||
87 | bb.warn("cannot remove SDK dir: %s" % path) | ||
60 | 88 | ||
61 | class RpmSdk(Sdk): | 89 | class RpmSdk(Sdk): |
62 | def __init__(self, d, manifest_dir=None): | 90 | def __init__(self, d, manifest_dir=None): |
@@ -143,15 +171,15 @@ class RpmSdk(Sdk): | |||
143 | "lib", | 171 | "lib", |
144 | "rpm" | 172 | "rpm" |
145 | ) | 173 | ) |
146 | bb.utils.mkdirhier(native_rpm_state_dir) | 174 | self.mkdirhier(native_rpm_state_dir) |
147 | for f in glob.glob(os.path.join(self.sdk_output, | 175 | for f in glob.glob(os.path.join(self.sdk_output, |
148 | "var", | 176 | "var", |
149 | "lib", | 177 | "lib", |
150 | "rpm", | 178 | "rpm", |
151 | "*")): | 179 | "*")): |
152 | bb.utils.movefile(f, native_rpm_state_dir) | 180 | self.movefile(f, native_rpm_state_dir) |
153 | 181 | ||
154 | bb.utils.remove(os.path.join(self.sdk_output, "var"), True) | 182 | self.remove(os.path.join(self.sdk_output, "var"), True) |
155 | 183 | ||
156 | # Move host sysconfig data | 184 | # Move host sysconfig data |
157 | native_sysconf_dir = os.path.join(self.sdk_output, | 185 | native_sysconf_dir = os.path.join(self.sdk_output, |
@@ -159,10 +187,10 @@ class RpmSdk(Sdk): | |||
159 | self.d.getVar('sysconfdir', | 187 | self.d.getVar('sysconfdir', |
160 | True).strip('/'), | 188 | True).strip('/'), |
161 | ) | 189 | ) |
162 | bb.utils.mkdirhier(native_sysconf_dir) | 190 | self.mkdirhier(native_sysconf_dir) |
163 | for f in glob.glob(os.path.join(self.sdk_output, "etc", "*")): | 191 | for f in glob.glob(os.path.join(self.sdk_output, "etc", "*")): |
164 | bb.utils.movefile(f, native_sysconf_dir) | 192 | self.movefile(f, native_sysconf_dir) |
165 | bb.utils.remove(os.path.join(self.sdk_output, "etc"), True) | 193 | self.remove(os.path.join(self.sdk_output, "etc"), True) |
166 | 194 | ||
167 | 195 | ||
168 | class OpkgSdk(Sdk): | 196 | class OpkgSdk(Sdk): |
@@ -219,12 +247,12 @@ class OpkgSdk(Sdk): | |||
219 | target_sysconfdir = os.path.join(self.sdk_target_sysroot, self.sysconfdir) | 247 | target_sysconfdir = os.path.join(self.sdk_target_sysroot, self.sysconfdir) |
220 | host_sysconfdir = os.path.join(self.sdk_host_sysroot, self.sysconfdir) | 248 | host_sysconfdir = os.path.join(self.sdk_host_sysroot, self.sysconfdir) |
221 | 249 | ||
222 | bb.utils.mkdirhier(target_sysconfdir) | 250 | self.mkdirhier(target_sysconfdir) |
223 | shutil.copy(self.target_conf, target_sysconfdir) | 251 | shutil.copy(self.target_conf, target_sysconfdir) |
224 | os.chmod(os.path.join(target_sysconfdir, | 252 | os.chmod(os.path.join(target_sysconfdir, |
225 | os.path.basename(self.target_conf)), 0644) | 253 | os.path.basename(self.target_conf)), 0644) |
226 | 254 | ||
227 | bb.utils.mkdirhier(host_sysconfdir) | 255 | self.mkdirhier(host_sysconfdir) |
228 | shutil.copy(self.host_conf, host_sysconfdir) | 256 | shutil.copy(self.host_conf, host_sysconfdir) |
229 | os.chmod(os.path.join(host_sysconfdir, | 257 | os.chmod(os.path.join(host_sysconfdir, |
230 | os.path.basename(self.host_conf)), 0644) | 258 | os.path.basename(self.host_conf)), 0644) |
@@ -232,11 +260,11 @@ class OpkgSdk(Sdk): | |||
232 | native_opkg_state_dir = os.path.join(self.sdk_output, self.sdk_native_path, | 260 | native_opkg_state_dir = os.path.join(self.sdk_output, self.sdk_native_path, |
233 | self.d.getVar('localstatedir_nativesdk', True).strip('/'), | 261 | self.d.getVar('localstatedir_nativesdk', True).strip('/'), |
234 | "lib", "opkg") | 262 | "lib", "opkg") |
235 | bb.utils.mkdirhier(native_opkg_state_dir) | 263 | self.mkdirhier(native_opkg_state_dir) |
236 | for f in glob.glob(os.path.join(self.sdk_output, "var", "lib", "opkg", "*")): | 264 | for f in glob.glob(os.path.join(self.sdk_output, "var", "lib", "opkg", "*")): |
237 | bb.utils.movefile(f, native_opkg_state_dir) | 265 | self.movefile(f, native_opkg_state_dir) |
238 | 266 | ||
239 | bb.utils.remove(os.path.join(self.sdk_output, "var"), True) | 267 | self.remove(os.path.join(self.sdk_output, "var"), True) |
240 | 268 | ||
241 | 269 | ||
242 | class DpkgSdk(Sdk): | 270 | class DpkgSdk(Sdk): |
@@ -264,7 +292,7 @@ class DpkgSdk(Sdk): | |||
264 | def _copy_apt_dir_to(self, dst_dir): | 292 | def _copy_apt_dir_to(self, dst_dir): |
265 | staging_etcdir_native = self.d.getVar("STAGING_ETCDIR_NATIVE", True) | 293 | staging_etcdir_native = self.d.getVar("STAGING_ETCDIR_NATIVE", True) |
266 | 294 | ||
267 | bb.utils.remove(dst_dir, True) | 295 | self.remove(dst_dir, True) |
268 | 296 | ||
269 | shutil.copytree(os.path.join(staging_etcdir_native, "apt"), dst_dir) | 297 | shutil.copytree(os.path.join(staging_etcdir_native, "apt"), dst_dir) |
270 | 298 | ||
@@ -306,11 +334,11 @@ class DpkgSdk(Sdk): | |||
306 | 334 | ||
307 | native_dpkg_state_dir = os.path.join(self.sdk_output, self.sdk_native_path, | 335 | native_dpkg_state_dir = os.path.join(self.sdk_output, self.sdk_native_path, |
308 | "var", "lib", "dpkg") | 336 | "var", "lib", "dpkg") |
309 | bb.utils.mkdirhier(native_dpkg_state_dir) | 337 | self.mkdirhier(native_dpkg_state_dir) |
310 | for f in glob.glob(os.path.join(self.sdk_output, "var", "lib", "dpkg", "*")): | 338 | for f in glob.glob(os.path.join(self.sdk_output, "var", "lib", "dpkg", "*")): |
311 | bb.utils.movefile(f, native_dpkg_state_dir) | 339 | self.movefile(f, native_dpkg_state_dir) |
340 | self.remove(os.path.join(self.sdk_output, "var"), True) | ||
312 | 341 | ||
313 | bb.utils.remove(os.path.join(self.sdk_output, "var"), True) | ||
314 | 342 | ||
315 | 343 | ||
316 | def sdk_list_installed_packages(d, target, format=None, rootfs_dir=None): | 344 | def sdk_list_installed_packages(d, target, format=None, rootfs_dir=None): |