276 lines
7.3 KiB
C
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);
|
|
}
|