# 
# Makefile for SISYPHOS project
#

# SHELL = /bin/sh

#
# global options
#
GCOPTS = -DANSI -DYY_INTERACTIVE
GAP_PATH=..
PKG_PATH=${GAP_PATH}/pkg
SRCDISTFILE=pkg

CPP	=$(CC) -E
YACC = bison
LEX = flex
unknown:
	@echo "usage: 'make <target>'  where target is one of"
	@echo "'hp700-hpux-gcc2'    for HP 9000/7xx under HP-UX with GNU cc 2"
	@echo "'hp700-hpux-cc'      for HP 9000/7xx under HP-UX with cc"
	@echo "'hp700-hpux-cci'     for HP 9000/7xx under HP-UX with cc - "
	@echo "                         generate version for profile dependent optimization"
	@echo "'hp700-hpux-ccp'     for HP 9000/7xx under HP-UX with cc - "
	@echo "                         relink with profile dependent optimization"
	@echo "'ibm6000-aix-cc'     for IBM RS/6000 under AIX with cc"
	@echo "'ibmpc-linux-gcc2'   for IBM PCs under Linux with GNU cc 2"
	@echo "'ibmpc-emx-gcc2'     for IBM PCs under DOS or OS/2 2.0 with emx"
	@echo "'generic-unix-gcc2'  for other UNIX machines with GNU cc 2"
	@echo "                     this should work on most machines"

dev:
	@$(MAKE) sisgram.tab.o CC=gcc  CFLAGS="-g -ansi -Wall -pedantic \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=bison LEX=flex
	@$(MAKE) lex.yy.o      CC=gcc  CFLAGS="-g -ansi -Wall -pedantic \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=bison LEX=flex
	@$(MAKE) sis      CC=gcc  CFLAGS="-g -Wall -ansi -Wall -pedantic \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=bison LEX=flex

hp700-hpux-gcc2:
	@$(MAKE) sisgram.tab.o CC=gcc  CFLAGS="-O2 -fomit-frame-pointer \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=yacc LEX=lex
	@$(MAKE) lex.yy.o      CC=gcc  CFLAGS="-O2 -fomit-frame-pointer \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=yacc LEX=lex
	@$(MAKE) sis      CC=gcc  CFLAGS="-O2 -Wall -fomit-frame-pointer \
		-DUNIX $(GCOPTS)"  LOPTS="$(LOPTS)"

hp700-hpux-cc:
	@$(MAKE) sisgram.tab.o CC=cc  CFLAGS="-Aa -O -DUNIX $(GCOPTS)" \
		LOPTS="$(LOPTS)" YACC=yacc LEX=lex
	@$(MAKE) lex.yy.o      CC=cc  CFLAGS="-Aa  -DUNIX $(GCOPTS)" \
		LOPTS="$(LOPTS)" YACC=yacc LEX=lex
	@$(MAKE) sis      CC=cc  CFLAGS="-Aa -O -DUNIX $(GCOPTS)" \
		LOPTS="$(LOPTS)"

hp700-hpux-cci:
	@$(MAKE) sisgram.tab.o CC=cc  CFLAGS="-Aa -O -DUNIX $(GCOPTS)" \
		LOPTS="$(LOPTS)" YACC=yacc LEX=lex
	@$(MAKE) lex.yy.o      CC=cc  CFLAGS="-Aa  -DUNIX $(GCOPTS)" \
		LOPTS="$(LOPTS)" YACC=yacc LEX=lex
	@$(MAKE) sis      CC=cc  CFLAGS="-Aa +I -O -DUNIX $(GCOPTS)" \
		LOPTS="+I $(LOPTS)"

hp700-hpux-ccp:
	@$(MAKE) sisgram.tab.o CC=cc  CFLAGS="-Aa -O -DUNIX $(GCOPTS)" \
		LOPTS="$(LOPTS)" YACC=yacc LEX=lex
	@$(MAKE) lex.yy.o      CC=cc  CFLAGS="-Aa  -DUNIX $(GCOPTS)" \
		LOPTS="$(LOPTS)" YACC=yacc LEX=lex
	@$(MAKE) sis      CC=cc  CFLAGS="-Aa +I -O -DUNIX $(GCOPTS)" \
		LOPTS="+P $(LOPTS)"

