# Maintainer-only makefile segment.  This contains things that are relevant
# only if you have the full copy of the GNU make sources from the CVS
# tree, not a dist copy.
#

# Find the glob source files... this might be dangerous, but we're maintainers!
#
globsrc := $(wildcard glob/*.c)
globhdr := $(wildcard glob/*.h)

TEMPLATES = README README.DOS config.ami configh.dos config.h.W32 config.h-vms
MTEMPLATES = Makefile.DOS SMakefile

# We need this to ensure that README and build.sh.in are created on time to
# avoid errors by automake.
#
#Makefile.in: README build.sh.in

# General rule for turning a .template into a regular file.
#
$(TEMPLATES) : % : %.template Makefile
	rm -f $@
	sed -e 's@%VERSION%@$(VERSION)@g' \
	    -e 's@%PACKAGE%@$(PACKAGE)@g' \
	  $< > $@
	chmod a-w $@

# Construct Makefiles by adding on dependencies, etc.
#
$(MTEMPLATES) : % : %.template .dep_segment Makefile
	rm -f $@
	sed -e 's@%VERSION%@$(VERSION)@g' \
	    -e 's@%PROGRAMS%@$(bin_PROGRAMS)@g' \
	    -e 's@%SOURCES%@$(filter-out remote-%,$(make_SOURCES)) remote-$$(REMOTE).c@g' \
	    -e 's@%OBJECTS%@$(filter-out remote-%,$(make_OBJECTS)) remote-$$(REMOTE).o@g' \
	    -e 's@%GLOB_SOURCES%@$(globsrc) $(globhdr)@g' \
	    -e 's@%GLOB_OBJECTS%@$(globsrc:glob/%.c=%.o)@g' \
	  $< > $@
	echo >>$@; echo '# --------------- DEPENDENCIES' >>$@; echo '#' >>$@; \
	  cat $(word 2,$^) >>$@
	chmod a-w $@

NMakefile: NMakefile.template .dep_segment Makefile
	rm -f $@
	cp $< $@
	echo >>$@; echo '# --------------- DEPENDENCIES' >>$@; echo '#' >>$@; \
	  sed 's/^\([^ ]*\)\.o:/$$(OUTDIR)\/\1.obj:/' $(word 2,$^) >>$@
	chmod a-w $@

# Construct build.sh.in
#
build.sh.in: build.template Makefile
	rm -f $@
	sed -e 's@%objs%@$(filter-out remote-%, $(make_OBJECTS)@g' \
	    -e 's@%globobjs%@$(patsubst %.c,%.o,$(globsrc)))@g' \
	  $< > $@
	chmod a-w+x $@

# Use automake to build a dependency list file, for "foreign" makefiles like
# Makefile.DOS.
#
.dep_segment: Makefile.am maintMakefile $(DEP_FILES)
	$(AUTOMAKE) --generate-deps --build-dir=. --srcdir-name=.

# We clean everything here.  The GNU standards for makefile conventions say
# you shouldn't remove configure, etc., but this makefile is only available
# in a full development distribution, so they'll only be removed then.
#
# And _I_ want them to be removed ;)
#
maintFILES = configure aclocal.m4 config.h.in Makefile.in stamp-h.in

MAINTAINERCLEANFILES =  $(maintFILES) $(TEMPLATES) $(MTEMPLATES) NMakefile \
			missing build.sh.in .dep_segment

# Put the alpha distribution files up for anonymous FTP.
#
ALPHA	:= ~ftp/gnu
TARFILE	:= $(distdir).tar.gz

.PHONY: alpha
alpha: $(ALPHA) $(TARFILE)
	@rm -f $(ALPHA)/$(TARFILE)
	cp -p $(TARFILE) $(ALPHA)

# This is needed because normal builds with GCC don't compile alloca.c, so
# alloca.P doesn't get built :-/.
#
.deps/alloca.P: alloca.c
	$(COMPILE) -M -o $@ $<
