On 2016-03-04 03:46, Nicolas Pitre wrote: > On Thu, 3 Mar 2016, Michal Marek wrote: > >> Dne 29.2.2016 v 04:48 Nicolas Pitre napsal(a): >>> +# Filter out exported kernel symbol names advertised as warning pragmas >>> +# by the preprocessor and write them to $(1). We must consider continuation >>> +# lines as well: they start with a blank, or the preceeding line ends with >>> +# a ':'. Anything else is passed through as is. >>> +# See also __KSYM_DEP() in include/linux/export.h. >>> +ksym_dep_filter = sed -n \ >>> + -e '1 {x; $$!d}' \ >>> + -e '/^ / {H; $$!d}' \ >>> + -e 'x; /:$$/ {x; H; $$!d; s/^/ /; x}' \ >>> + -e ':filter; /^.*KBUILD_AUTOKSYM_DEP: /! {p; b next}' \ >>> + -e 's//KSYM_/; s/\n.*//; w $(1)' \ >>> + -e ':next; $$!d' \ >>> + -e '1 q; s/^/ /; x; /^ /! b filter' >> >> This is unreadable and it does not work with my gcc version. I get >> dependencies like >> >> $(wildcard include/config/ksym/simple/strtoull [enabled by default].h) \ > > That's too bad. This had almost zero overhead as the preprocessor > didn't have to be executed twice. I know you are trying to collect the exports in a single pass, but parsing the compiler warnings is really fragile. > Probably adding s/ .*//; before w $(1) would fix that. But I agree this > is fragile. What gcc version is this? $ gcc --version gcc (SUSE Linux) 4.8.3 20140627 [gcc-4_8-branch revision 212064] ... The output looks like this: $ echo '_Pragma("GCC warning \"KBUILD_AUTOKSYM_DEP: test\"")' | gcc -Wall -c -xc - <stdin>:1:13: warning: KBUILD_AUTOKSYM_DEP: test [enabled by default] Clang output is similar, except that the text appears twice in the output: $ echo '_Pragma("GCC warning \"KBUILD_AUTOKSYM_DEP: test\"")' | clang -Wall -c -xc - <stdin>:1:1: warning: KBUILD_AUTOKSYM_DEP: test [-W#pragma-messages] _Pragma("GCC warning \"KBUILD_AUTOKSYM_DEP: test\"") ^ <scratch space>:2:6: note: expanded from here GCC warning "KBUILD_AUTOKSYM_DEP: test" ^ What is worse, older gccs do not support the GCC warning pragma: $ gcc --version gcc (GCC) 4.1.2 20070115 (SUSE Linux) ... $ echo '_Pragma("GCC warning \"KBUILD_AUTOKSYM_DEP: test\"")' | gcc -Wall -c -xc - <stdin>:1: warning: ignoring #pragma GCC warning > Oh and who said that a sed script had to, or could be readable? ;-) I guess I could live with a non-redable sed script embedded in a Makefile, if I knew that it won't need updating for each new compiler release :). Michal -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html