Исправлена подготовка шаблонов

master
Mike Khiretskiy 9 years ago
parent f6d361535e
commit 6d12cde44b

@ -15,7 +15,7 @@
PATH=/lib/rc/bin:$PATH
CL_KERNEL_VERSION=0.1_alpha1
CL_KERNEL_VERSION=0.1_beta1
DESCRIPTION="Create kernel utility"
DEFAULT_KERNEL_DIRECTORY=/usr/src/linux
SRC_DIRECTORY=/usr/src
@ -30,6 +30,7 @@ CREATE_BASE=1
# create config by template
CREATE_NEW=1
BUILD_KERNEL=1
CHMOD=0644
: >$DEBUG_LOG
set -e
@ -141,19 +142,17 @@ variable_value()
cl-core-variables-show --only-value $varname
}
added_options() {
local orig_file=$1
local new_file=$2
diff -u $orig_file $new_file | grep "^+C" | sed 's/^.//' | sort
}
# оставить только названия параметров + "="
options_name() {
sed -r 's/^(.*=)(.*)$/\1/'
}
# преобразовать список строк в параметры для grep
grep_patterns() {
awk '{print "-e "$1}'
}
# исключить из вывода переданные шаблоны
exclude_options() {
if [[ -n $1 ]]
then
@ -163,38 +162,70 @@ exclude_options() {
fi
}
removed_options() {
diff -u $orig_file $new_file | grep "^-C" | sed 's/^.//' | sort
# сохранить в выводе переданные шаблоны
keep_options() {
if [[ -n $1 ]]
then
grep $*
else
cat
fi
}
# преобразовать опции в синтаксис удаления параметра
remove_syntax() {
sed -r 's/^(.*=.*)$/!\1/'
}
# удалить выключенные параметры
discard_option_n() {
grep -v "=n$"
}
removed_options_new() {
diff -u $orig_file $new_file | grep "^+# CON" | sed 's/^.//' | sed -r 's/# (CONFIG[^ ]+).*$/\1=n/' | sort
# оставить только выключенные параметры
keep_option_n() {
grep "=n$"
}
# преобразовать # CONFIG_XXX is not set -> CONFIG_XXX=n
not_set2n() {
sed -r 's/# (CONFIG.*) is not set/\1=n/'
}
# получить изменённые и новые параметры с новыми значениями
append_options() {
diff -u $1 $2 | grep "^+[C#]" | sed 's/^.//' | not_set2n
}
# получить изменённые и удалённые параметры со старыми значениями
removed_options() {
diff -u $1 $2 | grep "^-[C#]" | sed 's/^.//' | not_set2n
}
# получить содержимое шаблона
diff_template_body() {
local orig_file=$1
local new_file=$2
#diff -u $orig_file $new_file &>/tmp/myout || true
grep_opts=( $(added_options $orig_file $new_file | options_name | grep_patterns) )
removed_options $orig_file $new_file | exclude_options ${grep_opts[*]} | remove_syntax | discard_option_n || true
grep_opts_remove=( $(removed_options $orig_file $new_file | grep_patterns) )
added_options $orig_file $new_file | exclude_options ${grep_opts_remove[*]} || true
grep_opts_remove_new=( $(removed_options $orig_file $new_file | options_name | grep_patterns) )
removed_options_new $orig_file $new_file | exclude_options ${grep_opts_remove_new[*]} | remove_syntax || true
# получаем список опций, которые стали выключенными в новом конфиге
local keep_opts=( $(append_options $orig_file $new_file | keep_option_n | options_name | grep_patterns) )
# получаем список опций, которые не изменились по значению, но возможно изменились по расположению в файле
local exclude_opts=( $(append_options $orig_file $new_file | grep_patterns) )
# сохраняем в шаблоне старые значения опций, которые изменились с пометкой на удаление
removed_options $orig_file $new_file | exclude_options ${exclude_opts[*]} | keep_options ${keep_opts[*]} | remove_syntax | sort || true
# получаем список опций, которые изменились
local exclude_opts=( $(removed_options $orig_file $new_file | options_name | grep_patterns) )
# сохраняем список опций, которые стали выключенные, но в отсутствовали в старом конфиге (оставляем только новые опции)
append_options $orig_file $new_file | exclude_options ${exclude_opts[*]} | keep_option_n | remove_syntax | sort || true
# получаем список опций, которые не изменились по значению, но возможно изменились по расположению в файле
local exclude_opts=( $(removed_options $orig_file $new_file | grep_patterns) )
# сохраняем список опций которые изменились и стали либо y либо m
append_options $orig_file $new_file | exclude_options ${exclude_opts[*]} | discard_option_n | sort || true
}
diff_template_head() {
local category_pn=$1
local pv=$2
echo "# Calculate format=kernel name=.config os_arch_machine==${TEMPLATE_ARCH}&&merge(${category_pn})>=${pv}"
echo "# Calculate format=kernel name=.config os_install_arch_machine==${TEMPLATE_ARCH}&&merge(${category_pn})>=${pv}"
}
variable_value()
@ -223,7 +254,7 @@ create_kernel_config() {
[[ -n $4 ]] && local templates="-T $4"
(cd ${kernel_dir};ARCH=$MARCH KCONFIG_CONFIG=.config_clkernel make defconfig;mv .config_clkernel ${tempdir}/.config) &>>$DEBUG_LOG ||
eerror "Failed to create default kernel config"
/usr/sbin/cl-core-patch --pkg-name ${pn} --pkg-category ${category} --pkg-version=${pv} --pkg-slot=${pv} --pkg-path=$tempdir $templates &>>$DEBUG_LOG || eerror "Failed to apply kernel templates"
/usr/sbin/cl-core-patch --march=$TEMPLATE_ARCH --pkg-name ${pn} --pkg-category ${category} --pkg-version=${pv} --pkg-slot=${pv} --pkg-path=$tempdir $templates &>>$DEBUG_LOG || eerror "Failed to apply kernel templates"
cat $tempdir/.config || eerror "Kernel configuration file not found"
rm -rf $tempdir &>>$DEBUG_LOG
}
@ -260,6 +291,12 @@ else
NAME_ARCH=$MARCH
fi
# пропустить сборку ядра если выбранная архитектура и архитектура машины отличаются
if [[ $TEMPLATE_ARCH != $(/usr/bin/arch) ]]
then
BUILD_KERNEL=
fi
if [[ $KVER == "list" ]] || [[ $KVER_OLD == "list" ]]
then
list_kernel
@ -376,7 +413,7 @@ then
fi
mv $NEW_TEMPLATE $TEMPLATE_NAME
chmod 644 $TEMPLATE_NAME
chmod ${CHMOD} $TEMPLATE_NAME
rm -f $BASE_CONFIG

Loading…
Cancel
Save