diff options
author | Xiaofeng Yan <xiaofeng.yan@windriver.com> | 2012-03-26 18:49:23 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-03-26 23:13:20 +0100 |
commit | 6a99e0f8fbb5c7a411da2e4b724c43f28e6fa0c1 (patch) | |
tree | e2593bcddfd9b156f54131684f98eda5f55d4abc /meta | |
parent | b711d7b631accaac238b68cfd5bd44995382fc72 (diff) | |
download | poky-6a99e0f8fbb5c7a411da2e4b724c43f28e6fa0c1.tar.gz |
package_rpm: Add srpm function to this bbclass
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]
(From OE-Core rev: be2db850fbe516b92a3991a5eaf646c4a2b8a1b9)
Signed-off-by: Xiaofeng Yan <xiaofeng.yan@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta')
-rw-r--r-- | meta/classes/package_rpm.bbclass | 53 |
1 files changed, 50 insertions, 3 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index 8c8d967741..0ccf574850 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass | |||
@@ -6,6 +6,7 @@ RPM="rpm" | |||
6 | RPMBUILD="rpmbuild" | 6 | RPMBUILD="rpmbuild" |
7 | 7 | ||
8 | PKGWRITEDIRRPM = "${WORKDIR}/deploy-rpms" | 8 | PKGWRITEDIRRPM = "${WORKDIR}/deploy-rpms" |
9 | PKGWRITEDIRSRPM = "${DEPLOY_DIR}/sources/deploy-srpm" | ||
9 | 10 | ||
10 | python package_rpm_fn () { | 11 | python package_rpm_fn () { |
11 | d.setVar('PKGFN', d.getVar('PKG')) | 12 | d.setVar('PKGFN', d.getVar('PKG')) |
@@ -481,6 +482,30 @@ python write_specfile () { | |||
481 | import textwrap | 482 | import textwrap |
482 | import oe.packagedata | 483 | import oe.packagedata |
483 | 484 | ||
485 | # append information for logs and patches to %prep | ||
486 | def add_prep(d,spec_files_bottom): | ||
487 | if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) and d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM': | ||
488 | spec_files_bottom.append('%%prep -n %s' % d.getVar('PN', True) ) | ||
489 | spec_files_bottom.append('%s' % "echo \"include logs and patches, Please check them in SOURCES\"") | ||
490 | spec_files_bottom.append('') | ||
491 | |||
492 | # get the name of tarball for sources, patches and logs | ||
493 | def get_tarballs(d): | ||
494 | if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) and d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM': | ||
495 | return get_package(d) | ||
496 | |||
497 | # append the name of tarball to key word 'SOURCE' in xxx.spec. | ||
498 | def tail_source(d,source_list=[],patch_list=None): | ||
499 | if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) and d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM': | ||
500 | source_number = 0 | ||
501 | patch_number = 0 | ||
502 | for source in source_list: | ||
503 | spec_preamble_top.append('Source' + str(source_number) + ': %s' % source) | ||
504 | source_number += 1 | ||
505 | if patch_list: | ||
506 | for patch in patch_list: | ||
507 | print_deps(patch, "Patch" + str(patch_number), spec_preamble_top, d) | ||
508 | patch_number += 1 | ||
484 | # We need a simple way to remove the MLPREFIX from the package name, | 509 | # We need a simple way to remove the MLPREFIX from the package name, |
485 | # and dependency information... | 510 | # and dependency information... |
486 | def strip_multilib(name, d): | 511 | def strip_multilib(name, d): |
@@ -791,7 +816,8 @@ python write_specfile () { | |||
791 | 816 | ||
792 | del localdata | 817 | del localdata |
793 | bb.utils.unlockfile(lf) | 818 | bb.utils.unlockfile(lf) |
794 | 819 | ||
820 | add_prep(d,spec_files_bottom) | ||
795 | spec_preamble_top.append('Summary: %s' % srcsummary) | 821 | spec_preamble_top.append('Summary: %s' % srcsummary) |
796 | spec_preamble_top.append('Name: %s' % srcname) | 822 | spec_preamble_top.append('Name: %s' % srcname) |
797 | spec_preamble_top.append('Version: %s' % srcversion) | 823 | spec_preamble_top.append('Version: %s' % srcversion) |
@@ -802,6 +828,8 @@ python write_specfile () { | |||
802 | spec_preamble_top.append('Group: %s' % srcsection) | 828 | spec_preamble_top.append('Group: %s' % srcsection) |
803 | spec_preamble_top.append('Packager: %s' % srcmaintainer) | 829 | spec_preamble_top.append('Packager: %s' % srcmaintainer) |
804 | spec_preamble_top.append('URL: %s' % srchomepage) | 830 | spec_preamble_top.append('URL: %s' % srchomepage) |
831 | source_list = get_tarballs(d) | ||
832 | tail_source(d,source_list,None) | ||
805 | 833 | ||
806 | # Replaces == Obsoletes && Provides | 834 | # Replaces == Obsoletes && Provides |
807 | if srcrreplaces and srcrreplaces.strip() != "": | 835 | if srcrreplaces and srcrreplaces.strip() != "": |
@@ -823,7 +851,7 @@ python write_specfile () { | |||
823 | print_deps(srcrsuggests, "Recommends", spec_preamble_top, d) | 851 | print_deps(srcrsuggests, "Recommends", spec_preamble_top, d) |
824 | print_deps(srcrprovides, "Provides", spec_preamble_top, d) | 852 | print_deps(srcrprovides, "Provides", spec_preamble_top, d) |
825 | print_deps(srcrobsoletes, "Obsoletes", spec_preamble_top, d) | 853 | print_deps(srcrobsoletes, "Obsoletes", spec_preamble_top, d) |
826 | 854 | ||
827 | # conflicts can not be in a provide! We will need to filter it. | 855 | # conflicts can not be in a provide! We will need to filter it. |
828 | if srcrconflicts: | 856 | if srcrconflicts: |
829 | depends_dict = bb.utils.explode_dep_versions(srcrconflicts) | 857 | depends_dict = bb.utils.explode_dep_versions(srcrconflicts) |
@@ -905,7 +933,16 @@ python write_specfile () { | |||
905 | 933 | ||
906 | python do_package_rpm () { | 934 | python do_package_rpm () { |
907 | import os | 935 | import os |
908 | 936 | ||
937 | def creat_srpm_dir(d): | ||
938 | if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) and d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM': | ||
939 | clean_licenses = get_licenses(d) | ||
940 | pkgwritesrpmdir = bb.data.expand('${PKGWRITEDIRSRPM}/${PACKAGE_ARCH_EXTEND}', d) | ||
941 | pkgwritesrpmdir = pkgwritesrpmdir + '/' + clean_licenses | ||
942 | bb.mkdirhier(pkgwritesrpmdir) | ||
943 | os.chmod(pkgwritesrpmdir, 0755) | ||
944 | return pkgwritesrpmdir | ||
945 | |||
909 | # We need a simple way to remove the MLPREFIX from the package name, | 946 | # We need a simple way to remove the MLPREFIX from the package name, |
910 | # and dependency information... | 947 | # and dependency information... |
911 | def strip_multilib(name, d): | 948 | def strip_multilib(name, d): |
@@ -1021,8 +1058,18 @@ python do_package_rpm () { | |||
1021 | cmd = cmd + " --define 'debug_package %{nil}'" | 1058 | cmd = cmd + " --define 'debug_package %{nil}'" |
1022 | cmd = cmd + " --define '_rpmfc_magic_path " + magicfile + "'" | 1059 | cmd = cmd + " --define '_rpmfc_magic_path " + magicfile + "'" |
1023 | cmd = cmd + " --define '_tmppath " + workdir + "'" | 1060 | cmd = cmd + " --define '_tmppath " + workdir + "'" |
1061 | if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) and d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM': | ||
1062 | cmdsrpm = cmd + " --define '_sourcedir " + workdir + "' --define '_srcrpmdir " + creat_srpm_dir(d) + "'" | ||
1063 | cmdsrpm = 'fakeroot ' + cmdsrpm + " -bs " + outspecfile | ||
1024 | cmd = cmd + " -bb " + outspecfile | 1064 | cmd = cmd + " -bb " + outspecfile |
1025 | 1065 | ||
1066 | # Build the source rpm package ! | ||
1067 | if d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True) and d.getVar('SOURCE_ARCHIVE_PACKAGE_TYPE', True).upper() == 'SRPM': | ||
1068 | d.setVar('SBUILDSPEC', cmdsrpm + "\n") | ||
1069 | d.setVarFlag('SBUILDSPEC', 'func', '1') | ||
1070 | bb.build.exec_func('SBUILDSPEC', d) | ||
1071 | |||
1072 | |||
1026 | # Build the rpm package! | 1073 | # Build the rpm package! |
1027 | d.setVar('BUILDSPEC', cmd + "\n") | 1074 | d.setVar('BUILDSPEC', cmd + "\n") |
1028 | d.setVarFlag('BUILDSPEC', 'func', '1') | 1075 | d.setVarFlag('BUILDSPEC', 'func', '1') |