# Makefile for library
TOP=..
CPP=$(CC)
CPPFLAGS=-I. -I$(TOP)/lwp -I$(TOP)/kernel -I$(TOP)/genser #-DDEBUG 
CFLAGS=$(CPPFLAGS)
CXXFLAGS=$(CFLAGS)
LIB=libuserfs.a

include $(TOP)/rules

LIBOBJ = userfs_types.o Filesystem.o Inode.o SimpleInode.o DirInode.o \
	DeferFilesys.o CommBase.o Comm.o DeferComm.o ThreadComm.o io.o

all $(LIB):: $(LIB)($(LIBOBJ))

.SUFFIXES: .ty

.ty.cc:	$(GENCODE)
	$(GENCODE) $(CPPFLAGS) -Csed $< > $@ || rm -f $@

.ty.h:	$(GENHDR)
	$(GENHDR) $(CPPFLAGS) -C $< > $@ || rm -f $@

TYPEFILE=$(TOP)/kernel/linux/userfs_types.ty

userfs_types.o: userfs_types.cc userfs_types.h

userfs_types.h: $(TYPEFILE) $(GENHDR)
	$(GENHDR) $(CPPFLAGS) -C $< > $@ || rm -f $@

#userfs_types.cc: $(TYPEFILE) $(GENCODE)
#	$(GENCODE) $(CPPFLAGS) -Csed $< > $@
	
# Generate only code we want
userfs_types.cc: $(TYPEFILE) $(GENCODE)
	rm -rf types
	mkdir types
	$(GENCODE) $(CPPFLAGS) -Csed -l types $<
	rm -f types/encode_*_s.cc types/decode_*_r.cc
	cat types/* | awk '			\
	/^#(include.*)|pragma implementation/	 	{		\
			if (!($$0 in seen)) {	\
				seen[$$0] = 1;	\
			} else next		\
		}				\
		{ print $$0; }' > $@
	rm -fr types

depend dep:: userfs_types.h coder.h
	$(CPP) $(CPPFLAGS) -M *.cc *.c> .depend

coder.h:
	@-ln -s $(GENDIR)/coder.h .

clean::
	rm -f *.[ao] *~ userfs_types.cc userfs_types.h

