#######################################################################
# File: Makefile
# 	(Extracted from
#	   "$Id: Makefile,v 1.18 2009/07/13 15:00:05 maoyam Exp maoyam $")
#
# Abstracts:
#  This make file generates the test program for "aggregate.c".
#
# Copyright (C) 2009 Maoyam Tokyo, Japan (mailto:maoyam@mail.goo.ne.jp)
#
#  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., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
######################################################################

CC=gcc -std=c99

PROG=aggregate
SRCS= aggregate_test.c aggregate.c
CFLAGS= -Wall -pedantic -Wshadow -Wredundant-decls -Werror
LIBS= -lm

$(PROG): $(SRCS)
	$(CC) -g $(CFLAGS) -o $(PROG) $(SRCS) $(LIBS)

splint:
	-splint	+posixlib		-observertrans	-mustfreefresh		\
			aggregate_test.c;
	-splint	+posixlib			-mustfreeonly					\
			-temptrans			-kepttrans						\
			-branchstate		-compmempass					\
			-mayaliasunique 	-usereleased					\
			-compdef			-compdestroy					\
			-usedef				-aliasunique					\
			-unqualifiedtrans	-dependenttrans					\
			-nullpass			-nullderef						\
			-nullstate			-onlytrans						\
			-mustfreefresh		-exportlocal					\
			-observertrans										\
			$(MIN_SSIZE_T)										\
			-DLOGL_TYPE='double' -Dstrtold=strtod -Dlogl=log	\
			aggregate.c;

utest:
	./$(PROG) > $(PROG).out`date +'%Y%m%d'`.txt 2>&1 
	./$(PROG) -GCD > $(PROG).gcd.out`date +'%Y%m%d'`.txt 2>&1 
	./$(PROG) -E > $(PROG).elementary.out`date +'%Y%m%d'`.txt 2>&1 
	./$(PROG) -L > $(PROG).nlogarithm.out`date +'%Y%m%d'`.txt 2>&1 
	./$(PROG) -Log > $(PROG).logarithm.out`date +'%Y%m%d'`.txt 2>&1 
	./$(PROG) -Pow > $(PROG).power_of.out`date +'%Y%m%d'`.txt 2>&1 
	./$(PROG) -Root > $(PROG).root.out`date +'%Y%m%d'`.txt 2>&1 
	./$(PROG) -Floor > $(PROG).floor.out`date +'%Y%m%d'`.txt 2>&1 

valgrind:
	make clean;
	make;
	(date; uname -a; $(CC) --version; echo;	\
	valgrind -v --read-var-info=yes			\
				--track-origins=yes			\
				--leak-check=full			\
				./$(PROG)					\
	) > valgrind.out`date +'%Y%m%d'`.txt 2>&1
	(date; uname -a; $(CC) --version; echo;	\
	valgrind -v --read-var-info=yes			\
				--track-origins=yes			\
				--leak-check=full			\
				./$(PROG) -Root				\
	) > valgrind.root.out`date +'%Y%m%d'`.txt 2>&1
	(date; uname -a; $(CC) --version; echo;	\
	valgrind -v --read-var-info=yes			\
				--track-origins=yes			\
				--leak-check=full			\
				./$(PROG) -Floor			\
	) > valgrind.floor.out`date +'%Y%m%d'`.txt 2>&1
	(date; uname -a; $(CC) --version; echo;	\
	valgrind -v --read-var-info=yes			\
				--track-origins=yes			\
				--leak-check=full			\
				./$(PROG) -GCD				\
	) > valgrind.gcd.out`date +'%Y%m%d'`.txt 2>&1
	(date; uname -a; $(CC) --version; echo;	\
	valgrind -v --read-var-info=yes			\
				--track-origins=yes			\
				--leak-check=full			\
				./$(PROG) -Pow				\
	) > valgrind.power_of.out`date +'%Y%m%d'`.txt 2>&1
	(date; uname -a; $(CC) --version; echo;	\
	valgrind -v --read-var-info=yes			\
				--track-origins=yes			\
				--leak-check=full			\
				./$(PROG) -L				\
	) > valgrind.nlogarithm.out`date +'%Y%m%d'`.txt 2>&1
	(date; uname -a; $(CC) --version; echo;	\
	valgrind -v --read-var-info=yes			\
				--track-origins=yes			\
				--leak-check=full			\
				./$(PROG) -Log				\
	) > valgrind.logarithm.out`date +'%Y%m%d'`.txt 2>&1
	(date; uname -a; $(CC) --version; echo;	\
	valgrind -v --read-var-info=yes			\
				--track-origins=yes			\
				--leak-check=full			\
				./$(PROG) -E				\
	) > valgrind.elementary.out`date +'%Y%m%d'`.txt 2>&1

gprof:
	make clean;
	$(CC) -pg $(CFLAGS) -o $(PROG) $(SRCS) $(LIBS)
	./$(PROG) -P > /dev/null 2>&1;
	(date; uname -a; $(CC) --version; echo;	\
	gprof --version; gprof $(PROG) gmon.out	\
	) > gprof.out`date +'%Y%m%d'`.txt 2>&1;
	rm gmon.out;
	make clean;

clean:
	rm -f aggregate aggregate.exe

rcs:
	ci						\
		GPL.txt				\
		Makefile			\
		aggregate.c			\
		aggregate.h			\
		aggregate_test.c	\
		index.html
	co -l					\
		GPL.txt				\
		Makefile			\
		aggregate.c			\
		aggregate.h			\
		aggregate_test.c	\
		index.html
	rlog					\
		GPL.txt				\
		Makefile			\
		aggregate.c			\
		aggregate.h			\
		aggregate_test.c	\
		index.html

