Revision: 7796 http://gar.svn.sourceforge.net/gar/?rev=7796&view=rev Author: wahwah Date: 2009-12-30 19:20:41 +0000 (Wed, 30 Dec 2009)
Log Message: ----------- mGAR v2-checkpkg: Setting the default RUNPATH even when the field is not there in the binary; added a test for it. Reporting the list of binaries with missing sonames. Modified Paths: -------------- csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/checkpkg-libs.py csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/checkpkg.py csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/checkpkg_test.py Added Paths: ----------- csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/testdata/dump_output_2.py Modified: csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/checkpkg-libs.py =================================================================== --- csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/checkpkg-libs.py 2009-12-30 16:58:09 UTC (rev 7795) +++ csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/checkpkg-libs.py 2009-12-30 19:20:41 UTC (rev 7796) @@ -26,7 +26,7 @@ stdout, stderr = isalist_proc.communicate() ret = isalist_proc.wait() if ret: - logging.error("Calling isalist has failed.") + logging.error("Calling isalist has failed.") isalist = re.split(r"\s+", stdout.strip()) return isalist @@ -80,10 +80,16 @@ ret = dump_proc.wait() binary_data = checkpkg.ParseDumpOutput(stdout) needed_sonames_by_binary[binary_base_name] = binary_data - if checkpkg.SONAME in binary_data: - filenames_by_soname[binary_data[checkpkg.SONAME]] = binary_base_name + if checkpkg.SONAME not in binary_data: + logging.info("The %s shared library doesn't provide a SONAME.", + binary_base_name) + # The shared library doesn't tell its SONAME. We're guessing it's the + # same as the base file name. + binary_data[checkpkg.SONAME] = binary_base_name + filenames_by_soname[binary_data[checkpkg.SONAME]] = binary_base_name + isalist = GetIsalist() - + # Building indexes by soname to simplify further processing # These are indexes "by soname". (needed_sonames, @@ -116,6 +122,7 @@ # TODO: Rewrite this using cheetah templates if needed_sonames: print "Analysis of sonames needed by the package set:" + binaries_with_missing_sonames = set([]) for soname in needed_sonames: logging.debug("Analyzing: %s", soname) if soname in filenames_by_soname: @@ -126,17 +133,24 @@ repr(pkgs_by_filename[soname]))) filename_lines = " ".join(sorted(binaries_by_soname[soname])) for line in textwrap.wrap(filename_lines, 70): - print " ", line + print " ", line else: print ("%s is required by %s, but we don't know what provides it." % (soname, binaries_by_soname[soname])) + for binary in binaries_by_soname[soname]: + binaries_with_missing_sonames.add(binary) if soname in checkpkg.ALLOWED_ORPHAN_SONAMES: - print "However, it's a whitelisted soname." + print "However, it's a whitelisted soname." else: errors.append( checkpkg.Error("%s is required by %s, but " "we don't know what provides it." % (soname, binaries_by_soname[soname]))) + if binaries_with_missing_sonames: + print "The following are binaries with missing sonames:" + binary_lines = " ".join(sorted(binaries_with_missing_sonames)) + for line in textwrap.wrap(binary_lines, 70): + print " ", line print dependent_pkgs = {} @@ -194,7 +208,7 @@ print "! ", soname msg_printed = True if not msg_printed: - print "+ Dependencies of %s look good." % pkgname + print "+ Dependencies of %s look good." % pkgname print if errors: Modified: csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/checkpkg.py =================================================================== --- csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/checkpkg.py 2009-12-30 16:58:09 UTC (rev 7795) +++ csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/checkpkg.py 2009-12-30 19:20:41 UTC (rev 7796) @@ -399,11 +399,11 @@ binary_data[NEEDED_SONAMES].append(fields[2]) elif fields[1] == "RUNPATH": binary_data[RUNPATH].extend(fields[2].split(":")) - # Adding the default runtime path search option. - binary_data[RUNPATH].append("/usr/lib/$ISALIST") - binary_data[RUNPATH].append("/usr/lib") - binary_data[RUNPATH].append("/lib/$ISALIST") - binary_data[RUNPATH].append("/lib") elif fields[1] == "SONAME": binary_data[SONAME] = fields[2] + # Adding the default runtime path search option. + binary_data[RUNPATH].append("/usr/lib/$ISALIST") + binary_data[RUNPATH].append("/usr/lib") + binary_data[RUNPATH].append("/lib/$ISALIST") + binary_data[RUNPATH].append("/lib") return binary_data Modified: csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/checkpkg_test.py =================================================================== --- csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/checkpkg_test.py 2009-12-30 16:58:09 UTC (rev 7795) +++ csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/checkpkg_test.py 2009-12-30 19:20:41 UTC (rev 7796) @@ -11,6 +11,7 @@ import testdata.checkpkg_test_data_CSWlibpq_84 as d5 import testdata.checkpkg_test_data_CSWmysql5client_8x as d6 import testdata.dump_output_1 as dump_1 +import testdata.dump_output_2 as dump_2 """A set of unit tests for the library checking code. @@ -410,9 +411,11 @@ '/opt/csw/mysql5/lib/$ISALIST', '/opt/csw/mysql5/lib', '/opt/csw/mysql5/lib/$ISALIST/mysql', - # These two are artificially appended + # These four are artificially appended '/usr/lib/$ISALIST', - '/usr/lib'], + '/usr/lib', + '/lib/$ISALIST', + '/lib'], 'needed sonames': ['librt.so.1', 'libresolv.so.2', 'libc.so.1', @@ -424,6 +427,12 @@ self.assertEqual(expected, checkpkg.ParseDumpOutput(dump_1.DATA_DUMP_OUTPUT)) + def test_2(self): + expected_runpath = ['/usr/lib/$ISALIST', '/usr/lib', '/lib/$ISALIST', '/lib'] + self.assertEqual( + expected_runpath, + checkpkg.ParseDumpOutput(dump_2.DATA_DUMP_OUTPUT)["runpath"]) + if __name__ == '__main__': unittest.main() Added: csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/testdata/dump_output_2.py =================================================================== --- csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/testdata/dump_output_2.py (rev 0) +++ csw/mgar/gar/v2-checkpkg/bin/checkpkg.d/testdata/dump_output_2.py 2009-12-30 19:20:41 UTC (rev 7796) @@ -0,0 +1,34 @@ +DATA_DUMP_OUTPUT = """work/pkgroot/opt/oracle/product/10.2.0/Db_1/opmn/bin/ons: + + **** DYNAMIC SECTION INFORMATION **** +.dynamic: +[INDEX] Tag Value +[1] NEEDED libpthread.so.1 +[2] NEEDED librt.so.1 +[3] NEEDED libnsl.so.1 +[4] NEEDED libxnet.so.1 +[5] NEEDED libdl.so.1 +[6] NEEDED libm.so.1 +[7] NEEDED libc.so.1 +[8] INIT 0xd6088 +[9] FINI 0xd6094 +[10] HASH 0x100e8 +[11] STRTAB 0x19274 +[12] STRSZ 0x4a24 +[13] SYMTAB 0x13174 +[14] SYMENT 0x10 +[15] CHECKSUM 0x20d5 +[16] VERNEED 0x1dc98 +[17] VERNEEDNUM 0x6 +[18] PLTSZ 0x7f8 +[19] PLTREL 0x7 +[20] JMPREL 0x1dd9c +[21] RELA 0x1dd78 +[22] RELASZ 0x81c +[23] RELAENT 0xc +[24] DEBUG 0 +[25] FEATURE_1 PARINIT +[26] FLAGS 0 +[27] FLAGS_1 0 +[28] PLTGOT 0xf6f64 +""" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ devel mailing list devel@lists.opencsw.org https://lists.opencsw.org/mailman/listinfo/devel