OSDN Git Service

2013.10.24
[uclinux-h8/uClinux-dist.git] / config / setconfig
1 #!/bin/sh
2 #############################################################################
3 #
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.
7 #
8 #       Copyright (C) 2001       Lineo    <davidm@snapgear.com>
9 #       Copyright (C) 2001-2002  SnapGear <davidm@snapgear.com>
10 #
11 #############################################################################
12 #
13 # Some basic starting points
14 #
15
16 CONFIG=.config
17 if [ -f ./.oldconfig ]
18 then
19         . ./.oldconfig
20 fi
21
22 PASS="$1"
23 VENDOR=""
24 PRODUCT=""
25 LINUXDIR=""
26 LIBCDIR=""
27 LIBCBASEDIR=""
28
29 #############################################################################
30 #
31 # this code closely matches that in mkconfig,  it has to !
32 #
33
34 get_kernel()
35 {
36         KERNEL="`grep '^CONFIG_DEFAULTS_KERNEL_.*=y' ${CONFIG}`"
37         if [ -z "${KERNEL}" ]; then
38                 return 1
39         fi
40         KERNEL=${KERNEL##CONFIG_DEFAULTS_KERNEL_}
41         KERNEL=${KERNEL%%=y}
42         KERNEL="`echo ${KERNEL} | sed -e 's/_/./g'`"
43         # the old behaviour
44         [ -d linux-${KERNEL} ] || KERNEL="${KERNEL}.x"
45         return 0
46 }
47
48 var_isset() # because of make evironment inheritance,  we must look in the file
49 {
50         if grep "$1=y" $CONFIG > /dev/null
51         then
52                 return 0
53         fi
54         return 1
55 }
56
57 fix_name()
58 {
59         echo $1 | tr '[\-\.\/\+a-z]' '[____A-Z]'
60 }
61
62 #
63 # remove line containing $1 append line $2 to file in $3
64 #
65 replace_line()
66 {
67         TMPR="/tmp/setconfig.$$"
68         if [ -f "$3" ]
69         then
70                 cat "$3" | grep -v "$1" > "$TMPR"
71         else
72                 touch "$TMPR"
73         fi
74         echo "$2" >> "$TMPR"
75         cp "$TMPR" "$3"
76         rm -f "$TMPR"
77 }
78
79 fix_conf_files()
80 {
81         #
82         # add some bits for convienence, must be done after each stage
83         #
84
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
89
90         replace_line CONFIG_VENDOR "#define CONFIG_VENDOR \"$VENDOR\"" \
91                  autoconf.h
92         replace_line CONFIG_PRODUCT "#define CONFIG_PRODUCT \"$PRODUCT\"" \
93                  autoconf.h
94         replace_line CONFIG_LINUXDIR "#define CONFIG_LINUXDIR \"$LINUXDIR\"" \
95                  autoconf.h
96         replace_line CONFIG_LIBCDIR "#define CONFIG_LIBCDIR \"$LIBCDIR\"" \
97                  autoconf.h
98         replace_line VENDORS_AUTOCONF_INCLUDED \
99                  "#define VENDORS_AUTOCONF_INCLUDED" autoconf.h
100         replace_line "#undef AUTOCONF_INCLUDED" "#undef AUTOCONF_INCLUDED" \
101                  autoconf.h
102
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
107 }
108
109 #############################################################################
110
111 for i in vendors/*/*/config.arch
112 do
113         IFS=/
114         set -- $i
115         IFS=" 
116         "
117         VDIR="`dirname $i`"
118         if [ -f "$VDIR/config.languages" ]
119         then
120                 for j in `cat "$VDIR/config.languages"`
121                 do
122                         if var_isset "CONFIG_DEFAULTS_`fix_name $2`_`fix_name $3`_`fix_name $j`"
123                         then
124                                 VENDOR="$2"
125                                 PRODUCT="$3"
126                                 break 2
127                         fi
128                 done
129         fi
130         if var_isset "CONFIG_DEFAULTS_`fix_name $2`_`fix_name $3`"
131         then
132                 VENDOR="$2"
133                 PRODUCT="$3"
134                 break
135         fi
136 done
137
138 #############################################################################
139
140 if [ "$VENDOR$PRODUCT" = "" ]; then
141         echo "You have not selected a Vendor/Product in the config." >&2
142         exit 1
143 fi
144
145 #############################################################################
146 #
147 # kernel version
148 #
149
150 # get_kernel defines KERNEL for us
151 if get_kernel; then
152         LINUXDIR="linux-${KERNEL}"
153 else
154         echo "Unknown kernel configuration." >&2
155         exit 1
156 fi
157
158 if [ ! -d ${LINUXDIR} ]; then
159         echo "Missing kernel directory ${LINUXDIR}." >&2
160         exit 1
161 fi
162
163 #############################################################################
164 #
165 # libc verions (uC-libc is a special case to prevent confusion)
166 #
167
168 for i in uC-libc uClibc uClibc-* glibc glibc-*
169 do
170         if var_isset "CONFIG_DEFAULTS_LIBC_`fix_name $i`"
171         then
172                 LIBCNAME="`echo ${i} | sed 's/-[0-9].*$//g'`"
173                 LIBCBASEDIR=${i}
174                 case "$i" in
175                 None)    LIBCDIR=""; LIBCBASEDIR="$LIBCDIR" ;;
176                 uC-libc) LIBCDIR="libc"; LIBCBASEDIR="$LIBCDIR" ;;
177                 *)       LIBCDIR="$LIBCBASEDIR" ;;
178                 esac
179                 break
180         fi
181 done
182
183 #############################################################################
184 #
185 # Now install the configs,  careful not dump on them unless they asked us to
186 #
187
188 if [ "$PASS" != "final" ]; then
189
190         #
191         # if the user touches any important settings then force a clean
192         # otherwise bad things can happen in the tree
193         #
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
200                         if [ $NO_CLEAN ]
201                         then
202                                 echo "**** Not cleaning tree ****"
203                                 echo; echo; echo; echo
204                                 sleep 3;
205                         else
206                                 echo "**** Cleaning tree for old settings ****"
207                                 echo "rm -rf romfs; make clean > /dev/null 2>&1"
208                                 echo; echo; echo; echo
209                                 rm -rf romfs
210                                 make clean > /dev/null 2>&1
211                         fi
212                         cp .config.save .config
213                         rm -f .config.save
214
215                         [ "$LIBCDIR" ] && rm -f $LIBCDIR/.config
216                         rm -f $LINUXDIR/.config
217                         rm -f config/.config
218                         rm -f config.arch
219                         [ ! -d modules ] || rm -f modules/.config
220                 fi
221         fi
222
223     # once before the oldconfig stuff is run
224         fix_conf_files
225
226         rm -f config.arch
227         ln -s "vendors/$VENDOR/$PRODUCT/config.arch" config.arch
228
229         # make sure any auto config files are created now !
230         make -C config VENDOR="$VENDOR" PRODUCT="$PRODUCT" autoconf
231
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
239
240                 elif [ -f "$LINUXDIR/arch/$ARCH/configs/${PRODUCT}_defconfig" ]; then
241                         cp "$LINUXDIR/arch/$ARCH/configs/${PRODUCT}_defconfig" $LINUXDIR/.config
242                 else
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."
250                         echo
251                         echo "If you know what you are doing press <ENTER> otherwise"
252                         echo "Type ^C to abort."
253                         read dummy
254                 fi
255                 make oldconfig_linux
256         fi
257
258         #
259         # everything about modules is optional,  optional modules dir
260         # and optional modules config files
261         #
262         if [ -d modules ]; then
263                 TMP=`expr $LINUXDIR : "[^-][^-]*\(-.*\)"`
264                 if [ -f "vendors/$VENDOR/$PRODUCT/config.modules$TMP" ]
265                 then
266                         TMP="vendors/$VENDOR/$PRODUCT/config.modules$TMP"
267                 else
268                         TMP="vendors/$VENDOR/$PRODUCT/config.modules"
269                 fi
270                 if [ ! -f modules/.config ] || var_isset CONFIG_DEFAULTS_OVERRIDE; then
271                         if [ -f "$TMP" ]; then
272                                 cp "$TMP" modules/.config
273                         fi
274                         make oldconfig_modules
275                 fi
276         fi
277
278         if [ ! -f config/.config ] || var_isset CONFIG_DEFAULTS_OVERRIDE; then
279                 TMP=`expr $LINUXDIR : "[^-][^-]*\(-.*\)"`
280                 if [ -f "vendors/$VENDOR/$PRODUCT/config.vendor$TMP" ]
281                 then
282                         cp "vendors/$VENDOR/$PRODUCT/config.vendor$TMP" config/.config
283                 elif [ -f "vendors/$VENDOR/$PRODUCT/config.vendor" ]
284                 then
285                         cp "vendors/$VENDOR/$PRODUCT/config.vendor" config/.config
286                 else
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."
294                         echo
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."
298                         read dummy
299                         #
300                         # force config of user apps
301                         #
302                         replace_line CONFIG_DEFAULTS_VENDOR= \
303                                         "CONFIG_DEFAULTS_VENDOR=y" .config
304                 fi
305                 make oldconfig_config
306         fi
307
308         if [ -L lib/$LIBCBASEDIR ]; then
309                 rm -f lib/$LIBCBASEDIR
310         fi
311
312         if [ ! -e lib/$LIBCBASEDIR -a -e $LIBCBASEDIR/. ] ; then
313                 ln -s "`pwd`/$LIBCBASEDIR" "lib/$LIBCBASEDIR"
314         fi
315
316         case "$LIBCBASEDIR" in
317         uClibc*)
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" \
322                                                 lib/$LIBCDIR/.config
323                         elif [ -f "vendors/$VENDOR/$PRODUCT/config.$LIBCNAME$TMP" ]; then
324                                 cp "vendors/$VENDOR/$PRODUCT/config.$LIBCNAME$TMP" \
325                                                 lib/$LIBCDIR/.config
326                         elif [ -f "vendors/$VENDOR/$PRODUCT/config.$LIBCBASEDIR" ]; then
327                                 cp "vendors/$VENDOR/$PRODUCT/config.$LIBCBASEDIR" \
328                                                 lib/$LIBCDIR/.config
329                         elif [ -f "vendors/$VENDOR/$PRODUCT/config.$LIBCNAME" ]; then
330                                 cp "vendors/$VENDOR/$PRODUCT/config.$LIBCNAME" \
331                                                 lib/$LIBCDIR/.config
332                         else
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."
340                                 echo
341                                 echo "Once you have done that start the config process again."
342                                 exit 1
343                         fi
344                         make oldconfig_uClibc
345                 fi
346                 ;;
347         esac
348
349         # and once after to clean up
350         fix_conf_files
351 fi
352
353 #############################################################################
354 #
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.
357 #
358 # Always add the VENDOR/PRODUCT dir for the build to work
359 #
360
361 if [ "$PASS" = "final" ]; then
362
363         fix_conf_files
364
365         #
366         # check for other config options
367         #
368
369         if var_isset CONFIG_DEFAULTS_OVERRIDE; then
370                 sed 's/^\(CONFIG_DEFAULTS_OVERRIDE\)=y/# \1 is not set/' < .config \
371                                 > .config.tmp
372                 cp .config.tmp .config
373                 rm -f .config.tmp
374         fi
375
376         if var_isset CONFIG_DEFAULTS_VENDOR_UPDATE; then
377
378                 if [ -f "vendors/$VENDOR/$PRODUCT/config.$LINUXDIR" ]
379                 then
380                         cp $LINUXDIR/.config "vendors/$VENDOR/$PRODUCT/config.$LINUXDIR"
381                 else
382                         cp $LINUXDIR/.config "vendors/$VENDOR/$PRODUCT/config.linux"
383                 fi
384                 TMP=`expr $LINUXDIR : "[^-][^-]*\(-.*\)"`
385                 if [ -f "vendors/$VENDOR/$PRODUCT/config.vendor$TMP" ]
386                 then
387                         cp config/.config "vendors/$VENDOR/$PRODUCT/config.vendor$TMP"
388                 else
389                         cp config/.config "vendors/$VENDOR/$PRODUCT/config.vendor"
390                 fi
391                 if [ -f modules/.config ]; then
392                         if [ -f "vendors/$VENDOR/$PRODUCT/config.modules$TMP" ]
393                         then
394                                 cp modules/.config "vendors/$VENDOR/$PRODUCT/config.modules$TMP"
395                         else
396                                 cp modules/.config "vendors/$VENDOR/$PRODUCT/config.modules"
397                         fi
398                 fi
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"
403                                 else
404                                         cp $LIBCDIR/.config "vendors/$VENDOR/$PRODUCT/config.$LIBCNAME"
405                                 fi
406                         else
407                                 if [ -f "vendors/$VENDOR/$PRODUCT/config.$LIBCBASEDIR$TMP" ]; then
408                                         cp $LIBCDIR/.config "vendors/$VENDOR/$PRODUCT/config.$LIBCBASEDIR$TMP"
409                                 else
410                                         cp $LIBCDIR/.config "vendors/$VENDOR/$PRODUCT/config.$LIBCBASEDIR"
411                                 fi
412                         fi
413                 fi
414
415                 sed 's/^\(CONFIG_DEFAULTS_VENDOR_UPDATE\)=y/# \1 is not set/' <.config\
416                                 > .config.tmp
417                 cp .config.tmp .config
418                 rm -f .config.tmp
419
420                 if [ -f "vendors/$VENDOR/$PRODUCT/config.device" ]
421                 then
422                         cp .config "vendors/$VENDOR/$PRODUCT/config.device"
423                 fi
424         fi
425
426         grep -v CONFIG_DEFAULTS_VENDOR= < .config | \
427                 grep -v CONFIG_DEFAULTS_MODULES= | \
428                 grep -v CONFIG_DEFAULTS_KERNEL= > .config.tmp
429
430         cp .config.tmp .config
431         rm -f .config.tmp
432 fi
433
434 #############################################################################
435 exit 0