def.h revision b2f5b1db
10eb10989Smrg/*
20eb10989Smrg
30eb10989SmrgCopyright (c) 1993, 1994, 1998 The Open Group.
40eb10989Smrg
50eb10989SmrgPermission to use, copy, modify, distribute, and sell this software and its
60eb10989Smrgdocumentation for any purpose is hereby granted without fee, provided that
70eb10989Smrgthe above copyright notice appear in all copies and that both that
80eb10989Smrgcopyright notice and this permission notice appear in supporting
90eb10989Smrgdocumentation.
100eb10989Smrg
110eb10989SmrgThe above copyright notice and this permission notice shall be included in
120eb10989Smrgall copies or substantial portions of the Software.
130eb10989Smrg
140eb10989SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
150eb10989SmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
160eb10989SmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
170eb10989SmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
180eb10989SmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
190eb10989SmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
200eb10989Smrg
210eb10989SmrgExcept as contained in this notice, the name of The Open Group shall not be
220eb10989Smrgused in advertising or otherwise to promote the sale, use or other dealings
230eb10989Smrgin this Software without prior written authorization from The Open Group.
240eb10989Smrg
250eb10989Smrg*/
260eb10989Smrg
27079e7944Smrg#ifdef HAVE_CONFIG_H
280eb10989Smrg# include "makedepend-config.h"
290eb10989Smrg#endif
300eb10989Smrg
310eb10989Smrg#include <X11/Xos.h>
320eb10989Smrg#include <X11/Xfuncproto.h>
330eb10989Smrg#include <stdlib.h>
340eb10989Smrg#include <stdio.h>
350eb10989Smrg#include <string.h>
360eb10989Smrg#include <ctype.h>
370eb10989Smrg#include <sys/types.h>
380eb10989Smrg#include <fcntl.h>
390eb10989Smrg#include <sys/stat.h>
400eb10989Smrg
410eb10989Smrg#define MAXDEFINES	512
42d43532a6Smrg#define MAXFILES	2048
430eb10989Smrg#define MAXINCFILES	128	/* "-include" files */
44b2f5b1dbSmrg#define MAXDIRS		512	/* -I flags */
450eb10989Smrg#define SYMTABINC	10	/* must be > 1 for define() to work right */
460eb10989Smrg#define	TRUE		1
470eb10989Smrg#define	FALSE		0
480eb10989Smrg
490eb10989Smrg/* the following must match the directives table in main.c */
500eb10989Smrg#define	IF		0
510eb10989Smrg#define	IFDEF		1
520eb10989Smrg#define	IFNDEF		2
530eb10989Smrg#define	ELSE		3
540eb10989Smrg#define	ENDIF		4
550eb10989Smrg#define	DEFINE		5
560eb10989Smrg#define	UNDEF		6
570eb10989Smrg#define	INCLUDE		7
580eb10989Smrg#define	LINE		8
590eb10989Smrg#define	PRAGMA		9
600eb10989Smrg#define ERROR           10
610eb10989Smrg#define IDENT           11
620eb10989Smrg#define SCCS            12
630eb10989Smrg#define ELIF            13
640eb10989Smrg#define EJECT           14
650eb10989Smrg#define WARNING         15
660eb10989Smrg#define INCLUDENEXT     16
670eb10989Smrg#define IFFALSE         17     /* pseudo value --- never matched */
680eb10989Smrg#define ELIFFALSE       18     /* pseudo value --- never matched */
690eb10989Smrg#define INCLUDEDOT      19     /* pseudo value --- never matched */
700eb10989Smrg#define IFGUESSFALSE    20     /* pseudo value --- never matched */
710eb10989Smrg#define ELIFGUESSFALSE  21     /* pseudo value --- never matched */
720eb10989Smrg#define INCLUDENEXTDOT  22     /* pseudo value --- never matched */
730eb10989Smrg
740eb10989Smrg#ifdef DEBUG
750eb10989Smrgextern int	_debugmask;
760eb10989Smrg/*
770eb10989Smrg * debug levels are:
78d43532a6Smrg *
790eb10989Smrg *     0	show ifn*(def)*,endif
800eb10989Smrg *     1	trace defined/!defined
810eb10989Smrg *     2	show #include
820eb10989Smrg *     3	show #include SYMBOL
830eb10989Smrg *     4-6	unused
840eb10989Smrg */
85b2f5b1dbSmrg#define debug(level,arg) do { if (_debugmask & (1 << level)) warning arg; } while(0)
860eb10989Smrg#else
87b2f5b1dbSmrg#define	debug(level,arg) do { /**/ } while (0)
880eb10989Smrg#endif /* DEBUG */
890eb10989Smrg
900eb10989Smrgtypedef	unsigned char boolean;
910eb10989Smrg
920eb10989Smrgstruct symtab {
930eb10989Smrg	char	*s_name;
940eb10989Smrg	char	*s_value;
950eb10989Smrg};
960eb10989Smrg
970eb10989Smrg/* possible i_flag */
980eb10989Smrg#define DEFCHECKED	(1<<0)	/* whether defines have been checked */
990eb10989Smrg#define NOTIFIED	(1<<1)	/* whether we have revealed includes */
1000eb10989Smrg#define MARKED		(1<<2)	/* whether it's in the makefile */
1010eb10989Smrg#define SEARCHED	(1<<3)	/* whether we have read this */
1020eb10989Smrg#define FINISHED	(1<<4)	/* whether we are done reading this */
1030eb10989Smrg#define INCLUDED_SYM	(1<<5)	/* whether #include SYMBOL was found
1040eb10989Smrg				   Can't use i_list if TRUE */
1050eb10989Smrgstruct	inclist {
1060eb10989Smrg	char		*i_incstring;	/* string from #include line */
1070eb10989Smrg	char		*i_file;	/* path name of the include file */
1080eb10989Smrg	struct inclist	**i_list;	/* list of files it itself includes */
1090eb10989Smrg	struct symtab	**i_defs;	/* symbol table for this file and its
1100eb10989Smrg					   children when merged */
111079e7944Smrg	int		i_listlen;	/* length of i_list */
1120eb10989Smrg	int		i_ndefs;	/* current # defines */
1130eb10989Smrg	boolean		*i_merged;      /* whether we have merged child
1140eb10989Smrg					   defines */
1150eb10989Smrg	unsigned char   i_flags;
1160eb10989Smrg};
1170eb10989Smrg
1180eb10989Smrgstruct filepointer {
11963165362Smrg	const char	*f_name;
1200eb10989Smrg	char	*f_p;
1210eb10989Smrg	char	*f_base;
1220eb10989Smrg	char	*f_end;
1230eb10989Smrg	long	f_len;
1240eb10989Smrg	long	f_line;
1250eb10989Smrg	long	cmdinc_count;
1260eb10989Smrg	char	**cmdinc_list;
1270eb10989Smrg	long	cmdinc_line;
1280eb10989Smrg};
1290eb10989Smrg
1300eb10989Smrg#include <stdlib.h>
1310eb10989Smrg
13263165362Smrgint                     match(const char *str, const char * const *list);
13363165362Smrgchar			*base_name(const char *file);
1340eb10989Smrgchar			*getnextline(struct filepointer *fp);
135d43532a6Smrgstruct symtab		**slookup(const char *symbol, struct inclist *file);
136d43532a6Smrgstruct symtab		**isdefined(const char *symbol, struct inclist *file,
1370eb10989Smrg				    struct inclist **srcfile);
138d43532a6Smrgstruct symtab		**fdefined(const char *symbol, struct inclist *file,
1390eb10989Smrg				   struct inclist **srcfile);
14063165362Smrgstruct filepointer	*getfile(const char *file);
141d43532a6Smrgvoid                    included_by(struct inclist *ip,
1420eb10989Smrg				    struct inclist *newfile);
14363165362Smrgstruct inclist		*newinclude(const char *newfile,
14463165362Smrg				    const char *incstring);
1450eb10989Smrgvoid                    inc_clean (void);
14663165362Smrgstruct inclist		*inc_path(const char *file, const char *include,
14763165362Smrg				  int type);
1480eb10989Smrg
1490eb10989Smrgvoid                    freefile(struct filepointer *fp);
1500eb10989Smrg
151d43532a6Smrgvoid                    define2(const char *name, const char *val,
152d43532a6Smrg				struct inclist *file);
1530eb10989Smrgvoid                    define(char *def, struct inclist *file);
154d43532a6Smrgvoid                    undefine(const char *symbol, struct inclist *file);
155d43532a6Smrgint                     find_includes(struct filepointer *filep,
156d43532a6Smrg				      struct inclist *file,
157d43532a6Smrg				      struct inclist *file_red,
1580eb10989Smrg				      int recursion, boolean failOK);
1590eb10989Smrg
160d43532a6Smrgvoid                    recursive_pr_include(struct inclist *head,
16163165362Smrg					     const char *file,
16263165362Smrg					     const char *base);
163d43532a6Smrgvoid                    add_include(struct filepointer *filep,
164d43532a6Smrg				    struct inclist *file,
165d43532a6Smrg				    struct inclist *file_red,
16663165362Smrg				    const char *include, int type,
1670eb10989Smrg				    boolean failOK);
1680eb10989Smrg
16963165362Smrgint                     cppsetup(const char *filename,
17063165362Smrg				 const char *line,
1710eb10989Smrg				 struct filepointer *filep,
1720eb10989Smrg				 struct inclist *inc);
1730eb10989Smrg
1740eb10989Smrg
175079e7944Smrgextern void fatalerr(const char *, ...) _X_ATTRIBUTE_PRINTF(1, 2) _X_NORETURN;
17663165362Smrgextern void warning(const char *, ...) _X_ATTRIBUTE_PRINTF(1, 2);
17763165362Smrgextern void warning1(const char *, ...) _X_ATTRIBUTE_PRINTF(1, 2);
178d43532a6Smrg
179d43532a6Smrgextern struct inclist	  inclist[ MAXFILES ];
180d43532a6Smrgextern struct inclist    *inclistp;
181d43532a6Smrgextern struct inclist    *inclistnext;
182d43532a6Smrgextern struct inclist     maininclist;
183d43532a6Smrgextern const char        *includedirs[ ];
184d43532a6Smrgextern const char       **includedirsnext;
185d43532a6Smrgextern const char * const directives[];
186d43532a6Smrgextern char              *notdotdot[ ];
187d43532a6Smrg
188d43532a6Smrgextern const char        *objprefix;
189d43532a6Smrgextern const char        *objsuffix;
190d43532a6Smrgextern int          	  width;
191d43532a6Smrgextern boolean            printed;
192d43532a6Smrgextern boolean            verbose;
193d43532a6Smrgextern boolean            show_where_not;
194d43532a6Smrgextern boolean            warn_multiple;
195