2 #############################################################################
4 # This script gets called in two ways, the first is to set the
5 # default config up. The second "final" pass is to save any settings
6 # back to the vendors directory for permanent inclusion.
8 # Copyright (C) 2001 Lineo <davidm@snapgear.com>
9 # Copyright (C) 2001-2002 SnapGear <davidm@snapgear.com>
11 #############################################################################
13 # Some basic starting points
17 if [ -f ./.oldconfig ]
29 #############################################################################
31 # this code closely matches that in mkconfig, it has to !
36 KERNEL="`grep '^CONFIG_DEFAULTS_KERNEL_.*=y' ${CONFIG}`"
37 if [ -z "${KERNEL}" ]; then
40 KERNEL=${KERNEL##CONFIG_DEFAULTS_KERNEL_}
42 KERNEL="`echo ${KERNEL} | sed -e 's/_/./g'`"
44 [ -d linux-${KERNEL} ] || KERNEL="${KERNEL}.x"
48 var_isset() # because of make evironment inheritance, we must look in the file
50 if grep "$1=y" $CONFIG > /dev/null
59 echo $1 | tr '[\-\.\/\+a-z]' '[____A-Z]'
63 # remove line containing $1 append line $2 to file in $3
67 TMPR="/tmp/setconfig.$$"
70 cat "$3" | grep -v "$1" > "$TMPR"
82 # add some bits for convienence, must be done after each stage
85 replace_line CONFIG_VENDOR= "CONFIG_VENDOR=$VENDOR" .config
86 replace_line CONFIG_PRODUCT= "CONFIG_PRODUCT=$PRODUCT" .config
87 replace_line CONFIG_LINUXDIR= "CONFIG_LINUXDIR=$LINUXDIR" .config
88 replace_line CONFIG_LIBCDIR= "CONFIG_LIBCDIR=$LIBCDIR" .config
90 replace_line CONFIG_VENDOR "#define CONFIG_VENDOR \"$VENDOR\"" \
92 replace_line CONFIG_PRODUCT "#define CONFIG_PRODUCT \"$PRODUCT\"" \
94 replace_line CONFIG_LINUXDIR "#define CONFIG_LINUXDIR \"$LINUXDIR\"" \
96 replace_line CONFIG_LIBCDIR "#define CONFIG_LIBCDIR \"$LIBCDIR\"" \
98 replace_line VENDORS_AUTOCONF_INCLUDED \
99 "#define VENDORS_AUTOCONF_INCLUDED" autoconf.h
100 replace_line "#undef AUTOCONF_INCLUDED" "#undef AUTOCONF_INCLUDED" \
103 replace_line OLD_VENDOR "OLD_VENDOR=\"$VENDOR\"" ./.oldconfig
104 replace_line OLD_PRODUCT "OLD_PRODUCT=\"$PRODUCT\"" ./.oldconfig
105 replace_line OLD_LINUXDIR "OLD_LINUXDIR=\"$LINUXDIR\"" ./.oldconfig
106 replace_line OLD_LIBCDIR "OLD_LIBCDIR=\"$LIBCDIR\"" ./.oldconfig
109 #############################################################################
111 for i in vendors/*/*/config.arch
118 if [ -f "$VDIR/config.languages" ]
120 for j in `cat "$VDIR/config.languages"`
122 if var_isset "CONFIG_DEFAULTS_`fix_name $2`_`fix_name $3`_`fix_name $j`"
130 if var_isset "CONFIG_DEFAULTS_`fix_name $2`_`fix_name $3`"
138 #############################################################################
140 if [ "$VENDOR$PRODUCT" = "" ]; then
141 echo "You have not selected a Vendor/Product in the config." >&2
145 #############################################################################
150 # get_kernel defines KERNEL for us
152 LINUXDIR="linux-${KERNEL}"
154 echo "Unknown kernel configuration." >&2
158 if [ ! -d ${LINUXDIR} ]; then
159 echo "Missing kernel directory ${LINUXDIR}." >&2
163 #############################################################################
165 # libc verions (uC-libc is a special case to prevent confusion)
168 for i in uC-libc uClibc uClibc-* glibc glibc-*
170 if var_isset "CONFIG_DEFAULTS_LIBC_`fix_name $i`"
172 LIBCNAME="`echo ${i} | sed 's/-[0-9].*$//g'`"
175 None) LIBCDIR=""; LIBCBASEDIR="$LIBCDIR" ;;
176 uC-libc) LIBCDIR="libc"; LIBCBASEDIR="$LIBCDIR" ;;
177 *) LIBCDIR="$LIBCBASEDIR" ;;
183 #############################################################################
185 # Now install the configs, careful not dump on them unless they asked us to
188 if [ "$PASS" != "final" ]; then
191 # if the user touches any important settings then force a clean
192 # otherwise bad things can happen in the tree
194 if [ "$OLD_PRODUCT$OLD_VENDOR$OLD_LINUXDIR$OLD_LIBCDIR" != \
195 "$PRODUCT$VENDOR$LINUXDIR$LIBCDIR" ]; then
196 if [ -f .oldconfig ]; then
197 cp .config .config.save
198 cp .oldconfig .config
199 echo; echo; echo; echo
202 echo "**** Not cleaning tree ****"
203 echo; echo; echo; echo
206 echo "**** Cleaning tree for old settings ****"
207 echo "rm -rf romfs; make clean > /dev/null 2>&1"
208 echo; echo; echo; echo
210 make clean > /dev/null 2>&1
212 cp .config.save .config
215 [ "$LIBCDIR" ] && rm -f $LIBCDIR/.config
216 rm -f $LINUXDIR/.config
219 [ ! -d modules ] || rm -f modules/.config
223 # once before the oldconfig stuff is run
227 ln -s "vendors/$VENDOR/$PRODUCT/config.arch" config.arch
229 # make sure any auto config files are created now !
230 make -C config VENDOR="$VENDOR" PRODUCT="$PRODUCT" autoconf
232 if [ ! -f $LINUXDIR/.config ] || var_isset CONFIG_DEFAULTS_OVERRIDE; then
233 ARCH=$(echo -e "e:\\n\\t@echo \$(ARCH)\\ninclude config.arch" | \
234 ROOTDIR=$PWD make --no-print-directory -s -f - 2>/dev/null)
235 if [ -f "vendors/$VENDOR/$PRODUCT/config.$LINUXDIR" ]; then
236 cp "vendors/$VENDOR/$PRODUCT/config.$LINUXDIR" $LINUXDIR/.config
237 elif [ -f "vendors/$VENDOR/$PRODUCT/config.linux" ]; then
238 cp "vendors/$VENDOR/$PRODUCT/config.linux" $LINUXDIR/.config
240 elif [ -f "$LINUXDIR/arch/$ARCH/configs/${PRODUCT}_defconfig" ]; then
241 cp "$LINUXDIR/arch/$ARCH/configs/${PRODUCT}_defconfig" $LINUXDIR/.config
243 echo; echo; echo; echo
244 echo "*********************** NOTICE ****************************"
245 echo "There is no preset config for $LINUXDIR on platform $VENDOR/$PRODUCT."
246 echo "If you choose to continue you will have to setup a linux"
247 echo "config from scratch which is a very complex task."
248 echo "You will find it easier if you can copy a config.$LINUXDIR"
249 echo "from another platform that is similar."
251 echo "If you know what you are doing press <ENTER> otherwise"
252 echo "Type ^C to abort."
259 # everything about modules is optional, optional modules dir
260 # and optional modules config files
262 if [ -d modules ]; then
263 TMP=`expr $LINUXDIR : "[^-][^-]*\(-.*\)"`
264 if [ -f "vendors/$VENDOR/$PRODUCT/config.modules$TMP" ]
266 TMP="vendors/$VENDOR/$PRODUCT/config.modules$TMP"
268 TMP="vendors/$VENDOR/$PRODUCT/config.modules"
270 if [ ! -f modules/.config ] || var_isset CONFIG_DEFAULTS_OVERRIDE; then
271 if [ -f "$TMP" ]; then
272 cp "$TMP" modules/.config
274 make oldconfig_modules
278 if [ ! -f config/.config ] || var_isset CONFIG_DEFAULTS_OVERRIDE; then
279 TMP=`expr $LINUXDIR : "[^-][^-]*\(-.*\)"`
280 if [ -f "vendors/$VENDOR/$PRODUCT/config.vendor$TMP" ]
282 cp "vendors/$VENDOR/$PRODUCT/config.vendor$TMP" config/.config
283 elif [ -f "vendors/$VENDOR/$PRODUCT/config.vendor" ]
285 cp "vendors/$VENDOR/$PRODUCT/config.vendor" config/.config
287 echo; echo; echo; echo
288 echo "*********************** NOTICE ****************************"
289 echo "There is no preset config for applications on platform $VENDOR/$PRODUCT."
290 echo "If you choose to continue you will have to setup your"
291 echo "application config from scratch. You will find it easier"
292 echo "if you can copy a config.vendor file from another platform"
293 echo "that is similar."
295 echo "If you press <ENTER> you will be forced into the application"
296 echo "config screen as part of the config process."
297 echo "You may type ^C to abort."
300 # force config of user apps
302 replace_line CONFIG_DEFAULTS_VENDOR= \
303 "CONFIG_DEFAULTS_VENDOR=y" .config
305 make oldconfig_config
308 if [ -L lib/$LIBCBASEDIR ]; then
309 rm -f lib/$LIBCBASEDIR
312 if [ ! -e lib/$LIBCBASEDIR -a -e $LIBCBASEDIR/. ] ; then
313 ln -s "`pwd`/$LIBCBASEDIR" "lib/$LIBCBASEDIR"
316 case "$LIBCBASEDIR" in
318 if [ ! -f lib/$LIBCDIR/.config ] || var_isset CONFIG_DEFAULTS_OVERRIDE; then
319 TMP=`expr $LINUXDIR : "[^-][^-]*\(-.*\)"`
320 if [ -f "vendors/$VENDOR/$PRODUCT/config.$LIBCBASEDIR$TMP" ]; then
321 cp "vendors/$VENDOR/$PRODUCT/config.$LIBCBASEDIR$TMP" \
323 elif [ -f "vendors/$VENDOR/$PRODUCT/config.$LIBCNAME$TMP" ]; then
324 cp "vendors/$VENDOR/$PRODUCT/config.$LIBCNAME$TMP" \
326 elif [ -f "vendors/$VENDOR/$PRODUCT/config.$LIBCBASEDIR" ]; then
327 cp "vendors/$VENDOR/$PRODUCT/config.$LIBCBASEDIR" \
329 elif [ -f "vendors/$VENDOR/$PRODUCT/config.$LIBCNAME" ]; then
330 cp "vendors/$VENDOR/$PRODUCT/config.$LIBCNAME" \
333 echo; echo; echo; echo
334 echo "********************** NOTICE ***************************"
335 echo "There is no preset config for $LIBCBASEDIR on platform"
336 echo "$VENDOR/$PRODUCT. $LIBCBASEDIR cannot build without this."
337 echo "You should copy a config.$LIBCBASEDIR from another"
338 echo "target that is similar to yours to your chosen"
339 echo "vendor/../.. directory and check that it is correct."
341 echo "Once you have done that start the config process again."
344 make oldconfig_uClibc
349 # and once after to clean up
353 #############################################################################
355 # The override config option is always turned off when we are done so that
356 # someone doesn't get all upset that they lost their config files.
358 # Always add the VENDOR/PRODUCT dir for the build to work
361 if [ "$PASS" = "final" ]; then
366 # check for other config options
369 if var_isset CONFIG_DEFAULTS_OVERRIDE; then
370 sed 's/^\(CONFIG_DEFAULTS_OVERRIDE\)=y/# \1 is not set/' < .config \
372 cp .config.tmp .config
376 if var_isset CONFIG_DEFAULTS_VENDOR_UPDATE; then
378 if [ -f "vendors/$VENDOR/$PRODUCT/config.$LINUXDIR" ]
380 cp $LINUXDIR/.config "vendors/$VENDOR/$PRODUCT/config.$LINUXDIR"
382 cp $LINUXDIR/.config "vendors/$VENDOR/$PRODUCT/config.linux"
384 TMP=`expr $LINUXDIR : "[^-][^-]*\(-.*\)"`
385 if [ -f "vendors/$VENDOR/$PRODUCT/config.vendor$TMP" ]
387 cp config/.config "vendors/$VENDOR/$PRODUCT/config.vendor$TMP"
389 cp config/.config "vendors/$VENDOR/$PRODUCT/config.vendor"
391 if [ -f modules/.config ]; then
392 if [ -f "vendors/$VENDOR/$PRODUCT/config.modules$TMP" ]
394 cp modules/.config "vendors/$VENDOR/$PRODUCT/config.modules$TMP"
396 cp modules/.config "vendors/$VENDOR/$PRODUCT/config.modules"
399 if [ -f "$LIBCDIR/.config" ]; then
400 if [ "$LIBCBASEDIR" = "$LIBCNAME" ]; then
401 if [ -f "vendors/$VENDOR/$PRODUCT/config.$LIBCNAME$TMP" ]; then
402 cp $LIBCDIR/.config "vendors/$VENDOR/$PRODUCT/config.$LIBCNAME$TMP"
404 cp $LIBCDIR/.config "vendors/$VENDOR/$PRODUCT/config.$LIBCNAME"
407 if [ -f "vendors/$VENDOR/$PRODUCT/config.$LIBCBASEDIR$TMP" ]; then
408 cp $LIBCDIR/.config "vendors/$VENDOR/$PRODUCT/config.$LIBCBASEDIR$TMP"
410 cp $LIBCDIR/.config "vendors/$VENDOR/$PRODUCT/config.$LIBCBASEDIR"
415 sed 's/^\(CONFIG_DEFAULTS_VENDOR_UPDATE\)=y/# \1 is not set/' <.config\
417 cp .config.tmp .config
420 if [ -f "vendors/$VENDOR/$PRODUCT/config.device" ]
422 cp .config "vendors/$VENDOR/$PRODUCT/config.device"
426 grep -v CONFIG_DEFAULTS_VENDOR= < .config | \
427 grep -v CONFIG_DEFAULTS_MODULES= | \
428 grep -v CONFIG_DEFAULTS_KERNEL= > .config.tmp
430 cp .config.tmp .config
434 #############################################################################