Add dia
[hvlinux.git] / functions / fpkg
index dfbafae..ee290c5 100644 (file)
@@ -90,6 +90,7 @@ wget_wrapper()
     local URL=${1}
     local SOURCE=${2}
     local DESTDIR=${LFS_PKG_DIR}
+    local wget_status
 
     if [ ${#} -eq 3 ]; then
         DESTDIR=${3}
@@ -154,17 +155,24 @@ wget_wrapper()
 # Arg. #2: Destination filename.
 static_fetch_patches_list()
 {
+    local wget_status
+
     PATCHES_URL=${1}
     PATCHES_LIST_FILENAME=${2}
 
     # Appending a slash (/) will download the directory content as a file named
     # index.html
-    ${WGETCMD} "${PATCHES_URL}/" &&
+    ${WGETCMD} "${PATCHES_URL}/"
+    wget_status=$?
 
     # Append log to global log file
-    cat ${WGET_LOG_FILE} >> ${LFS_LOG_FILE} &&
+    cat ${WGET_LOG_FILE} >> ${LFS_LOG_FILE}
 
-    mv ${LFS_PKG_DIR}/index.html ${PATCHES_LIST_FILENAME}
+    if [ ${wget_status} -eq 0 ]; then
+        mv ${LFS_PKG_DIR}/index.html ${PATCHES_LIST_FILENAME}
+    else
+        return 1
+    fi
 }
 
 # Arg. #1: If "test" is specified, set TEST_INTEGRITY to 1
@@ -208,23 +216,23 @@ update_packages_init()
        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}
-    fi
+    # Temporary deactivate error checking.
+    set +e
 
-    if [ -n "${USE_BLFS_PATCHES}" ]; then
-        # Getting list of all patches from BLFS server.
-        rcmd "Fetching BLFS patches list" static_fetch_patches_list \
-            ${BLFS_PATCHES_URL} ${BLFS_PATCHES_LIST}
-    fi
+    # Getting list of all patches from LFS server.
+    rcmd "Fetching LFS  patches list" static_fetch_patches_list \
+        ${LFS_PATCHES_URL} ${LFS_PATCHES_LIST}
 
-    if [ -n "${USE_CLFS_PATCHES}" ]; then
-        # Getting list of all patches from CLFS server.
-        rcmd "Fetching CLFS patches list" static_fetch_patches_list \
-            ${CLFS_PATCHES_URL} ${CLFS_PATCHES_LIST}
-    fi
+    # Getting list of all patches from BLFS server.
+    rcmd "Fetching BLFS patches list" static_fetch_patches_list \
+        ${BLFS_PATCHES_URL} ${BLFS_PATCHES_LIST}
+
+    # Getting list of all patches from CLFS server.
+    rcmd "Fetching CLFS patches list" static_fetch_patches_list \
+        ${CLFS_PATCHES_URL} ${CLFS_PATCHES_LIST}
+
+    # Reactivate error checking.
+    set -e
 }
 
 # Get patch for package if it is not in the repository
@@ -237,6 +245,11 @@ static_checkpatch()
     local PATCHES_LIST=${2}
     local PATCHES_URL=${3}
 
+    # Make sure patch list file exists
+    if [ ! -f ${PATCHES_LIST} ]; then
+        return
+    fi
+
     # Remplace les "+" par "%2B"
     local PACK_URL=$(echo $PACK | sed s!\+!%2B!g)
 
@@ -276,20 +289,14 @@ static_getpatch()
        return 1
     fi
 
-    if [ -n "${USE_LFS_PATCHES}" ]; then
-        # Checking if patch is available from LFS.
-        static_checkpatch ${PACK} ${LFS_PATCHES_LIST} ${LFS_PATCHES_URL}
-    fi
+    # Checking if patch is available from LFS.
+    static_checkpatch ${PACK} ${LFS_PATCHES_LIST} ${LFS_PATCHES_URL}
 
-    if [ -n "${USE_BLFS_PATCHES}" ]; then
-        # Checking if patch is available from BLFS.
-        static_checkpatch ${PACK} ${BLFS_PATCHES_LIST} ${BLFS_PATCHES_URL}
-    fi
+    # Checking if patch is available from BLFS.
+    static_checkpatch ${PACK} ${BLFS_PATCHES_LIST} ${BLFS_PATCHES_URL}
 
-    if [ -n "${USE_CLFS_PATCHES}" ]; then
-        # Checking if patch is available from CLFS.
-        static_checkpatch ${PACK} ${CLFS_PATCHES_LIST} ${CLFS_PATCHES_URL}
-    fi
+    # Checking if patch is available from CLFS.
+    static_checkpatch ${PACK} ${CLFS_PATCHES_LIST} ${CLFS_PATCHES_URL}
 }
 
 detect_file_not_found()
@@ -331,35 +338,50 @@ static_getpkg()
         PREFERRED_EXT="${DEFAULT_ARCH_EXT_LIST}"
     fi
 
-    for arch_ext in ${PREFERRED_EXT}; do
-        wget_wrapper ${URL} ${PACK}.${arch_ext}
-        wget_wrapper_status=$?
+    wget_wrapper_status=
+    url_list="${URL}"
 
