OSSUBDIR	= $(OSTYPE)/
OPTSUBDIR	= $(OSSUBDIR)Release
DBGSUBDIR	= $(OSSUBDIR)Debug
CXXFLAGS	= -std=c++11

CXXFLAGS+= -Wall -g -pipe
SRCS	= dsf_load.cc dsfinfo.cc
DEPENDSRCS	= dsfplay.cc
PROGNAME= dsfinfo
PROGS	= dsfplay
all: dbg $(PROGS)

dbg:: debug
	mv -f $(DBGDIR)/$(PROGFILE) ./

dsfplay: dsfplay.o dsf_load.o
	$(CXX) -o $@ $>

install: install-prog
	install -c -m 555 $(PROGS) $(BINDIR)

archive:
	tar czf dsfplay.tar.gz Makefile dsfplay.cc dsf_load.cc dsf_load.h dsfinfo.cc FreeBSD-13.1-dev.sound.diff

TOPDIR	?= .
DEPENDFILE		?= .depend
BINDIR	?= /usr/local/bin
LIBDIR	?= /usr/local/lib
DBGDIR	?= $(TOPDIR)/$(DBGSUBDIR)
OPTDIR	?= $(TOPDIR)/$(OPTSUBDIR)
PROGFILE?= $(PROGNAME)$(PROGEXT)
OBJS	?= $(SRCS:S/.cpp/.o/:S/.cc/.o/:S/.c/.o/)
OOBJS	?= $(SRCS:S/.cpp/.oo/:S/.cc/.oo/:S/.c/.oo/)
DEPOBJS	?= $(DEPENDSRCS:S/.cpp/.o/:S/.cc/.o/:S/.c/.o/)
DEPOOBJS?= $(DEPENDSRCS:S/.cpp/.oo/:S/.cc/.oo/:S/.c/.oo/)
RMOBJS	?= $(OOBJS) $(SHOBJS) $(SHOOBJS) $(DEPOBJS) $(DEPOOBJS)

.SUFFIXES: .oo

release:	$(OPTDIR) $(OPTDIR)/$(PROGFILE)
debug:		$(DBGDIR) $(DBGDIR)/$(PROGFILE)

depend: $(SRCS) $(DEPENDSRCS)
	@-rm	-f $(DEPENDFILE)
	$(MAKEDEPEND) $(CFLAGS) $(CDEPENDFLAGS) $(CXXFLAGS) $(CXXDEPENDFLAGS) \
		$> $^ > $(DEPENDFILE) || rm	-f $(DEPENDFILE)
.if (defined(MSYS32) || defined(MSYS64) || defined(LLVM32) || defined(MINGW32)) && defined(OSTYPE) && $(OSTYPE) == "FreeBSD"
	@-TEMPFILE1=`mktemp depend1.XXXXX`; \
	TEMPFILE2=`mktemp depend2.XXXXX`; \
	TEMPFILE3=`mktemp depend3.XXXXX`; \
	TEMPFILE4=`mktemp depend4.XXXXX`; \
	TEMPFILE5=`mktemp depend5.XXXXX`; \
	qkc -su $(DEPENDFILE) > $$TEMPFILE4 2> /dev/null; \
	sed 's@[A-Z]:\([/\\]\)@\1@g' $$TEMPFILE4 > $$TEMPFILE3; \
	sed 's/\\/\//g' $$TEMPFILE3 > $$TEMPFILE2; \
	sed 's/\/$$/\\/' $$TEMPFILE2 > $$TEMPFILE1; \
	cat $$TEMPFILE1 > $(DEPENDFILE); \
	sed 's/^\(.*\)\.o: /\1\.oo: /' $$TEMPFILE1 >> $(DEPENDFILE); \
	sed 's/^\(.*\)\.o: /\1\.lo: /' $$TEMPFILE1 >> $(DEPENDFILE); \
	sed 's/^\(.*\)\.o: /\1\.so: /' $$TEMPFILE1 >> $(DEPENDFILE); \
	sed 's/^\(.*\)\.o: /\1\.loo: /' $$TEMPFILE1 >> $(DEPENDFILE); \
	sed 's/^\(.*\)\.o: /\1\.soo: /' $$TEMPFILE1 >> $(DEPENDFILE); \
	rm $$TEMPFILE1 $$TEMPFILE2 $$TEMPFILE3 $$TEMPFILE4 $$TEMPFILE5
