Fix problem when source (build) directory is not present
[hvlinux.git] / functions / ipkg
index 77f51c4..ca159bd 100644 (file)
@@ -26,6 +26,12 @@ unset -f hvbuild_post
 
 ipkg_decompress_package()
 {
+    # Removing old build directory (if any)
+    if [ -d ${LFS_TMP}/${PACKAGE} ]; then
+        echo "Removing old build directory"
+       rm -rf ${LFS_TMP}/${PACKAGE}
+    fi
+
     echo "Decompressing package"
     decompress_package ${PACKAGE}
 
@@ -39,26 +45,16 @@ ipkg_decompress_package()
     # Saving package source size in global variable.
     SOURCE_SIZE=$(du -h -s ${LFS_TMP}/${PACKAGE} | awk '{ print $1 }')
 
-    # Removing old build directory (if any)
-    if [ -d ${LFS_TMP}/${PACKAGE}-build ]; then
-        echo "Removing old build directory"
-       rm -rf ${LFS_TMP}/${PACKAGE}-build
+    # Creating build directory (if applicable).
+    if [ ! -d ${BUILD_DIR} ]; then
+        mkdir -p ${BUILD_DIR}
     fi
-
-    # Creating build directory
-    mkdir -v ${LFS_TMP}/${PACKAGE}-build
 }
 
 # Default configure function
 hvconfig()
 {
-    if [ "x${IPKG_MODE}" = "xacnb" -o "x${IPKG_MODE}" = "xpm" ]; then
-        # Broken autoconf package that must build in source dir, or Perl module.
-        cd ${LFS_TMP}/${PACKAGE}
-    else
-        # Standard autoconf mode
-        cd ${LFS_TMP}/${PACKAGE}-build
-    fi
+    cd ${BUILD_DIR}
 
     if [ "x${IPKG_MODE}" = "xpm" ]; then
         # Configure Perl module.
@@ -66,23 +62,30 @@ hvconfig()
         # accept the default configuration.
         perl Makefile.PL -n ${CONFIGURE_OPTS}
     else
+        if [ ! -f ${SRC_DIR}/configure ]; then
+            if [ -f ${SRC_DIR}/configure.in -o \
+                    -f ${SRC_DIR}/configure.ac ]; then
+                # Try to automatically generate missing configure script.
+                touch ${SRC_DIR}/{NEWS,README,AUTHORS} # Required files
+                autoreconf -vi ${SRC_DIR}
+            fi
+        fi
+
         # Standard configure script
-        ${LFS_TMP}/${PACKAGE}/configure ${CONFIGURE_OPTS}
+        ${SRC_DIR}/configure ${CONFIGURE_OPTS}
     fi
 }
 
 # Default build function
 hvbuild()
 {
-    if [ "x${IPKG_MODE}" = "xacnb" -o \
-        "x${IPKG_MODE}" = "xnoac" -o \
-        "x${IPKG_MODE}" = "xpm" ]; then
-        # Broken autoconf package that must build in source dir, or Perl module.
-        cd ${LFS_TMP}/${PACKAGE}
-    fi
-
     ${HVMAKE}
-    ${HVMAKE} install
+
+    if [ -n "${INSTALL_DIR}" ]; then
+        ${HVMAKE} DESTDIR=${INSTALL_DIR} install
+    else
+        ${HVMAKE} install
+    fi
 }
 
 # Default patch applying function
@@ -97,20 +100,29 @@ ipkg_finish()
     # Make sure to return to scripts directory
     cd ${SCRDIR}
 
-    # Saving package build size in global variable
-    BUILD_SIZE=$(du -h -s -c ${LFS_TMP}/${PACKAGE} ${LFS_TMP}/${PACKAGE}-build | grep total | awk '{ print $1 }')
+    if [ "x${DECOMPRESS}" = "x1" ]; then
+        DU_FOLDERS="${LFS_TMP}/${PACKAGE}"
+        if [ -d ${LFS_TMP}/${PACKAGE}-build ]; then
+            DU_FOLDERS+=" ${LFS_TMP}/${PACKAGE}-build"
+        fi
 
