Use bash variable add operator
[hvlinux.git] / functions / fpkg
index 296bad8..3f8e624 100644 (file)
@@ -3,18 +3,22 @@
 source ../config/urls
 source ../functions/gztobz2
 
+# Ownership of downloaded files
+FPKG_USER="root"
+FPKG_GROUP="users"
+
 LFS_PKG_BASE="$(dirname $(pwd))/packages"
 LFS_PKG_DIR="${LFS_PKG_BASE}/${LFS_STAGE}"
+LFS_PATCHES_DIR="${LFS_PKG_BASE}/${LFS_STAGE}/patches"
 LFS_LOG_DIR="${LFS}/var/log/hvlinux-install/${LFS_STAGE}"
 LFS_LOG_FILE="${LFS_LOG_DIR}/pkg-update.log"
 WGET_LOG_FILE="${LFS_LOG_DIR}/pkg-wget.log"
 
 WGETCMD="wget --directory-prefix=${LFS_PKG_DIR} --timeout=15 --tries=3 -nc --continue --no-check-certificate --no-verbose --output-file=${WGET_LOG_FILE}"
 
-LFS_PATCHES_LIST=${LFS_PKG_DIR}/patches-list-lfs.html
-BLFS_PATCHES_LIST=${LFS_PKG_DIR}/patches-list-blfs.html
-CLFS_PATCHES_LIST=${LFS_PKG_DIR}/patches-list-clfs.html
-HV_PATCHES_LIST=${LFS_PKG_DIR}/patches-list-hv.html
+LFS_PATCHES_LIST=${LFS_PKG_DIR}/patches/list-lfs.html
+BLFS_PATCHES_LIST=${LFS_PKG_DIR}/patches/list-blfs.html
+CLFS_PATCHES_LIST=${LFS_PKG_DIR}/patches/list-clfs.html
 
 # Test if the given file extension correspond to a compressed archive
 # Arg. #1: File extension
@@ -84,6 +88,7 @@ remove_partial_file()
 # Download a file, and making sure it is valid (at least it's header!)
 # Arg. #1: Source URL.
 # Arg. #2: Source filename (on server)
+# Arg. #3: Output directory (optional). Default = LFS_PKG_DIR
 #
 # Return: 0 : success
 #         1 : wget error
@@ -97,8 +102,13 @@ wget_wrapper()
 
     local URL=${1}
     local SOURCE=${2}