ibm6000-aix-cc:
	@$(MAKE) sisgram.tab.o CC=cc  CFLAGS="-O -DYY_USE_PROTOS \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=yacc LEX=lex
	@$(MAKE) lex.yy.o      CC=cc  CFLAGS="-O -DYY_USE_PROTOS \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=yacc LEX=lex
	@$(MAKE) sis      CC=cc  CFLAGS="-O -DUNIX $(GCOPTS)" \
		LOPTS="$(LOPTS)"

ibmpc-linux-gcc2:
	@$(MAKE) sisgram.tab.o CC=gcc  CFLAGS="-O6 -fomit-frame-pointer \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=bison LEX=flex
	@$(MAKE) lex.yy.o      CC=gcc  CFLAGS="-O6 -fomit-frame-pointer \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=bison LEX=flex
	@$(MAKE) sis      CC=gcc  CFLAGS="-O6 -Wall -pedantic -ansi -fomit-frame-pointer \
		-DUNIX $(GCOPTS)"  LOPTS="$(LOPTS)"

ibmpc-emx-gcc2:
	@$(MAKE) sisgram.tab.o CC=emx-gcc  CFLAGS="-O2 -fomit-frame-pointer \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=bison LEX=flex
	@$(MAKE) lex.yy.o      CC=emx-gcc  CFLAGS="-O2 -fomit-frame-pointer \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=bison LEX=flex
	@$(MAKE) sis.exe  CC=emx-gcc  CFLAGS="-O2 -Wall -fomit-frame-pointer \
		-DUNIX $(GCOPTS)"  LOPTS="$(LOPTS)"

generic-unix-gcc2:
	@$(MAKE) sisgram.tab.o CC=gcc  CFLAGS="-O2 -fomit-frame-pointer \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=yacc LEX=lex
	@$(MAKE) lex.yy.o      CC=gcc  CFLAGS="-O2 -fomit-frame-pointer \
		-DUNIX $(GCOPTS)" LOPTS="$(LOPTS)" YACC=yacc LEX=lex
	@$(MAKE) sis      CC=gcc  CFLAGS="-O2 -Wall -fomit-frame-pointer \
		-DUNIX $(GCOPTS)"  LOPTS="$(LOPTS)"

OBFILES = pc.o parsesup.o hgroup.o matrix.o obstruct.o \
	lcontrol.o obslif.o lex.yy.o conju.o grpring.o \
	gl.o inout.o storage.o farith.o solve.o stdlib.o \
	error.o hash.o hashfunc.o symtab.o lie.o \
	space.o aut.o sisgram.tab.o version.o special.o aobstruc.o \
	aggroup.o cohomol.o gmodule.o

sis : $(OBFILES)
	$(CC) $(LOPTS) -o sis $(OBFILES)

sis.exe : $(OBFILES)
	$(CC) $(LOPTS) -o sis.exe $(OBFILES)
	emxbind -u $(EMX) sis.exe

# sisgram.tab.c: sisgram.y
#	$(YACC) -vdl sisgram.y
#
# sisgram.tab.h: sisgram.y
#	$(YACC) -vdl sisgram.y
#
# lex.yy.c: sisgram.tab.h sisscan.l 
#	$(LEX) -L sisscan.l

clean:
	rm -f *.o sis *.output

