MAIN_PATH = uni110 MAIN_SRC = src SRCS = Def Ex Inter Util SRC_PATHS = $(addprefix $(MAIN_SRC)/,$(SRCS)) TEX_PATHS = def inter PIC_PATH = pic THIS = Makefile MAIN = uni110 TEX_EXT = tex BIB_EXT = bib LHS_EXT = lhs PIC_EXTS = eps tex PS_EXT = ps DVI_EXT = dvi TEX_OBJ_EXTS = aux bbl blg lof log toc TAR_EXT = tgz GHC_OBJ_EXTS = {o,hi} TEX_FILES = $(MAIN).$(BIB_EXT) $(wildcard *.$(TEX_EXT)) \ $(wildcard $(addsuffix /*.$(TEX_EXT),$(TEX_PATHS))) TEX_OBJ_FILES = $(addprefix $(MAIN).,$(TEX_OBJ_EXTS)) SRC_FILES = $(wildcard $(addsuffix /*.$(LHS_EXT),$(MAIN_SRC) $(SRC_PATHS))) GHC_OBJ_FILES = $(addsuffix /*.$(GHC_OBJ_EXTS),$(MAIN_SRC) $(SRC_PATHS)) PIC_FILES = $(addprefix $(PIC_PATH)/*.,$(PIC_EXTS)) INP_FILES = $(TEX_FILES) $(SRC_FILES) $(PIC_FILES) $(THIS) PAP_FILES = $(MAIN).$(DVI_EXT) $(MAIN).$(PS_EXT) ALL_FILES = $(INP_FILES) $(PIC_FILES) $(PAP_FILES) $(MAIN_SRC)/$(BOILER) \ $(THIS) LATEX = latex \\nonstopmode\\input BIBTEX = bibtex DVIPS = dvips -D 600 TAR = tar -cvzf HUGS = hugs GHC_PARAMS = -syslib data -syslib text -fallow-undecidable-instances \ -fglasgow-exts -fallow-overlapping-instances \ -Wall $(addprefix -i,$(SRC_PATHS)) GHCI = ghci $(GHC_PARAMS) GHC = ghc --make -O2 $(GHC_PARAMS) BOILER = Boiler.hs PROG_NAMES = Demo1 Demo2 Ex1 Ex2 Ex3 PROGS = $(addsuffix .prog,$(PROG_NAMES)) ############################################################################### .PHONY: all all: ps progs bakclean objclean ############################################################################### .PHONY: h hugs i ghci $(BOILER) progs doSTACKED = pushd $(MAIN_SRC) ; $(1) ; popd h hugs: $(BOILER) $(call doSTACKED,$(HUGS) $<) i ghci: $(BOILER) $(call doSTACKED,$(GHCI) $<) %.prog: $(SRC_FILES) $(call doSTACKED,$(GHC) $* -o $*.prog) progs: $(PROGS) ############################################################################### .PHONY: $(PS_EXT) $(DVI_EXT) $(DVI_EXT): $(MAIN).$(DVI_EXT) $(PS_EXT): $(MAIN).$(PS_EXT) doTEX = $(1) $(MAIN) ; $(BIBTEX) $(MAIN) ; $(1) $(MAIN) ; $(1) $(MAIN) $(MAIN).$(DVI_EXT): $(INP_FILES) $(call doTEX,$(LATEX)) $(MAIN).$(PS_EXT): $(MAIN).$(DVI_EXT) $(DVIPS) $(MAIN) ############################################################################### .PHONY: pack pack: $(ALL_FILES) bakclean objclean prgclean $(TAR) ../$(MAIN).$(TAR_EXT) -C .. $(MAIN_PATH)/ ############################################################################### .PHONY: bakclean objclean clean bakclean: rm -f $(addsuffix ~,$(ALL_FILES) $(TEX_OBJ_FILES)) objclean: rm -f $(TEX_OBJ_FILES) $(GHC_OBJ_FILES) prgclean: rm -f $(addprefix $(MAIN_SRC)/,$(PROGS)) clean: bakclean objclean prgclean rm -f $(PAP_FILES)