More effective processing (Re: [PATCH 25/33] kbuild: use POSIX BRE in headers install target)

Oleg Verych
2007-07-21T22:03:01Z

On Sat, Jul 21, 2007 at 10:39:16PM +0200, Sam Ravnborg wrote:
> On Sat, Jul 21, 2007 at 03:21:43PM -0400, Mike Frysinger wrote:
[]
> > while you could try and make a claim against memory/cpu effeciency, i
> > fail to see how the first or last claims could possibly be backed up

Less \{\(\\n\t\+\)\} [0] stuff make readings regex much easier. My
confusion shows that i didn't used \{ much, because have another ways
so far. And even after my quick testing i didn't realize that there
was unrelated to main task whitespace cleanup.

[0] http://sed.sf.net/grabbag/tutorials/lookup_tables.txt

> > but again, if you feel that strongly about it, you're certainly free
> > to post a patch
>
> I would much more prefer this functionality to be integrated into unifdef.
> There is no good reason to have two different preprocesisng methonds, one
> being the sed based one and the other the unidef one.

Clear definition of the task will help to design a solution. I can do
the job, but figuring out all possible corner cases from current
solutions, mixed in Makefiles or everywhere else is not option.

> A sinlge dedicated program that contian the sum of the functionality would
> be faster too.

What do you think about this one? I want to propose to remove
scripts/unifdef.c but to make clear policy about how to mark __KERNEL__
sections in header files. We know how obfuscated C can be, and this also
applies to preprocessing. There's known CodingStyle about some points.
The thing is to specify rules, that will be easy for `sed` to do cleaup
job.

./linux/soundcard.h:#if (!defined(__KERNEL__) && !defined(KERNEL) && !defined(INKERNEL)
&& !defined(_KERNEL)) || defined(USE_SEQ_MACROS)
./linux/stat.h:#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)

Split __KERNEL__ check, make only positive, i.e.

#if defined(__KERNEL__)
#ifdef __KERNEL__

./linux/stat.h:#ifdef __KERNEL__

No `#else` and ending part to contain comment:

./linux/smb_fs_sb.h:#endif /* __KERNEL__ */

Simple enough:

sed '/^#if[^_]*__KERNEL__/,/^#end[^_]*__KERNEL__/d'
____