#!/bin/bash
#
# This utility setup the necessary metadata for an rpm repo
#
# Copyright (c) 2011 Intel Corp.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA


# Don't use TMPDIR from the external environment, it may be a distro
# variable pointing to /tmp (e.g. within X on OpenSUSE)
# Instead, use OE_TMPDIR for passing this in externally.
TMPDIR="$OE_TMPDIR"

setup_tmpdir() {
    if [ -z "$TMPDIR" ]; then
        # Try to get TMPDIR from bitbake
        type -P bitbake &>/dev/null || {
            echo "In order for this script to dynamically infer paths";
            echo "to kernels or filesystem images, you either need";
            echo "bitbake in your PATH or to source oe-init-build-env";
            echo "before running this script" >&2;
            exit 1; }

        # We have bitbake in PATH, get TMPDIR from bitbake
        TMPDIR=`bitbake -e | grep ^TMPDIR=\" | cut -d '=' -f2 | cut -d '"' -f2`
        if [ -z "$TMPDIR" ]; then
            echo "Error: this script needs to be run from your build directory,"
            echo "or you need to explicitly set TMPDIR in your environment"
            exit 1
        fi
    fi
}

setup_tmpdir

function usage() {
    echo 'Usage: oe-setup-rpmrepo rpm-dir'
    echo ''
    echo 'OpenEmbedded setup-rpmrepo - setup rpm repository'
    echo ''
    echo 'arguments:'
    echo "  rpm-dir               rpm repo directory, default is $TMPDIR/deploy/rpm"
    echo ''
}

if [ $# -gt 1 -o "$1" = '--help' -o "$1" = '-h' ]; then
    usage
    exit 2
fi

setup_sysroot() {
	# Toolchain installs set up $OECORE_NATIVE_SYSROOT in their
	# environment script. If that variable isn't set, we're
	# either in an in-tree poky scenario or the environment
	# script wasn't source'd.
	if [ -z "$OECORE_NATIVE_SYSROOT" ]; then
		setup_tmpdir
		BUILD_ARCH=`uname -m`
		BUILD_OS=`uname | tr '[A-Z]' '[a-z]'`
		BUILD_SYS="$BUILD_ARCH-$BUILD_OS"

		OECORE_NATIVE_SYSROOT=$TMPDIR/sysroots/$BUILD_SYS
	fi 
}

setup_sysroot


if [ -n "$1" ]; then
	RPM_DIR="$1"
else
	RPM_DIR="$TMPDIR/deploy/rpm"
fi

if [ ! -d "$RPM_DIR" ]; then
   	echo "Error: rpm dir $RPM_DIR doesn't exist"
	exit 1
fi

CREATEREPO=$OECORE_NATIVE_SYSROOT/usr/bin/createrepo_c
if [ ! -e "$CREATEREPO" ]; then
   	echo "Error: can't find createrepo binary"
	echo "please run bitbake createrepo-native first"
	exit 1
fi

export PATH=${PATH}:${OECORE_NATIVE_SYSROOT}/usr/bin

$CREATEREPO "$RPM_DIR"

exit 0
