Module Name: src Committed By: rillig Date: Wed Oct 21 06:26:46 UTC 2020
Modified Files: src/usr.bin/make: suff.c Log Message: make(1): extract handling of known suffix from SuffFindNormalDeps To generate a diff of this commit: cvs rdiff -u -r1.200 -r1.201 src/usr.bin/make/suff.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/make/suff.c diff -u src/usr.bin/make/suff.c:1.200 src/usr.bin/make/suff.c:1.201 --- src/usr.bin/make/suff.c:1.200 Wed Oct 21 06:12:16 2020 +++ src/usr.bin/make/suff.c Wed Oct 21 06:26:46 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: suff.c,v 1.200 2020/10/21 06:12:16 rillig Exp $ */ +/* $NetBSD: suff.c,v 1.201 2020/10/21 06:26:46 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -129,7 +129,7 @@ #include "dir.h" /* "@(#)suff.c 8.4 (Berkeley) 3/21/94" */ -MAKE_RCSID("$NetBSD: suff.c,v 1.200 2020/10/21 06:12:16 rillig Exp $"); +MAKE_RCSID("$NetBSD: suff.c,v 1.201 2020/10/21 06:26:46 rillig Exp $"); #define SUFF_DEBUG0(text) DEBUG0(SUFF, text) #define SUFF_DEBUG1(fmt, arg1) DEBUG1(SUFF, fmt, arg1) @@ -1588,6 +1588,57 @@ SuffFindArchiveDeps(GNode *gn, SrcList * mem->type |= OP_MEMBER | OP_JOIN | OP_MADE; } +static void +SuffFindNormalDepsKnown(const struct SuffSuffGetSuffixArgs *sd, GNode *gn, + const char *eoname, const char *sopref, + SrcList *srcs, SrcList *targs) +{ + SuffListNode *ln = sufflist->first; + + while (ln != NULL) { + /* + * Look for next possible suffix... + */ + ln = Lst_FindFrom(sufflist, ln, SuffSuffIsSuffix, sd); + + if (ln != NULL) { + const char *eopref; + + /* + * Allocate a Src structure to which things can be transformed + */ + Src *targ = bmake_malloc(sizeof(Src)); + targ->file = bmake_strdup(gn->name); + targ->suff = ln->datum; + targ->suff->refCount++; + targ->node = gn; + targ->parent = NULL; + targ->children = 0; +#ifdef DEBUG_SRC + targ->cp = Lst_New(); +#endif + + eopref = eoname - targ->suff->nameLen; + targ->pref = bmake_strsedup(sopref, eopref); + + /* + * Add nodes from which the target can be made + */ + SuffAddLevel(srcs, targ); + + /* + * Record the target so we can nuke it + */ + Lst_Append(targs, targ); + + /* + * Search from this suffix's successor... + */ + ln = ln->next; + } + } +} + /* Locate implicit dependencies for regular targets. * * Input: @@ -1601,7 +1652,6 @@ SuffFindNormalDeps(GNode *gn, SrcList *s { char *eoname; /* End of name */ char *sopref; /* Start of prefix */ - SuffListNode *ln, *nln; SrcList *srcs; /* List of sources at which to look */ SrcList *targs; /* List of targets to which things can be * transformed. They all have the same file, @@ -1621,7 +1671,6 @@ SuffFindNormalDeps(GNode *gn, SrcList *s /* * Begin at the beginning... */ - ln = sufflist->first; srcs = Lst_New(); targs = Lst_New(); @@ -1648,48 +1697,7 @@ SuffFindNormalDeps(GNode *gn, SrcList *s if (!(gn->type & OP_PHONY)) { - while (ln != NULL) { - /* - * Look for next possible suffix... - */ - ln = Lst_FindFrom(sufflist, ln, SuffSuffIsSuffix, &sd); - - if (ln != NULL) { - const char *eopref; - - /* - * Allocate a Src structure to which things can be transformed - */ - targ = bmake_malloc(sizeof(Src)); - targ->file = bmake_strdup(gn->name); - targ->suff = ln->datum; - targ->suff->refCount++; - targ->node = gn; - targ->parent = NULL; - targ->children = 0; -#ifdef DEBUG_SRC - targ->cp = Lst_New(); -#endif - - eopref = eoname - targ->suff->nameLen; - targ->pref = bmake_strsedup(sopref, eopref); - - /* - * Add nodes from which the target can be made - */ - SuffAddLevel(srcs, targ); - - /* - * Record the target so we can nuke it - */ - Lst_Append(targs, targ); - - /* - * Search from this suffix's successor... - */ - ln = ln->next; - } - } + SuffFindNormalDepsKnown(&sd, gn, eoname, sopref, srcs, targs); /* * Handle target of unknown suffix... @@ -1762,9 +1770,12 @@ SuffFindNormalDeps(GNode *gn, SrcList *s * Now we've got the important local variables set, expand any sources * that still contain variables or wildcards in their names. */ - for (ln = gn->children->first; ln != NULL; ln = nln) { - nln = ln->next; - SuffExpandChildren(ln, gn); + { + SuffListNode *ln, *nln; + for (ln = gn->children->first; ln != NULL; ln = nln) { + nln = ln->next; + SuffExpandChildren(ln, gn); + } } if (targ == NULL) {