#!/bin/bash

test -e $BUILD_ROOT/skipped-install-cross && {
    echo 'skipping pre/post install checks, install was skipped'
    exit 0
}

echo "... testing for pre/postinstall scripts that are not idempotent"
TOPDIR=/usr/src/packages
test -d $BUILD_ROOT/.build.packages && TOPDIR=/.build.packages

SCRIPT_ARG=-e

RPM="chroot $BUILD_ROOT rpm --nodigest --nosignature"

# rpm needs /proc mounted - the build script handles that. just verify it did
test -d $BUILD_ROOT/proc/sys || { echo "proc is not mounted"; exit 1; }

export YAST_IS_RUNNING="instsys"
for i in $(find $BUILD_ROOT$TOPDIR/RPMS -type f -name "*.rpm" | sort) ; do
    pre_p=$($RPM -qp --qf '%{PREINPROG}' ${i#$BUILD_ROOT})
    post_p=$($RPM -qp --qf '%{POSTINPROG}' ${i#$BUILD_ROOT})
    preun_p=$($RPM -qp --qf '%{PREUNPROG}' ${i#$BUILD_ROOT})
    postun_p=$($RPM -qp --qf '%{POSTUNPROG}' ${i#$BUILD_ROOT})
    pre=$($RPM -qp --qf '%{PREIN}' ${i#$BUILD_ROOT})
    post=$($RPM -qp --qf '%{POSTIN}' ${i#$BUILD_ROOT})
    preun=$($RPM -qp --qf '%{PREUN}' ${i#$BUILD_ROOT})
    postun=$($RPM -qp --qf '%{POSTUN}' ${i#$BUILD_ROOT})
    test "$pre" = "(none)" -a "$post" = "(none)" -a "$preun" = "(none)" -a "$postun" = "(none)" && continue

    $RPM -Vp --nodeps ${i#$BUILD_ROOT} > $BUILD_ROOT/.build_patchrpmcheck1
    if test "$pre" != "(none)" -a "$pre_p" != "<lua>" ; then
	echo "$pre" > $BUILD_ROOT/.build_patchrpmcheck_scr
	chroot $BUILD_ROOT sh $SCRIPT_ARG /.build_patchrpmcheck_scr 2 || {
	    echo "preinstall script of ${i##*/} failed"
	    touch $BUILD_ROOT/not-ready
	    exit 1
	}
    fi
    if test "$post" != "(none)" -a "$post_p" != "<lua>" ; then
	echo "$post" > $BUILD_ROOT/.build_patchrpmcheck_scr
	chroot $BUILD_ROOT sh $SCRIPT_ARG /.build_patchrpmcheck_scr 2 || {
	    echo "postinstall script of ${i##*/} failed"
	    touch $BUILD_ROOT/not-ready
	    exit 1
	}
    fi
    if test "$preun" != "(none)" -a "$preun_p" != "<lua>" ; then
	echo "$preun" > $BUILD_ROOT/.build_patchrpmcheck_scr
	chroot $BUILD_ROOT sh $SCRIPT_ARG /.build_patchrpmcheck_scr 1 || {
	    echo "preuninstall script of ${i##*/} failed"
	    touch $BUILD_ROOT/not-ready
	    exit 1
	}
    fi
    if test "$postun" != "(none)" -a "$postun_p" != "<lua>" ; then
	echo "$postun" > $BUILD_ROOT/.build_patchrpmcheck_scr
	chroot $BUILD_ROOT sh $SCRIPT_ARG /.build_patchrpmcheck_scr 1 || {
	    echo "postuninstall script of ${i##*/} failed"
	    touch $BUILD_ROOT/not-ready
	    exit 1
	}
    fi
    $RPM -Vp --nodeps ${i#$BUILD_ROOT} > $BUILD_ROOT/.build_patchrpmcheck2
    if ! cmp -s $BUILD_ROOT/.build_patchrpmcheck1 $BUILD_ROOT/.build_patchrpmcheck2; then
	echo "pre/postinstall/uninstall script of ${i##*/} modifies filelist!"
	echo "filelist diff:"
	diff -u0 $BUILD_ROOT/.build_patchrpmcheck1 $BUILD_ROOT/.build_patchrpmcheck2
	touch $BUILD_ROOT/not-ready
	exit 1
    fi
    rm -f $BUILD_ROOT/.build_patchrpmcheck1 $BUILD_ROOT/.build_patchrpmcheck2 $BUILD_ROOT/.build_patchrpmcheck_scr
done

exit 0
