var.h revision 146027
1106106Sjmallett/*- 2106106Sjmallett * Copyright (c) 2002 Juli Mallett. 3106106Sjmallett * Copyright (c) 1988, 1989, 1990, 1993 4106106Sjmallett * The Regents of the University of California. All rights reserved. 5106106Sjmallett * Copyright (c) 1989 by Berkeley Softworks 6106106Sjmallett * All rights reserved. 7106106Sjmallett * 8106106Sjmallett * This code is derived from software contributed to Berkeley by 9106106Sjmallett * Adam de Boor. 10106106Sjmallett * 11106106Sjmallett * Redistribution and use in source and binary forms, with or without 12106106Sjmallett * modification, are permitted provided that the following conditions 13106106Sjmallett * are met: 14106106Sjmallett * 1. Redistributions of source code must retain the above copyright 15106106Sjmallett * notice, this list of conditions and the following disclaimer. 16106106Sjmallett * 2. Redistributions in binary form must reproduce the above copyright 17106106Sjmallett * notice, this list of conditions and the following disclaimer in the 18106106Sjmallett * documentation and/or other materials provided with the distribution. 19106106Sjmallett * 3. All advertising materials mentioning features or use of this software 20106106Sjmallett * must display the following acknowledgement: 21106106Sjmallett * This product includes software developed by the University of 22106106Sjmallett * California, Berkeley and its contributors. 23106106Sjmallett * 4. Neither the name of the University nor the names of its contributors 24106106Sjmallett * may be used to endorse or promote products derived from this software 25106106Sjmallett * without specific prior written permission. 26106106Sjmallett * 27106106Sjmallett * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 28106106Sjmallett * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29106106Sjmallett * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30106106Sjmallett * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 31106106Sjmallett * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 32106106Sjmallett * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 33106106Sjmallett * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 34106106Sjmallett * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 35106106Sjmallett * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 36106106Sjmallett * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 37106106Sjmallett * SUCH DAMAGE. 38106106Sjmallett * 39106106Sjmallett * $FreeBSD: head/usr.bin/make/var.h 146027 2005-05-09 14:06:04Z harti $ 40106106Sjmallett */ 41106106Sjmallett 42141104Sharti#ifndef var_h_9cccafce 43141104Sharti#define var_h_9cccafce 44141104Sharti 45141104Sharti#include <regex.h> 46141104Sharti 47141104Sharti#include "config.h" 48141104Sharti 49141104Shartistruct GNode; 50141133Shartistruct Buffer; 51141104Sharti 52106106Sjmalletttypedef struct Var { 53143962Sharti char *name; /* the variable's name */ 54143962Sharti struct Buffer *val; /* its value */ 55143962Sharti int flags; /* miscellaneous status flags */ 56141133Sharti 57141133Sharti#define VAR_IN_USE 1 /* Variable's value currently being used. 58141133Sharti * Used to avoid recursion */ 59141133Sharti 60141133Sharti#define VAR_JUNK 4 /* Variable is a junk variable that 61141133Sharti * should be destroyed when done with 62141133Sharti * it. Used by Var_Parse for undefined, 63141133Sharti * modified variables */ 64145971Sharti 65145971Sharti#define VAR_TO_ENV 8 /* Place variable in environment */ 66106106Sjmallett} Var; 67106106Sjmallett 68106106Sjmallett/* Var*Pattern flags */ 69106106Sjmallett#define VAR_SUB_GLOBAL 0x01 /* Apply substitution globally */ 70106106Sjmallett#define VAR_SUB_ONE 0x02 /* Apply substitution to one word */ 71106106Sjmallett#define VAR_SUB_MATCHED 0x04 /* There was a match */ 72106106Sjmallett#define VAR_MATCH_START 0x08 /* Match at start of word */ 73106106Sjmallett#define VAR_MATCH_END 0x10 /* Match at end of word */ 74106106Sjmallett 75106106Sjmalletttypedef struct { 76143966Sharti struct Buffer *lhs; /* String to match */ 77143966Sharti struct Buffer *rhs; /* Replacement string (w/ &'s removed) */ 78143964Sharti 79143964Sharti regex_t re; 80143964Sharti int nsub; 81143964Sharti regmatch_t *matches; 82143964Sharti 83143962Sharti int flags; 84106106Sjmallett} VarPattern; 85106106Sjmallett 86141460Shartitypedef Boolean VarModifyProc(const char *, Boolean, struct Buffer *, void *); 87141460Sharti 88106106Sjmallett/* 89106106Sjmallett * var.c 90106106Sjmallett */ 91106106Sjmallettvoid VarREError(int, regex_t *, const char *); 92143963Shartivoid Var_Append(const char *, const char *, struct GNode *); 93143963Shartivoid Var_Delete(const char *, struct GNode *); 94143963Shartivoid Var_Dump(const struct GNode *); 95143963ShartiBoolean Var_Exists(const char *, struct GNode *); 96145971Shartivoid Var_Init(char **); 97143963Shartichar *Var_Parse(const char *, struct GNode *, Boolean, size_t *, Boolean *); 98143963Shartichar *Var_Quote(const char *); 99143963Shartivoid Var_Set(const char *, const char *, struct GNode *); 100145971Shartivoid Var_SetEnv(const char *, struct GNode *); 101146027Shartistruct Buffer *Var_Subst(const char *, struct GNode *, Boolean); 102146027Shartistruct Buffer *Var_SubstOnly(const char *, const char *, struct GNode *, Boolean); 103143963Shartichar *Var_Value(const char *, struct GNode *, char **); 104106106Sjmallett 105106106Sjmallett/* 106106106Sjmallett * var_modify.c 107106106Sjmallett */ 108141460ShartiVarModifyProc VarHead; 109141460ShartiVarModifyProc VarMatch; 110141460ShartiVarModifyProc VarNoMatch; 111141460ShartiVarModifyProc VarRESubstitute; 112143963ShartiVarModifyProc VarRoot; 113141460ShartiVarModifyProc VarSubstitute; 114143963ShartiVarModifyProc VarSuffix; 115143963ShartiVarModifyProc VarTail; 116141104Sharti 117143963Sharti#ifdef SYSVVARSUB 118143963ShartiVarModifyProc VarSYSVMatch; 119143963Sharti#endif 120141104Sharti 121141104Sharti#endif /* var_h_9cccafce */ 122