X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=functions-update;h=90ba6060476958e53f8950796d25d609340e921f;hb=c2994416b30ad7eaef7e592c4c07e8cf8426b4b7;hp=d602572ac84d02bcaf62b091b1624bfad96a671f;hpb=a934432259aa5d5b687fe52731d6baf13c9675dc;p=hvlinux.git diff --git a/functions-update b/functions-update index d602572..90ba606 100644 --- a/functions-update +++ b/functions-update @@ -22,8 +22,10 @@ SOURCEFORGE_URL="http://cdnetworks-us-1.dl.sourceforge.net" GNOME_URL="http://ftp.gnome.org/pub/gnome/sources" GNU_URL="http://ftp.gnu.org/pub/gnu" TETEX_URL="http://www.tug.org/ftp/tex-archive/systems/unix/teTeX" +BLFS_XORG_URL="http://anduin.linuxfromscratch.org/files/BLFS/svn/xorg" +XORG_URL="http://xorg.freedesktop.org/releases/individual" -WGETCMD="wget --directory-prefix=${LFS_PKG_DIR} --timeout=5 --tries=3 -nc -c -o ${WGET_LOG_FILE}" +WGETCMD="wget --directory-prefix=${LFS_PKG_DIR} --timeout=15 --tries=3 -nc --continue --no-check-certificate -o ${WGET_LOG_FILE}" LFS_PATCHES_LIST=${LFS_PKG_DIR}/patches-list-lfs.html BLFS_PATCHES_LIST=${LFS_PKG_DIR}/patches-list-blfs.html @@ -186,7 +188,7 @@ 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 - echo NOTFOUND + echo "404 NOTFOUND" return 0 elif grep "No such file" ${WGET_LOG_FILE} 1> /dev/null 2>&1; then return 0 @@ -198,24 +200,34 @@ detect_file_not_found() # Get package if it is not in the repository # Arg. #1: Package name and version # Arg. #2: URL +# Arg. #3: Optional extension static_getpkg() { - PACK=${1} - URL=${2} + local PACK=${1} + local URL=${2} + local MY_ARCH_EXT=${3} # Checking for correct number of arguments - if [ $# -ne 2 ]; then + if [ $# -ne 2 -a $# -ne 3 ]; then echo "${FUNCNAME}(), wrong number of arguments: ${*}" return 1 fi - if [ -z "${ARCH_EXT}" ]; then + if [ -z "${MY_ARCH_EXT}" ]; then # List of default archive extensions to try - ARCH_EXT="tar.bz2 tar.gz tgz tar.Z" + MY_ARCH_EXT="tar.bz2 tar.gz tgz tar.Z" fi - for arch_ext in ${ARCH_EXT}; do + echo " MY_ARCH_EXT=${MY_ARCH_EXT}" + + for arch_ext in ${MY_ARCH_EXT}; do + # Don't take any chance: remove any partially downloaded file. + # If we arrive here, it means the final destination file was not found + # so we can safely remove any file prior to trying to download it. + rm -f ${LFS_PKG_DIR}/${PACK}.${arch_ext} + ${WGETCMD} ${URL}/${PACK}.${arch_ext} + wget_status=$? # 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 @@ -228,8 +240,13 @@ static_getpkg() continue; fi - # If we arrive here, it means we were able to download the file. - if [ "x${arch_ext}" != "xtar.bz2" ]; then + if [ ${wget_status} -ne 0 ]; then + echo "Error fetching package ${PACK}.${arch_ext}" + return 1 + fi + + # If we arrive here, it means we were able to successfully download the file. + if [ "x${arch_ext}" = "xtar.gz" -o "x${arch_ext}" = "xtgz" -o "x${arch_ext}" = "xtar.Z" ]; then gztobz2 ${LFS_PKG_DIR}/${PACK}.${arch_ext} fi return $? @@ -242,10 +259,47 @@ static_getpkg() # Get package if it is not in the repository # Arg. #1: Package name and version # Arg. #2: URL +# Options: +# -e File extension (default is tar.bz2) +# -d Fetch directory (default is LFS_PKG_DIR) +# -f Filename (default is PACKAGE) +# -h Display this help and returns +# -s Subdirectory on server fpkg() { - PACK=${1} - URL=${2} + local FILE_EXT="" + local DEST_DIR="" + local SRC_FILENAME="" + local SRC_DIR="" + + while getopts "e:d:f:hs:" flag ;do + case ${flag} in + e) + # File extension + FILE_EXT=${OPTARG} + ;; + d) + # Fetch directory (where to put file) + DEST_DIR=${OPTARG} + ;; + f) + # Filename if different than package name + SRC_FILENAME=${OPTARG} + ;; + s) + SRC_DIR=${OPTARG} + ;; + ?) + echo "${FUNCNAME}(): Invalid option: ${OPTARG}." + return 1 + ;; + esac + done + shift `expr "${OPTIND}" - 1` + + unset OPTSTRING + unset OPTIND + unset OPTARG # Checking for correct number of arguments if [ $# -ne 2 ]; then @@ -253,50 +307,73 @@ fpkg() return 1 fi - if [ ! -f ${LFS_PKG_DIR}/${PACK}.tar.bz2 ]; then - rcmd "Fetching ${PACK}" static_getpkg ${PACK} ${URL} + local PACK=${1} + local URL=${2} + local FETCH_STRING="Fetching ${PACK}" + + if [ -z "${SRC_FILENAME}" ]; then + # Default source filename = name of package + SRC_FILENAME=${PACK} fi - # Check if a patch is available. - static_getpatch ${PACK} -} + if [ -n "${FILE_EXT}" ]; then + FETCH_STRING="${FETCH_STRING}.${FILE_EXT}" + fi -# Get package if it is not in the repository. -# This function is used if the source and target names for the -# package are different (name mismatch). -# Arg. #1: Target package name and version (on disk) -# Arg. #2: Source package name and version (on internet) -# Arg. #3: URL -fpkg_mis() -{ - TARGET=${1} - SOURCE=${2} - URL=${3} + if [ -z "${FILE_EXT}" -o \ + "x${FILE_EXT}" = "xtar.gz" -o \ + "x${FILE_EXT}" = "xtgz" -o \ + "x${FILE_EXT}" = "xtar.Z" -o \ + "x${FILE_EXT}" = "xtar.bz2" \ + ]; then + FINAL_EXT=tar.bz2 + else + FINAL_EXT=${FILE_EXT} + fi - # Checking for correct number of arguments - if [ $# -ne 3 ]; then - echo "${FUNCNAME}(), wrong number of arguments: ${*}" - reurn 1 + if [ -z "${DEST_DIR}" ]; then + # Default destination directory + DEST_DIR=${LFS_PKG_DIR} fi - if [ ! -f ${LFS_PKG_DIR}/${TARGET}.tar.bz2 ]; then - fpkg ${SOURCE} ${URL} - - if [ -f ${LFS_PKG_DIR}/${SOURCE}.tar.bz2 ]; then - mv ${LFS_PKG_DIR}/${SOURCE}.tar.bz2 ${LFS_PKG_DIR}/${TARGET}.tar.bz2 + mkdir -v -p ${DEST_DIR} >> ${LFS_LOG_FILE} 2>&1 + + if [ -z "${SRC_DIR}" ]; then + # Default source subdirectory on server + SRC_DIR="" + else + URL=${URL}/${SRC_DIR} + fi + + DEST_FILE=${DEST_DIR}/${PACK}.${FINAL_EXT} + + if [ ! -f ${DEST_FILE} ]; then + rcmd "${FETCH_STRING}" static_getpkg ${SRC_FILENAME} ${URL} ${FILE_EXT} + + # Move file if source filename is not equal to package name and/or destination + # directory is not the default: + DOWNLOADED_FILE=${LFS_PKG_DIR}/${SRC_FILENAME}.${FINAL_EXT} + + if [ "${DEST_FILE}" != "${DOWNLOADED_FILE}" ]; then + mv ${DOWNLOADED_FILE} ${DEST_FILE} fi fi - # Check for available patches with TARGET name. - static_getpatch ${TARGET} + # Test integrity of archive if requested + if [ -f ${DEST_FILE} -a -n "${TEST_INTEGRITY}" -a "x${FINAL_EXT}" = "xtar.bz2" ]; then + rcmd "Testing integrity of ${PACK}.${FINAL_EXT}" bzip2 -t ${DEST_FILE} + fi + + # Check for available patches with PACKAGE (TARGET) name. + static_getpatch ${PACK} - # Check for available patches with SOURCE name. - static_getpatch ${SOURCE} + # Check for available patches with SRC_FILENAME name. + static_getpatch ${SRC_FILENAME} # Rename any patch fetched (in fpkg call) and replace SOURCE by TARGET in # patch name. - if ls ${LFS_PKG_DIR}/${SOURCE}-*.patch 1> /dev/null 2>&1; then - rename ${SOURCE} ${TARGET} ${LFS_PKG_DIR}/${SOURCE}-*.patch + if ls ${LFS_PKG_DIR}/${SRC_FILENAME}-*.patch 1> /dev/null 2>&1; then + rename ${SRC_FILENAME} ${PACK} ${LFS_PKG_DIR}/${SRC_FILENAME}-*.patch fi } @@ -305,7 +382,7 @@ fpkg_mis() # Arg. #2: Directory name (optional) fpkg_gnu() { - PACK=${1} + local PACK=${1} if [ $# -eq 2 ]; then NAME=${2} @@ -406,6 +483,23 @@ fpkg_lfs() fi } +# Get package if it is not in the repository +# Arg. #1: Package name and version +# Arg. #2: Subdirectory name (module name) +fpkg_xorg() +{ + local PACK=${1} + local SUBDIR=${2} + + # Checking for correct number of arguments + if [ $# -ne 2 ]; then + echo "${FUNCNAME}(), wrong number of arguments: ${*}" + return 1 + fi + + fpkg -d ${LFS_PKG_DIR}/${SUBDIR} -s ${SUBDIR} ${PACK} ${XORG_URL} +} + # 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)