Re: [PATCHv3] tools build: Make fixdep parsing wait for last target
From: Peter Foley
Date: Thu Dec 01 2016 - 12:49:13 EST
On Thu, Dec 1, 2016 at 5:00 AM, Jiri Olsa <jolsa@xxxxxxxxxx> wrote:
> ok, so v3 actually ;-)
>
> the v2 was tricky for the case when fixdep is not available,
> so I decided to go with Peter's fix and fixing 'fixdep' tool
> to properly parse out the target in case we hit the ccache
> error.. we need to be able to do it anyway
>
> please apply this patch before Peter's so we keep clean bisect
>
> thanks,
> jirka
>
>
> ---
> The fixdep tool among other things replaces the target of
> the object in the gcc generated dependency output file.
>
> The parsing code assumes there's only single target in the
> rule but this is not always the case as described in here:
> https://gcc.gnu.org/ml/gcc-help/2016-11/msg00099.html
>
> Making the fixdep code smart enough to skip all the possible
> targets.
>
> Link: http://lkml.kernel.org/n/tip-anlmi1osaky314m1gu3skdnz@xxxxxxxxxxxxxx
> Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx>
> ---
> tools/build/fixdep.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/tools/build/fixdep.c b/tools/build/fixdep.c
> index 1521d36cef0d..734d1547cbae 100644
> --- a/tools/build/fixdep.c
> +++ b/tools/build/fixdep.c
> @@ -49,7 +49,7 @@ static void parse_dep_file(void *map, size_t len)
> char *end = m + len;
> char *p;
> char s[PATH_MAX];
> - int is_target;
> + int is_target, has_target = 0;
> int saw_any_target = 0;
> int is_first_dep = 0;
>
> @@ -67,7 +67,8 @@ static void parse_dep_file(void *map, size_t len)
> if (is_target) {
> /* The /next/ file is the first dependency */
> is_first_dep = 1;
> - } else {
> + has_target = 1;
> + } else if (has_target) {
> /* Save this token/filename */
> memcpy(s, m, p-m);
> s[p - m] = 0;
> --
> 2.7.4
>
Acked-by: Peter Foley <pefoley2@xxxxxxxxxxx>