include ../Makefile.conf

SHELL=/bin/sh
PRGRAMS=
SCRIPTS=

ZZZ=0

CFLAGS=$(CFLAGS1) -DOS_$(OS) -DMTXBIN=\"$(MTXBIN)\" \
	-DMTXLIB=\"$(MTXLIB)\" -DZZZ=$(ZZZ)

# ------------------------------------------------------------------------------
# Targets
# ------------------------------------------------------------------------------

all: init libmtx.a prgrams

init:
	@echo "CFLAGS=$(CFLAGS)"
	@echo "-----"

clean:
	rm -f *.o core *.zzz config.h
	rm -f $(PRGRAMS) check *.o *.a core

install: prgrams
	@echo "Installing programs in $(MTXBIN)"
	@if [ ! -d $(MTXBIN) ]; then mkdir $(MTXBIN); fi
	@install $(PRGRAMS) $(MTXBIN)
	@for x in $(SCRIPTS) ; do \
	    csplit -s $$x '/*{{{/'; > /dev/null \
	    install -m 750 xx00  $(MTXBIN)/$$x; \
	    rm -f xx00 xx01;\
	done

# ------------------------------------------------------------------------------
# The MeatAxe library
# ------------------------------------------------------------------------------

LIB_OBJS1=\
	args.o berlekmp.o \
	cfinfo.o \
	charpol.o chbasis.o \
	error.o \
	ffio.o \
	fpcore.o fpdup.o fpmul.o fpmul2.o fpprint.o \
	gcd.o genseed.o\
	homcomp.o \
	imatcore.o imatread.o imatwrite.o\
	init.o intio.o issub.o \
	isisom.o kernel-$(ZZZ).o \
	maddmul.o mat2vec.o matadd.o matclean.o matcmp.o \
	maketabF.o \
	matcopy.o matcore.o matcut.o \
	matdup.o matech.o matid.o matins.o matinv.o matmul.o \
	matnull.o matorder.o \
	matpivot.o\
	matprint.o matpwr.o matread.o mattr.o mattrace.o matwrite.o \
	message.o \
	mfcore.o mfread.o mfreadlong.o mfwrite.o mfwritelong.o \
	minpol.o mkendo.o\
	mmulscal.o mraddgen.o mrcore.o mrread.o mrtranspose.o mrwrite.o \
	mtensor.o mtxobj.o os.o \
	permcmp.o permcore.o permdup.o perminv.o permmul.o permorder.o\
	permprint.o permpwr.o permread.o permwrite.o poladd.o\
	polcmp.o polcore.o polderive.o poldiv.o poldup.o\
	polgcd.o polmul.o polprint.o polread.o polwrite.o \
	quotient.o random.o rdcfgen.o \
	saction.o setcore.o setinsert.o settest.o \
	spinup.o spinup2.o \
	split.o stabpwr.o stfcore.o \
	stfread.o stfwrite.o \
	sumint.o \
	vec2mat.o \
	wgen.o \
	zcleanrow.o zcmprow.o zgap.o zpermrow.o \
	zzz2.o
LIB_OBJS2=smatcore.o smatread.o randomcharpol.o
LIB_OBJS3=\
	version.o
LIB_OBJS=$(LIB_OBJS1) $(LIB_OBJS2) $(LIB_OBJS3)


libmtx.a: libmtx.a($(LIB_OBJS))

libmtx.a(%.o): %.c meataxe.h config.h Makefile
	@echo "Compiling library module $*"
	@$(CC) $(CFLAGS) -c $*.c -o $*.o
	@$(AR) r libmtx.a $*.o
	@rm -f $*.o



# ------------------------------------------------------------------------------
# Single C modules
# ------------------------------------------------------------------------------

.c.o:
	@echo "Compiling $*.c"
	@$(CC) $(CFLAGS) -c $*.c -o $*.o

%: %.c libmtx.a meataxe.h
	@echo "Building $@"
	@$(CC) $(CFLAGS) -o $@ $< libmtx.a

# ------------------------------------------------------------------------------
# config.h
# ------------------------------------------------------------------------------
#
config.h: Makefile genconfig.c
	@echo "Generating config.h"
	@$(CC) $(CFLAGS) $(LFLAGS) -o genconfig genconfig.c
	@./genconfig > config.h
	@rm -f genconfig


# ------------------------------------------------------------------------------
# Documentation
# ------------------------------------------------------------------------------

exdoc: exdoc.cc
	@$(CXX) $(CFLAGS) -o $@ $?

DOCSRC=meataxe.doc chop.c matadd.c matcore.c
meataxe.tex: exdoc $(DOCSRC)
	./exdoc $(DOCSRC) >$@

meataxe.dvi: meataxe.tex
	latex meataxe.tex

# ------------------------------------------------------------------------------
# Programs
# ------------------------------------------------------------------------------

PRGRAMS += maketab
maketab: maketab-$(ZZZ).c libmtx.a
	@echo "Building $@"
	@$(CC) $(CFLAGS) -o maketab maketab-$(ZZZ).c libmtx.a

STD_PRGRAMS = cfcomp chop \
	pwkond rad soc zad \
	zcf zcl zct zcv zef ziv \
	zkd zmo zmu zpr zpt \
	zsc zsp zvp

MY_ADDON_PRGRAMS = mat2sparse sparse2mat newzsp randomzcp newzmu \
	newzpr myzmw newzcv

PRGRAMS += $(STD_PRGRAMS)
PRGRAMS += $(MY_ADDON_PRGRAMS)

# ------------------------------------------------------------------------------
# Scripts
# ------------------------------------------------------------------------------

#SCRIPTS += f1.sh f2.sh f3.sh f4.sh f5.sh f6.sh fp.sh fr.sh mtxclean.sh \
#	 dec.sh tcpeak.sh

prgrams: $(PRGRAMS) 

