129 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /*************************************************************************
 | |
|  *
 | |
|  *  m a k e :   c h e c k . c
 | |
|  *
 | |
|  *  debugging stuff: Check structures for make.
 | |
|  *========================================================================
 | |
|  * Edition history
 | |
|  *
 | |
|  *  #    Date                         Comments                       By
 | |
|  * --- -------- ---------------------------------------------------- ---
 | |
|  *   1    ??                                                         ??
 | |
|  *   2 23.08.89 adapted to new name tree structure                   RAL
 | |
|  *   3 30.08.89 indention changed                                    PSH,RAL
 | |
|  *   4 06.09.89 prt output redirected to stdout                      RAL
 | |
|  * ------------ Version 2.0 released ------------------------------- RAL
 | |
|  *
 | |
|  *************************************************************************/
 | |
| 
 | |
| #include "h.h"
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *	Prints out the structures as defined in memory.  Good for check
 | |
|  *	that you make file does what you want (and for debugging make).
 | |
|  */
 | |
| void prt()
 | |
| {
 | |
|   register struct name   *np;
 | |
|   register struct depend *dp;
 | |
|   register struct line   *lp;
 | |
|   register struct cmd    *cp;
 | |
|   register struct macro  *mp;
 | |
| 
 | |
|   register int   		i;
 | |
| 
 | |
|   for (mp = macrohead; mp; mp = mp->m_next)
 | |
| 	printf("%s = %s\n", mp->m_name, mp->m_val);
 | |
| 
 | |
|   putchar('\n');
 | |
| 
 | |
|   for (i = 0; i <= maxsuffarray ; i++)
 | |
| 	    for (np = suffparray[i]->n_next; np; np = np->n_next)
 | |
| 	    {
 | |
| 		if (np->n_flag & N_DOUBLE)
 | |
| 			printf("%s::\n", np->n_name);
 | |
| 		else
 | |
| 			printf("%s:\n", np->n_name);
 | |
| 		if (np == firstname)
 | |
| 			printf("(MAIN NAME)\n");
 | |
| 		for (lp = np->n_line; lp; lp = lp->l_next)
 | |
| 		{
 | |
| 			putchar(':');
 | |
| 			for (dp = lp->l_dep; dp; dp = dp->d_next)
 | |
| 				printf(" %s", dp->d_name->n_name);
 | |
| 			putchar('\n');
 | |
| 
 | |
| 			for (cp = lp->l_cmd; cp; cp = cp->c_next)
 | |
| #ifdef os9
 | |
| 				printf("-   %s\n", cp->c_cmd);
 | |
| #else
 | |
| 				printf("-\t%s\n", cp->c_cmd);
 | |
| #endif
 | |
| 			putchar('\n');
 | |
| 		}
 | |
| 		putchar('\n');
 | |
| 	    }
 | |
| }
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *	Recursive routine that does the actual checking.
 | |
|  */
 | |
| void check(np)
 | |
| struct name *np;
 | |
| {
 | |
|   register struct depend *dp;
 | |
|   register struct line   *lp;
 | |
| 
 | |
| 
 | |
| 	if (np->n_flag & N_MARK)
 | |
| 		fatal("Circular dependency from %s", np->n_name,0);
 | |
| 
 | |
| 	np->n_flag |= N_MARK;
 | |
| 
 | |
| 	for (lp = np->n_line; lp; lp = lp->l_next)
 | |
| 		for (dp = lp->l_dep; dp; dp = dp->d_next)
 | |
| 			check(dp->d_name);
 | |
| 
 | |
| 	np->n_flag &= ~N_MARK;
 | |
| }
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *	Look for circular dependancies.
 | |
|  *	ie.
 | |
|  *		a: b
 | |
|  *		b: a
 | |
|  *	is a circular dep
 | |
|  */
 | |
| void circh()
 | |
| {
 | |
|   register struct name *np;
 | |
|   register int          i;
 | |
| 
 | |
| 
 | |
|   for (i = 0; i <= maxsuffarray ; i++)
 | |
| 	   for (np = suffparray[i]->n_next; np; np = np->n_next)
 | |
| 		check(np);
 | |
| }
 | |
| 
 | |
| 
 | |
| /*
 | |
|  *	Check the target .PRECIOUS, and mark its dependentd as precious
 | |
|  */
 | |
| void precious()
 | |
| {
 | |
|   register struct depend *dp;
 | |
|   register struct line   *lp;
 | |
|   register struct name   *np;
 | |
| 
 | |
| 
 | |
|   if (!((np = newname(".PRECIOUS"))->n_flag & N_TARG))
 | |
| 	return;
 | |
| 
 | |
|   for (lp = np->n_line; lp; lp = lp->l_next)
 | |
| 	for (dp = lp->l_dep; dp; dp = dp->d_next)
 | |
| 		dp->d_name->n_flag |= N_PREC;
 | |
| }
 | 