#
# dependencies
#
aggroup.o	:  aglobals.h pc.h aggroup.h fdecla.h storage.h error.h
aobstruc.o	:  aglobals.h fdecla.h pc.h hgroup.h grpring.h storage.h
aut.o		:  aglobals.h fdecla.h pc.h hgroup.h storage.h error.h aut.h
cohomol.o		:  aglobals.h fdecla.h pc.h aut.h hgroup.h grpring.h storage.h
conju.o		:  aglobals.h fdecla.h pc.h grpring.h hgroup.h storage.h
error.o		:  aglobals.h error.h
farith.o	:  aglobals.h
gl.o		:  aglobals.h fdecla.h pc.h storage.h
gmodule.o	:  aglobals.h fdecla.h pc.h hgroup.h grpring.h storage.h
grpring.o	:  aglobals.h fdecla.h pc.h  storage.h error.h
hash.o		:  aglobals.h hash.h storage.h
hashfunc.o	:  debug.h hash.h
hgroup.o	:  aglobals.h hgroup.h
inout.o		:  aglobals.h fdecla.h pc.h hgroup.h storage.h aut.h
lcontrol.o	:  aglobals.h fdecla.h pc.h hgroup.h grpring.h storage.h
lie.o		:  aglobals.h fdecla.h grpring.h pc.h  storage.h error.h
matrix.o	:  aglobals.h fdecla.h storage.h
obslif.o	:  aglobals.h fdecla.h  pc.h hgroup.h grpring.h storage.h aut.h
obstruct.o	:  aglobals.h fdecla.h pc.h hgroup.h grpring.h storage.h
parsesup.o	:  aglobals.h fdecla.h parsesup.h grpring.h storage.h error.h
pc.o		:  aglobals.h pc.h fdecla.h storage.h error.h
sisgram.tab.o	:  aglobals.h fdecla.h pc.h aggroup.h grpring.h hgroup.h symtab.h parsesup.h storage.h error.h aut.h
solve.o		:  aglobals.h fdecla.h storage.h
space.o		:  aglobals.h fdecla.h grpring.h pc.h  storage.h
special.o	:  aglobals.h storage.h pc.h fdecla.h grpring.h
storage.o	:  aglobals.h fdecla.h error.h storage.h
symtab.o	:  aglobals.h hash.h symtab.h
version.o	:  patchlev.h

# for GAP distribution
src_dist:
	@(cmp ${PKG_PATH}/sisyphos/doc/sisyphos.tex ${GAP_PATH}/doc/sisyphos.tex \
         || echo \
         "*** WARNING: current 'sisyphos.tex' and 'doc/sisyphos.tex' differ ***")
	@zoo ah ${SRCDISTFILE}.zoo \
                ${PKG_PATH}/sisyphos/Makefile \
                ${PKG_PATH}/sisyphos/README \
                ${PKG_PATH}/sisyphos/bin/sis \
                ${PKG_PATH}/sisyphos/bin/sis.sh \
                ${PKG_PATH}/sisyphos/doc/sisman.0.6.6.ps \
                ${PKG_PATH}/sisyphos/doc/sisyphos.tex \
                `find ${PKG_PATH}/sisyphos/gap -name "*.g" -print` \
                `find ${PKG_PATH}/sisyphos/groups -print` \
                ${PKG_PATH}/sisyphos/ideal/dummy \
                ${PKG_PATH}/sisyphos/init.g \
                ${PKG_PATH}/sisyphos/src/Makefile \
                ${PKG_PATH}/sisyphos/src/testsis \
                ${PKG_PATH}/sisyphos/src/testsis.in \
                ${PKG_PATH}/sisyphos/src/testsis.out \
                `find ${PKG_PATH}/sisyphos/src -name "*.h" -print` \
                `find ${PKG_PATH}/sisyphos/src -name "*.c" -print` 
	@zoo PE ${SRCDISTFILE}.zoo

bin_dist:
	@( test \! -r ${PKG_PATH}/sisyphos/bin.orig || ( echo \
         "*** WARNING: 'sisyphos/bin.orig' exists ***";  exit 1 ) )
	( cd ${PKG_PATH}/sisyphos ; mv bin bin.orig ; mkdir bin ; \
          cp bin.orig/sis.sh bin/sis.sh ; \
          cp bin.orig/sis-${EXT} bin/sis )
	@zoo ah ${SRCDISTFILE}-${EXT}.zoo \
                ${PKG_PATH}/sisyphos/bin/sis.sh \
                ${PKG_PATH}/sisyphos/bin/sis 
	@zoo PE ${SRCDISTFILE}-${EXT}.zoo
	( cd ${PKG_PATH}/sisyphos ; rm -rf bin.old ; mv bin bin.old ; \
          mv bin.orig bin )

