summaryrefslogtreecommitdiffstats
path: root/meta/classes/staging.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/staging.bbclass')
-rw-r--r--meta/classes/staging.bbclass113
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
2sysroot_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
20sysroot_stage_libdir() {
21 src="$1"
22 dest="$2"
23
24 sysroot_stage_dir $src $dest
25}
26
27sysroot_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
59sysroot_stage_all() {
60 sysroot_stage_dirs ${D} ${SYSROOT_DESTDIR}
61}
62
63do_populate_sysroot[dirs] = "${SYSROOT_DESTDIR}"
64do_populate_sysroot[umask] = "022"
65
66addtask populate_sysroot after do_install
67
68SYSROOT_PREPROCESS_FUNCS ?= ""
69SYSROOT_DESTDIR = "${WORKDIR}/sysroot-destdir/"
70SYSROOT_LOCK = "${STAGING_DIR}/staging.lock"
71
72# We clean out any existing sstate from the sysroot if we rerun configure
73python sysroot_cleansstate () {
74 ss = sstate_state_fromvars(d, "populate_sysroot")
75 sstate_clean(ss, d)
76}
77do_configure[prefuncs] += "sysroot_cleansstate"
78
79
80BB_SETSCENE_VERIFY_FUNCTION = "sysroot_checkhashes"
81
82def 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
95python 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
101SSTATETASKS += "do_populate_sysroot"
102do_populate_sysroot[cleandirs] = "${SYSROOT_DESTDIR}"
103do_populate_sysroot[sstate-name] = "populate-sysroot"
104do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}"
105do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_HOST}/"
106do_populate_sysroot[stamp-extra-info] = "${MACHINE}"
107
108python do_populate_sysroot_setscene () {
109 sstate_setscene(d)
110}
111addtask do_populate_sysroot_setscene
112
113