+To Arnd +To Michal 2017-03-19 6:58 GMT+09:00 Ben Hutchings <ben@xxxxxxxxxxxxxxx>: > systemtap currently fails to build modules when the kernel source and > object trees are separate. > > systemtap adds something like -I"/usr/share/systemtap/runtime" to > EXTRA_CFLAGS, and addtree should not adjust this as it's specifying an > absolute directory. But since make has no understanding of shell > quoting, it does anyway. > > For a long time this didn't matter, because addtree would still emit > the original -I option after the adjusted one. However, commit > db547ef19064 ("Kbuild: don't add obj tree in additional includes") > changed it to remove the original -I option. > > Remove quotes (both double and single) before matching against the > excluded patterns. > > References: https://bugs.debian.org/856474 > Reported-and-tested-by: Jack Henschel <jackdev@xxxxxxxxxxx> > Reported-and-tested-by: Ritesh Raj Sarraf <rrs@xxxxxxxxxx> > Fixes: db547ef19064 ("Kbuild: don't add obj tree in additional includes") > Cc: stable@xxxxxxxxxxxxxxx # 4.8+ > Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx> > --- > --- a/scripts/Kbuild.include > +++ b/scripts/Kbuild.include > @@ -207,7 +207,7 @@ hdr-inst := -f $(srctree)/scripts/Makefi > # Prefix -I with $(srctree) if it is not an absolute path. > # skip if -I has no parameter > addtree = $(if $(patsubst -I%,%,$(1)), \ > -$(if $(filter-out -I/% -I./% -I../%,$(1)),$(patsubst -I%,-I$(srctree)/%,$(1)),$(1))) > +$(if $(filter-out -I/% -I./% -I../%,$(subst $(quote),,$(subst $(squote),,$(1)))),$(patsubst -I%,-I$(srctree)/%,$(1)),$(1))) > > # Find all -I options and call addtree > flags = $(foreach o,$($(1)),$(if $(filter -I%,$(o)),$(call addtree,$(o)),$(o))) I have been thinking about this patch. We touched addtree every time a new problem popped up. It would be easy to pick up this patch, but it looks like a crazy idea to play pattern-matching in the addtree even more. [1] -Ifoo/bar/baz [2] -I"foo/bar/baz" [3] -I foo/bar/baz (whitespace(s) after -I) All of these are valid notation, and should be handled in the same way. However, addtree expects only [1], (then this patch is going to add [2] in the soup). Each Makefile knows it wants to see additional headers in the source tree, or objtree. I am guessing the right approach in a long run is, we require -I to specify $(srctree) or $(objtree) explicitly. ccflags-y := -I$(srctree)/foo/bar/baz or ccflags-y := -I$(objtree)/foo/bar/baz (For the latter, we can omit $(objtree)/ as it is ./) Then, delete $(call flags,_c_flags) after the conversion. Any comments? -- Best Regards Masahiro Yamada