###############################################################################
# $Id: Makefile,v 1.48 2010/12/31 02:28:33 tw Exp $
#
# Build and install octave package for gds2000tools
#
# Copyright (C) 2009, 2010 Thomas Weidenfeller
# 
# This file is part of gds2000tools/gds-octave.
# 
# gds2000tools/gds-octave is free software: you can redistribute it
# and/or modify it under the terms of the GNU General Public License
# version 3 as published by the Free Software Foundation.
# 
# gds2000tools/gds-octave 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 gds2000tools/gds-octave.  If not,
# see <http://www.gnu.org/licenses/>.
###############################################################################

TOP		= ..
include $(TOP)/config.mk

INSTALL_FLAGS	 =

PNAME		= gds-octave
PKG_NAME	= $(PNAME)-$(VERSION)

TARGET		= $(PKG_NAME).tar.gz
MFILES		=			\
		gds_ac.m		\
		gds_am.m		\
		gds_analyse.m		\
		gds_bitrate.m		\
		gds_csvread.m		\
		gds_csvwrite.m		\
		gds_dc.m		\
		gds_eye.m		\
		gds_fm.m		\
		gds_inv.m		\
		gds_mainfreq.m		\
		gds_plot.m		\
		gds_plotspectrum.m	\
		gds_sign.m		\
		gds_spectrum.m		\
		gds_struct2val.m	\
		gds_val2wd.m		\
		gds_wd2v.m		\
		gds_wd2val.m		\
		gds_zcross.m		\
		\
		__gds_fmenu2.m		\
		__gds_menu2.m		\
		__gds_memory_length.m	\
		__gds_sampling_period.m	\
		__gds_zcross.m

PRGS		= gds-analyse

MANS1		= gds-analyse.1
MANS7		= $(PNAME).7

MANS		= $(MANS1) $(MANS7)
MANSPS		= $(MANS1:.1=.pdf) $(MANS7:.7=.pdf)

EPSS		=			\
		example-am.eps		\
		example-spec.eps	\
		example-inv.eps		\
		example-sign.eps

DOCS		= $(MANS) $(MANSPS) $(EPSS)

ADMINFILES_TEMPL= DESCRIPTION.templ
ADMINFILES1	= $(ADMINFILES_TEMPL:.templ=)
ADMINFILES	= $(ADMINFILES1) $(TOP)/COPYING
PSPOOL_DIR	= pspool

ifeq ($(strip $(HAS_OCTAVE)),1)
default: Makefile all
all: $(TARGET)
else
default:
all:
endif

.PHONY: default all clean

ifeq ($(strip $(HAS_OCTAVE)),1)
$(TARGET): $(MFILES) $(ADMINFILES) $(DOCS)
	-rm -rf $(PSPOOL_DIR)/$(PKG_NAME)
	mkdir -p $(PSPOOL_DIR)/$(PKG_NAME)/inst
	mkdir -p $(PSPOOL_DIR)/$(PKG_NAME)/doc
	for f in $(ADMINFILES) ; do			\
		cp $$f $(PSPOOL_DIR)/$(PKG_NAME);	\
	done
	for f in $(MFILES) ; do				\
		cp $$f $(PSPOOL_DIR)/$(PKG_NAME)/inst;	\
	done
	for f in $(DOCS) ; do				\
		cp $$f $(PSPOOL_DIR)/$(PKG_NAME)/doc;	\
	done
	tar cvfz $(TARGET) -C $(PSPOOL_DIR) $(PKG_NAME)
else
$(TARGET):
endif

clean::
	-rm -rf $(PSPOOL_DIR)
	-rm -f $(TARGET) $(PNAME).ps $(PNAME).pdf $(PNAME).html
	-rm -f octave-core *.bak *~

#
# Process templates
#
%: %.templ
	-rm -f $@ 2>/dev/null
	d=`date "+%F"`; 	\
	sed "s:@version@:$(VERSION):g; s:@libdir@:$(LIBDIR):g; s:@bindir@:$(BINDIR):g; s:@gnuplot@:$(GNUPLOT):g; s:@imgviewer@:$(IMGVIEWER):g; s:@date@:$${d}:g; s:@user@:$${USER}:g" $< >$@ || { rm -f $@; exit 1; }

clean::
	-rm -f $(ADMINFILES1)

#
# Format documentation
#
%.ps: %.1
	-rm -f $@
	groff -man -Tps $< > $@ || { rm -f $@; exit 1; }

%.ps: %.7
	-rm -f $@
	groff -man -Tps $< > $@ || { rm -f $@; exit 1; }

%.pdf: %.ps
	gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ $<

ifeq ($(strip $(HAS_OCTAVE)),1)
$(PNAME).pdf: $(PNAME).7 $(EPSS)
else
$(PNAME).pdf:
endif

###############################################################################
# Installation
#
ifeq ($(strip $(HAS_OCTAVE)),1)
install: install-octave
else
install:
endif

install-octave: install-octave-bin install-octave-pkg install-octave-man

install-octave-bin: $(PRGS)
	if [ `id -u` -eq 0 ] ;					\
	then	 						\
		UG="-o bin -g bin";				\
	else 			 				\
		UG="" ;						\
	fi;							\
	install $(INSTALL_FLAGS) -m 755 $$UG -d $(BINDIR);	\
	install $(INSTALL_FLAGS) -m 755 $$UG $(PRGS)  $(BINDIR)

install-octave-pkg: $(TARGET)
	if [ `id -u` -eq 0 ] ;					\
	then	 						\
		IFLAGS="-global";				\
	else 			 				\
		IFLAGS="-local" ;				\
	fi;							\
	octave -q --eval "pkg rebuild $$IFLAGS;" || true;	\
	octave -q --eval "pkg install $$IFLAGS $(TARGET);"

install-octave-man: $(MANS)
	if [ `id -u` -eq 0 ] ;					\
	then	 						\
		UG="-o bin -g bin";				\
	else 							\
		UG="" ;						\
	fi;							\
	install $(INSTALL_FLAGS) -m 755 $$UG -d $(MAN1DIR); 	\
	install $(INSTALL_FLAGS) -m 644 $$UG $(MANS1) $(MAN1DIR); \
	install $(INSTALL_FLAGS) -m 755 $$UG -d $(MAN7DIR);     \
	install $(INSTALL_FLAGS) -m 644 $$UG $(MANS7) $(MAN7DIR)

.PHONY: install install-octave install-octave-pkg
.PHONY: install-octave-man install-octave-bin

