CC      = gcc
CFLAGS  = -O2

GAP_PATH=../..
PKG_PATH=..
SRCDISTFILE=cohomolo

def:
	( test -d bin || mkdir bin; \
	test -d bin/`hostname` || mkdir bin/`hostname`; cd bin/`hostname`; \
	$(MAKE) -f ../../Makefile def2 CC="$(CC)" CFLAGS="$(CFLAGS)" )

def2:     gprun egrun sylrun normrun conrun \
	  pcrun scrun selgen matcalc nqmrun \
	  nqrun grrun extprun crrun readrels \
	  cohomology.gap calcpres.gap execcmd.gap

all:
	( test -d bin || mkdir bin; \
	test -d bin/`hostname` || mkdir bin/`hostname`; cd bin/`hostname`; \
	$(MAKE) -f ../../Makefile all2 CC="$(CC)" CFLAGS="$(CFLAGS)" )

all2:	  makegp gprun egrun sylrun normrun \
	  sylnorm conrun pcrun scrun \
	  selgen chbrun optrun matcalc \
	  matperm nqmrun nqrun grrun \
	  extprun crrun readrels testmf \
	  testpf subdir wreath permmat \
	  tcrun tcrunb pkrun tens matsum \
	  cohomology execcmd clrgrp

# rules to make the executables, just link them together
makegp: mg.o
	$(CC) $(CFLAGS) -o makegp mg.o
gprun: gpd.o gpp.o permfns.o
	$(CC) $(CFLAGS) -o gprun gpd.o gpp.o permfns.o
egrun: egd.o egp.o permfns.o
	$(CC) $(CFLAGS) -o egrun egd.o egp.o permfns.o
sylrun: syld.o sylp.o morepermfns.o permfns.o
	$(CC) $(CFLAGS) -o sylrun syld.o sylp.o morepermfns.o permfns.o
normrun: normd.o normp1.o normp2.o chb.o permfns.o morepermfns.o
	$(CC) $(CFLAGS) -o normrun normd.o normp1.o normp2.o chb.o \
	permfns.o morepermfns.o
sylnorm: snd.o sylp2.o normp1.o normp2.o permfns.o morepermfns.o chb.o
	$(CC) $(CFLAGS) -o sylnorm snd.o sylp2.o normp1.o normp2.o \
	permfns.o morepermfns.o chb.o
conrun: conpdcd.o conpdc1.o conpdc2.o
	$(CC) $(CFLAGS) -o conrun conpdcd.o conpdc1.o conpdc2.o
pcrun: pcd.o pcp.o permfns.o pcscfns.o
	$(CC) $(CFLAGS) -o pcrun pcd.o pcp.o permfns.o pcscfns.o
scrun: scd.o scp.o permfns.o pcscfns.o
	$(CC) $(CFLAGS) -o scrun scd.o scp.o permfns.o pcscfns.o
selgen: slg.o
	$(CC) $(CFLAGS) -o selgen slg.o
chbrun: testchb.o chb.o permfns.o
	$(CC) $(CFLAGS) -o chbrun testchb.o chb.o permfns.o
optrun: optd.o optp.o permfns.o
	$(CC) $(CFLAGS) -o optrun optd.o optp.o permfns.o
matcalc: mcd.o mcp.o matfns.o
	$(CC) $(CFLAGS) -o matcalc mcd.o mcp.o matfns.o
matperm: matperm.o matfns.o
	$(CC) $(CFLAGS) -o matperm matperm.o matfns.o
nqmrun: nqmd.o nqmp.o nqmfns.o
	$(CC) $(CFLAGS) -o nqmrun nqmd.o nqmp.o nqmfns.o
nqrun: nqd.o nqp1.o nqp2.o nqp3.o nqfns.o matfns.o
	$(CC) $(CFLAGS) -o nqrun nqd.o nqp1.o nqp2.o nqp3.o nqfns.o matfns.o
grrun: grd.o grp.o permfnsb.o
	$(CC) $(CFLAGS) -o grrun grd.o grp.o permfnsb.o
extprun: extpd.o exa.o exb.o exc.o permfns.o matfns.o
	$(CC) $(CFLAGS) -o extprun extpd.o exa.o exb.o exc.o permfns.o matfns.o
