## -*- text -*- ####################################################
#								   #
# Makefile for the GNU Readline and History Libraries.		   #
#								   #
####################################################################

srcdir = .
VPATH = .:$(srcdir)

INSTALL = install -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644

RANLIB = ranlib
AR = ar
RM = rm
CP = cp
MV = mv
O_SUFFIX=o
A_SUFFIX=a

# See the file STANDALONE for the -D defines that readline understands
DEFS =
# For libraries which include headers from other libraries.
LOCAL_INCLUDES = -I. -I..

CPPFLAGS = $(DEFS) $(LOCAL_INCLUDES)

# Here is a rule for making .o files from .c files that doesn't force
# the type of the machine (like -sun3) into the flags.
.c.$(O_SUFFIX):
	$(RM) $@
	$(CC) -c $(CPPFLAGS) $(CFLAGS) $(INCFLAGS) $<

# The name of the main library target.
LIBRARY_NAME = libreadline.$(A_SUFFIX)

# The C code source files for this library.
CSOURCES = $(srcdir)readline.c $(srcdir)funmap.c $(srcdir)keymaps.c \
	   $(srcdir)vi_mode.c $(srcdir)parens.c $(srcdir)rltty.c \
	   $(srcdir)complete.c $(srcdir)bind.c $(srcdir)isearch.c \
	   $(srcdir)display.c $(srcdir)signals.c $(srcdir)emacs_keymap.c \
	   $(srcdir)vi_keymap.c $(srcdir)history.c $(srcdir)tilde.c \
	   $(srcdir)xmalloc.c

# The header files for this library.
HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h \
	   posixstat.h tilde.h rlconf.h

OBJECTS = readline.$(O_SUFFIX) vi_mode.$(O_SUFFIX) funmap.$(O_SUFFIX) keymaps.$(O_SUFFIX) parens.$(O_SUFFIX) search.$(O_SUFFIX) \
	  rltty.$(O_SUFFIX) complete.$(O_SUFFIX) bind.$(O_SUFFIX) isearch.$(O_SUFFIX) display.$(O_SUFFIX) signals.$(O_SUFFIX) \
	  history.$(O_SUFFIX) tilde.$(O_SUFFIX) xmalloc.$(O_SUFFIX)

# The texinfo files which document this library.
DOCSOURCE = doc/rlman.texinfo doc/rltech.texinfo doc/rluser.texinfo
DOCOBJECT = doc/readline.dvi
DOCSUPPORT = doc/Makefile
DOCUMENTATION = $(DOCSOURCE) $(DOCOBJECT) $(DOCSUPPORT)

SUPPORT = Makefile ChangeLog $(DOCSUPPORT) examples/[-a-z.]*

SOURCES  = $(CSOURCES) $(HSOURCES) $(DOCSOURCE)

THINGS_TO_TAR = $(SOURCES) $(SUPPORT)

##########################################################################

all: libreadline.$(A_SUFFIX) libhistory.$(A_SUFFIX)

libreadline.$(A_SUFFIX): $(OBJECTS)
	$(RM) -f $@
	$(AR) cq $@ $(OBJECTS)
	-[ -n "$(RANLIB)" ] && $(RANLIB) $@

libhistory.$(A_SUFFIX): history.$(O_SUFFIX)
	$(RM) -f $@
	$(AR) cq $@ history.$(O_SUFFIX)
	-[ -n "$(RANLIB)" ] && $(RANLIB) $@

documentation: force
	[ ! -d doc ] && mkdir doc
	(if [ -d doc ]; then cd doc; $(MAKE) $(MFLAGS); fi)

force:

# The rule for 'includes' is written funny so that the if statement
# always returns TRUE unless there really was an error installing the
# include files.
install: installdirs libreadline.$(A_SUFFIX)
	${INSTALL_DATA} readline.h keymaps.h chardefs.h history.h \
		$(incdir)/readline
	-${MV} $(libdir)/libreadline.$(A_SUFFIX) $(libdir)/libreadline.old
	${INSTALL_DATA} libreadline.$(A_SUFFIX) $(bindir)/libreadline.$(A_SUFFIX)
	-[ -n "$(RANLIB)" ] && $(RANLIB) -t $(bindir)/libreadline.$(A_SUFFIX)

installdirs:
	[ ! -d $(incdir)/readline ] && { \
	  mkdir $(incdir)/readline && chmod chmod 755 $(incdir)/readline; }

uninstall:
	cd $(incdir)/readline && ${RM} -f ${INSTALLED_HEADERS}
	cd $(libdir) && ${RM} -f libreadline.$(A_SUFFIX) libreadline.old

tags:	force
	etags $(CSOURCES) $(HSOURCES)

#TAGS:	force
#	ctags -x $(CSOURCES) $(HSOURCES) > $@

readline: readline.h rldefs.h chardefs.h
readline: $(OBJECTS)
	$(CC) $(CFLAGS) $(CPPFLAGS) $(INCFLAGS) $(READLINE_DEFINES) \
	  $(LOCAL_INCLUDES) -DTEST -o readline readline.c vi_mode.$(O_SUFFIX) funmap.$(O_SUFFIX) \
	  keymaps.$(O_SUFFIX) -ltermcap

clean:
	$(RM) -f $(OBJECTS) libreadline.$(A_SUFFIX) libhistory.$(A_SUFFIX)
	(if [ -d doc ]; then cd doc; $(MAKE) $(MFLAGS) $@; fi)

maintainer-clean realclean distclean mostlyclean: clean
	(if [ -d doc ]; then cd doc; $(MAKE) $(MFLAGS) $@; fi)

# Dependencies
readline.$(O_SUFFIX): readline.c readline.h rldefs.h rlconf.h chardefs.h
readline.$(O_SUFFIX): keymaps.h history.h
vi_mode.$(O_SUFFIX):  rldefs.h rlconf.h readline.h history.h
funmap.$(O_SUFFIX):   funmap.c readline.h rlconf.h
keymaps.$(O_SUFFIX):  keymaps.c emacs_keymap.c vi_keymap.c keymaps.h chardefs.h rlconf.h
history.$(O_SUFFIX): history.h memalloc.h
isearch.$(O_SUFFIX): memalloc.h readline.h history.h
search.$(O_SUFFIX): memalloc.h readline.h history.h
display.$(O_SUFFIX): readline.h history.h rldefs.h rlconf.h
complete.$(O_SUFFIX): readline.h rldefs.h rlconf.h
rltty.$(O_SUFFIX): rldefs.h rlconf.h readline.h
bind.$(O_SUFFIX): rldefs.h rlconf.h readline.h history.h
signals.$(O_SUFFIX): rldefs.h rlconf.h readline.h history.h
parens.$(O_SUFFIX): readline.h
