summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meta/recipes-devtools/build-compare/build-compare_git.bb27
-rw-r--r--meta/recipes-devtools/build-compare/files/Ignore-DWARF-sections.patch40
-rw-r--r--meta/recipes-devtools/build-compare/files/Rename-rpm-check.sh-to-pkg-diff.sh.patch1596
3 files changed, 1663 insertions, 0 deletions
diff --git a/meta/recipes-devtools/build-compare/build-compare_git.bb b/meta/recipes-devtools/build-compare/build-compare_git.bb
new file mode 100644
index 0000000000..418aee0d5e
--- /dev/null
+++ b/meta/recipes-devtools/build-compare/build-compare_git.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Build Result Compare Script"
+DESCRIPTION = "This package contains scripts to find out if the build result\
+differs to a former build."
+HOMEPAGE = "https://github.com/openSUSE/build-compare"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "git://github.com/openSUSE/build-compare.git"
+SRC_URI += "file://Rename-rpm-check.sh-to-pkg-diff.sh.patch;striplevel=1"
+SRC_URI += "file://Ignore-DWARF-sections.patch;striplevel=1"
+PATCHTOOL = "git"
+
+SRCREV = "c5352c054c6ef15735da31b76d6d88620f4aff0a"
+
+S = "${WORKDIR}/git"
+
+BBCLASSEXTEND += "native nativesdk"
+
+do_install() {
+ install -d ${D}/${bindir}
+ install -m 755 functions.sh ${D}/${bindir}
+ install -m 755 pkg-diff.sh ${D}/${bindir}
+ install -m 755 same-build-result.sh ${D}/${bindir}
+ install -m 755 srpm-check.sh ${D}/${bindir}
+}
+
+RDEPENDS_${PN} += "bash"
diff --git a/meta/recipes-devtools/build-compare/files/Ignore-DWARF-sections.patch b/meta/recipes-devtools/build-compare/files/Ignore-DWARF-sections.patch
new file mode 100644
index 0000000000..7dda1acbf2
--- /dev/null
+++ b/meta/recipes-devtools/build-compare/files/Ignore-DWARF-sections.patch
@@ -0,0 +1,40 @@
+From 015715694eadd714b903f30ade876e0738d44974 Mon Sep 17 00:00:00 2001
+From: Randy Witt <randy.e.witt@linux.intel.com>
+Date: Mon, 5 Jan 2015 15:09:20 -0800
+Subject: [PATCH] Ignore DWARF sections.
+
+Assume for now that we don't care about the DWARF sections due to path
+differences. However, in the case the tool is ran on a "debug" package
+it will most likely falsely say the packages have no differences.
+
+Upstream-Status: Inappropriate [other]
+
+The package difference tool is correctly labelling the packages as different
+when the DWARF sections don't match due to paths. The paths in the debug info
+should actually be made to be the same using compile flags or some other
+mechanism.
+
+However, to make the tool more useful to Yocto until the work can be done
+to ensure identical paths in debug sections, this patch is being applied.
+
+Signed-off-by: Randy Witt <randy.e.witt@linux.intel.com>
+---
+ pkg-diff.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pkg-diff.sh b/pkg-diff.sh
+index 56035c1..0f1fa76 100755
+--- a/pkg-diff.sh
++++ b/pkg-diff.sh
+@@ -658,7 +658,7 @@ check_single_file()
+ 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" " ")"
++ sections="$(objdump -s new/$file | grep "Contents of section .*:" | sed -r "s,.* (.*):,\1,g" | grep -v -e "\.build-id" -e "\.gnu_debuglink" -e "\.debug_abbrev" -e "\.debug_aranges" -e "\.debug_frame" -e "\.debug_info" -e "\.debug_line" -e "\.debug_loc" -e "\.debug_macinfo" -e "\.debug_pubnames" -e "\.debug_pubtypes" -e "\.debug_ranges" -e "\.debug_str" | 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
+--
+1.9.3
+
diff --git a/meta/recipes-devtools/build-compare/files/Rename-rpm-check.sh-to-pkg-diff.sh.patch b/meta/recipes-devtools/build-compare/files/Rename-rpm-check.sh-to-pkg-diff.sh.patch
new file mode 100644
index 0000000000..3e1e679a9c
--- /dev/null
+++ b/meta/recipes-devtools/build-compare/files/Rename-rpm-check.sh-to-pkg-diff.sh.patch
@@ -0,0 +1,1596 @@
+From f5db896b7f49b56dad0d51c9bdb3d4c9525edab2 Mon Sep 17 00:00:00 2001
+From: Randy Witt <randy.e.witt@linux.intel.com>
+Date: Mon, 5 Jan 2015 15:58:35 -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>
+---
+ build-compare.spec | 2 +-
+ pkg-diff.sh | 765 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ rpm-check.sh | 765 ---------------------------------------------------
+ same-build-result.sh | 4 +-
+ 4 files changed, 768 insertions(+), 768 deletions(-)
+ create mode 100755 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 100755
+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 "Tue Aug 31 2010" "Version 1.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 "Tue Aug 31 2010" "Version 1.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>Mon Sep 20 19:02:43 +0000 2010</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>Mon Sep 20 19:02:43 +0000 2010</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 56035c1..0000000
+--- a/rpm-check.sh
++++ /dev/null
+@@ -1,765 +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 "Tue Aug 31 2010" "Version 1.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 "Tue Aug 31 2010" "Version 1.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>Mon Sep 20 19:02:43 +0000 2010</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>Mon Sep 20 19:02:43 +0000 2010</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/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.9.3
+