merge of '3447c93047f153922a4e64420c682c7b0d9f6e9a'
[vuplus_openembedded] / classes / sourcepkg.bbclass
1 DEPLOY_DIR_SRC ?= "${DEPLOY_DIR}/source"
2 EXCLUDE_FROM ?= ".pc autom4te.cache"
3
4 # used as part of a path. make sure it's set
5 DISTRO ?= "openembedded"
6
7 def get_src_tree(d):
8         import bb
9         import os, os.path
10
11         workdir = bb.data.getVar('WORKDIR', d, 1)
12         if not workdir:
13                 bb.error("WORKDIR not defined, unable to find source tree.")
14                 return
15
16         s = bb.data.getVar('S', d, 0)
17         if not s:
18                 bb.error("S not defined, unable to find source tree.")
19                 return
20
21         try:
22                 s_tree_raw = s.split('/')[1]
23         except IndexError:
24                 return
25
26         s_tree = bb.data.expand(s_tree_raw, d)
27
28         src_tree_path = os.path.join(workdir, s_tree)
29         try:
30                 os.listdir(src_tree_path)
31         except OSError:
32                 bb.error("Expected to find source tree in '%s' which doesn't exist." % src_tree_path, s)
33                 return
34
35         bb.debug("Assuming source tree is '%s'" % src_tree_path)
36
37         return s_tree
38
39 sourcepkg_do_create_orig_tgz(){
40
41         mkdir -p ${DEPLOY_DIR_SRC}
42         cd ${WORKDIR}
43         for i in ${EXCLUDE_FROM}; do
44                 echo $i >> temp/exclude-from-file
45         done
46
47         src_tree=${@get_src_tree(d)}
48         if test x${src_tree} = x; then
49                 oenote "Skipping empty source tree"
50                 return
51         fi
52
53         oenote "Creating .orig.tar.gz in ${DEPLOY_DIR_SRC}/${P}.orig.tar.gz"
54         tar cvzf ${DEPLOY_DIR_SRC}/${P}.orig.tar.gz --exclude-from temp/exclude-from-file $src_tree
55         cp -av $src_tree $src_tree.orig
56 }
57
58 sourcepkg_do_archive_bb() {
59
60         src_tree=${@get_src_tree(d)}
61         dest=${WORKDIR}/$src_tree/${DISTRO}
62         mkdir -p $dest
63
64         cp ${FILE} $dest
65 }
66
67 python sourcepkg_do_dumpdata() {
68         import os
69         import os.path
70
71         workdir = bb.data.getVar('WORKDIR', d, 1)
72         distro = bb.data.getVar('DISTRO', d, 1)
73         s_tree = get_src_tree(d)
74         openembeddeddir = os.path.join(workdir, s_tree, distro)
75         dumpfile = os.path.join(openembeddeddir, bb.data.expand("${P}-${PR}.showdata.dump",d))
76         
77         try:
78                 os.mkdir(openembeddeddir)
79         except OSError:
80                 # dir exists
81                 pass
82
83         bb.note("Dumping metadata into '%s'" % dumpfile)
84         f = open(dumpfile, "w")
85         # emit variables and shell functions
86
87         # FIXME: if we emit all, bitbake will get error while
88         # evaluating AUTOREV since we have AUTOREV =
89         # "${@bb.fetch.get_srcrev(d)}" in bitbake.conf, but get_srcrev
90         # without a valid SRC_URI will cause problem.
91
92         bb.data.emit_env(f, d, True)
93
94         # emit the metadata which isnt valid shell
95         for e in d.keys():
96                 if bb.data.getVarFlag(e, 'python', d):
97                         f.write("\npython %s () {\n%s}\n" % (e, bb.data.getVar(e, d, 1)))
98         f.close()
99 }
100
101 sourcepkg_do_create_diff_gz(){
102
103         cd ${WORKDIR}
104         for i in ${EXCLUDE_FROM}; do
105                 echo $i >> temp/exclude-from-file
106         done
107
108         src_tree=${@get_src_tree(d)}
109         if test x${src_tree} = x; then
110                 oenote "Skipping empty source tree"
111                 return
112         fi
113
114         for i in `find . -maxdepth 1 -type f`; do
115                 mkdir -p $src_tree/${DISTRO}/files
116                 cp $i $src_tree/${DISTRO}/files
117         done
118         
119         oenote "Creating .diff.gz in ${DEPLOY_DIR_SRC}/${P}-${PR}.diff.gz"
120         LC_ALL=C TZ=UTC0 diff --exclude-from=temp/exclude-from-file -Naur $src_tree.orig $src_tree | gzip -c > ${DEPLOY_DIR_SRC}/${P}-${PR}.diff.gz
121         rm -rf $src_tree.orig
122 }
123
124 #EXPORT_FUNCTIONS do_create_orig_tgz do_archive_bb do_dumpdata do_create_diff_gz
125 EXPORT_FUNCTIONS do_create_orig_tgz do_archive_bb do_create_diff_gz
126
127 addtask create_orig_tgz after do_unpack before do_patch
128 addtask archive_bb after do_patch before do_configure
129 #addtask dumpdata after do_archive_bb before do_configure
130 addtask create_diff_gz after do_archive_bb before do_configure