diff options
Diffstat (limited to 'meta/classes/staging.bbclass')
-rw-r--r-- | meta/classes/staging.bbclass | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass new file mode 100644 index 0000000000..ae1c546ad6 --- /dev/null +++ b/meta/classes/staging.bbclass | |||
@@ -0,0 +1,113 @@ | |||
1 | |||
2 | sysroot_stage_dir() { | ||
3 | src="$1" | ||
4 | dest="$2" | ||
5 | # if the src doesn't exist don't do anything | ||
6 | if [ ! -d "$src" ]; then | ||
7 | return | ||
8 | fi | ||
9 | |||
10 | # We only want to stage the contents of $src if it's non-empty so first rmdir $src | ||
11 | # then if it still exists (rmdir on non-empty dir fails) we can copy its contents | ||
12 | rmdir "$src" 2> /dev/null || true | ||
13 | # However we always want to stage a $src itself, even if it's empty | ||
14 | mkdir -p "$dest" | ||
15 | if [ -d "$src" ]; then | ||
16 | tar -cf - -C "$src" -p . | tar -xf - -C "$dest" | ||
17 | fi | ||
18 | } | ||
19 | |||
20 | sysroot_stage_libdir() { | ||
21 | src="$1" | ||
22 | dest="$2" | ||
23 | |||
24 | sysroot_stage_dir $src $dest | ||
25 | } | ||
26 | |||
27 | sysroot_stage_dirs() { | ||
28 | from="$1" | ||
29 | to="$2" | ||
30 | |||
31 | sysroot_stage_dir $from${includedir} $to${includedir} | ||
32 | if [ "${BUILD_SYS}" = "${HOST_SYS}" ]; then | ||
33 | sysroot_stage_dir $from${bindir} $to${bindir} | ||
34 | sysroot_stage_dir $from${sbindir} $to${sbindir} | ||
35 | sysroot_stage_dir $from${base_bindir} $to${base_bindir} | ||
36 | sysroot_stage_dir $from${base_sbindir} $to${base_sbindir} | ||
37 | sysroot_stage_dir $from${libexecdir} $to${libexecdir} | ||
38 | sysroot_stage_dir $from${sysconfdir} $to${sysconfdir} | ||
39 | sysroot_stage_dir $from${localstatedir} $to${localstatedir} | ||
40 | fi | ||
41 | if [ -d $from${libdir} ] | ||
42 | then | ||
43 | sysroot_stage_libdir $from/${libdir} $to${libdir} | ||
44 | fi | ||
45 | if [ -d $from${base_libdir} ] | ||
46 | then | ||
47 | sysroot_stage_libdir $from${base_libdir} $to${base_libdir} | ||
48 | fi | ||
49 | if [ -d $from${nonarch_base_libdir} ] | ||
50 | then | ||
51 | sysroot_stage_libdir $from${nonarch_base_libdir} $to${nonarch_base_libdir} | ||
52 | fi | ||
53 | sysroot_stage_dir $from${datadir} $to${datadir} | ||
54 | # We don't care about docs/info/manpages/locales | ||
55 | rm -rf $to${mandir}/ $to${docdir}/ $to${infodir}/ ${to}${datadir}/locale/ | ||
56 | rm -rf $to${datadir}/applications/ $to${datadir}/fonts/ $to${datadir}/pixmaps/ | ||
57 | } | ||
58 | |||
59 | sysroot_stage_all() { | ||
60 | sysroot_stage_dirs ${D} ${SYSROOT_DESTDIR} | ||
61 | } | ||
62 | |||
63 | do_populate_sysroot[dirs] = "${SYSROOT_DESTDIR}" | ||
64 | do_populate_sysroot[umask] = "022" | ||
65 | |||
66 | addtask populate_sysroot after do_install | ||
67 | |||
68 | SYSROOT_PREPROCESS_FUNCS ?= "" | ||
69 | SYSROOT_DESTDIR = "${WORKDIR}/sysroot-destdir/" | ||
70 | SYSROOT_LOCK = "${STAGING_DIR}/staging.lock" | ||
71 | |||
72 | # We clean out any existing sstate from the sysroot if we rerun configure | ||
73 | python sysroot_cleansstate () { | ||
74 | ss = sstate_state_fromvars(d, "populate_sysroot") | ||
75 | sstate_clean(ss, d) | ||
76 | } | ||
77 | do_configure[prefuncs] += "sysroot_cleansstate" | ||
78 | |||
79 | |||
80 | BB_SETSCENE_VERIFY_FUNCTION = "sysroot_checkhashes" | ||
81 | |||
82 | def sysroot_checkhashes(covered, tasknames, fnids, fns, d, invalidtasks = None): | ||
83 | problems = set() | ||
84 | configurefnids = set() | ||
85 | if not invalidtasks: | ||
86 | invalidtasks = xrange(len(tasknames)) | ||
87 | for task in invalidtasks: | ||
88 | if tasknames[task] == "do_configure" and task not in covered: | ||
89 | configurefnids.add(fnids[task]) | ||
90 | for task in covered: | ||
91 | if tasknames[task] == "do_populate_sysroot" and fnids[task] in configurefnids: | ||
92 | problems.add(task) | ||
93 | return problems | ||
94 | |||
95 | python do_populate_sysroot () { | ||
96 | bb.build.exec_func("sysroot_stage_all", d) | ||
97 | for f in (d.getVar('SYSROOT_PREPROCESS_FUNCS', True) or '').split(): | ||
98 | bb.build.exec_func(f, d) | ||
99 | } | ||
100 | |||
101 | SSTATETASKS += "do_populate_sysroot" | ||
102 | do_populate_sysroot[cleandirs] = "${SYSROOT_DESTDIR}" | ||
103 | do_populate_sysroot[sstate-name] = "populate-sysroot" | ||
104 | do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}" | ||
105 | do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_HOST}/" | ||
106 | do_populate_sysroot[stamp-extra-info] = "${MACHINE}" | ||
107 | |||
108 | python do_populate_sysroot_setscene () { | ||
109 | sstate_setscene(d) | ||
110 | } | ||
111 | addtask do_populate_sysroot_setscene | ||
112 | |||
113 | |||