John W. Linville 6d0a652
From 69f63a67165da5e9f08c1132521598701d914573 Mon Sep 17 00:00:00 2001
John W. Linville 6d0a652
From: John W. Linville <linville@tuxdriver.com>
John W. Linville 6d0a652
Date: Wed, 14 Dec 2011 11:09:04 -0500
John W. Linville 6d0a652
Subject: [PATCH] modpost: add option to allow external modules to avoid taint
John W. Linville 6d0a652
John W. Linville 6d0a652
In some cases, it might be desirable to package a module from an
John W. Linville 6d0a652
external source tree alongside the base kernel.  In those cases, it
John W. Linville 6d0a652
might also be desirable to not have those modules tainting the kernel.
John W. Linville 6d0a652
John W. Linville 6d0a652
This patch provides a mechanism for an external module build to declare
John W. Linville 6d0a652
itself as an "integrated build".  Such a module is then treated the same
John W. Linville 6d0a652
as an intree module.
John W. Linville 6d0a652
John W. Linville 6d0a652
Signed-off-by: John W. Linville <linville@tuxdriver.com>
John W. Linville 6d0a652
---
John W. Linville 6d0a652
Any thoughts on this?  I'm thinking of adding this to Fedora kernels,
John W. Linville 6d0a652
where I have been working to integrate the compat-wireless package as
John W. Linville 6d0a652
part of the base kernel RPM.
John W. Linville 6d0a652
John W. Linville 6d0a652
 scripts/Makefile.modpost |    1 +
John W. Linville 6d0a652
 scripts/mod/modpost.c    |   10 ++++++++--
John W. Linville 6d0a652
 2 files changed, 9 insertions(+), 2 deletions(-)
John W. Linville 6d0a652
John W. Linville 6d0a652
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
John W. Linville 6d0a652
index 08dce14..160c6fb 100644
John W. Linville 6d0a652
--- a/scripts/Makefile.modpost
John W. Linville 6d0a652
+++ b/scripts/Makefile.modpost
John W. Linville 6d0a652
@@ -81,6 +81,7 @@ modpost = scripts/mod/modpost                    \
John W. Linville 6d0a652
  $(if $(KBUILD_EXTMOD),-o $(modulesymfile))      \
John W. Linville 6d0a652
  $(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S)      \
John W. Linville 6d0a652
  $(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w) \
John W. Linville 6d0a652
+ $(if $(INTEGRATED_BUILD),-B) \
John W. Linville 6d0a652
  $(if $(cross_build),-c)
John W. Linville 6d0a652
 
John W. Linville 6d0a652
 quiet_cmd_modpost = MODPOST $(words $(filter-out vmlinux FORCE, $^)) modules
John W. Linville 6d0a652
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
John W. Linville 6d0a652
index 2bd594e..5d077f9 100644
John W. Linville 6d0a652
--- a/scripts/mod/modpost.c
John W. Linville 6d0a652
+++ b/scripts/mod/modpost.c
John W. Linville 6d0a652
@@ -43,6 +43,9 @@ static int warn_unresolved = 0;
John W. Linville 6d0a652
 static int sec_mismatch_count = 0;
John W. Linville 6d0a652
 static int sec_mismatch_verbose = 1;
John W. Linville 6d0a652
 
John W. Linville 6d0a652
+/* Is this a module being built as part of an integrated package? */
John W. Linville 6d0a652
+static int integrated_build = 0;
John W. Linville 6d0a652
+
John W. Linville 6d0a652
 enum export {
John W. Linville 6d0a652
 	export_plain,      export_unused,     export_gpl,
John W. Linville 6d0a652
 	export_unused_gpl, export_gpl_future, export_unknown
John W. Linville 6d0a652
@@ -1851,7 +1854,7 @@ static void add_header(struct buffer *b, struct module *mod)
John W. Linville 6d0a652
 
John W. Linville 6d0a652
 static void add_intree_flag(struct buffer *b, int is_intree)
John W. Linville 6d0a652
 {
John W. Linville 6d0a652
-	if (is_intree)
John W. Linville 6d0a652
+	if (is_intree || integrated_build)
John W. Linville 6d0a652
 		buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
John W. Linville 6d0a652
 }
John W. Linville 6d0a652
 
John W. Linville 6d0a652
@@ -2101,7 +2104,7 @@ int main(int argc, char **argv)
John W. Linville 6d0a652
 	struct ext_sym_list *extsym_iter;
John W. Linville 6d0a652
 	struct ext_sym_list *extsym_start = NULL;
John W. Linville 6d0a652
 
John W. Linville 6d0a652
-	while ((opt = getopt(argc, argv, "i:I:e:cmsSo:awM:K:")) != -1) {
John W. Linville 6d0a652
+	while ((opt = getopt(argc, argv, "i:I:e:cmsSo:awM:K:B")) != -1) {
John W. Linville 6d0a652
 		switch (opt) {
John W. Linville 6d0a652
 		case 'i':
John W. Linville 6d0a652
 			kernel_read = optarg;
John W. Linville 6d0a652
@@ -2139,6 +2142,9 @@ int main(int argc, char **argv)
John W. Linville 6d0a652
 		case 'w':
John W. Linville 6d0a652
 			warn_unresolved = 1;
John W. Linville 6d0a652
 			break;
John W. Linville 6d0a652
+		case 'B':
John W. Linville 6d0a652
+			integrated_build = 1;
John W. Linville 6d0a652
+			break;
John W. Linville 6d0a652
 		default:
John W. Linville 6d0a652
 			exit(1);
John W. Linville 6d0a652
 		}
John W. Linville 6d0a652
-- 
John W. Linville 6d0a652
1.7.4.4
John W. Linville 6d0a652