include Makefile.inc

OBJDIR = $(BUILDDIR)/$(OBJ)/hmake
MKPROG = $(DST)/MkProg$(EXE)
OLDER  = $(DST)/Older$(EXE)
TARGETS = $(MKPROG) $(OLDER)

SRCS    = QSort.hs Unlit.hs Utils.hs Tsort.hs FileName.hs SymTab.hs \
	  Output.hs Order.hs ListUtil.hs Getmodtime.hs \
          MkProg.hs IsPrefixOf.hs
CPPSRCS = Argv.hs Graph.hs GetDep.hs ParseLib.hs Compat.hs Imports.hs

OBJS    = $(patsubst %.hs, $(OBJDIR)/%.$O, $(SRCS))
CPPOBJS = $(patsubst %.hs, $(OBJDIR)/%.$O, $(CPPSRCS))
CFILES    = $(patsubst %.hs, %.$C, $(SRCS))
CPPCFILES = $(patsubst %.hs, %.$C, $(CPPSRCS))

AUX     = Makefile* BuildNew* HISTORY README* Summary TODO nhcmakeR cfiles \
          hmake hmake.1

HC = $(LOCAL)nhc98
HFLAGS = $(shell echo $(BUILDOPTS)) #-$(CFG)

ifeq "nhc98" "$(HC)"
HEAP = -H4M
endif

all: $(TARGETS)
install: $(TARGETS)
cfiles: $(CFILES) $(CPPCFILES) Older.$C
fromC: $(OBJDIR)
	$(HC) $(HFLAGS) -H4M -o $(MKPROG) -d $(OBJDIR) $(CFILES) $(CPPCFILES)
	$(HC) $(HFLAGS)      -o $(OLDER)  -d $(OBJDIR) Older.$C
	strip $(MKPROG) $(OLDER)
clean:
	rm -f $(OBJS) $(CPPOBJS) $(OBJDIR)/Older.o *.hi *.hc *.c
realclean: clean
	rm -f $(TARGETS)
package:
	tar zcvf hmake.tar.gz $(SRCS) $(GCSRCS) $(CPPSRCS) Older.hs $(AUX)


$(MKPROG): $(OBJDIR) $(OBJS) $(CPPOBJS)
	$(HC) $(HFLAGS) $(HEAP) -o $@  $(OBJS) $(CPPOBJS)
	strip $@
$(OLDER): $(OBJDIR) $(OBJDIR)/Older.$O
	$(HC) $(HFLAGS)         -o $@  $(OBJDIR)/Older.$O
	strip $@

$(OBJDIR):
	mkdir -p $(OBJDIR) || /bin/true
$(OBJS): $(OBJDIR)/%.$O : %.hs
	$(HC) $(HFLAGS) -c -o $@ $<
$(CPPOBJS) $(OBJDIR)/Older.$O: $(OBJDIR)/%.$O : %.hs
	$(HC) $(HFLAGS) -c -cpp -o $@ $<

$(CFILES): %.$C : %.hs
	$(HC) $(HFLAGS) -C $<
$(CPPCFILES) Older.$C: %.$C : %.hs
	$(HC) $(HFLAGS) -C -cpp $<


# dependencies generated by hmake -Md:
${OBJDIR}/Output.$O:	Output.hs ${OBJDIR}/ListUtil.$O ${OBJDIR}/FileName.$O \
			${OBJDIR}/ListUtil.$O ${OBJDIR}/Argv.$O 
${OBJDIR}/Utils.$O:	Utils.hs ${OBJDIR}/Compat.$O ${OBJDIR}/ListUtil.$O
${OBJDIR}/Tsort.$O:	Tsort.hs ${OBJDIR}/Compat.$O 
${OBJDIR}/Graph.$O:	Graph.hs ${OBJDIR}/Compat.$O ${OBJDIR}/ListUtil.$O 
${OBJDIR}/QSort.$O:	QSort.hs 
${OBJDIR}/Compat.$O:	Compat.hs ${OBJDIR}/ListUtil.$O ${OBJDIR}/QSort.$O 
${OBJDIR}/Order.$O:	Order.hs ${OBJDIR}/Compat.$O ${OBJDIR}/Graph.$O \
			${OBJDIR}/ListUtil.$O ${OBJDIR}/Tsort.$O \
			${OBJDIR}/Utils.$O 
${OBJDIR}/Unlit.$O:	Unlit.hs 
${OBJDIR}/FileName.$O:	FileName.hs ${OBJDIR}/Argv.$O 
${OBJDIR}/ParseLib.$O:	ParseLib.hs 
${OBJDIR}/SymTab.$O:	SymTab.hs 
${OBJDIR}/Imports.$O:	Imports.hs ${OBJDIR}/SymTab.$O ${OBJDIR}/ParseLib.$O \
			${OBJDIR}/ListUtil.$O 
${OBJDIR}/Getmodtime.$O:	Getmodtime.hs 
${OBJDIR}/GetDep.$O:	GetDep.hs ${OBJDIR}/Getmodtime.$O ${OBJDIR}/Imports.$O \
			${OBJDIR}/FileName.$O ${OBJDIR}/Unlit.$O \
			${OBJDIR}/Argv.$O 
${OBJDIR}/ListUtil.$O:	ListUtil.hs 
${OBJDIR}/Argv.$O:	Argv.hs ${OBJDIR}/ListUtil.$O
${OBJDIR}/MkProg.$O:	MkProg.hs ${OBJDIR}/Argv.$O ${OBJDIR}/GetDep.$O \
			${OBJDIR}/Getmodtime.$O ${OBJDIR}/ListUtil.$O \
			${OBJDIR}/Order.$O ${OBJDIR}/Output.$O 
${OBJDIR}/Older.$O:	Older.hs
ifeq "hbc" "$(HC)"
${OBJDIR}/Argv.$O:	${OBJDIR}/IsPrefixOf.$O
endif


#$(OBJDIR)/Cpp.$O: Cpp.gc
#$(OBJDIR)/Env.$O: Env.hs $(OBJDIR)/Compat.$O $(OBJDIR)/ListUtil.$O $(OBJDIR)/Unlit.$O $(OBJDIR)/Utils.$O


# C-files dependencies.
Argv.$C:    ListUtil.$C
Compat.$C:  ListUtil.$C QSort.$C
FileName.$C:Argv.$C
GetDep.$C:  Getmodtime.$C Imports.$C FileName.$C Unlit.$C Argv.$C
Graph.$C:   Compat.$C ListUtil.$C
Imports.$C: SymTab.$C ParseLib.$C ListUtil.$C
MkProg.$C:  Argv.$C GetDep.$C Getmodtime.$C ListUtil.$C Order.$C Output.$C
Order.$C:   Compat.$C Graph.$C ListUtil.$C Tsort.$C Utils.$C
Output.$C:  ListUtil.$C FileName.$C Argv.$C
Tsort.$C:   Compat.$C
Utils.$C:   Compat.$C ListUtil.$C
