1
0
forked from brl/citadel
citadel/poky/meta/recipes-devtools/build-compare/files/Rename-rpm-check.sh-to-pkg-diff.sh.patch

1600 lines
53 KiB
Diff
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From 4de3df5a1b361cd09a081f0e0bdb94cbf684ed48 Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Thu, 19 Feb 2015 00:34:47 -0800
Subject: [PATCH] Rename rpm-check.sh to pkg-diff.sh.
The tool now accepts package input other than rpm, so change the name
which could be misleading.
Upstream-Status: Submitted [https://github.com/openSUSE/build-compare/pulls]
Signed-off-by: Randy Witt <randy.e.witt@linux.intel.com>
Updated for rpm-check.sh.
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
build-compare.spec | 2 +-
pkg-diff.sh | 765 ++++++++++++++++++++++++++++++++++++++++++++++++++
rpm-check.sh | 764 -------------------------------------------------
same-build-result.sh | 4 +-
4 files changed, 768 insertions(+), 767 deletions(-)
create mode 100644 pkg-diff.sh
delete mode 100755 rpm-check.sh
diff --git a/build-compare.spec b/build-compare.spec
index 14a97e9..5f47ca1 100644
--- a/build-compare.spec
+++ b/build-compare.spec
@@ -25,7 +25,7 @@ Version: 2015.02.10
Release: 0
Source1: COPYING
Source2: same-build-result.sh
-Source3: rpm-check.sh
+Source3: pkg-diff.sh
Source4: functions.sh
Source5: srpm-check.sh
BuildRoot: %{_tmppath}/%{name}-%{version}-build
diff --git a/pkg-diff.sh b/pkg-diff.sh
new file mode 100644
index 0000000..56035c1
--- /dev/null
+++ b/pkg-diff.sh
@@ -0,0 +1,765 @@
+#! /bin/bash
+#
+# Copyright (c) 2009, 2010, 2011, 2012 SUSE Linux Product GmbH, Germany.
+# Licensed under GPL v2, see COPYING file for details.
+#
+# Written by Michael Matz and Stephan Coolo
+# Enhanced by Andreas Jaeger
+
+FUNCTIONS=${0%/*}/functions.sh
+
+check_all=
+case $1 in
+ -a | --check-all)
+ check_all=1
+ shift
+esac
+
+if test "$#" != 2; then
+ echo "usage: $0 [-a|--check-all] old.rpm new.rpm"
+ exit 1
+fi
+
+self_script=$(cd $(dirname $0); echo $(pwd)/$(basename $0))
+
+source $FUNCTIONS
+
+oldpkg=`readlink -f $1`
+newpkg=`readlink -f $2`
+rename_script=`mktemp`
+
+if test ! -f "$oldpkg"; then
+ echo "can't open $1"
+ exit 1
+fi
+
+if test ! -f "$newpkg"; then
+ echo "can't open $2"
+ exit 1
+fi
+
+#usage unjar <file>
+function unjar()
+{
+ local file
+ file=$1
+
+ if [[ $(type -p fastjar) ]]; then
+ UNJAR=fastjar
+ elif [[ $(type -p jar) ]]; then
+ UNJAR=jar
+ elif [[ $(type -p unzip) ]]; then
+ UNJAR=unzip
+ else
+ echo "ERROR: jar, fastjar, or unzip is not installed (trying file $file)"
+ exit 1
+ fi
+
+ case $UNJAR in
+ jar|fastjar)
+ # echo jar -xf $file
+ ${UNJAR} -xf $file
+ ;;
+ unzip)
+ unzip -oqq $file
+ ;;
+ esac
+}
+
+# list files in directory
+#usage unjar_l <file>
+function unjar_l()
+{
+ local file
+ file=$1
+
+ if [[ $(type -p fastjar) ]]; then
+ UNJAR=fastjar
+ elif [[ $(type -p jar) ]]; then
+ UNJAR=jar
+ elif [[ $(type -p unzip) ]]; then
+ UNJAR=unzip
+ else
+ echo "ERROR: jar, fastjar, or unzip is not installed (trying file $file)"
+ exit 1
+ fi
+
+ case $UNJAR in
+ jar|fastjar)
+ ${UNJAR} -tf $file
+ ;;
+ unzip)
+ unzip -l $file
+ ;;
+ esac
+}
+
+filter_disasm()
+{
+ sed -e 's/^ *[0-9a-f]\+://' -e 's/\$0x[0-9a-f]\+/$something/' -e 's/callq *[0-9a-f]\+/callq /' -e 's/# *[0-9a-f]\+/# /' -e 's/\(0x\)\?[0-9a-f]\+(/offset(/' -e 's/[0-9a-f]\+ </</' -e 's/^<\(.*\)>:/\1:/' -e 's/<\(.*\)+0x[0-9a-f]\+>/<\1 + ofs>/'
+}
+
+echo "Comparing `basename $oldpkg` to `basename $newpkg`"
+
+case $oldpkg in
+ *.rpm)
+ cmp_spec $rename_script $oldpkg $newpkg
+ RES=$?
+ case $RES in
+ 0)
+ echo "RPM meta information is identical"
+ if test -z "$check_all"; then
+ exit 0
+ fi
+ ;;
+ 1)
+ echo "RPM meta information is different"
+ if test -z "$check_all"; then
+ exit 1
+ fi
+ ;;
+ 2)
+ echo "RPM file checksum differs."
+ RES=0
+ ;;
+ *)
+ echo "Wrong exit code!"
+ exit 1
+ ;;
+ esac
+ ;;
+esac
+
+file1=`mktemp`
+file2=`mktemp`
+
+dir=`mktemp -d`
+echo "Extracting packages"
+unpackage $oldpkg $dir/old
+unpackage $newpkg $dir/new
+
+# files is set in cmp_spec for rpms, so if RES is empty we should assume
+# it wasn't an rpm and pick all files for comparison.
+if [ -z $RES ]; then
+ oldfiles=`cd $dir/old; find . -type f`
+ newfiles=`cd $dir/new; find . -type f`
+
+ files=`echo -e "$oldfiles\n$newfiles" | sort -u`
+fi
+
+cd $dir
+bash $rename_script
+
+dfile=`mktemp`
+
+diff_two_files()
+{
+ if ! cmp -s old/$file new/$file; then
+ echo "$file differs ($ftype)"
+ hexdump -C old/$file > $file1
+ hexdump -C new/$file > $file2
+ diff -u $file1 $file2 | head -n 200
+ return 1
+ fi
+ return 0
+}
+
+trim_man_first_line()
+{
+ # Handles the first line if it is like:
+ #.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
+ #.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.43.3.
+ local f=$1
+ sed -i -e '1{
+ s|^\.\\"[[:blank:]]\+Automatically[[:blank:]]generated[[:blank:]]by[[:blank:]]Pod::Man[[:blank:]].*|.\\" Overly verbose Pod::Man|
+ s|^\.\\"[[:blank:]]\+DO[[:blank:]]NOT[[:blank:]]MODIFY[[:blank:]]THIS[[:blank:]]FILE![[:blank:]]\+It[[:blank:]]was[[:blank:]]generated[[:blank:]]by[[:blank:]]help2man[[:blank:]].*|.\\" Overly verbose help2man|
+ }' $f
+}
+
+trim_man_TH()
+{
+ # Handles lines like:
+ # .TH debhelper 7 "2010-02-27" "7.4.15" "Debhelper"
+ # .TH DIRMNGR-CLIENT 1 2010-02-27 "Dirmngr 1.0.3" "GNU Privacy Guard"
+ # .TH ccmake 1 "March 06, 2010" "ccmake 2.8.1-rc3"
+ # .TH QEMU-IMG 1 "2010-03-14" " " " "
+ # .TH kdecmake 1 "May 07, 2010" "cmake 2.8.1"
+ # .TH "appender.h" 3 "12 May 2010" "Version 1.2.1" "log4c" \" -*- nroff -*-
+ # .TH"appender.h"3"TueAug312010""Version1.2.1""log4c"\"-*-nroff-*-
+ # .TH "OFFLINEIMAP" "1" "11 May 2010" "John Goerzen" "OfflineIMAP Manual"
+ # .TH gv 3guile "13 May 2010"
+ #.TH "GIT\-ARCHIMPORT" "1" "09/13/2010" "Git 1\&.7\&.1" "Git Manual"
+ # .TH LDIRECTORD 8 "2010-10-20" "perl v5.12.2" "User Contributed Perl Documentation"
+ # .TH ccmake 1 "February 05, 2012" "ccmake 2.8.7"
+ # .TH"appender.h"3"TueAug312010""Version1.2.1""log4c"\"-*-nroff-*-
+ # .TH ARCH "1" "September 2010" "GNU coreutils 8.5" "User Commands"
+ # .TH "GCM-CALIBRATE" "1" "03 February 2012" "" ""
+ #.TH Locale::Po4a::Xml.pm 3pm "2015-01-30" "Po4a Tools" "Po4a Tools"
+ local f=$1
+ # (.TH quoted section) (quoted_date)(*)
+ sed -i -e 's|^\([[:blank:]]*\.TH[[:blank:]]\+"[^"]\+"[[:blank:]]\+[^[:blank:]]\+\)[[:blank:]]\+\("[^"]\+"\)\([[:blank:]]\+.*\)\?|\1 "qq2000-01-01"\3|' $f
+ # (.TH unquoted section) (quoted_date)(*)
+ sed -i -e 's|^\([[:blank:]]*\.TH[[:blank:]]\+[^"][^[:blank:]]\+[[:blank:]]\+[^[:blank:]]\+\)[[:blank:]]\+\("[^"]\+"\)\([[:blank:]]\+.*\)\?|\1 "uq2000-02-02"\3|' $f
+ # (.TH quoted section) (unquoted_date)(*)
+ sed -i -e 's|^\([[:blank:]]*\.TH[[:blank:]]\+"[^"]\+"[[:blank:]]\+[^[:blank:]]\+\)[[:blank:]]\+\([^"][^[:blank:]]\+\)\([[:blank:]]\+.*\)\?|\1 qu2000-03-03\3|' $f
+ # (.TH unquoted section) (unquoted_date)(*)
+ sed -i -e 's|^\([[:blank:]]*\.TH[[:blank:]]\+[^"][^[:blank:]]\+[[:blank:]]\+[^[:blank:]]\+\)[[:blank:]]\+\([^"][^[:blank:]]\+\)\([[:blank:]]\+.*\)\?|\1 uu2000-04-04\3|' $f
+}
+
+strip_numbered_anchors()
+{
+ # Remove numbered anchors on Docbook / HTML files.
+ # This should be save since we remove them from old and new files.
+ # A trailing </a> or </div> tag will stay also on both files.
+ for f in old/$file new/$file; do
+ sed -i -e 's%<[ ]*a[ ]\+name[^<]*[0-9]\+[^<]*%%g' \
+ -e 's%<[ ]*a[ ]\+href[^<]*#[^<]*[0-9]\+[^<]*%%g' \
+ -e 's%<[^<]*id="ftn\.[^<]*[0-9]\+[^<]*%%g' $f
+ done
+}
+
+
+check_compressed_file()
+{
+ local file=$1
+ local ext=$2
+ local tmpdir=`mktemp -d`
+ local ftype
+ local ret=0
+ echo "$ext file with odd filename: $file"
+ if test -n "$tmpdir"; then
+ mkdir $tmpdir/{old,new}
+ cp --parents --dereference old/$file $tmpdir/
+ cp --parents --dereference new/$file $tmpdir/
+ if pushd $tmpdir > /dev/null ; then
+ case "$ext" in
+ bz2)
+ mv old/$file{,.bz2}
+ mv new/$file{,.bz2}
+ bzip2 -d old/$file.bz2
+ bzip2 -d new/$file.bz2
+ ;;
+ gzip)
+ mv old/$file{,.gz}
+ mv new/$file{,.gz}
+ gzip -d old/$file.gz
+ gzip -d new/$file.gz
+ ;;
+ xz)
+ mv old/$file{,.xz}
+ mv new/$file{,.xz}
+ xz -d old/$file.xz
+ xz -d new/$file.xz
+ ;;
+ esac
+ ftype=`/usr/bin/file old/$file | sed 's@^[^:]\+:[[:blank:]]*@@'`
+ case $ftype in
+ POSIX\ tar\ archive)
+ echo "$ext content is: $ftype"
+ mv old/$file{,.tar}
+ mv new/$file{,.tar}
+ if ! check_single_file ${file}.tar; then
+ ret=1
+ fi
+ ;;
+ ASCII\ cpio\ archive\ *)
+ echo "$ext content is: $ftype"
+ mv old/$file{,.cpio}
+ mv new/$file{,.cpio}
+ if ! check_single_file ${file}.cpio; then
+ ret=1
+ fi
+ ;;
+ *)
+ echo "unhandled $ext content: $ftype"
+ if ! diff_two_files; then
+ ret=1
+ fi
+ ;;
+ esac
+ popd > /dev/null
+ fi
+ rm -rf "$tmpdir"
+ fi
+ return $ret
+}
+
+check_single_file()
+{
+ local file="$1"
+ case $file in
+ *.spec)
+ sed -i -e "s,Release:.*$release1,Release: @RELEASE@," old/$file
+ sed -i -e "s,Release:.*$release2,Release: @RELEASE@," new/$file
+ ;;
+ *.exe.mdb|*.dll.mdb)
+ # Just debug information, we can skip them
+ echo "$file skipped as debug file."
+ return 0
+ ;;
+ *.a)
+ flist=`ar t new/$file`
+ pwd=$PWD
+ fdir=`dirname $file`
+ cd old/$fdir
+ ar x `basename $file`
+ cd $pwd/new/$fdir
+ ar x `basename $file`
+ cd $pwd
+ for f in $flist; do
+ if ! check_single_file $fdir/$f; then
+ return 1
+ fi
+ done
+ return 0
+ ;;
+ *.cpio)
+ flist=`cpio --quiet --list --force-local < "new/$file"`
+ pwd=$PWD
+ fdir=$file.extract.$PPID.$$
+ mkdir old/$fdir new/$fdir
+ cd old/$fdir
+ cpio --quiet --extract --force-local < "../${file##*/}"
+ cd $pwd/new/$fdir
+ cpio --quiet --extract --force-local < "../${file##*/}"
+ cd $pwd
+ local ret=0
+ for f in $flist; do
+ if ! check_single_file $fdir/$f; then
+ ret=1
+ if test -z "$check_all"; then
+ break
+ fi
+ fi
+ done
+ rm -rf old/$fdir new/$fdir
+ return $ret
+ ;;
+ *.tar|*.tar.bz2|*.tar.gz|*.tgz|*.tbz2)
+ flist=`tar tf new/$file`
+ pwd=$PWD
+ fdir=`dirname $file`
+ cd old/$fdir
+ tar xf `basename $file`
+ cd $pwd/new/$fdir
+ tar xf `basename $file`
+ cd $pwd
+ local ret=0
+ for f in $flist; do
+ if ! check_single_file $fdir/$f; then
+ ret=1
+ if test -z "$check_all"; then
+ break
+ fi
+ fi
+ done
+ return $ret
+ ;;
+ *.zip|*.jar|*.war)
+ cd old
+ unjar_l ./$file |sort > flist
+ # 10-05-2010 14:39
+ sed -i -e "s, [0-9][0-9]-[0-9][0-9]-[0-9]\+ [0-9][0-9]:[0-9][0-9] , date ," flist
+ # 2012-02-03 07:59
+ sed -i -e "s, 20[0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9] , date ," flist
+ cd ../new
+ unjar_l ./$file |sort> flist
+ sed -i -e "s, [0-9][0-9]-[0-9][0-9]-[0-9]\+ [0-9][0-9]:[0-9][0-9] , date ,; " flist
+ sed -i -e "s, 20[0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9] , date ," flist
+ cd ..
+ if ! cmp -s old/flist new/flist; then
+ echo "$file has different file list"
+ diff -u old/flist new/flist
+ return 1
+ fi
+ flist=`grep date new/flist | sed -e 's,.* date ,,'`
+ pwd=$PWD
+ fdir=`dirname $file`
+ cd old/$fdir
+ unjar `basename $file`
+ cd $pwd/new/$fdir
+ unjar `basename $file`
+ cd $pwd
+ local ret=0
+ for f in $flist; do
+ if test -f new/$fdir/$f && ! check_single_file $fdir/$f; then
+ ret=1
+ if test -z "$check_all"; then
+ break
+ fi
+ fi
+ done
+ return $ret;;
+ *.pyc|*.pyo)
+ perl -e "open fh, '+<', 'old/$file'; seek fh, 4, SEEK_SET; print fh '0000';"
+ perl -e "open fh, '+<', 'new/$file'; seek fh, 4, SEEK_SET; print fh '0000';"
+ ;;
+ *.bz2)
+ bunzip2 -c old/$file > old/${file/.bz2/}
+ bunzip2 -c new/$file > new/${file/.bz2/}
+ check_single_file ${file/.bz2/}
+ return $?
+ ;;
+ *.gz)
+ gunzip -c old/$file > old/${file/.gz/}
+ gunzip -c new/$file > new/${file/.gz/}
+ check_single_file ${file/.gz/}
+ return $?
+ ;;
+ *.rpm)
+ $self_script -a old/$file new/$file
+ return $?
+ ;;
+ *png)
+ # Try to remove timestamps, only if convert from ImageMagick is installed
+ if [[ $(type -p convert) ]]; then
+ convert old/$file +set date:create +set date:modify old/${file/.png/_n.png}
+ convert old/$file +set date:create +set date:modify new/${file/.png/_n.png}
+ if ! cmp -s old/${file/.png/_n.png} new/${file/.png/_n.png}; then
+ echo "$file differs ($ftype)"
+ hexdump -C old/${file/.png/_n.png} > $file1
+ hexdump -C new/${file/.png/_n.png} > $file2
+ diff -u $file1 $file2 | head -n 20
+ return 1
+ fi
+ return 0
+ fi
+ ;;
+ /usr/share/locale/*/LC_MESSAGES/*.mo|/usr/share/locale-bundle/*/LC_MESSAGES/*.mo)
+ for f in old/$file new/$file; do
+ sed -i -e "s,POT-Creation-Date: ....-..-.. ..:..+....,POT-Creation-Date: 1970-01-01 00:00+0000," $f
+ done
+ ;;
+ /usr/share/doc/packages/*/*.html|\
+ /usr/share/doc/kde/HTML/*/*/*.html|/usr/share/doc/*/html/*.html)
+ for f in old/$file new/$file; do
+ # texi2html output, e.g. in kvm, indent, qemu
+ sed -i -e "s|^<!-- Created on .*, 20.. by texi2html .\...|<!-- Created on August 7, 2009 by texi2html 1.82|" $f
+ sed -i -e 's|^ *This document was generated by <em>Autobuild</em> on <em>.*, 20..</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html .\...</em></a>.$| This document was generated by <em>Autobuild</em> on <em>August 7, 2009</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.|' $f
+ # doxygen docu, e.g. in libssh and log4c
+ sed -i -e 's|Generated on ... ... [0-9]* [0-9]*:[0-9][0-9]:[0-9][0-9] 20[0-9][0-9] for |Generated on Mon May 10 20:45:00 2010 for |' $f
+ # Generated on Sat Aug 14 2010 16:49:48 for libssh
+ sed -i -e 's|Generated on ... ... [0-9]* 20[0-9][0-9] [0-9]*:[0-9][0-9]:[0-9][0-9] for |Generated on Mon May 10 20:45:00 2010 for |' $f
+ done
+ strip_numbered_anchors
+ ;;
+ /usr/share/javadoc/*.html |\
+ /usr/share/javadoc/*/*.html|/usr/share/javadoc/*/*/*.html)
+ strip_numbered_anchors
+ # There are more timestamps in html, so far we handle only some primitive versions.
+ for f in old/$file new/$file; do
+ # Javadoc:
+ # <head>
+ # <!-- Generated by javadoc (version 1.7.0_75) on Tue Feb 03 02:20:12 GMT 2015 -->
+ # <!-- Generated by javadoc on Tue Feb 03 00:02:48 GMT 2015 -->
+ # <meta name="date" content="2015-02-03">
+ # </head>
+ sed -i -e '
+ /^<head>/{
+ : next
+ n
+ /^<\/head>/{
+ b end_head
+ }
+ s/^\(<!-- Generated by javadoc\) \((\(build\|version\) [0-9._]\+) on ... ... .. ..:..:.. \(GMT\|UTC\) ....\) \(-->\)/\1 some-date-removed-by-build-compare \5/
+ t next
+ s/^\(<!-- Generated by javadoc\) \(on ... ... .. ..:..:.. \(GMT\|UTC\) ....\) \(-->\)/\1 some-date-removed-by-build-compare \3/
+ t next
+ s/^<meta name="date" content="[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}">/<meta name="date" content="some-date-removed-by-build-compare">/
+ b next
+ }
+ : end_head
+ ' $f
+ # Gjdoc HtmlDoclet:
+ sed -i -e 's%Generated by Gjdoc HtmlDoclet [0-9,.]*, part of <a href="http://www.gnu.org/software/classpath/cp-tools/" title="" target="_top">GNU Classpath Tools</a>, on .*, 20.. [0-9]*:..:.. \(a\|p\)\.m\. GMT.%Generated by Gjdoc.%' $f
+ sed -i -e 's%<!DOCTYPE html PUBLIC "-//gnu.org///DTD XHTML 1.1 plus Target 1.0//EN"\(.*\)GNU Classpath Tools</a>, on [A-Z][a-z]* [0-9]*, 20?? [0-9]*:??:?? \(a|p\)\.m\. GMT.</p>%<!DOCTYPE html PUBLIC "-//gnu.org///DTD XHTML 1.1 plus Target 1.0//EN"\1GNU Classpath Tools</a>, on January 1, 2009 0:00:00 a.m. GMT.</p>%' $f
+ sed -i -e 's%<!DOCTYPE html PUBLIC "-//gnu.org///DTD\(.*GNU Classpath Tools</a>\), on [a-zA-Z]* [0-9][0-9], 20.. [0-9]*:..:.. \(a\|p\)\.m\. GMT.</p>%<!DOCTYPE html PUBLIC "-//gnu.org///DTD\1,on May 1, 2010 1:11:42 p.m. GMT.</p>%' $f
+ # deprecated-list is randomly ordered, sort it for comparison
+ case $f in
+ */deprecated-list.html)
+ sort -o $f $f
+ ;;
+ esac
+ done
+ ;;
+ /usr/share/javadoc/gjdoc.properties |\
+ /usr/share/javadoc/*/gjdoc.properties)
+ for f in old/$file new/$file; do
+ sed -i -e 's|^#[A-Z][a-z]\{2\} [A-Z][a-z]\{2\} [0-9]\{2\} ..:..:.. GMT 20..$|#Fri Jan 01 11:27:36 GMT 2009|' $f
+ done
+ ;;
+ */fonts.scale|*/fonts.dir|*/encodings.dir)
+ for f in old/$file new/$file; do
+ # sort files before comparing
+ sort -o $f $f
+ done
+ ;;
+ /var/adm/perl-modules/*)
+ for f in old/$file new/$file; do
+ sed -i -e 's|^=head2 ... ... .. ..:..:.. ....: C<Module>|=head2 Wed Jul 1 00:00:00 2009: C<Module>|' $f
+ done
+ ;;
+ /usr/share/man/man3/*3pm)
+ for f in old/$file new/$file; do
+ sed -i -e 's| 3 "20..-..-.." "perl v5....." "User Contributed Perl Documentation"$| 3 "2009-01-01" "perl v5.10.0" "User Contributed Perl Documentation"|' $f
+ trim_man_TH $f
+ trim_man_first_line $f
+ done
+ ;;
+ /usr/share/man/*/man*|/usr/share/man/man*|/usr/lib/texmf/doc/man/*/*)
+
+ for f in old/$file new/$file; do
+ trim_man_TH $f
+ trim_man_first_line $f
+ # generated by docbook xml:
+ #.\" Date: 09/13/2010
+ sed -i -e 's|Date: [0-1][0-9]/[0-9][0-9]/201[0-9]|Date: 09/13/2010|' $f
+ done
+ ;;
+ *.elc)
+ # emacs lisp files
+ for f in old/$file new/$file; do
+ sed -i -e 's|Compiled by abuild@.* on ... ... .. ..:..:.. 20..$|compiled by abuild@buildhost on Wed Jul 01 00:00:00 2009|' $f
+ done
+ ;;
+ /var/lib/texmf/web2c/*/*fmt |\
+ /var/lib/texmf/web2c/metafont/*.base|\
+ /var/lib/texmf/web2c/metapost/*.mem)
+ # binary dump of TeX and Metafont formats, we can ignore them for good
+ echo "difference in $file ignored."
+ return 0
+ ;;
+ */libtool)
+ for f in old/$file new/$file; do
+ sed -i -e 's|^# Libtool was configured on host [A-Za-z0-9]*:$|# Libtool was configured on host x42:|' $f
+ done
+ ;;
+ /etc/mail/*cf|/etc/sendmail.cf)
+ # from sendmail package
+ for f in old/$file new/$file; do
+ # - ##### built by abuild@build33 on Thu May 6 11:21:17 UTC 2010
+ sed -i -e 's|built by abuild@[a-z0-9]* on ... ... [0-9]* [0-9]*:[0-9][0-9]:[0-9][0-9] .* 20[0-9][0-9]|built by abuild@build42 on Thu May 6 11:21:17 UTC 2010|' $f
+ done
+ ;;
+ /usr/share/doc/kde/HTML/*/*/index.cache|/usr/share/doc/kde/HTML/*/*/*/index.cache|\
+ /usr/share/gtk-doc/html/*/*.html|/usr/share/gtk-doc/html/*/*.devhelp2)
+ # various kde and gtk packages
+ strip_numbered_anchors
+ ;;
+ */created.rid)
+ # ruby documentation
+ # file just contains a timestamp and nothing else, so ignore it
+ echo "Ignore $file"
+ return 0
+ ;;
+ */rdoc/files/*.html)
+ # ruby documentation
+ # <td>MonSep2019:02:43+00002010</td>
+ for f in old/$file new/$file; do
+ sed -i -e 's%<td>[A-Z][a-z][a-z] [A-Z][a-z][a-z] [0-9]\+ [0-9]\+:[0-9]\+:[0-9]\+ +0000 201[0-9]</td>%<td>MonSep2019:02:43+00002010</td>%g' $f
+ done
+ strip_numbered_anchors
+ ;;
+ */Linux*Env.Set.sh)
+ # LibreOffice files, contains:
+ # Generated on: Mon Apr 18 13:19:22 UTC 2011
+ for f in old/$file new/$file; do
+ sed -i -e 's%^# Generated on:.*UTC 201[0-9] *$%# Generated on: Sometime%g' $f
+ done
+ ;;
+ /usr/lib/libreoffice/solver/inc/*/deliver.log)
+ # LibreOffice log file
+ echo "Ignore $file"
+ return 0
+ ;;
+ /var/adm/update-messages/*|/var/adm/update-scripts/*)
+ # encode version-release inside
+ oldfn=`echo "$file"|sed -e s/-$release2/-$release1/;`
+
+ # fetchmsttfonts embeds the release number in the update shell script.
+ echo sed -i -e "s/-$release1/-$release2/g;" "old/$oldfn"
+ sed -i -e "s/-$release1/-$release2/g;" "old/$oldfn"
+
+ if ! diff -u old/$oldfn new/$file; then
+ echo "$oldfn is not same as $file"
+ return 1
+ fi
+ echo "$file and $oldfn are same"
+ return 0
+ ;;
+ *.ps)
+ for f in "old/$file" "new/$file"; do
+ sed -i -e '
+ /^%%CreationDate:[[:blank:]]/d
+ /^%%Creator:[[:blank:]]groff[[:blank:]]version[[:blank:]]/d
+ /^%DVIPSSource:[[:blank:]]/d
+ ' "$f"
+ done
+ ;;
+ *pdf)
+ # PDF files contain a unique ID, remove it
+ # Format of the ID is:
+ # /ID [<9ACE247A70CF9BEAFEE15E116259BD6D> <9ACE247A70CF9BEAFEE15E116259BD6D>]
+ # with optional spaces. pdftex creates also:
+ # /CreationDate (D:20120103083206Z)
+ # /ModDate (D:20120103083206Z)
+ # and possibly XML metadata as well
+ for f in "old/$file" "new/$file"; do
+ sed -i \
+ '/obj/,/endobj/{
+ s%/ID \?\[ \?<[^>]\+> \?<[^>]\+> \?\]%/IDrandom%g;
+ s%/CreationDate \?(D:[^)]*)%/CreationDate (D: XXX)%g;
+ s%/ModDate \?(D:[^)]*)%/ModDate (D: XXX)%g;
+ s%<pdf:CreationDate>[^<]*</pdf:CreationDate>%<pdf:CreationDate>XXX</pdf:CreationDate>%g;
+ s%<pdf:ModDate>[^<]*</pdf:ModDate>%<pdf:ModDate>XXX</pdf:ModDate>%g;
+ s%<xap:CreateDate>[^<]*</xap:CreateDate>%<xap:CreateDate>XXX</xap:CreateDate>%g;
+ s%<xap:ModifyDate>[^<]*</xap:ModifyDate>%<xap:ModifyDate>XXX</xap:ModifyDate>%g;
+ s%<xap:MetadataDate>[^<]*</xap:MetadataDate>%<xap:MetadataDate>XXX</xap:MetadataDate>%g;
+ }' "$f"
+ done
+ ;;
+ esac
+
+ ftype=`/usr/bin/file old/$file | sed 's@^[^:]\+:[[:blank:]]*@@'`
+ case $ftype in
+ PE32\ executable*Mono\/\.Net\ assembly*)
+ echo "PE32 Mono/.Net assembly: $file"
+ if [ -x /usr/bin/monodis ] ; then
+ monodis old/$file 2>/dev/null|sed -e 's/GUID = {.*}/GUID = { 42 }/;'> ${file1}
+ monodis new/$file 2>/dev/null|sed -e 's/GUID = {.*}/GUID = { 42 }/;'> ${file2}
+ if ! cmp -s ${file1} ${file2}; then
+ echo "$file differs ($ftype)"
+ diff -u ${file1} ${file2}
+ return 1
+ fi
+ else
+ echo "Cannot compare, no monodis installed"
+ return 1
+ fi
+ ;;
+ ELF*executable*|ELF*[LM]SB\ shared\ object*)
+ objdump -d --no-show-raw-insn old/$file | filter_disasm > $file1
+ if ! test -s $file1; then
+ # objdump has no idea how to handle it
+ if ! diff_two_files; then
+ ret=1
+ break
+ fi
+ fi
+ elfdiff=
+ sed -i -e "s,old/,," $file1
+ objdump -d --no-show-raw-insn new/$file | filter_disasm > $file2
+ sed -i -e "s,new/,," $file2
+ if ! diff -u $file1 $file2 > $dfile; then
+ echo "$file differs in assembler output"
+ head -n 200 $dfile
+ elfdiff="1"
+ fi
+ echo "" >$file1
+ echo "" >$file2
+ # Don't compare .build-id and .gnu_debuglink sections
+ sections="$(objdump -s new/$file | grep "Contents of section .*:" | sed -r "s,.* (.*):,\1,g" | grep -v -e "\.build-id" -e "\.gnu_debuglink" | tr "\n" " ")"
+ for section in $sections; do
+ objdump -s -j $section old/$file | sed "s,^old/,," > $file1
+ objdump -s -j $section new/$file | sed "s,^new/,," > $file2
+ if ! diff -u $file1 $file2 > $dfile; then
+ echo "$file differs in ELF section $section"
+ head -n 200 $dfile
+ elfdiff="1"
+ fi
+ done
+ if test -z "$elfdiff"; then
+ echo "$file: only difference was in build-id or gnu_debuglink, GOOD."
+ return 0
+ fi
+ return 1
+ ;;
+ *ASCII*|*text*)
+ if ! cmp -s old/$file new/$file; then
+ echo "$file differs ($ftype)"
+ diff -u old/$file new/$file | head -n 200
+ return 1
+ fi
+ ;;
+ directory|setuid,\ directory|sticky,\ directory)
+ # tar might package directories - ignore them here
+ return 0
+ ;;
+ bzip2\ compressed\ data*)
+ if ! check_compressed_file "$file" "bz2"; then
+ return 1
+ fi
+ ;;
+ gzip\ compressed\ data*)
+ if ! check_compressed_file "$file" "gzip"; then
+ return 1
+ fi
+ ;;
+ XZ\ compressed\ data*)
+ if ! check_compressed_file "$file" "xz"; then
+ return 1
+ fi
+ ;;
+ POSIX\ tar\ archive)
+ mv old/$file{,.tar}
+ mv new/$file{,.tar}
+ if ! check_single_file ${file}.tar; then
+ return 1
+ fi
+ ;;
+ cpio\ archive)
+ mv old/$file{,.cpio}
+ mv new/$file{,.cpio}
+ if ! check_single_file ${file}.cpio; then
+ return 1
+ fi
+ ;;
+ symbolic\ link\ to\ *)
+ readlink "old/$file" > $file1
+ readlink "new/$file" > $file2
+ if ! diff -u $file1 $file2; then
+ echo "symlink target for $file differs"
+ return 1
+ fi
+ ;;
+ *)
+ if ! diff_two_files; then
+ return 1
+ fi
+ ;;
+ esac
+ return 0
+}
+
+# We need /proc mounted for some tests, so check that it's mounted and
+# complain if not.
+PROC_MOUNTED=0
+if [ ! -d /proc/self/ ]; then
+ echo "/proc is not mounted"
+ mount -orw -n -tproc none /proc
+ PROC_MOUNTED=1
+fi
+
+# preserve cmp_spec result for check_all runs
+ret=$RES
+for file in $files; do
+ if ! check_single_file $file; then
+ ret=1
+ if test -z "$check_all"; then
+ break
+ fi
+ fi
+done
+
+if [ "$PROC_MOUNTED" -eq "1" ]; then
+ echo "Unmounting proc"
+ umount /proc
+fi
+
+rm $file1 $file2 $dfile $rename_script
+rm -rf $dir
+if test "$ret" = 0; then
+ echo "Package content is identical"
+fi
+exit $ret
+# vim: tw=666 ts=2 et
diff --git a/rpm-check.sh b/rpm-check.sh
deleted file mode 100755
index dd47642..0000000
--- a/rpm-check.sh
+++ /dev/null
@@ -1,764 +0,0 @@
-#! /bin/bash
-#
-# Copyright (c) 2009, 2010, 2011, 2012 SUSE Linux Product GmbH, Germany.
-# Licensed under GPL v2, see COPYING file for details.
-#
-# Written by Michael Matz and Stephan Coolo
-# Enhanced by Andreas Jaeger
-
-FUNCTIONS=${0%/*}/functions.sh
-
-check_all=
-case $1 in
- -a | --check-all)
- check_all=1
- shift
-esac
-
-if test "$#" != 2; then
- echo "usage: $0 [-a|--check-all] old.rpm new.rpm"
- exit 1
-fi
-
-self_script=$(cd $(dirname $0); echo $(pwd)/$(basename $0))
-
-source $FUNCTIONS
-
-oldpkg=`readlink -f $1`
-newpkg=`readlink -f $2`
-rename_script=`mktemp`
-
-if test ! -f "$oldpkg"; then
- echo "can't open $1"
- exit 1
-fi
-
-if test ! -f "$newpkg"; then
- echo "can't open $2"
- exit 1
-fi
-
-#usage unjar <file>
-function unjar()
-{
- local file
- file=$1
-
- if [[ $(type -p fastjar) ]]; then
- UNJAR=fastjar
- elif [[ $(type -p jar) ]]; then
- UNJAR=jar
- elif [[ $(type -p unzip) ]]; then
- UNJAR=unzip
- else
- echo "ERROR: jar, fastjar, or unzip is not installed (trying file $file)"
- exit 1
- fi
-
- case $UNJAR in
- jar|fastjar)
- # echo jar -xf $file
- ${UNJAR} -xf $file
- ;;
- unzip)
- unzip -oqq $file
- ;;
- esac
-}
-
-# list files in directory
-#usage unjar_l <file>
-function unjar_l()
-{
- local file
- file=$1
-
- if [[ $(type -p fastjar) ]]; then
- UNJAR=fastjar
- elif [[ $(type -p jar) ]]; then
- UNJAR=jar
- elif [[ $(type -p unzip) ]]; then
- UNJAR=unzip
- else
- echo "ERROR: jar, fastjar, or unzip is not installed (trying file $file)"
- exit 1
- fi
-
- case $UNJAR in
- jar|fastjar)
- ${UNJAR} -tf $file
- ;;
- unzip)
- unzip -l $file
- ;;
- esac
-}
-
-filter_disasm()
-{
- sed -e 's/^ *[0-9a-f]\+://' -e 's/\$0x[0-9a-f]\+/$something/' -e 's/callq *[0-9a-f]\+/callq /' -e 's/# *[0-9a-f]\+/# /' -e 's/\(0x\)\?[0-9a-f]\+(/offset(/' -e 's/[0-9a-f]\+ </</' -e 's/^<\(.*\)>:/\1:/' -e 's/<\(.*\)+0x[0-9a-f]\+>/<\1 + ofs>/'
-}
-
-echo "Comparing `basename $oldpkg` to `basename $newpkg`"
-
-case $oldpkg in
- *.rpm)
- cmp_spec $rename_script $oldpkg $newpkg
- RES=$?
- case $RES in
- 0)
- echo "RPM meta information is identical"
- if test -z "$check_all"; then
- exit 0
- fi
- ;;
- 1)
- echo "RPM meta information is different"
- if test -z "$check_all"; then
- exit 1
- fi
- ;;
- 2)
- echo "RPM file checksum differs."
- RES=0
- ;;
- *)
- echo "Wrong exit code!"
- exit 1
- ;;
- esac
- ;;
-esac
-
-file1=`mktemp`
-file2=`mktemp`
-
-dir=`mktemp -d`
-echo "Extracting packages"
-unpackage $oldpkg $dir/old
-unpackage $newpkg $dir/new
-
-# files is set in cmp_spec for rpms, so if RES is empty we should assume
-# it wasn't an rpm and pick all files for comparison.
-if [ -z $RES ]; then
- oldfiles=`cd $dir/old; find . -type f`
- newfiles=`cd $dir/new; find . -type f`
-
- files=`echo -e "$oldfiles\n$newfiles" | sort -u`
-fi
-
-cd $dir
-bash $rename_script
-
-dfile=`mktemp`
-
-diff_two_files()
-{
- if ! cmp -s old/$file new/$file; then
- echo "$file differs ($ftype)"
- hexdump -C old/$file > $file1
- hexdump -C new/$file > $file2
- diff -u $file1 $file2 | head -n 200
- return 1
- fi
- return 0
-}
-
-trim_man_first_line()
-{
- # Handles the first line if it is like:
- #.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
- #.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.43.3.
- local f=$1
- sed -i -e '1{
- s|^\.\\"[[:blank:]]\+Automatically[[:blank:]]generated[[:blank:]]by[[:blank:]]Pod::Man[[:blank:]].*|.\\" Overly verbose Pod::Man|
- s|^\.\\"[[:blank:]]\+DO[[:blank:]]NOT[[:blank:]]MODIFY[[:blank:]]THIS[[:blank:]]FILE![[:blank:]]\+It[[:blank:]]was[[:blank:]]generated[[:blank:]]by[[:blank:]]help2man[[:blank:]].*|.\\" Overly verbose help2man|
- }' $f
-}
-
-trim_man_TH()
-{
- # Handles lines like:
- # .TH debhelper 7 "2010-02-27" "7.4.15" "Debhelper"
- # .TH DIRMNGR-CLIENT 1 2010-02-27 "Dirmngr 1.0.3" "GNU Privacy Guard"
- # .TH ccmake 1 "March 06, 2010" "ccmake 2.8.1-rc3"
- # .TH QEMU-IMG 1 "2010-03-14" " " " "
- # .TH kdecmake 1 "May 07, 2010" "cmake 2.8.1"
- # .TH "appender.h" 3 "12 May 2010" "Version 1.2.1" "log4c" \" -*- nroff -*-
- # .TH"appender.h"3"TueAug312010""Version1.2.1""log4c"\"-*-nroff-*-
- # .TH "OFFLINEIMAP" "1" "11 May 2010" "John Goerzen" "OfflineIMAP Manual"
- # .TH gv 3guile "13 May 2010"
- #.TH "GIT\-ARCHIMPORT" "1" "09/13/2010" "Git 1\&.7\&.1" "Git Manual"
- # .TH LDIRECTORD 8 "2010-10-20" "perl v5.12.2" "User Contributed Perl Documentation"
- # .TH ccmake 1 "February 05, 2012" "ccmake 2.8.7"
- # .TH"appender.h"3"TueAug312010""Version1.2.1""log4c"\"-*-nroff-*-
- # .TH ARCH "1" "September 2010" "GNU coreutils 8.5" "User Commands"
- # .TH "GCM-CALIBRATE" "1" "03 February 2012" "" ""
- #.TH Locale::Po4a::Xml.pm 3pm "2015-01-30" "Po4a Tools" "Po4a Tools"
- local f=$1
- # (.TH quoted section) (quoted_date)(*)
- sed -i -e 's|^\([[:blank:]]*\.TH[[:blank:]]\+"[^"]\+"[[:blank:]]\+[^[:blank:]]\+\)[[:blank:]]\+\("[^"]\+"\)\([[:blank:]]\+.*\)\?|\1 "qq2000-01-01"\3|' $f
- # (.TH unquoted section) (quoted_date)(*)
- sed -i -e 's|^\([[:blank:]]*\.TH[[:blank:]]\+[^"][^[:blank:]]\+[[:blank:]]\+[^[:blank:]]\+\)[[:blank:]]\+\("[^"]\+"\)\([[:blank:]]\+.*\)\?|\1 "uq2000-02-02"\3|' $f
- # (.TH quoted section) (unquoted_date)(*)
- sed -i -e 's|^\([[:blank:]]*\.TH[[:blank:]]\+"[^"]\+"[[:blank:]]\+[^[:blank:]]\+\)[[:blank:]]\+\([^"][^[:blank:]]\+\)\([[:blank:]]\+.*\)\?|\1 qu2000-03-03\3|' $f
- # (.TH unquoted section) (unquoted_date)(*)
- sed -i -e 's|^\([[:blank:]]*\.TH[[:blank:]]\+[^"][^[:blank:]]\+[[:blank:]]\+[^[:blank:]]\+\)[[:blank:]]\+\([^"][^[:blank:]]\+\)\([[:blank:]]\+.*\)\?|\1 uu2000-04-04\3|' $f
-}
-
-strip_numbered_anchors()
-{
- # Remove numbered anchors on Docbook / HTML files.
- # This should be save since we remove them from old and new files.
- # A trailing </a> or </div> tag will stay also on both files.
- for f in old/$file new/$file; do
- sed -i -e 's%<[ ]*a[ ]\+name[^<]*[0-9]\+[^<]*%%g' \
- -e 's%<[ ]*a[ ]\+href[^<]*#[^<]*[0-9]\+[^<]*%%g' \
- -e 's%<[^<]*id="ftn\.[^<]*[0-9]\+[^<]*%%g' $f
- done
-}
-
-
-check_compressed_file()
-{
- local file=$1
- local ext=$2
- local tmpdir=`mktemp -d`
- local ftype
- local ret=0
- echo "$ext file with odd filename: $file"
- if test -n "$tmpdir"; then
- mkdir $tmpdir/{old,new}
- cp --parents --dereference old/$file $tmpdir/
- cp --parents --dereference new/$file $tmpdir/
- if pushd $tmpdir > /dev/null ; then
- case "$ext" in
- bz2)
- mv old/$file{,.bz2}
- mv new/$file{,.bz2}
- bzip2 -d old/$file.bz2
- bzip2 -d new/$file.bz2
- ;;
- gzip)
- mv old/$file{,.gz}
- mv new/$file{,.gz}
- gzip -d old/$file.gz
- gzip -d new/$file.gz
- ;;
- xz)
- mv old/$file{,.xz}
- mv new/$file{,.xz}
- xz -d old/$file.xz
- xz -d new/$file.xz
- ;;
- esac
- ftype=`/usr/bin/file old/$file | sed 's@^[^:]\+:[[:blank:]]*@@'`
- case $ftype in
- POSIX\ tar\ archive)
- echo "$ext content is: $ftype"
- mv old/$file{,.tar}
- mv new/$file{,.tar}
- if ! check_single_file ${file}.tar; then
- ret=1
- fi
- ;;
- ASCII\ cpio\ archive\ *)
- echo "$ext content is: $ftype"
- mv old/$file{,.cpio}
- mv new/$file{,.cpio}
- if ! check_single_file ${file}.cpio; then
- ret=1
- fi
- ;;
- *)
- echo "unhandled $ext content: $ftype"
- if ! diff_two_files; then
- ret=1
- fi
- ;;
- esac
- popd > /dev/null
- fi
- rm -rf "$tmpdir"
- fi
- return $ret
-}
-
-check_single_file()
-{
- local file="$1"
- case $file in
- *.spec)
- sed -i -e "s,Release:.*$release1,Release: @RELEASE@," old/$file
- sed -i -e "s,Release:.*$release2,Release: @RELEASE@," new/$file
- ;;
- *.exe.mdb|*.dll.mdb)
- # Just debug information, we can skip them
- echo "$file skipped as debug file."
- return 0
- ;;
- *.a)
- flist=`ar t new/$file`
- pwd=$PWD
- fdir=`dirname $file`
- cd old/$fdir
- ar x `basename $file`
- cd $pwd/new/$fdir
- ar x `basename $file`
- cd $pwd
- for f in $flist; do
- if ! check_single_file $fdir/$f; then
- return 1
- fi
- done
- return 0
- ;;
- *.cpio)
- flist=`cpio --quiet --list --force-local < "new/$file"`
- pwd=$PWD
- fdir=$file.extract.$PPID.$$
- mkdir old/$fdir new/$fdir
- cd old/$fdir
- cpio --quiet --extract --force-local < "../${file##*/}"
- cd $pwd/new/$fdir
- cpio --quiet --extract --force-local < "../${file##*/}"
- cd $pwd
- local ret=0
- for f in $flist; do
- if ! check_single_file $fdir/$f; then
- ret=1
- if test -z "$check_all"; then
- break
- fi
- fi
- done
- rm -rf old/$fdir new/$fdir
- return $ret
- ;;
- *.tar|*.tar.bz2|*.tar.gz|*.tgz|*.tbz2)
- flist=`tar tf new/$file`
- pwd=$PWD
- fdir=`dirname $file`
- cd old/$fdir
- tar xf `basename $file`
- cd $pwd/new/$fdir
- tar xf `basename $file`
- cd $pwd
- local ret=0
- for f in $flist; do
- if ! check_single_file $fdir/$f; then
- ret=1
- if test -z "$check_all"; then
- break
- fi
- fi
- done
- return $ret
- ;;
- *.zip|*.jar|*.war)
- cd old
- unjar_l ./$file |sort > flist
- # 10-05-2010 14:39
- sed -i -e "s, [0-9][0-9]-[0-9][0-9]-[0-9]\+ [0-9][0-9]:[0-9][0-9] , date ," flist
- # 2012-02-03 07:59
- sed -i -e "s, 20[0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9] , date ," flist
- cd ../new
- unjar_l ./$file |sort> flist
- sed -i -e "s, [0-9][0-9]-[0-9][0-9]-[0-9]\+ [0-9][0-9]:[0-9][0-9] , date ,; " flist
- sed -i -e "s, 20[0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9] , date ," flist
- cd ..
- if ! cmp -s old/flist new/flist; then
- echo "$file has different file list"
- diff -u old/flist new/flist
- return 1
- fi
- flist=`grep date new/flist | sed -e 's,.* date ,,'`
- pwd=$PWD
- fdir=`dirname $file`
- cd old/$fdir
- unjar `basename $file`
- cd $pwd/new/$fdir
- unjar `basename $file`
- cd $pwd
- local ret=0
- for f in $flist; do
- if test -f new/$fdir/$f && ! check_single_file $fdir/$f; then
- ret=1
- if test -z "$check_all"; then
- break
- fi
- fi
- done
- return $ret;;
- *.pyc|*.pyo)
- perl -e "open fh, '+<', 'old/$file'; seek fh, 4, SEEK_SET; print fh '0000';"
- perl -e "open fh, '+<', 'new/$file'; seek fh, 4, SEEK_SET; print fh '0000';"
- ;;
- *.bz2)
- bunzip2 -c old/$file > old/${file/.bz2/}
- bunzip2 -c new/$file > new/${file/.bz2/}
- check_single_file ${file/.bz2/}
- return $?
- ;;
- *.gz)
- gunzip -c old/$file > old/${file/.gz/}
- gunzip -c new/$file > new/${file/.gz/}
- check_single_file ${file/.gz/}
- return $?
- ;;
- *.rpm)
- $self_script -a old/$file new/$file
- return $?
- ;;
- *png)
- # Try to remove timestamps, only if convert from ImageMagick is installed
- if [[ $(type -p convert) ]]; then
- convert old/$file +set date:create +set date:modify old/${file/.png/_n.png}
- convert old/$file +set date:create +set date:modify new/${file/.png/_n.png}
- if ! cmp -s old/${file/.png/_n.png} new/${file/.png/_n.png}; then
- echo "$file differs ($ftype)"
- hexdump -C old/${file/.png/_n.png} > $file1
- hexdump -C new/${file/.png/_n.png} > $file2
- diff -u $file1 $file2 | head -n 20
- return 1
- fi
- return 0
- fi
- ;;
- /usr/share/locale/*/LC_MESSAGES/*.mo|/usr/share/locale-bundle/*/LC_MESSAGES/*.mo)
- for f in old/$file new/$file; do
- sed -i -e "s,POT-Creation-Date: ....-..-.. ..:..+....,POT-Creation-Date: 1970-01-01 00:00+0000," $f
- done
- ;;
- /usr/share/doc/packages/*/*.html|\
- /usr/share/doc/kde/HTML/*/*/*.html|/usr/share/doc/*/html/*.html)
- for f in old/$file new/$file; do
- # texi2html output, e.g. in kvm, indent, qemu
- sed -i -e "s|^<!-- Created on .*, 20.. by texi2html .\...|<!-- Created on August 7, 2009 by texi2html 1.82|" $f
- sed -i -e 's|^ *This document was generated by <em>Autobuild</em> on <em>.*, 20..</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html .\...</em></a>.$| This document was generated by <em>Autobuild</em> on <em>August 7, 2009</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.|' $f
- # doxygen docu, e.g. in libssh and log4c
- sed -i -e 's|Generated on ... ... [0-9]* [0-9]*:[0-9][0-9]:[0-9][0-9] 20[0-9][0-9] for |Generated on Mon May 10 20:45:00 2010 for |' $f
- # Generated on Sat Aug 14 2010 16:49:48 for libssh
- sed -i -e 's|Generated on ... ... [0-9]* 20[0-9][0-9] [0-9]*:[0-9][0-9]:[0-9][0-9] for |Generated on Mon May 10 20:45:00 2010 for |' $f
- done
- strip_numbered_anchors
- ;;
- /usr/share/javadoc/*.html |\
- /usr/share/javadoc/*/*.html|/usr/share/javadoc/*/*/*.html)
- strip_numbered_anchors
- # There are more timestamps in html, so far we handle only some primitive versions.
- for f in old/$file new/$file; do
- # Javadoc:
- # <head>
- # <!-- Generated by javadoc (version 1.7.0_75) on Tue Feb 03 02:20:12 GMT 2015 -->
- # <!-- Generated by javadoc on Tue Feb 03 00:02:48 GMT 2015 -->
- # <meta name="date" content="2015-02-03">
- # </head>
- sed -i -e '
- /^<head>/{
- : next
- n
- /^<\/head>/{
- b end_head
- }
- s/^\(<!-- Generated by javadoc\) \((\(build\|version\) [0-9._]\+) on ... ... .. ..:..:.. \(GMT\|UTC\) ....\) \(-->\)/\1 some-date-removed-by-build-compare \5/
- t next
- s/^\(<!-- Generated by javadoc\) \(on ... ... .. ..:..:.. \(GMT\|UTC\) ....\) \(-->\)/\1 some-date-removed-by-build-compare \3/
- t next
- s/^<meta name="date" content="[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}">/<meta name="date" content="some-date-removed-by-build-compare">/
- b next
- }
- : end_head
- ' $f
- # Gjdoc HtmlDoclet:
- sed -i -e 's%Generated by Gjdoc HtmlDoclet [0-9,.]*, part of <a href="http://www.gnu.org/software/classpath/cp-tools/" title="" target="_top">GNU Classpath Tools</a>, on .*, 20.. [0-9]*:..:.. \(a\|p\)\.m\. GMT.%Generated by Gjdoc.%' $f
- sed -i -e 's%<!DOCTYPE html PUBLIC "-//gnu.org///DTD XHTML 1.1 plus Target 1.0//EN"\(.*\)GNU Classpath Tools</a>, on [A-Z][a-z]* [0-9]*, 20?? [0-9]*:??:?? \(a|p\)\.m\. GMT.</p>%<!DOCTYPE html PUBLIC "-//gnu.org///DTD XHTML 1.1 plus Target 1.0//EN"\1GNU Classpath Tools</a>, on January 1, 2009 0:00:00 a.m. GMT.</p>%' $f
- sed -i -e 's%<!DOCTYPE html PUBLIC "-//gnu.org///DTD\(.*GNU Classpath Tools</a>\), on [a-zA-Z]* [0-9][0-9], 20.. [0-9]*:..:.. \(a\|p\)\.m\. GMT.</p>%<!DOCTYPE html PUBLIC "-//gnu.org///DTD\1,on May 1, 2010 1:11:42 p.m. GMT.</p>%' $f
- # deprecated-list is randomly ordered, sort it for comparison
- case $f in
- */deprecated-list.html)
- sort -o $f $f
- ;;
- esac
- done
- ;;
- /usr/share/javadoc/gjdoc.properties |\
- /usr/share/javadoc/*/gjdoc.properties)
- for f in old/$file new/$file; do
- sed -i -e 's|^#[A-Z][a-z]\{2\} [A-Z][a-z]\{2\} [0-9]\{2\} ..:..:.. GMT 20..$|#Fri Jan 01 11:27:36 GMT 2009|' $f
- done
- ;;
- */fonts.scale|*/fonts.dir|*/encodings.dir)
- for f in old/$file new/$file; do
- # sort files before comparing
- sort -o $f $f
- done
- ;;
- /var/adm/perl-modules/*)
- for f in old/$file new/$file; do
- sed -i -e 's|^=head2 ... ... .. ..:..:.. ....: C<Module>|=head2 Wed Jul 1 00:00:00 2009: C<Module>|' $f
- done
- ;;
- /usr/share/man/man3/*3pm)
- for f in old/$file new/$file; do
- sed -i -e 's| 3 "20..-..-.." "perl v5....." "User Contributed Perl Documentation"$| 3 "2009-01-01" "perl v5.10.0" "User Contributed Perl Documentation"|' $f
- trim_man_TH $f
- trim_man_first_line $f
- done
- ;;
- /usr/share/man/*/man*|/usr/share/man/man*|/usr/lib/texmf/doc/man/*/*)
-
- for f in old/$file new/$file; do
- trim_man_TH $f
- trim_man_first_line $f
- # generated by docbook xml:
- #.\" Date: 09/13/2010
- sed -i -e 's|Date: [0-1][0-9]/[0-9][0-9]/201[0-9]|Date: 09/13/2010|' $f
- done
- ;;
- *.elc)
- # emacs lisp files
- for f in old/$file new/$file; do
- sed -i -e 's|Compiled by abuild@.* on ... ... .. ..:..:.. 20..$|compiled by abuild@buildhost on Wed Jul 01 00:00:00 2009|' $f
- done
- ;;
- /var/lib/texmf/web2c/*/*fmt |\
- /var/lib/texmf/web2c/metafont/*.base|\
- /var/lib/texmf/web2c/metapost/*.mem)
- # binary dump of TeX and Metafont formats, we can ignore them for good
- echo "difference in $file ignored."
- return 0
- ;;
- */libtool)
- for f in old/$file new/$file; do
- sed -i -e 's|^# Libtool was configured on host [A-Za-z0-9]*:$|# Libtool was configured on host x42:|' $f
- done
- ;;
- /etc/mail/*cf|/etc/sendmail.cf)
- # from sendmail package
- for f in old/$file new/$file; do
- # - ##### built by abuild@build33 on Thu May 6 11:21:17 UTC 2010
- sed -i -e 's|built by abuild@[a-z0-9]* on ... ... [0-9]* [0-9]*:[0-9][0-9]:[0-9][0-9] .* 20[0-9][0-9]|built by abuild@build42 on Thu May 6 11:21:17 UTC 2010|' $f
- done
- ;;
- /usr/share/doc/kde/HTML/*/*/index.cache|/usr/share/doc/kde/HTML/*/*/*/index.cache|\
- /usr/share/gtk-doc/html/*/*.html|/usr/share/gtk-doc/html/*/*.devhelp2)
- # various kde and gtk packages
- strip_numbered_anchors
- ;;
- */created.rid)
- # ruby documentation
- # file just contains a timestamp and nothing else, so ignore it
- echo "Ignore $file"
- return 0
- ;;
- */rdoc/files/*.html)
- # ruby documentation
- # <td>MonSep2019:02:43+00002010</td>
- for f in old/$file new/$file; do
- sed -i -e 's%<td>[A-Z][a-z][a-z] [A-Z][a-z][a-z] [0-9]\+ [0-9]\+:[0-9]\+:[0-9]\+ +0000 201[0-9]</td>%<td>MonSep2019:02:43+00002010</td>%g' $f
- done
- strip_numbered_anchors
- ;;
- */Linux*Env.Set.sh)
- # LibreOffice files, contains:
- # Generated on: Mon Apr 18 13:19:22 UTC 2011
- for f in old/$file new/$file; do
- sed -i -e 's%^# Generated on:.*UTC 201[0-9] *$%# Generated on: Sometime%g' $f
- done
- ;;
- /usr/lib/libreoffice/solver/inc/*/deliver.log)
- # LibreOffice log file
- echo "Ignore $file"
- return 0
- ;;
- /var/adm/update-messages/*|/var/adm/update-scripts/*)
- # encode version-release inside
- oldfn=`echo "$file"|sed -e s/-$release2/-$release1/;`
-
- # fetchmsttfonts embeds the release number in the update shell script.
- echo sed -i -e "s/-$release1/-$release2/g;" "old/$oldfn"
- sed -i -e "s/-$release1/-$release2/g;" "old/$oldfn"
-
- if ! diff -u old/$oldfn new/$file; then
- echo "$oldfn is not same as $file"
- return 1
- fi
- echo "$file and $oldfn are same"
- return 0
- ;;
- *.ps)
- for f in "old/$file" "new/$file"; do
- sed -i -e '
- /^%%CreationDate:[[:blank:]]/d
- /^%%Creator:[[:blank:]]groff[[:blank:]]version[[:blank:]]/d
- ' "$f"
- done
- ;;
- *pdf)
- # PDF files contain a unique ID, remove it
- # Format of the ID is:
- # /ID [<9ACE247A70CF9BEAFEE15E116259BD6D> <9ACE247A70CF9BEAFEE15E116259BD6D>]
- # with optional spaces. pdftex creates also:
- # /CreationDate (D:20120103083206Z)
- # /ModDate (D:20120103083206Z)
- # and possibly XML metadata as well
- for f in "old/$file" "new/$file"; do
- sed -i \
- '/obj/,/endobj/{
- s%/ID \?\[ \?<[^>]\+> \?<[^>]\+> \?\]%/IDrandom%g;
- s%/CreationDate \?(D:[^)]*)%/CreationDate (D: XXX)%g;
- s%/ModDate \?(D:[^)]*)%/ModDate (D: XXX)%g;
- s%<pdf:CreationDate>[^<]*</pdf:CreationDate>%<pdf:CreationDate>XXX</pdf:CreationDate>%g;
- s%<pdf:ModDate>[^<]*</pdf:ModDate>%<pdf:ModDate>XXX</pdf:ModDate>%g;
- s%<xap:CreateDate>[^<]*</xap:CreateDate>%<xap:CreateDate>XXX</xap:CreateDate>%g;
- s%<xap:ModifyDate>[^<]*</xap:ModifyDate>%<xap:ModifyDate>XXX</xap:ModifyDate>%g;
- s%<xap:MetadataDate>[^<]*</xap:MetadataDate>%<xap:MetadataDate>XXX</xap:MetadataDate>%g;
- }' "$f"
- done
- ;;
- esac
-
- ftype=`/usr/bin/file old/$file | sed 's@^[^:]\+:[[:blank:]]*@@'`
- case $ftype in
- PE32\ executable*Mono\/\.Net\ assembly*)
- echo "PE32 Mono/.Net assembly: $file"
- if [ -x /usr/bin/monodis ] ; then
- monodis old/$file 2>/dev/null|sed -e 's/GUID = {.*}/GUID = { 42 }/;'> ${file1}
- monodis new/$file 2>/dev/null|sed -e 's/GUID = {.*}/GUID = { 42 }/;'> ${file2}
- if ! cmp -s ${file1} ${file2}; then
- echo "$file differs ($ftype)"
- diff -u ${file1} ${file2}
- return 1
- fi
- else
- echo "Cannot compare, no monodis installed"
- return 1
- fi
- ;;
- ELF*executable*|ELF*[LM]SB\ shared\ object*)
- objdump -d --no-show-raw-insn old/$file | filter_disasm > $file1
- if ! test -s $file1; then
- # objdump has no idea how to handle it
- if ! diff_two_files; then
- ret=1
- break
- fi
- fi
- elfdiff=
- sed -i -e "s,old/,," $file1
- objdump -d --no-show-raw-insn new/$file | filter_disasm > $file2
- sed -i -e "s,new/,," $file2
- if ! diff -u $file1 $file2 > $dfile; then
- echo "$file differs in assembler output"
- head -n 200 $dfile
- elfdiff="1"
- fi
- echo "" >$file1
- echo "" >$file2
- # Don't compare .build-id and .gnu_debuglink sections
- sections="$(objdump -s new/$file | grep "Contents of section .*:" | sed -r "s,.* (.*):,\1,g" | grep -v -e "\.build-id" -e "\.gnu_debuglink" | tr "\n" " ")"
- for section in $sections; do
- objdump -s -j $section old/$file | sed "s,^old/,," > $file1
- objdump -s -j $section new/$file | sed "s,^new/,," > $file2
- if ! diff -u $file1 $file2 > $dfile; then
- echo "$file differs in ELF section $section"
- head -n 200 $dfile
- elfdiff="1"
- fi
- done
- if test -z "$elfdiff"; then
- echo "$file: only difference was in build-id or gnu_debuglink, GOOD."
- return 0
- fi
- return 1
- ;;
- *ASCII*|*text*)
- if ! cmp -s old/$file new/$file; then
- echo "$file differs ($ftype)"
- diff -u old/$file new/$file | head -n 200
- return 1
- fi
- ;;
- directory|setuid,\ directory|sticky,\ directory)
- # tar might package directories - ignore them here
- return 0
- ;;
- bzip2\ compressed\ data*)
- if ! check_compressed_file "$file" "bz2"; then
- return 1
- fi
- ;;
- gzip\ compressed\ data*)
- if ! check_compressed_file "$file" "gzip"; then
- return 1
- fi
- ;;
- XZ\ compressed\ data*)
- if ! check_compressed_file "$file" "xz"; then
- return 1
- fi
- ;;
- POSIX\ tar\ archive)
- mv old/$file{,.tar}
- mv new/$file{,.tar}
- if ! check_single_file ${file}.tar; then
- return 1
- fi
- ;;
- cpio\ archive)
- mv old/$file{,.cpio}
- mv new/$file{,.cpio}
- if ! check_single_file ${file}.cpio; then
- return 1
- fi
- ;;
- symbolic\ link\ to\ *)
- readlink "old/$file" > $file1
- readlink "new/$file" > $file2
- if ! diff -u $file1 $file2; then
- echo "symlink target for $file differs"
- return 1
- fi
- ;;
- *)
- if ! diff_two_files; then
- return 1
- fi
- ;;
- esac
- return 0
-}
-
-# We need /proc mounted for some tests, so check that it's mounted and
-# complain if not.
-PROC_MOUNTED=0
-if [ ! -d /proc/self/ ]; then
- echo "/proc is not mounted"
- mount -orw -n -tproc none /proc
- PROC_MOUNTED=1
-fi
-
-# preserve cmp_spec result for check_all runs
-ret=$RES
-for file in $files; do
- if ! check_single_file $file; then
- ret=1
- if test -z "$check_all"; then
- break
- fi
- fi
-done
-
-if [ "$PROC_MOUNTED" -eq "1" ]; then
- echo "Unmounting proc"
- umount /proc
-fi
-
-rm $file1 $file2 $dfile $rename_script
-rm -rf $dir
-if test "$ret" = 0; then
- echo "Package content is identical"
-fi
-exit $ret
-# vim: tw=666 ts=2 et
diff --git a/same-build-result.sh b/same-build-result.sh
index c8907e2..7e9bd4f 100644
--- a/same-build-result.sh
+++ b/same-build-result.sh
@@ -7,11 +7,11 @@
# Enhanced by Andreas Jaeger <aj@suse.de>
#
# The script decides if the new build differes from the former one,
-# using rpm-check.sh.
+# using pkg-diff.sh.
# The script is called as part of the build process as:
# /usr/lib/build/same-build-result.sh /.build.oldpackages /usr/src/packages/RPMS /usr/src/packages/SRPMS
-CMPSCRIPT=${0%/*}/rpm-check.sh
+CMPSCRIPT=${0%/*}/pkg-diff.sh
SCMPSCRIPT=${0%/*}/srpm-check.sh
check_all=1
--
1.7.9.5