default: $(OBJDIR) $(TARGETS) $(DEMOS) $(PROGRAMS)

#-----------------------------------------------------------------------
# You shouldn't need to change anything in this file.
#-----------------------------------------------------------------------

# Create the directory in which the object files will be created.

$(OBJDIR):
	mkdir $(OBJDIR)

# Construct the compilation command.

COMPILE = $(CC) -c $(CFLAGS) -o $@

LIB_OBJECTS = $(OBJDIR)/getline.o $(OBJDIR)/keytab.o $(OBJDIR)/freelist.o \
 $(OBJDIR)/strngmem.o $(OBJDIR)/hash.o $(OBJDIR)/history.o \
 $(OBJDIR)/direader.o $(OBJDIR)/homedir.o $(OBJDIR)/pathutil.o \
 $(OBJDIR)/expand.o $(OBJDIR)/stringrp.o $(OBJDIR)/cplfile.o \
 $(OBJDIR)/cplmatch.o $(OBJDIR)/pcache.o $(OBJDIR)/version.o \
 $(OBJDIR)/chrqueue.o $(OBJDIR)/ioutil.o $(OBJDIR)/errmsg.o

# List the available demonstration programs.

DEMO_PROGS = demo$(SUFFIX) demo2$(SUFFIX) demo3$(SUFFIX)

# List all of the programs that this makefile can build.

PROGS = $(DEMO_PROGS) enhance$(SUFFIX)

static: libtecla$(SUFFIX).a

libtecla$(SUFFIX).a: $(LIB_OBJECTS)
	ar -ru $@ $(LIB_OBJECTS); \
	$(RANLIB) $@; \
	rm -f $(PROGS)

shared: libtecla$(SUFFIX)$(SHARED_EXT)

libtecla$(SUFFIX)$(SHARED_EXT): $(LIB_OBJECTS) $(srcdir)/libtecla.map \
 libtecla.map.opt
	$(LINK_SHARED)
	@endings="$(SHARED_ALT)" ; \
	for alt in $$endings ; do \
	  lnk="libtecla$(SUFFIX)$$alt"; \
	  echo "rm -f $$lnk; $(LN_S) $@ $$lnk"; \
	  rm -f $$lnk; $(LN_S) $@ $$lnk; \
	done; \
	rm -f $(PROGS)

libtecla.map.opt: $(srcdir)/libtecla.map
	sed -n 's/^[ 	]*\([_a-zA-Z0-9]*\)[ 	]*;.*/+e \1/p' $? >$@

demos: $(DEMO_PROGS)

demo$(SUFFIX): $(OBJDIR)/demo.o
	LD_RUN_PATH="$(LIBDIR):$$LD_RUN_PATH:`pwd`" $(CC) $(CFLAGS) -o $@ \
 $(OBJDIR)/demo.o -L. -ltecla$(SUFFIX) $(LIBS)

demo2$(SUFFIX): $(OBJDIR)/demo2.o
	LD_RUN_PATH="$(LIBDIR):$$LD_RUN_PATH:`pwd`" $(CC) $(CFLAGS) -o $@ \
 $(OBJDIR)/demo2.o -L. -ltecla$(SUFFIX) $(LIBS)

demo3$(SUFFIX): $(OBJDIR)/demo3.o
	LD_RUN_PATH="$(LIBDIR):$$LD_RUN_PATH:`pwd`" $(CC) $(CFLAGS) -o $@ \
 $(OBJDIR)/demo3.o -L. -ltecla$(SUFFIX) $(LIBS)

enhance$(SUFFIX): $(OBJDIR)/enhance.o
	LD_RUN_PATH="$(LIBDIR):$$LD_RUN_PATH:`pwd`" $(CC) $(CFLAGS) -o $@ \
 $(OBJDIR)/enhance.o -L. -ltecla$(SUFFIX) $(LIBS)

#-----------------------------------------------------------------------
# Object file dependencies.
#-----------------------------------------------------------------------

$(OBJDIR)/getline.o: $(srcdir)/getline.c $(srcdir)/pathutil.h \
 $(srcdir)/libtecla.h $(OBJDIR)/keytab.h $(srcdir)/history.h \
 $(srcdir)/freelist.h $(srcdir)/stringrp.h $(srcdir)/getline.h \
 $(srcdir)/ioutil.h $(srcdir)/chrqueue.h $(srcdir)/cplmatch.h \
 $(srcdir)/expand.h $(srcdir)/errmsg.h
	$(COMPILE) $(srcdir)/getline.c

$(OBJDIR)/keytab.o: $(srcdir)/keytab.c $(OBJDIR)/keytab.h \
 $(srcdir)/strngmem.h $(srcdir)/getline.h $(srcdir)/errmsg.h \
 $(srcdir)/hash.h
	$(COMPILE) $(srcdir)/keytab.c

