145 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 *	Include header for make
 | 
						|
 *
 | 
						|
 *	$Header$
 | 
						|
 */
 | 
						|
 | 
						|
 | 
						|
#ifndef uchar
 | 
						|
#ifdef os9
 | 
						|
#define uchar		char
 | 
						|
#define void		int
 | 
						|
#define fputc		putc
 | 
						|
#else
 | 
						|
#define uchar		unsigned char
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
#define bool		int
 | 
						|
#define time_t		long
 | 
						|
#define TRUE		(1)
 | 
						|
#define FALSE		(0)
 | 
						|
#define max(a,b)	((a)>(b)?(a):(b))
 | 
						|
 | 
						|
#define DEFN1		"makefile"		/*  Default names  */
 | 
						|
#ifdef unix
 | 
						|
#define DEFN2		"Makefile"
 | 
						|
#endif
 | 
						|
#ifdef eon
 | 
						|
#define DEFN2		"Makefile"
 | 
						|
#endif
 | 
						|
/* os9 is case insensitive */
 | 
						|
 | 
						|
#define LZ		(2048)			/*  Line size  */
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 *	A name.  This represents a file, either to be made, or existant
 | 
						|
 */
 | 
						|
 | 
						|
struct name
 | 
						|
{
 | 
						|
	struct name *		n_next;		/* Next in the list of names */
 | 
						|
	char *			n_name;		/* Called */
 | 
						|
	struct line *		n_line;		/* Dependencies */
 | 
						|
	time_t			n_time;		/* Modify time of this name */
 | 
						|
	uchar			n_flag;		/* Info about the name */
 | 
						|
};
 | 
						|
 | 
						|
#define N_MARK		0x01			/* For cycle check */
 | 
						|
#define N_DONE		0x02			/* Name looked at */
 | 
						|
#define N_TARG		0x04			/* Name is a target */
 | 
						|
#define N_PREC		0x08			/* Target is precious */
 | 
						|
#define N_DOUBLE	0x10			/* Double colon target */
 | 
						|
 | 
						|
/*
 | 
						|
 *	Definition of a target line.
 | 
						|
 */
 | 
						|
struct	line
 | 
						|
{
 | 
						|
	struct line *		l_next;		/* Next line (for ::) */
 | 
						|
	struct depend *		l_dep;		/* Dependents for this line */
 | 
						|
	struct cmd *		l_cmd;		/* Commands for this line */
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 *	List of dependents for a line
 | 
						|
 */
 | 
						|
struct	depend
 | 
						|
{
 | 
						|
	struct depend *		d_next;		/* Next dependent */
 | 
						|
	struct name *		d_name;		/* Name of dependent */
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 *	Commands for a line
 | 
						|
 */
 | 
						|
struct	cmd
 | 
						|
{
 | 
						|
	struct cmd *		c_next;		/* Next command line */
 | 
						|
	char *			c_cmd;		/* Command line */
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
/*
 | 
						|
 *	Macro storage
 | 
						|
 */
 | 
						|
struct	macro
 | 
						|
{
 | 
						|
	struct macro *	m_next;		/* Next variable */
 | 
						|
	char *		m_name;		/* Called ... */
 | 
						|
	char *		m_val;		/* Its value */
 | 
						|
	uchar		m_flag;		/* Infinite loop check */
 | 
						|
	uchar		m_prio;		/* 5 levels:
 | 
						|
					   - 0 for internal ($(CC), etc)
 | 
						|
					   - 1 (reserved for environment)
 | 
						|
					   - 2 for makefile
 | 
						|
					   - 3 for command line
 | 
						|
					   - 4 for special ($*,$<, etc)
 | 
						|
					*/
 | 
						|
};
 | 
						|
 | 
						|
extern char *		myname;
 | 
						|
extern struct name	namehead;
 | 
						|
extern struct macro *	macrohead;
 | 
						|
extern struct name *	firstname;
 | 
						|
extern bool		silent;
 | 
						|
extern bool		ignore;
 | 
						|
extern bool		rules;
 | 
						|
extern bool		dotouch;
 | 
						|
extern bool		quest;
 | 
						|
extern bool		domake;
 | 
						|
extern char		str1[];
 | 
						|
extern char		str2[];
 | 
						|
extern int		lineno;
 | 
						|
 | 
						|
char *			fgets();
 | 
						|
char *			index();
 | 
						|
char *			rindex();
 | 
						|
char *			malloc();
 | 
						|
char *			strcpy();
 | 
						|
char *			strcat();
 | 
						|
extern int		errno;
 | 
						|
 | 
						|
void			circh();
 | 
						|
char *			getmacro();
 | 
						|
struct macro *		setmacro();
 | 
						|
void			input();
 | 
						|
void			error();
 | 
						|
void			expand();
 | 
						|
void			fatal();
 | 
						|
int			make();
 | 
						|
void			modtime();
 | 
						|
struct name *		newname();
 | 
						|
struct depend *		newdep();
 | 
						|
struct cmd *		newcmd();
 | 
						|
void			newline();
 | 
						|
void			prt();
 | 
						|
char *			suffix();
 | 
						|
void			touch();
 | 
						|
void			makerules();
 | 
						|
char *			gettok();
 | 
						|
void			precious();
 |