

SUBDIRS	= 
BIN	= 

SYS	= PCMSYS.BIN

ERL	= BDOS.ERL CCP.ERL

MAC	= PCMBAS.MAC PCMBIOS.MAC PCMBOOT.MAC PCMCOM.MAC PCMDEF.MAC \
          PCMDISK.MAC PCMIO.MAC PCMSVDB.MAC PCMURLAD.MAC PCMVAR.MAC \
	  PCMVTAPE.MAC

COM	= M80.COM LINKMT.COM


HTMGIFS	= logo_am.gif logo_lipronet.gif logo_doxygen.gif

PWD	= $(shell pwd)
ORGSRC	= $(PWD)/am
CPMBIN	= $(PWD)/cpmbin

SCRCMD1	= cdm_1.scr
SCRCMD2	= cdm_2.scr
SCRYAZE	= yaze.scr
RCYAZE	= yaze.rc

DSKNAME = build.dsk
DSKSIZE = 1M

ifndef CC
export CC	= gcc
endif

ifndef CFLAGS
export CFLAGS	= -O2 -Wall
endif

ifndef CXXFLAGS
#export CXXFLAGS	= -O2 -Wall
endif

ifndef DOXYGEN
export DOXYGEN	= $(shell which doxygen)
endif

ifndef TEE
export TEE	= $(shell which tee)
endif

ifndef CP
export CP	= $(shell which cp)
endif

ifndef MKDIR
export MKDIR	= $(shell which mkdir)
endif

ifndef CAT
export CAT	= $(shell which cat)
endif

ifndef SED
export SED	= $(shell which sed)
endif

ifndef GREP
export GREP	= $(shell which grep)
endif

ifndef FIND
export FIND	= $(shell which find)
endif

ifndef CDM
export CDM	= $(shell which cdm)
endif

ifndef YAZE
export YAZE	= $(shell which yaze)
endif



#------------------ END OF YOUR EDIT -------------------------

OBJ	=	$(patsubst %.c,%.o,$(wildcard *.c))		\
		$(patsubst %.C,%.o,$(wildcard *.C))		\
		$(patsubst %.cc,%.o,$(wildcard *.cc))		\
		$(patsubst %.cxx,%.o,$(wildcard *.cxx))		\
		$(patsubst %.cpp,%.o,$(wildcard *.cpp))		\
		$(patsubst %.m,%.o,$(wildcard *.m))		\
		$(patsubst %.s,%.o,$(wildcard *.s))		\
		$(patsubst %.S,%.o,$(wildcard *.S))

ARC	=	$(addsuffix .a,$(word $(words 			\
			$(subst /, ,$(PWD))),			\
			$(subst /, ,$(PWD))))

VPATH = $(shell $(FIND) -type d | $(GREP) -v doc | $(GREP) -v dxg | $(GREP) -v $(CPMBIN) | $(GREP) -v $(ORGSRC))
override CFLAGS		+= $(patsubst %,-I%,$(subst :, ,$(VPATH)))
override CXXFLAGS	+= $(patsubst %,-I%,$(subst :, ,$(VPATH)))
override LDLAGS		+= $(patsubst %,-L%,$(subst :, ,$(VPATH)))

ifeq ($(word 3,$(strip $(shell $(CAT) $(ORGSRC)/PCMDEF.MAC | $(GREP) ^sysver))),1)
VERSION	= diskversion
ASMBAS	= "M80 BAS.ERL=PCMBAS.MAC/L/C/M/Z"
ASMBIOS	= "M80 BIOS.ERL=PCMBIOS.MAC/L/C/M/Z"
LNKBIOS	= "LINKMT $(basename $(SYS))=BAS,CCP,BDOS,BIOS/M/P:0BFF0"
CRFBAS	= "cp a0:PCMBAS.CRF u:PCMBAS.CRF"
CRFBIOS	= "cp a0:PCMBIOS.CRF u:PCMBIOS.CRF"
else
VERSION = romversion
ASMBIOS	= "M80 BIOS.ERL=PCMBIOS.MAC/L/C/M/Z"
LNKBIOS	= "LINKMT $(basename $(SYS))=BIOS/P:0D5B0"
CRFBIOS	= "cp a0:PCMBIOS.CRF u:PCMBIOS.CRF"
endif

.PHONY:	all		doc		clean		\
	suball		subdoc		subclean	\
	distclean	docclean			\
	subdistclean	subdocclean

all: suball $(OBJ) $(ARC) $(BIN) $(SYS)

doc: dxg/Doxyfile subdoc $(addprefix $(PWD)/doc/autogen/html/, $(HTMGIFS)) $(DOXYGEN) $(TEE)
	@$(DOXYGEN) $< 2>&1 | $(TEE) $@.log

clean: subclean
	@echo "--- remove" $(OBJ) $(ARC) $(BIN) $(SYS)
	@$(RM) $(OBJ) $(ARC) $(BIN) $(SYS)
	@echo "--- remove" $(wildcard *.CRF)
	@$(RM) $(wildcard *.CRF)
	@echo "--- remove" $(SCRCMD1) $(SCRCMD2) $(SCRYAZE) $(RCYAZE) $(DSKNAME)
	@$(RM) $(SCRCMD1) $(SCRCMD2) $(SCRYAZE) $(RCYAZE) $(DSKNAME)

distclean: subdistclean clean
	@echo "--- remove backup stuff"
	@$(RM) *~ *.bak *.old
	@echo "--- remove log files"
	@$(RM) *.log
	@echo "--- remove critical error files"
	@$(RM) core

