+ Addition of function prototypes and include files. + Change function definitions to ANSI C style. + Initial support for CMake
		
			
				
	
	
		
			102 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 *	Check structures for make.
 | 
						|
 *
 | 
						|
 *	$Header$
 | 
						|
 */
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
#include "h.h"
 | 
						|
 | 
						|
/*
 | 
						|
 *	Recursive routine that does the actual checking.
 | 
						|
 */
 | 
						|
static void check(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);
 | 
						|
 | 
						|
	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 &= (uchar)~N_MARK;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 *	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(void)
 | 
						|
{
 | 
						|
	register struct name * np;
 | 
						|
	register struct depend * dp;
 | 
						|
	register struct line * lp;
 | 
						|
	register struct cmd * cp;
 | 
						|
	register struct macro * mp;
 | 
						|
 | 
						|
	for (mp = macrohead; mp; mp = mp->m_next)
 | 
						|
		fprintf(stderr, "%s = %s\n", mp->m_name, mp->m_val);
 | 
						|
 | 
						|
	fputc('\n', stderr);
 | 
						|
 | 
						|
	for (np = namehead.n_next; np; np = np->n_next)
 | 
						|
	{
 | 
						|
		if (np->n_flag & N_DOUBLE)
 | 
						|
			fprintf(stderr, "%s::\n", np->n_name);
 | 
						|
			else
 | 
						|
			fprintf(stderr, "%s:\n", np->n_name);
 | 
						|
			if (np == firstname)
 | 
						|
			fprintf(stderr, "(MAIN NAME)\n");
 | 
						|
			for (lp = np->n_line; lp; lp = lp->l_next)
 | 
						|
			{
 | 
						|
				fputc(':', stderr);
 | 
						|
				for (dp = lp->l_dep; dp; dp = dp->d_next)
 | 
						|
				fprintf(stderr, " %s", dp->d_name->n_name);
 | 
						|
				fputc('\n', stderr);
 | 
						|
 | 
						|
				for (cp = lp->l_cmd; cp; cp = cp->c_next)
 | 
						|
				fprintf(stderr, "-\t%s\n", cp->c_cmd);
 | 
						|
				fputc('\n', stderr);
 | 
						|
			}
 | 
						|
			fputc('\n', stderr);
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 *	Look for circular dependancies.
 | 
						|
 *	ie.
 | 
						|
 *		a: b
 | 
						|
 *		b: a
 | 
						|
 *	is a circular dep
 | 
						|
 */
 | 
						|
void circh(void)
 | 
						|
{
 | 
						|
	register struct name * np;
 | 
						|
 | 
						|
	for (np = namehead.n_next; np; np = np->n_next)
 | 
						|
		check(np);
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
 *	Check the target .PRECIOUS, and mark its dependentd as precious
 | 
						|
 */
 | 
						|
void precious(void)
 | 
						|
{
 | 
						|
	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;
 | 
						|
}
 |