Blame try-disable-staging-driver

Bernhard M. Wiedemann 6ebc4a
#!/bin/bash
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
#############################################################################
Bernhard M. Wiedemann 6ebc4a
# Copyright (c) 2011 Novell, Inc.
5c34fe
# Copyright (c) 2012-2022 SUSE LLC
Bernhard M. Wiedemann 6ebc4a
#
Bernhard M. Wiedemann 6ebc4a
# This program is free software; you can redistribute it and/or
Bernhard M. Wiedemann 6ebc4a
# modify it under the terms of version 2 of the GNU General Public License as
Bernhard M. Wiedemann 6ebc4a
# published by the Free Software Foundation.
Bernhard M. Wiedemann 6ebc4a
#
Bernhard M. Wiedemann 6ebc4a
# This program is distributed in the hope that it will be useful,
Bernhard M. Wiedemann 6ebc4a
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Bernhard M. Wiedemann 6ebc4a
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.   See the
Bernhard M. Wiedemann 6ebc4a
# GNU General Public License for more details.
Bernhard M. Wiedemann 6ebc4a
#
Bernhard M. Wiedemann 6ebc4a
# You should have received a copy of the GNU General Public License
5c34fe
# along with this program; if not, contact https://www.suse.com/source-code/
Bernhard M. Wiedemann 6ebc4a
#
Bernhard M. Wiedemann 6ebc4a
#############################################################################
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
# If make fails, check if it happened due to a staging driver and disable it.
Bernhard M. Wiedemann 6ebc4a
# That way, staging does not spoil automatic package building and we also
Bernhard M. Wiedemann 6ebc4a
# do not need to worry about forgetting to reenable manually disabled drivers.
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
if test -L source; then
Bernhard M. Wiedemann 6ebc4a
	source="source"
Bernhard M. Wiedemann 6ebc4a
else
Bernhard M. Wiedemann 6ebc4a
	source="."
Bernhard M. Wiedemann 6ebc4a
fi
Bernhard M. Wiedemann 6ebc4a
if test -f ${source}/scripts/kconfig/Makefile && \
Bernhard M. Wiedemann 6ebc4a
   grep -q syncconfig ${source}/scripts/kconfig/Makefile; then
Bernhard M. Wiedemann 6ebc4a
    syncconfig="syncconfig"
Bernhard M. Wiedemann 6ebc4a
else
Bernhard M. Wiedemann 6ebc4a
    syncconfig="silentoldconfig"
Bernhard M. Wiedemann 6ebc4a
fi
Bernhard M. Wiedemann 6ebc4a
makefile="$source/drivers/staging/Makefile"
Bernhard M. Wiedemann 6ebc4a
skipped_options=staging-skipped-options
Bernhard M. Wiedemann 6ebc4a
logfile=$1
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
if test -z "$logfile"; then
Bernhard M. Wiedemann 6ebc4a
	echo "Usage: $0 logfile" >&2
Bernhard M. Wiedemann 6ebc4a
	exit 1
Bernhard M. Wiedemann 6ebc4a
fi
Bernhard M. Wiedemann 6ebc4a
if ! test -f "$logfile"; then
Bernhard M. Wiedemann 6ebc4a
	echo "$logfile not found" >&2
Bernhard M. Wiedemann 6ebc4a
	exit 1
Bernhard M. Wiedemann 6ebc4a
fi
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
# safety precaution
Bernhard M. Wiedemann 6ebc4a
if test "0$(wc -l "$skipped_options" 2>/dev/null)" -gt 20; then
Bernhard M. Wiedemann 6ebc4a
	echo "Possible loop detected in $0, exiting after 20 attempts" >&2
Bernhard M. Wiedemann 6ebc4a
	exit 1
Bernhard M. Wiedemann 6ebc4a
fi
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
# find out if the error happened in drivers/staging
Bernhard M. Wiedemann 6ebc4a
dir=$(sed -rn 's@.*/drivers/staging/([^/]*)/.*: error: .*@\1@p; T; q' "$logfile")
Bernhard M. Wiedemann 6ebc4a
if test -z "$dir"; then
Bernhard M. Wiedemann 6ebc4a
	exit 1
Bernhard M. Wiedemann 6ebc4a
else
Bernhard M. Wiedemann 6ebc4a
	echo "Build failed due to drivers/staging/$dir"
Bernhard M. Wiedemann 6ebc4a
fi
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
option=$(sed -n 's/obj-\$(\(.*\))[[:space:]]*+=[[:space:]]*'"$dir"'\//\1/p' "$makefile")
Bernhard M. Wiedemann 6ebc4a
if test -z "$option"; then
Bernhard M. Wiedemann 6ebc4a
	echo "Cannot determine config option to skip drivers/staging/$dir" >&2
Bernhard M. Wiedemann 6ebc4a
	exit 1
Bernhard M. Wiedemann 6ebc4a
fi
Bernhard M. Wiedemann 6ebc4a
# we need to be carefull not to loop endlessly
Bernhard M. Wiedemann 6ebc4a
if grep -qsFx "$option" "$skipped_options"; then
Bernhard M. Wiedemann 6ebc4a
	echo "$option has already been disabled, but drivers/staging/$dir is still failing" >&2
Bernhard M. Wiedemann 6ebc4a
	exit 1
Bernhard M. Wiedemann 6ebc4a
fi
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
echo "Trying to disable $option"
Bernhard M. Wiedemann 6ebc4a
"$source/scripts/config" --disable "$option"
Bernhard M. Wiedemann 6ebc4a
if ! make $syncconfig $MAKE_ARGS || grep "^$option" .config; then
Bernhard M. Wiedemann 6ebc4a
	echo "Could not disable $option" >&2
Bernhard M. Wiedemann 6ebc4a
	exit 1
Bernhard M. Wiedemann 6ebc4a
fi
Bernhard M. Wiedemann 6ebc4a
echo "$option" >>"$skipped_options"
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
exit 0