# =====================================================================
#
# 		 MAKEFILE FOR THE HOL LIBRARY: prettyp
#
# =====================================================================

# =====================================================================
#
# MAIN ENTRIES:
#
# make all	    : compile code
#
# make clean	    : remove compiled code
#	
# make clobber	    : remove compiled code and files generated by
#                     the pretty-printer
#	
# =====================================================================

# =====================================================================
# MACROS:
#
# Hol	    : the pathname of the version of hol used
# =====================================================================

Hol=../../hol

clean:
	rm -f PP_printer/*_ml.o PP_printer/*_ml.l
	rm -f PP_parser/*_ml.o PP_parser/*_ml.l
	rm -f PP_hol/*_ml.o PP_hol/*_ml.l
	@echo "===> library prettyp: all object code deleted"

clobber:
	rm -f PP_printer/*_ml.o PP_printer/*_ml.l
	rm -f PP_parser/*_ml.o PP_parser/*_ml.l PP_parser/*_pp.ml
	rm -f PP_hol/*_ml.o PP_hol/*_ml.l PP_hol/*_pp.ml
	@echo "===> library prettyp: all object code and _pp.ml files deleted"

PP_printer/extents_ml.o: PP_printer/extents.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'compilet `PP_printer/extents`;;'\
	     'quit();;' | ${Hol} 

PP_printer/strings_ml.o: PP_printer/extents_ml.o PP_printer/strings.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/extents`;;'\
	     'compilet `PP_printer/strings`;;'\
	     'quit();;' | ${Hol} 

PP_printer/ptree_ml.o: PP_printer/strings_ml.o PP_printer/ptree.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/extents`;;'\
	     'loadf `PP_printer/strings`;;'\
	     'compilet `PP_printer/ptree`;;'\
	     'quit();;' | ${Hol} 

PP_printer/treematch_ml.o: PP_printer/ptree_ml.o PP_printer/treematch.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/extents`;;'\
	     'loadf `PP_printer/strings`;;'\
	     'loadf `PP_printer/ptree`;;'\
	     'compilet `PP_printer/treematch`;;'\
	     'quit();;' | ${Hol} 

PP_printer/boxes_ml.o: PP_printer/treematch_ml.o PP_printer/boxes.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/extents`;;'\
	     'loadf `PP_printer/strings`;;'\
	     'loadf `PP_printer/ptree`;;'\
	     'loadf `PP_printer/treematch`;;'\
	     'compilet `PP_printer/boxes`;;'\
	     'quit();;' | ${Hol} 

PP_printer/treetobox_ml.o: PP_printer/boxes_ml.o PP_printer/treetobox.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/extents`;;'\
	     'loadf `PP_printer/strings`;;'\
	     'loadf `PP_printer/ptree`;;'\
	     'loadf `PP_printer/treematch`;;'\
	     'loadf `PP_printer/boxes`;;'\
	     'compilet `PP_printer/treetobox`;;'\
	     'quit();;' | ${Hol} 

PP_printer/boxtostring_ml.o: PP_printer/treetobox_ml.o\
	                     PP_printer/boxtostring.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/extents`;;'\
	     'loadf `PP_printer/strings`;;'\
	     'loadf `PP_printer/ptree`;;'\
	     'loadf `PP_printer/treematch`;;'\
	     'loadf `PP_printer/boxes`;;'\
	     'loadf `PP_printer/treetobox`;;'\
	     'compilet `PP_printer/boxtostring`;;'\
	     'quit();;' | ${Hol} 

PP_printer/print_ml.o: PP_printer/boxtostring_ml.o PP_printer/print.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/extents`;;'\
	     'loadf `PP_printer/strings`;;'\
	     'loadf `PP_printer/ptree`;;'\
	     'loadf `PP_printer/treematch`;;'\
	     'loadf `PP_printer/boxes`;;'\
	     'loadf `PP_printer/treetobox`;;'\
	     'loadf `PP_printer/boxtostring`;;'\
	     'compilet `PP_printer/print`;;'\
	     'quit();;' | ${Hol} 

PP_printer/utils_ml.o: PP_printer/print_ml.o PP_printer/utils.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/extents`;;'\
	     'loadf `PP_printer/strings`;;'\
	     'loadf `PP_printer/ptree`;;'\
	     'loadf `PP_printer/treematch`;;'\
	     'loadf `PP_printer/boxes`;;'\
	     'loadf `PP_printer/treetobox`;;'\
	     'loadf `PP_printer/boxtostring`;;'\
	     'loadf `PP_printer/print`;;'\
	     'compilet `PP_printer/utils`;;'\
	     'quit();;' | ${Hol} 

PP_printer: PP_printer/utils_ml.o PP_printer/PP_printer.ml

PP_parser/pp_lang1_pp.ml: PP_printer/extents.ml\
	                  PP_printer/strings.ml\
	                  PP_printer/ptree.ml\
	                  PP_printer/treematch.ml\
	                  PP_printer/boxes.ml\
	                  PP_printer/treetobox.ml\
	                  PP_printer/boxtostring.ml\
	                  PP_printer/print.ml\
	                  PP_printer/utils.ml\
	                  PP_printer/PP_printer.ml\
	                  PP_parser/lex.ml\
	                  PP_parser/syntax.ml\
	                  PP_parser/convert.ml\
	                  PP_parser/generate.ml\
	                  PP_parser/PP_to_ML.ml\
	                  PP_parser/PP_parser.ml\
	                  PP_parser/pp_lang1.pp\
	                  PP_parser/pp_lang2.pp
	(cd PP_parser; cp pp_lang1.build pp_lang1_pp.ml)
	(cd PP_parser; cp pp_lang2.build pp_lang2_pp.ml)
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'compilet `PP_parser/pp_lang1_pp`;;'\
	     'quit();;' | ${Hol} 
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'compilet `PP_parser/pp_lang2_pp`;;'\
	     'quit();;' | ${Hol} 
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'loadf `PP_parser/pp_lang2_pp`;;'\
	     'compilet `PP_parser/lex`;;'\
	     'quit();;' | ${Hol} 
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'loadf `PP_parser/pp_lang2_pp`;;'\
	     'loadf `PP_parser/lex`;;'\
	     'compilet `PP_parser/syntax`;;'\
	     'quit();;' | ${Hol} 
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'loadf `PP_parser/pp_lang2_pp`;;'\
	     'loadf `PP_parser/lex`;;'\
	     'loadf `PP_parser/syntax`;;'\
	     'compilet `PP_parser/convert`;;'\
	     'quit();;' | ${Hol} 
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'loadf `PP_parser/pp_lang2_pp`;;'\
	     'loadf `PP_parser/lex`;;'\
	     'loadf `PP_parser/syntax`;;'\
	     'loadf `PP_parser/convert`;;'\
	     'compilet `PP_parser/generate`;;'\
	     'quit();;' | ${Hol} 
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'loadf `PP_parser/pp_lang2_pp`;;'\
	     'loadf `PP_parser/lex`;;'\
	     'loadf `PP_parser/syntax`;;'\
	     'loadf `PP_parser/convert`;;'\
	     'loadf `PP_parser/generate`;;'\
	     'compilet `PP_parser/PP_to_ML`;;'\
	     'quit();;' | ${Hol} 
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'loadf `PP_parser/pp_lang2_pp`;;'\
	     'loadf `PP_parser/lex`;;'\
	     'loadf `PP_parser/syntax`;;'\
	     'loadf `PP_parser/convert`;;'\
	     'loadf `PP_parser/generate`;;'\
	     'loadf `PP_parser/PP_to_ML`;;'\
	     'PP_to_ML false `PP_parser/pp_lang1` ``;;'\
	     'PP_to_ML false `PP_parser/pp_lang2` ``;;'\
	     'quit();;' | ${Hol} 

PP_parser/pp_lang2_pp.ml: PP_parser/pp_lang1_pp.ml

PP_parser/pp_lang1_pp_ml.o: PP_printer PP_parser/pp_lang1_pp.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'compilet `PP_parser/pp_lang1_pp`;;'\
	     'quit();;' | ${Hol} 

PP_parser/pp_lang2_pp_ml.o: PP_parser/pp_lang1_pp_ml.o PP_parser/pp_lang2_pp.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'compilet `PP_parser/pp_lang2_pp`;;'\
	     'quit();;' | ${Hol} 

PP_parser/lex_ml.o: PP_parser/pp_lang2_pp_ml.o PP_parser/lex.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'loadf `PP_parser/pp_lang2_pp`;;'\
	     'compilet `PP_parser/lex`;;'\
	     'quit();;' | ${Hol} 

PP_parser/syntax_ml.o: PP_parser/lex_ml.o PP_parser/syntax.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'loadf `PP_parser/pp_lang2_pp`;;'\
	     'loadf `PP_parser/lex`;;'\
	     'compilet `PP_parser/syntax`;;'\
	     'quit();;' | ${Hol} 

PP_parser/convert_ml.o: PP_parser/syntax_ml.o PP_parser/convert.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'loadf `PP_parser/pp_lang2_pp`;;'\
	     'loadf `PP_parser/lex`;;'\
	     'loadf `PP_parser/syntax`;;'\
	     'compilet `PP_parser/convert`;;'\
	     'quit();;' | ${Hol} 

PP_parser/generate_ml.o: PP_parser/convert_ml.o PP_parser/generate.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'loadf `PP_parser/pp_lang2_pp`;;'\
	     'loadf `PP_parser/lex`;;'\
	     'loadf `PP_parser/syntax`;;'\
	     'loadf `PP_parser/convert`;;'\
	     'compilet `PP_parser/generate`;;'\
	     'quit();;' | ${Hol} 

PP_parser/PP_to_ML_ml.o: PP_parser/generate_ml.o PP_parser/PP_to_ML.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/pp_lang1_pp`;;'\
	     'loadf `PP_parser/pp_lang2_pp`;;'\
	     'loadf `PP_parser/lex`;;'\
	     'loadf `PP_parser/syntax`;;'\
	     'loadf `PP_parser/convert`;;'\
	     'loadf `PP_parser/generate`;;'\
	     'compilet `PP_parser/PP_to_ML`;;'\
	     'quit();;' | ${Hol} 

PP_parser: PP_parser/PP_to_ML_ml.o PP_parser/PP_parser.ml

PP_hol/hol_trees_ml.o: PP_parser PP_hol/hol_trees.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/PP_parser`;;'\
	     'compilet `PP_hol/hol_trees`;;'\
	     'quit();;' | ${Hol} 

PP_hol/precedence_ml.o: PP_hol/hol_trees_ml.o PP_hol/precedence.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/PP_parser`;;'\
	     'loadf `PP_hol/hol_trees`;;'\
	     'compilet `PP_hol/precedence`;;'\
	     'quit();;' | ${Hol} 

PP_hol/hol_type_pp.ml: PP_printer/extents.ml\
	               PP_printer/strings.ml\
	               PP_printer/ptree.ml\
	               PP_printer/treematch.ml\
	               PP_printer/boxes.ml\
	               PP_printer/treetobox.ml\
	               PP_printer/boxtostring.ml\
	               PP_printer/print.ml\
	               PP_printer/utils.ml\
	               PP_printer/PP_printer.ml\
	               PP_parser/lex.ml\
	               PP_parser/syntax.ml\
	               PP_parser/convert.ml\
	               PP_parser/generate.ml\
	               PP_parser/PP_to_ML.ml\
	               PP_parser/PP_parser.ml\
	               PP_parser/pp_lang1.pp\
	               PP_parser/pp_lang2.pp\
	               PP_hol/hol_type.pp
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/PP_parser`;;'\
	     'PP_to_ML false `PP_hol/hol_type` ``;;'\
	     'quit();;' | ${Hol} 

PP_hol/hol_type_pp_ml.o: PP_hol/precedence_ml.o PP_hol/hol_type_pp.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/PP_parser`;;'\
	     'loadf `PP_hol/hol_trees`;;'\
	     'loadf `PP_hol/precedence`;;'\
	     'compilet `PP_hol/hol_type_pp`;;'\
	     'quit();;' | ${Hol} 

PP_hol/hol_term_pp.ml: PP_printer/extents.ml\
	               PP_printer/strings.ml\
	               PP_printer/ptree.ml\
	               PP_printer/treematch.ml\
	               PP_printer/boxes.ml\
	               PP_printer/treetobox.ml\
	               PP_printer/boxtostring.ml\
	               PP_printer/print.ml\
	               PP_printer/utils.ml\
	               PP_printer/PP_printer.ml\
	               PP_parser/lex.ml\
	               PP_parser/syntax.ml\
	               PP_parser/convert.ml\
	               PP_parser/generate.ml\
	               PP_parser/PP_to_ML.ml\
	               PP_parser/PP_parser.ml\
	               PP_parser/pp_lang1.pp\
	               PP_parser/pp_lang2.pp\
	               PP_hol/hol_term.pp
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/PP_parser`;;'\
	     'PP_to_ML false `PP_hol/hol_term` ``;;'\
	     'quit();;' | ${Hol} 

PP_hol/hol_term_pp_ml.o: PP_hol/hol_type_pp_ml.o PP_hol/hol_term_pp.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/PP_parser`;;'\
	     'loadf `PP_hol/hol_trees`;;'\
	     'loadf `PP_hol/precedence`;;'\
	     'loadf `PP_hol/hol_type_pp`;;'\
	     'compilet `PP_hol/hol_term_pp`;;'\
	     'quit();;' | ${Hol} 

PP_hol/hol_thm_pp.ml: PP_printer/extents.ml\
	              PP_printer/strings.ml\
	              PP_printer/ptree.ml\
	              PP_printer/treematch.ml\
	              PP_printer/boxes.ml\
	              PP_printer/treetobox.ml\
	              PP_printer/boxtostring.ml\
	              PP_printer/print.ml\
	              PP_printer/utils.ml\
	              PP_printer/PP_printer.ml\
	              PP_parser/lex.ml\
	              PP_parser/syntax.ml\
	              PP_parser/convert.ml\
	              PP_parser/generate.ml\
	              PP_parser/PP_to_ML.ml\
	              PP_parser/PP_parser.ml\
	              PP_parser/pp_lang1.pp\
	              PP_parser/pp_lang2.pp\
	              PP_hol/hol_thm.pp
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/PP_parser`;;'\
	     'PP_to_ML false `PP_hol/hol_thm` ``;;'\
	     'quit();;' | ${Hol} 

PP_hol/hol_thm_pp_ml.o: PP_hol/hol_term_pp_ml.o PP_hol/hol_thm_pp.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/PP_parser`;;'\
	     'loadf `PP_hol/hol_trees`;;'\
	     'loadf `PP_hol/precedence`;;'\
	     'loadf `PP_hol/hol_type_pp`;;'\
	     'loadf `PP_hol/hol_term_pp`;;'\
	     'compilet `PP_hol/hol_thm_pp`;;'\
	     'quit();;' | ${Hol} 

PP_hol/new_printers_ml.o: PP_hol/hol_thm_pp_ml.o PP_hol/new_printers.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/PP_parser`;;'\
	     'loadf `PP_hol/hol_trees`;;'\
	     'loadf `PP_hol/precedence`;;'\
	     'loadf `PP_hol/hol_type_pp`;;'\
	     'loadf `PP_hol/hol_term_pp`;;'\
	     'loadf `PP_hol/hol_thm_pp`;;'\
	     'compilet `PP_hol/new_printers`;;'\
	     'quit();;' | ${Hol} 

PP_hol/link_to_hol_ml.o: PP_hol/new_printers_ml.o PP_hol/link_to_hol.ml
	echo 'set_flag(`abort_when_fail`,true);;'\
	     'loadf `PP_printer/PP_printer`;;'\
	     'loadf `PP_parser/PP_parser`;;'\
	     'loadf `PP_hol/hol_trees`;;'\
	     'loadf `PP_hol/precedence`;;'\
	     'loadf `PP_hol/hol_type_pp`;;'\
	     'loadf `PP_hol/hol_term_pp`;;'\
	     'loadf `PP_hol/hol_thm_pp`;;'\
	     'loadf `PP_hol/new_printers`;;'\
	     'compilet `PP_hol/link_to_hol`;;'\
	     'quit();;' | ${Hol} 

PP_hol: PP_hol/link_to_hol_ml.o PP_hol/PP_hol.ml

prettyp: PP_printer PP_parser PP_hol

all: prettyp
	@echo "===> library prettyp rebuilt"
