summaryrefslogtreecommitdiffstats
path: root/process_configs.sh
diff options
context:
space:
mode:
Diffstat (limited to 'process_configs.sh')
-rwxr-xr-xprocess_configs.sh191
1 files changed, 119 insertions, 72 deletions
diff --git a/process_configs.sh b/process_configs.sh
index 8c997a5fa..91e6d1226 100755
--- a/process_configs.sh
+++ b/process_configs.sh
@@ -60,6 +60,9 @@ switch_to_toplevel()
checkoptions()
{
+ count=$3
+ variant=$4
+
/usr/bin/awk '
/is not set/ {
@@ -82,14 +85,14 @@ checkoptions()
print "Found "a[1]"="a[2]" after generation, had " a[1]"="configs[a[1]]" in Source tree";
}
}
- ' "$1" "$2" > .mismatches
+ ' "$1" "$2" > .mismatches"${count}"
checkoptions_error=false
- if test -s .mismatches
+ if test -s .mismatches"${count}"
then
while read -r LINE
do
- if find ./ -name "$(echo "$LINE" | awk -F "=" ' { print $1 } ' | awk ' { print $2 }')" -print0 | xargs -0 grep ^ | grep -q "process_configs_known_broken"; then
+ if find "${REDHAT}"/configs -name "$(echo "$LINE" | awk -F "=" ' { print $1 } ' | awk ' { print $2 }')" -print0 | xargs -0 grep ^ | grep -q "process_configs_known_broken"; then
# This is a known broken config.
# See script help warning.
checkoptions_error=false
@@ -97,14 +100,13 @@ checkoptions()
checkoptions_error=true
break
fi
- done < .mismatches
+ done < .mismatches"${count}"
! $checkoptions_error && return
- echo "Error: Mismatches found in configuration files"
- cat .mismatches
- RETURNCODE=1
- [ "$CONTINUEONERROR" ] || exit 1
+ sed -i "1s/^/Error: Mismatches found in configuration files for ${arch} ${variant}\n/" .mismatches"${count}"
+ else
+ rm -f .mismatches"${count}"
fi
}
@@ -203,11 +205,13 @@ function commit_new_configs()
fi
echo -n "Checking for new configs in $cfg ... "
- make ${MAKEOPTS} ARCH="$arch" CROSS_COMPILE=$(get_cross_compile $arch) KCONFIG_CONFIG="$cfgorig" listnewconfig >& .listnewconfig
+ # shellcheck disable=SC2086
+ make ${MAKEOPTS} ARCH="$arch" CROSS_COMPILE="$(get_cross_compile "$arch")" KCONFIG_CONFIG="$cfgorig" listnewconfig >& .listnewconfig
grep -E 'CONFIG_' .listnewconfig > .newoptions
if test -s .newoptions
then
- make ${MAKEOPTS} ARCH="$arch" CROSS_COMPILE=$(get_cross_compile $arch) KCONFIG_CONFIG="$cfgorig" helpnewconfig >& .helpnewconfig
+ # shellcheck disable=SC2086
+ make ${MAKEOPTS} ARCH="$arch" CROSS_COMPILE="$(get_cross_compile "$arch")" KCONFIG_CONFIG="$cfgorig" helpnewconfig >& .helpnewconfig
parsenewconfigs
fi
rm .newoptions
@@ -218,75 +222,121 @@ function commit_new_configs()
git commit -m "[redhat] AUTOMATIC: New configs"
}
+function process_config()
+{
+ local cfg
+ local arch
+ local cfgtmp
+ local cfgorig
+ local count
+ local variant
+
+ cfg=$1
+ count=$2
+
+ arch=$(head -1 "$cfg" | cut -b 3-)
+
+ if [ "$arch" = "EMPTY" ]
+ then
+ # This arch is intentionally left blank
+ return
+ fi
+
+ variant=$(basename "$cfg" | cut -d"-" -f3- | cut -d"." -f1)
+
+ cfgtmp="${cfg}.tmp"
+ cfgorig="${cfg}.orig"
+ cat "$cfg" > "$cfgorig"
+
+ echo "Processing $cfg ... "
+
+ # shellcheck disable=SC2086
+ make ${MAKEOPTS} ARCH="$arch" CROSS_COMPILE="$(get_cross_compile "$arch")" KCONFIG_CONFIG="$cfgorig" listnewconfig >& .listnewconfig"${count}"
+ grep -E 'CONFIG_' .listnewconfig"${count}" > .newoptions"${count}"
+ if test -n "$NEWOPTIONS" && test -s .newoptions"${count}"
+ then
+ echo "Found unset config items in ${arch} ${variant}, please set them to an appropriate value" >> .errors"${count}"
+ cat .newoptions"${count}" >> .errors"${count}"
+ rm .newoptions"${count}"
+ RETURNCODE=1
+ fi
+ rm .newoptions"${count}"
+
+ grep -E 'config.*warning' .listnewconfig"${count}" > .warnings"${count}"
+ if test -n "$CHECKWARNINGS" && test -s .warnings"${count}"
+ then
+ echo "Found misconfigured config items in ${arch} ${variant}, please set them to an appropriate value" >> .errors"${count}"
+ cat .warnings"${count}" >> .errors"${count}"
+ rm .warnings"${count}"
+ fi
+ rm .warnings"${count}"
+
+ rm .listnewconfig"${count}"
+
+ # shellcheck disable=SC2086
+ make ${MAKEOPTS} ARCH="$arch" CROSS_COMPILE="$(get_cross_compile "$arch")" KCONFIG_CONFIG="$cfgorig" olddefconfig > /dev/null || exit 1
+ echo "# $arch" > "$cfgtmp"
+ cat "$cfgorig" >> "$cfgtmp"
+ if test -n "$CHECKOPTIONS"
+ then
+ checkoptions "$cfg" "$cfgtmp" "$count" "$variant"
+ fi
+ # if test run, don't overwrite original
+ if test -n "$TESTRUN"
+ then
+ rm -f "$cfgtmp"
+ else
+ mv "$cfgtmp" "$cfg"
+ fi
+ rm -f "$cfgorig"
+ echo "Processing $cfg complete"
+}
+
function process_configs()
{
# assume we are in $source_tree/configs, need to get to top level
pushd "$(switch_to_toplevel)" &>/dev/null
+ # The next line is throwaway code for transition to parallel
+ # processing. Leaving this line in place is harmless, but it can be
+ # removed the next time anyone updates this function.
+ [ -f .mismatches ] && rm -f .mismatches
+
+ count=0
for cfg in "$SCRIPT_DIR/${PACKAGE_NAME}${KVERREL}${SUBARCH}"*.config
do
- arch=$(head -1 "$cfg" | cut -b 3-)
- cfgtmp="${cfg}.tmp"
- cfgorig="${cfg}.orig"
- cat "$cfg" > "$cfgorig"
-
- if [ "$arch" = "EMPTY" ]
- then
- # This arch is intentionally left blank
- continue
+ if [ "$count" -eq 0 ]; then
+ # do the first one by itself so that tools are built
+ process_config "$cfg" "$count"
fi
- echo -n "Processing $cfg ... "
-
- make ${MAKEOPTS} ARCH="$arch" CROSS_COMPILE=$(get_cross_compile $arch) KCONFIG_CONFIG="$cfgorig" listnewconfig >& .listnewconfig
- grep -E 'CONFIG_' .listnewconfig > .newoptions
- if test -n "$NEWOPTIONS" && test -s .newoptions
- then
- echo "Found unset config items, please set them to an appropriate value"
- cat .newoptions
- rm .newoptions
- RETURNCODE=1
- [ "$CONTINUEONERROR" ] || exit 1
- fi
- rm .newoptions
+ process_config "$cfg" "$count" &
+ waitpids[${count}]=$!
+ ((count++))
+ while [ "$(jobs | grep -c Running)" -ge "$RHJOBS" ]; do :; done
+ done
+ for pid in ${waitpids[*]}; do
+ wait ${pid}
+ done
- grep -E 'config.*warning' .listnewconfig > .warnings
- if test -n "$CHECKWARNINGS" && test -s .warnings
- then
- echo "Found misconfigured config items, please set them to an appropriate value"
- cat .warnings
- rm .warnings
- RETURNCODE=1
- [ "$CONTINUEONERROR" ] || exit 1
- fi
- rm .warnings
+ rm "$SCRIPT_DIR"/*.config*.old
- rm .listnewconfig
+ if ls .errors* 1> /dev/null 2>&1; then
+ RETURNCODE=1
+ cat .errors*
+ rm .errors* -f
+ fi
+ if ls .mismatches* 1> /dev/null 2>&1; then
+ RETURNCODE=1
+ cat .mismatches*
+ rm .mismatches* -f
+ fi
- make ${MAKEOPTS} ARCH="$arch" CROSS_COMPILE=$(get_cross_compile $arch) KCONFIG_CONFIG="$cfgorig" olddefconfig > /dev/null || exit 1
- echo "# $arch" > "$cfgtmp"
- cat "$cfgorig" >> "$cfgtmp"
- if test -n "$CHECKOPTIONS"
- then
- checkoptions "$cfg" "$cfgtmp"
- fi
- # if test run, don't overwrite original
- if test -n "$TESTRUN"
- then
- rm -f "$cfgtmp"
- else
- mv "$cfgtmp" "$cfg"
- fi
- rm -f "$cfgorig"
- echo "done"
- done
- rm "$SCRIPT_DIR"/*.config*.old
popd > /dev/null
- echo "Processed config files are in $SCRIPT_DIR"
+ [ $RETURNCODE -eq 0 ] && echo "Processed config files are in $SCRIPT_DIR"
}
CHECKOPTIONS=""
-CONTINUEONERROR=""
NEWOPTIONS=""
TESTRUN=""
CHECKWARNINGS=""
@@ -301,7 +351,6 @@ do
case $key in
-a)
CHECKOPTIONS="x"
- CONTINUEONERROR="x"
NEWOPTIONS="x"
CHECKWARNINGS="x"
;;
@@ -311,9 +360,6 @@ do
-h)
usage
;;
- -i)
- CONTINUEONERROR="x"
- ;;
-n)
NEWOPTIONS="x"
;;
@@ -328,7 +374,7 @@ do
;;
-m)
shift
- if [ "$1" = "CC=clang" -o "$1" = "LLVM=1" ]; then
+ if [ "$1" = "CC=clang" ] || [ "$1" = "LLVM=1" ]; then
CC_IS_CLANG=1
fi
MAKEOPTS="$MAKEOPTS $1"
@@ -342,15 +388,16 @@ done
PACKAGE_NAME="${1:-kernel}" # defines the package name used
KVERREL="$(test -n "$2" && echo "-$2" || echo "")"
SUBARCH="$(test -n "$3" && echo "-$3" || echo "")"
-FLAVOR="$(test -n "$4" && echo "-$4" || echo "-common")"
+FLAVOR="$(test -n "$4" && echo "-$4" || echo "-ark")"
+# shellcheck disable=SC2015
+RHJOBS="$(test -n "$5" && echo "$5" || nproc --all)"
SCRIPT=$(readlink -f "$0")
SCRIPT_DIR=$(dirname "$SCRIPT")
-# Most RHEL options are options we want in Fedora so RHEL pending settings head
-# to common/
+# Config options for RHEL should target the pending-ark directory, not pending-common.
if [ "$FLAVOR" = "-rhel" ]
then
- FLAVOR="-common"
+ FLAVOR="-ark"
fi
# to handle this script being a symlink