include ../../Makefile.vars

ALLINCS   = ${TIRPCINCS} ${DWMDNSINCS} ${CREDENCEINCS} ${DWMWEBUTILSINCS} ${DWMINCS} ${DNETINC}
ALLINCS  +=  ${NLOHMANNJSONINC} -I../include
OBJFILES  = DwmMcroverAlertBase.o \
	    DwmMcroverAlertBowl.o \
	    DwmMcroverAlertOrigin.o \
	    DwmMcroverBanditAlert.o \
	    DwmMcroverBanditUtils.o \
	    DwmMcroverConfigLex.o \
	    DwmMcroverConfigParse.o \
	    DwmMcroverCredencePeerAlert.o \
	    DwmMcroverCredencePeerUtils.o \
	    DwmMcroverDiskAlert.o \
	    DwmMcroverDiskUtils.o \
	    DwmMcroverDNSAlert.o \
	    DwmMcroverDNSUtils.o \
	    DwmMcroverFilesystemAlert.o \
	    DwmMcroverFilesystemUtils.o \
	    DwmMcroverGuestAlert.o \
	    DwmMcroverGuestUtils.o \
	    DwmMcroverHTTPAddr.o \
	    DwmMcroverHttpStatusHandler.o \
	    DwmMcroverHttpWorker.o \
	    DwmMcroverHTTPUtils.o \
	    DwmMcroverLocalHostConfig.o \
	    DwmMcroverLocalNetInterface.o \
	    DwmMcroverMessageHeader.o \
	    DwmMcroverNameServerData.o \
	    DwmMcroverPackConfig.o \
	    DwmMcroverPackMember.o \
	    DwmMcroverPackMemberConfig.o \
            DwmMcroverPackMemberStatus.o \
	    DwmMcroverPiwigoAlert.o \
	    DwmMcroverRouteAlert.o \
	    DwmMcroverRouteUtils.o \
	    DwmMcroverRoverAlert.o \
            DwmMcroverRPC6Alert.o \
            DwmMcroverRPC6Target.o \
	    DwmMcroverRPCAlert.o \
	    DwmMcroverRPCProgramId.o \
	    DwmMcroverRPCTarget.o \
	    DwmMcroverRPCUtils.o \
	    DwmMcroverServiceConfig.o \
	    DwmMcroverShortForecastLexer.o \
	    DwmMcroverShortForecastParser.o \
	    DwmMcroverSMTPAlert.o \
	    DwmMcroverSMTP6Alert.o \
	    DwmMcroverSMTPStateMachine.o \
	    DwmMcroverSMTPUtils.o \
	    DwmMcroverTargetHostConfig.o \
	    DwmMcroverTcp4DstAddr.o \
	    DwmMcroverTcp4ConnAlert.o \
	    DwmMcroverTcp4ConnDeniedAlert.o \
	    DwmMcroverTcp4Utils.o \
	    DwmMcroverTcp6ConnAlert.o \
	    DwmMcroverTcp6ConnDeniedAlert.o \
	    DwmMcroverTcp6DstAddr.o \
	    DwmMcroverTcp6Utils.o \
	    DwmMcroverTCPAddress.o \
	    DwmMcroverTcpDstAddr.o \
	    DwmMcroverTcpTestConnectData.o \
	    DwmMcroverUPSAlert.o \
	    DwmMcroverUPSStatus.o \
	    DwmMcroverUPSTarget.o \
	    DwmMcroverUPSUtils.o \
	    DwmMcroverUtils.o \
	    DwmMcroverWeatherConfig.o \
	    DwmMcroverWebAlert.o \
	    DwmMcroverWebAppAlert.o \
	    DwmMcroverWebAppStatusHandler.o \
	    DwmMcroverWebAppTarget.o \
	    DwmMcroverWebAppUtils.o \
	    DwmMcroverWebAppWorker.o \
	    DwmMcroverWebTarget.o \
	    DwmMcroverZFSUtils.o \
	    DwmMcroverZpoolAlert.o
OBJDEPS  = $(OBJFILES:%.o=deps/%_deps)
OBJDIR   = ../objs
OBJPATHS = $(OBJFILES:%.o=${OBJDIR}/%.o)
SRCFILES = $(OBJFILES:%.o=%.cc)

../lib/libMcrover.a: ${OBJPATHS}
	ar rv $@ $^
	-ranlib $@

#  dependency rule
deps/%_deps: %.cc
	@echo "making dependencies for $<"
	@set -e; \
	${CXX} -MM ${CXXFLAGS} ${ALLINCS} -c $< | \
	 sed 's/\($*\)\.o[ :]*/\1.o $(@D)\/$(@F) : /g' > $@ ; [ -s $@ ] || \
	 rm -f $@

#  only include dependency makefiles if target is not 'clean' or 'distclean'
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),distclean)
-include ${OBJDEPS}
endif
endif

${OBJDIR}/%.o: %.cc deps/%_deps
	${CXX} ${CXXFLAGS} ${ALLINCS} -c $< -o $@

DwmMcroverConfigLex.cc: DwmMcroverConfigLex.lex DwmMcroverConfigParse.hh
	flex -o$@ $<

DwmMcroverConfigParse.hh: DwmMcroverConfigParse.cc

DwmMcroverConfigParse.cc: DwmMcroverConfigParse.y
	bison -d -o$@ $<

DwmMcroverShortForecastLexer.cc: DwmMcroverShortForecastLexer.lex DwmMcroverShortForecastParser.hh
	flex -o$@ $<

DwmMcroverShortForecastParser.hh: DwmMcroverShortForecastParser.cc

DwmMcroverShortForecastParser.cc: DwmMcroverShortForecastParser.y
	bison -d -o$@ $<

tarprep: ${TARDIR}/lib/libMcrover.a

${TARDIR}/lib/libMcrover.a: ../lib/libMcrover.a
	../../install-sh -c -m 644 $< $@

clean:: clean-tarprep
	rm -f ../lib/libMcrover.a ${OBJPATHS} DwmMcroverConfigParse.cc DwmMcroverConfigParse.hh \
	  DwmMcroverConfigLex.cc

distclean: clean
	rm -f ${OBJDEPS}

clean-tarprep::
	rm -f ${TARDIR}/lib/libMcrover.a

compile_commands::
	@for i in ${SRCFILES}; do \
	  /tmp/mkcompcom ${CXX} ${CXXFLAGS} ${ALLINCS} -c $$i ; \
	done
