#!/usr/bin/sh


# Copyright (c) 2016  Bernhard M. Wiedemann <bernhard@zq1.de>
# Copyright (c) 2016  Dennis Gilmore <dennis@ausil.us>
# Copyright (c) 2016  Simon "HW42" Geiser <hw42@ipsumj.de>
# Copyright (c) 2016  Wojciech Porczyk <woju@invisiblethingslab.com>
#
# All rights reserved.
#
# Permission to use, copy, modify, and distribute this software for any purpose
# with or without fee is hereby granted, provided that the above copyright
# notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
# NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
# OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of a copyright holder shall not
# be used in advertising or otherwise to promote the sale, use or other dealings
# in this Software without prior written authorization of the copyright holder.
#

set -e

getos()
{
    # shellcheck disable=SC1091
    test -r /etc/os-release && . /etc/os-release
    if test -n "$BUILD_ORIGIN"
    then
        ID="$BUILD_ORIGIN"
    fi
    if test -z "$ID"; then
        ID=$(cat /etc/system-release)
    fi
    printf %s "$ID"
}

if test $# -lt 1
then
    echo usage: "$0" SRPM >&2
    exit 2
fi

if [ "${1%.src.rpm}" = "$1" ]; then
    SRPMDIR=$(rpm --eval '%{_srcrpmdir}')
    SRPM="$SRPMDIR/$(rpm -qp --queryformat '%{SOURCERPM}' "$1")"
    RPMS="$*"
else
    SRPM="$1"
    RPMS=$(find "$(rpm --eval '%{_rpmdir}')" -name '*.rpm')
fi

if ! [ -e "$SRPM" ]; then
    echo "$SRPM does not exist" >&2
    exit 1
fi

# Build-Date: not from rpm because that will be $SOURCE_DATE_EPOCH
# Binary: /usr/src/packages/RPMS/*/*.rpm or equivalent
cat <<EOF
Format: 0.2-rpm
Build-Architecture: $(uname -m)
Source: $(rpm -qp --queryformat '%{name}' "$SRPM")
Version: $(rpm -qp --queryformat '%{version}-%{release}' "$SRPM")
Architecture: $(rpm -qp --queryformat '%{arch}' "$SRPM")
Binary: $(printf '%s' "$RPMS" | xargs rpm -qp --qf "%{name} ")
Build-Origin: $(getos)
Build-Date: $(date -R)
Build-Path: $(rpm --eval '%{_builddir}')
EOF

printf 'Installed-Build-Depends:\n'
rpm -qa --queryformat '%{epoch}:%{name}-%{version}-%{release}.%{arch}\n' \
    | LC_ALL=C sort -t: -k2 \
    | sed -e 's/^(none)://; /\.(none)$/d; s/^/ /'

printf 'Environment:\n'

# whitelist stolen from Debian's dpkg:
# https://anonscm.debian.org/git/dpkg/dpkg.git/tree/scripts/Dpkg/Build/Info.pm#n50
ENV_WHITELIST=

# Toolchain.
ENV_WHITELIST="$ENV_WHITELIST CC CPP CXX OBJC OBJCXX PC FC M2C AS LD AR RANLIB MAKE AWK LEX YACC"
# Toolchain flags.
ENV_WHITELIST="$ENV_WHITELIST CFLAGS CPPFLAGS CXXFLAGS OBJCFLAGS OBJCXXFLAGS GCJFLAGS FFLAGS LDFLAGS ARFLAGS MAKEFLAGS"
# Dynamic linker, see ld(1).
ENV_WHITELIST="$ENV_WHITELIST LD_LIBRARY_PATH"
# Locale, see locale(1).
ENV_WHITELIST="$ENV_WHITELIST LANG LC_ALL LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION"
ENV_WHITELIST="$ENV_WHITELIST SOURCE_DATE_EPOCH"
for var in $ENV_WHITELIST
do
    eval value="\$$var"
    # shellcheck disable=SC2154
    test -n "$value" && printf ' %s="%s"\n' "$var" "$value"
done

printf 'Checksums-Sha256:\n'
for rpm in $SRPM $RPMS
do
    checksum=$(sha256sum -b "$rpm" | cut -c 1-64)
    size=$(stat -c '%s' "$rpm")
    printf ' %s %s %s\n' "$checksum" "$size" "$(basename "$rpm")"
done