docclean: subdocclean
	@echo "--- remove hole documentation"
	@$(RM) -rf doc/autogen/*

suball: $(addsuffix _all, $(SUBDIRS))

%_all:
	@echo ">>> change directory" $(subst _all,,$@)
	@$(MAKE) -s -C $(subst _all,,$@) all $(MAKEFLAGS)
	@echo "<<< leave directory" $(subst _all,,$@)

subdoc: $(addsuffix _doc, $(SUBDIRS))

%_doc:
	@echo ">>> change directory" $(subst _all,,$@)
	@$(MAKE) -s -C $(subst _doc,,$@) doc $(MAKEFLAGS)
	@echo "<<< leave directory" $(subst _all,,$@)

subclean: $(addsuffix _clean, $(SUBDIRS))

%_clean:
	@echo ">>> change directory" $(subst _all,,$@)
	@$(MAKE) -s -C $(subst _clean,,$@) clean $(MAKEFLAGS)
	@echo "<<< leave directory" $(subst _all,,$@)

subdistclean: $(addsuffix _distclean, $(SUBDIRS))

%_distclean:
	@echo ">>> change directory" $(subst _all,,$@)
	@$(MAKE) -s -C $(subst _distclean,,$@) distclean $(MAKEFLAGS)
	@echo "<<< leave directory" $(subst _all,,$@)

subdocclean: $(addsuffix _docclean, $(SUBDIRS))

%_docclean:
	@echo ">>> change directory" $(subst _all,,$@)
	@$(MAKE) -s -C $(subst _docclean,,$@) docclean $(MAKEFLAGS)
	@echo "<<< leave directory" $(subst _all,,$@)

$(PWD)/doc/autogen/html/%: $(PWD)/dxg/images/% $(MKDIR) $(CP)
	@echo "--- copy needed HTML image:" $(notdir $@)
	@$(MKDIR) -p doc/autogen/html
	@$(CP) -f $< $@

# Delete the default suffixes and
# define our own suffix list.
.SUFFIXES:
.SUFFIXES: .c .C .cc .cxx .cpp .m .s .S .h .o

.c.o:
	@echo "--- build" $@ "from" $<
	@$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< >$(subst .o,.log,$@) 2>&1

.C.o:

.cc.o:

.cxx.o:

.cpp.o:

.m.o:

.s.o:

.S.o:

$(ARC): $(OBJ)
	@echo "--- build" $@ "from" $?
	@$(AR) rcs $@ $?

$(BIN): $(ARC)
	@echo "--- build" $@ "from" $?
	@$(CC) -o $@ $? $(shell $(FIND) -name "*.a")

$(SCRCMD1): $(addprefix $(ORGSRC)/,$(ERL) $(MAC))
	@echo "--- build" $@
	@echo "create $(DSKNAME) $(DSKSIZE)"	>> $@
	@echo "mount a $(DSKNAME)"		>> $@
	@for i in $(COM); do echo "cp u:$(CPMBIN)/$$i a0:$$i" >> $@; done
	@for i in $(ERL); do echo "cp u:$(ORGSRC)/$$i a0:$$i" >> $@; done
	@for i in $(MAC); do echo "cp t:$(ORGSRC)/$$i a0:$$i" >> $@; done
	@echo "dir a0:"	>> $@
	@echo "quit"	>> $@

$(SCRCMD2):
	@echo "--- build" $@
	@echo "mount a $(DSKNAME)"					>> $@
	@echo "cp a0:$(addsuffix .COM,$(basename $(SYS))) u:$(SYS)"	>> $@
	@echo $(CRFBAS)							>> $@
	@echo $(CRFBIOS)						>> $@
	@echo "quit"							>> $@


ifdef CPM4L						### CPM4L begin

$(RCYAZE): ${CPM4L}/share/yaze/test/sys.com
	@echo "--- build" $@
	@echo "mount a $(CPM4L)/share/yaze/test"	>> $@
	@echo "mount b $(DSKNAME)"			>> $@
	@echo "go"					>> $@

else

$(RCYAZE):
	@echo "!!! can't build" $@
	@echo "!!! missing environment variable CPM4L"
	@false

endif							### CPM4L end


$(SCRYAZE):
	@echo "--- build" $@
	@echo "b:"					>> $@
	@echo						>> $@
	@### this ugly blank lines make the emulator happy, leave it
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo $(ASMBAS)					>> $@
	@### this ugly blank lines make the emulator happy, leave it
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo $(ASMBIOS)				>> $@
	@### this ugly blank lines make the emulator happy, leave it
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo $(LNKBIOS)				>> $@
	@### this ugly blank lines make the emulator happy, leave it
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo "dir"					>> $@
	@### this ugly blank lines make the emulator happy, leave it
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo "sys"					>> $@
	@### this ugly blank lines make the emulator happy, leave it
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo						>> $@
	@echo "quit"					>> $@

$(DSKNAME): $(SCRCMD1) $(CAT) $(CDM) $(SED) $(TEE)
	@echo "--- build" $@
	@$(CAT) $< | $(CDM) | $(SED) -e "s/[A-P][0-9]>//g" | $(SED) -e "s/\\$$>//g" | $(TEE) $@.log

$(SYS): $(SCRYAZE) $(RCYAZE) $(DSKNAME) $(SCRCMD2) $(CAT) $(YAZE) $(CDM) $(SED) $(TEE)
	@echo "--- build" $(VERSION) "at" $@
	@$(CAT) $< | $(YAZE) -s $(RCYAZE) | $(TEE) $@.log
	@$(CAT) $(SCRCMD2) | $(CDM) | $(SED) -e "s/[A-P][0-9]>//g" | $(SED) -e "s/\\$$>//g" | $(TEE) -a $@.log