+    local DESTDIR=${LFS_PKG_DIR}
+
+    if [ ${#} -eq 3 ]; then
+        DESTDIR=${3}
+    fi
 
-    remove_partial_file ${LFS_PKG_DIR}/${SOURCE}
+    remove_partial_file ${DESTDIR}/${SOURCE}
 
     local STRING="Fetching ${SOURCE}"
     if [ "x${FTYPE}" = "x${FTYPE_PATCH}" ]; then
@@ -106,9 +116,12 @@ wget_wrapper()
     fi
 
     rcmd "${STRING}" ${WGETCMD} ${URL}/${SOURCE} \
-        --output-document=${LFS_PKG_DIR}/${SOURCE}.part
+        --output-document=${DESTDIR}/${SOURCE}.part
     wget_status=$?
 
+    chown ${FPKG_USER}:${FPKG_GROUP} ${DESTDIR}/${SOURCE}.part
+    chmod 664 ${DESTDIR}/${SOURCE}.part
+
     # Append log to global log file
     cat ${WGET_LOG_FILE} >> ${LFS_LOG_FILE}
 
@@ -120,27 +133,32 @@ wget_wrapper()
 
     # Partial failure if file was not found.
     if detect_file_not_found; then
-        remove_partial_file ${LFS_PKG_DIR}/${SOURCE}
+        remove_partial_file ${DESTDIR}/${SOURCE}
         return 2
     fi
 
     if [ ${wget_status} -ne 0 ]; then
-        remove_partial_file ${LFS_PKG_DIR}/${SOURCE}
+        echo "Error: wget returned error status ${wget_status}" >> \
+            ${LFS_LOG_FILE}
+        remove_partial_file ${DESTDIR}/${SOURCE}
         return 1
     fi
 
     local FEXT=${SOURCE##*.}
     if is_extension_archive "${FEXT}"; then
         # Just to be sure, test if downloaded file is really an archive:
-        if ! is_archive ${LFS_PKG_DIR}/${SOURCE}.part; then
+        if ! is_archive ${DESTDIR}/${SOURCE}.part; then
             # Partial failure if file is invalid.
-            remove_partial_file ${LFS_PKG_DIR}/${SOURCE}
+            echo "Error: failed archive test" >> ${LFS_LOG_FILE}
+            remove_partial_file ${DESTDIR}/${SOURCE}
             return 2
         fi
     fi
 
     # Rename temporary file to final name
-    mv ${LFS_PKG_DIR}/${SOURCE}{.part,}
+    mv ${DESTDIR}/${SOURCE}{.part,}
+    chown ${FPKG_USER}:${FPKG_GROUP} ${DESTDIR}/${SOURCE}
+    chmod 664 ${DESTDIR}/${SOURCE}
 
     return 0
 }
@@ -181,7 +199,14 @@ update_packages_init()
 
     # Then create destination directory if it does not exists.
     if [ ! -d ${LFS_PKG_DIR} ]; then
-       install -v -m755 -d ${LFS_PKG_DIR} 1> ${LFS_LOG_FILE} 2>&1 || exit 1
+       install -v -m775 -o ${FPKG_USER} -g ${FPKG_GROUP} \
+            -d ${LFS_PKG_DIR} 1> ${LFS_LOG_FILE} 2>&1 || exit 1
+    fi
+
+    # Create patches destination directory if it does not exists.
+    if [ ! -d ${LFS_PATCHES_DIR} ]; then
+       install -v -m775 -o ${FPKG_USER} -g ${FPKG_GROUP} \
+            -d ${LFS_PATCHES_DIR} 1> ${LFS_LOG_FILE} 2>&1 || exit 1
     fi
 
     if [ -n "${TEST_INTEGRITY}" ]; then
@@ -208,14 +233,9 @@ update_packages_init()
         # Getting list of all patches from CLFS server.
         rcmd "Fetching CLFS patches list" static_fetch_patches_list ${CLFS_PATCHES_URL} ${CLFS_PATCHES_LIST}
     fi
-
-    if [ -n "${USE_HV_PATCHES}" ]; then
-        # Getting list of all patches from hugovil.com server.
-        rcmd "Fetching hugovil.com patches list" static_fetch_patches_list ${HV_PATCHES_URL} ${HV_PATCHES_LIST}
-    fi
 }
 
-# Get patch package if it is not in the repository
+# Get patch for package if it is not in the repository
 # Arg. #1: Package name and version
 # Arg. #2: Patches list file (HTML)
 # Arg. #3: Patches URL
@@ -230,13 +250,14 @@ static_checkpatch()
 
     # Patches list formats (patches-list-*.html):
     #   LFS:     a href="name.patch"
-    #   hugovil: A HREF "dir/subdir/subdir/name.patch
+    #   hugovil: a href="dir/subdir/subdir/name.patch"
     # We must search for a patch beginning with either a slash or a " to avoid
     # the possibility of having another package name within a patch name:
     #   if patch = Mesalib-8.0.4-llvm-3.1-fixes-1.patch
     #   then we could erroneously try to download patch "llvm-3.1-fixes-1.patch"
     local PATCHES_FOUND=$(cat ${PATCHES_LIST} | \
         egrep "\"${PACK_URL}-|/${PACK_URL}-" | \
+        egrep ".patch\"" | \
         sed "s/.*\(${PACK_URL}-.*\.patch\)\".*/\1/")
 
     if [ -n "${PATCHES_FOUND}" ]; then
@@ -244,8 +265,8 @@ static_checkpatch()
             # Remplace les "%2B" par "+"
             PATCH_NAME=$(echo ${p} | sed s!%2B!\+!g)
 
-           if [ ! -f ${LFS_PKG_DIR}/${PATCH_NAME} ]; then
-               wget_wrapper ${PATCHES_URL} ${PATCH_NAME}
+           if [ ! -f ${LFS_PATCHES_DIR}/${PATCH_NAME} ]; then
+                wget_wrapper ${PATCHES_URL} ${PATCH_NAME} ${LFS_PATCHES_DIR}
            fi
        done
     fi
@@ -277,11 +298,6 @@ static_getpatch()
         # Checking if patch is available from CLFS.
         static_checkpatch ${PACK} ${CLFS_PATCHES_LIST} ${CLFS_PATCHES_URL}
     fi
-
-    if [ -n "${USE_HV_PATCHES}" ]; then
-        # Checking if patch is available from hugovil.com.
-        static_checkpatch ${PACK} ${HV_PATCHES_LIST} ${HV_PATCHES_URL}
-    fi
 }
 
 detect_file_not_found()
@@ -484,7 +500,7 @@ fpkg()
                 fi
                 if [ -z "${FILE_EXT}" ]; then
                     # Default file extension is tar.gz
-                    FILE_EXT="tar.gz"
+                    FILE_EXT="tar.xz"
                 fi
                 ;;
             gnome)
@@ -663,7 +679,7 @@ fpkg()
 
         # Rename any patch fetched (in fpkg call) and replace SOURCE by TARGET
         # in patch name.
-        local PATCHES_LIST="${LFS_PKG_DIR}/${SRC_FILENAME}-*.patch"
+        local PATCHES_LIST="${LFS_PATCHES_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}