#!/bin/sh
##
#  Korinf project
#
#  Gentoo build related functions
#
#  Copyright (c) Etersoft <http://etersoft.ru> 2005, 2006, 2007, 2009, 2013
#  Copyright (c) Vitaly Lipatov <lav@etersoft.ru> 2009, 2013
#
#  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/>.
##

kormod converts/alien


export PACKETCATHEGORY="app-misc"
export NAMEOFOVERLAY="etersoft_overlay"
export DISTDIROFOVERLAY="distfiles"
export PKGDIROFOVERLAY="packages"
export TMPDIROFOVERLAY="etersoft_tmp"
export INTHOME="/home/${INTUSER}"
export BUILDSCRIPTRUNEBUILD="build_packet_tbz2.sh"
export INSTALLBUILTSCRIPTNAME="install_built_tbz2.sh"


# Function create_build_script_in_chroot()
# prepare script into chroot for call ebuild with
# true setting variables for overlay Portage

create_build_script_in_chroot()
{
	if [ -n "$ADEBUG" ]
	then
	    ARG_01=$1
	    ARG_02=$2
	    debug_print_var ARG_01 ARG_02
	    debug_print_backtrace
	fi
	
# Names and values variables is names and values inside chroot !
	local CATHEGORYPACKETEBUILDNAME=$1
	
	cat > "$2" << EOF

export PORTDIR_OVERLAY="${INTHOME}/${NAMEOFOVERLAY} $PORTDIR_OVERLAY"
export PORTAGE_TMPDIR="${INTHOME}/${TMPDIROFOVERLAY}"
export DISTDIR="${INTHOME}/${NAMEOFOVERLAY}/${DISTDIROFOVERLAY}"
export PKGDIR="${INTHOME}/${NAMEOFOVERLAY}/${PKGDIROFOVERLAY}"

ebuild "${INTHOME}/${NAMEOFOVERLAY}/${CATHEGORYPACKETEBUILDNAME}" manifest || exit

ebuild "${INTHOME}/${NAMEOFOVERLAY}/${CATHEGORYPACKETEBUILDNAME}" package || exit

# Set mode rights for success remove home directory in phase umount after build
chmod -R 0777 "${INTHOME}/${NAMEOFOVERLAY}"
chmod -R 0777 "${INTHOME}/${TMPDIROFOVERLAY}"

EOF

# Set mode for success run build_script
	chmod 0777 $2
}



# Function create_install_script_in_chroot()
# prepare script into chroot for call in phase
# install built packages...
# with true setting variables for overlay Portage
create_install_script_in_chroot()
{
	if [ -n "$ADEBUG" ]
	then
	    ARG_01=$1
	    ARG_02=$2
	    debug_print_var ARG_01 ARG_02
	    debug_print_backtrace
	fi
	
## Names and values variables is names and values inside chroot !
	local PACKETTBZ2NAME=$1
	
	cat > "$2" << EOF

export PORTDIR_OVERLAY="${INTHOME}/${NAMEOFOVERLAY} $PORTDIR_OVERLAY"
export PORTAGE_TMPDIR="${INTHOME}/${TMPDIROFOVERLAY}"
export DISTDIR="${INTHOME}/${NAMEOFOVERLAY}/${DISTDIROFOVERLAY}"
export PKGDIR="${INTHOME}/${NAMEOFOVERLAY}/${PKGDIROFOVERLAY}"

cd "${INTHOME}/${NAMEOFOVERLAY}/${PKGDIROFOVERLAY}/${PACKETCATHEGORY}"
emerge -vK "${PACKETTBZ2NAME}" || exit

#echo "emerge return : $?"
#echo "--------------------------------"

EOF

## Set mode for success run install_script
	chmod 0777 $2
}



create_ebuild()
{
	QQQRDEPEND="$(estrlist list $PKGREQLIST)"
	
	if [ -n "$ADEBUG" ]
	then
	    ARG_01=$1
	    debug_print_var ARG_01 PKGREQLIST QQQRDEPEND SRC_URI
	fi

# Into PKGLICENSE symbols '(' ')' is not valid - replace its
	local VALIDPKGLICENSE=$(echo "$PKGLICENSE" | sed -e "s|(\+|-|g" -e "s|)\+|-|g")
	
	cat > "$1" << EOF

# Copyright 2013 Etersoft
# Gentoo ebuild file generated by Korinf build system

EAPI="3"
RESTRICT="fetch"

DESCRIPTION="$PKGCOMMENT"
HOMEPAGE="$PKGURL"

LICENSE="$VALIDPKGLICENSE"
SLOT="0"
KEYWORDS="-* x86 amd64"
RDEPEND="$QQQRDEPEND" | xargs

BASE_URI="$DESTURL"
SRC_URI="$SRC_URI"

src_unpack() {
unpack \${A}
}

src_install() {
cp -pR * "\${D}"
}
EOF
}



