On Tue, 10 May 2016 16:42:25 +0200, Marc Espie wrote:

> Both bmake and gmake support a list of files in include/sinclude 
> "systemV style".
> 
> Adding this to our make would make us slightly more compatible.
> 
> It also allows modern dependency patterns a la
> 
> .sinclude ${SRC:R:=.d}
> 
> Just went thru a full make build.
> could use a few eyes.
> 
> The change is straightforward, but the patch a bit long, because I have 
> to move the location of Var_Substs... keep it simple in the bsd make case (we
> don't want to create syntax by substituting variables). And so the handling
> of string intervals trickles down the chain of function.
> 
> I refrained from also supporting gmake's glob extension, where they can do
> .sinclude *.d
> 
> We have the match code in dir_expand.c, but this would be complicated to
> mesh with the include directory lookup in resolve_include_filename.
> 
> Comments and okays welcome.

Looks OK but one minor comment:

> Index: parse.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/make/parse.c,v
> retrieving revision 1.115
> diff -u -p -r1.115 parse.c
> --- parse.c   22 Dec 2015 21:50:54 -0000      1.115
> +++ parse.c   10 May 2016 14:35:26 -0000
> @@ -1133,25 +1132,19 @@ resolve_include_filename(const char *fil
>       if (isSystem)
>               return NULL;
>       else
> -             return Dir_FindFile(file, systemIncludePath);
> +             return Dir_FindFilei(file, efile, systemIncludePath);
>  }
>  
>  static void
> -handle_include_file(const char *name, const char *ename, bool isSystem,
> +handle_include_file(const char *file, const char *efile, bool isSystem,
>      bool errIfNotFound)
>  {
> -     char *file;
>       char *fullname;
>  
> -     /* Substitute for any variables in the file name before trying to
> -      * find the thing. */
> -     file = Var_Substi(name, ename, NULL, false);
> -
> -     fullname = resolve_include_filename(file, isSystem);
> +     fullname = resolve_include_filename(file, efile, isSystem);
>       if (fullname == NULL && errIfNotFound)
> -             Parse_Error(PARSE_FATAL, "Could not find %s", file);
> -     free(file);
> -
> +             Parse_Error(PARSE_FATAL, "Could not find %s", 
> +                 Str_dupi(file, efile));

I don't think you need that Str_dupi() if you do:

        Parse_Error(PARSE_FATAL, "Could not find %.*s",
            (int)(efile - file), file);

>       if (fullname != NULL) {
>               FILE *f;

Reply via email to