#
# Makefile for Src subdirectory
#
# Copyright (c) 1995-1997 Richard Coleman
# All rights reserved.
#
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and to distribute modified versions of this software for any
# purpose, provided that the above copyright notice and the following
# two paragraphs appear in all copies of this software.
#
# In no event shall Richard Coleman or the Zsh Development Group be liable
# to any party for direct, indirect, special, incidental, or consequential
# damages arising out of the use of this software and its documentation,
# even if Richard Coleman and the Zsh Development Group have been advised of
# the possibility of such damage.
#
# Richard Coleman and the Zsh Development Group specifically disclaim any
# warranties, including, but not limited to, the implied warranties of
# merchantability and fitness for a particular purpose.  The software
# provided hereunder is on an "as is" basis, and Richard Coleman and the
# Zsh Development Group have no obligation to provide maintenance,
# support, updates, enhancements, or modifications.
#

subdir = Src
dir_top = ..
SUBDIRS =

@@version.mk@@
@@defs.mk@@

sdir_src      = $(sdir)
dir_src       = .

# ========= DEPENDENCIES FOR BUILDING ==========

LINK        = $(CC) $(LDFLAGS) $(EXELDFLAGS) $(EXTRA_LDFLAGS) -o $@
DLLINK      = $(DLLD) $(LDFLAGS) $(LIBLDFLAGS) $(DLLDFLAGS) -o $@

all: bin modules

bin: zsh

modules: headers

MAIN_OBJS = main.o

LSTMP =
LLIST =
NSTMP = stamp-modobjs
NLIST = `cat stamp-modobjs`

LIBZSH = libzsh-$(VERSION).$(DL_EXT)
NIBZSH =

LDRUNPATH = LD_RUN_PATH=$(libdir)/zsh
NDRUNPATH =

zsh: $(@L@IBZSH) $(@L@STMP) $(MAIN_OBJS)
	rm -f $@
	$(@L@DRUNPATH) $(LINK) $(MAIN_OBJS) $(@L@LIST) $(@L@IBZSH) $(LIBS)

$(LIBZSH): $(LIBOBJS) $(NSTMP)
	rm -f $@
	$(DLLINK) $(LIBOBJS) $(NLIST)

stamp-modobjs: modobjs
	@if cmp -s stamp-modobjs.tmp stamp-modobjs; then \
	    rm -f stamp-modobjs.tmp; \
	    echo "\`stamp-modobjs' is up to date."; \
	else \
	    mv -f stamp-modobjs.tmp stamp-modobjs; \
	    echo "Updated \`stamp-modobjs'."; \
	fi

modobjs: headers rm-modobjs-tmp

rm-modobjs-tmp:
	rm -f stamp-modobjs.tmp

Makemod modules.index prep: modules-bltin
	( cd $(sdir_top) && $(SHELL) $(subdir)/mkmodindex.sh $(subdir) ) \
	    > modules.index.tmp
	@if cmp -s modules.index.tmp modules.index; then \
	    rm -f modules.index.tmp; \
	    echo "\`modules.index' is up to date."; \
	else \
	    mv -f modules.index.tmp modules.index; \
	    echo "Updated \`modules.index'."; \
	fi
	@case $(sdir_top) in \
	    /*) top_srcdir=$(sdir_top) ;; \
	    *) top_srcdir=$(subdir)/$(sdir_top) ;; \
	esac; \
	export top_srcdir; \
	echo 'cd $(dir_top) && $(SHELL)' \
	    '$$top_srcdir/$(subdir)/mkmakemod.sh $(subdir) Makemod'; \
	cd $(dir_top) && \
	    $(SHELL) $$top_srcdir/$(subdir)/mkmakemod.sh $(subdir) Makemod
	@$(MAKE) -f Makemod $(MAKEDEFS) prep || rm -f Makemod

FORCE:

# ========== LINKING IN MODULES ==========

modules-bltin:
	if test @D@ = N; then \
	    cat $(sdir)/xmods.conf > $@; \
	elif test @RTLD_GLOBAL_OK@ != yes; then \
	    echo comp1 > $@; \
	else \
	    echo > $@; \
	fi

# ========== ANSI TO K&R CONVERSION ==========

ANSI_KNR = ansi2knr
ANSIKNR  =

Makemod: $(ANSI@U@KNR)

ansi2knr.o: ansi2knr.c
	$(CC) -c $(CPPFLAGS) $(CFLAGS) $(sdir)/ansi2knr.c

ansi2knr: ansi2knr.o
	rm -f $@
	$(CC) $(LDFLAGS) $(EXELDFLAGS) -o $@ ansi2knr.o

# ========== DEPENDENCIES FOR INSTALLING ==========

install: install.bin install.modules
uninstall: uninstall.bin uninstall.modules

install.bin: install.bin-here
uninstall.bin: uninstall.bin-here

# install binary, creating install directory if necessary
install.bin-here: zsh install.bin-@L@
	$(sdir_top)/mkinstalldirs $(bindir)
	$(INSTALL_PROGRAM) zsh $(bindir)/zsh-$(VERSION)
	if test -f $(bindir)/zsh; then \
	    rm -f $(bindir)/zsh.old; \
	    ln $(bindir)/zsh $(bindir)/zsh.old; \
	else :; fi
	rm -f $(bindir)/zsh.new
	ln $(bindir)/zsh-$(VERSION) $(bindir)/zsh.new
	mv $(bindir)/zsh.new $(bindir)/zsh

install.bin-N:
install.bin-L: $(LIBZSH)
	$(sdir_top)/mkinstalldirs $(libdir)/zsh
	$(INSTALL_PROGRAM) $(LIBZSH) $(libdir)/zsh/$(LIBZSH)

# uninstall binary
uninstall.bin-here: uninstall.bin-@L@
	rm -f $(bindir)/zsh-$(VERSION) $(bindir)/zsh

uninstall.bin-N:
uninstall.bin-L:
	rm -f $(libdir)/zsh/$(LIBZSH)

# ========== DEPENDENCIES FOR CLEANUP ==========

@@clean.mk@@

mostlyclean-here:
	rm -f stamp-modobjs stamp-modobjs.tmp

clean-here:
	rm -f modules.index.tmp modules.stamp zsh ansi2knr.o ansi2knr
	rm -f libzsh-*.$(DL_EXT)

distclean-here:
	rm -f TAGS tags
	rm -f modules.index modules-bltin Makefile

mostlyclean: mostlyclean-modules
clean: clean-modules
distclean: distclean-modules
realclean: realclean-modules

mostlyclean-modules clean-modules distclean-modules realclean-modules: Makemod
	@$(MAKE) -f Makemod $(MAKEDEFS) `echo $@ | sed 's/-modules//'`

# ========== RECURSIVE MAKES ==========

install.modules uninstall.modules \
modobjs modules headers proto $(MAIN_OBJS): Makemod
	@$(MAKE) -f Makemod $(MAKEDEFS) $@

# ========== DEPENDENCIES FOR MAINTENANCE ==========

@@config.mk@@
