On 1/8/12 1:11 AM, Xiaofeng Yan wrote:
From: Xiaofeng Yan<[email protected]>
Source rpm package needs tar package as its source codes. log files \
are required as a part of source (description in bug 1655).
So log files need be packaged as tar package too.
User can select two types of package, the first is tar package and the second
is src.rpm package.
The option item is defined in conf/local.conf.(ARCHIVE_TYPE ?= "SRPM"(default) or
ARCHIVE_TYPE ?= "TARGZ")
if the option is the first type, then tar_archive.bbclass should be inherited
in an suitable position.
The tar packages(sources.tar.gz and log.tar.gz) will be created in workdir.
if the option is the second type, then tar_archive.bbclass shoud be inherited
in package_rpm.bbclass.
The sources rpm packages will be created in workdir/deploy-srpm when building.
The following command can ship all of source packages(src.rpm or tar.gz) to
build/tmp/deploy/sources
$bitbake core-image-sato -c copysources
[YOCTO #1655]
Signed-off-by: Xiaofeng Yan<[email protected]>
---
meta/classes/tar_archive.bbclass | 216 ++++++++++++++++++++++++++++++++++++++
1 files changed, 216 insertions(+), 0 deletions(-)
create mode 100644 meta/classes/tar_archive.bbclass
...
+addtask do_logarchive after do_install before do_package
+
+# This is used for fixing the "Bad owner/group: ..."
+# Set owner and group for patches, log.tar.gz and ${PF}.tar.gz to "root"
+do_setowngroup[dirs] = "${WORKDIR}"
+fakeroot python do_setowngroup(){
+ import os
+
+ if not d.getVar('ARCHIVE_TYPE', True):
+ return
+ bb.build.exec_func('not_srpm', d)
+ if d.getVar('NOTSRPM', True):
+ return
+ bb.build.exec_func('get_patches', d)
+ srcpatches = d.getVar('PLIST',True)
+ for patch in srcpatches:
+ os.system('chown root.root' + ' ' + patch)
+ os.system('chown root.root' + ' ' + "log.tar.gz")
+ os.system('chown root.root' + ' ' + d.getVar('PF', True) + ".tar.gz")
+}
Instead of the above during the creation of the tar archive, you should be able
to pass in --owner=root --group=root and tar will ignore the on-disk
permissions and set it based on the arguments.
+addtask do_setowngroup after do_logarchive before do_package
+
+# Copy source package to build/tmp/deploy/sources
+do_copysources[dirs] = "${PWD}/tmp/work"
+python do_copysources (){
+ import os
+
+ archive_type = d.getVar('ARCHIVE_TYPE', True)
+ pwd = d.getVar('PWD', True)
+ machine = d.getVar('MACHINE', True)
+ target_sys = d.getVar('TARGET_SYS', True)
+ target_os = d.getVar('TARGET_OS', True)
+ target_vendor = d.getVar('TARGET_VENDOR', True)
+ tune_pkgarch = d.getVar('TUNE_PKGARCH', True)
+ multimach_host_sys = d.getVar('MULTIMACH_HOST_SYS', True)
+ all = 'all' + target_vendor + '-' + 'linux'
+ target = tune_pkgarch + target_vendor + '-' + target_os
+ srpmdir=pwd + '/tmp/deploy/' + 'sources' + '/' + machine
+
+ if not os.path.exists(srpmdir):
+ os.makedirs(srpmdir)
+ global_work = pwd + '/tmp' + '/work'
+ os.chdir(global_work)
+ for dirs in multimach_host_sys, all, target:
+ localdir = srpmdir + '/' + dirs
+ if not os.path.exists(localdir):
+ os.mkdir(localdir)
+ os.chdir(dirs)
+ if archive_type == 'SRPM':
+ os.system('cp */deploy-srpm/*/*.src.rpm ' + localdir)
+ elif archive_type == 'TARGZ':
+ for dir in os.listdir('.'):
+ if os.path.isdir(dir):
+ os.chdir(dir)
+ if not os.path.exists(dir):
+ os.mkdir(localdir + '/' + dir)
+ os.system('cp *.gz ' + localdir + '/' +
dir)
+ os.chdir('../')
+ else:
+ return
+ os.chdir(global_work)
+}
+addtask do_copysources after do_rootfs
+
+EXPORT_FUNCTIONS do_archive do_logarchive do_setowngroup do_copysources
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core