def.h revision d43532a6
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 270eb10989Smrg#ifdef HAVE_CONFIG_H /* Autotooled for Xorg 7.0? */ 280eb10989Smrg# include "makedepend-config.h" 290eb10989Smrg# define USING_AUTOCONF 300eb10989Smrg#endif 310eb10989Smrg 320eb10989Smrg#include <X11/Xos.h> 330eb10989Smrg#include <X11/Xfuncproto.h> 340eb10989Smrg#include <stdlib.h> 350eb10989Smrg#include <stdio.h> 360eb10989Smrg#include <string.h> 370eb10989Smrg#include <ctype.h> 380eb10989Smrg#include <sys/types.h> 390eb10989Smrg#include <fcntl.h> 400eb10989Smrg#include <sys/stat.h> 410eb10989Smrg 420eb10989Smrg#define MAXDEFINES 512 43d43532a6Smrg#define MAXFILES 2048 440eb10989Smrg#define MAXINCFILES 128 /* "-include" files */ 450eb10989Smrg#define MAXDIRS 64 460eb10989Smrg#define SYMTABINC 10 /* must be > 1 for define() to work right */ 470eb10989Smrg#define TRUE 1 480eb10989Smrg#define FALSE 0 490eb10989Smrg 500eb10989Smrg/* the following must match the directives table in main.c */ 510eb10989Smrg#define IF 0 520eb10989Smrg#define IFDEF 1 530eb10989Smrg#define IFNDEF 2 540eb10989Smrg#define ELSE 3 550eb10989Smrg#define ENDIF 4 560eb10989Smrg#define DEFINE 5 570eb10989Smrg#define UNDEF 6 580eb10989Smrg#define INCLUDE 7 590eb10989Smrg#define LINE 8 600eb10989Smrg#define PRAGMA 9 610eb10989Smrg#define ERROR 10 620eb10989Smrg#define IDENT 11 630eb10989Smrg#define SCCS 12 640eb10989Smrg#define ELIF 13 650eb10989Smrg#define EJECT 14 660eb10989Smrg#define WARNING 15 670eb10989Smrg#define INCLUDENEXT 16 680eb10989Smrg#define IFFALSE 17 /* pseudo value --- never matched */ 690eb10989Smrg#define ELIFFALSE 18 /* pseudo value --- never matched */ 700eb10989Smrg#define INCLUDEDOT 19 /* pseudo value --- never matched */ 710eb10989Smrg#define IFGUESSFALSE 20 /* pseudo value --- never matched */ 720eb10989Smrg#define ELIFGUESSFALSE 21 /* pseudo value --- never matched */ 730eb10989Smrg#define INCLUDENEXTDOT 22 /* pseudo value --- never matched */ 740eb10989Smrg 750eb10989Smrg#ifdef DEBUG 760eb10989Smrgextern int _debugmask; 770eb10989Smrg/* 780eb10989Smrg * debug levels are: 79d43532a6Smrg * 800eb10989Smrg * 0 show ifn*(def)*,endif 810eb10989Smrg * 1 trace defined/!defined 820eb10989Smrg * 2 show #include 830eb10989Smrg * 3 show #include SYMBOL 840eb10989Smrg * 4-6 unused 850eb10989Smrg */ 860eb10989Smrg#define debug(level,arg) { if (_debugmask & (1 << level)) warning arg; } 870eb10989Smrg#else 880eb10989Smrg#define debug(level,arg) /**/ 890eb10989Smrg#endif /* DEBUG */ 900eb10989Smrg 910eb10989Smrgtypedef unsigned char boolean; 920eb10989Smrg 930eb10989Smrgstruct symtab { 940eb10989Smrg char *s_name; 950eb10989Smrg char *s_value; 960eb10989Smrg}; 970eb10989Smrg 980eb10989Smrg/* possible i_flag */ 990eb10989Smrg#define DEFCHECKED (1<<0) /* whether defines have been checked */ 1000eb10989Smrg#define NOTIFIED (1<<1) /* whether we have revealed includes */ 1010eb10989Smrg#define MARKED (1<<2) /* whether it's in the makefile */ 1020eb10989Smrg#define SEARCHED (1<<3) /* whether we have read this */ 1030eb10989Smrg#define FINISHED (1<<4) /* whether we are done reading this */ 1040eb10989Smrg#define INCLUDED_SYM (1<<5) /* whether #include SYMBOL was found 1050eb10989Smrg Can't use i_list if TRUE */ 1060eb10989Smrgstruct inclist { 1070eb10989Smrg char *i_incstring; /* string from #include line */ 1080eb10989Smrg char *i_file; /* path name of the include file */ 1090eb10989Smrg struct inclist **i_list; /* list of files it itself includes */ 1100eb10989Smrg int i_listlen; /* length of i_list */ 1110eb10989Smrg struct symtab **i_defs; /* symbol table for this file and its 1120eb10989Smrg children when merged */ 1130eb10989Smrg int i_ndefs; /* current # defines */ 1140eb10989Smrg boolean *i_merged; /* whether we have merged child 1150eb10989Smrg defines */ 1160eb10989Smrg unsigned char i_flags; 1170eb10989Smrg}; 1180eb10989Smrg 1190eb10989Smrgstruct filepointer { 12063165362Smrg const char *f_name; 1210eb10989Smrg char *f_p; 1220eb10989Smrg char *f_base; 1230eb10989Smrg char *f_end; 1240eb10989Smrg long f_len; 1250eb10989Smrg long f_line; 1260eb10989Smrg long cmdinc_count; 1270eb10989Smrg char **cmdinc_list; 1280eb10989Smrg long cmdinc_line; 1290eb10989Smrg}; 1300eb10989Smrg 1310eb10989Smrg#include <stdlib.h> 1320eb10989Smrg 13363165362Smrgint match(const char *str, const char * const *list); 13463165362Smrgchar *base_name(const char *file); 1350eb10989Smrgchar *getnextline(struct filepointer *fp); 136d43532a6Smrgstruct symtab **slookup(const char *symbol, struct inclist *file); 137d43532a6Smrgstruct symtab **isdefined(const char *symbol, struct inclist *file, 1380eb10989Smrg struct inclist **srcfile); 139d43532a6Smrgstruct symtab **fdefined(const char *symbol, struct inclist *file, 1400eb10989Smrg struct inclist **srcfile); 14163165362Smrgstruct filepointer *getfile(const char *file); 142d43532a6Smrgvoid included_by(struct inclist *ip, 1430eb10989Smrg struct inclist *newfile); 14463165362Smrgstruct inclist *newinclude(const char *newfile, 14563165362Smrg const char *incstring); 1460eb10989Smrgvoid inc_clean (void); 14763165362Smrgstruct inclist *inc_path(const char *file, const char *include, 14863165362Smrg int type); 1490eb10989Smrg 1500eb10989Smrgvoid freefile(struct filepointer *fp); 1510eb10989Smrg 152d43532a6Smrgvoid define2(const char *name, const char *val, 153d43532a6Smrg struct inclist *file); 1540eb10989Smrgvoid define(char *def, struct inclist *file); 155d43532a6Smrgvoid undefine(const char *symbol, struct inclist *file); 156d43532a6Smrgint find_includes(struct filepointer *filep, 157d43532a6Smrg struct inclist *file, 158d43532a6Smrg struct inclist *file_red, 1590eb10989Smrg int recursion, boolean failOK); 1600eb10989Smrg 161d43532a6Smrgvoid recursive_pr_include(struct inclist *head, 16263165362Smrg const char *file, 16363165362Smrg const char *base); 164d43532a6Smrgvoid add_include(struct filepointer *filep, 165d43532a6Smrg struct inclist *file, 166d43532a6Smrg struct inclist *file_red, 16763165362Smrg const char *include, int type, 1680eb10989Smrg boolean failOK); 1690eb10989Smrg 17063165362Smrgint cppsetup(const char *filename, 17163165362Smrg const char *line, 1720eb10989Smrg struct filepointer *filep, 1730eb10989Smrg struct inclist *inc); 1740eb10989Smrg 1750eb10989Smrg 17663165362Smrgextern void fatalerr(const char *, ...) _X_ATTRIBUTE_PRINTF(1, 2); 17763165362Smrgextern void warning(const char *, ...) _X_ATTRIBUTE_PRINTF(1, 2); 17863165362Smrgextern void warning1(const char *, ...) _X_ATTRIBUTE_PRINTF(1, 2); 179d43532a6Smrg 180d43532a6Smrgextern struct inclist inclist[ MAXFILES ]; 181d43532a6Smrgextern struct inclist *inclistp; 182d43532a6Smrgextern struct inclist *inclistnext; 183d43532a6Smrgextern struct inclist maininclist; 184d43532a6Smrgextern const char *includedirs[ ]; 185d43532a6Smrgextern const char **includedirsnext; 186d43532a6Smrgextern const char * const directives[]; 187d43532a6Smrgextern char *notdotdot[ ]; 188d43532a6Smrg 189d43532a6Smrgextern const char *objprefix; 190d43532a6Smrgextern const char *objsuffix; 191d43532a6Smrgextern int width; 192d43532a6Smrgextern boolean printed; 193d43532a6Smrgextern boolean verbose; 194d43532a6Smrgextern boolean show_where_not; 195d43532a6Smrgextern boolean warn_multiple; 196