def.h revision 0eb10989
10eb10989Smrg/* $XdotOrg: $ */
20eb10989Smrg/* $Xorg: def.h,v 1.4 2001/02/09 02:03:16 xorgcvs Exp $ */
30eb10989Smrg/*
40eb10989Smrg
50eb10989SmrgCopyright (c) 1993, 1994, 1998 The Open Group.
60eb10989Smrg
70eb10989SmrgPermission to use, copy, modify, distribute, and sell this software and its
80eb10989Smrgdocumentation for any purpose is hereby granted without fee, provided that
90eb10989Smrgthe above copyright notice appear in all copies and that both that
100eb10989Smrgcopyright notice and this permission notice appear in supporting
110eb10989Smrgdocumentation.
120eb10989Smrg
130eb10989SmrgThe above copyright notice and this permission notice shall be included in
140eb10989Smrgall copies or substantial portions of the Software.
150eb10989Smrg
160eb10989SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
170eb10989SmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
180eb10989SmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
190eb10989SmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
200eb10989SmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
210eb10989SmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
220eb10989Smrg
230eb10989SmrgExcept as contained in this notice, the name of The Open Group shall not be
240eb10989Smrgused in advertising or otherwise to promote the sale, use or other dealings
250eb10989Smrgin this Software without prior written authorization from The Open Group.
260eb10989Smrg
270eb10989Smrg*/
280eb10989Smrg/* $XFree86: xc/config/makedepend/def.h,v 3.13tsi Exp $ */
290eb10989Smrg
300eb10989Smrg#ifdef HAVE_CONFIG_H /* Autotooled for Xorg 7.0? */
310eb10989Smrg# include "makedepend-config.h"
320eb10989Smrg# define USING_AUTOCONF
330eb10989Smrg#endif
340eb10989Smrg
350eb10989Smrg#include <X11/Xos.h>
360eb10989Smrg#include <X11/Xfuncproto.h>
370eb10989Smrg#include <stdlib.h>
380eb10989Smrg#include <stdio.h>
390eb10989Smrg#include <string.h>
400eb10989Smrg#include <ctype.h>
410eb10989Smrg#if 0
420eb10989Smrg#ifndef X_NOT_POSIX
430eb10989Smrg#ifndef _POSIX_SOURCE
440eb10989Smrg#define _POSIX_SOURCE
450eb10989Smrg#endif
460eb10989Smrg#endif
470eb10989Smrg#endif
480eb10989Smrg#include <sys/types.h>
490eb10989Smrg#include <fcntl.h>
500eb10989Smrg#include <sys/stat.h>
510eb10989Smrg
520eb10989Smrg#define MAXDEFINES	512
530eb10989Smrg#define MAXFILES	1024
540eb10989Smrg#define MAXINCFILES	128	/* "-include" files */
550eb10989Smrg#define MAXDIRS		64
560eb10989Smrg#define SYMTABINC	10	/* must be > 1 for define() to work right */
570eb10989Smrg#define	TRUE		1
580eb10989Smrg#define	FALSE		0
590eb10989Smrg
600eb10989Smrg/* the following must match the directives table in main.c */
610eb10989Smrg#define	IF		0
620eb10989Smrg#define	IFDEF		1
630eb10989Smrg#define	IFNDEF		2
640eb10989Smrg#define	ELSE		3
650eb10989Smrg#define	ENDIF		4
660eb10989Smrg#define	DEFINE		5
670eb10989Smrg#define	UNDEF		6
680eb10989Smrg#define	INCLUDE		7
690eb10989Smrg#define	LINE		8
700eb10989Smrg#define	PRAGMA		9
710eb10989Smrg#define ERROR           10
720eb10989Smrg#define IDENT           11
730eb10989Smrg#define SCCS            12
740eb10989Smrg#define ELIF            13
750eb10989Smrg#define EJECT           14
760eb10989Smrg#define WARNING         15
770eb10989Smrg#define INCLUDENEXT     16
780eb10989Smrg#define IFFALSE         17     /* pseudo value --- never matched */
790eb10989Smrg#define ELIFFALSE       18     /* pseudo value --- never matched */
800eb10989Smrg#define INCLUDEDOT      19     /* pseudo value --- never matched */
810eb10989Smrg#define IFGUESSFALSE    20     /* pseudo value --- never matched */
820eb10989Smrg#define ELIFGUESSFALSE  21     /* pseudo value --- never matched */
830eb10989Smrg#define INCLUDENEXTDOT  22     /* pseudo value --- never matched */
840eb10989Smrg
850eb10989Smrg#ifdef DEBUG
860eb10989Smrgextern int	_debugmask;
870eb10989Smrg/*
880eb10989Smrg * debug levels are:
890eb10989Smrg *
900eb10989Smrg *     0	show ifn*(def)*,endif
910eb10989Smrg *     1	trace defined/!defined
920eb10989Smrg *     2	show #include
930eb10989Smrg *     3	show #include SYMBOL
940eb10989Smrg *     4-6	unused
950eb10989Smrg */
960eb10989Smrg#define debug(level,arg) { if (_debugmask & (1 << level)) warning arg; }
970eb10989Smrg#else
980eb10989Smrg#define	debug(level,arg) /**/
990eb10989Smrg#endif /* DEBUG */
1000eb10989Smrg
1010eb10989Smrgtypedef	unsigned char boolean;
1020eb10989Smrg
1030eb10989Smrgstruct symtab {
1040eb10989Smrg	char	*s_name;
1050eb10989Smrg	char	*s_value;
1060eb10989Smrg};
1070eb10989Smrg
1080eb10989Smrg/* possible i_flag */
1090eb10989Smrg#define DEFCHECKED	(1<<0)	/* whether defines have been checked */
1100eb10989Smrg#define NOTIFIED	(1<<1)	/* whether we have revealed includes */
1110eb10989Smrg#define MARKED		(1<<2)	/* whether it's in the makefile */
1120eb10989Smrg#define SEARCHED	(1<<3)	/* whether we have read this */
1130eb10989Smrg#define FINISHED	(1<<4)	/* whether we are done reading this */
1140eb10989Smrg#define INCLUDED_SYM	(1<<5)	/* whether #include SYMBOL was found
1150eb10989Smrg				   Can't use i_list if TRUE */
1160eb10989Smrgstruct	inclist {
1170eb10989Smrg	char		*i_incstring;	/* string from #include line */
1180eb10989Smrg	char		*i_file;	/* path name of the include file */
1190eb10989Smrg	struct inclist	**i_list;	/* list of files it itself includes */
1200eb10989Smrg	int		i_listlen;	/* length of i_list */
1210eb10989Smrg	struct symtab	**i_defs;	/* symbol table for this file and its
1220eb10989Smrg					   children when merged */
1230eb10989Smrg	int		i_ndefs;	/* current # defines */
1240eb10989Smrg	boolean		*i_merged;      /* whether we have merged child
1250eb10989Smrg					   defines */
1260eb10989Smrg	unsigned char   i_flags;
1270eb10989Smrg};
1280eb10989Smrg
1290eb10989Smrgstruct filepointer {
1300eb10989Smrg	char	*f_name;
1310eb10989Smrg	char	*f_p;
1320eb10989Smrg	char	*f_base;
1330eb10989Smrg	char	*f_end;
1340eb10989Smrg	long	f_len;
1350eb10989Smrg	long	f_line;
1360eb10989Smrg	long	cmdinc_count;
1370eb10989Smrg	char	**cmdinc_list;
1380eb10989Smrg	long	cmdinc_line;
1390eb10989Smrg};
1400eb10989Smrg
1410eb10989Smrg#include <stdlib.h>
1420eb10989Smrg#if defined(macII) && !defined(__STDC__)  /* stdlib.h fails to define these */
1430eb10989Smrgchar *malloc(), *realloc();
1440eb10989Smrg#endif /* macII */
1450eb10989Smrg
1460eb10989Smrgchar			*copy(char *str);
1470eb10989Smrgint                     match(char *str, char **list);
1480eb10989Smrgchar			*base_name(char *file);
1490eb10989Smrgchar			*getnextline(struct filepointer *fp);
1500eb10989Smrgstruct symtab		**slookup(char *symbol, struct inclist *file);
1510eb10989Smrgstruct symtab		**isdefined(char *symbol, struct inclist *file,
1520eb10989Smrg				    struct inclist **srcfile);
1530eb10989Smrgstruct symtab		**fdefined(char *symbol, struct inclist *file,
1540eb10989Smrg				   struct inclist **srcfile);
1550eb10989Smrgstruct filepointer	*getfile(char *file);
1560eb10989Smrgvoid                    included_by(struct inclist *ip,
1570eb10989Smrg				    struct inclist *newfile);
1580eb10989Smrgstruct inclist		*newinclude(char *newfile, char *incstring);
1590eb10989Smrgvoid                    inc_clean (void);
1600eb10989Smrgstruct inclist		*inc_path(char *file, char *include, int type);
1610eb10989Smrg
1620eb10989Smrgvoid                    freefile(struct filepointer *fp);
1630eb10989Smrg
1640eb10989Smrgvoid                    define2(char *name, char *val, struct inclist *file);
1650eb10989Smrgvoid                    define(char *def, struct inclist *file);
1660eb10989Smrgvoid                    undefine(char *symbol, struct inclist *file);
1670eb10989Smrgint                     find_includes(struct filepointer *filep,
1680eb10989Smrg				      struct inclist *file,
1690eb10989Smrg				      struct inclist *file_red,
1700eb10989Smrg				      int recursion, boolean failOK);
1710eb10989Smrg
1720eb10989Smrgvoid                    recursive_pr_include(struct inclist *head,
1730eb10989Smrg					     char *file, char *base);
1740eb10989Smrgvoid                    add_include(struct filepointer *filep,
1750eb10989Smrg				    struct inclist *file,
1760eb10989Smrg				    struct inclist *file_red,
1770eb10989Smrg				    char *include, int type,
1780eb10989Smrg				    boolean failOK);
1790eb10989Smrg
1800eb10989Smrgint                     cppsetup(char *filename,
1810eb10989Smrg				 char *line,
1820eb10989Smrg				 struct filepointer *filep,
1830eb10989Smrg				 struct inclist *inc);
1840eb10989Smrg
1850eb10989Smrg
1860eb10989Smrgextern void fatalerr(char *, ...);
1870eb10989Smrgextern void warning(char *, ...);
1880eb10989Smrgextern void warning1(char *, ...);
189