# rpmbuild.at: test rpmbuild # # Copyright (C) 2007 Ralf Corsépius # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA AT_BANNER([RPM build]) # ------------------------------ # Check if rpmbuild -ba *.spec works AT_SETUP([rpmbuild -ba *.spec]) AT_KEYWORDS([build]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES run rpmbuild \ -ba "${abs_srcdir}"/data/SPECS/hello.spec ], [0], [ignore], [ignore]) AT_CLEANUP # ------------------------------ # Check if rpmbuild --rebuild *.src.rpm works AT_SETUP([rpmbuild --rebuild]) AT_KEYWORDS([build]) AT_CHECK([ rm -rf ${TOPDIR} run rpmbuild \ --rebuild "${abs_srcdir}"/data/SRPMS/hello-1.0-1.src.rpm ], [0], [ignore], [ignore]) AT_CLEANUP AT_SETUP([rpmbuild --short-circuit -bl]) AT_KEYWORDS([build]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES run rpmbuild -bi "${abs_srcdir}"/data/SPECS/hello.spec &> /dev/null run rpmbuild --quiet -bl --short-circuit "${abs_srcdir}"/data/SPECS/hello.spec ], [0], [], []) AT_CLEANUP # ------------------------------ # Check if tar unpacking works AT_SETUP([rpmbuild -tb ]) AT_KEYWORDS([build]) AT_CHECK([ rm -rf ${TOPDIR} run rpmbuild \ -tb "${RPMDATA}/SOURCES/hello-1.0.tar.gz" ], [1], [ignore], [error: line 5: Unknown tag: Serial: 1 ]) AT_CLEANUP # ------------------------------ # Check if tar build works # TODO: test that the rpms are actually created... AT_SETUP([rpmbuild -tb]) AT_KEYWORDS([build]) AT_CHECK([ rm -rf ${TOPDIR} run rpmbuild \ -ta "${RPMDATA}/SOURCES/hello-2.0.tar.gz" ], [0], [ignore], [ignore]) AT_CLEANUP # ------------------------------ # %attr/%defattr tests AT_SETUP([rpmbuild %attr and %defattr]) AT_KEYWORDS([build]) AT_CHECK([[ rm -rf ${TOPDIR} runroot rpmbuild \ -bb --quiet /data/SPECS/attrtest.spec runroot rpm -qp --qf \ "\n[%{filemodes:perms} %-8{fileusername} %-8{filegroupname} %{filenames}\n]"\ /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm ]], [0], [ drwx------ root root /a/dir -r-------- root root /a/file drwx------ daemon adm /b/dir -r-------- daemon adm /b/file drwxr-x--- root adm /c/dir -rw-r----- daemon root /c/file drwxr-x--x daemon bin /d/dir -rw-r--r-- bin daemon /d/file drwx------ foo bar /e/dir -r-------- foo bar /e/file drwxrwx--- bar foo /f/dir -rw-rw---- bar foo /f/file drwx------ adm foo /g/dir -r-------- bar adm /g/file drwxr-xr-x foo bar /h/dir -rw-r--r-- foo bar /h/file drwxr-x--- adm root /i/dir -rwsr-xr-x root adm /i/file drwxrwxrwx zoot zoot /j/dir --w--w--w- zoot zoot /j/file ], []) AT_CLEANUP # ------------------------------ # hardlink tests AT_SETUP([rpmbuild hardlink]) AT_KEYWORDS([build]) AT_CHECK([ RPMDB_CLEAR RPMDB_INIT rm -rf ${TOPDIR} runroot rpmbuild \ -bb --quiet /data/SPECS/hlinktest.spec runroot rpm -i /build/RPMS/noarch/hlinktest-1.0-1.noarch.rpm runroot rpm -q --qf "[[%{filenlinks} %{filenames}\n]]%{longsize}\n" hlinktest runroot rpm -V --nouser --nogroup hlinktest ls -i "${RPMTEST}"/foo/hello* | awk {'print $1'} | sort -u | wc -l ], [0], [2 /foo/aaaa 1 /foo/copyllo 4 /foo/hello 4 /foo/hello-bar 4 /foo/hello-foo 4 /foo/hello-world 2 /foo/zzzz 87 1 ], []) AT_CLEANUP AT_SETUP([rpmbuild unpackaged files]) AT_KEYWORDS([build]) AT_CHECK([ RPMDB_CLEAR RPMDB_INIT rm -rf ${TOPDIR} runroot rpmbuild \ -bb --quiet --with unpackaged_files /data/SPECS/hlinktest.spec ], [1], [], [error: Installed (but unpackaged) file(s) found: /toot Installed (but unpackaged) file(s) found: /toot ]) AT_CLEANUP # rpm doesn't detect unpackaged directories but should, really AT_SETUP([rpmbuild unpackaged directories]) AT_KEYWORDS([build]) AT_XFAIL_IF([test $RPM_XFAIL -ne 0]) AT_CHECK([ RPMDB_CLEAR RPMDB_INIT rm -rf ${TOPDIR} runroot rpmbuild \ -bb --quiet --with unpackaged_dirs /data/SPECS/hlinktest.spec ], [1], [], [error: Installed (but unpackaged) file(s) found: /zoo Installed (but unpackaged) file(s) found: /zoo ]) AT_CLEANUP AT_SETUP([rpmbuild glob]) AT_KEYWORDS([build]) AT_CHECK([ RPMDB_CLEAR RPMDB_INIT rm -rf ${TOPDIR} runroot rpmbuild -bb --quiet /data/SPECS/globtest.spec runroot rpm -qp \ --qf "[[%{filemodes:perms} %{filenames}\n]]" \ /build/RPMS/noarch/globtest-1.0-1.noarch.rpm ], [0], [-rw-r--r-- /opt/globtest/baf drwxr-xr-x /opt/globtest/bang -rw-r--r-- /opt/globtest/bif drwxr-xr-x /opt/globtest/bing drwxr-xr-x /opt/globtest/bong drwxr-xr-x /opt/globtest/foo -rw-r--r-- /opt/globtest/foo/one -rw-r--r-- /opt/globtest/foo/three -rw-r--r-- /opt/globtest/foo/two lrwxrwxrwx /opt/globtest/linkbad lrwxrwxrwx /opt/globtest/linkgood -rw-r--r-- /opt/globtest/weird%name -rw-r--r-- /opt/globtest/zab -rw-r--r-- /opt/globtest/zeb -rw-r--r-- /opt/globtest/zib ], []) AT_CLEANUP AT_SETUP([rpmbuild prefixpostfix]) AT_KEYWORDS([build]) AT_CHECK([ RPMDB_CLEAR RPMDB_INIT rm -rf ${TOPDIR} runroot rpmbuild -bb --quiet \ /data/SPECS/prefixtest.spec runroot rpm -qp \ --qf "[[%{filemodes:perms} %{filenames}\n]]" \ /build/RPMS/noarch/prefixtest-1.0-1.noarch.rpm ], [0], [-rw-r--r-- /opt/prefixtest/ba drwxr-xr-x /opt/prefixtest/ban -rw-r--r-- /opt/prefixtest/bi drwxr-xr-x /opt/prefixtest/bin drwxr-xr-x /opt/prefixtest/bon drwxr-xr-x /opt/prefixtest/foo -rw-r--r-- /opt/prefixtest/foo/one -rw-r--r-- /opt/prefixtest/foo/three -rw-r--r-- /opt/prefixtest/foo/two lrwxrwxrwx /opt/prefixtest/linkbad lrwxrwxrwx /opt/prefixtest/linkgood -rw-r--r-- /opt/prefixtest/weird%name -rw-r--r-- /opt/prefixtest/zab -rw-r--r-- /opt/prefixtest/zeb -rw-r--r-- /opt/prefixtest/zib ], []) AT_CLEANUP # ------------------------------ # Check if weak and reverse requires can be built AT_SETUP([Weak and reverse requires]) AT_KEYWORDS([build]) AT_CHECK([ runroot rpmbuild -bb --quiet \ --define "pkg weakdeps" \ --define "recs foo > 1.2.3" \ --define "sugs bar >= 0.1.2" \ --define "sups baz" \ --define "ens zap = 3" \ /data/SPECS/deptest.spec runroot rpm -qp --recommends /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm runroot rpm -qp --suggests /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm runroot rpm -qp --supplements /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm runroot rpm -qp --enhances /build/RPMS/noarch/deptest-weakdeps-1.0-1.noarch.rpm ], [0], [foo > 1.2.3 bar >= 0.1.2 baz zap = 3 ], [ignore]) AT_CLEANUP # ------------------------------ # Test BuildRequire functionality AT_SETUP([Build requires]) AT_KEYWORDS([build]) AT_CHECK([ runroot rpmbuild -bb --quiet \ --define "pkg buildreq" \ --define "buildreqs foo > 1.2.3" \ /data/SPECS/deptest.spec ], [1], [], [error: Failed build dependencies: foo > 1.2.3 is needed by deptest-buildreq-1.0-1.noarch ]) AT_CLEANUP AT_SETUP([Dependency generation]) AT_KEYWORDS([build]) AT_CHECK([ runroot rpmbuild -bb --quiet \ /data/SPECS/filedep.spec echo Requires: runroot rpm -qp --requires /build/RPMS/noarch/filedep-1.0-1.noarch.rpm echo Provides: runroot rpm -qp --provides /build/RPMS/noarch/filedep-1.0-1.noarch.rpm echo Filerequires: runroot rpm -qp --qf '[["%{FILENAMES}\t%{FILEREQUIRE}"\n]]' /build/RPMS/noarch/filedep-1.0-1.noarch.rpm echo Fileprovides: runroot rpm -qp --qf '[["%{FILENAMES}\t%{FILEPROVIDE}"\n]]' /build/RPMS/noarch/filedep-1.0-1.noarch.rpm ], [0], [Requires: /bin/f00f /bin/sh rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Provides: filedep = 1.0-1 Filerequires: "/etc/foo.conf " "/usr/bin/bar /bin/f00f" "/usr/bin/foo /bin/sh" "/usr/share/doc/filedep " "/usr/share/doc/filedep/README " Fileprovides: "/etc/foo.conf " "/usr/bin/bar " "/usr/bin/foo " "/usr/share/doc/filedep " "/usr/share/doc/filedep/README " ], []) AT_CLEANUP # ------------------------------ # Test spec query functionality AT_SETUP([rpmspec query 1]) AT_KEYWORDS([build]) AT_CHECK([ runroot rpmspec -q \ --define "pkg dep" \ --define "reqs foo > 1.2.3 bar <= 2.3" \ --requires \ /data/SPECS/deptest.spec ], [0], [bar <= 2.3 foo > 1.2.3 ], []) AT_CLEANUP # ------------------------------ # archive sanity check AT_SETUP([rpmbuild archive sanity]) AT_KEYWORDS([build]) AT_CHECK([ rm -rf ${TOPDIR} runroot rpmbuild \ -bb --quiet /data/SPECS/attrtest.spec runroot rpm2cpio \ /build/RPMS/noarch/attrtest-1.0-1.noarch.rpm > /tmp/attrtest.cpio ], [0], [], []) AT_CLEANUP # ------------------------------ # Check if rpmbuild creates the minisymtab section in the main hello binary AT_SETUP([rpmbuild debuginfo minisymtab]) AT_KEYWORDS([build] [debuginfo]) AT_CHECK([ rm -rf ${TOPDIR} # Use macros.debug to generate a debuginfo package. export CFLAGS="-g" rundebug rpmbuild --quiet \ --rebuild "${abs_srcdir}"/data/SRPMS/hello-1.0-1.src.rpm # Extract the main package and inspect the hello binary # It should contain .gnu_debugdata, but not the full .symtab rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm | cpio -diu test -f ./usr/local/bin/hello || exit 1 readelf -S ./usr/local/bin/hello |\ grep -q .gnu_debugdata; test $? == 0 || exit 1 readelf -S ./usr/local/bin/hello \ | grep -q .symtab; test $? == 1 || exit 1 # And the opposite for the debuginfo package rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \ | cpio -diu test -f ./usr/lib/debug/usr/local/bin/hello*.debug || exit 1 readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \ | grep -q .gnu_debugdata; test $? == 1 || exit 1 readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \ | grep -q .symtab; test $? == 0 || exit 1 ], [0], [], [ignore]) AT_CLEANUP # ------------------------------ # Check if rpmbuild doesn't create the minisymtab section if we keep symtab # Some package might want to use strip -g to keep the symbol table and only # but the debug symbols/info in the debuginfo package. AT_SETUP([rpmbuild debuginfo minisymtab strip -g]) AT_KEYWORDS([build] [debuginfo]) AT_CHECK([ rm -rf ${TOPDIR} # Use macros.debug to generate a debuginfo package. export CFLAGS="-g" rundebug rpmbuild --quiet \ --define="_find_debuginfo_opts -g" \ --rebuild "${abs_srcdir}"/data/SRPMS/hello-1.0-1.src.rpm # Extract the main package and inspect the hello binary # It should contain .symtab (because of strip -g), so doesn't .gnu_debugdata. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm | cpio -diu test -f ./usr/local/bin/hello || exit 1 readelf -S ./usr/local/bin/hello \ | grep -q .gnu_debugdata; test $? == 1 || exit 1 readelf -S ./usr/local/bin/hello \ | grep -q .symtab; test $? == 0 || exit 1 # The debuginfo package should contain neither. The .symtab is NOBITS. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm \ | cpio -diu test -f ./usr/lib/debug/usr/local/bin/hello*.debug || exit 1 readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \ | grep -q .gnu_debugdata; test $? == 1 || exit 1 readelf -S ./usr/lib/debug/usr/local/bin/hello*.debug \ | grep .symtab | grep -q NOBITS; test $? == 0 || exit 1 ], [0], [], [ignore]) AT_CLEANUP # ------------------------------ # Check if rpmbuild runs dwz and generates a multi file that with shared # debuginfo. This is simply the hello example with one binary build twice # so dwz has enough slightly similar debug data. # Test the case without unique debug file names. AT_SETUP([rpmbuild debuginfo dwz]) AT_KEYWORDS([build] [debuginfo] [dwz]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ --undefine "_unique_debug_names" \ --undefine "_unique_debug_srcs" \ -ba "${abs_srcdir}"/data/SPECS/hello2.spec # The debuginfo package should contain a .debug file for each binary # and a dwz multi file that contains the shared debuginfo between them. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \ | cpio -diu hello_file_debug=./usr/lib/debug/usr/local/bin/hello.debug hello2_file_debug=./usr/lib/debug/usr/local/bin/hello2.debug hello_multi_file=./usr/lib/debug/.dwz/hello2-1.0-1.* test -f $hello_file_debug || echo "no hello debug file: $hello_file_debug" test -f $hello2_file_debug || echo "no hello2 debug file: $hello2_file_debug" test -f $hello_multi_file || echo "no dwz multi file: $hello_multi_file" # Make sure the main package binaries contain the correct build-ids # linking them to the debug packages. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \ | cpio -diu hello_file=./usr/local/bin/hello hello2_file=./usr/local/bin/hello2 test -f $hello_file || echo "no hello file: $hello_file" test -f $hello2_file || echo "no hello2 file: $hello2_file" id1=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/') id2=$(file $hello2_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/') id1debug=$(file $hello_file_debug | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/') id2debug=$(file $hello2_file_debug | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/') idmulti=$(file $hello_multi_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/') test "$id1" = "$id1debug" || echo "id1: $id1 != id1debug: $id1debug" test "$id2" = "$id2debug" || echo "id2: $id2 != id2debug: $id2debug" # The build-id files should link to the .debug files. id1file="./usr/lib/debug/.build-id/${id1:0:2}/${id1:2}" canonid1file=$(readlink -f ${id1file}) canonfile1=$(readlink -f $hello_file) canonid1debug=$(readlink -f ${id1file}.debug) canondebug1=$(readlink -f $hello_file_debug) test "$canonid1file" = "$canonfile1" \ || echo "canonid1file: $canonid1file != $canonfile1" test "$canonid1debug" = "$canondebug1" \ || echo "canonid1debug: $canonid1debug != $canondebug1" id2file="./usr/lib/debug/.build-id/${id2:0:2}/${id2:2}" canonid2file=$(readlink -f ${id2file}) canonfile2=$(readlink -f $hello2_file) canonid2debug=$(readlink -f ${id2file}.debug) canondebug2=$(readlink -f $hello2_file_debug) test "$canonid2file" = "$canonfile2" \ || echo "canonid2: $canonid2file != $canonfile2" test "$canonid2debug" = "$canondebug2" \ || echo "canonid2debug: $canonid2debug" != "$canondebug2" # Both .debug files should point to the dwz multi file. # It would be nice to also test that they contain the correct dwz build-id # but that is a bit hard to grep out of the section data. multiref1=$(readelf --string-dump=.gnu_debugaltlink $hello_file_debug \ | grep '[ 0]' | cut -c13-) multiref2=$(readelf --string-dump=.gnu_debugaltlink $hello2_file_debug \ | grep '[ 0]' | cut -c13-) test "$multiref1" = "$multiref2" || echo "multiref: $multiref1 != $multiref2" canonmultiref=$(readlink -f $(dirname $canondebug1)/$multiref1) canonmultifile=$(readlink -f $hello_multi_file) test "$canonmultiref" = "$canonmultifile" \ || echo "canonmultiref: $canonmultiref" != "$canonmultifile" ], [0], [], [ignore]) AT_CLEANUP # ------------------------------ # Check that rpmbuild creates no debuginfo when --nodebuginfo is passed AT_SETUP([rpmbuild no debuginfo]) AT_KEYWORDS([build] [debuginfo]) AT_CHECK([ rm -rf ${TOPDIR} # Use macros.debug to generate a debuginfo package, # but pass --nodebuginfo to skip it. export CFLAGS="-g" rundebug rpmbuild --quiet --nodebuginfo \ --rebuild "${abs_srcdir}"/data/SRPMS/hello-1.0-1.src.rpm # Extract the main package and inspect the hello binary # It should not contain .gnu_debugdata, but the full .symtab rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello-1.0-1.*.rpm | cpio -diu test -f ./usr/local/bin/hello || exit 1 readelf -S ./usr/local/bin/hello |\ grep -q .gnu_debugdata; test $? == 1 || exit 1 readelf -S ./usr/local/bin/hello \ | grep -q .symtab; test $? == 0 || exit 1 # And the opposite for the debuginfo package test ! -e ${abs_builddir}/testing/build/RPMS/*/hello-debuginfo-1.0-1.*.rpm || exit 1 ], [0], [], [ignore]) AT_CLEANUP # ------------------------------ # Check if rpmbuild runs dwz and generates a multi file that with shared # debuginfo. This is simply the hello example with one binary build twice # so dwz has enough slightly similar debug data. # Test with unique debug file names. AT_SETUP([rpmbuild debuginfo dwz unique debug names]) AT_KEYWORDS([build] [debuginfo] [dwz]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ --define "_unique_debug_names 1" \ -ba "${abs_srcdir}"/data/SPECS/hello2.spec # The debuginfo package should contain a .debug file for each binary # and a dwz multi file that contains the shared debuginfo between them. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \ | cpio -diu hello_file_debug=./usr/lib/debug/usr/local/bin/hello-*.debug hello2_file_debug=./usr/lib/debug/usr/local/bin/hello2-*.debug hello_multi_file=./usr/lib/debug/.dwz/hello2-1.0-1.* test -f $hello_file_debug || echo "no hello debug file: $hello_file_debug" test -f $hello2_file_debug || echo "no hello2 debug file: $hello2_file_debug" test -f $hello_multi_file || echo "no dwz multi file: $hello_multi_file" # Make sure the main package binaries contain the correct build-ids # linking them to the debug packages. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \ | cpio -diu hello_file=./usr/local/bin/hello hello2_file=./usr/local/bin/hello2 test -f $hello_file || echo "no hello file: $hello_file" test -f $hello2_file || echo "no hello2 file: $hello2_file" id1=$(file $hello_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/') id2=$(file $hello2_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/') id1debug=$(file $hello_file_debug | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/') id2debug=$(file $hello2_file_debug | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/') idmulti=$(file $hello_multi_file | sed 's/.*, BuildID\[[.*\]]=\([[0-9a-f]]*\),.*/\1/') test "$id1" = "$id1debug" || echo "id1: $id1 != id1debug: $id1debug" test "$id2" = "$id2debug" || echo "id2: $id2 != id2debug: $id2debug" # The build-id files should link to the .debug files. id1file="./usr/lib/debug/.build-id/${id1:0:2}/${id1:2}" canonid1file=$(readlink -f ${id1file}) canonfile1=$(readlink -f $hello_file) canonid1debug=$(readlink -f ${id1file}.debug) canondebug1=$(readlink -f $hello_file_debug) test "$canonid1file" = "$canonfile1" \ || echo "canonid1file: $canonid1file != $canonfile1" test "$canonid1debug" = "$canondebug1" \ || echo "canonid1debug: $canonid1debug != $canondebug1" id2file="./usr/lib/debug/.build-id/${id2:0:2}/${id2:2}" canonid2file=$(readlink -f ${id2file}) canonfile2=$(readlink -f $hello2_file) canonid2debug=$(readlink -f ${id2file}.debug) canondebug2=$(readlink -f $hello2_file_debug) test "$canonid2file" = "$canonfile2" \ || echo "canonid2: $canonid2file != $canonfile2" test "$canonid2debug" = "$canondebug2" \ || echo "canonid2debug: $canonid2debug" != "$canondebug2" # Both .debug files should point to the dwz multi file. # It would be nice to also test that they contain the correct dwz build-id # but that is a bit hard to grep out of the section data. multiref1=$(readelf --string-dump=.gnu_debugaltlink $hello_file_debug \ | grep '[ 0]' | cut -c13-) multiref2=$(readelf --string-dump=.gnu_debugaltlink $hello2_file_debug \ | grep '[ 0]' | cut -c13-) test "$multiref1" = "$multiref2" || echo "multiref: $multiref1 != $multiref2" canonmultiref=$(readlink -f $(dirname $canondebug1)/$multiref1) canonmultifile=$(readlink -f $hello_multi_file) test "$canonmultiref" = "$canonmultifile" \ || echo "canonmultiref: $canonmultiref" != "$canonmultifile" ], [0], [], [ignore]) AT_CLEANUP # ------------------------------ # Check that old style gnu_debuglink CRC checksums are correct even after # using dwz to compress the debuginfo files. AT_SETUP([rpmbuild debuginfo dwz gnu_debuglink crc]) AT_KEYWORDS([build] [debuginfo]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Build a package that cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ -ba "${abs_srcdir}"/data/SPECS/hello2.spec # Unpack the main and debuginfo rpms so we can check binaries and .debug files. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \ | cpio -diu rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \ | cpio -diu # Check that dwz has ran and a multi file has been produced test -f ./usr/lib/debug/.dwz/hello2-1.0-1.* || exit 1 # Run sepdbugcrcfix on the binaries, both should have correct CRC already. ${abs_top_builddir}/sepdebugcrcfix ./usr/lib/debug \ ./usr/local/bin/hello ./usr/local/bin/hello2 | grep CRC32 | cut -f2 -d: ], [0], [ Updated 0 CRC32s, 2 CRC32s did match. ], [ignore]) AT_CLEANUP # ------------------------------ # Check that an implicit suid binary get included with the suid bit set. # We explicitly build with all debug.macros to test those helpers. AT_SETUP([rpmbuild implicit suid binary]) AT_KEYWORDS([build] [debuginfo] [dwz] [suid]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Build a package that has some debuginfo cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ -ba "${abs_srcdir}"/data/SPECS/hello2-suid.spec # Unpack rpm so we can check the included binaries. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-1.0-1.*.rpm \ | cpio -diu --quiet # List all binaries with suid bit set (should be one, hello). echo "suid:" find usr -executable -type f -perm /4000 # List all binaries without suid bit set (should also be one, hello2). echo "no-suid:" find usr -executable -type f \! -perm /4000 ], [0], [suid: usr/local/bin/hello no-suid: usr/local/bin/hello2 ], [ignore]) AT_CLEANUP # ------------------------------ # Check that a GDB index is included when requested. AT_SETUP([rpmbuild debuginfo gdb index included]) AT_KEYWORDS([build] [debuginfo] [gdb]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Build a package that has some debuginfo cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ --define "_include_gdb_index 1" \ -ba "${abs_srcdir}"/data/SPECS/hello2.spec # Unpack the debuginfo rpms so we can check the .debug files. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet # Check that gdb-add-index has ran and a .gdb_index section has been added readelf -S ./usr/lib/debug/usr/local/bin/hello2*.debug \ | grep gdb_index | cut -c8-17 ], [0], [.gdb_index ], [ignore]) AT_CLEANUP # ------------------------------ # Check that a GDB index is NOT included when not requested. AT_SETUP([rpmbuild debuginfo no gdb index included]) AT_KEYWORDS([build] [debuginfo] [gdb]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Build a package that has some debuginfo cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ --undefine "_include_gdb_index" \ -ba "${abs_srcdir}"/data/SPECS/hello2.spec # Unpack the debuginfo rpms so we can check the .debug files. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet # Check that gdb-add-index has not ran and no .gdb_index section has been added readelf -S ./usr/lib/debug/usr/local/bin/hello2*.debug \ | grep gdb_index | cut -c8-17 ], [0], [], [ignore]) AT_CLEANUP # ------------------------------ # Check that a debug source is in a "unique" directory when requested. AT_SETUP([rpmbuild debuginfo unique debug src dir]) AT_KEYWORDS([build] [debuginfo]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Build a package that has some debuginfo cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES # Note that the spec defines hello2 as name, but the source is hello-1.0. # Disable dwz to make debuginfo path rewrite checking easier. rundebug rpmbuild --quiet \ --undefine "_find_debuginfo_dwz_opts" \ --define "_unique_debug_srcs 1" \ -ba "${abs_srcdir}"/data/SPECS/hello2.spec # Unpack the debuginfo rpms so we can check the .debug files. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet # Check that the source path is "unique" # Drop the final arch prefix to make the test arch-independent. ls ./usr/src/debug/ | cut -f1,2 -d\. # Check that the source path has been rewritten in the .debug file. # Drop the final arch prefix to make the test arch-independent. readelf --debug-dump=info ./usr/lib/debug/usr/local/bin/hello2*.debug \ | grep comp_dir | sed -e 's/\t$//' | cut -f5- -d/ | cut -f1,2 -d\. ], [0], [hello2-1.0-1 hello2-1.0-1 ], [ignore]) AT_CLEANUP # ------------------------------ # Check that a debug source is NOT in a "unique" directory when not requested. # It will be in the "build directory" name under /usr/src/debug. AT_SETUP([rpmbuild debuginfo no unique debug src dir]) AT_KEYWORDS([build] [debuginfo]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Build a package that has some debuginfo cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES # Note that the spec defines hello2 as name, but the source is hello-1.0. # Disable dwz to make debuginfo path rewrite checking easier. rundebug rpmbuild --quiet \ --undefine "_find_debuginfo_dwz_opts" \ --undefine "_unique_debug_srcs" \ -ba "${abs_srcdir}"/data/SPECS/hello2.spec # Unpack the debuginfo rpms so we can check the .debug files. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet # Check that the source path is "unique" ls ./usr/src/debug/ # Check that the source path has been rewritten in the .debug file. readelf --debug-dump=info ./usr/lib/debug/usr/local/bin/hello2*.debug \ | grep comp_dir | sed -e 's/\t$//' | cut -f5- -d/ ], [0], [hello-1.0 hello-1.0 ], [ignore]) AT_CLEANUP # ------------------------------ # Check that defining _debugsource_packages creates -debugsource package AT_SETUP([rpmbuild debugsource]) AT_KEYWORDS([build] [debuginfo] [debugsource]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Build a package that has some debuginfo cp "${abs_srcdir}"/data/SOURCES/hello-1.0.tar.gz "${abs_srcdir}"/data/SOURCES/hello-1.0-modernize.patch ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ --define "_debugsource_packages 1" \ -ba "${abs_srcdir}"/data/SPECS/hello2.spec # Unpack the debugsource rpm so we can check the sources are there. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/hello2-debugsource-1.0-1.*.rpm \ | cpio -diu --quiet # Check that hello.c is there. ls ./usr/src/debug/hello2-1.0*/ # The debuginfo package should recommend the debugsource package (ignore arch). echo -n "Recommends: " run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/hello2-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/' ], [0], [hello.c Recommends: hello2-debugsource(ignore-arch) = 1.0-1 ], [ignore]) AT_CLEANUP # ------------------------------ # Check that defining _debugsource_packages creates -debugsource package # even if %install changes the working directory (debugsourcefiles.list # should be in expected build dir). AT_SETUP([rpmbuild debugsource debugsourcefiles.list path]) AT_KEYWORDS([build] [debuginfo] [debugsource]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Setup sources cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ --define "_debugsource_packages 1" \ -ba "${abs_srcdir}"/data/SPECS/hello-cd.spec # Unpack the debuginfo rpms so we can check the sources are there. rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debugsource-1.0-1.*.rpm \ | cpio -diu --quiet # Check that hello.c is there. ls ./usr/src/debug/test-1.0*/ ], [0], [hello.c ], [ignore]) AT_CLEANUP # ------------------------------ # Check that undefining _debuginfo_subpackages creates one single -debuginfo. AT_SETUP([rpmbuild debuginfo subpackages single]) AT_KEYWORDS([build] [debuginfo] [debugsubpackage]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Setup sources cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ --undefine "_unique_debug_names" \ --undefine "_unique_debug_srcs" \ --undefine "_debugsource_packages" \ --undefine "_debuginfo_subpackages" \ -ba "${abs_srcdir}"/data/SPECS/test-subpackages.spec # Check that there is just one debuginfo package. ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines # Which contains hello.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello debug exists" else echo "No hello: $debug_name" fi ], [0], [1 hello debug exists ], [ignore]) AT_CLEANUP # ------------------------------ # Check that defining _debuginfo_subpackages creates multiple -debuginfos. AT_SETUP([rpmbuild debuginfo subpackages multiple]) AT_KEYWORDS([build] [debuginfo] [debugsubpackage]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Setup sources cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ --undefine "_unique_debug_names" \ --undefine "_unique_debug_srcs" \ --undefine "_debugsource_packages" \ --define "_debuginfo_subpackages 1" \ -ba "${abs_srcdir}"/data/SPECS/test-subpackages.spec # Check that there are 3 debuginfo packages. ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines # First contains hello.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello debug exists" else echo "No hello: $debug_name" fi # Second contains hello2.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello2 debug exists" else echo "No hello2: $debug_name" fi # No debugsource package, so sources are in the main debuginfo package. # Make sure it is recommended. echo -n "Recommends: " run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/' # Third contains hello3.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello3 | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello3 debug exists" else echo "No hello3: $debug_name" fi # No debugsource package, so sources are in the main debuginfo package. # Make sure it is recommended. echo -n "Recommends: " run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/' ], [0], [3 hello debug exists hello2 debug exists Recommends: test-debuginfo(ignore-arch) = 1.0-1 hello3 debug exists Recommends: test-debuginfo(ignore-arch) = 1.0-1 ], [ignore]) AT_CLEANUP # ------------------------------ # Check that defining _debuginfo_subpackages creates multiple -debuginfos. # With unique debug and source names AT_SETUP([rpmbuild debuginfo subpackages multiple unique]) AT_KEYWORDS([build] [debuginfo] [debugsubpackage]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Setup sources cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ --define "_unique_debug_names 1" \ --define "_unique_debug_srcs 1" \ --undefine "_debugsource_packages" \ --define "_debuginfo_subpackages 1" \ -ba "${abs_srcdir}"/data/SPECS/test-subpackages.spec # Check that there are 3 debuginfo packages. ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines # First contains hello.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello debug exists" else echo "No hello: $debug_name" fi # Second contains hello2.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello2 debug exists" else echo "No hello2: $debug_name" fi # No debugsource package, so sources are in the main debuginfo package. # Make sure it is recommended. echo -n "Recommends: " run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/' # Third contains hello3.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello3 | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello3 debug exists" else echo "No hello3: $debug_name" fi # No debugsource package, so sources are in the main debuginfo package. # Make sure it is recommended. echo -n "Recommends: " run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/' ], [0], [3 hello debug exists hello2 debug exists Recommends: test-debuginfo(ignore-arch) = 1.0-1 hello3 debug exists Recommends: test-debuginfo(ignore-arch) = 1.0-1 ], [ignore]) AT_CLEANUP # ------------------------------ # Check that defining _debuginfo_subpackages creates multiple -debuginfos. # Unique with debugsources. AT_SETUP([rpmbuild debuginfo subpackages multiple unique debugsource]) AT_KEYWORDS([build] [debuginfo] [debugsubpackage] [debugsource]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Setup sources cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ --define "_unique_debug_names 1" \ --define "_unique_debug_srcs 1" \ --define "_debugsource_packages 1" \ --define "_debuginfo_subpackages 1" \ -ba "${abs_srcdir}"/data/SPECS/test-subpackages.spec # Check that there are 3 debuginfo packages. ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines # First contains hello.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello debug exists" else echo "No hello: $debug_name" fi # Sources are in debugsource package. Make sure it is recommended. echo -n "Recommends: " run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/' # Second contains hello2.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello2 debug exists" else echo "No hello2: $debug_name" fi # Sources are in debugsource package. Make sure it is recommended. echo -n "Recommends: " run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/' # Third contains hello3.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello3 | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello3 debug exists" else echo "No hello3: $debug_name" fi # Sources are in debugsource package. Make sure it is recommended. echo -n "Recommends: " run rpm -qp --recommends ${abs_builddir}/testing/build/RPMS/*/test-test3-debuginfo-1.0-1.*.rpm | sed -E 's/([[-.a-z0-9]]+)\(.*\) = ([[-.0-9]]+)/\1\(ignore-arch\) = \2/' ], [0], [3 hello debug exists Recommends: test-debugsource(ignore-arch) = 1.0-1 hello2 debug exists Recommends: test-debugsource(ignore-arch) = 1.0-1 hello3 debug exists Recommends: test-debugsource(ignore-arch) = 1.0-1 ], [ignore]) AT_CLEANUP # ------------------------------ # Check that defining _debuginfo_subpackages works with excluded files. AT_SETUP([rpmbuild debuginfo subpackages multiple excluded]) AT_KEYWORDS([build] [debuginfo] [debugsubpackage] [debugsource]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Setup sources cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ --define "_unique_debug_names 1" \ --define "_unique_debug_srcs 1" \ --define "_debugsource_packages 1" \ --define "_debuginfo_subpackages 1" \ -ba "${abs_srcdir}"/data/SPECS/test-subpackages-exclude.spec # Check that there are 2 debuginfo packages. ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines # First contains hello.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello debug exists" else echo "No hello: $debug_name" fi # Second contains hello2.debug but NOT hello3.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello2 | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello2 debug exists" else echo "No hello2: $debug_name" fi if test -f ./usr/lib/debug/bin/hello3*; then echo "hello3 debug exists" else echo "No hello3 debug" fi ], [0], [2 hello debug exists hello2 debug exists No hello3 debug ], [ignore]) AT_CLEANUP # ------------------------------ # Check that defining _debuginfo_subpackages works with RemovePathPostfixes. AT_SETUP([rpmbuild debuginfo subpackages multiple excluded]) AT_KEYWORDS([build] [debuginfo] [debugsubpackage] [debugsource]) AT_CHECK([ rm -rf ${TOPDIR} AS_MKDIR_P(${TOPDIR}/SOURCES) # Setup sources cp "${abs_srcdir}"/data/SOURCES/hello.c ${TOPDIR}/SOURCES rundebug rpmbuild --quiet \ --define "_unique_debug_names 1" \ --define "_unique_debug_srcs 1" \ --define "_debugsource_packages 1" \ --define "_debuginfo_subpackages 1" \ -ba "${abs_srcdir}"/data/SPECS/test-subpackages-pathpostfixes.spec # Check that there are 2 debuginfo packages. ls ${abs_builddir}/testing/build/RPMS/*/*debuginfo*rpm | wc --lines # First contains hello.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello debug exists" else echo "No hello: $debug_name" fi # remove it, we are going to check the other debuginfo package. rm ./bin/hello rm ./usr/lib/debug/bin/$debug_name orig_debugname=$debugname # Second contains hello.foobar.debug but NOT hello.debug rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-1.0-1.*.rpm \ | cpio -diu --quiet # Extract the debug name from the exe (.gnu_debuglink section, first string) debug_name=$(readelf -p .gnu_debuglink ./bin/hello | grep hello | cut -c13-) rpm2cpio ${abs_builddir}/testing/build/RPMS/*/test-test2-debuginfo-1.0-1.*.rpm \ | cpio -diu --quiet if test -f ./usr/lib/debug/bin/$debug_name; then echo "hello.foobar debug exists" else echo "No hello2: $debug_name" fi if test -f ./usr/lib/debug/bin/$orig_debugname; then echo "$orig_debugname exists" else echo "No hello.debug" fi ], [0], [2 hello debug exists hello.foobar debug exists No hello.debug ], [ignore]) AT_CLEANUP