#!/bin/sh

# This script registers the toolchain of a Buildroot project into the
# Eclipse plugin. To do so, it adds a new line for the Buildroot
# toolchain into the $HOME/.buildroot-eclipse.toolchains file, which
# the Eclipse Buildroot plugin reads to discover automatically the
# available Buildroot toolchains on the system.
#
# This script should typically not be called manually. Instead, one
# should enable the BR2_ECLIPSE_REGISTER configuration option, which
# will lead Buildroot to automatically call this script with the
# appropriate arguments.
#
# Usage:
#  eclipse-register-toolchain project-directory toolchain-prefix architecture
#
#   project-directory is the absolute path to the Buildroot project
#   output directory (which contains the host/, target/, build/,
#   images/, etc. subdirectories). It should be an absolute and
#   canonical path.
#
#   toolchain-prefix is the prefix of the cross-compilation tools, i.e
#   'arm-linux-' if the cross-compiler executable is 'arm-linux-gcc'.
#
#   architecture is the lower-cased name of the architecture targetted
#   by the Buildroot project.

if test $# -ne 3; then
    echo "Invalid number of arguments."
    echo "Usage: $0 project-directory toolchain-prefix architecture"
    exit 1
fi

project_directory=$1
toolchain_prefix=$2
architecture=$3

if test ! -d ${project_directory} ; then
    echo "Non-existing project directory ${project_directory}"
    exit 1
fi

if test ! -d ${project_directory}/host ; then
    echo "Your project directory does not look like a Buildroot output"
    exit 1
fi

if test ! -e ${project_directory}/host/bin/${toolchain_prefix}gcc ; then
    echo "Cannot find the cross-compiler in the project directory"
    exit 1
fi

TOOLCHAIN_ECLIPSE_FILE=${HOME}/.buildroot-eclipse.toolchains

# First, we remove all lines from the ${TOOLCHAIN_ECLISPE_FILE} that
# correspond to toolchains that no longer exist.
if test -f ${TOOLCHAIN_ECLIPSE_FILE} ; then
    mv ${TOOLCHAIN_ECLIPSE_FILE} ${TOOLCHAIN_ECLIPSE_FILE}.tmp
    cat ${TOOLCHAIN_ECLIPSE_FILE}.tmp | while read toolchain ; do
	path=$(echo ${toolchain} | cut -f1 -d ':')
        # Filter lines corresponding to still existing projects
	echo "Testing ${path} ..."
	if ! test -d ${path} ; then
	    continue
	fi
	# .. and the current project
	if test ${path} = ${project_directory} ; then
	    continue
	fi
	echo ${toolchain} >> ${TOOLCHAIN_ECLIPSE_FILE}
    done
    rm ${TOOLCHAIN_ECLIPSE_FILE}.tmp
fi

# Add the toolchain
echo "${project_directory}:${toolchain_prefix}:${architecture}" >> ${TOOLCHAIN_ECLIPSE_FILE}
