From: Xiaofeng Yan <xiaofeng....@windriver.com>

Add a new function to archive source, patches and logs to a source rpm
package. Every source rpm package will be deployed to
${DEPLOY_DIR}/sources/deploy-srpm.

[YOCTO #1977]

Signed-off-by: Xiaofeng Yan <xiaofeng....@windriver.com>
---
 meta/classes/package_rpm.bbclass |   47 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index 68313ec..b4ee5c0 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -6,6 +6,7 @@ RPM="rpm"
 RPMBUILD="rpmbuild"
 
 PKGWRITEDIRRPM = "${WORKDIR}/deploy-rpms"
+PKGWRITEDIRSRPM = "${DEPLOY_DIR}/sources/deploy-srpm"
 
 python package_rpm_fn () {
        d.setVar('PKGFN', d.getVar('PKG'))
@@ -475,6 +476,31 @@ python write_specfile () {
        import textwrap
        import oe.packagedata
 
+       # append information for logs and patches to %prep
+       def add_prep(d,spec_files_bottom):
+               if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) and 
d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM':
+                       spec_files_bottom.append('%%prep -n %s' % 
d.getVar('PN', True) )
+                       spec_files_bottom.append('%s' % "echo \"include logs 
and patches, Please check them in SOURCES\"")
+                       spec_files_bottom.append('')
+
+       # get the name of tarball for sources, patches and logs
+       def get_tarballs(d):
+               if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) and 
d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM':
+                       return get_package(d)
+       
+       # append the name of tarball to key word 'SOURCE' in xxx.spec.
+       def tail_source(d,source_list=[],patch_list=None):
+               if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) and 
d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM':
+                       source_number = 0
+                       patch_number = 0
+                       for source in source_list:
+                               spec_preamble_top.append('Source' + 
str(source_number) + ': %s' % source)
+                               source_number += 1
+                       if patch_list:
+                               for patch in patch_list:
+                                       print_deps(patch, "Patch" + 
str(patch_number), spec_preamble_top, d)
+                                       patch_number += 1
+
        # We need a simple way to remove the MLPREFIX from the package name,
        # and dependency information...
        def strip_multilib(name, d):
@@ -786,6 +812,7 @@ python write_specfile () {
                del localdata
                bb.utils.unlockfile(lf)
 
+       add_prep(d,spec_files_bottom)
        spec_preamble_top.append('Summary: %s' % srcsummary)
        spec_preamble_top.append('Name: %s' % srcname)
        spec_preamble_top.append('Version: %s' % srcversion)
@@ -796,6 +823,8 @@ python write_specfile () {
        spec_preamble_top.append('Group: %s' % srcsection)
        spec_preamble_top.append('Packager: %s' % srcmaintainer)
        spec_preamble_top.append('URL: %s' % srchomepage)
+       source_list = get_tarballs(d)
+       tail_source(d,source_list,None)
 
        # Replaces == Obsoletes && Provides
        if srcrreplaces and srcrreplaces.strip() != "":
@@ -900,6 +929,15 @@ python write_specfile () {
 python do_package_rpm () {
        import os
 
+       def creat_srpm_dir(d):
+               if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) and 
d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM':
+                       clean_licenses = get_licenses(d)
+                       pkgwritesrpmdir = 
bb.data.expand('${PKGWRITEDIRSRPM}/${PACKAGE_ARCH_EXTEND}', d)
+                       pkgwritesrpmdir = pkgwritesrpmdir + '/' + clean_licenses
+                       bb.mkdirhier(pkgwritesrpmdir)
+                       os.chmod(pkgwritesrpmdir, 0755)
+                       return pkgwritesrpmdir
+
        # We need a simple way to remove the MLPREFIX from the package name,
        # and dependency information...
        def strip_multilib(name, d):
@@ -1015,8 +1053,17 @@ python do_package_rpm () {
        cmd = cmd + " --define 'debug_package %{nil}'"
        cmd = cmd + " --define '_rpmfc_magic_path " + magicfile + "'"
        cmd = cmd + " --define '_tmppath " + workdir + "'"
+       if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) and 
d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM':
+               cmdsrpm = cmd + " --define '_sourcedir " + workdir + "' 
--define '_srcrpmdir " + creat_srpm_dir(d) + "'"
+               cmdsrpm = 'fakeroot ' + cmdsrpm + " -bs " + outspecfile
        cmd = cmd + " -bb " + outspecfile
 
+       # Build the source rpm package !
+       if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) and 
d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM':
+               d.setVar('SBUILDSPEC', cmdsrpm + "\n")
+               d.setVarFlag('SBUILDSPEC', 'func', '1')
+               bb.build.exec_func('SBUILDSPEC', d)
+
        # Build the rpm package!
        d.setVar('BUILDSPEC', cmd + "\n")
        d.setVarFlag('BUILDSPEC', 'func', '1')
-- 
1.7.0.4


_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to