2 ###############################################################################
3 # IPFire.org - An Open Source Firewall Solution #
4 # Copyright (C) - IPFire Development Team <info@ipfire.org> #
5 ###############################################################################
7 BASEDIR
=$
(dirname ${0})
10 CONFIGS
="x86_64:default i686:legacy i686:default"
11 CONFIGS
="${CONFIGS} armv7hl:exynos armv7hl:omap armv5tel:versatile armv5tel:kirkwood"
13 function merge_config
() {
20 for arg
in arch flavour output
; do
21 if [ -z "${!arg}" ]; then
22 echo >&2 "merge usage: <arch> <flavour> <output filename>"
27 local config_mode
="oldnoconfig"
29 while [ $# -gt 0 ]; do
32 config_mode
=${1#--mode=}
36 echo >&2 "Unknown option: ${1}"
39 extra_configs
="${extra_configs} ${1}"
45 local configs
="${extra_configs} config-generic"
47 case "${arch}:${flavour}" in
50 configs
="${configs} config-x86-generic config-x86_64-default"
53 configs
="${configs} config-x86-generic config-i686-default"
56 configs
="${configs} config-x86-generic config-i686-default"
57 configs
="${configs} config-i686-legacy"
62 configs
="${configs} config-arm-generic"
65 configs
="${configs} config-arm-generic config-armv5tel-kirkwood"
68 configs
="${configs} config-arm-generic config-armv7hl-exynos"
71 configs
="${configs} config-arm-generic config-armv7hl-omap"
74 echo >&2 "ERROR: Invalid parameters given: $@"
79 # Determine the kernel arch.
90 # Merge the configuration files from its elementary configuration
92 local tmp_out
=$
(mktemp
)
93 local tmp_in
=$
(mktemp
)
96 for config
in ${configs}; do
97 cat ${tmp_out} > ${tmp_in}
98 perl
${SCRIPTS_DIR}/merge.pl \
99 ${config} ${tmp_in} > ${tmp_out}
102 if [ "${config_mode}" != "none" ]; then
103 echo "Running 'make oldnoconfig' for ${arch} (${flavour})..."
106 cat ${tmp_out} > .config
107 make ARCH
="${kernel_arch}" ${config_mode}
108 cat .config
> ${tmp_out}
112 cat ${tmp_out} > ${output}
113 rm -f ${tmp_in} ${tmp_out}
116 # This function runs an interactive "make oldconfig".
117 function make_oldconfig
() {
119 local kernel_arch
="x86"
120 local flavour
="default"
122 local config_in
=$
(mktemp
)
123 local config_out
=$
(mktemp
)
124 local diff_out
=$
(mktemp
)
126 merge_config
${arch} ${flavour} ${config_in} --mode=none
130 cat ${config_in} > .config
132 echo "You may now edit the configuration..."
135 select option
in oldconfig menuconfig oldnoconfig startover quit
; do
137 oldconfig|menuconfig|oldnoconfig
)
138 make ARCH
=${kernel_arch} ${option}
141 cat ${config_in} > .config
149 cat .config
> ${config_out}
152 ${SCRIPTS_DIR}/configdiff.py ${config_in} ${config_out} > ${diff_out}
154 # Update the rest of the configurations.
155 diff_configs
${diff_out} --mode=oldconfig
157 rm -f ${config_in} ${config_out} ${diff_out}
161 # Intersection of all files.
163 # Diff of (intersection of (i686-{default,legacy} and x86_64-default)
164 # against config-generic).
166 # Diff against merge of (config-generic and config-x86-generic).
168 function diff_configs
() {
169 local extra_configs
="$@"
171 declare -A arch_configs
175 for config
in ${CONFIGS}; do
179 filename
=${tmpdir}/config-${arch}-${flavour}
181 merge_config
${arch} ${flavour} ${filename} ${extra_configs}
183 # Do not include i686 legacy.
197 arch_configs
[x86
]="${arch_configs[x86]} ${filename}"
200 arch_configs
[arm
]="${arch_configs[arm]} ${filename}"
203 echo >&2 "ERROR: Invalid architecture: ${arch}"
209 for arch
in x86 arm
; do
210 filename
="${tmpdir}/config-${arch}-common"
211 ${SCRIPTS_DIR}/configcommon.py ${arch_configs[${arch}]} \
214 common_configs
="${common_configs} ${filename}"
217 ${SCRIPTS_DIR}/configcommon.py ${common_configs} > ${tmpdir}/config-generic
219 ${SCRIPTS_DIR}/configdiff.py ${tmpdir}/config-generic ${tmpdir}/config-arm-common \
220 > ${tmpdir}/config-arm-generic
222 ${SCRIPTS_DIR}/configdiff.py ${tmpdir}/config-generic ${tmpdir}/config-x86-common \
223 > ${tmpdir}/config-x86-generic
225 for config
in ${CONFIGS}; do
237 filename
=${tmpdir}/config-${arch}-${flavour}
241 # Legacy depends directly on the default configuration.
242 ${SCRIPTS_DIR}/configdiff.py
${tmpdir}/config-i686-default \
243 ${filename} > ${filename}.tmp
250 ${SCRIPTS_DIR}/configdiff.py ${tmpdir}/config-${suparch}-common \
251 ${filename} > ${filename}.tmp
254 mv ${filename}{.tmp
,}
256 rm -f ${tmpdir}/config-
*-common
258 for config
in ${tmpdir}/*; do
259 if ! cmp $
(basename ${config}) ${config} &>/dev
/null
; then
260 echo "$(basename ${config}) has changed."
262 cat ${config} > $
(basename ${config})
271 while [ $# -gt 0 ]; do
275 KERNEL_DIR
=${arg#--kernel-dir=}
278 echo "${0} - available commands:"
279 echo " * merge <arch> <flavour> <output filename>"
283 echo " You must always set --kernel-dir=..."
286 merge|oldconfig|update
)
293 if [ -z "${KERNEL_DIR}" ]; then
294 echo >&2 "--kernel-dir=... was not set!"
298 if [ -z "${action}" ]; then
299 echo >&2 "No action given... Try ${0} help."