-        if [ ${wget_wrapper_status} -eq 1 ]; then
-            return 1;
-        fi
+    if [ x"${URL}" != x"${HV_PACKAGES_URL}" ]; then
+        url_list+=" ${HV_PACKAGES_URL}"
+    fi
 
-        if [ ${wget_wrapper_status} -eq 2 ]; then
-            continue;
-        fi
+    for url in ${url_list}; do
+        for arch_ext in ${PREFERRED_EXT}; do
+            wget_wrapper ${url} ${PACK}.${arch_ext}
+            wget_wrapper_status=$?
 
-        # If we are here, it means the file was successfully downloaded.
-        FINAL_EXT=${arch_ext}
+            #if [ ${wget_wrapper_status} -eq 1 ]; then
+            #    return 1;
+            #fi
 
-        # Convert to bzip2 format if requested and if it is a tar/gz archive
-        if [ -n "${PREFER_BZIP2_ARCHIVE}" ]; then
-            if is_extension_tar_gzip "${arch_ext}" ; then
-                rcmd "Converting ${PACK}.${arch_ext} to bzip2 format" \
-                    gztobz2 ${LFS_PKG_DIR}/${PACK}.${arch_ext}
-                FINAL_EXT="tar.bz2"
+            if [ ${wget_wrapper_status} -eq 0 ]; then
+                break;
             fi
-        fi
+        done
 
-        return $?
+        if [ ${wget_wrapper_status} -eq 0 ]; then
+            break;
+        fi
     done
 
     # Failure or file not found
-    return 1
+    if [ ${wget_wrapper_status} -gt 0 ]; then
+        return 1;
+    fi
+
+    # If we are here, it means the file was successfully downloaded.
+    FINAL_EXT=${arch_ext}
+
+    # Convert to bzip2 format if requested and if it is a tar/gz archive
+    if [ -n "${PREFER_BZIP2_ARCHIVE}" ]; then
+        if is_extension_tar_gzip "${arch_ext}" ; then
+            rcmd "Converting ${PACK}.${arch_ext} to bzip2 format" \
+                 gztobz2 ${LFS_PKG_DIR}/${PACK}.${arch_ext}
+            FINAL_EXT="tar.bz2"
+        fi
+    fi
+
+    return 0
 }
 
 # Test integrity of archive
@@ -418,7 +440,14 @@ test_archive_integrity()
 #            pm (Perl module via CPAN)
 #            fd (freedesktop.org)
 #   -o     Option specific to mode
-#   -s     Subdirectory on server
+#   -s DIR Subdirectory on server
+#   -v NUM Subdirectory on server is equal to package version. If -s option is specified, then
+#          append version number to value of -s argument:
+#            NUM=  Full version number
+#            NUM=1 First number of package version
+#            NUM=2 First two numbers of package version
+#          Ex: fpkg -s "v" -v 2 mypkg-1.2.3 http://mypkg.com would fetch from url:
+#                  http://mypkg.com/v1.2/mypkg-1.2.3.tar.bz2
 #   -w     First erase destination file if it exists (except in test mode)
 fpkg()
 {
@@ -430,9 +459,11 @@ fpkg()
     local MODE_OPT=""
     local SRC_DIR=""
     local FD_SUBDIR_FINAL=""
+    local VARG=""
+    unset VOPTION
     unset ERASE_FIRST
 
-    while getopts "d:e:f:m:o:s:w" flag ;do
+    while getopts "d:e:f:m:o:s:v:w" flag ;do
         case ${flag} in
            d)
                 # Fetch directory (where to put file)
@@ -455,6 +486,10 @@ fpkg()
            s)
                SRC_DIR=${OPTARG}
                 ;;
+            v)
+                VOPTION="y"
+                VARG=${OPTARG}
+                ;;
             w)
                 ERASE_FIRST="y"
                ;;
@@ -482,6 +517,29 @@ fpkg()
         local URL=${2}
     fi
 
+    if [ -n "${VOPTION}" ]; then
+        # Append version number to SRC_DIR (if specified)
+        case ${VARG} in
+            0)
+                # Full version number
+                SRC_DIR+="$(get_pkg_ver ${PACK})"
+                ;;
+           1)
+                SRC_DIR+="$(get_pkg_ver1 ${PACK})"
+                ;;
+            2)
+                SRC_DIR+="$(get_pkg_ver2 ${PACK})"
+                ;;
+            3)
+                SRC_DIR+="$(get_pkg_ver3 ${PACK})"
+                ;;
+            *)
+                echo "${FUNCNAME}(), invalid -v argument: ${VARG}"
+               return 1
+                ;;
+        esac
+    fi
+
     if [ -n "${MODE}" ]; then
         case ${MODE} in
            gnu)
@@ -633,10 +691,15 @@ fpkg()
             rm ${DEST_FILE}
         fi
 
-        if [ !  -f ${DEST_FILE} ]; then
+        if [ ! -f ${DEST_FILE} ]; then
             # Fetch package
             set +e
             static_getpkg ${SRC_FILENAME} ${URL} ${FILE_EXT}
+            rc=$?
+
+            if [ ${rc} -ne 0 ]; then
+                return ${rc};
+            fi
             set -e
 
             # Move file if source filename is not equal to package name and/or