Added modified version of patch from gentoo bug #238707
[genkernel.git] / gen_determineargs.sh
index 55053b279344b24d22608f5a0889b20fb728bedd..0fd2e7d13f3b6672c32b5ce6a2b8874976220a1e 100644 (file)
 #!/bin/bash
 
 get_KV() {
-       local SUB
-       local EXV
-       
-       VER=`grep ^VERSION\ \= ${KERNEL_DIR}/Makefile | awk '{ print $3 };'`
-       PAT=`grep ^PATCHLEVEL\ \= ${KERNEL_DIR}/Makefile | awk '{ print $3 };'`
-       SUB=`grep ^SUBLEVEL\ \= ${KERNEL_DIR}/Makefile | awk '{ print $3 };'`
-       EXV=`grep ^EXTRAVERSION\ \= ${KERNEL_DIR}/Makefile | sed -e "s/EXTRAVERSION =//" -e "s/ //g"`
-       KV=${VER}.${PAT}.${SUB}${EXV}
-}
-
-determine_real_args() {
-       if [ "${CMD_DEBUGFILE}" != '' ]
+       if [ "${NO_KERNEL_SOURCES}" = '1' -a -e "${KERNCACHE}" ]
        then
-               DEBUGFILE="${CMD_DEBUGFILE}"
-       fi
-
-       if [ "${CMD_MAKEOPTS}" != '' ]
-       then
-               MAKEOPTS="${CMD_MAKEOPTS}"
-       fi
-
-       if [ "${CMD_KERNELDIR}" != '' ]
-       then
-               KERNEL_DIR=${CMD_KERNELDIR}
+               /bin/tar -xj -C ${TEMP} -f ${KERNCACHE} kerncache.config 
+               if [ -e ${TEMP}/kerncache.config ]
+               then
+                       VER=`grep ^VERSION\ \= ${TEMP}/kerncache.config | awk '{ print $3 };'`
+                       PAT=`grep ^PATCHLEVEL\ \= ${TEMP}/kerncache.config | awk '{ print $3 };'`
+                       SUB=`grep ^SUBLEVEL\ \= ${TEMP}/kerncache.config | awk '{ print $3 };'`
+                       EXV=`grep ^EXTRAVERSION\ \= ${TEMP}/kerncache.config | sed -e "s/EXTRAVERSION =//" -e "s/ //g"`
+                       LOV=`grep ^CONFIG_LOCALVERSION\= ${TEMP}/kerncache.config | sed -e "s/CONFIG_LOCALVERSION=\"\(.*\)\"/\1/"`
+                       KV=${VER}.${PAT}.${SUB}${EXV}${LOV}
+               else
+                       gen_die "Could not find kerncache.config in the kernel cache! Exiting."
+               fi
        else
-               KERNEL_DIR=${DEFAULT_KERNEL_SOURCE}
-       fi
-       [ "${KERNEL_DIR}" = '' ] && gen_die 'No kernel source directory!'
-
-       get_KV
-
-       if [ "${CMD_KERNEL_MAKE}" != '' ]
-       then
-               KERNEL_MAKE="${CMD_KERNEL_MAKE}"
-       fi
+               # Configure the kernel
+               # If BUILD_KERNEL=0 then assume --no-clean, menuconfig is cleared
 
-       if [ "${KERNEL_MAKE}" = '' ]
-       then
-               KERNEL_MAKE='make'
-       fi
+               VER=`grep ^VERSION\ \= ${KERNEL_DIR}/Makefile | awk '{ print $3 };'`
+               PAT=`grep ^PATCHLEVEL\ \= ${KERNEL_DIR}/Makefile | awk '{ print $3 };'`
+               SUB=`grep ^SUBLEVEL\ \= ${KERNEL_DIR}/Makefile | awk '{ print $3 };'`
+               EXV=`grep ^EXTRAVERSION\ \= ${KERNEL_DIR}/Makefile | sed -e "s/EXTRAVERSION =//" -e "s/ //g" -e 's/\$([a-z]*)//gi'`
 
-       if [ "${CMD_UTILS_MAKE}" != '' ]
-       then
-               UTILS_MAKE="${CMD_UTILS_MAKE}"
-       fi
-
-       if [ "${UTILS_MAKE}" = '' ]
-       then
-               UTILS_MAKE='make'
-       fi
-
-       if [ "${CMD_KERNEL_CC}" != '' ]
-       then
-               KERNEL_CC="${CMD_KERNEL_CC}"
-       fi
-
-       if [ "${CMD_KERNEL_LD}" != '' ]
-       then
-               KERNEL_LD="${CMD_KERNEL_LD}"
-       fi
-
-       if [ "${CMD_KERNEL_AS}" != '' ]
-       then
-               KERNEL_AS="${CMD_KERNEL_AS}"
-       fi
-
-       if [ "${CMD_UTILS_CC}" != '' ]
-       then
-               UTILS_CC="${CMD_UTILS_CC}"
-       fi
-
-       if [ "${CMD_UTILS_LD}" != '' ]
-       then
-               UTILS_LD="${CMD_UTILS_LD}"
-       fi
+               if [ -z "${SUB}" ]; 
+               then
+                       # Handle O= build directories
+                       KERNEL_SOURCE_DIR=`grep ^MAKEARGS\ \:\=  ${KERNEL_DIR}/Makefile | awk '{ print $4 };'`
+                       SUB=`grep ^SUBLEVEL\ \= ${KERNEL_SOURCE_DIR}/Makefile | awk '{ print $3 };'`
+                       EXV=`grep ^EXTRAVERSION\ \= ${KERNEL_SOURCE_DIR}/Makefile | sed -e "s/EXTRAVERSION =//" -e "s/ //g" -e 's/\$([a-z]*)//gi'`
+               fi
 
-       if [ "${CMD_UTILS_AS}" != '' ]
-       then
-               UTILS_AS="${CMD_UTILS_AS}"
+               cd ${KERNEL_DIR}
+               #compile_generic prepare kernel > /dev/null 2>&1
+               cd - > /dev/null 2>&1
+               [ -f "${KERNEL_DIR}/include/linux/version.h" ] && \
+                       VERSION_SOURCE="${KERNEL_DIR}/include/linux/version.h"
+               [ -f "${KERNEL_DIR}/include/linux/utsrelease.h" ] && \
+                       VERSION_SOURCE="${KERNEL_DIR}/include/linux/utsrelease.h"
+               # Handle new-style releases where version.h doesn't have UTS_RELEASE
+               if [ -f ${KERNEL_DIR}/include/config/kernel.release ]
+               then
+                       UTS_RELEASE=`cat ${KERNEL_DIR}/include/config/kernel.release`
+                       LOV=`echo ${UTS_RELEASE}|sed -e "s/${VER}.${PAT}.${SUB}${EXV}//"`
+                       KV=${VER}.${PAT}.${SUB}${EXV}${LOV}
+               elif [ -n "${VERSION_SOURCE}" ]
+               then
+                       UTS_RELEASE=`grep UTS_RELEASE ${VERSION_SOURCE} | sed -e 's/#define UTS_RELEASE "\(.*\)"/\1/'`
+                       LOV=`echo ${UTS_RELEASE}|sed -e "s/${VER}.${PAT}.${SUB}${EXV}//"`
+                       KV=${VER}.${PAT}.${SUB}${EXV}${LOV}
+               else
+                       LCV=`grep ^CONFIG_LOCALVERSION= ${KERNEL_DIR}/.config | sed -r -e "s/.*=\"(.*)\"/\1/"`
+                       KV=${VER}.${PAT}.${SUB}${EXV}${LCV}
+               fi
        fi
+}
 
