Blame view

buildroot/buildroot-2016.08.1/support/kconfig/merge_config.sh 3.75 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
  #!/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() {
  	rm -f $TMP_FILE
  	exit
  }
  trap clean_up HUP INT TERM
  
  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"
  	echo "  -r    list redundant entries when merging fragments"
  	echo "  -O    dir to put generated output files"
  }
  
  MAKE=true
  ALLTARGET=alldefconfig
  WARNREDUN=false
  OUTPUT=.
  
  while true; do
  	case $1 in
  	"-n")
  		ALLTARGET=allnoconfig
  		shift
  		continue
  		;;
  	"-m")
  		MAKE=false
  		shift
  		continue
  		;;
  	"-h")
  		usage
  		exit
  		;;
  	"-r")
  		WARNREDUN=true
  		shift
  		continue
  		;;
  	"-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
  		;;
  	*)
  		break
  		;;
  	esac
  done
  
  INITFILE=$1
  shift;
  
  MERGE_LIST=$*
  SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
  TMP_FILE=$(mktemp -t .tmp.config.XXXXXXXXXX)
  
  echo "Using $INITFILE as base"
  cat $INITFILE > $TMP_FILE
  
  # 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
  			elif [ "$WARNREDUN" = "true" ]; then
  			echo Value of $CFG is redundant by fragment $MERGE_FILE:
  			fi
  			sed -i "/$CFG[ =]/d" $TMP_FILE
  		fi
  	done
  	cat $MERGE_FILE >> $TMP_FILE
  done
  
  if [ "$MAKE" = "false" ]; then
  	cp $TMP_FILE $OUTPUT/.config
  	echo "#"
  	echo "# merged configuration written to $OUTPUT/.config (needs make)"
  	echo "#"
  	clean_up
  	exit
  fi
  
  # 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
  
  
  # 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
  make KCONFIG_ALLCONFIG=$TMP_FILE $OUTPUT_ARG $ALLTARGET
  
  
  # Check all specified config values took (might have missed-dependency issues)
  for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
  
  	REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
  	ACTUAL_VAL=$(grep -w -e "$CFG" $OUTPUT/.config)
  	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