+# Installation of a package
+#
+# First argument: Real package name
+# Second argument: Installation script name
+# Third argument: Unique identification label in 'install.log'
+# Remaining arguments: Additional configure options
+ipkg()
+{
+ START_TIME=$(echo `date +%s`)
+ local PACKAGE_NAME=${1}
+ local SCRIPT=./${2}
+ local LABEL=${3}
+
+ # Checking for correct number of arguments
+ if [ $# -lt 3 ]; then
+ echo
+ echo "${FUNCNAME}(): Missing argument"
+ echo " command was: \"${FUNCNAME}() $*\""
+ exit ${EXIT_FAILURE}
+ fi
+
+ shift
+ shift
+ shift
+ local CONFIGURE_OPTS=${*}
+
+ # Checking if script is valid and executable
+ if [ ! -x ${SCRIPT} ]; then
+ echo
+ echo "${FUNCNAME}(): script not found: ${SCRIPT}"
+ exit ${EXIT_FAILURE}
+ fi
+
+ PACKAGE_LOG=${LFS_LOG_DIR}/${LABEL}.log
+
+ # Checking if package was previously successfully installed
+ if grep "^${LABEL} successfully installed" ${LFS_LOG_FILE} \
+ 1> /dev/null 2>&1; then
+ return $EXIT_SUCCESS
+ fi
+
+ # Displaying label
+ MSGSTRING="Installing ${LABEL}"
+ display_checkbox_msg ${MSGSTRING}
+
+ echo "------------------------" 1>> ${LFS_LOG_FILE}
+ echo "${MSGSTRING}" 1>> ${LFS_LOG_FILE}
+
+ echo "Decompressing package" 1>> ${PACKAGE_LOG} 2>&1 &&
+ decompress_package ${PACKAGE_NAME} 1> /dev/null 2>> ${PACKAGE_LOG}
+ eval_retval
+
+ local DECOMPRESSED_DIRNAME=$(static_decompressed_dirname ${PACKAGE_NAME})
+
+ # Rename the decompressed package as per the package name if necessary
+ if [ "x${DECOMPRESSED_DIRNAME}" != "x${PACKAGE_NAME}" ]; then
+ mv ${LFS_TMP}/${DECOMPRESSED_DIRNAME} ${LFS_TMP}/${PACKAGE_NAME}
+ eval_retval
+ fi
+
+ # Displaying package source size in log file
+ echo " Source size:" $(du -h -s ${LFS_TMP}/${PACKAGE_NAME} | awk '{ print $1 }') 1>> ${LFS_LOG_FILE}
+
+ # Removing old build directory (if any)
+ if [ -d ${LFS_TMP}/${PACKAGE_NAME}-build ]; then
+ echo "Removing old build directory" 1>> ${PACKAGE_LOG} 2>&1 &&
+ rm -v -rf ${LFS_TMP}/${PACKAGE_NAME}-build 1> /dev/null 2>> ${PACKAGE_LOG}
+ eval_retval
+ fi
+
+ # Creating build directory
+ mkdir -v ${LFS_TMP}/${PACKAGE_NAME}-build 1>> ${PACKAGE_LOG} 2>&1
+ eval_retval
+
+ # Executing script.
+ ${SCRIPT} ${PACKAGE_NAME} ${CONFIGURE_OPTS} 1>> ${PACKAGE_LOG} 2>&1
+ eval_retval
+
+ # Displaying package build size in log file
+ BUILD_SIZE=$(du -h -s -c ${LFS_TMP}/${PACKAGE_NAME} ${LFS_TMP}/${PACKAGE_NAME}-build | grep total | awk '{ print $1 }')
+ echo " Build size : ${BUILD_SIZE}" 1>> ${LFS_LOG_FILE}
+
+ # Some scripts need to preserve the source or build directory. They can
+ # do so by renaming them.
+ if [ -d ${LFS_TMP}/${PACKAGE_NAME} ]; then
+ # Removing source directory
+ echo "Removing source directory" 1>> ${PACKAGE_LOG} 2>&1 &&
+ rm -v -rf ${LFS_TMP}/${PACKAGE_NAME} 1> /dev/null 2>> ${PACKAGE_LOG}
+ eval_retval
+ fi
+ if [ -d ${LFS_TMP}/${PACKAGE_NAME}-build ]; then
+ # Removing build directory
+ echo "Removing build directory" 1>> ${PACKAGE_LOG} 2>&1 &&
+ rm -v -rf ${LFS_TMP}/${PACKAGE_NAME}-build 1> /dev/null 2>> ${PACKAGE_LOG}
+ eval_retval
+ fi
+
+ # Writing success string to the end of the log file
+ echo "${LABEL} successfully installed" 1>> ${LFS_LOG_FILE}
+
+ # Displaying build time after the package name
+ print_status success
+
+ return $EXIT_SUCCESS
+}
+