#!/bin/sh
#
# makespec.sh VERSION < kernel-firmware.spec.in > kernel-firmware.spec
#

export LANG=C
version="$1"

topics=$(awk '{print $1}' topicdefs | sort)

define_subpackage () {
    local topic="$1"
    local desc=$(grep '^'"$topic"'[[:space:]]' topicdefs | sed -e's/^[a-zA-Z0-9-]*[[:space:]]*//')
    echo "%package $topic"
    echo "Summary:        Kernel firmware files for $desc"
    echo "Group:          System/Kernel"
    echo "Requires(post): /usr/bin/mkdir /usr/bin/touch"
    echo "Requires(postun):/usr/bin/mkdir /usr/bin/touch"
    echo "Requires(post): dracut >= 049"
    echo "Conflicts:      kernel < 5.3"
    echo "%if 0%{?suse_version} >= 1550"
    echo "# make sure we have post-usrmerge filesystem package on TW"
    echo "Conflicts:      filesystem < 84"
    echo "%endif"
    grep "^${topic}:" topicprovs | sed -e's/^[^ \t]*:[[:space:]]*//g'
    sh ./get_supplements.sh $topic
    echo
    echo "%description $topic"
    echo "This package contains compressed kernel firmware files for"
    echo "$desc."
    echo
}

define_post () {
    local l="$*"
    if [ -z "$l" -a -f uncompressed-post ]; then
	cat uncompressed-post
	return 0
    fi
    if [ -n "$l" -a -f "$l"-post ]; then
	cat "$l"-post
	return 0
    fi
    test -n "$l" && l=" $l"
    echo "%post$l"
    echo "%{?regenerate_initrd_post}"
    echo
    echo "%postun$l"
    echo "%{?regenerate_initrd_post}"
    echo
    echo "%posttrans$l"
    echo "%{?regenerate_initrd_posttrans}"
}

sed -e"s/@@VERSION@@/$version/g" | while read line; do
    if [ "$line" = "@@ALLPROVS@@" ]; then
	sed -e's/^[^ \t]*:[[:space:]]*//g' topicprovs
	continue
    fi
    if [ "$line" = "@@SUBPKGLIST@@" ]; then
	for t in $topics; do
	    echo "Requires:       %{name}-$t = %{version}"
	done
	continue
    fi
    if [ "$line" = "@@SUBPACKAGES@@" ]; then
	for t in $topics; do
	    define_subpackage $t
	done
	continue
    fi
    case "$line" in
	@@POST@@*)
	    define_post $(echo "$line" | sed -e's/^@@POST@@ *//')
	    continue;;
    esac
    if [ "$line" = "@@SUBPKGPOSTS@@" ]; then
	for t in $topics; do
	    echo
	    define_post $t
	done
	continue
    fi
    if [ "$line" = "@@SUBPKGFILES@@" ]; then
	for t in $topics; do
	    echo "%files -f files-$t $t"
	    echo
	done
	continue
    fi
    echo "$line"
done

exit 0
