include Makefile.vars

OBJS       = mcloc.o \
	     DwmMclocAdaFileScanner.o \
	     DwmMclocClojureFileScanner.o \
	     DwmMclocCodeUtils.o \
	     DwmMclocConfig.o \
	     DwmMclocConfigLex.o \
	     DwmMclocConfigParse.o \
	     DwmMclocCppFileScanner.o \
	     DwmMclocCssFileScanner.o \
	     DwmMclocDFileScanner.o \
	     DwmMclocErlangFileScanner.o \
	     DwmMclocFlexFileScanner.o \
	     DwmMclocHaskellFileScanner.o \
	     DwmMclocKotlinFileScanner.o \
	     DwmMclocLanguage.o \
	     DwmMclocLispFileScanner.o \
	     DwmMclocM4FileScanner.o \
	     DwmMclocManpageFileScanner.o \
	     DwmMclocNoCommentsFileScanner.o \
	     DwmMclocPythonFileScanner.o \
	     DwmMclocRubyFileScanner.o \
	     DwmMclocScanWorker.o \
	     DwmMclocShellFileScanner.o \
	     DwmMclocSourceCollection.o \
	     DwmMclocTerminalTricks.o \
	     DwmSvnTag.o
OBJDEPS    = $(OBJS:%.o=deps/%_deps)
INCS       = -I.
TARTARGETS = ${TARDIR}/bin/mcloc ${TARDIR}/etc/mcloc.cfg

all: mcloc

mcloc: ${OBJS}
	${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ $^ ${TERMLIB} ${OSLIBS}

tarprep:: ${TARTARGETS}
	${MAKE} -C docs $@

package: ${OSNAME}-pkg

darwin-pkg: tarprep
	pkgbuild --root staging --identifier com.mcplex.mcloc --version ${VERSION} mcloc-${VERSION}.pkg

freebsd-pkg: tarprep
	mkfbsdmnfst -r packaging/fbsd_manifest staging > staging/+MANIFEST
	pkg create -o . -r staging -m staging

linux-pkg: tarprep
	echo "%product mcloc" > mcloc.list
	echo "%copyright 2000-2020 by Daniel W. McRobb, All Rights Reserved." >> mcloc.list
	echo "%vendor Daniel W. McRobb" >> mcloc.list
	echo "%license /dev/null" >> mcloc.list
	echo "%readme /dev/null" >>  mcloc.list
	echo "%description Count lines of source code" >> mcloc.list
	echo "%version ${VERSION}" >> mcloc.list
	mkepmlist -u root -g wheel --prefix /usr/local staging/usr/local >> mcloc.list
	epm -k --keep-files --output-dir . -f native mcloc

${TARDIR}/bin/mcloc: mcloc
	./install-sh -s -c -m 555 $< $@

${TARDIR}/etc/mcloc.cfg: mcloc.cfg
	./install-sh -c -m 644 $< $@

#  dependency rule
deps/%_deps: %.cc
	@echo "making dependencies for $<"
	@set -e; \
	${CXX} -MM ${CXXFLAGS} ${INCS} -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

DwmMclocConfigLex.cc: DwmMclocConfigLex.lex
	flex -o$@ $<

DwmMclocConfigParse.hh: DwmMclocConfigParse.cc

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

DwmMclocEnvToArgsLex.cc: DwmMclocEnvToArgsLex.lex
	flex -o$@ $<

DwmMclocEnvToArgsParse.hh: DwmMclocEnvToArgsParse.cc

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

%FileScanner.cc: %FileScanner.lex
	flex $<

%.o: %.cc
	${CXX} ${CXXFLAGS} ${INCS} -c $<

clean::
	rm -f *FileScanner.cc DwmMclocEnvToArgsParse.?? DwmMclocConfigParse.?? ${OBJS} mcloc

distclean:: clean
	${MAKE} -C docs $@
	rm -Rf ${TARDIR}
	rm -f deps/*_deps Makefile.vars packaging/fbsd_manifest
	rm -f mcloc-${VERSION}.pkg mcloc-*\.txz mcloc.list