crrun: crd.o crp1.o crp2.o matfns.o
	$(CC) $(CFLAGS) -o crrun crd.o crp1.o crp2.o matfns.o
readrels: readrels.o
	$(CC) $(CFLAGS) -o readrels readrels.o
testmf: testmf.o matfns.o
	$(CC) $(CFLAGS) -o testmf testmf.o matfns.o
testpf: testpf.o permfns.o
	$(CC) $(CFLAGS) -o testpf testpf.o permfns.o
subdir: subdir.o
	$(CC) $(CFLAGS) -o subdir subdir.o
wreath: wreath.o
	$(CC) $(CFLAGS) -o wreath wreath.o
permmat: permmat.o
	$(CC) $(CFLAGS) -o permmat permmat.o
tcrun: tcd.o tcp.o
	$(CC) $(CFLAGS) -o tcrun tcd.o tcp.o
tcrunb: tcdb.o tcpb.o
	$(CC) $(CFLAGS) -o tcrunb tcdb.o tcpb.o
pkrun: pkd.o pkp.o pkmatfns.o
	$(CC) $(CFLAGS) -o pkrun pkd.o pkp.o pkmatfns.o
tens: tens.o
	$(CC) $(CFLAGS) -o tens tens.o
matsum: matsum.o
	$(CC) $(CFLAGS) -o matsum matsum.o

# rules to make the .o files, just compile the .c file
# cannot use implicit rule, because .c files are in a different directory
chb.o:	../../src/chb.c
	$(CC) $(CFLAGS) -o chb.o -c ../../src/chb.c
conpdc1.o:	../../src/conpdc1.c
	$(CC) $(CFLAGS) -o conpdc1.o -c ../../src/conpdc1.c
conpdc2.o:	../../src/conpdc2.c
	$(CC) $(CFLAGS) -o conpdc2.o -c ../../src/conpdc2.c
conpdcd.o:	../../src/conpdcd.c
	$(CC) $(CFLAGS) -o conpdcd.o -c ../../src/conpdcd.c
crd.o:	../../src/crd.c
	$(CC) $(CFLAGS) -o crd.o -c ../../src/crd.c
crp1.o:	../../src/crp1.c
	$(CC) $(CFLAGS) -o crp1.o -c ../../src/crp1.c
crp2.o:	../../src/crp2.c
	$(CC) $(CFLAGS) -o crp2.o -c ../../src/crp2.c
egd.o:	../../src/egd.c
	$(CC) $(CFLAGS) -o egd.o -c ../../src/egd.c
egp.o:	../../src/egp.c
	$(CC) $(CFLAGS) -o egp.o -c ../../src/egp.c
exa.o:	../../src/exa.c
	$(CC) $(CFLAGS) -o exa.o -c ../../src/exa.c
exb.o:	../../src/exb.c
	$(CC) $(CFLAGS) -o exb.o -c ../../src/exb.c
exc.o:	../../src/exc.c
	$(CC) $(CFLAGS) -o exc.o -c ../../src/exc.c
extpd.o:	../../src/extpd.c
	$(CC) $(CFLAGS) -o extpd.o -c ../../src/extpd.c
gpd.o:	../../src/gpd.c
	$(CC) $(CFLAGS) -o gpd.o -c ../../src/gpd.c
gpp.o:	../../src/gpp.c
	$(CC) $(CFLAGS) -o gpp.o -c ../../src/gpp.c
grd.o:	../../src/grd.c
	$(CC) $(CFLAGS) -o grd.o -c ../../src/grd.c
grp.o:	../../src/grp.c
	$(CC) $(CFLAGS) -o grp.o -c ../../src/grp.c
matfns.o:	../../src/matfns.c
	$(CC) $(CFLAGS) -o matfns.o -c ../../src/matfns.c
matperm.o:	../../src/matperm.c
	$(CC) $(CFLAGS) -o matperm.o -c ../../src/matperm.c
matsum.o:	../../src/matsum.c
	$(CC) $(CFLAGS) -o matsum.o -c ../../src/matsum.c
mcd.o:	../../src/mcd.c
	$(CC) $(CFLAGS) -o mcd.o -c ../../src/mcd.c
