Lines Matching +full:t +full:- +full:head
5 /*-
6 * SPDX-License-Identifier: BSD-2-Clause
66 #define REQUIRE_LEN (sizeof(REQUIRE_STR) - 1)
68 #define REQUIRES_LEN (sizeof(REQUIRES_STR) - 1)
70 #define PROVIDE_LEN (sizeof(PROVIDE_STR) - 1)
72 #define PROVIDES_LEN (sizeof(PROVIDES_STR) - 1)
74 #define BEFORE_LEN (sizeof(BEFORE_STR) - 1)
76 #define KEYWORD_LEN (sizeof(KEYWORD_STR) - 1)
78 #define KEYWORDS_LEN (sizeof(KEYWORDS_STR) - 1)
104 flag head; member
179 while ((ch = getopt(argc, argv, "dgk:ps:")) != -1) in main()
185 warnx("debugging not compiled in, -d ignored"); in main()
204 argc -= optind; in main()
244 ent->node = fnode; in strnode_add()
245 strcpy(ent->s, s); in strnode_add()
246 ent->next = *listp; in strnode_add()
267 temp->filename = estrdup(filename); in filenode_new()
268 temp->req_list = NULL; in filenode_new()
269 temp->prov_list = NULL; in filenode_new()
270 temp->keyword_list = NULL; in filenode_new()
271 temp->in_progress = RESET; in filenode_new()
277 temp->next = fn_head->next; in filenode_new()
278 if (temp->next != NULL) in filenode_new()
279 temp->next->last = temp; in filenode_new()
280 temp->last = fn_head; in filenode_new()
281 fn_head->next = temp; in filenode_new()
299 rnode->entry = entry; in add_require()
300 rnode->next = fnode->req_list; in add_require()
301 fnode->req_list = rnode; in add_require()
305 * add a provision to a filenode. if this provision doesn't
306 * have a head node, create one here.
313 provnode *pnode, *head; in add_provide() local
317 head = Hash_GetValue(entry); in add_provide()
319 /* create a head node if necessary. */ in add_provide()
320 if (head == NULL) { in add_provide()
321 head = emalloc(sizeof(*head)); in add_provide()
322 head->head = SET; in add_provide()
323 head->in_progress = RESET; in add_provide()
324 head->fnode = NULL; in add_provide()
325 head->sequence = 0; in add_provide()
326 head->last = head->next = NULL; in add_provide()
327 Hash_SetValue(entry, head); in add_provide()
331 * Don't warn about this. We want to be able to support in add_provide()
334 * - Two independent scripts which both provide the in add_provide()
348 * - Two interdependent scripts which both provide the in add_provide()
363 warnx("file `%s' provides `%s'.", fnode->filename, s); in add_provide()
365 head->next->fnode->filename); in add_provide()
370 pnode->head = RESET; in add_provide()
371 pnode->in_progress = RESET; in add_provide()
372 pnode->fnode = fnode; in add_provide()
373 pnode->next = head->next; in add_provide()
374 pnode->last = head; in add_provide()
375 head->next = pnode; in add_provide()
376 if (pnode->next != NULL) in add_provide()
377 pnode->next->last = pnode; in add_provide()
380 f_pnode->pnode = pnode; in add_provide()
381 f_pnode->entry = entry; in add_provide()
382 f_pnode->next = fnode->prov_list; in add_provide()
383 fnode->prov_list = f_pnode; in add_provide()
395 bf_ent->node = fnode; in add_before()
396 strcpy(bf_ent->s, s); in add_before()
397 bf_ent->next = bl_list; in add_before()
408 strnode_add(&fnode->keyword_list, s, fnode); in add_keyword()
420 while ((s = strsep(&buffer, " \t\n")) != NULL) in parse_require()
434 while ((s = strsep(&buffer, " \t\n")) != NULL) in parse_provide()
448 while ((s = strsep(&buffer, " \t\n")) != NULL) in parse_before()
462 while ((s = strsep(&buffer, " \t\n")) != NULL) in parse_keywords()
487 if (fstat(fileno(fp), &st) == -1) { in crunch_file()
504 * we don't care about length, line number, don't want # for comments, in crunch_file()
548 provnode *head, *pnode; in make_fake_provision() local
557 head = emalloc(sizeof(*head)); in make_fake_provision()
558 head->head = SET; in make_fake_provision()
559 head->in_progress = RESET; in make_fake_provision()
560 head->fnode = NULL; in make_fake_provision()
561 head->last = head->next = NULL; in make_fake_provision()
562 Hash_SetValue(entry, head); in make_fake_provision()
565 pnode->head = RESET; in make_fake_provision()
566 pnode->in_progress = RESET; in make_fake_provision()
567 pnode->fnode = node; in make_fake_provision()
568 pnode->next = head->next; in make_fake_provision()
569 pnode->last = head; in make_fake_provision()
570 head->next = pnode; in make_fake_provision()
571 if (pnode->next != NULL) in make_fake_provision()
572 pnode->next->last = pnode; in make_fake_provision()
575 f_pnode->entry = entry; in make_fake_provision()
576 f_pnode->pnode = pnode; in make_fake_provision()
577 f_pnode->next = node->prov_list; in make_fake_provision()
578 node->prov_list = f_pnode; in make_fake_provision()
600 bl = bl_list->next; in insert_before()
602 fake_prov_entry = make_fake_provision(bl_list->node); in insert_before()
604 entry = Hash_CreateEntry(provide_hash, bl_list->s, &new); in insert_before()
606 warnx("file `%s' is before unknown provision `%s'", bl_list->node->filename, bl_list->s); in insert_before()
610 Hash_FindEntry(provide_hash, bl_list->s), in insert_before()
611 bl_list->node); in insert_before()
613 for (pnode = Hash_GetValue(entry); pnode; pnode = pnode->next) { in insert_before()
614 if (pnode->head) in insert_before()
618 rnode->entry = fake_prov_entry; in insert_before()
619 rnode->next = pnode->fnode->req_list; in insert_before()
620 pnode->fnode->req_list = rnode; in insert_before()
650 /* loop though provide list of vnode drawing all non-fake dependencies */
655 provnode *head; in generate_graphviz_file_links() local
662 head = Hash_GetValue(entry); in generate_graphviz_file_links()
664 for (fpnode = fnode->prov_list; fpnode && fpnode->entry; in generate_graphviz_file_links()
665 fpnode = fpnode->next) { in generate_graphviz_file_links()
666 fname = Hash_GetKey(fpnode->entry); in generate_graphviz_file_links()
672 dep_name = Hash_GetKey(rfpnode->entry); in generate_graphviz_file_links()
677 printf("\"%s\" -> \"%s\" [%s%s];\n", in generate_graphviz_file_links()
682 ((head == NULL || in generate_graphviz_file_links()
683 (head->next && head->in_progress == SET)) ? in generate_graphviz_file_links()
689 if (head == NULL || head->next == NULL) in generate_graphviz_file_links()
693 rfpnode = head->next->fnode->prov_list; in generate_graphviz_file_links()
695 rfpnode = rfpnode->next; in generate_graphviz_file_links()
707 generate_loop_for_req(strnodelist *stack_tail, provnode *head, in generate_loop_for_req() argument
718 for (pnode = head->next; pnode; pnode = pnode->next) { in generate_loop_for_req()
723 stack_ptr = stack_ptr->next) { in generate_loop_for_req()
725 if (stack_ptr->node == pnode->fnode) { in generate_loop_for_req()
742 revstack[stack_depth - 1] = loop_entry->node->filename; in generate_loop_for_req()
743 bufsize += strlen(revstack[stack_depth - 1]); in generate_loop_for_req()
745 revstack[stack_depth - 2] = fnode->filename; in generate_loop_for_req()
746 bufsize += strlen(revstack[stack_depth - 2]); in generate_loop_for_req()
747 fnode->issues_count++; in generate_loop_for_req()
750 for (i = stack_depth - 3; i >= 0; i--) { in generate_loop_for_req()
751 revstack[i] = stack_ptr->node->filename; in generate_loop_for_req()
752 stack_ptr->node->issues_count++; in generate_loop_for_req()
753 stack_ptr = stack_ptr->next; in generate_loop_for_req()
756 bufsize += strlen(" -> ") * (stack_depth - 1); in generate_loop_for_req()
763 if (i < stack_depth - 1) in generate_loop_for_req()
764 strlcat(buf, " -> ", bufsize); in generate_loop_for_req()
780 * aren't already satisfied and aren't already being satisfied (ie,
789 provnode *head; in satisfy_req() local
793 entry = rnode->entry; in satisfy_req()
794 head = Hash_GetValue(entry); in satisfy_req()
799 if (head == NULL) { in satisfy_req()
801 Hash_GetKey(entry), fnode->filename); in satisfy_req()
807 if (head->next == NULL) in satisfy_req()
814 if (head->in_progress == SET) { in satisfy_req()
816 buf = generate_loop_for_req(stack_ptr, head, in satisfy_req()
822 Hash_GetKey(entry), fnode->filename); in satisfy_req()
832 head->in_progress = SET; in satisfy_req()
841 while (head->next != NULL) in satisfy_req()
842 do_file(head->next->fnode, &stack_item); in satisfy_req()
851 for (s = skip_list; s; s = s->next) in skip_ok()
852 for (k = fnode->keyword_list; k; k = k->next) in skip_ok()
853 if (strcmp(k->s, s->s) == 0) in skip_ok()
865 for (s = keep_list; s; s = s->next) in keep_ok()
866 for (k = fnode->keyword_list; k; k = k->next) in keep_ok()
867 if (strcmp(k->s, s->s) == 0) in keep_ok()
889 provnode *pnode, *head; in do_file() local
893 DPRINTF((stderr, "do_file on %s.\n", fnode->filename)); in do_file()
899 if (fnode->in_progress == SET) { in do_file()
901 fnode->filename); in do_file()
907 fnode->in_progress = SET; in do_file()
910 * for each requirement of fnode -> r in do_file()
913 r = fnode->req_list; in do_file()
914 fnode->sequence = 0; in do_file()
918 head = Hash_GetValue(r->entry); in do_file()
919 if (head && head->sequence > fnode->sequence) in do_file()
920 fnode->sequence = head->sequence; in do_file()
921 r = r->next; in do_file()
923 fnode->req_list = NULL; in do_file()
924 fnode->sequence++; in do_file()
926 /* if we've seen issues with this file - put it to the tail */ in do_file()
927 if (fnode->issues_count) in do_file()
928 fnode->sequence = max_sequence + 1; in do_file()
930 if (max_sequence < fnode->sequence) in do_file()
931 max_sequence = fnode->sequence; in do_file()
934 * for each provision of fnode -> p in do_file()
937 p = fnode->prov_list; in do_file()
940 if (do_graphviz == true && fnode->issues_count) { in do_file()
941 dep_name = Hash_GetKey(p->entry); in do_file()
948 head = Hash_GetValue(p->entry); in do_file()
949 if (head->sequence < fnode->sequence) in do_file()
950 head->sequence = fnode->sequence; in do_file()
953 pnode = p->pnode; in do_file()
954 if (pnode->next != NULL) { in do_file()
955 pnode->next->last = pnode->last; in do_file()
957 if (pnode->last != NULL) { in do_file()
958 pnode->last->next = pnode->next; in do_file()
961 p = p->next; in do_file()
964 fnode->prov_list = NULL; in do_file()
969 /* if we were already in progress, don't print again */ in do_file()
976 if (fnode->next != NULL) { in do_file()
977 fnode->next->last = fnode->last; in do_file()
979 if (fnode->last != NULL) { in do_file()
980 fnode->last->next = fnode->next; in do_file()
983 if (fnode->issues_count) in do_file()
985 fnode->filename, fnode->issues_count); in do_file()
987 DPRINTF((stderr, "nuking %s\n", fnode->filename)); in do_file()
1016 provnode *head, *pnode; in generate_graphviz_providers() local
1030 head = Hash_GetValue(entry); in generate_graphviz_providers()
1032 if (head == NULL || head->next == NULL) { in generate_graphviz_providers()
1039 if (head->next->next == NULL && in generate_graphviz_providers()
1041 basename(head->next->fnode->filename)) == 0) { in generate_graphviz_providers()
1045 for (pnode = head->next; pnode; pnode = pnode->next) in generate_graphviz_providers()
1046 printf("%s\\n", basename(pnode->fnode->filename)); in generate_graphviz_providers()
1061 return ((fna < fnb) - (fna > fnb)); in sequence_cmp()
1063 left = fna->sequence; in sequence_cmp()
1064 right = fnb->sequence; in sequence_cmp()
1066 return ((left > right) - (left < right)); in sequence_cmp()
1089 * after each iteration of the loop, the head will be pointing in generate_ordering()
1094 while (fn_head->next != NULL) { in generate_ordering()
1095 DPRINTF((stderr, "generate on %s\n", fn_head->next->filename)); in generate_ordering()
1096 do_file(fn_head->next, NULL); in generate_ordering()
1105 (do_parallel != true || last_seq != (*psl)->sequence) ? in generate_ordering()
1107 (*psl)->filename); in generate_ordering()
1108 last_seq = (*psl)->sequence; in generate_ordering()
1109 free((*psl)->filename); in generate_ordering()