#
#   common/Makefile
# 
#   Copyright (c) Quantenna Communications Incorporated 2007.
#   All rights reserved.
# 
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
# 
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
# 
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
# 
#  This file defines the major, minor and build numbers for this release, and
#  can create a C header file corresponding to those values. 
#

# This section is AWK'd by the release script, so keep the format to be
# <start of line><label><space>:=<space><number>
UMS_RELEASE_MAJOR := 0
UMS_RELEASE_MINOR := 6
UMS_RELEASE_BUILD := 1

HFILE := ums_release

PDFTK = $(shell which pdftk)
ENSCRIPT = $(shell which enscript)
PS2PDF = $(shell which ps2pdf)

$(HFILE).h: Makefile
	echo "/* This file is auto-generated by common/Makefile */" > $(HFILE).h
	echo "#ifndef __$(HFILE)_H" >> $(HFILE).h
	echo "#define __$(HFILE)_H" >> $(HFILE).h
	echo "#define UMS_RELEASE_MAJOR	 ($(UMS_RELEASE_MAJOR))" >> $(HFILE).h
	echo "#define UMS_RELEASE_MINOR	 ($(UMS_RELEASE_MINOR))" >> $(HFILE).h
	echo "#define UMS_RELEASE_BUILD	 ($(UMS_RELEASE_BUILD))" >> $(HFILE).h
	echo "#endif" >> $(HFILE).h

header_version: check_enscript check_ps2pdf
	-rm rev-num.pdf .tmp.rev-num .tmp.rev-num.ps
	echo "$(REV_NUM)" > .tmp.rev-num
	enscript -B --margins 67:200:260:240 -f Courier24 -p ./.tmp.rev-num.ps .tmp.rev-num
	ps2pdf .tmp.rev-num.ps rev-num.pdf
	-rm .tmp.rev-num .tmp.rev-num.ps

clean:
	rm -f $(HFILE).h
	
distclean: clean

doco_pktlogger_i: check_pdftk header_version
	REV_NUM=$(REV_NUM) make -e -C doxygen/pktlogger_doc Quantenna_pktlogger-INTERNAL-ONLY.pdf

doco_pktlogger_ext_no_muc: check_pdftk header_version
	REV_NUM=$(REV_NUM) make -e -C doxygen/pktlogger_doc Quantenna_pktlogger-external-no-muc.pdf

doco_pktlogger_ext: check_pdftk header_version
	REV_NUM=$(REV_NUM) make -e -C doxygen/pktlogger_doc Quantenna_pktlogger.pdf

check_pdftk:
	@if [ "$(PDFTK)" = "" ]; then \
		echo "Please install pdftk to generate internal documentation"; \
		exit 1; \
	fi

check_enscript:
	@if [ "$(ENSCRIPT)" = "" ]; then \
		echo "Please install enscript"; \
		exit 1; \
	fi

check_ps2pdf:
	@if [ "$(PS2PDF)" = "" ]; then \
		echo "Please install ps2pdf"; \
		exit 1; \
	fi

doco_qcsapi: check_pdftk header_version
	REV_NUM=$(REV_NUM) make -e -C doxygen/qcsapi_doc

ALL_DOCS = doco_pktlogger_ext doco_qcsapi doco_pktlogger_i doco_pktlogger_ext_no_muc
doco: $(ALL_DOCS)
.PHONY: doco $(ALL_DOCS)

