#!/bin/bash
# check-self-build-packages.sh (testing)
# 	$Id: check-self-build-packages.sh,v 1.4 2010/04/10 09:21:53 munepi Exp $	
# 
# This script uses to check self-build packages in your system. 

success(){
    echo -e "\033[1;32mOK\033[0m"
    return 0
}

fail(){
    echo -e "\033[1;31mFail\033[0m"
    return 1
}

show-host-info(){
    cat<<EOF
======================================================================
  SELF-BUILD SYSTEM REPORT
	DATE:		$(LANG=C date)
	HOSTNAME:	$(hostname)
	OS:		$(cat /etc/vine-release)
	KERNEL:		$(uname -a)
	%_arch:		$(rpm --eval %_arch)
======================================================================

EOF
}

show-summary(){
    cat<<EOF

======================================================================
  SUMMARY
EOF
    if [ -z "$LIST_ERROR_PKGS" -a -z "$LIST_RECOMMEND_REBUILD_PKGS" -a -z "$LIST_NO_INSTALLED_BUILD_PKGS" ]; then
	cat<<EOF
All self-build packages in your system have successfully been installed. 
======================================================================
EOF
	return 0
    fi

    [ ! -z "$LIST_ERROR_PKGS" ] && \
	cat<<EOF
W: The following packages may have some errors: 
$LIST_ERROR_PKGS
EOF
    [ ! -z "$LIST_NO_INSTALLED_BUILD_PKGS" ] && \
	cat<<EOF
E: No one of the following packages have been installed: 
$LIST_NO_INSTALLED_BUILD_PKGS
EOF
    [ ! -z "$LIST_RECOMMEND_REBUILD_PKGS" ] && \
	cat<<EOF
RECOMMEND: You should rebuild the following packages: 
$LIST_RECOMMEND_REBUILD_PKGS
EOF

	cat<<EOF
======================================================================
EOF
	return 1
}

######################################################################

show-host-info

LIST_PKGS=$(ls -d /usr/share/self-build-* 2>/dev/null)

for i in $LIST_PKGS; do
    _basename=$(basename $i)
    _specfile_basename=$(basename $i | sed s/self-build-//)
    [ -f ${i}/${_specfile_basename}-vl.spec ] && \
    	_specfile=${i}/${_specfile_basename}-vl.spec || \
	_specfile=${i}/${_specfile_basename}.spec

    echo -n "$_basename: "
    rpm -q $_basename

    if [ ! -f $_specfile ]; then
	echo "E: no found $_specfile"
	LIST_ERROR_PKGS="${LIST_ERROR_PKGS} $_basename"
	continue
    fi
    _build_pkgs=$(rpm -q --specfile $_specfile)
    for j in $_build_pkgs; do
	##!!IRREGULAR: libdvdcss
	if [ ! -z "$(echo $j | grep "libdvdcss-")" ]; then
	    continue
	fi

	echo -e -n "\t$j:\t"
	rpm -q --quiet $j
	if [ $? -eq 0 ]; then
	    success
	else
	    [ -z "$(echo ${LIST_RECOMMEND_REBUILD_PKGS} | grep $_basename)" ] && \
		LIST_RECOMMEND_REBUILD_PKGS="${LIST_RECOMMEND_REBUILD_PKGS} $_basename"
	    LIST_NO_INSTALLED_BUILD_PKGS="${LIST_NO_INSTALLED_BUILD_PKGS} $j"
	    fail

	    rpm -q --quiet $_specfile_basename
	    [ $? -eq 0 ] && \
		echo "W: $(rpm -q $_specfile_basename) has installed"
	    continue 1
	fi
    done

done

# echo LIST_ERROR_PKGS: $LIST_ERROR_PKGS
# echo LIST_RECOMMEND_REBUILD_PKGS: $LIST_RECOMMEND_REBUILD_PKGS
# echo LIST_NO_INSTALLED_BUILD_PKGS: $LIST_NO_INSTALLED_BUILD_PKGS
show-summary

exit