.elif !defined(OSTYPE) || $(OSTYPE) == "msys" || $(OSTYPE) == "cygwin"
	@-TEMPFILE=`mktemp depend.XXXXX`; \
	cat $(DEPENDFILE) > $$TEMPFILE; \
	sed 's/^\(.*\)\.o: /\1\.oo: /' $(DEPENDFILE) >> $$TEMPFILE; \
	sed 's/^\(.*\)\.o: /\1\.lo: /' $(DEPENDFILE) >> $$TEMPFILE; \
	sed 's/^\(.*\)\.o: /\1\.so: /' $(DEPENDFILE) >> $$TEMPFILE; \
	sed 's/^\(.*\)\.o: /\1\.loo: /' $(DEPENDFILE) >> $$TEMPFILE; \
	sed 's/^\(.*\)\.o: /\1\.soo: /' $(DEPENDFILE) >> $$TEMPFILE; \
	mv $$TEMPFILE $(DEPENDFILE); \
	qkc -su $(DEPENDFILE) 2> /dev/null
.else
	@-TEMPFILE=`mktemp depend.XXXXX`; \
	cat $(DEPENDFILE) > $$TEMPFILE; \
	sed 's/^\(.*\)\.o: /\1\.oo: /' $(DEPENDFILE) >> $$TEMPFILE; \
	sed 's/^\(.*\)\.o: /\1\.lo: /' $(DEPENDFILE) >> $$TEMPFILE; \
	sed 's/^\(.*\)\.o: /\1\.so: /' $(DEPENDFILE) >> $$TEMPFILE; \
	sed 's/^\(.*\)\.o: /\1\.loo: /' $(DEPENDFILE) >> $$TEMPFILE; \
	sed 's/^\(.*\)\.o: /\1\.soo: /' $(DEPENDFILE) >> $$TEMPFILE; \
	mv $$TEMPFILE $(DEPENDFILE)
.endif
	-chmod +r $(DEPENDFILE)

clean::
	-rm	-f $(OBJS) $(RMOBJS) *.core *~ *.bak

.cc.o:	
	@-rm	-f $@
	$(CXX)	-o $@ $(CXXBASEFLAGS) $(CXXDEBUGFLAGS) $(CXXFLAGS) -c $<
	@-chmod	-w $@

.cc.oo:	
	@-rm	-f $@
	$(CXX)	-o $@ $(CXXBASEFLAGS) $(CXXOPTFLAGS) $(CXXFLAGS) -c $<
	@-chmod	-w $@

install-prog: $(BINDIR) $(OPTDIR) $(OPTDIR)/$(PROGFILE) # release # 
	@-if [ ! -e $(BINDIR) ]; then mkdir -p $(BINDIR); fi
	install -c -m 555 $(OPTDIR)/$(PROGFILE) $(BINDIR)/

$(OPTDIR)/$(PROGFILE): $(OOBJS)
	@-rm	-f $@
	$(CXX)	-o $@ $(CXXBASEFLAGS) $> $^ $(LDFLAGS) $(LDOPTFLAGS) $(LIBS)
#	$(STRIP) $@
#	gzexe $@
	@-chmod	-w $@
	@-chmod	+x $@

$(DBGDIR)/$(PROGFILE): $(OBJS)
	@-rm	-f $@
	$(CXX)	-o $@ $(CXXBASEFLAGS) $> $^ $(LDFLAGS) $(LDDEBUGFLAGS) $(LIBS)
	@-chmod	-w $@
	@-chmod	+x $@
