#!/bin/sh

echo "**** Autotools Add New Package Wizard ****"
echo " This script will generate files to add a"
echo " new package to buildroot."
echo

echo "What is the name of the package?"
read PACKAGE_NAME

echo "What is the version number?"
read VERSION_NUM

echo "What is the web address of the tarball?"
read DOWNLOAD_LOC

echo "Enter any known dependencies, separated"
echo "by spaces, or just press enter."
read EXTRA_DEPS

echo "Enter a description of the package."
read DESCRIPTION

echo "Does autoreconf need to be run first? (y/n)"
read ANSWER

if [ "$ANSWER" = "y" ]; then
	RECONF="YES"
else
	RECONF="NO"
fi

echo "Does it need to be installed to the staging dir?"
echo "Say yes, if other packages depend on it."
echo "(If not sure, just say yes. It will only use more"
echo "space on your hard drive.)"
read ANSWER

if [ "$ANSWER" = "y" ]; then
	STAGING="YES"
else
	STAGING="NO"
fi

echo "Enter an additional subdirectory below package/"
echo "as category, or just press enter."
read SUB_DIR

if [ -z "$SUB_DIR" ]; then
	CATEGORY_DIR=package
else
	CATEGORY_DIR=package/${SUB_DIR}
fi

echo "Enter any configure script options."
read CONFIG_OPTIONS

URL=${DOWNLOAD_LOC%/*}
TARBALL=${DOWNLOAD_LOC##*/}
EXTENSION=${TARBALL##*.tar.}
NAME_UPPER=`echo ${PACKAGE_NAME} | tr a-z- A-Z_`
PACKAGE_DIR=`dirname $0`/../${CATEGORY_DIR}/${PACKAGE_NAME}

mkdir -p ${PACKAGE_DIR}

sed -e 's/ *$//g' > ${PACKAGE_DIR}/${PACKAGE_NAME}.mk <<EOF
#############################################################
#
# ${PACKAGE_NAME}
#
#############################################################
${NAME_UPPER}_VERSION = ${VERSION_NUM}
${NAME_UPPER}_SOURCE = ${PACKAGE_NAME}-\$(${NAME_UPPER}_VERSION).tar.${EXTENSION}
${NAME_UPPER}_SITE = ${URL}
${NAME_UPPER}_AUTORECONF = ${RECONF}
${NAME_UPPER}_INSTALL_STAGING = ${STAGING}
${NAME_UPPER}_INSTALL_TARGET = YES

${NAME_UPPER}_CONF_OPT = ${CONFIG_OPTIONS}

${NAME_UPPER}_DEPENDENCIES = uclibc ${EXTRA_DEPS}

\$(eval \$(call AUTOTARGETS,${CATEGORY_DIR},${PACKAGE_NAME}))
EOF

cat > ${PACKAGE_DIR}/Config.in <<EOF
config BR2_PACKAGE_${NAME_UPPER}
	bool "${PACKAGE_NAME}"
	help
	  ${DESCRIPTION}

	  ${URL}
EOF

echo
echo "**** Manual steps to integrate your new package ****"
echo

echo "Add the following line to ${CATEGORY_DIR}/Config.in"
echo "in an appropriate location:"
echo "source \"${CATEGORY_DIR}/${PACKAGE_NAME}/Config.in\""

if [ -n "$SUB_DIR" ]; then
	echo
	echo "Additionally add the following line to package/Config.in"
	echo "in an appropriate location:"
	echo "source \"${CATEGORY_DIR}/Config.in\""
fi

if [ -n "$EXTRA_DEPS" ]; then
	echo
	echo "You need to add \"depends on\" and/or \"select\" lines"
	echo "to ${CATEGORY_DIR}/${PACKAGE_NAME}/Config.in"
	echo "corresponding to the \"${NAME_UPPER}_DEPENDENCIES\" line"
	echo "in ${CATEGORY_DIR}/${PACKAGE_NAME}/${PACKAGE_NAME}.mk"
fi

echo
echo "After that run \"make menuconfig\", select your new package"
echo "and run \"make\" to build \"${PACKAGE_NAME}\"."