$(OBJDIR)/strngmem.o: $(srcdir)/strngmem.c $(srcdir)/strngmem.h \
 $(srcdir)/freelist.h
	$(COMPILE) $(srcdir)/strngmem.c

$(OBJDIR)/freelist.o: $(srcdir)/freelist.c $(srcdir)/freelist.h
	$(COMPILE) $(srcdir)/freelist.c

$(OBJDIR)/hash.o: $(srcdir)/hash.c $(srcdir)/hash.h $(srcdir)/strngmem.h \
 $(srcdir)/freelist.h
	$(COMPILE) $(srcdir)/hash.c

$(OBJDIR)/history.o: $(srcdir)/history.c $(srcdir)/ioutil.h \
 $(srcdir)/history.h $(srcdir)/freelist.h $(srcdir)/errmsg.h
	$(COMPILE) $(srcdir)/history.c

$(OBJDIR)/expand.o: $(srcdir)/expand.c $(srcdir)/freelist.h \
 $(srcdir)/direader.h $(srcdir)/pathutil.h $(srcdir)/homedir.h \
 $(srcdir)/stringrp.h $(srcdir)/libtecla.h $(srcdir)/ioutil.h \
 $(srcdir)/expand.h $(srcdir)/errmsg.h
	$(COMPILE) $(srcdir)/expand.c

$(OBJDIR)/direader.o: $(srcdir)/direader.c $(srcdir)/direader.h \
 $(srcdir)/errmsg.h
	$(COMPILE) $(srcdir)/direader.c

$(OBJDIR)/homedir.o: $(srcdir)/homedir.c $(srcdir)/pathutil.h \
 $(srcdir)/homedir.h $(srcdir)/errmsg.h
	$(COMPILE) $(srcdir)/homedir.c

$(OBJDIR)/pathutil.o: $(srcdir)/pathutil.c $(srcdir)/pathutil.h
	$(COMPILE) $(srcdir)/pathutil.c

$(OBJDIR)/stringrp.o: $(srcdir)/stringrp.c $(srcdir)/freelist.h \
 $(srcdir)/stringrp.h
	$(COMPILE) $(srcdir)/stringrp.c

$(OBJDIR)/cplfile.o: $(srcdir)/cplfile.c $(srcdir)/libtecla.h \
 $(srcdir)/direader.h $(srcdir)/homedir.h $(srcdir)/pathutil.h \
 $(srcdir)/cplfile.h $(srcdir)/errmsg.h
	$(COMPILE) $(srcdir)/cplfile.c

$(OBJDIR)/cplmatch.o: $(srcdir)/cplmatch.c $(srcdir)/libtecla.h \
 $(srcdir)/ioutil.h $(srcdir)/stringrp.h $(srcdir)/pathutil.h \
 $(srcdir)/cplfile.h $(srcdir)/cplmatch.h $(srcdir)/errmsg.h
	$(COMPILE) $(srcdir)/cplmatch.c

$(OBJDIR)/pcache.o: $(srcdir)/pcache.c $(srcdir)/libtecla.h \
 $(srcdir)/pathutil.h $(srcdir)/homedir.h $(srcdir)/freelist.h \
 $(srcdir)/direader.h $(srcdir)/stringrp.h $(errmsg.h)
	$(COMPILE) $(srcdir)/pcache.c

$(OBJDIR)/demo.o: $(srcdir)/demo.c $(srcdir)/libtecla.h
	$(COMPILE) $(srcdir)/demo.c

$(OBJDIR)/demo2.o: $(srcdir)/demo2.c $(srcdir)/libtecla.h
	$(COMPILE) $(srcdir)/demo2.c

$(OBJDIR)/demo3.o: $(srcdir)/demo3.c $(srcdir)/libtecla.h
	$(COMPILE) $(srcdir)/demo3.c

$(OBJDIR)/version.o: $(srcdir)/version.c $(srcdir)/libtecla.h
	$(COMPILE) $(srcdir)/version.c

$(OBJDIR)/enhance.o: $(srcdir)/enhance.c $(srcdir)/libtecla.h
	$(COMPILE) $(srcdir)/enhance.c

$(OBJDIR)/chrqueue.o: $(srcdir)/chrqueue.c $(srcdir)/ioutil.h \
 $(srcdir)/chrqueue.h $(srcdir)/freelist.h $(srcdir)/errmsg.h
	$(COMPILE) $(srcdir)/chrqueue.c

$(OBJDIR)/ioutil.o: $(srcdir)/ioutil.c $(srcdir)/ioutil.h
	$(COMPILE) $(srcdir)/ioutil.c

$(OBJDIR)/errmsg.o: $(srcdir)/errmsg.c $(srcdir)/errmsg.h
	$(COMPILE) $(srcdir)/errmsg.c

#-----------------------------------------------------------------------
# Include file dependencies.
#-----------------------------------------------------------------------

$(OBJDIR)/keytab.h: $(srcdir)/keytab.h $(srcdir)/libtecla.h
	cp $(srcdir)/keytab.h $@
