xref: /aoo4110/main/soltools/mkdepend/def.h (revision b1cdbd2c)
1 /* $XConsortium: def.h,v 1.25 94/04/17 20:10:33 gildea Exp $ */
2 /*
3 
4 Copyright (c) 1993, 1994  X Consortium
5 
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to deal
8 in the Software without restriction, including without limitation the rights
9 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12 
13 The above copyright notice and this permission notice shall be included in
14 all copies or substantial portions of the Software.
15 
16 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
19 X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
20 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 
23 Except as contained in this notice, the name of the X Consortium shall not be
24 used in advertising or otherwise to promote the sale, use or other dealings
25 in this Software without prior written authorization from the X Consortium.
26 
27 */
28 
29 #ifndef NO_X11
30 #include <X11/Xosdefs.h>
31 #ifdef WIN32
32 #include <X11/Xw32defs.h>
33 #endif
34 #ifndef SUNOS4
35 #include <X11/Xfuncproto.h>
36 #endif /* SUNOS4 */
37 #endif /* NO_X11 */
38 
39 #include <stdio.h>
40 #include <stdlib.h>
41 #include <string.h>
42 #include <unistd.h>
43 
44 #include <ctype.h>
45 #ifndef X_NOT_POSIX
46 #ifndef _POSIX_SOURCE
47 #define _POSIX_SOURCE
48 #endif
49 #endif
50 #include <sys/types.h>
51 #include <fcntl.h>
52 #include <sys/stat.h>
53 
54 #ifndef S_IFDIR
55 #define        S_IFDIR  0040000
56 #endif
57 
58 #ifndef S_IFREG
59 #define        S_IFREG  0100000
60 #endif
61 
62 #define MAXDEFINES	512
63 #define MAXFILES	( 1<<16 ) /* Increased from 512. -mcafee */
64 						      /* Increased from 1024. -mh */
65 						      /* Increased from 2048. -b_michaelsen */
66 #define MAXDIRS		64
67 #define SYMHASHSEED     131  /* 131 1313 13131 ... */
68 #define SYMHASHMEMBERS	64	/* must be 2^x to work right */
69 #define	TRUE		1
70 #define	FALSE		0
71 
72 /* the following must match the directives table in main.c */
73 #define	IF		0
74 #define	IFDEF		1
75 #define	IFNDEF		2
76 #define	ELSE		3
77 #define	ENDIF		4
78 #define	DEFINE		5
79 #define	UNDEF		6
80 #define	INCLUDE		7
81 #define	LINE		8
82 #define	PRAGMA		9
83 #define ERROR           10
84 #define IDENT           11
85 #define SCCS            12
86 #define ELIF            13
87 #define EJECT           14
88 #define IFFALSE         15     /* pseudo value --- never matched */
89 #define ELIFFALSE       16     /* pseudo value --- never matched */
90 #define INCLUDEDOT      17     /* pseudo value --- never matched */
91 #define IFGUESSFALSE    18     /* pseudo value --- never matched */
92 #define ELIFGUESSFALSE  19     /* pseudo value --- never matched */
93 
94 #ifdef DEBUG
95 extern int	_debugmask;
96 /*
97  * debug levels are:
98  *
99  *     0	show ifn*(def)*,endif
100  *     1	trace defined/!defined
101  *     2	show #include
102  *     3	show #include SYMBOL
103  *     4-6	unused
104  */
105 #define debug(level,arg) { if (_debugmask & (1 << level)) warning arg; }
106 #else
107 #define	debug(level,arg) /**/
108 #endif /* DEBUG */
109 
110 // VG: a C++ class for information about directories
111 #include "collectdircontent.hxx"
112 
113 typedef	unsigned char boolean;
114 
115 struct pair {
116 	char        *p_name;
117 	char        *p_value;
118 	struct pair *p_next;
119 };
120 
121 struct symhash {
122 	struct pair *s_pairs[SYMHASHMEMBERS];
123 };
124 
125 struct	inclist {
126 	char		*i_incstring;	/* string from #include line */
127 	char		*i_file;	/* path name of the include file */
128 	struct inclist	**i_list;	/* list of files it itself includes */
129 	int		i_listlen;	/* length of i_list */
130 	boolean		i_defchecked;	/* whether defines have been checked */
131 	boolean		i_notified;	/* whether we have revealed includes */
132 	boolean		i_marked;	/* whether it's in the makefile */
133 	boolean		i_searched;	/* whether we have read this */
134 	boolean         i_included_sym; /* whether #include SYMBOL was found */
135 					/* Can't use i_list if TRUE */
136 };
137 
138 struct filepointer {
139 	char	*f_p;
140 	char	*f_base;
141 	char	*f_end;
142 	long	f_len;
143 	long	f_line;
144 };
145 
146 #ifndef X_NOT_STDC_ENV
147 #include <stdlib.h>
148 #if defined(macII) && !defined(__STDC__)  /* stdlib.h fails to define these */
149 char *malloc(), *realloc();
150 #endif /* macII */
151 #else
152 char			*malloc();
153 char			*realloc();
154 #endif
155 
156 char			*copy();
157 char			*base_name();
158 char			*get_line();
159 char			*isdefined();
160 struct filepointer	*getfile();
161 struct inclist		*newinclude();
162 struct inclist		*inc_path();
163 
164 void define( char *def, struct symhash **symbols );
165 void hash_define(char *name, char * val, struct symhash **symbols);
166 struct symhash *hash_copy( struct symhash *symbols );
167 void hash_free( struct symhash *symbols );
168 void freefile( struct filepointer * fp );
169 int find_includes(struct filepointer *filep, struct inclist *file,
170     struct inclist *file_red, int recursion, boolean failOK,
171     struct IncludesCollection* incCollection, struct symhash *symbols);
172 void included_by(register struct inclist *ip,
173     register struct inclist * newfile);
174 int cppsetup(register char *line,
175     register struct filepointer *filep, register struct inclist *inc);
176 void add_include(struct filepointer *filep, struct inclist *file,
177     struct inclist *file_red, char *include, boolean dot, boolean failOK,
178     struct IncludesCollection* incCollection, struct symhash *symbols);
179 int match(register char *str, register char **list);
180 void recursive_pr_include(register struct inclist *head, register char *file,
181     register char *base);
182 void inc_clean();
183 
184 void fatalerr(char *, ...);
185 void warning(char *, ...);
186 void warning1(char *, ...);
187 
188 void convert_slashes(char *);
189 char *append_slash(char *);
190