Files
seta75D d6fe8fe829 Init
2021-10-11 22:19:34 -03:00

276 lines
7.3 KiB
C

/*
* COMPONENT_NAME: BLDPROCESS
*
* FUNCTIONS: CondDoExists
* CondDoMake
* CondDoTarget
* CondKWExists
* CondKWMake
* CondKWTarget
* CondStrMatch
* Cond_Setup
*
* ORIGINS: 27,71
*
* This module contains IBM CONFIDENTIAL code. -- (IBM
* Confidential Restricted when combined with the aggregated
* modules for this product)
* SOURCE MATERIALS
*
* (C) COPYRIGHT International Business Machines Corp. 1994
* All Rights Reserved
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
/*
* @OSF_FREE_COPYRIGHT@
* COPYRIGHT NOTICE
* Copyright (c) 1992, 1991, 1990
* Open Software Foundation, Inc.
*
* Permission is hereby granted to use, copy, modify and freely distribute
* the software in this file and its documentation for any purpose without
* fee, provided that the above copyright notice appears in all copies and
* that both the copyright notice and this permission notice appear in
* supporting documentation. Further, provided that the name of Open
* Software Foundation, Inc. ("OSF") not be used in advertising or
* publicity pertaining to distribution of the software without prior
* written permission from OSF. OSF makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/*
* HISTORY
* $Log: cond.c,v $
* Revision 1.2.2.3 1992/12/03 19:05:02 damon
* ODE 2.2 CR 346. Expanded copyright
* [1992/12/03 18:35:01 damon]
*
* Revision 1.2.2.2 1992/09/24 19:23:42 gm
* CR286: Major improvements to make internals.
* [1992/09/24 17:53:49 gm]
*
* Revision 1.2 1991/12/05 20:42:14 devrcs
* Changes for parallel make.
* [91/04/21 16:36:48 gm]
*
* Changes for Reno make
* [91/03/22 15:42:33 mckeen]
*
* $EndLog$
*/
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
* Copyright (c) 1988, 1989 by Adam de Boor
* Copyright (c) 1989 by Berkeley Softworks
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Adam de Boor.
*
* Redistribution and use in source and binary forms are permitted
* provided that: (1) source distributions retain this entire copyright
* notice and comment, and (2) distributions including binaries display
* the following acknowledgement: ``This product includes software
* developed by the University of California, Berkeley and its contributors''
* in the documentation or other materials provided with the distribution
* and in all advertising materials mentioning features or use of this
* software. Neither the name of the University nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef lint
static char sccsid[] = "@(#)35 1.4 src/bldenv/make/cond.c, bldprocess, bos412, GOLDA411a 1/19/94 16:26:41";
#endif /* not lint */
#ifndef lint
static char rcsid[] = "@(#)cond.c 5.6 (Berkeley) 6/1/90";
#endif /* not lint */
/*-
* cond.c --
* Functions to handle conditionals in a makefile.
*
*/
#include "make.h"
/*-
*-----------------------------------------------------------------------
* CondStrMatch --
* Front-end for Str_Match so it returns 0 on match and non-zero
* on mismatch. Callback function for CondDoMake via Lst_Find
*
* Results:
* 0 if string matches pattern
*
* Side Effects:
* None
*
*-----------------------------------------------------------------------
*/
static int
CondStrMatch(ClientData string, ClientData pattern)
{
return(!Str_Match((char *)string,(char *)pattern));
}
/*-
*-----------------------------------------------------------------------
* CondDoMake --
* Handle the 'make' function for conditionals.
*
* Results:
* TRUE if the given target is being made.
*
* Side Effects:
* None.
*
*-----------------------------------------------------------------------
*/
static Boolean
CondDoMake (int argLen, char *arg)
{
char savec = arg[argLen];
Boolean result;
arg[argLen] = '\0';
if (Lst_Find (create, (ClientData)arg, CondStrMatch) == NILLNODE) {
result = FALSE;
} else {
result = TRUE;
}
arg[argLen] = savec;
return (result);
}
/*-
*-----------------------------------------------------------------------
* CondDoExists --
* See if the given file exists.
*
* Results:
* TRUE if the file exists and FALSE if it does not.
*
* Side Effects:
* None.
*
*-----------------------------------------------------------------------
*/
static Boolean
CondDoExists (int argLen, char *arg)
{
char savec = arg[argLen];
Boolean result;
string_t path;
arg[argLen] = '\0';
path = Dir_FindFile(string_create(arg), dirSearchPath);
if (path != (string_t)NULL) {
result = TRUE;
string_deref(path);
} else {
result = FALSE;
}
arg[argLen] = savec;
return (result);
}
/*-
*-----------------------------------------------------------------------
* CondDoTarget --
* See if the given node exists and is an actual target.
*
* Results:
* TRUE if the node exists as a target and FALSE if it does not.
*
* Side Effects:
* None.
*
*-----------------------------------------------------------------------
*/
static Boolean
CondDoTarget (int argLen, char *arg)
{
char savec = arg[argLen];
Boolean result;
GNode *gn;
arg[argLen] = '\0';
gn = Targ_FindNode(string_create(arg), TARG_NOCREATE);
if ((gn != NILGNODE) && !OP_NOP(gn->type)) {
result = TRUE;
} else {
result = FALSE;
}
arg[argLen] = savec;
return (result);
}
Boolean
CondKWMake(char **condExprPtr, int *arglenPtr, char **argPtr,
Boolean doEval)
{
/*
* Use CondDoMake to evaluate the argument and
* Cond_GetArg to extract the argument from the 'function
* call'.
*/
*condExprPtr += 4;
*arglenPtr = Cond_GetArg(condExprPtr, argPtr, "make", TRUE);
if (*arglenPtr == 0) {
*condExprPtr -= 4;
return(TRUE);
}
return(FALSE);
}
Boolean
CondKWExists(char **condExprPtr, int *arglenPtr, char **argPtr,
Boolean doEval)
{
/*
* Use CondDoExists to evaluate the argument and
* Cond_GetArg to extract the argument from the
* 'function call'.
*/
*condExprPtr += 6;
*arglenPtr = Cond_GetArg(condExprPtr, argPtr, "exists", TRUE);
if (*arglenPtr == 0) {
*condExprPtr -= 6;
return(TRUE);
}
return(FALSE);
}
Boolean
CondKWTarget(char **condExprPtr, int *arglenPtr, char **argPtr,
Boolean doEval)
{
/*
* Use CondDoTarget to evaluate the argument and
* Cond_GetArg to extract the argument from the
* 'function call'.
*/
*condExprPtr += 6;
*arglenPtr = Cond_GetArg(condExprPtr, argPtr, "target", TRUE);
if (*arglenPtr == 0) {
*condExprPtr -= 6;
return(TRUE);
}
return(FALSE);
}
void
Cond_Setup(void)
{
Cond_Init(VarParseCond, VarValueCond, ParseErrorCond, DEBUG(COND));
Cond_AddKeyword("make", CondKWMake, CondDoMake);
Cond_AddKeyword("exists", CondKWExists, CondDoExists);
Cond_AddKeyword("target", CondKWTarget, CondDoTarget);
}