SHELL	= /bin/sh
OTFHOME	= /usr/local/otf
LIBDIR	= ${OTFHOME}/lib
INCDIR	= ${OTFHOME}/include/mol
MANDIR	= ${OTFHOME}/man/man3

.SUFFIXES:	.cc
CXX	= g++

.cc.o:
	${CXX} -c -o $*.o ${CFLAGS} $*.cc

LIBNAME	= mol

HDRS	= *.h
SRCS	= Symbol.cc MolComment.cc TimeStamp.cc BaseMolecule.cc \
	MolResId.cc MolCoordSetId.cc Iter.cc Geom3d.cc FixedAVector.cc \
	AtomicSymbol.cc AtomType.cc \
	StrPtrSet.cc StrPtrVHSet.cc SymComPtrMap.cc SymComPtrVHMap.cc
OBJS	= ${SRCS:.cc=.o}
LIB	= lib${LIBNAME}.a
OPT	= -O2 -felide-constructors
#OPT	= -g -Wall -Wenum-clash -Woverloaded-virtual -Winline -Wwrite-strings \
#	-Wpointer-arith -Wcast-qual -Wcast-align -Wconversion
CFLAGS	= ${OPT} -Wwrite-strings

${LIB}: ${OBJS}
	ar cr ${LIB} ${OBJS}

sysv.install: ${LIB}
	-mkdir ${INCDIR}
	/etc/install -m 444 -f ${INCDIR} ${HDRS}
	/etc/install -m 644 -f ${LIBDIR} ${LIB}
	/etc/install -m 444 -f ${MANDIR} *.3

bsd43.install: ${LIB}
	-mkdir ${INCDIR}
	install -c -m 444 ${HDRS} ${INCDIR}
	install -c -m 644 ${LIB} ${LIBDIR}/${LIB}
	ranlib ${LIBDIR}/${LIB}
	install -c -m 444 *.3 ${MANDIR}

osf1.install: ${LIB}
	-mkdir ${INCDIR}
	for i in ${HDRS} ; do \
		installbsd -c -m 444 $$i ${INCDIR} ; \
	done
	installbsd -c -m 644 ${LIB} ${LIBDIR}/${LIB}
	ranlib ${LIBDIR}/${LIB}
	for i in *.3 ; do \
		installbsd -c -m 444 $$i ${MANDIR} ; \
	done

#StrPtrdefs.h:
#	genclass StringPtr val defs StrPtr

StrPtrSet.cc: StrPtrdefs.h
	genclass String cptr Set StrPtr
	chmod -w StrPtrSet.*

StrPtrVHSet.cc: StrPtrSet.cc
	genclass String cptr VHSet StrPtr
	chmod -w StrPtrVHSet.*

SymComPtrMap.cc: Symbol.defs.h
	genclass -2 Symbol val MolComment ptr Map SymComPtr
	ln -s Symbol.defs.h SymComPtrdefs.h
	insert-text SymComPtrMap.h "^class" "class MolComment;" ""
	chmod -w SymComPtrMap.*

SymComPtrVHMap.cc: SymComPtrMap.cc
	genclass -2 Symbol val MolComment ptr VHMap SymComPtr
	chmod -w SymComPtrVHMap.*

Symbol.o: StrPtrVHSet.cc
BaseMolecule.o: SymComPtrVHMap.cc

clean:
	rm -f ${OBJS} ${LIB} Makefile.save errs ptrepository

spotless:
	rm -f AtomPtr.*Set.h StrPtr*Set.* SymComPtr*Map.* SymComPtrdefs.h \
		${OBJS} ${LIB} Makefile.save errs ptrepository

depend:
	mv Makefile Makefile.save
	sed -n '1,/DE\PEND/p' < Makefile.save > Makefile
	g++ -MM ${CFLAGS} ${SRCS} >> Makefile

### DEPEND
Symbol.o: Symbol.cc Symbol.h StrPtrVHSet.h StrPtrSet.h StrPtrdefs.h
MolComment.o: MolComment.cc MolComment.h TimeStamp.h Symbol.h
TimeStamp.o: TimeStamp.cc TimeStamp.h Symbol.h
BaseMolecule.o: BaseMolecule.cc BaseMolecule.h AtomicSymbol.h AtomType.h \
  Symbol.h Geom3d.h FixedAVector.h MolResId.h MolCoordSetId.h MolComment.h \
  TimeStamp.h SymComPtrVHMap.h SymComPtrMap.h SymComPtrdefs.h
MolResId.o: MolResId.cc MolResId.h Symbol.h
MolCoordSetId.o: MolCoordSetId.cc MolCoordSetId.h Symbol.h
Iter.o: Iter.cc Iter.h
Geom3d.o: Geom3d.cc Geom3d.h FixedAVector.h
FixedAVector.o: FixedAVector.cc FixedAVector.h
AtomicSymbol.o: AtomicSymbol.cc AtomicSymbol.h
AtomType.o: AtomType.cc AtomType.h Symbol.h
StrPtrSet.o: StrPtrSet.cc StrPtrSet.h StrPtrdefs.h
StrPtrVHSet.o: StrPtrVHSet.cc StrPtrVHSet.h StrPtrSet.h StrPtrdefs.h
SymComPtrMap.o: SymComPtrMap.cc SymComPtrMap.h SymComPtrdefs.h Symbol.h
SymComPtrVHMap.o: SymComPtrVHMap.cc SymComPtrVHMap.h SymComPtrMap.h \
  SymComPtrdefs.h Symbol.h
