Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multi-arch ELF dependency generation (v6 packages) #3578

Draft
wants to merge 9 commits into
base: master
Choose a base branch
from
5 changes: 3 additions & 2 deletions fileattrs/elf.attr
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
%__elf_provides %{_rpmconfigdir}/elfdeps --provides --multifile
%__elf_requires %{_rpmconfigdir}/elfdeps --requires --multifile
%__elf_depstyle %[ %_rpmformat >=6 ? "--multiarch" : "--biarch" ]
%__elf_provides %{_rpmconfigdir}/elfdeps --provides --multifile %{__elf_depstyle}
%__elf_requires %{_rpmconfigdir}/elfdeps --requires --multifile %{__elf_depstyle}
%__elf_magic ^(setuid,? )?(setgid,? )?(sticky )?ELF (32|64)-bit.*$
%__elf_exclude_path ^/lib/modules/.*\\.ko?(\\.[[:alnum:]]*)$
%__elf_protocol multifile
103 changes: 93 additions & 10 deletions tests/rpmbuild.at
Original file line number Diff line number Diff line change
Expand Up @@ -1385,14 +1385,14 @@ shebang = 0.1-1
[])
RPMTEST_CLEANUP

RPMTEST_SETUP_RW([elf dependencies])
AT_KEYWORDS([build])
RPMTEST_SETUP_RW([elf biarch dependencies])
AT_KEYWORDS([build elfdeps])

RPMTEST_CHECK([
runroot chmod a-x /data/misc/libhello.so
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R /data/misc/libhello.so
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R --biarch /data/misc/libhello.so
runroot chmod a+x /data/misc/libhello.so
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R /data/misc/libhello.so
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R --biarch /data/misc/libhello.so
],
[0],
[libc.so.6(GLIBC_2.2.5)(64bit)
Expand All @@ -1406,9 +1406,9 @@ rtld(GNU_HASH)

RPMTEST_CHECK([
runroot chmod a-x /data/misc/libhello.so
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -P /data/misc/libhello.so
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -P --biarch /data/misc/libhello.so
runroot chmod a+x /data/misc/libhello.so
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -P /data/misc/libhello.so
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -P --biarch /data/misc/libhello.so
],
[0],
[libhello.so()(64bit)
Expand All @@ -1418,9 +1418,9 @@ libhello.so()(64bit)

RPMTEST_CHECK([
runroot chmod a-x /data/misc/helloexe
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R /data/misc/helloexe
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R --biarch /data/misc/helloexe
runroot chmod a+x /data/misc/helloexe
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R /data/misc/helloexe
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R --biarch /data/misc/helloexe
],
[0],
[libc.so.6(GLIBC_2.2.5)(64bit)
Expand All @@ -1432,9 +1432,9 @@ rtld(GNU_HASH)

RPMTEST_CHECK([
runroot chmod a-x /data/misc/hellopie
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R /data/misc/hellopie
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R --biarch /data/misc/hellopie
runroot chmod a+x /data/misc/hellopie
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R /data/misc/hellopie
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R --biarch /data/misc/hellopie
],
[0],
[libc.so.6(GLIBC_2.2.5)(64bit)
Expand All @@ -1445,6 +1445,89 @@ rtld(GNU_HASH)
[])
RPMTEST_CLEANUP

RPMTEST_SETUP_RW([elf multiarch dependencies])
AT_KEYWORDS([build elfdeps])

RPMTEST_CHECK([
runroot chmod a-x /data/misc/libhello.so
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R --multiarch /data/misc/libhello.so
runroot chmod a+x /data/misc/libhello.so
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R --multiarch /data/misc/libhello.so
],
[0],
[libc.so.6(GLIBC_2.2.5)(x86-64l)
libc.so.6()(x86-64l)
rtld(GNU_HASH)
libc.so.6(GLIBC_2.2.5)(x86-64l)
libc.so.6()(x86-64l)
rtld(GNU_HASH)
],
[])

RPMTEST_CHECK([
runroot chmod a-x /data/misc/libhello.so
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -P --multiarch /data/misc/libhello.so
runroot chmod a+x /data/misc/libhello.so
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -P --multiarch /data/misc/libhello.so
],
[0],
[libhello.so()(x86-64l)
libhello.so()(x86-64l)
],
[])

RPMTEST_CHECK([
runroot chmod a-x /data/misc/helloexe
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R --multiarch /data/misc/helloexe
runroot chmod a+x /data/misc/helloexe
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R --multiarch /data/misc/helloexe
],
[0],
[libc.so.6(GLIBC_2.2.5)(x86-64l)
libhello.so()(x86-64l)
libc.so.6()(x86-64l)
rtld(GNU_HASH)
],
[])

RPMTEST_CHECK([
runroot chmod a-x /data/misc/hellopie
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R --multiarch /data/misc/hellopie
runroot chmod a+x /data/misc/hellopie
runroot ${RPM_CONFIGDIR_PATH}/elfdeps -R --multiarch /data/misc/hellopie
],
[0],
[libc.so.6(GLIBC_2.2.5)(x86-64l)
libhello.so()(x86-64l)
libc.so.6()(x86-64l)
rtld(GNU_HASH)
],
[])

# amusingly our ppc64 package actually contains a 32bit binary
RPMTEST_CHECK([
for arch in ppc64 i386; do
pkg="hello-1.0-1.${arch}.rpm"
echo ${pkg}:
rpm2cpio /data/RPMS/${pkg} \
| cpio -i --quiet --to-stdout ./usr/local/bin/hello > ${arch}.bin
chmod a+x ${arch}.bin
${RPM_CONFIGDIR_PATH}/elfdeps -R --multiarch ${arch}.bin
done
],
[0],
[hello-1.0-1.ppc64.rpm:
libc.so.6(GLIBC_2.0)(ppc-32b)
libc.so.6()(ppc-32b)
rtld(GNU_HASH)
hello-1.0-1.i386.rpm:
libc.so.6(GLIBC_2.0)(x86-32l)
libc.so.6()(x86-32l)
rtld(GNU_HASH)
],
[])

RPMTEST_CLEANUP
# ------------------------------
# Test spec query functionality
RPMTEST_SETUP_RW([rpmspec query 1])
Expand Down
Loading