/***********************************************************************
* *
* This software is part of the ast package *
* Copyright (c) 1984-2012 AT&T Intellectual Property *
* and is licensed under the *
* Eclipse Public License, Version 1.0 *
* by AT&T Intellectual Property *
* *
* A copy of the License is available at *
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
* *
* Information and Software Systems Research *
* AT&T Research *
* Florham Park NJ *
* *
* Glenn Fowler <gsf@research.att.com> *
* *
***********************************************************************/
#pragma prototyped
/*
* Glenn Fowler
* AT&T Research
*
* mam support routines
*/
#include "make.h"
/*
* mam special pathcanon()
*/
char*
{
register char* s;
{
*s = 0;
}
return s;
}
/*
* output dynamic mam error message
*/
{
register char* s = (char*)b;
register char* e;
char* t;
{
if (e = strchr(s, ':'))
{
for (s = e; *++s && *s == ' ';);
n -= s - (char*)b;
}
{
case ERROR_WARNING:
t = "warning";
break;
case ERROR_PANIC:
t = "panic";
break;
default:
t = 0;
break;
}
if (!t)
t = "error";
return 0;
}
return (fd == sffileno(sfstderr) && error_info.write == write) ? sfwrite(sfstderr, b, n) : write(fd, b, n);
}
/*
* translate mam target name
*/
char*
{
char* a;
char* s;
return r->name;
{
a = localview(r);
a = s;
}
else
a = ((r->property & P_target) || !state.user) ? unbound(r) : (state.mam.regress || state.expandview) ? r->name : localview(r);
if (state.mam.root && (*a == '/' || (r->dynamic & (D_entries|D_member|D_membertoo|D_regular)) || stat(r->name, &st)))
{
if (*a != '/')
pathcanon(a, 0, 0);
}
return a;
}
/*
* push make|prev op
* non-zero returned if matching done required
*/
int
{
int pop;
return 0;
{
, mamname(r)
);
{
else
}
}
return pop;
}
/*
* pop done op
*/
void
{
Rule_t* s;
List_t* p;
if ((r->property & (P_joint|P_target)) == (P_joint|P_target) && r->prereqs->rule->prereqs->rule == r && mampush(sp, r->prereqs->rule, flags|P_joint|P_virtual) && !(r->prereqs->rule->property & P_target))
{
}
{
, mamname(r)
, (flags & P_virtual) && !(r->property & P_state) && ((r->property & P_virtual) || !(r->dynamic & (D_entries|D_member|D_membertoo|D_regular)) && (!s || !s->time)) ? " virtual" : s && (s->dynamic & D_built) ? " generated" : null
);
}
}
/*
* return mam output stream pointer for r
*/
{
register char* s;
return 0;
return 0;
if ((r->property & (P_after|P_before)) || (r->property & P_dontcare) && !(state.mam.dontcare || r->prereqs || r->action && *r->action || (r0 = staterule(RULE, r, NiL, 0)) && (r0->dynamic & D_built) && r0->action && *r0->action || !(r->dynamic & D_global)))
return 0;
return 0;
}