return 0
fi
+ if [ ! -x /usr/bin/wget ]; then
+ echo "${FUNCNAME}() error, the wget package was not found."
+ return 1
+ fi
+
if [ -n "${USE_LFS_PATCHES}" ]; then
# Getting list of all patches from LFS server.
rcmd "Fetching LFS patches list" static_fetch_patches_list ${LFS_PATCHES_URL} ${LFS_PATCHES_LIST}
detect_file_not_found()
{
- # HTTP: will return error code 404.
- # FTP: will say "File not found"
- if grep "404" ${WGET_LOG_FILE} 1> /dev/null 2>&1; then
+ # HTTP: will return "ERROR 404: Not Found"
+ # FTP: will say "File not found" or "No such file"
+ if grep -q --ignore-case -e "not found" -e "no such file" ${WGET_LOG_FILE}; \
+ then
#echo "404 NOTFOUND"
return 0
- elif grep "No such file" ${WGET_LOG_FILE} 1> /dev/null 2>&1; then
- #echo "No such file"
- return 0
- else
- return 1
fi
+
+ return 1
}
# Get package if it is not in the repository
# so we can safely remove any file prior to trying to download it.
rm -f ${LFS_PKG_DIR}/${PACK}.${arch_ext}
- rcmd "Fetching ${PACK}.${arch_ext}" ${WGETCMD} ${URL}/${PACK}.${arch_ext}
+ rcmd "Fetching ${PACK}.${arch_ext}" \
+ ${WGETCMD} ${URL}/${PACK}.${arch_ext}
wget_status=$?
# Append log to global log file
# Failure: if it was a connection timeout, don't try for other file
# extensions.
- if grep "failed: Connection timed out" ${WGET_LOG_FILE} 1> /dev/null 2>&1; then
+ if grep -q "failed: Connection timed out" ${WGET_LOG_FILE}; then
echo "Error, wget reported: Connection timed out"
return 1
fi
# pm (Perl module via CPAN)
# fd (freedesktop.org)
# -o Option specific to mode
-# -h Display this help and returns
# -s Subdirectory on server
+# -w First erase destination file if it exists (except in test mode)
fpkg()
{
local ORIG_ARGS=${*}
local MODE_OPT=""
local SRC_DIR=""
local FD_SUBDIR_FINAL=""
+ unset ERASE_FIRST
- while getopts "d:e:f:m:o:s:" flag ;do
+ while getopts "d:e:f:m:o:s:w" flag ;do
case ${flag} in
d)
# Fetch directory (where to put file)
s)
SRC_DIR=${OPTARG}
;;
+ w)
+ ERASE_FIRST="y"
+ ;;
?)
echo "${FUNCNAME}(): Invalid option: ${OPTARG}."
return 1
# Most common layout:
# http://pkg-config.freedesktop.org/releases/
- if [ -z "${SRC_DIR}" ]; then
+ if [ -z "${MODE_OPT}" ]; then
# Default subdirectory or module on server
- SRC_DIR=$(get_pkg_name ${PACK})
+ MODE_OPT=$(get_pkg_name ${PACK})
fi
-
if [ -z "${FILE_EXT}" ]; then
# Default file extension is always tar.gz???
FILE_EXT="tar.gz"
fi
FD_SUBDIR_FINAL="releases"
- if [ -n "${MODE_OPT}" ]; then
+ if [ -n "${SRC_DIR}" ]; then
# Optional final subdir:
# releases (default)
# dist
# none (don't append anything)
- if [ "x${MODE_OPT}" = "xnone" ]; then
+ if [ "x${SRC_DIR}" = "xnone" ]; then
FD_SUBDIR_FINAL=""
else
- FD_SUBDIR_FINAL=${MODE_OPT}
+ FD_SUBDIR_FINAL=${SRC_DIR}
fi
fi
- URL="http://${SRC_DIR}.freedesktop.org/${FD_SUBDIR_FINAL}"
+ URL="http://${MODE_OPT}.freedesktop.org/${FD_SUBDIR_FINAL}"
SRC_DIR=""
;;
apa)
DEST_FILE=${DEST_DIR}/${PACK}.${FINAL_EXT}
- if [ ! -f ${DEST_FILE} ]; then
- if [ -z "${TEST_INTEGRITY}" ]; then
- # Fetch package, unless we are testing integrity
+ if [ -z "${TEST_INTEGRITY}" ]; then
+ if [ -f ${DEST_FILE} -a -n "${ERASE_FIRST}" ]; then
+ rm ${DEST_FILE}
+ fi
+
+ if [ ! -f ${DEST_FILE} ]; then
+ # Fetch package
set +e
static_getpkg ${SRC_FILENAME} ${URL} ${FILE_EXT}
set -e
mv ${DOWNLOADED_FILE} ${DEST_FILE}
fi
fi
- fi
-
- if [ -n "${TEST_INTEGRITY}" ]; then
+ else
+ set +e
test_archive_integrity "${PACK}" "${DEST_FILE}" "${FINAL_EXT}"
-
+ set -e
+
# We do not want to fetch patches when testing integrity,
# so return immediately
return 0
# Rename any patch fetched (in fpkg call) and replace SOURCE by TARGET
# in patch name.
- if ls ${LFS_PKG_DIR}/${SRC_FILENAME}-*.patch 1> /dev/null 2>&1; then
- echo "CMD=${SRC_FILENAME} ${PACK} ${LFS_PKG_DIR}/${SRC_FILENAME}-*.patch"
- rename ${SRC_FILENAME} ${PACK} ${LFS_PKG_DIR}/${SRC_FILENAME}-*.patch
+ local PATCHES_LIST="${LFS_PKG_DIR}/${SRC_FILENAME}-*.patch"
+ if ls ${PATCHES_LIST} 1> /dev/null 2>&1; then
+ echo "CMD=${SRC_FILENAME} ${PACK} ${PATCHES_LIST}"
+ rename ${SRC_FILENAME} ${PACK} ${PATCHES_LIST}
fi
fi
}
-
-# Create a symbolic link to a package that is located in another stage
-# repository (to not have the same file twice).
-# Arg. #1: Source stage number (1, 2, 3, etc)
-# Arg. #2: Package name
-lpkg()
-{
- SRCSTAGE="stage${1}"
- FILE="${2}.tar.bz2"
- PACKAGE_NAME="${2}"
-
- # Checking for correct number of arguments
- if [ $# -ne 2 ]; then
- echo "${FUNCNAME}(), wrong number of arguments: ${*}"
- return 1
- fi
-
- if [ ! -h ${LFS_PKG_DIR}/${FILE} ]; then
- # Issue a warning if source file doesn't exist.
- if [ ! -f ${LFS_PKG_BASE}/${SRCSTAGE}/${FILE} ]; then
- source_link_status=" (missing source file)"
- else
- source_link_status=""
- fi
-
- # Create link if it doesn't exist
- rcmd "Linking ${PACKAGE_NAME}${source_link_status}" ln -s ../${SRCSTAGE}/${FILE} ${LFS_PKG_DIR}/${FILE}
- fi
-
- # Create link for patches corresponding to that package:
- if ls ${LFS_PKG_BASE}/${SRCSTAGE}/${PACKAGE_NAME}-*.patch 1> /dev/null 2>&1; then
- for patch in ${LFS_PKG_BASE}/${SRCSTAGE}/${PACKAGE_NAME}-*.patch; do
- PATCHFILE=$(basename ${patch})
- if [ ! -h ${LFS_PKG_DIR}/${PATCHFILE} ]; then
- # Create link if it doesn't exist
- rcmd "Linking ${PATCHFILE}" ln -s ../${SRCSTAGE}/${PATCHFILE} ${LFS_PKG_DIR}/${PATCHFILE}
- fi
- done
- fi
-}