#!/bin/sh
# Copyright (C) 2020-2021 OpenCFD Ltd.
# SPDX-License-Identifier: (GPL-3.0+)

# Update debian/control from debian/template/control
# Replaces @PACKAGE@ with package name
# Replaces @FOAM_API@ with package-api
# Replaces @FOAM_PACKAGE@ with openfoam@FOAM_API@
#
# The package name:
# - specify with --package option as per mk-origtargz(1)
# - if 'auto', extract from debian/{changelog,changelog.debian}
#
# The package api
# - specify with --with-api
# - if 'auto' determine from package name, debian/{changelog,changelog.debian}
#   or from the META-INFO/api-info
# ---------------------------------------------------------------------------

# The debian/ directory is the parent directory
debianDir="${0%/*}/.."

# The project directory is one above debian/
projectDir="${0%/*}/../.."

[ -f "$debianDir/template/control" ] || {
    echo "${0##*/} Error: no template/control file" 1>&2
    exit 2
}


unset packageApi package release version
while [ "$#" -ge 2 ]
do
    case "$1" in
    (-package | --package)
        package="$2"
        ;;
    (-release | --release)
        release="$2"
        ;;
    (-with-api | --with-api)
        packageApi="$2"
        ;;
    (*)
        break
        ;;
    esac
    shift 2
done

if [ "$#" -gt 1 ]
then
    echo "${0##*/} Warning: ignoring unknown options/arguments" 1>&2
    echo "    $@" 1>&2
fi

: "${packageApi:=auto}"
: "${package:=auto}"
: "${release:=0}"

if [ "$package" = auto ]
then
    for file in changelog ../openfoam.changelog changelog.debian
    do
        file="$debianDir/$file"
        if [ -f "$file" ]
        then
            package=$(sed -ne '1s/^\([-a-zA-Z0-9]*\) .*/\1/p' "$file")
            version=$(sed -ne '1s/^[^()]*(\([^()]*\)).*/\1/p' "$file")

            # From version (2006.1-1+dfsg1) -> 2006.1
            version=$(echo "$version" | sed -e 's/[-+~].*//')

            # Split ver.rel
            case "$version" in
            (*.*)
                if [ "$release" = 0 ]
                then
                    release=$(echo "$version" | sed -e 's/^[^.]*[.]//')
                fi
                version=$(echo "$version" | sed -e 's/[.].*//')
                ;;
            esac
            break
        fi
    done
fi

if [ "${package:-auto}" = auto ]
then
    echo "${0##*/} Error: package name not provided and could not guess" 1>&2
    exit 1
fi

if [ "${packageApi:-auto}" = auto ]
then
    # Eg, openfoam1912 -> 1912
    packageApi=$(echo "$package" | sed -e 's/^\([-a-zA-Z]*\)//')

    if [ -z "$packageApi" ] && [ -n "$version" ]
    then
        # Or from version (1912.patch) -> 1912
        packageApi=$(echo "$version" | sed -e 's/[-+.~].*//')
    fi

    # Still nothing? Try from the source information
    file="$projectDir/META-INFO/api-info"
    if [ -z "$packageApi" ] && [ -f "$file" ]
    then
        # Same as $(bin/foamEtcFile -show-api)
        packageApi=$(sed -ne 's/^api=\([^ ]*\).*/\1/p' "$file")
    fi
fi

if [ -z "$packageApi" ]
then
    echo "${0##*/} Warning: problems determining the API level" 1>&2
fi

# Fallback values
: "${package:=openfoam}"
: "${packageApi:=0}"
: "${release:=0}"

echo "Prepare debian/control from template with package=$package ($packageApi) [$release]"
sed \
    -e 's#@PACKAGE@#'"$package"'#g;' \
    -e 's#@RELEASE@#'"$release"'#g;' \
    -e 's#@FOAM_API@#'"$packageApi"'#g;' \
    -e 's#@FOAM_PACKAGE@#'"openfoam$packageApi"'#g;' \
    "$debianDir"/template/control > "$debianDir"/control

# -----------------------------------------------------------------------------
