diff options
-rw-r--r-- | meta/classes/package_rpm.bbclass | 15 | ||||
-rw-r--r-- | meta/recipes-devtools/rpm/rpm/rpm-platform.patch | 132 | ||||
-rw-r--r-- | meta/recipes-devtools/rpm/rpm/rpm-showrc.patch | 23 | ||||
-rw-r--r-- | meta/recipes-devtools/rpm/rpm_5.4.0.bb | 8 |
4 files changed, 170 insertions, 8 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index cc262dc831..215be8d607 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass | |||
@@ -219,7 +219,8 @@ package_install_internal_rpm () { | |||
219 | 219 | ||
220 | # Generate an install solution by doing a --justdb install, then recreate it with | 220 | # Generate an install solution by doing a --justdb install, then recreate it with |
221 | # an actual package install! | 221 | # an actual package install! |
222 | ${RPM} -D "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | 222 | ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ |
223 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | ||
223 | -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}.macro`" \ | 224 | -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}.macro`" \ |
224 | -D "__dbi_txn create nofsync" \ | 225 | -D "__dbi_txn create nofsync" \ |
225 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ | 226 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ |
@@ -235,7 +236,8 @@ package_install_internal_rpm () { | |||
235 | exit 1 | 236 | exit 1 |
236 | fi | 237 | fi |
237 | echo "Attempting $pkg_name..." >> "${WORKDIR}/temp/log.do_${task}_attemptonly.${PID}" | 238 | echo "Attempting $pkg_name..." >> "${WORKDIR}/temp/log.do_${task}_attemptonly.${PID}" |
238 | ${RPM} -D "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | 239 | ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ |
240 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | ||
239 | -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}.macro`" \ | 241 | -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}.macro`" \ |
240 | -D "__dbi_txn create nofsync private" \ | 242 | -D "__dbi_txn create nofsync private" \ |
241 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ | 243 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ |
@@ -254,7 +256,8 @@ package_install_internal_rpm () { | |||
254 | cat /dev/null > ${target_rootfs}/install/recommend.list | 256 | cat /dev/null > ${target_rootfs}/install/recommend.list |
255 | while [ $loop -eq 1 ]; do | 257 | while [ $loop -eq 1 ]; do |
256 | # Dump the full set of recommends... | 258 | # Dump the full set of recommends... |
257 | ${RPM} -D "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | 259 | ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ |
260 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | ||
258 | -D "_dbpath ${IMAGE_ROOTFS}/install" -D "`cat ${confbase}.macro`" \ | 261 | -D "_dbpath ${IMAGE_ROOTFS}/install" -D "`cat ${confbase}.macro`" \ |
259 | -D "__dbi_txn create nofsync private" \ | 262 | -D "__dbi_txn create nofsync private" \ |
260 | -qa --qf "[%{RECOMMENDS}\n]" | sort -u > ${target_rootfs}/install/recommend | 263 | -qa --qf "[%{RECOMMENDS}\n]" | sort -u > ${target_rootfs}/install/recommend |
@@ -273,7 +276,8 @@ package_install_internal_rpm () { | |||
273 | continue | 276 | continue |
274 | fi | 277 | fi |
275 | echo "Attempting $pkg_name..." >> "${WORKDIR}/temp/log.do_{task}_recommend.${PID}" | 278 | echo "Attempting $pkg_name..." >> "${WORKDIR}/temp/log.do_{task}_recommend.${PID}" |
276 | ${RPM} -D "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | 279 | ${RPM} --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ |
280 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | ||
277 | -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}.macro`" \ | 281 | -D "_dbpath ${target_rootfs}/install" -D "`cat ${confbase}.macro`" \ |
278 | -D "__dbi_txn create nofsync private" \ | 282 | -D "__dbi_txn create nofsync private" \ |
279 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ | 283 | -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \ |
@@ -293,7 +297,8 @@ package_install_internal_rpm () { | |||
293 | 297 | ||
294 | # Attempt install | 298 | # Attempt install |
295 | ${RPM} --root ${target_rootfs} \ | 299 | ${RPM} --root ${target_rootfs} \ |
296 | -D "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | 300 | --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ |
301 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | ||
297 | -D "_dbpath ${rpmlibdir}" \ | 302 | -D "_dbpath ${rpmlibdir}" \ |
298 | --noscripts --notriggers --noparentdirs --nolinktos \ | 303 | --noscripts --notriggers --noparentdirs --nolinktos \ |
299 | -D "__dbi_txn create nofsync private" \ | 304 | -D "__dbi_txn create nofsync private" \ |
diff --git a/meta/recipes-devtools/rpm/rpm/rpm-platform.patch b/meta/recipes-devtools/rpm/rpm/rpm-platform.patch new file mode 100644 index 0000000000..09a1c13048 --- /dev/null +++ b/meta/recipes-devtools/rpm/rpm/rpm-platform.patch | |||
@@ -0,0 +1,132 @@ | |||
1 | Fix up platform and related sysinfo file loading. | ||
2 | |||
3 | This ensures that RPM knows the compatible set of package types at all times. | ||
4 | |||
5 | Signed-off-by: Mark Hatle <mark.hatle@windriver.com> | ||
6 | |||
7 | diff -ur rpm-5.4.0.orig/lib/depends.c rpm-5.4.0/lib/depends.c | ||
8 | --- rpm-5.4.0.orig/lib/depends.c 2011-02-15 20:40:13.002849708 -0600 | ||
9 | +++ rpm-5.4.0/lib/depends.c 2011-02-15 20:47:05.838981632 -0600 | ||
10 | @@ -248,7 +248,7 @@ | ||
11 | he->p.ptr = _free(he->p.ptr); | ||
12 | } | ||
13 | |||
14 | -#if defined(RPM_VENDOR_WINDRIVER) | ||
15 | +#if defined(RPM_VENDOR_WINDRIVER) && !defined(RPM_VENDOR_POKY) | ||
16 | /* | ||
17 | * If we're capable of installing multiple colors | ||
18 | * but at least one of the packages are white (0), we | ||
19 | @@ -505,7 +505,7 @@ | ||
20 | return 0; | ||
21 | } | ||
22 | |||
23 | -#if defined(RPM_VENDOR_WINDRIVER) | ||
24 | +#if defined(RPM_VENDOR_WINDRIVER) && !defined(RPM_VENDOR_POKY) | ||
25 | /* Is "compat" compatible w/ arch? */ | ||
26 | int _isCompatibleArch(const char * arch, const char * compat) | ||
27 | { | ||
28 | @@ -649,7 +649,7 @@ | ||
29 | |||
30 | if (arch == NULL || (parch = rpmteA(p)) == NULL) | ||
31 | continue; | ||
32 | -#if defined(RPM_VENDOR_WINDRIVER) | ||
33 | +#if defined(RPM_VENDOR_WINDRIVER) && !defined(RPM_VENDOR_POKY) | ||
34 | /* XXX hackery for alias matching. */ | ||
35 | if (!_isCompatibleArch(arch, parch)) | ||
36 | continue; | ||
37 | @@ -815,6 +815,12 @@ | ||
38 | return rc; | ||
39 | } | ||
40 | |||
41 | +#if defined(RPM_VENDOR_WINDRIVER) | ||
42 | +#define _ETC_RPM_SYSINFO "%{_etcrpm}/sysinfo" | ||
43 | +#else | ||
44 | +#define _ETC_RPM_SYSINFO SYSCONFIGDIR "/sysinfo" | ||
45 | +#endif | ||
46 | + | ||
47 | /*@only@*/ /*@null@*/ /*@unchecked@*/ | ||
48 | static char *sysinfo_path = NULL; | ||
49 | |||
50 | @@ -1296,7 +1302,7 @@ | ||
51 | sysinfo_path = rpmExpand("%{?_rpmds_sysinfo_path}", NULL); | ||
52 | if (!(sysinfo_path != NULL && *sysinfo_path == '/')) { | ||
53 | sysinfo_path = _free(sysinfo_path); | ||
54 | - sysinfo_path = xstrdup(SYSCONFIGDIR "/sysinfo"); | ||
55 | + sysinfo_path = rpmExpand(_ETC_RPM_SYSINFO, NULL); | ||
56 | } | ||
57 | } | ||
58 | |||
59 | diff -ur rpm-5.4.0.orig/lib/rpmds.c rpm-5.4.0/lib/rpmds.c | ||
60 | --- rpm-5.4.0.orig/lib/rpmds.c 2011-02-15 20:40:13.004855352 -0600 | ||
61 | +++ rpm-5.4.0/lib/rpmds.c 2011-02-15 20:41:55.598846670 -0600 | ||
62 | @@ -1737,7 +1737,7 @@ | ||
63 | /*@-observertrans @*/ | ||
64 | _sysinfo_path = _free(_sysinfo_path); | ||
65 | /*@=observertrans @*/ | ||
66 | - _sysinfo_path = xstrdup(_ETC_RPM_SYSINFO); | ||
67 | + _sysinfo_path = rpmExpand(_ETC_RPM_SYSINFO, NULL); | ||
68 | } | ||
69 | } | ||
70 | /*@=modobserver@*/ | ||
71 | diff -ur rpm-5.4.0.orig/lib/rpmrc.c rpm-5.4.0/lib/rpmrc.c | ||
72 | --- rpm-5.4.0.orig/lib/rpmrc.c 2011-02-15 20:40:13.006853913 -0600 | ||
73 | +++ rpm-5.4.0/lib/rpmrc.c 2011-02-15 20:44:39.708972391 -0600 | ||
74 | @@ -38,7 +38,13 @@ | ||
75 | static const char * configTarget = NULL; | ||
76 | |||
77 | /*@observer@*/ /*@unchecked@*/ | ||
78 | -static const char * platform = SYSCONFIGDIR "/platform"; | ||
79 | +#if defined(RPM_VENDOR_WINDRIVER) | ||
80 | +#define _ETC_RPM_PLATFORM "%{_etcrpm}/platform" | ||
81 | +#else | ||
82 | +#define _ETC_RPM_PLATFORM SYSCONFIGDIR "/platform" | ||
83 | +#endif | ||
84 | + | ||
85 | +static const char * _platform = NULL; | ||
86 | |||
87 | /*@only@*/ /*@relnull@*/ /*@unchecked@*/ | ||
88 | void * platpat = NULL; | ||
89 | @@ -685,16 +691,17 @@ | ||
90 | int rc; | ||
91 | |||
92 | while (!gotDefaults) { | ||
93 | -#if defined(RPM_VENDOR_WINDRIVER) | ||
94 | - const char * _platform = rpmGetPath(__etcrpm, "/platform", NULL); | ||
95 | -#else | ||
96 | - const char * _platform = platform; | ||
97 | -#endif | ||
98 | + if (_platform == NULL) { | ||
99 | + _platform = rpmExpand("%{?_rpmrc_platform_path}", NULL); | ||
100 | + /* XXX may need to validate path existence somewhen. */ | ||
101 | + if (!(_platform != NULL && *_platform == '/')) { | ||
102 | + _platform = _free(_platform); | ||
103 | + _platform = rpmExpand(_ETC_RPM_PLATFORM, NULL); | ||
104 | + } | ||
105 | + } | ||
106 | CVOG_t cvog = NULL; | ||
107 | #if defined(RPM_VENDOR_OPENPKG) /* larger-utsname */ | ||
108 | const char *cp; | ||
109 | -#endif | ||
110 | -#if defined(RPM_VENDOR_OPENPKG) /* larger-utsname */ | ||
111 | /* utsname fields on some platforms (like HP-UX) are very small | ||
112 | (just about 8 characters). This is too small for OpenPKG, so cheat! */ | ||
113 | rc = uname(&un_real); | ||
114 | @@ -771,9 +778,7 @@ | ||
115 | if (cp != NULL && cp != _platform) | ||
116 | cp = _free(cp); | ||
117 | #endif | ||
118 | -#if defined(RPM_VENDOR_WINDRIVER) | ||
119 | _platform = _free(_platform); | ||
120 | -#endif | ||
121 | |||
122 | if (configTarget && !parseCVOG(configTarget, &cvog) && cvog != NULL) { | ||
123 | gotDefaults = 1; | ||
124 | @@ -1096,6 +1101,8 @@ | ||
125 | |||
126 | #ifdef PREMACROFILES | ||
127 | if (rpmReadRC(PREMACROFILES)) return -1; | ||
128 | +#else | ||
129 | + if (rpmReadRC(NULL)) return -1; | ||
130 | #endif | ||
131 | |||
132 | /* Reset umask to its default umask(2) value. */ | ||
diff --git a/meta/recipes-devtools/rpm/rpm/rpm-showrc.patch b/meta/recipes-devtools/rpm/rpm/rpm-showrc.patch new file mode 100644 index 0000000000..5051ce604b --- /dev/null +++ b/meta/recipes-devtools/rpm/rpm/rpm-showrc.patch | |||
@@ -0,0 +1,23 @@ | |||
1 | Workaround for a memory leak in --showrc. | ||
2 | |||
3 | Signed-off-by: Mark Hatle <mark.hatle@windriver.com> | ||
4 | |||
5 | diff -ur rpm-5.4.0.orig/lib/rpmrc.c rpm-5.4.0/lib/rpmrc.c | ||
6 | --- rpm-5.4.0.orig/lib/rpmrc.c 2011-02-15 20:40:13.006853913 -0600 | ||
7 | +++ rpm-5.4.0/lib/rpmrc.c 2011-02-15 20:44:39.708972391 -0600 | ||
8 | @@ -1216,11 +1223,15 @@ | ||
9 | if (DNEVR != NULL) | ||
10 | fprintf(fp, " %s\n", DNEVR+2); | ||
11 | } | ||
12 | +#if 0 | ||
13 | (void)rpmdsFree(ds); | ||
14 | ds = NULL; | ||
15 | +#endif | ||
16 | fprintf(fp, "\n"); | ||
17 | } | ||
18 | +#if 0 | ||
19 | PRCO = rpmdsFreePRCO(PRCO); | ||
20 | +#endif | ||
21 | } | ||
22 | |||
23 | if (rpmIsVerbose()) { | ||
diff --git a/meta/recipes-devtools/rpm/rpm_5.4.0.bb b/meta/recipes-devtools/rpm/rpm_5.4.0.bb index 56fcd9c62f..93951d2c61 100644 --- a/meta/recipes-devtools/rpm/rpm_5.4.0.bb +++ b/meta/recipes-devtools/rpm/rpm_5.4.0.bb | |||
@@ -43,7 +43,7 @@ LICENSE = "LGPL 2.1" | |||
43 | LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1" | 43 | LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=2d5025d4aa3495befef8f17206a5b0a1" |
44 | 44 | ||
45 | DEPENDS = "bzip2 zlib python perl db openssl elfutils expat libpcre attr acl popt" | 45 | DEPENDS = "bzip2 zlib python perl db openssl elfutils expat libpcre attr acl popt" |
46 | PR = "r11" | 46 | PR = "r12" |
47 | 47 | ||
48 | # rpm2cpio is a shell script, which is part of the rpm src.rpm. It is needed | 48 | # rpm2cpio is a shell script, which is part of the rpm src.rpm. It is needed |
49 | # in order to extract the distribution SRPM into a format we can extract... | 49 | # in order to extract the distribution SRPM into a format we can extract... |
@@ -51,7 +51,9 @@ SRC_URI = "http://www.rpm5.org/files/rpm/rpm-5.4/rpm-5.4.0-0.20101229.src.rpm;ex | |||
51 | file://perfile_rpmdeps.sh \ | 51 | file://perfile_rpmdeps.sh \ |
52 | file://rpm-autogen.patch \ | 52 | file://rpm-autogen.patch \ |
53 | file://rpm-libsql-fix.patch \ | 53 | file://rpm-libsql-fix.patch \ |
54 | file://header-include-fix.patch \ | 54 | file://header-include-fix.patch \ |
55 | file://rpm-platform.patch \ | ||
56 | file://rpm-showrc.patch \ | ||
55 | " | 57 | " |
56 | 58 | ||
57 | # file://hdraddorappend.patch \ | 59 | # file://hdraddorappend.patch \ |
@@ -155,7 +157,7 @@ EXTRA_OECONF = "--verbose \ | |||
155 | --with-path-macros=${rpm_macros} \ | 157 | --with-path-macros=${rpm_macros} \ |
156 | --with-bugreport=http://bugzilla.pokylinux.org" | 158 | --with-bugreport=http://bugzilla.pokylinux.org" |
157 | 159 | ||
158 | CFLAGS_append = " -DRPM_VENDOR_WINDRIVER" | 160 | CFLAGS_append = " -DRPM_VENDOR_WINDRIVER -DRPM_VENDOR_POKY" |
159 | 161 | ||
160 | PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-libs ${PN}-dev ${PN}-common ${PN}-build python-rpm-dbg python-rpm perl-module-rpm perl-module-rpm-dev ${PN}-locale" | 162 | PACKAGES = "${PN}-dbg ${PN} ${PN}-doc ${PN}-libs ${PN}-dev ${PN}-common ${PN}-build python-rpm-dbg python-rpm perl-module-rpm perl-module-rpm-dev ${PN}-locale" |
161 | 163 | ||