#!/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]
__epm_repack_to_deb()
{
    local pkg="$1"
    local orig_deb_depends="$2"

    assure_exists alien
    assure_exists fakeroot
    assure_exists rpm

    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
        docmd alien --single -k $verbose $scripts "$alpkg"

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

        # inject original deb depends into debian/control
        if [ -n "$orig_deb_depends" ] ; then
            info "Injecting Depends: $orig_deb_depends"
            sed -i -e "s|\${shlibs:Depends}|$orig_deb_depends|" "$debsrcdir"debian/control
        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
}

