2 ###############################################################################
3 # IPFire.org - An Open Source Firewall Solution #
4 # Copyright (C) - IPFire Development Team <info@ipfire.org> #
5 ###############################################################################
7 BASEDIR
=$
(dirname ${0})
11 CONFIGS
="x86_64:default"
14 CONFIGS
="${CONFIGS} i686:legacy i686:default"
17 CONFIGS
="${CONFIGS} armv7hl:lpae armv7hl:default"
20 CONFIGS
="${CONFIGS} armv5tel:versatile armv5tel:kirkwood"
22 function merge_config
() {
29 for arg
in arch flavour output
; do
30 if [ -z "${!arg}" ]; then
31 echo >&2 "merge usage: <arch> <flavour> <output filename>"
36 local config_mode
="oldnoconfig"
38 while [ $# -gt 0 ]; do
41 config_mode
=${1#--mode=}
45 echo >&2 "Unknown option: ${1}"
48 extra_configs
="${extra_configs} ${1}"
54 local configs
="${extra_configs} config-generic"
56 case "${arch}:${flavour}" in
59 configs
="${configs} config-x86-generic config-x86_64-default"
62 configs
="${configs} config-x86-generic config-i686-default"
65 configs
="${configs} config-x86-generic config-i686-default"
66 configs
="${configs} config-i686-legacy"
71 configs
="${configs} config-arm-generic"
74 configs
="${configs} config-arm-generic config-armv5tel-kirkwood"
77 configs
="${configs} config-arm-generic config-armv7hl-generic"
78 configs
="${configs} config-armv7hl-default"
81 configs
="${configs} config-arm-generic config-armv7hl-generic"
82 configs
="${configs} config-armv7hl-lpae"
85 echo >&2 "ERROR: Invalid parameters given: $@"
90 # Determine the kernel arch.
101 # Merge the configuration files from its elementary configuration
103 local tmp_out
=$
(mktemp
)
104 local tmp_in
=$
(mktemp
)
107 for config
in ${configs}; do
108 cat ${tmp_out} > ${tmp_in}
109 perl
${SCRIPTS_DIR}/merge.pl \
110 ${config} ${tmp_in} > ${tmp_out}
113 if [ "${config_mode}" != "none" ]; then
114 echo "Running 'make oldnoconfig' for ${arch} (${flavour})..."
117 cat ${tmp_out} > .config
118 make ARCH
="${kernel_arch}" ${config_mode}
119 cat .config
> ${tmp_out}
123 cat ${tmp_out} > ${output}
124 rm -f ${tmp_in} ${tmp_out}
127 # This function runs an interactive "make oldconfig".
128 function make_oldconfig
() {
130 local kernel_arch
="x86"
131 local flavour
="default"
133 local config_in
=$
(mktemp
)
134 local config_out
=$
(mktemp
)
135 local diff_out
=$
(mktemp
)
137 merge_config
${arch} ${flavour} ${config_in} --mode=none
141 cat ${config_in} > .config
143 echo "You may now edit the configuration..."
146 select option
in oldconfig menuconfig oldnoconfig startover quit
; do
148 oldconfig|menuconfig|oldnoconfig
)
149 make ARCH
=${kernel_arch} ${option}
152 cat ${config_in} > .config
160 cat .config
> ${config_out}
163 ${SCRIPTS_DIR}/configdiff.py ${config_in} ${config_out} > ${diff_out}
165 # Update the rest of the configurations.
166 diff_configs
${diff_out} --mode=oldconfig
168 rm -f ${config_in} ${config_out} ${diff_out}
172 # Intersection of all files.
174 # Diff of (intersection of (i686-{default,legacy} and x86_64-default)
175 # against config-generic).
177 # Diff against merge of (config-generic and config-x86-generic).
179 function diff_configs
() {
180 local extra_configs
="$@"
182 declare -A arch_configs
183 declare -A subarch_configs
187 for config
in ${CONFIGS}; do
191 filename
=${tmpdir}/config-${arch}-${flavour}
193 merge_config
${arch} ${flavour} ${filename} ${extra_configs}
195 # Do not include i686 legacy.
204 arch_configs
[x86
]="${arch_configs[x86]} ${filename}"
207 arch_configs
[arm
]="${arch_configs[arm]} ${filename}"
210 echo >&2 "ERROR: Invalid architecture: ${arch}"
214 subarch_configs
[${arch}]="${subarch_configs[${arch}]} ${filename}"
218 for arch in x86 arm; do
219 filename="${tmpdir}/config-
${arch}-common"
220 ${SCRIPTS_DIR}/configcommon.py ${arch_configs[${arch}]} \
223 common_configs="${common_configs} ${filename}"
226 ${SCRIPTS_DIR}/configcommon.py ${common_configs} > ${tmpdir}/config-generic
228 for arch in x86 arm; do
229 ${SCRIPTS_DIR}/configdiff.py ${tmpdir}/config-generic \
230 ${tmpdir}/config-${arch}-common > ${tmpdir}/config-${arch}-generic
233 for arch in armv7hl; do
234 ${SCRIPTS_DIR}/configcommon.py ${subarch_configs[${arch}]} \
235 > ${tmpdir}/config-${arch}-common
237 ${SCRIPTS_DIR}/configdiff.py ${tmpdir}/config-arm-common \
238 ${tmpdir}/config-${arch}-common > ${tmpdir}/config-${arch}-generic
241 for config in ${CONFIGS}; do
253 filename=${tmpdir}/config-${arch}-${flavour}
257 # Legacy depends directly on the default configuration.
258 ${SCRIPTS_DIR}/configdiff.py ${tmpdir}/config-i686-default \
259 ${filename} > ${filename}.tmp
262 # armv7hl depends on a config-armv7hl
263 ${SCRIPTS_DIR}/configdiff.py ${tmpdir}/config-${arch}-common \
264 ${filename} > ${filename}.tmp
271 ${SCRIPTS_DIR}/configdiff.py ${tmpdir}/config-${suparch}-common \
272 ${filename} > ${filename}.tmp
275 mv ${filename}{.tmp,}
277 rm -f ${tmpdir}/config-*-common
279 for config in ${tmpdir}/*; do
280 if ! cmp $(basename ${config}) ${config} &>/dev/null; then
281 echo "$
(basename ${config}) has changed.
"
283 cat ${config} > $(basename ${config})
292 while [ $# -gt 0 ]; do
296 KERNEL_DIR=${arg#--kernel-dir=}
299 echo "${0} - available commands
:"
300 echo " * merge
<arch
> <flavour
> <output filename
>"
304 echo " You must always
set --kernel-dir=...
"
307 merge|oldconfig|update)
314 if [ -z "${KERNEL_DIR}" ]; then
315 echo >&2 "--kernel-dir=... was not
set!"
319 if [ -z "${action}" ]; then
320 echo >&2 "No action given... Try
${0} help.
"