convert_gentoo()
{
	assert_var BUILDERHOME TARGETBUILDNAME PACKAGEVERSION PACKAGERELEASE
	assert_var BUILTRPM BUILTBINPKGLIST
	assert_var PACKETCATHEGORY NAMEOFOVERLAY DISTDIROFOVERLAY PKGDIROFOVERLAY
	assert_var TMPDIROFOVERLAY INTHOME
	assert_var BUILDSCRIPTRUNEBUILD
	assert_var INSTALLBUILTSCRIPTNAME
	
	prepare_convert
	PKGARCH=${PKGARCH/i586/x86}
	PKGARCH=${PKGARCH/x86_64/amd64}
	
	local PACKAGERELEASEGENTOO=$(get_numpartrelease ${PACKAGERELEASE})
# Revision (release) in Gentoo always begin by symbol 'r' 
	PACKAGERELEASEGENTOO="r${PACKAGERELEASEGENTOO}"

# Variables for data about directories Portage overlay in /home/korinfer into chroot
# Base variables defined into  /korinf/share/eterbuild/korinf/distro

	local PTGOVERLAY="${BUILDERHOME}/${NAMEOFOVERLAY}"
	local PTGDISTDIR="${PTGOVERLAY}/${DISTDIROFOVERLAY}"
	local PTGPKGDIR="${PTGOVERLAY}/${PKGDIROFOVERLAY}"
	local PTGTMPDIR="${BUILDERHOME}/${TMPDIROFOVERLAY}"
	
	debug_print_var BUILTBINPKGLIST BUILDNAME TARGETBUILDNAME

	mkdir -p --verbose "${PTGOVERLAY}/${PACKETCATHEGORY}/${BUILDNAME}"
	mkdir -p --verbose "${PTGDISTDIR}"
	mkdir -p --verbose "${PTGPKGDIR}"
	mkdir -p --verbose "${PTGTMPDIR}"
	
	local BUILDPACKNAME="$BUILDNAME-$PACKAGEVERSION-$PACKAGERELEASE$PKGVENDOR.$PKGARCH"
	local FNAME="$BUILDPACKNAME.$PKGFORMAT"
	touch "$BUILDPACKNAME.tar"
	SRC_URI="\$BASE_URI/${FNAME}"

# Convert and merge packets-parts of buildpacket into one buildpacket-source
	for i in $BUILTBINPKGLIST ; do
	    run_alien --to-tgz $i || { warning "alien problem with tbz2"; RES=11 ; }
	    for j in *${BUILDNAME}*.tgz ; do
		gunzip "$j" || { warning "can't extract files from tgz" ; RES=11 ; }
		tar --concatenate --verbose --file "$BUILDPACKNAME.tar" "${j%.*}.tar" || { warning "can't repack tar files" ; RES=11 ; }
		rm -f --verbose  "${j%.*}.tar"
	    done
	done
	bzip2 -5v "$BUILDPACKNAME.tar"
# Copy repacked buildpacket-source archive into overlay
	cp -f --verbose ${FNAME} "${PTGDISTDIR}/${FNAME}"

# TODO: requires

	local TRUEEBUILDNAME="$TARGETBUILDNAME-$PACKAGEVERSION-$PACKAGERELEASEGENTOO.ebuild"
	
	create_ebuild "${PTGOVERLAY}/${PACKETCATHEGORY}/${BUILDNAME}/${TRUEEBUILDNAME}"

	create_build_script_in_chroot "${PACKETCATHEGORY}/${BUILDNAME}/${TRUEEBUILDNAME}" "${PTGTMPDIR}/${BUILDSCRIPTRUNEBUILD}"

	run_in_chroot "cd ${INTHOME}/${TMPDIROFOVERLAY}; ./${BUILDSCRIPTRUNEBUILD}" || return
	
	local TBZ2NAME="$TARGETBUILDNAME-$PACKAGEVERSION-$PACKAGERELEASEGENTOO.tbz2"
# Copy resultat of build - *.tbz2 -in standart directory for RPM result
	cp -f "${PTGPKGDIR}/${PACKETCATHEGORY}/${TBZ2NAME}" "${BUILTRPM}/${TBZ2NAME}"

# Correcting PKGFORMAT
	PKGFORMAT="tbz2"
	
	if [ -n "$ADEBUG" ]
	then
	    debug_print_var MAINFILESLIST EXTRAFILESLIST EXPMAINFILES
	    debug_print_backtrace
	fi
	
# re-expand file masks by PKGFORMAT
        EXPMAINFILES=$(expand_filelist $MAINFILESLIST)
        EXPEXTRAFILES=$(expand_filelist $EXTRAFILESLIST)

	if [ -n "$ADEBUG" ]
	then
	    debug_print_var MAINFILESLIST EXTRAFILESLIST EXPMAINFILES
	fi

	create_install_script_in_chroot "${TBZ2NAME}" "${PTGTMPDIR}/${INSTALLBUILTSCRIPTNAME}"
	
	INTBUILT="${INTHOME}/${TMPDIROFOVERLAY}"
}
