summaryrefslogtreecommitdiffstats
path: root/meta/classes/archiver.bbclass
diff options
context:
space:
mode:
authorRobert Yang <liezhi.yang@windriver.com>2012-08-23 23:03:10 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2012-08-29 16:02:07 -0700
commitc96f6ee659cd4c20fd826f633e634ba0ef2f340b (patch)
tree946d035b3c438333f8e9479b9cc498f367ecee11 /meta/classes/archiver.bbclass
parenta6588b8f79afa0a06c346dc00aa1eb3b1e691a7a (diff)
downloadpoky-c96f6ee659cd4c20fd826f633e634ba0ef2f340b.tar.gz
archiver.bbclass: indent fixes
Several fixes: * It uses mixed tab and whitespace as the indent in one function, Fix them to use "4 spaces" as the indent. * Remove the unwanted blank, for example, more than one blank lines appeared together. * Remove the tail whitespace. [YOCTO #2619] (From OE-Core rev: 5eacbcdf306d9e743164a1563559cd24eb5fffe0) Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/archiver.bbclass')
-rw-r--r--meta/classes/archiver.bbclass757
1 files changed, 379 insertions, 378 deletions
diff --git a/meta/classes/archiver.bbclass b/meta/classes/archiver.bbclass
index 8e97e447c9..117ad02da4 100644
--- a/meta/classes/archiver.bbclass
+++ b/meta/classes/archiver.bbclass
@@ -1,6 +1,10 @@
1# ex:ts=4:sw=4:sts=4:et
2# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
3#
1# This file is used for archiving sources ,patches,and logs to tarball. 4# This file is used for archiving sources ,patches,and logs to tarball.
2# It also output building environment to xxx.dump.data and create xxx.diff.gz to record 5# It also output building environment to xxx.dump.data and create xxx.diff.gz to record
3# all content in ${S} to a diff file. 6# all content in ${S} to a diff file.
7#
4 8
5ARCHIVE_EXCLUDE_FROM ?= ".pc autom4te.cache" 9ARCHIVE_EXCLUDE_FROM ?= ".pc autom4te.cache"
6ARCHIVE_TYPE ?= "TAR SRPM" 10ARCHIVE_TYPE ?= "TAR SRPM"
@@ -67,454 +71,451 @@ def tar_filter(d):
67 if d.getVar('FILTER', True).upper() == "YES": 71 if d.getVar('FILTER', True).upper() == "YES":
68 included, reason = copyleft_should_include(d) 72 included, reason = copyleft_should_include(d)
69 if not included: 73 if not included:
70 return False 74 return False
71 else: 75 else:
72 return True 76 return True
73 else: 77 else:
74 return False 78 return False
75 79
76def get_bb_inc(d): 80def get_bb_inc(d):
77 '''create a directory "script-logs" including .bb and .inc file in ${WORKDIR}''' 81 '''create a directory "script-logs" including .bb and .inc file in ${WORKDIR}'''
78 import re 82 import re
79 import shutil 83 import shutil
80 84
81 bbinc = [] 85 bbinc = []
82 pat=re.compile('require\s*([^\s]*\.*)(.*)') 86 pat=re.compile('require\s*([^\s]*\.*)(.*)')
83 work_dir = d.getVar('WORKDIR', True) 87 work_dir = d.getVar('WORKDIR', True)
84 bbfile = d.getVar('FILE', True) 88 bbfile = d.getVar('FILE', True)
85 bbdir = os.path.dirname(bbfile) 89 bbdir = os.path.dirname(bbfile)
86 script_logs = os.path.join(work_dir,'script-logs') 90 script_logs = os.path.join(work_dir,'script-logs')
87 bb_inc = os.path.join(script_logs,'bb_inc') 91 bb_inc = os.path.join(script_logs,'bb_inc')
88 bb.mkdirhier(script_logs) 92 bb.mkdirhier(script_logs)
89 bb.mkdirhier(bb_inc) 93 bb.mkdirhier(bb_inc)
90 94
91 def find_file(dir,file): 95 def find_file(dir,file):
92 for root, dirs, files in os.walk(dir): 96 for root, dirs, files in os.walk(dir):
93 if file in files: 97 if file in files:
94 return os.path.join(root,file) 98 return os.path.join(root,file)
95 99
96 def get_inc (file): 100 def get_inc (file):
97 f = open(file,'r') 101 f = open(file,'r')
98 for line in f.readlines(): 102 for line in f.readlines():
99 if 'require' not in line: 103 if 'require' not in line:
100 bbinc.append(file) 104 bbinc.append(file)
101 else: 105 else:
102 try: 106 try:
103 incfile = pat.match(line).group(1) 107 incfile = pat.match(line).group(1)
104 incfile = bb.data.expand(os.path.basename(incfile),d) 108 incfile = bb.data.expand(os.path.basename(incfile),d)
105 abs_incfile = find_file(bbdir,incfile) 109 abs_incfile = find_file(bbdir,incfile)
106 if abs_incfile: 110 if abs_incfile:
107 bbinc.append(abs_incfile) 111 bbinc.append(abs_incfile)
108 get_inc(abs_incfile) 112 get_inc(abs_incfile)
109 except AttributeError: 113 except AttributeError:
110 pass 114 pass
111 get_inc(bbfile) 115 get_inc(bbfile)
112 bbinc = list(set(bbinc)) 116 bbinc = list(set(bbinc))
113 for bbincfile in bbinc: 117 for bbincfile in bbinc:
114 shutil.copy(bbincfile,bb_inc) 118 shutil.copy(bbincfile,bb_inc)
115
116 try:
117 bb.mkdirhier(os.path.join(script_logs,'temp'))
118 oe.path.copytree(os.path.join(work_dir,'temp'), os.path.join(script_logs,'temp'))
119 except (IOError,AttributeError):
120 pass
121 return script_logs
122
123def get_series(d):
124 '''copy patches and series file to a pointed directory which will be archived to tarball in ${WORKDIR}'''
125 import shutil
126
127 src_patches=[]
128 pf = d.getVar('PF', True)
129 work_dir = d.getVar('WORKDIR', True)
130 s = d.getVar('S',True)
131 dest = os.path.join(work_dir, pf + '-series')
132 shutil.rmtree(dest, ignore_errors=True)
133 bb.mkdirhier(dest)
134
135 src_uri = d.getVar('SRC_URI', True).split()
136 fetch = bb.fetch2.Fetch(src_uri, d)
137 locals = (fetch.localpath(url) for url in fetch.urls)
138 for local in locals:
139 src_patches.append(local)
140 if not cmp(work_dir,s):
141 tmp_list = src_patches
142 else:
143 tmp_list = src_patches[1:]
144
145 for patch in tmp_list:
146 try:
147 shutil.copy(patch,dest)
148 except IOError:
149 if os.path.isdir(patch):
150 bb.mkdirhier(os.path.join(dest,patch))
151 oe.path.copytree(patch, os.path.join(dest,patch))
152 return dest
153
154def get_applying_patches(d):
155 """only copy applying patches to a pointed directory which will be archived to tarball"""
156 import shutil
157 119
120 try:
121 bb.mkdirhier(os.path.join(script_logs,'temp'))
122 oe.path.copytree(os.path.join(work_dir,'temp'), os.path.join(script_logs,'temp'))
123 except (IOError,AttributeError):
124 pass
125 return script_logs
158 126
159 pf = d.getVar('PF', True) 127def get_series(d):
160 work_dir = d.getVar('WORKDIR', True) 128 '''copy patches and series file to a pointed directory which will be archived to tarball in ${WORKDIR}'''
161 dest = os.path.join(work_dir, pf + '-patches') 129 import shutil
162 shutil.rmtree(dest, ignore_errors=True) 130
163 bb.mkdirhier(dest) 131 src_patches=[]
132 pf = d.getVar('PF', True)
133 work_dir = d.getVar('WORKDIR', True)
134 s = d.getVar('S',True)
135 dest = os.path.join(work_dir, pf + '-series')
136 shutil.rmtree(dest, ignore_errors=True)
137 bb.mkdirhier(dest)
138
139 src_uri = d.getVar('SRC_URI', True).split()
140 fetch = bb.fetch2.Fetch(src_uri, d)
141 locals = (fetch.localpath(url) for url in fetch.urls)
142 for local in locals:
143 src_patches.append(local)
144 if not cmp(work_dir,s):
145 tmp_list = src_patches
146 else:
147 tmp_list = src_patches[1:]
164 148
149 for patch in tmp_list:
150 try:
151 shutil.copy(patch,dest)
152 except IOError:
153 if os.path.isdir(patch):
154 bb.mkdirhier(os.path.join(dest,patch))
155 oe.path.copytree(patch, os.path.join(dest,patch))
156 return dest
165 157
166 patches = src_patches(d) 158def get_applying_patches(d):
167 for patch in patches: 159 """only copy applying patches to a pointed directory which will be archived to tarball"""
168 _, _, local, _, _, parm = bb.decodeurl(patch) 160 import shutil
169 if local: 161
170 shutil.copy(local,dest) 162 pf = d.getVar('PF', True)
171 return dest 163 work_dir = d.getVar('WORKDIR', True)
164 dest = os.path.join(work_dir, pf + '-patches')
165 shutil.rmtree(dest, ignore_errors=True)
166 bb.mkdirhier(dest)
167
168 patches = src_patches(d)
169 for patch in patches:
170 _, _, local, _, _, parm = bb.decodeurl(patch)
171 if local:
172 shutil.copy(local,dest)
173 return dest
172 174
173def not_tarball(d): 175def not_tarball(d):
174 '''packages including key words 'work-shared','native', 'task-' will be passed''' 176 '''packages including key words 'work-shared','native', 'task-' will be passed'''
175 177
176 workdir = d.getVar('WORKDIR',True) 178 workdir = d.getVar('WORKDIR',True)
177 s = d.getVar('S',True) 179 s = d.getVar('S',True)
178 if 'work-shared' in s or 'task-' in workdir or 'native' in workdir: 180 if 'work-shared' in s or 'task-' in workdir or 'native' in workdir:
179 return True 181 return True
180 else: 182 else:
181 return False 183 return False
182 184
183def get_source_from_downloads(d,stage_name): 185def get_source_from_downloads(d,stage_name):
184 '''copy tarball of $P to $WORKDIR when this tarball exists in $DL_DIR''' 186 '''copy tarball of $P to $WORKDIR when this tarball exists in $DL_DIR'''
185 if stage_name in 'patched' 'configured': 187 if stage_name in 'patched' 'configured':
186 return 188 return
187 pf = d.getVar('PF', True) 189 pf = d.getVar('PF', True)
188 dl_dir = d.getVar('DL_DIR',True) 190 dl_dir = d.getVar('DL_DIR',True)
189 try: 191 try:
190 source = os.path.join(dl_dir,os.path.basename(d.getVar('SRC_URI', True).split()[0])) 192 source = os.path.join(dl_dir,os.path.basename(d.getVar('SRC_URI', True).split()[0]))
191 if os.path.exists(source) and not os.path.isdir(source): 193 if os.path.exists(source) and not os.path.isdir(source):
192 return source 194 return source
193 except (IndexError, OSError): 195 except (IndexError, OSError):
194 pass 196 pass
195 return '' 197 return ''
196 198
197def do_tarball(workdir,srcdir,tarname): 199def do_tarball(workdir,srcdir,tarname):
198 '''tar "srcdir" under "workdir" to "tarname"''' 200 '''tar "srcdir" under "workdir" to "tarname"'''
199 import tarfile 201 import tarfile
200 202
201 sav_dir = os.getcwd() 203 sav_dir = os.getcwd()
202 os.chdir(workdir) 204 os.chdir(workdir)
203 if (len(os.listdir(srcdir))) != 0: 205 if (len(os.listdir(srcdir))) != 0:
204 tar = tarfile.open(tarname, "w:gz") 206 tar = tarfile.open(tarname, "w:gz")
205 tar.add(srcdir) 207 tar.add(srcdir)
206 tar.close() 208 tar.close()
207 else: 209 else:
208 tarname = '' 210 tarname = ''
209 os.chdir(sav_dir) 211 os.chdir(sav_dir)
210 return tarname 212 return tarname
211 213
212def archive_sources_from_directory(d,stage_name): 214def archive_sources_from_directory(d,stage_name):
213 '''archive sources codes tree to tarball when tarball of $P doesn't exist in $DL_DIR''' 215 '''archive sources codes tree to tarball when tarball of $P doesn't exist in $DL_DIR'''
214 import shutil 216 import shutil
215 217
216 s = d.getVar('S',True) 218 s = d.getVar('S',True)
217 work_dir=d.getVar('WORKDIR', True) 219 work_dir=d.getVar('WORKDIR', True)
218 PF = d.getVar('PF',True) 220 PF = d.getVar('PF',True)
219 tarname = PF + '-' + stage_name + ".tar.gz" 221 tarname = PF + '-' + stage_name + ".tar.gz"
220 222
221 if os.path.exists(s) and work_dir in s: 223 if os.path.exists(s) and work_dir in s:
222 try: 224 try:
223 source_dir = os.path.join(work_dir,[ i for i in s.replace(work_dir,'').split('/') if i][0]) 225 source_dir = os.path.join(work_dir,[ i for i in s.replace(work_dir,'').split('/') if i][0])
224 except IndexError: 226 except IndexError:
225 if not cmp(s,work_dir): 227 if not cmp(s,work_dir):
226 return '' 228 return ''
227 else: 229 else:
228 return '' 230 return ''
229 source = os.path.basename(source_dir) 231 source = os.path.basename(source_dir)
230 return do_tarball(work_dir,source,tarname) 232 return do_tarball(work_dir,source,tarname)
231 233
232def archive_sources(d,stage_name): 234def archive_sources(d,stage_name):
233 '''copy tarball from $DL_DIR to $WORKDIR if have tarball, archive source codes tree in $WORKDIR if $P is directory instead of tarball''' 235 '''copy tarball from $DL_DIR to $WORKDIR if have tarball, archive source codes tree in $WORKDIR if $P is directory instead of tarball'''
234 import shutil 236 import shutil
235 work_dir = d.getVar('WORKDIR',True) 237 work_dir = d.getVar('WORKDIR',True)
236 file = get_source_from_downloads(d,stage_name) 238 file = get_source_from_downloads(d,stage_name)
237 if file: 239 if file:
238 shutil.copy(file,work_dir) 240 shutil.copy(file,work_dir)
239 file = os.path.basename(file) 241 file = os.path.basename(file)
240 else: 242 else:
241 file = archive_sources_from_directory(d,stage_name) 243 file = archive_sources_from_directory(d,stage_name)
242 return file 244 return file
243
244 245
245def archive_patches(d,patchdir,series): 246def archive_patches(d,patchdir,series):
246 '''archive patches to tarball and also include series files if 'series' is True''' 247 '''archive patches to tarball and also include series files if 'series' is True'''
247 import shutil 248 import shutil
248 249
249 s = d.getVar('S',True) 250 s = d.getVar('S',True)
250 work_dir = d.getVar('WORKDIR', True) 251 work_dir = d.getVar('WORKDIR', True)
251 patch_dir = os.path.basename(patchdir) 252 patch_dir = os.path.basename(patchdir)
252 tarname = patch_dir + ".tar.gz" 253 tarname = patch_dir + ".tar.gz"
253 if series == 'all' and os.path.exists(os.path.join(s,'patches/series')): 254 if series == 'all' and os.path.exists(os.path.join(s,'patches/series')):
254 shutil.copy(os.path.join(s,'patches/series'),patchdir) 255 shutil.copy(os.path.join(s,'patches/series'),patchdir)
255 tarname = do_tarball(work_dir,patch_dir,tarname) 256 tarname = do_tarball(work_dir,patch_dir,tarname)
256 shutil.rmtree(patchdir, ignore_errors=True) 257 shutil.rmtree(patchdir, ignore_errors=True)
257 return tarname 258 return tarname
258 259
259def select_archive_patches(d,option): 260def select_archive_patches(d,option):
260 '''select to archive all patches including non-applying and series or applying patches ''' 261 '''select to archive all patches including non-applying and series or applying patches '''
261 if option == "all": 262 if option == "all":
262 patchdir = get_series(d) 263 patchdir = get_series(d)
263 elif option == "applying": 264 elif option == "applying":
264 patchdir = get_applying_patches(d) 265 patchdir = get_applying_patches(d)
265 try: 266 try:
266 os.rmdir(patchdir) 267 os.rmdir(patchdir)
267 except OSError: 268 except OSError:
268 tarpatch = archive_patches(d,patchdir,option) 269 tarpatch = archive_patches(d,patchdir,option)
269 return tarpatch 270 return tarpatch
270 return 271 return
271 272
272def archive_logs(d,logdir,bbinc=False): 273def archive_logs(d,logdir,bbinc=False):
273 '''archive logs in temp to tarball and .bb and .inc files if bbinc is True ''' 274 '''archive logs in temp to tarball and .bb and .inc files if bbinc is True '''
274 import shutil 275 import shutil
275 276
276 pf = d.getVar('PF',True) 277 pf = d.getVar('PF',True)
277 work_dir = d.getVar('WORKDIR',True) 278 work_dir = d.getVar('WORKDIR',True)
278 log_dir = os.path.basename(logdir) 279 log_dir = os.path.basename(logdir)
279 tarname = pf + '-' + log_dir + ".tar.gz" 280 tarname = pf + '-' + log_dir + ".tar.gz"
280 tarname = do_tarball(work_dir,log_dir,tarname) 281 tarname = do_tarball(work_dir,log_dir,tarname)
281 if bbinc: 282 if bbinc:
282 shutil.rmtree(logdir, ignore_errors=True) 283 shutil.rmtree(logdir, ignore_errors=True)
283 return tarname 284 return tarname
284 285
285def get_licenses(d): 286def get_licenses(d):
286 '''get licenses for running .bb file''' 287 '''get licenses for running .bb file'''
287 import oe.license 288 import oe.license
288 289
289 licenses_type = d.getVar('LICENSE', True) or "" 290 licenses_type = d.getVar('LICENSE', True) or ""
290 lics = oe.license.is_included(licenses_type)[1:][0] 291 lics = oe.license.is_included(licenses_type)[1:][0]
291 lice = '' 292 lice = ''
292 for lic in lics: 293 for lic in lics:
293 licens = d.getVarFlag('SPDXLICENSEMAP', lic) 294 licens = d.getVarFlag('SPDXLICENSEMAP', lic)
294 if licens != None: 295 if licens != None:
295 lice += licens 296 lice += licens
296 else: 297 else:
297 lice += lic 298 lice += lic
298 return lice 299 return lice
299 300
300 301
301def move_tarball_deploy(d,tarball_list): 302def move_tarball_deploy(d,tarball_list):
302 '''move tarball in location to ${DEPLOY_DIR}/sources''' 303 '''move tarball in location to ${DEPLOY_DIR}/sources'''
303 import shutil 304 import shutil
304 305
305 if tarball_list is []: 306 if tarball_list is []:
306 return 307 return
307 target_sys = d.getVar('TARGET_SYS', True) 308 target_sys = d.getVar('TARGET_SYS', True)
308 pf = d.getVar('PF', True) 309 pf = d.getVar('PF', True)
309 licenses = get_licenses(d) 310 licenses = get_licenses(d)
310 work_dir = d.getVar('WORKDIR',True) 311 work_dir = d.getVar('WORKDIR',True)
311 tar_sources = d.getVar('DEPLOY_DIR', True) + '/sources/' + target_sys + '/' + licenses + '/' + pf 312 tar_sources = d.getVar('DEPLOY_DIR', True) + '/sources/' + target_sys + '/' + licenses + '/' + pf
312 if not os.path.exists(tar_sources): 313 if not os.path.exists(tar_sources):
313 bb.mkdirhier(tar_sources) 314 bb.mkdirhier(tar_sources)
314 for source in tarball_list: 315 for source in tarball_list:
315 if source: 316 if source:
316 if os.path.exists(os.path.join(tar_sources, source)): 317 if os.path.exists(os.path.join(tar_sources, source)):
317 os.remove(os.path.join(tar_sources,source)) 318 os.remove(os.path.join(tar_sources,source))
318 shutil.move(os.path.join(work_dir,source),tar_sources) 319 shutil.move(os.path.join(work_dir,source),tar_sources)
319 320
320def check_archiving_type(d): 321def check_archiving_type(d):
321 '''check the type for archiving package('tar' or 'srpm')''' 322 '''check the type for archiving package('tar' or 'srpm')'''
322 try: 323 try:
323 if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() not in d.getVar('ARCHIVE_TYPE', True).split(): 324 if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() not in d.getVar('ARCHIVE_TYPE', True).split():
324 raise AttributeError 325 raise AttributeError
325 except AttributeError: 326 except AttributeError:
326 bb.fatal("\"SOURCE_ARCHIVE_PACKAGE_TYPE\" is \'tar\' or \'srpm\', no other types") 327 bb.fatal("\"SOURCE_ARCHIVE_PACKAGE_TYPE\" is \'tar\' or \'srpm\', no other types")
327 328
328def store_package(d,package_name): 329def store_package(d,package_name):
329 '''store tarbablls name to file "tar-package"''' 330 '''store tarbablls name to file "tar-package"'''
330 try: 331 try:
331 f = open(os.path.join(d.getVar('WORKDIR',True),'tar-package'),'a') 332 f = open(os.path.join(d.getVar('WORKDIR',True),'tar-package'),'a')
332 f.write(package_name + ' ') 333 f.write(package_name + ' ')
333 f.close() 334 f.close()
334 except IOError: 335 except IOError:
335 pass 336 pass
336 337
337def get_package(d): 338def get_package(d):
338 '''get tarballs name from "tar-package"''' 339 '''get tarballs name from "tar-package"'''
339 work_dir = (d.getVar('WORKDIR', True)) 340 work_dir = (d.getVar('WORKDIR', True))
340 tarpackage = os.path.join(work_dir,'tar-package') 341 tarpackage = os.path.join(work_dir,'tar-package')
341 try: 342 try:
342 f = open(tarpackage,'r') 343 f = open(tarpackage,'r')
343 line = list(set(f.readline().replace('\n','').split())) 344 line = list(set(f.readline().replace('\n','').split()))
344 except UnboundLocalError,IOError: 345 except UnboundLocalError,IOError:
345 pass 346 pass
346 f.close() 347 f.close()
347 return line 348 return line
348 349
349 350
350def archive_sources_patches(d,stage_name): 351def archive_sources_patches(d,stage_name):
351 '''archive sources and patches to tarball. stage_name will append strings ${stage_name} to ${PR} as middle name. for example, zlib-1.4.6-prepatch(stage_name).tar.gz ''' 352 '''archive sources and patches to tarball. stage_name will append strings ${stage_name} to ${PR} as middle name. for example, zlib-1.4.6-prepatch(stage_name).tar.gz '''
352 import shutil 353 import shutil
353 354
354 check_archiving_type(d) 355 check_archiving_type(d)
355 if not_tarball(d) or tar_filter(d): 356 if not_tarball(d) or tar_filter(d):
356 return 357 return
357 358
358 source_tar_name = archive_sources(d,stage_name) 359 source_tar_name = archive_sources(d,stage_name)
359 if stage_name == "prepatch": 360 if stage_name == "prepatch":
360 if d.getVar('PATCHES_ARCHIVE_WITH_SERIES',True).upper() == 'TRUE': 361 if d.getVar('PATCHES_ARCHIVE_WITH_SERIES',True).upper() == 'TRUE':
361 patch_tar_name = select_archive_patches(d,"all") 362 patch_tar_name = select_archive_patches(d,"all")
362 elif d.getVar('PATCHES_ARCHIVE_WITH_SERIES',True).upper() == 'FALSE': 363 elif d.getVar('PATCHES_ARCHIVE_WITH_SERIES',True).upper() == 'FALSE':
363 patch_tar_name = select_archive_patches(d,"applying") 364 patch_tar_name = select_archive_patches(d,"applying")
364 else: 365 else:
365 bb.fatal("Please define 'PATCHES_ARCHIVE_WITH_SERIES' is strings 'True' or 'False' ") 366 bb.fatal("Please define 'PATCHES_ARCHIVE_WITH_SERIES' is strings 'True' or 'False' ")
366 else: 367 else:
367 patch_tar_name = '' 368 patch_tar_name = ''
368 369
369 if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() not in 'SRPM': 370 if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() not in 'SRPM':
370 move_tarball_deploy(d,[source_tar_name,patch_tar_name]) 371 move_tarball_deploy(d,[source_tar_name,patch_tar_name])
371 else: 372 else:
372 tarpackage = os.path.join(d.getVar('WORKDIR', True),'tar-package') 373 tarpackage = os.path.join(d.getVar('WORKDIR', True),'tar-package')
373 if os.path.exists(tarpackage): 374 if os.path.exists(tarpackage):
374 os.remove(tarpackage) 375 os.remove(tarpackage)
375 for package in os.path.basename(source_tar_name), patch_tar_name: 376 for package in os.path.basename(source_tar_name), patch_tar_name:
376 if package: 377 if package:
377 store_package(d,str(package) + ' ') 378 store_package(d,str(package) + ' ')
378 379
379def archive_scripts_logs(d): 380def archive_scripts_logs(d):
380 '''archive scripts and logs. scripts include .bb and .inc files and logs include stuff in "temp".''' 381 '''archive scripts and logs. scripts include .bb and .inc files and logs include stuff in "temp".'''
381 382
382 if tar_filter(d): 383 if tar_filter(d):
383 return 384 return
384 work_dir = d.getVar('WORKDIR', True) 385 work_dir = d.getVar('WORKDIR', True)
385 temp_dir = os.path.join(work_dir,'temp') 386 temp_dir = os.path.join(work_dir,'temp')
386 source_archive_log_with_scripts = d.getVar('SOURCE_ARCHIVE_LOG_WITH_SCRIPTS', True) 387 source_archive_log_with_scripts = d.getVar('SOURCE_ARCHIVE_LOG_WITH_SCRIPTS', True)
387 if source_archive_log_with_scripts == 'logs_with_scripts': 388 if source_archive_log_with_scripts == 'logs_with_scripts':
388 logdir = get_bb_inc(d) 389 logdir = get_bb_inc(d)
389 tarlog = archive_logs(d,logdir,True) 390 tarlog = archive_logs(d,logdir,True)
390 elif source_archive_log_with_scripts == 'logs': 391 elif source_archive_log_with_scripts == 'logs':
391 if os.path.exists(temp_dir): 392 if os.path.exists(temp_dir):
392 tarlog = archive_logs(d,temp_dir,False) 393 tarlog = archive_logs(d,temp_dir,False)
393 else: 394 else:
394 return 395 return
395 396
396 if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() not in 'SRPM': 397 if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() not in 'SRPM':
397 move_tarball_deploy(d,[tarlog]) 398 move_tarball_deploy(d,[tarlog])
398 399
399 else: 400 else:
400 store_package(d,tarlog) 401 store_package(d,tarlog)
401 402
402def dumpdata(d): 403def dumpdata(d):
403 '''dump environment to "${P}-${PR}.showdata.dump" including all kinds of variables and functions when running a task''' 404 '''dump environment to "${P}-${PR}.showdata.dump" including all kinds of variables and functions when running a task'''
404 405
405 if tar_filter(d): 406 if tar_filter(d):
406 return 407 return
407 workdir = bb.data.getVar('WORKDIR', d, 1) 408 workdir = bb.data.getVar('WORKDIR', d, 1)
408 distro = bb.data.getVar('DISTRO', d, 1) 409 distro = bb.data.getVar('DISTRO', d, 1)
409 s = d.getVar('S', True) 410 s = d.getVar('S', True)
410 pf = d.getVar('PF', True) 411 pf = d.getVar('PF', True)
411 target_sys = d.getVar('TARGET_SYS', True) 412 target_sys = d.getVar('TARGET_SYS', True)
412 licenses = get_licenses(d) 413 licenses = get_licenses(d)
413 dumpdir = d.getVar('DEPLOY_DIR', True) + '/sources/' + target_sys + '/' + licenses + '/' + pf 414 dumpdir = d.getVar('DEPLOY_DIR', True) + '/sources/' + target_sys + '/' + licenses + '/' + pf
414 if not os.path.exists(dumpdir): 415 if not os.path.exists(dumpdir):
415 bb.mkdirhier(dumpdir) 416 bb.mkdirhier(dumpdir)
416 417
417 dumpfile = os.path.join(dumpdir, bb.data.expand("${P}-${PR}.showdata.dump",d)) 418 dumpfile = os.path.join(dumpdir, bb.data.expand("${P}-${PR}.showdata.dump",d))
418 419
419 bb.note("Dumping metadata into '%s'" % dumpfile) 420 bb.note("Dumping metadata into '%s'" % dumpfile)
420 f = open(dumpfile, "w") 421 f = open(dumpfile, "w")
421 # emit variables and shell functions 422 # emit variables and shell functions
422 bb.data.emit_env(f, d, True) 423 bb.data.emit_env(f, d, True)
423 # emit the metadata which isnt valid shell 424 # emit the metadata which isnt valid shell
424 for e in d.keys(): 425 for e in d.keys():
425 if bb.data.getVarFlag(e, 'python', d): 426 if bb.data.getVarFlag(e, 'python', d):
426 f.write("\npython %s () {\n%s}\n" % (e, bb.data.getVar(e, d, 1))) 427 f.write("\npython %s () {\n%s}\n" % (e, bb.data.getVar(e, d, 1)))
427 f.close() 428 f.close()
428 429
429def create_diff_gz(d): 430def create_diff_gz(d):
430 '''creating .diff.gz in ${DEPLOY_DIR_SRC}/${P}-${PR}.diff.g gz for mapping all content in 's' including patches to xxx.diff.gz''' 431 '''creating .diff.gz in ${DEPLOY_DIR_SRC}/${P}-${PR}.diff.g gz for mapping all content in 's' including patches to xxx.diff.gz'''
431 import shutil 432 import shutil
432 import subprocess 433 import subprocess
433 434
434 if tar_filter(d): 435 if tar_filter(d):
435 return 436 return
436 work_dir = d.getVar('WORKDIR', True) 437 work_dir = d.getVar('WORKDIR', True)
437 exclude_from = d.getVar('ARCHIVE_EXCLUDE_FROM', True).split() 438 exclude_from = d.getVar('ARCHIVE_EXCLUDE_FROM', True).split()
438 pf = d.getVar('PF', True) 439 pf = d.getVar('PF', True)
439 licenses = get_licenses(d) 440 licenses = get_licenses(d)
440 target_sys = d.getVar('TARGET_SYS', True) 441 target_sys = d.getVar('TARGET_SYS', True)
441 diff_dir = d.getVar('DEPLOY_DIR', True) + '/sources/' + target_sys + '/' + licenses + '/' + pf 442 diff_dir = d.getVar('DEPLOY_DIR', True) + '/sources/' + target_sys + '/' + licenses + '/' + pf
442 diff_file = os.path.join(diff_dir, bb.data.expand("${P}-${PR}.diff.gz",d)) 443 diff_file = os.path.join(diff_dir, bb.data.expand("${P}-${PR}.diff.gz",d))
443 444
444 f = open(os.path.join(work_dir,'temp/exclude-from-file'), 'a') 445 f = open(os.path.join(work_dir,'temp/exclude-from-file'), 'a')
445 for i in exclude_from: 446 for i in exclude_from:
446 f.write(i) 447 f.write(i)
447 f.write("\n") 448 f.write("\n")
448 f.close() 449 f.close()
449 450
450 s=d.getVar('S', True) 451 s=d.getVar('S', True)
451 distro = d.getVar('DISTRO',True) 452 distro = d.getVar('DISTRO',True)
452 dest = s + '/' + distro + '/files' 453 dest = s + '/' + distro + '/files'
453 if not os.path.exists(dest): 454 if not os.path.exists(dest):
454 bb.mkdirhier(dest) 455 bb.mkdirhier(dest)
455 for i in os.listdir(os.getcwd()): 456 for i in os.listdir(os.getcwd()):
456 if os.path.isfile(i): 457 if os.path.isfile(i):
457 try: 458 try:
458 shutil.copy(i, dest) 459 shutil.copy(i, dest)
459 except IOError: 460 except IOError:
460 subprocess.call('fakeroot cp -rf ' + i + " " + dest, shell=True) 461 subprocess.call('fakeroot cp -rf ' + i + " " + dest, shell=True)
461 462
462 bb.note("Creating .diff.gz in ${DEPLOY_DIR_SRC}/${P}-${PR}.diff.gz") 463 bb.note("Creating .diff.gz in ${DEPLOY_DIR_SRC}/${P}-${PR}.diff.gz")
463 cmd = "LC_ALL=C TZ=UTC0 diff --exclude-from=" + work_dir + "/temp/exclude-from-file -Naur " + s + '.org' + ' ' + s + " | gzip -c > " + diff_file 464 cmd = "LC_ALL=C TZ=UTC0 diff --exclude-from=" + work_dir + "/temp/exclude-from-file -Naur " + s + '.org' + ' ' + s + " | gzip -c > " + diff_file
464 d.setVar('DIFF', cmd + "\n") 465 d.setVar('DIFF', cmd + "\n")
465 d.setVarFlag('DIFF', 'func', '1') 466 d.setVarFlag('DIFF', 'func', '1')
466 bb.build.exec_func('DIFF', d) 467 bb.build.exec_func('DIFF', d)
467 shutil.rmtree(s + '.org', ignore_errors=True) 468 shutil.rmtree(s + '.org', ignore_errors=True)
468 469
469# This function will run when user want to get tarball for sources and patches after do_unpack 470# This function will run when user want to get tarball for sources and patches after do_unpack
470python do_archive_original_sources_patches(){ 471python do_archive_original_sources_patches(){
471 archive_sources_patches(d,'prepatch') 472 archive_sources_patches(d,'prepatch')
472} 473}
473 474
474# This function will run when user want to get tarball for patched sources after do_patch 475# This function will run when user want to get tarball for patched sources after do_patch
475python do_archive_patched_sources(){ 476python do_archive_patched_sources(){
476 archive_sources_patches(d,'patched') 477 archive_sources_patches(d,'patched')
477} 478}
478 479
479# This function will run when user want to get tarball for configured sources after do_configure 480# This function will run when user want to get tarball for configured sources after do_configure
480python do_archive_configured_sources(){ 481python do_archive_configured_sources(){
481 archive_sources_patches(d,'configured') 482 archive_sources_patches(d,'configured')
482} 483}
483 484
484# This function will run when user want to get tarball for logs or both logs and scripts(.bb and .inc files) 485# This function will run when user want to get tarball for logs or both logs and scripts(.bb and .inc files)
485python do_archive_scripts_logs(){ 486python do_archive_scripts_logs(){
486 archive_scripts_logs(d) 487 archive_scripts_logs(d)
487} 488}
488 489
489# This function will run when user want to know what variable and functions in a running task are and also can get a diff file including 490# This function will run when user want to know what variable and functions in a running task are and also can get a diff file including
490# all content a package should include. 491# all content a package should include.
491python do_dumpdata_create_diff_gz(){ 492python do_dumpdata_create_diff_gz(){
492 dumpdata(d) 493 dumpdata(d)
493 create_diff_gz(d) 494 create_diff_gz(d)
494} 495}
495 496
496# This functions prepare for archiving "linux-yocto" because this package create directory 's' before do_patch instead of after do_unpack. 497# This functions prepare for archiving "linux-yocto" because this package create directory 's' before do_patch instead of after do_unpack.
497# This is special control for archiving linux-yocto only. 498# This is special control for archiving linux-yocto only.
498python do_archive_linux_yocto(){ 499python do_archive_linux_yocto(){
499 s = d.getVar('S', True) 500 s = d.getVar('S', True)
500 if 'linux-yocto' in s: 501 if 'linux-yocto' in s:
501 source_tar_name = archive_sources(d,'') 502 source_tar_name = archive_sources(d,'')
502 if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() not in 'SRPM': 503 if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() not in 'SRPM':
503 move_tarball_deploy(d,[source_tar_name,'']) 504 move_tarball_deploy(d,[source_tar_name,''])
504} 505}
505do_kernel_checkout[postfuncs] += "do_archive_linux_yocto " 506do_kernel_checkout[postfuncs] += "do_archive_linux_yocto "
506 507
507# remove tarball for sources, patches and logs after creating srpm. 508# remove tarball for sources, patches and logs after creating srpm.
508python do_remove_tarball(){ 509python do_remove_tarball(){
509 if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM': 510 if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM':
510 work_dir = d.getVar('WORKDIR', True) 511 work_dir = d.getVar('WORKDIR', True)
511 try: 512 try:
512 for file in os.listdir(os.getcwd()): 513 for file in os.listdir(os.getcwd()):
513 if file in get_package(d): 514 if file in get_package(d):
514 os.remove(file) 515 os.remove(file)
515 os.remove(os.path.join(work_dir,'tar-package')) 516 os.remove(os.path.join(work_dir,'tar-package'))
516 except (TypeError,OSError): 517 except (TypeError,OSError):
517 pass 518 pass
518} 519}
519do_remove_taball[deptask] = "do_archive_scripts_logs" 520do_remove_taball[deptask] = "do_archive_scripts_logs"
520do_package_write_rpm[postfuncs] += "do_remove_tarball " 521do_package_write_rpm[postfuncs] += "do_remove_tarball "