/*	dumprules.c
 *	(c) Copyright 1991 by Ben Eng, All Rights Reserved
 *
 */

#include "make.h"
#include "depend.h"

#if DEBUG

void
dump_macros( struct List *mlist )
{
	struct macro *mac;

	debugprintf( 2,( "** Macros **\n" ));

	for( mac = mlist->lh_Head; mac->node.ln_Succ; mac =
		mac->node.ln_Succ ) {
		logprintf( "%s %s %s\n", mac->name,
			(mac->flags & MF_SIMPLE) ? ":=" : "=", mac->expansion );
	}
	logprintf( "\n" );
}

static void
dump_dependencies( struct List *dlist )
{
	struct depend *dep;

	for( dep = dlist->lh_Head; dep->node.ln_Succ; dep =
		dep->node.ln_Succ ) {
		logprintf( " %s", dep->name );
	}
	logprintf( "\n" );
}

static void
dump_commands( struct List *clist )
{
	struct command *cmd;

	for( cmd = clist->lh_Head; cmd->node.ln_Succ; cmd =
		cmd->node.ln_Succ ) {
		logprintf( "\t%s\n", cmd->cmd );
	}
}

void
dump_targets( struct List *tlist )
{
	struct target *targ;

	debugprintf( 2, ( "** Target Rules **\n" ));

	for( targ = tlist->lh_Head; targ->node.ln_Succ; targ =
		targ->node.ln_Succ ) {
		logprintf( "\n%s", targ->name );
		if( targ->flags & TF_PATTERN ) logprintf( " [PATTERN]" );
		if( targ->flags & TF_BUILTIN ) logprintf( " [BUILTIN]" );
		logprintf( ":" );
		dump_dependencies( &targ->dependlist );
		if( targ->flags & TF_OWNER )
			dump_commands( &targ->commandlist );
		else
			dump_commands( targ->alternate );
	}
}

void
dump_patternrules( struct List *plist )
{
	struct patternrule *pr;

	debugprintf( 2, ( "** Pattern Rules **\n" ));

	for( pr = plist->lh_Head; pr->node.ln_Succ; pr =
		pr->node.ln_Succ ) {
		logprintf( "\n%s : %s\n", pr->tar_pat, pr->dep_pat );
		if( pr->targ->flags & TF_OWNER )
			dump_commands( &pr->targ->commandlist );
		else
			dump_commands( pr->targ->alternate );
	}
}


void
dump_all( void )
{
	debugprintf( 2, ("\n** Debug output for rules ** \n" ));
	dump_macros( &Global.macrolist );
	dump_patternrules( &Global.patternlist );
	dump_targets( &Global.targetlist );	
}

#endif