-    # Some scripts need to preserve the source or build directory. They can
-    # do so by renaming them.
-    if [ -d ${LFS_TMP}/${PACKAGE} ]; then
-       # Removing source directory
-        echo "Removing source directory"
-       rm -rf ${LFS_TMP}/${PACKAGE}
-    fi
-    if [ -d ${LFS_TMP}/${PACKAGE}-build ]; then
-       # Removing build directory
-        echo "Removing build directory"
-       rm -rf ${LFS_TMP}/${PACKAGE}-build
+        # Saving package build size in global variable
+        BUILD_SIZE=$(du -h -s -c ${DU_FOLDERS} | grep total | \
+            awk '{ print $1 }')
+
+        # Some scripts need to preserve the source or build directory. They can
+        # do so by renaming them.
+        if [ -d ${LFS_TMP}/${PACKAGE} ]; then
+           # Removing source directory
+            echo "Removing source directory"
+           rm -rf ${LFS_TMP}/${PACKAGE}
+        fi
+        if [ -d ${LFS_TMP}/${PACKAGE}-build ]; then
+            echo "Removing build directory"
+            rm -rf ${LFS_TMP}/${PACKAGE}-build
+        fi
+    else
+        BUILD_SIZE="Unknown"
     fi
 }
 
@@ -121,16 +133,25 @@ ipkg_script()
     if [ $# -eq 1 ]; then
         # Use supplied script name
         PACKAGE_DEF=${SCRDIR}/pkg/${1}
+        CUSTOM_PACKAGE_DEF=yes
     else
         # Use default script name
         PACKAGE_DEF=${SCRDIR}/pkg/$(get_pkg_name ${PACKAGE})
+        CUSTOM_PACKAGE_DEF=no
     fi
 
-    ipkg_decompress_package
+    if [ "x${DECOMPRESS}" = "x1" ]; then
+        ipkg_decompress_package
+    else
+        SOURCE_SIZE="Unknown"
+    fi
 
     if [ -f ${PACKAGE_DEF} ]; then
         echo "Load custom package functions and definitions from ${PACKAGE_DEF}"
         source ${PACKAGE_DEF}
+    elif [ "x${CUSTOM_PACKAGE_DEF}" = "xyes" ]; then
+        echo "Missing custom package definition file ${PACKAGE_DEF}"
+        return 1
     fi
 
     # Execute pre-patch function if applicable
@@ -139,7 +160,9 @@ ipkg_script()
         hvpatch_pre
     fi
 
-    hvpatch
+    if [ "x${DECOMPRESS}" = "x1" ]; then
+        hvpatch
+    fi
 
     # Execute pre-configure function if applicable
     if function_exists hvconfig_pre ; then
@@ -151,18 +174,29 @@ ipkg_script()
     if function_exists hvconfig_cache ; then
         echo "Running configure cache script"
         hvconfig_cache
-        CONFIGURE_OPTS="\
-            ${CONFIGURE_OPTS} \
-            --cache-file=${LFS_TMP}/${PACKAGE}-build/config.cache"
-    fi
-
-    if [ -x ${LFS_TMP}/${PACKAGE}/configure ]; then
-        # Add option --disable-dependency-tracking if supported
-        if cat ${LFS_TMP}/${PACKAGE}/configure | \
-            grep -q "disable-dependency-tracking"; then
-            CONFIGURE_OPTS="\
-                ${CONFIGURE_OPTS} \
-                --disable-dependency-tracking"
+        CONFIGURE_OPTS+=" --cache-file=${BUILD_DIR}/config.cache"
+    fi
+
+    if [ -x ${SRC_DIR}/configure ]; then
+        if [ "x${ENABLE_DEPENDENCY_TRACKING}" = "x0" ]; then
+            # Add option --disable-dependency-tracking if supported
+            if cat ${SRC_DIR}/configure | \
+                grep -q "disable-dependency-tracking"; then
+                CONFIGURE_OPTS+=" --disable-dependency-tracking"
+            fi
+        fi
+
+        # Remove option --sysconfdir=... if not supported
+        if ! cat ${SRC_DIR}/configure | grep -q "sysconfdir"; then
+            # Split on space, one per line.
+            # Remove line --sysconfdir=...
+            # Join separate lines on one line
+            # Remove trailing space
+            CONFIGURE_OPTS=$(echo ${CONFIGURE_OPTS} | \
+                tr -s " " "\n" | \
+                grep -v "\-\-sysconfdir=" | \
+                tr -s "\n" " " | \
+                sed "s/ $//")
         fi
     fi
 
@@ -180,6 +214,9 @@ ipkg_script()
         hvconfig_post
     fi
 
+    if [ -d ${BUILD_DIR} ]; then
+        cd ${BUILD_DIR}
+    fi
     hvbuild
 
     # Execute post-build function if applicable