1141104Sharti/*- 2141104Sharti * Copyright (c) 1988, 1989, 1990, 1993 3141104Sharti * The Regents of the University of California. All rights reserved. 4141104Sharti * Copyright (c) 1989 by Berkeley Softworks 5141104Sharti * All rights reserved. 6141104Sharti * 7141104Sharti * This code is derived from software contributed to Berkeley by 8141104Sharti * Adam de Boor. 9141104Sharti * 10141104Sharti * Redistribution and use in source and binary forms, with or without 11141104Sharti * modification, are permitted provided that the following conditions 12141104Sharti * are met: 13141104Sharti * 1. Redistributions of source code must retain the above copyright 14141104Sharti * notice, this list of conditions and the following disclaimer. 15141104Sharti * 2. Redistributions in binary form must reproduce the above copyright 16141104Sharti * notice, this list of conditions and the following disclaimer in the 17141104Sharti * documentation and/or other materials provided with the distribution. 18141104Sharti * 3. All advertising materials mentioning features or use of this software 19141104Sharti * must display the following acknowledgement: 20141104Sharti * This product includes software developed by the University of 21141104Sharti * California, Berkeley and its contributors. 22141104Sharti * 4. Neither the name of the University nor the names of its contributors 23141104Sharti * may be used to endorse or promote products derived from this software 24141104Sharti * without specific prior written permission. 25141104Sharti * 26141104Sharti * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 27141104Sharti * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28141104Sharti * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 29141104Sharti * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 30141104Sharti * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31141104Sharti * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 32141104Sharti * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33141104Sharti * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34141104Sharti * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35141104Sharti * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36141104Sharti * SUCH DAMAGE. 37141104Sharti * 38141104Sharti * $FreeBSD$ 39141104Sharti */ 40141104Sharti 41141104Sharti#ifndef util_h_b7020fdb 42141104Sharti#define util_h_b7020fdb 43141104Sharti 44141104Sharti#include <sys/types.h> 45143414Sharti#include <stdio.h> 46141104Sharti 47146177Sharti/* 48146177Sharti * A boolean type is defined as an integer, not an enum. This allows a 49146177Sharti * boolean argument to be an expression that isn't strictly 0 or 1 valued. 50146177Sharti */ 51146177Sharti 52146177Shartitypedef int Boolean; 53146177Sharti#ifndef TRUE 54146177Sharti#define TRUE 1 55146177Sharti#define FALSE 0 56146177Sharti#endif /* TRUE */ 57146177Sharti 58141104Sharti#define CONCAT(a,b) a##b 59141104Sharti 60143414Shartistruct flag2str { 61143414Sharti u_int flag; 62143414Sharti const char *str; 63143414Sharti}; 64143414Sharti 65141104Sharti/* 66141104Sharti * debug control: 67141104Sharti * There is one bit per module. It is up to the module what debug 68141104Sharti * information to print. 69141104Sharti */ 70141104Sharti#define DEBUG_ARCH 0x0001 71141104Sharti#define DEBUG_COND 0x0002 72141104Sharti#define DEBUG_DIR 0x0004 73141104Sharti#define DEBUG_GRAPH1 0x0008 74141104Sharti#define DEBUG_GRAPH2 0x0010 75141104Sharti#define DEBUG_JOB 0x0020 76141104Sharti#define DEBUG_MAKE 0x0040 77141104Sharti#define DEBUG_SUFF 0x0080 78141104Sharti#define DEBUG_TARG 0x0100 79141104Sharti#define DEBUG_VAR 0x0200 80141104Sharti#define DEBUG_FOR 0x0400 81141104Sharti#define DEBUG_LOUD 0x0800 82141104Sharti 83141104Sharti#define DEBUG(module) (debug & CONCAT(DEBUG_,module)) 84141104Sharti#define DEBUGF(module,args) \ 85141104Shartido { \ 86141104Sharti if (DEBUG(module)) { \ 87141104Sharti Debug args ; \ 88141104Sharti } \ 89141104Sharti} while (0) 90143278Sharti#define DEBUGM(module, args) do { \ 91143278Sharti if (DEBUG(module)) { \ 92143278Sharti DebugM args; \ 93143278Sharti } \ 94143278Sharti } while (0) 95141104Sharti 96141104Sharti#define ISDOT(c) ((c)[0] == '.' && (((c)[1] == '\0') || ((c)[1] == '/'))) 97141104Sharti#define ISDOTDOT(c) ((c)[0] == '.' && ISDOT(&((c)[1]))) 98141104Sharti 99144386Sharti#ifndef MAX 100144386Sharti#define MAX(a, b) ((a) > (b) ? (a) : (b)) 101144386Sharti#endif 102144386Sharti 103141104Shartivoid Debug(const char *, ...); 104143278Shartivoid DebugM(const char *, ...); 105141104Shartivoid Error(const char *, ...); 106143277Shartivoid Fatal(const char *, ...) __dead2; 107143277Shartivoid Punt(const char *, ...) __dead2; 108143277Shartivoid DieHorribly(void) __dead2; 109143277Shartivoid Finish(int) __dead2; 110141104Shartichar *estrdup(const char *); 111141104Shartivoid *emalloc(size_t); 112141104Shartivoid *erealloc(void *, size_t); 113141104Shartiint eunlink(const char *); 114146184Shartivoid print_flags(FILE *, const struct flag2str *, u_int, int); 115141104Sharti 116141104Sharti#endif /* util_h_b7020fdb */ 117