#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-only

set -e

# Detect files that are tracked but ignored by git.
check_tracked_ignored_files () {
	git -C "${srctree:-.}" ls-files -i -c --exclude-per-directory=.gitignore 2>/dev/null |
		sed 's/$/: warning: ignored by one of the .gitignore files/' >&2
}

# Check for missing #include <linux/export.h>
#
# The rule for including <linux/export.h> is very simple:
# Include <linux/export.h> only when you use EXPORT_SYMBOL(). That's it.
#
# However, some headers include <linux/export.h> even though they are completely
# unrelated to EXPORT_SYMBOL().
#
# One example is include/linux/module.h. Please note <linux/module.h> and
# <linux/export.h> are orthogonal. <linux/module.h> should be included by files
# that can be compiled as modules. In other words, <linux/module.h> should be
# included by EXPORT_SYMBOL consumers. In contrast, <linux/export.h> should be
# included from EXPORT_SYMBOL providers, which may or may not be modular.
# Hence, include/linux/module.h should *not* include <linux/export.h>.
#
# Another example is include/linux/linkage.h, which is completely unrelated to
# EXPORT_SYMBOL(). Worse, it is included by most C files, which means, most C
# files end up including <linux/export.h>, even though only some of them
# actually export symbols. Hence, include/linux/linkage.h should *not* include
# <linux/export.h>.
#
# Before fixing such headers, we must ensure that C files using EXPORT_SYMBOL()
# include <linux/export.h> directly, since many C files currently rely on
# <linux/export.h> being included indirectly (likely, via <linux/linkage> etc.).
#
# Therefore, this check.
#
# The problem is simple - the warned files use EXPORT_SYMBOL(), but do not
# include <linux/export.h>. Please add #include <linux/export.h> to them.
#
# If the included headers are sorted alphabetically, please insert
# <linux/export.h> in the appropriate position to maintain the sort order.
# For this reason, this script only checks missing <linux/export.h>, but
# does not automatically fix it.
check_missing_include_linux_export_h () {

	git -C "${srctree:-.}" grep --files-with-matches -E 'EXPORT_SYMBOL((_NS)?(_GPL)?|_FOR_MODULES)\(.*\)' \
	    -- '*.[ch]' :^tools/ :^include/linux/export.h |
	xargs -r git -C "${srctree:-.}" grep --files-without-match '#include[[:space:]]*<linux/export\.h>' |
	xargs -r printf "%s: warning: EXPORT_SYMBOL() is used, but #include <linux/export.h> is missing\n" >&2
}

# If you do not use EXPORT_SYMBOL(), please do not include <linux/export.h>.
# Currently, this is checked for *.c files, but not for *.h files, because some
# *.c files rely on <linux/export.h> being included indirectly.
check_unnecessary_include_linux_export_h () {

	git -C "${srctree:-.}" grep --files-with-matches '#include[[:space:]]*<linux/export\.h>' \
	    -- '*.[c]' :^tools/ |
	xargs -r git -C "${srctree:-.}" grep --files-without-match -E 'EXPORT_SYMBOL((_NS)?(_GPL)?|_FOR_MODULES)\(.*\)' |
	xargs -r printf "%s: warning: EXPORT_SYMBOL() is not used, but #include <linux/export.h> is present\n" >&2
}

case "${KBUILD_EXTRA_WARN}" in
*1*)
	check_tracked_ignored_files
	;;
esac

case "${KBUILD_EXTRA_WARN}" in
*2*)
	check_missing_include_linux_export_h
	check_unnecessary_include_linux_export_h
	;;
esac
