SHELL	= /bin/sh
OTFHOME	= /usr/local/otf
BINDIR	= ${OTFHOME}/bin
LIBDIR	= ${OTFHOME}/lib
MAN1DIR	= ${OTFHOME}/man/man1

.SUFFIXES:	.cc
CXX	= g++
LOADER	= ${CXX}

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

PROG	= genmol
SRCS	= genmol.cc lex.cc parse_mcd.cc default_use.cc genclass.cc \
	write_header.cc write_body.cc clex.cc \
	String.Set.cc String.VHSet.cc \
	String.LibClassesPtr.Map.cc String.LibClassesPtr.VHMap.cc
OBJS	= ${SRCS:.cc=.o}
LIBS	=
#LIBS	= -lmalloc
CFLAGS	= -g -Wall -Wwrite-strings -Winline -Wenum-clash
#CFLAGS	= -O2 -felide-constructors

${PROG}: ${OBJS}
	${LOADER} -o ${PROG} ${CFLAGS} ${OBJS} ${LIBS}

sysv.install: ${PROG}
	/etc/install -s -m 755 -f ${BINDIR} ${PROG}
	/etc/install -m 644 -f ${LIBDIR} ${PROG}.classes
	/etc/install -m 644 -f ${LIBDIR} ${PROG}.moliter
	/etc/install -m 644 -f ${LIBDIR} ${PROG}.Pix
	/etc/install -m 644 -f ${LIBDIR} ${PROG}._array
	/etc/install -m 644 -f ${MAN1DIR} ${PROG}.1

bsd43.install: ${PROG}
	install -s -c -m 755 ${PROG} ${BINDIR}/${PROG}
	install -c -m 644 ${PROG}.classes ${LIBDIR}/${PROG}.classes
	install -c -m 644 ${PROG}.moliter ${LIBDIR}/${PROG}.moliter
	install -c -m 644 ${PROG}.Pix ${LIBDIR}/${PROG}.Pix
	install -c -m 644 ${PROG}._array ${LIBDIR}/${PROG}._array
	install -c -m 644 ${PROG}.1 ${MAN1DIR}/${PROG}.1

osf1.install: ${PROG}
	installbsd -s -c -m 755 ${PROG} ${BINDIR}/${PROG}
	installbsd -c -m 644 ${PROG}.classes ${LIBDIR}/${PROG}.classes
	installbsd -c -m 644 ${PROG}.moliter ${LIBDIR}/${PROG}.moliter
	installbsd -c -m 644 ${PROG}.Pix ${LIBDIR}/${PROG}.Pix
	installbsd -c -m 644 ${PROG}._array ${LIBDIR}/${PROG}._array
	installbsd -c -m 644 ${PROG}.1 ${MAN1DIR}/${PROG}.1

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


clean:
	rm -rf ${OBJS} ${PROG} Mol ptrepository errs

spotless: clean
	rm -f String.*Set.* String.*Map.*

Mol:	${PROG} testinput
	./${PROG} -v -k testinput

String.Set.cc:
	genclass String ref Set

String.VHSet.cc: String.Set.cc
	genclass String ref VHSet

String.LibClassesPtr.Map.cc:
	genclass -2 String ref LibClasses ptr Map
	insert-text String.LibClassesPtr.Map.h "^class" "class LibClasses;" ""

String.LibClassesPtr.VHMap.cc: String.LibClassesPtr.Map.cc
	genclass -2 String ref LibClasses ptr VHMap

genclass.o: String.VHSet.cc String.LibClassesPtr.VHMap.cc

### DEPEND
genmol.o : genmol.cc mcd.h 
lex.o : lex.cc lex.h 
parse_mcd.o : parse_mcd.cc mcd.h lex.h 
default_use.o : default_use.cc mcd.h 
genclass.o : genclass.cc mcd.h clex.h String.LibClassesPtr.VHMap.h String.LibClassesPtr.Map.h \
  String.defs.h String.VHSet.h String.Set.h 
write_header.o : write_header.cc mcd.h 
write_body.o : write_body.cc mcd.h 
clex.o : clex.cc clex.h 
String.Set.o : String.Set.cc String.Set.h String.defs.h 
String.VHSet.o : String.VHSet.cc String.VHSet.h String.Set.h String.defs.h 
String.LibClassesPtr.Map.o : String.LibClassesPtr.Map.cc String.LibClassesPtr.Map.h \
  String.defs.h 
String.LibClassesPtr.VHMap.o : String.LibClassesPtr.VHMap.cc String.LibClassesPtr.VHMap.h \
  String.LibClassesPtr.Map.h String.defs.h 
