Blame view

scripts/kconfig/merge_config.sh 3.75 KB
4b5f72145   John Stultz   kconfig: add merg...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  #!/bin/sh
  #  merge_config.sh - Takes a list of config fragment values, and merges
  #  them one by one. Provides warnings on overridden values, and specified
  #  values that did not make it to the resulting .config file (due to missed
  #  dependencies or config symbol removal).
  #
  #  Portions reused from kconf_check and generate_cfg:
  #  http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
  #  http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
  #
  #  Copyright (c) 2009-2010 Wind River Systems, Inc.
  #  Copyright 2011 Linaro
  #
  #  This program is free software; you can redistribute it and/or modify
  #  it under the terms of the GNU General Public License version 2 as
  #  published by the Free Software Foundation.
  #
  #  This program is distributed in the hope that it will be useful,
  #  but WITHOUT ANY WARRANTY; without even the implied warranty of
  #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  #  See the GNU General Public License for more details.
  
  clean_up() {
c0c0cda27   Darren Hart   merge_config.sh: ...
24
25
  	rm -f $TMP_FILE
  	exit
4b5f72145   John Stultz   kconfig: add merg...
26
  }
041b78c89   Darren Hart   merge_config.sh: ...
27
  trap clean_up HUP INT TERM
4b5f72145   John Stultz   kconfig: add merg...
28
29
30
31
32
33
  
  usage() {
  	echo "Usage: $0 [OPTIONS] [CONFIG [...]]"
  	echo "  -h    display this help text"
  	echo "  -m    only merge the fragments, do not execute the make command"
  	echo "  -n    use allnoconfig instead of alldefconfig"
9875c42d6   John Stultz   merge_config.sh: ...
34
  	echo "  -r    list redundant entries when merging fragments"
409f117e2   Zhangfei Gao   merge_config.sh: ...
35
  	echo "  -O    dir to put generated output files"
4b5f72145   John Stultz   kconfig: add merg...
36
37
38
39
  }
  
  MAKE=true
  ALLTARGET=alldefconfig
9875c42d6   John Stultz   merge_config.sh: ...
40
  WARNREDUN=false
409f117e2   Zhangfei Gao   merge_config.sh: ...
41
  OUTPUT=.
4b5f72145   John Stultz   kconfig: add merg...
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
  
  while true; do
  	case $1 in
  	"-n")
  		ALLTARGET=allnoconfig
  		shift
  		continue
  		;;
  	"-m")
  		MAKE=false
  		shift
  		continue
  		;;
  	"-h")
  		usage
  		exit
  		;;
9875c42d6   John Stultz   merge_config.sh: ...
59
60
61
62
63
  	"-r")
  		WARNREDUN=true
  		shift
  		continue
  		;;
409f117e2   Zhangfei Gao   merge_config.sh: ...
64
65
66
67
68
69
70
71
72
73
  	"-O")
  		if [ -d $2 ];then
  			OUTPUT=$(echo $2 | sed 's/\/*$//')
  		else
  			echo "output directory $2 does not exist" 1>&2
  			exit 1
  		fi
  		shift 2
  		continue
  		;;
4b5f72145   John Stultz   kconfig: add merg...
74
75
76
77
78
  	*)
  		break
  		;;
  	esac
  done
09280615a   Josh Boyer   merge_config.sh: ...
79
80
  INITFILE=$1
  shift;
4b5f72145   John Stultz   kconfig: add merg...
81
82
83
84
  
  MERGE_LIST=$*
  SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
  TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
09280615a   Josh Boyer   merge_config.sh: ...
85
86
  echo "Using $INITFILE as base"
  cat $INITFILE > $TMP_FILE
4b5f72145   John Stultz   kconfig: add merg...
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
  # Merge files, printing warnings on overrided values
  for MERGE_FILE in $MERGE_LIST ; do
  	echo "Merging $MERGE_FILE"
  	CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
  
  	for CFG in $CFG_LIST ; do
  		grep -q -w $CFG $TMP_FILE
  		if [ $? -eq 0 ] ; then
  			PREV_VAL=$(grep -w $CFG $TMP_FILE)
  			NEW_VAL=$(grep -w $CFG $MERGE_FILE)
  			if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
  			echo Value of $CFG is redefined by fragment $MERGE_FILE:
  			echo Previous  value: $PREV_VAL
  			echo New value:       $NEW_VAL
  			echo
9875c42d6   John Stultz   merge_config.sh: ...
102
103
  			elif [ "$WARNREDUN" = "true" ]; then
  			echo Value of $CFG is redundant by fragment $MERGE_FILE:
4b5f72145   John Stultz   kconfig: add merg...
104
105
106
107
108
109
110
111
  			fi
  			sed -i "/$CFG[ =]/d" $TMP_FILE
  		fi
  	done
  	cat $MERGE_FILE >> $TMP_FILE
  done
  
  if [ "$MAKE" = "false" ]; then
409f117e2   Zhangfei Gao   merge_config.sh: ...
112
  	cp $TMP_FILE $OUTPUT/.config
4b5f72145   John Stultz   kconfig: add merg...
113
  	echo "#"
409f117e2   Zhangfei Gao   merge_config.sh: ...
114
  	echo "# merged configuration written to $OUTPUT/.config (needs make)"
4b5f72145   John Stultz   kconfig: add merg...
115
116
117
118
  	echo "#"
  	clean_up
  	exit
  fi
a45c7dfb9   John Stultz   merge_config.sh: ...
119
120
121
122
123
124
  # If we have an output dir, setup the O= argument, otherwise leave
  # it blank, since O=. will create an unnecessary ./source softlink
  OUTPUT_ARG=""
  if [ "$OUTPUT" != "." ] ; then
  	OUTPUT_ARG="O=$OUTPUT"
  fi
4b5f72145   John Stultz   kconfig: add merg...
125
126
127
  # Use the merged file as the starting point for:
  # alldefconfig: Fills in any missing symbols with Kconfig default
  # allnoconfig: Fills in any missing symbols with # CONFIG_* is not set
a45c7dfb9   John Stultz   merge_config.sh: ...
128
  make KCONFIG_ALLCONFIG=$TMP_FILE $OUTPUT_ARG $ALLTARGET
4b5f72145   John Stultz   kconfig: add merg...
129
130
131
132
  
  
  # Check all specified config values took (might have missed-dependency issues)
  for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
320d41bb1   John Stultz   merge_config.sh: ...
133
  	REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
409f117e2   Zhangfei Gao   merge_config.sh: ...
134
  	ACTUAL_VAL=$(grep -w -e "$CFG" $OUTPUT/.config)
4b5f72145   John Stultz   kconfig: add merg...
135
136
137
138
139
140
141
142
143
  	if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
  		echo "Value requested for $CFG not in final .config"
  		echo "Requested value:  $REQUESTED_VAL"
  		echo "Actual value:     $ACTUAL_VAL"
  		echo ""
  	fi
  done
  
  clean_up