mcp.o:	../../src/mcp.c
	$(CC) $(CFLAGS) -o mcp.o -c ../../src/mcp.c
mg.o:	../../src/mg.c
	$(CC) $(CFLAGS) -o mg.o -c ../../src/mg.c
morepermfns.o:	../../src/morepermfns.c
	$(CC) $(CFLAGS) -o morepermfns.o -c ../../src/morepermfns.c
normd.o:	../../src/normd.c
	$(CC) $(CFLAGS) -o normd.o -c ../../src/normd.c
normp1.o:	../../src/normp1.c
	$(CC) $(CFLAGS) -o normp1.o -c ../../src/normp1.c
normp2.o:	../../src/normp2.c
	$(CC) $(CFLAGS) -o normp2.o -c ../../src/normp2.c
nqd.o:	../../src/nqd.c
	$(CC) $(CFLAGS) -o nqd.o -c ../../src/nqd.c
nqfns.o:	../../src/nqfns.c
	$(CC) $(CFLAGS) -o nqfns.o -c ../../src/nqfns.c
nqmd.o:	../../src/nqmd.c
	$(CC) $(CFLAGS) -o nqmd.o -c ../../src/nqmd.c
nqmfns.o:	../../src/nqmfns.c
	$(CC) $(CFLAGS) -o nqmfns.o -c ../../src/nqmfns.c
nqmp.o:	../../src/nqmp.c
	$(CC) $(CFLAGS) -o nqmp.o -c ../../src/nqmp.c
nqp1.o:	../../src/nqp1.c
	$(CC) $(CFLAGS) -o nqp1.o -c ../../src/nqp1.c
nqp2.o:	../../src/nqp2.c
	$(CC) $(CFLAGS) -o nqp2.o -c ../../src/nqp2.c
nqp3.o:	../../src/nqp3.c
	$(CC) $(CFLAGS) -o nqp3.o -c ../../src/nqp3.c
optd.o:	../../src/optd.c
	$(CC) $(CFLAGS) -o optd.o -c ../../src/optd.c
optp.o:	../../src/optp.c
	$(CC) $(CFLAGS) -o optp.o -c ../../src/optp.c
pcd.o:	../../src/pcd.c
	$(CC) $(CFLAGS) -o pcd.o -c ../../src/pcd.c
pcp.o:	../../src/pcp.c
	$(CC) $(CFLAGS) -o pcp.o -c ../../src/pcp.c
pcscfns.o:	../../src/pcscfns.c
	$(CC) $(CFLAGS) -o pcscfns.o -c ../../src/pcscfns.c
permfns.o:	../../src/permfns.c
	$(CC) $(CFLAGS) -o permfns.o -c ../../src/permfns.c
permfnsb.o:	../../src/permfnsb.c
	$(CC) $(CFLAGS) -o permfnsb.o -c ../../src/permfnsb.c
permmat.o:	../../src/permmat.c
	$(CC) $(CFLAGS) -o permmat.o -c ../../src/permmat.c
pkd.o:	../../src/pkd.c
	$(CC) $(CFLAGS) -o pkd.o -c ../../src/pkd.c
pkmatfns.o:	../../src/pkmatfns.c
	$(CC) $(CFLAGS) -o pkmatfns.o -c ../../src/pkmatfns.c
pkp.o:	../../src/pkp.c
	$(CC) $(CFLAGS) -o pkp.o -c ../../src/pkp.c
readrels.o:	../../src/readrels.c
	$(CC) $(CFLAGS) -o readrels.o -c ../../src/readrels.c
scd.o:	../../src/scd.c
	$(CC) $(CFLAGS) -o scd.o -c ../../src/scd.c
scp.o:	../../src/scp.c
	$(CC) $(CFLAGS) -o scp.o -c ../../src/scp.c
slg.o:	../../src/slg.c
	$(CC) $(CFLAGS) -o slg.o -c ../../src/slg.c
snd.o:	../../src/snd.c
	$(CC) $(CFLAGS) -o snd.o -c ../../src/snd.c
subdir.o:	../../src/subdir.c
	$(CC) $(CFLAGS) -o subdir.o -c ../../src/subdir.c
syld.o:	../../src/syld.c
	$(CC) $(CFLAGS) -o syld.o -c ../../src/syld.c
