/* %Z%%M% %I% %E% */

/*
 * Copyright (c) 1991, 1992, 1994, 1995 by Wayne C. Gramlich.
 * All rights reserved.
 *
 * Permission to use, copy, modify, distribute, and sell this software
 * for any purpose is hereby granted without fee provided that the above
 * copyright notice and this permission are retained.  The author makes
 * no representations about the suitability of this software for any purpose.
 * It is provided "as is" without express or implied warranty.
 */

/* This file contains the definitions for the compiler options: */

#ifndef FLAGS_DEFS_H
#define FLAGS_DEFS_H

#ifndef FLAGS_EXPORTS_H
#include "flags_exports.h"
#endif

#ifndef VECTOR_TYPES_H
#include "vector_types.h"
#endif

struct Flags_file_struct {
	Str		base;		/* Base name of file name */
	Str		full;		/* Full name (everything) */
	Str		path;		/* Path portion of file name */
	Str		suffix;		/* Suffix of file, including '.' */
};

struct Flags_struct {
	Flags_file	c_file;		/* C output file */
	Str		compiler;	/* Compiler to use */
	int		cross_compile;	/* 1 => cross compile */
	int		debug;		/* 1 => debug */
	int		debug_c;	/* 1 => compile .c file with -g */
	int		dump_tables;	/* 1 => dump tables -d */
	int		gen_asm;	/* 1 => produce assembly output .s */
	int		gen_c;		/* 1 => produce ANSI-C output .c */
	int		gen_calls;	/* 1 => produce calls file .stc */
	Flags_file	gen_file;	/* File to generate output into */
	int		gen_interface;	/* 1 => produce interface file .sti */
	int		gen_object;	/* 1 => produce object file .o */
	int		gen_parse;	/* 1 => produce parse file .stp */
	int		gen_patch;	/* 1 => produce patch file .so */
	int		gen_text;	/* 1 => produce doc file .txt */
	Heap		heap;		/* Heap allocated from */
	Vec(Str)	import_dirs;	/* List of imported directories */
	int		import_dump;	/* 1 => dump imports information */
	Flags_file	in_file;	/* First input file */
	Vec(Flags_file)	in_files;	/* All files listed on command line */
	int		linkage;	/* 1 => generate linkage info */
	int		opt_base_types;	/* 1 => optimize base types */
	int		opt_inter;	/* 1 => do inter-module opts. */
	int		opt_level;	/* opt. level to pass to compiler */
	int		opt_pic;	/* 1 => position independent code */
	Vec(Str)	options;	/* Compiler options */
	Flags_file	out_file;	/* Output file (or 0 */
	Str		out_dir;	/* Output directory */
	Str		package_name;	/* Package name or "" is none */
	int		profile;	/* 1 => turn on gprof */
	int		verbose;	/* 1 => list compiler commands */
};

#endif /* FLAGS_DEFS_H */
