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