# Makefile for library files used by GNU CVS.
# Do not use this makefile directly, but only from `../Makefile'.
# Copyright (C) 1986, 1988-1994 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

srcdir     = @srcdir@
top_srcdir = @top_srcdir@
cvs_srcdir = @top_srcdir@/src
VPATH      = @srcdir@

SHELL = /bin/sh

prefix = @prefix@
exec_prefix = @exec_prefix@

SOURCES = \
	argmatch.c \
	dup2.c \
	fncase.c \
	fnmatch.c \
	ftruncate.c \
	getdate.c \
	getdate.y \
	getline.c \
	getopt.c \
	getopt1.c \
	hostname.c \
	md5.c \
	memmove.c \
	mkdir.c \
	regex.c \
	rename.c \
	savecwd.c \
	sighandle.c \
	strstr.c \
	strerror.c \
	stripslash.c \
	strtoul.c \
	valloc.c \
	waitpid.c \
	xgetwd.c \
	yesno.c \
	$(CVSGUI_SOURCES)

CVSGUI_SOURCES = cvsgui_wire.cpp cvsgui_process.cpp cvsgui.c
CVSGUI_HEADERS = cvsgui_wire.h cvsgui_process.h cvsgui_protocol.h cvsgui.h
cvsgui.c : $(top_srcdir)/../common/cvsgui.c $(CVSGUI_HEADERS)
	rm -f $@
	ln -s $(top_srcdir)/../common/cvsgui.c $@

cvsgui.h : $(top_srcdir)/../common/cvsgui.h
	rm -f $@
	ln -s $(top_srcdir)/../common/cvsgui.h $@

cvsgui_wire.cpp : $(top_srcdir)/../common/cvsgui_wire.cpp $(CVSGUI_HEADERS)
	rm -f $@
	ln -s $(top_srcdir)/../common/cvsgui_wire.cpp $@

cvsgui_wire.h : $(top_srcdir)/../common/cvsgui_wire.h
	rm -f $@
	ln -s $(top_srcdir)/../common/cvsgui_wire.h $@

cvsgui_process.cpp : $(top_srcdir)/../common/cvsgui_process.cpp $(CVSGUI_HEADERS)
	rm -f $@
	ln -s $(top_srcdir)/../common/cvsgui_process.cpp $@

cvsgui_process.h : $(top_srcdir)/../common/cvsgui_process.h
	rm -f $@
	ln -s $(top_srcdir)/../common/cvsgui_process.h $@

cvsgui_protocol.h : $(top_srcdir)/../common/cvsgui_protocol.h
	rm -f $@
	ln -s $(top_srcdir)/../common/cvsgui_protocol.h $@

cvsgui.c : $(CVSGUI_HEADERS)

HEADERS = getline.h getopt.h fnmatch.h regex.h system.h wait.h md5.h savecwd.h $(CVSGUI_HEADERS)

# Always use CVS's regular expression matcher regex.o, because of
# variations in regular expression syntax - we want to be the same
# across systems and (probably) compared with old versions of CVS too.
#
# On a more mundane/detail level, having regex.h match regex.c can be
# an issue if we aren't careful.
#
# Also should look into unifying regular expression matching in CVS
# with the diff library (perhaps to have the caller, CVS, do the
# matching?)

OBJECTS = \
    @LIBOBJS@ \
    argmatch.o \
    getline.o \
    getopt.o \
    getopt1.o \
    md5.o \
    regex.o \
    savecwd.o \
    sighandle.o \
    stripslash.o \
    xgetwd.o \
    yesno.o \
    getdate.o \
    cvsgui.o \
    cvsgui_process.o \
    cvsgui_wire.o

DISTFILES = \
	.cvsignore ChangeLog ChangeLog.fsf Makefile.in \
	${SOURCES} ${HEADERS} build_lib.com

DEFS = @DEFS@
RANLIB = @RANLIB@

CC       = @CC@
CXX      = @CXX@
CFLAGS = @CFLAGS@
CPPFLAGS=

YACC = @YACC@

.c.o:
	$(CC) $(CPPFLAGS) -I.. -I$(srcdir) -I$(cvs_srcdir) \
              $(DEFS) $(CFLAGS) -c $<

.cpp.o:
	$(CXX) $(CPPFLAGS) -I.. -I$(srcdir) -I$(cvs_srcdir) \
              $(DEFS) $(CFLAGS) -c $<

.SUFFIXES:
.SUFFIXES: .c .cpp .o .obj

all: libcvs.a
.PHONY: all

install: all
.PHONY: install

installdirs:
.PHONY: installdirs

tags: $(DISTFILES)
	ctags `for i in $(DISTFILES); do echo $(srcdir)/$$i; done`

TAGS: $(DISTFILES)
	etags `for i in $(DISTFILES); do echo $(srcdir)/$$i; done`

ls:
	@echo $(DISTFILES)
.PHONY: ls

clean:
	rm -f *.a *.o
.PHONY: clean

distclean: clean
	rm -f tags TAGS Makefile $(CVSGUI_HEADERS) $(CVSGUI_SOURCES)
.PHONY: distclean

realclean: distclean
	rm -f *.tab.c getdate.c
.PHONY: realclean

dist-dir:
	mkdir ${DISTDIR}
	for i in ${DISTFILES}; do \
	  ln $(srcdir)/$${i} ${DISTDIR}; \
	done
.PHONY: dist-dir

libcvs.a: $(OBJECTS)
	$(AR) cr $@ $(OBJECTS)
	-$(RANLIB) $@

getdate.c: getdate.y
	@echo expect 10 shift/reduce conflicts
	$(YACC) $(srcdir)/getdate.y
	-@if test -f y.tab.c; then \
	   mv y.tab.c getdate.c ;\
	else \
	   if test -f getdate.tab.c ; then \
	       mv getdate.tab.c getdate.c ; \
	   else \
	       echo '*** Unable to create getdate.c' ;\
	   fi ;\
	fi

fnmatch.o: fnmatch.h
getopt1.o: getopt.h
regex.o: regex.h
md5.o: md5.h
argmatch.o: cvsgui.h

xlint:
	@echo xlint does nothing

subdir = lib
Makefile: ../config.status Makefile.in
	cd .. && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status

#../config.status: ../configure
#	cd .. ; $(SHELL) config.status --recheck

#../configure: ../configure.in
#	cd $(top_srcdir) ; autoconf
