Lines Matching defs:suff

1 /*	$NetBSD: suff.c,v 1.383 2025/01/14 21:39:24 rillig Exp $	*/
117 /* "@(#)suff.c 8.4 (Berkeley) 3/21/94" */
118 MAKE_RCSID("$NetBSD: suff.c,v 1.383 2025/01/14 21:39:24 rillig Exp $");
206 Suffix *suff;
232 * in suff-transform-endless.mk.
246 Suffix_Ref(Suffix *suff)
248 suff->refCount++;
249 return suff;
254 Suffix_Reassign(Suffix **var, Suffix *suff)
258 *var = suff;
259 suff->refCount++;
287 * See if suff is a suffix of str, and if so, return the pointer to the suffix
291 StrTrimSuffix(const char *str, size_t strLen, const char *suff, size_t suffLen)
301 if (suff[i] != suffInStr[i])
308 * See if suff is a suffix of name, and if so, return the end of the prefix
312 Suffix_TrimSuffix(const Suffix *suff, size_t nameLen, const char *nameEnd)
315 suff->name, suff->nameLen);
319 Suffix_IsSuffix(const Suffix *suff, size_t nameLen, const char *nameEnd)
321 return Suffix_TrimSuffix(suff, nameLen, nameEnd) != NULL;
330 Suffix *suff = ln->datum;
331 if (suff->nameLen == nameLen &&
332 memcmp(suff->name, name, nameLen) == 0)
333 return suff;
358 SuffixList_Unref(SuffixList *list, Suffix *suff)
360 SuffixListNode *ln = Lst_FindDatum(list, suff);
363 suff->refCount--;
368 Suffix_Free(Suffix *suff)
371 if (suff == nullSuff)
374 if (suff == emptySuff)
379 if (suff->refCount != 0)
381 suff->name, suff->refCount);
384 Lst_Done(&suff->children);
385 Lst_Done(&suff->parents);
386 SearchPath_Free(suff->searchPath);
388 free(suff->name);
389 free(suff);
394 SuffixList_Remove(SuffixList *list, Suffix *suff)
396 SuffixList_Unref(list, suff);
397 if (suff->refCount == 0) {
398 /* XXX: can lead to suff->refCount == -1 */
399 SuffixList_Unref(&sufflist, suff);
400 DEBUG1(SUFF, "Removing suffix \"%s\"\n", suff->name);
401 Suffix_Free(suff);
410 SuffixList_Insert(SuffixList *list, Suffix *suff)
417 if (listSuff->sNum >= suff->sNum)
423 suff->name, suff->sNum);
424 Lst_Append(list, Suffix_Ref(suff));
425 } else if (listSuff->sNum != suff->sNum) {
427 suff->name, suff->sNum, listSuff->name, listSuff->sNum);
428 Lst_InsertBefore(list, ln, Suffix_Ref(suff));
431 suff->name, suff->sNum);
445 Suffix *suff = bmake_malloc(sizeof *suff);
447 suff->name = bmake_strdup(name);
448 suff->nameLen = strlen(suff->name);
449 suff->searchPath = SearchPath_New();
450 Lst_Init(&suff->children);
451 Lst_Init(&suff->parents);
452 suff->sNum = sNum++;
453 suff->include = false;
454 suff->library = false;
455 suff->isNull = false;
456 suff->refCount = 1; /* XXX: why 1? It's not assigned anywhere yet. */
458 return suff;
671 * suff Suffix to rebuild
674 RebuildGraph(GNode *transform, Suffix *suff)
683 toName = StrTrimPrefix(suff->name, name);
687 Relate(suff, to);
695 toName = Suffix_TrimSuffix(suff, nameLen, name + nameLen);
700 Relate(from, suff);
716 UpdateTarget(GNode *target, Suffix *suff, bool *inout_removedMain)
746 ptr = strstr(target->name, suff->name);
751 * XXX: In suff-rebuild.mk, in the line '.SUFFIXES: .c .b .a', this
755 * XXX: Removing this paragraph makes suff-add-later.mk use massive
791 UpdateTargets(Suffix *suff)
798 if (UpdateTarget(gn, suff, &removedMain))
809 Suffix *suff = FindSuffixByName(name);
810 if (suff != NULL)
813 suff = Suffix_New(name);
814 Lst_Append(&sufflist, suff);
815 DEBUG1(SUFF, "Adding suffix \"%s\"\n", suff->name);
817 UpdateTargets(suff);
824 RebuildGraph(ln->datum, suff);
831 Suffix *suff = FindSuffixByName(name);
832 return suff != NULL ? suff->searchPath : NULL;
857 Suffix *suff = ln->datum;
858 if (!Lst_IsEmpty(&suff->searchPath->dirs)) {
859 if (suff->include)
861 suff->searchPath);
862 if (suff->library)
863 SearchPath_AddAll(libsPath, suff->searchPath);
864 SearchPath_AddAll(suff->searchPath, &dirSearchPath);
866 SearchPath_Free(suff->searchPath);
867 suff->searchPath = Dir_CopyDirSearchPath();
892 Suffix *suff = FindSuffixByName(suffName);
893 if (suff != NULL)
894 suff->include = true;
906 Suffix *suff = FindSuffixByName(suffName);
907 if (suff != NULL)
908 suff->library = true;
963 Candidate_New(char *name, char *prefix, Suffix *suff, Candidate *parent,
970 cand->suff = Suffix_Ref(suff);
984 Suffix *suff, const char *debug_tag MAKE_ATTR_UNUSED)
986 Candidate *cand = Candidate_New(srcName, targ->prefix, suff, targ,
993 debug_printf("%s add suff %p:%s candidate %p:%s to list %p:",
1007 for (ln = cand->suff->children.first; ln != NULL; ln = ln->next) {
1008 Suffix *suff = ln->datum;
1010 if (suff->isNull && suff->name[0] != '\0') {
1017 cand, suff, "1");
1020 CandidateList_Add(list, str_concat2(cand->prefix, suff->name),
1021 cand, suff, "2");
1109 src->suff->searchPath);
1144 Suffix *suff; /* Suffix of the matching candidate */
1172 suff = FindSuffixByName(base + prefLen);
1173 if (suff == NULL)
1183 if (Lst_FindDatum(&suff->parents, targ->suff) != NULL)
1190 ret = Candidate_New(bmake_strdup(sgn->name), targ->prefix, suff, targ,
1410 Suffix *suff = gn->suffix;
1412 if (suff == NULL) {
1422 suff = ln->datum;
1429 if (suff != NULL) {
1430 DEBUG1(SUFF, "suffix is \"%s\"...\n", suff->name);
1431 return suff->searchPath;
1515 Suffix *suff = ln->datum;
1516 if (!ApplyTransform(gn, mem, suff, memSuff)) {
1518 memSuff->name, suff->name);
1634 Suffix *suff = FindSuffixByName(LIBSUFF);
1635 if (suff != NULL) {
1636 Suffix_Reassign(&gn->suffix, suff);
1637 Arch_FindLib(gn, suff->searchPath);
1660 Suffix *suff = ln->datum;
1661 if (!Suffix_IsSuffix(suff, nameLen, name + nameLen))
1664 pref = bmake_strldup(name, (size_t)(nameLen - suff->nameLen));
1665 targ = Candidate_New(bmake_strdup(gn->name), pref, suff, NULL,
1720 targ == NULL ? &dirSearchPath : targ->suff->searchPath);
1731 size_t savep = strlen(gn->path) - targ->suff->nameLen;
1734 Suffix_Reassign(&gn->suffix, targ->suff);
1768 * They all have the same file, but different suff and prefix fields.
1865 if (targ->suff->library)
1910 Suffix_Reassign(&src->node->suffix, src->suff);
1915 ApplyTransform(targ->node, src->node, targ->suff, src->suff);
1933 Suffix_Reassign(&gn->suffix, src->suff);
2017 Suffix *suff = FindSuffixByName(name);
2018 if (suff == NULL) {
2027 suff->isNull = true;
2029 nullSuff = suff;
2071 const Suffix *suff = ln->datum;
2072 debug_printf("%s ", suff->name);
2078 Suffix_Print(const Suffix *suff)
2083 Buf_AddFlag(&buf, suff->include, "SUFF_INCLUDE");
2084 Buf_AddFlag(&buf, suff->library, "SUFF_LIBRARY");
2085 Buf_AddFlag(&buf, suff->isNull, "SUFF_NULL");
2088 suff->name, suff->sNum, suff->refCount);
2095 PrintSuffNames("To", &suff->parents);
2096 PrintSuffNames("From", &suff->children);
2099 SearchPath_Print(suff->searchPath);
2136 Suffix *suff;
2140 suff = ln->datum;
2143 Buf_AddStr(&buf, suff->name);