+determine_real_args() {
+       print_info 4 "Resolving config file, command line, and arch default settings."
+
+       #                          Config File          Command Line             Arch Default
+       #                          -----------          ------------             ------------
+       set_config_with_override 2 DEBUGFILE            CMD_DEBUGFILE
+       set_config_with_override 2 KERNEL_DIR           CMD_KERNEL_DIR           "${DEFAULT_KERNEL_SOURCE}"
+       set_config_with_override 1 NO_KERNEL_SOURCES    CMD_NO_KERNEL_SOURCES
+       set_config_with_override 2 KNAME                CMD_KERNNAME             "genkernel"
+
+       set_config_with_override 2 MAKEOPTS             CMD_MAKEOPTS             "$DEFAULT_MAKEOPTS"
+       set_config_with_override 2 KERNEL_MAKE          CMD_KERNEL_MAKE          "$DEFAULT_KERNEL_MAKE"
+       set_config_with_override 2 UTILS_MAKE           CMD_UTILS_MAKE           "$DEFAULT_UTILS_MAKE"
+       set_config_with_override 2 KERNEL_CC            CMD_KERNEL_CC            "$DEFAULT_KERNEL_CC"
+       set_config_with_override 2 KERNEL_LD            CMD_KERNEL_LD            "$DEFAULT_KERNEL_LD"
+       set_config_with_override 2 KERNEL_AS            CMD_KERNEL_AS            "$DEFAULT_KERNEL_AS"
+       set_config_with_override 2 UTILS_CC             CMD_UTILS_CC             "$DEFAULT_UTILS_CC"
+       set_config_with_override 2 UTILS_LD             CMD_UTILS_LD             "$DEFAULT_UTILS_LD"
+       set_config_with_override 2 UTILS_AS             CMD_UTILS_AS             "$DEFAULT_UTILS_AS"
+
+       set_config_with_override 2 KERNEL_CROSS_COMPILE CMD_KERNEL_CROSS_COMPILE
+       set_config_with_override 2 UTILS_CROSS_COMPILE  CMD_UTILS_CROSS_COMPILE
+       set_config_with_override 2 BOOTDIR              CMD_BOOTDIR              "/boot"
+
+       set_config_with_override 1 SPLASH               CMD_SPLASH
+       set_config_with_override 1 POSTCLEAR            CMD_POSTCLEAR
+       set_config_with_override 1 MRPROPER             CMD_MRPROPER
+       set_config_with_override 1 MENUCONFIG           CMD_MENUCONFIG
+       set_config_with_override 1 CLEAN                CMD_CLEAN
+
+       set_config_with_override 2 MINKERNPACKAGE       CMD_MINKERNPACKAGE
+       set_config_with_override 2 MODULESPACKAGE       CMD_MODULESPACKAGE
+       set_config_with_override 2 KERNCACHE            CMD_KERNCACHE
+       set_config_with_override 1 NORAMDISKMODULES     CMD_NORAMDISKMODULES
+       set_config_with_override 1 ALLRAMDISKMODULES    CMD_ALLRAMDISKMODULES
+       set_config_with_override 2 INITRAMFS_OVERLAY    CMD_INITRAMFS_OVERLAY
+       set_config_with_override 1 MOUNTBOOT            CMD_MOUNTBOOT
+       set_config_with_override 1 BUILD_STATIC         CMD_STATIC
+       set_config_with_override 1 SAVE_CONFIG          CMD_SAVE_CONFIG
+       set_config_with_override 1 SYMLINK              CMD_SYMLINK
+       set_config_with_override 2 INSTALL_MOD_PATH     CMD_INSTALL_MOD_PATH
+       set_config_with_override 1 OLDCONFIG            CMD_OLDCONFIG
+       set_config_with_override 1 LVM                  CMD_LVM
+       set_config_with_override 1 EVMS                 CMD_EVMS
+       set_config_with_override 1 DMRAID               CMD_DMRAID
+       set_config_with_override 1 BUSYBOX              CMD_BUSYBOX              "yes"
+       set_config_with_override 1 UNIONFS                              CMD_UNIONFS
+       set_config_with_override 1 DISKLABEL            CMD_DISKLABEL
+       set_config_with_override 1 LUKS                 CMD_LUKS
+       set_config_with_override 1 MDADM                CMD_MDADM
+       set_config_with_override 1 FIRMWARE             CMD_FIRMWARE
+       set_config_with_override 2 FIRMWARE_DIR         CMD_FIRMWARE_DIR         "/lib/firmware"
+       set_config_with_override 2 FIRMWARE_FILES       CMD_FIRMWARE_FILES
+       set_config_with_override 1 INTEGRATED_INITRAMFS CMD_INTEGRATED_INITRAMFS
+       set_config_with_override 1 GENZIMAGE            CMD_GENZIMAGE
+       set_config_with_override 1 KEYMAP               CMD_KEYMAP               "yes"
+       set_config_with_override 1 DOKEYMAPAUTO         CMD_DOKEYMAPAUTO
+
+       BOOTDIR=`arch_replace "${BOOTDIR}"`
+       BOOTDIR=${BOOTDIR%/}    # Remove any trailing slash
+
+       CACHE_DIR=`arch_replace "${CACHE_DIR}"`
+       BUSYBOX_BINCACHE=`cache_replace "${BUSYBOX_BINCACHE}"`
+       DEVICE_MAPPER_BINCACHE=`cache_replace "${DEVICE_MAPPER_BINCACHE}"`
+       LVM_BINCACHE=`cache_replace "${LVM_BINCACHE}"`
+       DMRAID_BINCACHE=`cache_replace "${DMRAID_BINCACHE}"`
+       BLKID_BINCACHE=`cache_replace "${BLKID_BINCACHE}"`
+       FUSE_BINCACHE=`cache_replace "${FUSE_BINCACHE}"`
+       UNIONFS_FUSE_BINCACHE=`cache_replace "${UNIONFS_FUSE_BINCACHE}"`
+  
        DEFAULT_KERNEL_CONFIG=`arch_replace "${DEFAULT_KERNEL_CONFIG}"`
        BUSYBOX_CONFIG=`arch_replace "${BUSYBOX_CONFIG}"`
        BUSYBOX_BINCACHE=`arch_replace "${BUSYBOX_BINCACHE}"`
-       MODULE_INIT_TOOLS_BINCACHE=`arch_replace "${MODULE_INIT_TOOLS_BINCACHE}"`
-       MODUTILS_BINCACHE=`arch_replace "${MODUTILS_BINCACHE}"`
-       DIETLIBC_BINCACHE=`arch_replace "${DIETLIBC_BINCACHE}"`
-       DIETLIBC_BINCACHE_TEMP=`arch_replace "${DIETLIBC_BINCACHE_TEMP}"`
-       DEVFSD_BINCACHE=`arch_replace "${DEVFSD_BINCACHE}"`
-       DEVFSD_CONF_BINCACHE=`arch_replace "${DEVFSD_CONF_BINCACHE}"`
+       DEVICE_MAPPER_BINCACHE=`arch_replace "${DEVICE_MAPPER_BINCACHE}"`
+       LVM_BINCACHE=`arch_replace "${LVM_BINCACHE}"`
+       DMRAID_BINCACHE=`arch_replace "${DMRAID_BINCACHE}"`
+       BLKID_BINCACHE=`arch_replace "${BLKID_BINCACHE}"`
+       FUSE_BINCACHE=`arch_replace "${FUSE_BINCACHE}"`
+       UNIONFS_FUSE_BINCACHE=`arch_replace "${UNIONFS_FUSE_BINCACHE}"`
        
-       if [ "${CMD_BOOTSPLASH}" != '' ]
-       then
-               BOOTSPLASH=${CMD_BOOTSPLASH}
-       fi
-
-       if isTrue ${BOOTSPLASH}
+       if [ "${NO_KERNEL_SOURCES}" != "1" ]
        then
-               BOOTSPLASH=1
-       else
-               BOOTSPLASH=0
+               if [ ! -d ${KERNEL_DIR} ]
+               then
+                       gen_die "kernel source directory \"${KERNEL_DIR}\" was not found!"
+               fi
        fi
 
-       if isTrue ${COMPRESS_INITRD}
+       if [ -z "${KERNCACHE}" ]
        then
-               COMPRESS_INITRD=1
+               if [ "${KERNEL_DIR}" = '' -a "${NO_KERNEL_SOURCES}" != "1" ]
+               then
+                       gen_die 'No kernel source directory!'
+               fi
+               if [ ! -e "${KERNEL_DIR}" -a "${NO_KERNEL_SOURCES}" != "1" ]
+               then
+                       gen_die 'No kernel source directory!'
+               fi
        else
-               COMPRESS_INITRD=0
+               if [ "${KERNEL_DIR}" = '' ]
+               then
+                       gen_die 'Kernel Cache specified but no kernel tree to verify against!'
+               fi
        fi
 
-       if [ "${CMD_MRPROPER}" != '' ]
-       then
-               MRPROPER="${CMD_MRPROPER}"
-       fi
-       if [ "${CMD_MENUCONFIG}" != '' ]
-       then
-               MENUCONFIG="${CMD_MENUCONFIG}"
-       fi
+       # Special case:  If --no-clean is specified on the command line, 
+       # imply --no-mrproper.
        if [ "${CMD_CLEAN}" != '' ]
        then
-               CLEAN="${CMD_CLEAN}"
                if ! isTrue ${CLEAN}
                then
                        MRPROPER=0
                fi
        fi
-
-       if [ "${CMD_MINKERNPACKAGE}" != '' ]
-       then
-               MINKERNPACKAGE="${CMD_MINKERNPACKAGE}"
-       fi
-
-       if [ "${CMD_NOINITRDMODULES}" != '' ]
-       then
-               NOINITRDMODULES="${CMD_NOINITRDMODULES}"
-       fi
-
-       if [ "${CMD_MOUNTBOOT}" != '' ]
+       
+       if [ -n "${MINKERNPACKAGE}" ]
        then
-               MOUNTBOOT="${CMD_MOUNTBOOT}"
+               mkdir -p `dirname ${MINKERNPACKAGE}`
        fi
-
-       if isTrue ${MOUNTBOOT}
+       
+       if [ -n "${MODULESPACKAGE}" ]
        then
-               MOUNTBOOT=1
-       else
-               MOUNTBOOT=0
+               mkdir -p `dirname ${MODULESPACKAGE}`
        fi
 
-       if [ "${CMD_SAVE_CONFIG}" != '' ]
+       if [ -n "${KERNCACHE}" ]
        then
-               SAVE_CONFIG="${CMD_SAVE_CONFIG}"
+               mkdir -p `dirname ${KERNCACHE}`
        fi
 
-       if isTrue ${SAVE_CONFIG}
-       then
-               ${SAVE_CONFIG}=1
-       else
-               ${SAVE_CONFIG}=0
-       fi
-  
-       if [ "${CMD_INSTALL_MOD_PATH}" != '' ]
+       if ! isTrue "${BUILD_RAMDISK}"
        then
-               INSTALL_MOD_PATH="${CMD_INSTALL_MOD_PATH}"
+               INTEGRATED_INITRAMFS=0
        fi
+       
+       get_KV
 }