sylp.o:	../../src/sylp.c
	$(CC) $(CFLAGS) -o sylp.o -c ../../src/sylp.c
sylp2.o:	../../src/sylp2.c
	$(CC) $(CFLAGS) -o sylp2.o -c ../../src/sylp2.c
tcd.o:	../../src/tcd.c
	$(CC) $(CFLAGS) -o tcd.o -c ../../src/tcd.c
tcdb.o:	../../src/tcdb.c
	$(CC) $(CFLAGS) -o tcdb.o -c ../../src/tcdb.c
tcp.o:	../../src/tcp.c
	$(CC) $(CFLAGS) -o tcp.o -c ../../src/tcp.c
tcpb.o:	../../src/tcpb.c
	$(CC) $(CFLAGS) -o tcpb.o -c ../../src/tcpb.c
tens.o:	../../src/tens.c
	$(CC) $(CFLAGS) -o tens.o -c ../../src/tens.c
testchb.o:	../../src/testchb.c
	$(CC) $(CFLAGS) -o testchb.o -c ../../src/testchb.c
testmf.o:	../../src/testmf.c
	$(CC) $(CFLAGS) -o testmf.o -c ../../src/testmf.c
testpf.o:	../../src/testpf.c
	$(CC) $(CFLAGS) -o testpf.o -c ../../src/testpf.c
wreath.o:	../../src/wreath.c
	$(CC) $(CFLAGS) -o wreath.o -c ../../src/wreath.c

# rules to make the scripts, just copy them
cohomology.gap: ../../src/cohomology.gap
	cp ../../src/cohomology.gap cohomology.gap; chmod +x cohomology.gap
calcpres.gap: ../../src/calcpres.gap
	cp ../../src/calcpres.gap calcpres.gap; chmod +x calcpres.gap
execcmd.gap: ../../src/execcmd.gap
	cp ../../src/execcmd.gap execcmd.gap; chmod +x execcmd.gap
cohomology: ../../src/cohomology
	cp ../../src/cohomology cohomology; chmod +x cohomology
execcmd: ../../src/execcmd
	cp ../../src/execcmd execcmd; chmod +x execcmd
clrgrp: ../../src/clrgrp
	cp ../../src/clrgrp clrgrp; chmod +x clrgrp

# pseudo targets
clean:
	( cd bin/`hostname`; rm -f *.o )

distclean:
	( rm -rf bin/`hostname` )

# for GAP distribution
src_dist:
	@(cmp ${PKG_PATH}/cohomolo/gapdoc/cohomology.tex \
         ${GAP_PATH}/doc/cohomolo.tex \
         || echo \
         "*** WARNING: current 'cohomology.tex' and 'doc/cohomolo.tex' differ ***")
	@zoo ah ${SRCDISTFILE}.zoo \
                ${PKG_PATH}/cohomolo/Makefile \
                ${PKG_PATH}/cohomolo/README \
                ${PKG_PATH}/cohomolo/README_GAP \
                `find ${PKG_PATH}/cohomolo/data -print` \
                `find ${PKG_PATH}/cohomolo/doc -name "info*" -print` \
                `find ${PKG_PATH}/cohomolo/gap -name "*.g" -print` \
                `find ${PKG_PATH}/cohomolo/gap -name "*.tst" -print` \
                `find ${PKG_PATH}/cohomolo/gapdata -print` \
                `find ${PKG_PATH}/cohomolo/gapdoc -name "*.tex" -print` \
                ${PKG_PATH}/cohomolo/gapdoc/manual.idx \
                ${PKG_PATH}/cohomolo/gapdoc/manual.toc \
                ${PKG_PATH}/cohomolo/init.g \
                `find ${PKG_PATH}/cohomolo/src -name "*.c" -print` \
                `find ${PKG_PATH}/cohomolo/src -name "*.gap" -print` \
                ${PKG_PATH}/cohomolo/src/clrgrp \
                ${PKG_PATH}/cohomolo/src/cohomology \
                ${PKG_PATH}/cohomolo/src/execcmd \
                ${PKG_PATH}/cohomolo/src/makefile \
                ${PKG_PATH}/cohomolo/src/myman
	@zoo PE ${SRCDISTFILE}.zoo

