#!/bin/sh
#
# Copyright (C) 2017-2018, 2020  Etersoft
# Copyright (C) 2017-2018, 2020  Vitaly Lipatov <lav@etersoft.ru>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#


# fills repacked_pkg
# args: pkg [orig_deb_depends] [orig_pkg_type]
__epm_repack_to_deb()
{
    local pkg="$1"
    local orig_deb_depends="$2"
    local orig_pkg_type="$3"

    repacked_pkg=''

    local TDIR
    TDIR="$(mktemp -d --tmpdir=$BIGTMPDIR)" || fatal
    remove_on_exit $TDIR

    umask 022

    # alien uses $EMAIL for Maintainer email (not DEBEMAIL)
    # and always takes the name from system GECOS (can't override without patching alien)
    # TODO: fix Maintainer name in the generated deb (replace GECOS with "EPM")
    export EMAIL="support@eepm.ru"

    if echo "$pkg" | grep -q "\.deb" ; then
        warning "Repack deb to deb is not supported yet."
    fi

        abspkg="$(realpath "$pkg")"
        info 'Repacking $abspkg to local deb format (inside $TDIR) ...'

        alpkg=$(basename $pkg)
        # don't use abs package path: copy package to temp dir and use there
        __epm_repack_copy $abspkg $TDIR/$alpkg

        cd $TDIR || fatal
        __prepare_source_package "$(pwd)/$alpkg"

        # generate debian/ dir without building
        __run_alien "$alpkg" --single -k $scripts

        # find the generated source directory (must contain debian/)
        local debsrcdir
        debsrcdir="$(ls -1d */debian 2>/dev/null | sed 's|/debian$||' | head -n1)"
        [ -n "$debsrcdir" ] && debsrcdir="$debsrcdir/"
        if [ -z "$debsrcdir" ] ; then
            warning 'Can'\''t find alien generated directory for $pkg'
            cd - >/dev/null
            return 1
        fi

        # inject original depends into debian/control
        if [ -n "$orig_deb_depends" ] ; then
            info "Injecting Depends: $orig_deb_depends"
            if [ "$orig_pkg_type" = "rpm" ] ; then
                # RPM source: add non-lib requires alongside shlibs
                sed -i -e "s|\${shlibs:Depends}|\${shlibs:Depends}, $orig_deb_depends|" "$debsrcdir"debian/control
            else
                # DEB source: replace shlibs placeholder with original depends
                sed -i -e "s|\${shlibs:Depends}|$orig_deb_depends|" "$debsrcdir"debian/control
            fi
        fi

        # build the deb
        ( cd "$debsrcdir" && a= fakeroot debian/rules binary )

        local DEBCONVERTED
        DEBCONVERTED="$(ls -1 *.deb 2>/dev/null | head -n1)"
        if [ -n "$DEBCONVERTED" ] ; then
            repacked_pkg="$repacked_pkg $(realpath $DEBCONVERTED)"
            remove_on_exit "$(realpath $DEBCONVERTED)"
        else
            warning 'Can'\''t find converted deb for source binary package $pkg'
        fi
        cd - >/dev/null

    return 0
}
