#!/bin/sh -efu

prog="${0##*/}"
outdir="$(mktemp -td $prog.XXXXXX)"
langlist="ru_RU"
outfile="pkg-groups.tar"

data=
name=
summary=
requires=
conflicts=

exit_handler()
{
    local rc=$?
    trap - EXIT
    [ -n "$outdir" ] && rm -rf "$outdir"
    exit $rc
}

usage()
{
    cat <<EOF
Usage: $prog <list of rpm packages>

Generate pkg-groups profile from the set of virtual rpm packages

Valid options are:
  -h, --help		display help screen
  -v, --version		display version information
  -l, --langlist	list of translations
  -o, --outfile		name of output profile
				     
Report bugs to <inger@altlinux.org>
EOF
	[ "$#" -gt 0 ] && exit "$1" || exit
}

trap exit_handler EXIT HUP INT QUIT TERM

export LANG=C

mkdir -p "$outdir/groups"
mkdir -p "$outdir/lists"

temp=`getopt -n $prog -o h,v,l:,o: -l help,version,langlist:,outfile: -- "$@"` || usage
eval set -- "$temp"

while :; do
	case "$1" in
		-l|--langlist) shift; langlist="$1";;
		-o|--outfile) shift; outfile="$1" ;;
		-h|--help) usage 0 ;;
		--) shift; break ;;
		*) echo "unrecognized option: $1" >&2 && usage 1 ;;
	esac
	shift
done

[ "$#" -gt 0 ] || usage

for i in "$@" ;do
    data="$(rpm -qp --qf='
name=%{NAME:shescape};
summary=%{SUMMARY:shescape};
conflicts=[%{CONFLICTNAME:shescape}'' ''];
requires=[%{REQUIRENAME:shescape}%%];' -- "$i")"
    eval "$data"
    
#create directory file
    cat >>"$outdir/groups/$name.directory"<<EOF
[Desktop Entry]
Type=Directory
Name=$summary
$(for lang in $langlist;do
    printf 'Name[%s]=%s\n' "$lang" "$(LANG="$lang.UTF8" rpm -qp --qf "%{SUMMARY}\n" $i)"
done)
X-Alterator-PackageList=$name
$([ -z "$conflicts" ] || printf 'X-Alterator-Conflicts=%s\n' $conflicts)
EOF
    echo "$requires"|
	tr '%' '\n'|
	grep -v '(' >"$outdir/lists/$name"
done

tar -cvpf "$outfile" -C "$outdir" .
