genkernel: Add --kconfig to set specific kernel config options
[genkernel.git] / gen_determineargs.sh
1 #!/bin/bash
2 # $Id$
3
4 get_KV() {
5         if [ "${KERNEL_SOURCES}" = '0' -a -e "${KERNCACHE}" ]
6         then
7                 /bin/tar -xj -C ${TEMP} -f ${KERNCACHE} kerncache.config 
8                 if [ -e ${TEMP}/kerncache.config ]
9                 then
10                         VER=`grep ^VERSION\ \= ${TEMP}/kerncache.config | awk '{ print $3 };'`
11                         PAT=`grep ^PATCHLEVEL\ \= ${TEMP}/kerncache.config | awk '{ print $3 };'`
12                         SUB=`grep ^SUBLEVEL\ \= ${TEMP}/kerncache.config | awk '{ print $3 };'`
13                         EXV=`grep ^EXTRAVERSION\ \= ${TEMP}/kerncache.config | sed -e "s/EXTRAVERSION =//" -e "s/ //g"`
14                         LOV=`grep ^CONFIG_LOCALVERSION\= ${TEMP}/kerncache.config | sed -e "s/CONFIG_LOCALVERSION=\"\(.*\)\"/\1/"`
15                         KV=${VER}.${PAT}.${SUB}${EXV}${LOV}
16                 else
17                         gen_die "Could not find kerncache.config in the kernel cache! Exiting."
18                 fi
19         else
20                 # Configure the kernel
21                 # If BUILD_KERNEL=0 then assume --no-clean, menuconfig is cleared
22
23                 if [ ! -f "${KERNEL_DIR}"/Makefile ]
24                 then
25                         gen_die "Kernel Makefile (${KERNEL_DIR}/Makefile) missing.  Maybe re-install the kernel sources."
26                 fi
27
28                 VER=`grep ^VERSION\ \= ${KERNEL_DIR}/Makefile | awk '{ print $3 };'`
29                 PAT=`grep ^PATCHLEVEL\ \= ${KERNEL_DIR}/Makefile | awk '{ print $3 };'`
30                 SUB=`grep ^SUBLEVEL\ \= ${KERNEL_DIR}/Makefile | awk '{ print $3 };'`
31                 EXV=`grep ^EXTRAVERSION\ \= ${KERNEL_DIR}/Makefile | sed -e "s/EXTRAVERSION =//" -e "s/ //g" -e 's/\$([a-z]*)//gi'`
32
33                 if [ -z "${SUB}" ]
34                 then
35                         # Handle O= build directories
36                         KERNEL_SOURCE_DIR=`grep ^MAKEARGS\ \:\=  ${KERNEL_DIR}/Makefile | awk '{ print $4 };'`
37                         [ -z "${KERNEL_SOURCE_DIR}" ] && gen_die "Deriving \${KERNEL_SOURCE_DIR} failed"
38                         SUB=`grep ^SUBLEVEL\ \= ${KERNEL_SOURCE_DIR}/Makefile | awk '{ print $3 };'`
39                         EXV=`grep ^EXTRAVERSION\ \= ${KERNEL_SOURCE_DIR}/Makefile | sed -e "s/EXTRAVERSION =//" -e "s/ //g" -e 's/\$([a-z]*)//gi'`
40                 fi
41
42                 cd ${KERNEL_DIR}
43                 #compile_generic prepare kernel > /dev/null 2>&1
44                 cd - > /dev/null 2>&1
45                 [ -f "${KERNEL_DIR}/include/linux/version.h" ] && \
46                         VERSION_SOURCE="${KERNEL_DIR}/include/linux/version.h"
47                 [ -f "${KERNEL_DIR}/include/linux/utsrelease.h" ] && \
48                         VERSION_SOURCE="${KERNEL_DIR}/include/linux/utsrelease.h"
49                 # Handle new-style releases where version.h doesn't have UTS_RELEASE
50                 if [ -f ${KERNEL_DIR}/include/config/kernel.release ]
51                 then
52                         UTS_RELEASE=`cat ${KERNEL_DIR}/include/config/kernel.release`
53                         LOV=`echo ${UTS_RELEASE}|sed -e "s/${VER}.${PAT}.${SUB}${EXV}//"`
54                         KV=${VER}.${PAT}.${SUB}${EXV}${LOV}
55                 elif [ -n "${VERSION_SOURCE}" ]
56                 then
57                         UTS_RELEASE=`grep UTS_RELEASE ${VERSION_SOURCE} | sed -e 's/#define UTS_RELEASE "\(.*\)"/\1/'`
58                         LOV=`echo ${UTS_RELEASE}|sed -e "s/${VER}.${PAT}.${SUB}${EXV}//"`
59                         KV=${VER}.${PAT}.${SUB}${EXV}${LOV}
60                 else
61                         determine_config_file
62                         LCV=`grep ^CONFIG_LOCALVERSION= "${KERNEL_CONFIG}" | sed -r -e "s/.*=\"(.*)\"/\1/"`
63                         KV=${VER}.${PAT}.${SUB}${EXV}${LCV}
64                 fi
65         fi
66 }
67
68 determine_real_args() {
69         print_info 4 "Resolving config file, command line, and arch default settings."
70
71         #                               Dest / Config File   Command Line             Arch Default
72         #                               ------------------   ------------             ------------
73         set_config_with_override STRING LOGFILE              CMD_LOGFILE
74         set_config_with_override STRING KERNEL_DIR           CMD_KERNEL_DIR           "${DEFAULT_KERNEL_SOURCE}"
75         set_config_with_override BOOL   KERNEL_SOURCES       CMD_KERNEL_SOURCES       "yes"
76         set_config_with_override STRING KNAME                CMD_KERNNAME             "genkernel"
77
78         set_config_with_override STRING COMPRESS_INITRD      CMD_COMPRESS_INITRD      "$DEFAULT_COMPRESS_INITRD"
79         set_config_with_override STRING COMPRESS_INITRD_TYPE CMD_COMPRESS_INITRD_TYPE "$DEFAULT_COMPRESS_INITRD_TYPE"
80         set_config_with_override STRING MAKEOPTS             CMD_MAKEOPTS             "$DEFAULT_MAKEOPTS"
81         set_config_with_override STRING KERNEL_MAKE          CMD_KERNEL_MAKE          "$DEFAULT_KERNEL_MAKE"
82         set_config_with_override STRING UTILS_MAKE           CMD_UTILS_MAKE           "$DEFAULT_UTILS_MAKE"
83         set_config_with_override STRING KERNEL_CC            CMD_KERNEL_CC            "$DEFAULT_KERNEL_CC"
84         set_config_with_override STRING KERNEL_LD            CMD_KERNEL_LD            "$DEFAULT_KERNEL_LD"
85         set_config_with_override STRING KERNEL_AS            CMD_KERNEL_AS            "$DEFAULT_KERNEL_AS"
86         set_config_with_override STRING UTILS_CC             CMD_UTILS_CC             "$DEFAULT_UTILS_CC"
87         set_config_with_override STRING UTILS_LD             CMD_UTILS_LD             "$DEFAULT_UTILS_LD"
88         set_config_with_override STRING UTILS_AS             CMD_UTILS_AS             "$DEFAULT_UTILS_AS"
89
90         set_config_with_override STRING KERNEL_CROSS_COMPILE CMD_KERNEL_CROSS_COMPILE
91         set_config_with_override STRING UTILS_CROSS_COMPILE  CMD_UTILS_CROSS_COMPILE
92         set_config_with_override STRING BOOTDIR              CMD_BOOTDIR              "/boot"
93         set_config_with_override STRING KERNEL_OUTPUTDIR     CMD_KERNEL_OUTPUTDIR     "${KERNEL_DIR}"
94         set_config_with_override STRING MODPROBEDIR          CMD_MODPROBEDIR          "/etc/modprobe.d"
95
96         set_config_with_override BOOL   SPLASH               CMD_SPLASH
97         set_config_with_override BOOL   POSTCLEAR            CMD_POSTCLEAR
98         set_config_with_override BOOL   MRPROPER             CMD_MRPROPER
99         set_config_with_override BOOL   MENUCONFIG           CMD_MENUCONFIG
100         set_config_with_override BOOL   CLEAN                CMD_CLEAN
101
102         set_config_with_override STRING MINKERNPACKAGE       CMD_MINKERNPACKAGE
103         set_config_with_override STRING MODULESPACKAGE       CMD_MODULESPACKAGE
104         set_config_with_override STRING KERNCACHE            CMD_KERNCACHE
105         set_config_with_override BOOL   RAMDISKMODULES       CMD_RAMDISKMODULES        "yes"
106         set_config_with_override BOOL   ALLRAMDISKMODULES    CMD_ALLRAMDISKMODULES
107         set_config_with_override STRING INITRAMFS_OVERLAY    CMD_INITRAMFS_OVERLAY
108         set_config_with_override BOOL   MOUNTBOOT            CMD_MOUNTBOOT
109         set_config_with_override BOOL   BUILD_STATIC         CMD_STATIC
110         set_config_with_override BOOL   SAVE_CONFIG          CMD_SAVE_CONFIG
111         set_config_with_override BOOL   SYMLINK              CMD_SYMLINK
112         set_config_with_override STRING INSTALL_MOD_PATH     CMD_INSTALL_MOD_PATH
113         set_config_with_override BOOL   OLDCONFIG            CMD_OLDCONFIG
114         set_config_with_override BOOL   LVM                  CMD_LVM
115         set_config_with_override BOOL   DMRAID               CMD_DMRAID
116         set_config_with_override BOOL   ISCSI                CMD_ISCSI
117         set_config_with_override BOOL   BUSYBOX              CMD_BUSYBOX              "yes"
118         set_config_with_override BOOL   UNIONFS              CMD_UNIONFS
119         set_config_with_override BOOL   NETBOOT              CMD_NETBOOT
120         set_config_with_override STRING REAL_ROOT            CMD_REAL_ROOT
121         set_config_with_override BOOL   DISKLABEL            CMD_DISKLABEL
122         set_config_with_override BOOL   LUKS                 CMD_LUKS
123         set_config_with_override BOOL   GPG                  CMD_GPG
124         set_config_with_override BOOL   MDADM                CMD_MDADM
125         set_config_with_override STRING MDADM_CONFIG         CMD_MDADM_CONFIG
126         set_config_with_override BOOL   E2FSPROGS            CMD_E2FSPROGS            "no"
127         set_config_with_override BOOL   ZFS                  CMD_ZFS
128         set_config_with_override BOOL   VIRTIO               CMD_VIRTIO                           "no"
129         set_config_with_override BOOL   MULTIPATH            CMD_MULTIPATH
130         set_config_with_override BOOL   FIRMWARE             CMD_FIRMWARE
131         set_config_with_override STRING FIRMWARE_DIR         CMD_FIRMWARE_DIR         "/lib/firmware"
132         set_config_with_override STRING FIRMWARE_FILES       CMD_FIRMWARE_FILES
133         set_config_with_override BOOL   INTEGRATED_INITRAMFS CMD_INTEGRATED_INITRAMFS
134         set_config_with_override BOOL   GENZIMAGE            CMD_GENZIMAGE
135         set_config_with_override BOOL   KEYMAP               CMD_KEYMAP               "yes"
136         set_config_with_override BOOL   DOKEYMAPAUTO         CMD_DOKEYMAPAUTO
137         set_config_with_override STRING BUSYBOX_CONFIG       CMD_BUSYBOX_CONFIG
138         set_config_with_override BOOL   INSTALL              CMD_INSTALL              "yes"
139
140         BOOTDIR=`arch_replace "${BOOTDIR}"`
141         BOOTDIR=${BOOTDIR%/}    # Remove any trailing slash
142         MODPROBEDIR=${MODPROBEDIR%/}    # Remove any trailing slash
143
144         CACHE_DIR=`arch_replace "${CACHE_DIR}"`
145         BUSYBOX_BINCACHE=`cache_replace "${BUSYBOX_BINCACHE}"`
146         LVM_BINCACHE=`cache_replace "${LVM_BINCACHE}"`
147         MDADM_BINCACHE=`cache_replace "${MDADM_BINCACHE}"`
148         DMRAID_BINCACHE=`cache_replace "${DMRAID_BINCACHE}"`
149         ISCSI_BINCACHE=`cache_replace "${ISCSI_BINCACHE}"`
150         BLKID_BINCACHE=`cache_replace "${BLKID_BINCACHE}"`
151         FUSE_BINCACHE=`cache_replace "${FUSE_BINCACHE}"`
152         UNIONFS_FUSE_BINCACHE=`cache_replace "${UNIONFS_FUSE_BINCACHE}"`
153         GPG_BINCACHE=`cache_replace "${GPG_BINCACHE}"`
154
155         DEFAULT_KERNEL_CONFIG=`arch_replace "${DEFAULT_KERNEL_CONFIG}"`
156         BUSYBOX_CONFIG=`arch_replace "${BUSYBOX_CONFIG}"`
157         BUSYBOX_BINCACHE=`arch_replace "${BUSYBOX_BINCACHE}"`
158         LVM_BINCACHE=`arch_replace "${LVM_BINCACHE}"`
159         MDADM_BINCACHE=`arch_replace "${MDADM_BINCACHE}"`
160         DMRAID_BINCACHE=`arch_replace "${DMRAID_BINCACHE}"`
161         ISCSI_BINCACHE=`arch_replace "${ISCSI_BINCACHE}"`
162         BLKID_BINCACHE=`arch_replace "${BLKID_BINCACHE}"`
163         FUSE_BINCACHE=`arch_replace "${FUSE_BINCACHE}"`
164         UNIONFS_FUSE_BINCACHE=`arch_replace "${UNIONFS_FUSE_BINCACHE}"`
165         GPG_BINCACHE=`arch_replace "${GPG_BINCACHE}"`
166
167         if [ -n "${CMD_BOOTLOADER}" ]
168         then
169                 BOOTLOADER="${CMD_BOOTLOADER}"
170                 if [ "${CMD_BOOTLOADER}" != "${CMD_BOOTLOADER/:/}" ]
171                 then
172                         BOOTFS=`echo "${CMD_BOOTLOADER}" | cut -f2- -d:`
173                         BOOTLOADER=`echo "${CMD_BOOTLOADER}" | cut -f1 -d:`
174                 fi
175         fi
176
177         if [ "${KERNEL_SOURCES}" != "0" ]
178         then
179                 if [ ! -d ${KERNEL_DIR} ]
180                 then
181                         gen_die "kernel source directory \"${KERNEL_DIR}\" was not found!"
182                 fi
183         fi
184
185         if [ -z "${KERNCACHE}" ]
186         then
187                 if [ "${KERNEL_DIR}" = '' -a "${KERNEL_SOURCES}" != "0" ]
188                 then
189                         gen_die 'No kernel source directory!'
190                 fi
191                 if [ ! -e "${KERNEL_DIR}" -a "${KERNEL_SOURCES}" != "0" ]
192                 then
193                         gen_die 'No kernel source directory!'
194                 fi
195         else
196                 if [ "${KERNEL_DIR}" = '' ]
197                 then
198                         gen_die 'Kernel Cache specified but no kernel tree to verify against!'
199                 fi
200         fi
201
202         # Special case:  If --no-clean is specified on the command line,
203         # imply --no-mrproper.
204         if [ "${CMD_CLEAN}" != '' ]
205         then
206                 if ! isTrue ${CLEAN}
207                 then
208                         MRPROPER=0
209                 fi
210         fi
211
212         if [ -n "${MINKERNPACKAGE}" ]
213         then
214                 mkdir -p `dirname ${MINKERNPACKAGE}`
215         fi
216
217         if [ -n "${MODULESPACKAGE}" ]
218         then
219                 mkdir -p `dirname ${MODULESPACKAGE}`
220         fi
221
222         if [ -n "${KERNCACHE}" ]
223         then
224                 mkdir -p `dirname ${KERNCACHE}`
225         fi
226
227         if ! isTrue "${BUILD_RAMDISK}"
228         then
229                 INTEGRATED_INITRAMFS=0
230         fi
231
232         get_KV
233 }