On Wed, 20 Apr 2016, Kieran Bingham wrote:
> On 20/04/16 16:53, Julia Lawall wrote:
> >
> > On Wed, 20 Apr 2016, Kieran Bingham wrote:
> >
> >> Hi all,
> >>
> >> I am finding that a rule which matches a part of code, sometimes causes
> >> hunks which depend on it to act, and sometimes not to act
> >>
> >> My spatch is successfully removing and converting hunks that I desire
> >> changed, however the requirement became apparent *to not process the
> >> file at all* if the variable is used in the probe function, so I added
> >> in a dependency on probe_id_unused (established in my previous mail
> >> thread).
> >
> > I'll check on the rest shortly, but if you really want to not process the
> > file at all, just look for the condition in which that is the case, and
> > then write a python rule that depends on it, and run Cocci.exit() (not
> > sure about the exact syntax - writing an ocaml rule and putting
> > Coccilib.exit() will also work).
>
>
> Thanks Julia,
>
> The following worked for my needs:
>
> @ script:python depends on driver && !probe_id_unused @
> @@
> print("Probe function uses the ID parameter")
> cocci.exit()
>
> However, interestingly - it's not useful if I specify a minimal set of
> files on the command line:
>
> Using the command:
> spatch --linux-spacing --sp-file patches/i2c-dt.cocci $A $B $C $D
> HANDLING: sound/soc/codecs/wm8737.c drivers/staging/iio/light/isl29018.c
> drivers/gpio/gpio-pca953x.c ./drivers/rtc/rtc-ds1307.c
> Probe function uses the ID parameter
> kbingham@CookieMonster:/opt/projects/linux/kbuild-bbb/sources/linux$
>
> appears to stop at the first file (which is expected to stop) without
> processing the next files.
>
> However, simply using the '.' target - does appear to iterate through
> the entire sources successfully, parsing files it can, and stopping on
> files that it should stop on.
Putting multiple files on the command line is not the right way to process
multiple files. What that means is to process those files all at once.
Normally Coccinelle processes only one file at a time, which means that
when there is a call from a function in one file to a function in another,
it won't find the definition of the called function. If you put multiple
files on the command line, it will see them all at once. The downside
though is that Coccinelle will ultimately run more slowly, because it will
be using a lot more memory at a given time.
If you have a directory where you want to process only some of the files,
you can use the --file-groups <file> option. <file> could be eg
path/foo.c
path/bar.c
path/xyz.c
Then foo.c and bar.c will be processed at once, and xyz.c will be
processed separately.
But it could be easier to just work on the whole directory and let
Coccinelle to fail to do anything with most of the files.
julia
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci