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

BUGLIST := bug-make@gnu.org

# These are related to my personal setup.
GPG_FINGERPRINT := 6338B6D4

# SRCROOTDIR is just a handy location to keep source files in
SRCROOTDIR ?= $(HOME)/src

# Where the gnulib project has been locally cloned
GNULIBDIR ?= $(SRCROOTDIR)/gnulib

# Where to put the CVS checkout of the GNU web repository
GNUWEBDIR ?= $(SRCROOTDIR)/gnu-www

# Where to put the CVS checkout of the GNU make web repository
MAKEWEBDIR ?= $(SRCROOTDIR)/make/make-web

# We like mondo-warnings!
AM_CFLAGS += -Wall -Wextra -Wdeclaration-after-statement -Wshadow -Wpointer-arith -Wbad-function-cast

MAKE_MAINTAINER_MODE := -DMAKE_MAINTAINER_MODE
AM_CPPFLAGS += $(MAKE_MAINTAINER_MODE)

# I want this one but I have to wait for the const cleanup!
# -Wwrite-strings

# 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 README.W32 README.OS2 \
	    config.ami configh.dos config.h.W32 config.h-vms
MTEMPLATES = Makefile.DOS SMakefile

# These are built as a side-effect of the dist rule
#all-am: $(TEMPLATES) $(MTEMPLATES) 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%@$(patsubst %.o,%.$${OBJEXT},$(filter-out remote-%,$(make_OBJECTS)))@g' \
	    -e 's@%globobjs%@$(patsubst %.c,%.$${OBJEXT},$(globsrc))@g' \
	  $< > $@
	chmod a-w+x $@


# Use automake to build a dependency list file, for "foreign" makefiles like
# Makefile.DOS.
#
# Automake used to have a --generate-deps flag, but it's gone now, so we have
# to do it ourselves.
#
DEP_FILES := $(wildcard $(DEPDIR)/*.Po)
.dep_segment: Makefile.am maintMakefile $(DEP_FILES)
	rm -f $@
	(for f in $(DEPDIR)/*.Po; do \
	   echo ""; \
	   echo "# $$f"; \
	   sed	-e '/^[^:]*\.[ch] *:/d' \
		-e 's, /usr/[^ ]*,,g' \
		-e 's, $(srcdir)/, ,g' \
		-e '/^ *\\$$/d' \
		-e '/^ *$$/d' \
		< $$f; \
	 done) > $@

# Cleaning

GIT :=	git

# git-clean:      Clean all "ignored" files.  Leave untracked files.
# git-very-clean: Clean all files that aren't stored in source control.

.PHONY: git-clean git-very-clean
git-clean:
	-$(GIT) clean -fdX
git-very-clean: git-clean
	-$(GIT) clean -fd



## ---------------------- ##
## Generating ChangeLog.  ##
## ---------------------- ##

gl2cl-date := 2013-10-10
gl2cl := $(GNULIBDIR)/build-aux/gitlog-to-changelog

# Rebuild the changelog whenever a new commit is added
ChangeLog: .check-git-HEAD
	if test -f '$(gl2cl)'; then \
	    '$(gl2cl)' --since='$(gl2cl-date)' > '$@'; \
	else \
	    echo "WARNING: $(gl2cl) is not available.  No $@ generated."; \
	fi

.PHONY: .check-git-HEAD
.check-git-HEAD:
	sha="`git rev-parse HEAD`"; \
	[ -f '$@' ] && [ "`cat '$@' 2>/dev/null`" = "$$sha" ] \
	    || echo "$$sha" > '$@'


## ---------------- ##
## Updating files.  ##
## ---------------- ##

WGET = wget --passive-ftp -nv
ftp-gnu = ftp://ftp.gnu.org/gnu

move_if_change =  if test -r $(target) && cmp -s $(target).t $(target); then \
		    echo $(target) is unchanged; rm -f $(target).t; \
		  else \
		    mv $(target).t $(target); \
		  fi

# ------------------- #
# Updating PO files.  #
# ------------------- #

# PO archive mirrors --- Be careful; some might not be fully populated!
#   ftp://ftp.unex.es/pub/gnu-i18n/po/maint/
#   http://translation.sf.net/maint/
#   ftp://tiger.informatik.hu-berlin.de/pub/po/maint/

po_wget_flags =	--recursive --level=1 --no-directories --no-parent \
		--no-check-certificate
po_repo = http://translationproject.org/latest/$(PACKAGE)
.PHONY: do-po-update po-update
do-po-update:
	tmppo="/tmp/po-$(PACKAGE)-$(VERSION).$$$$" \
	  && rm -rf "$$tmppo" \
	  && mkdir "$$tmppo" \
	  && (cd "$$tmppo" \
		&& $(WGET) $(po_wget_flags) -A '*.po' $(po_repo)) \
	  && cp "$$tmppo"/*.po $(top_srcdir)/po && rm -rf "$$tmppo"
	cd po && $(MAKE) update-po
	$(MAKE) po-check

po-update:
	[ -d "po" ] && $(MAKE) do-po-update

# -------------------------- #
# Updating GNU build files.  #
# -------------------------- #

# The following pseudo table associates a local directory and a URL
# with each of the files that belongs to some other package and is
# regularly updated from the specified URL.

cvs-url = http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~
git-url = http://git.savannah.gnu.org/cgit
target = $(patsubst get-%,%,$@)

config-url = $(git-url)/config.git/plain/$(patsubst get-config/%,%,$@)
get-config/config.guess get-config/config.sub:
	@echo $(WGET) $(config-url) -O $(target) \
	  && $(WGET) $(config-url) -O $(target).t \
	  && $(move_if_change)

gnulib-url = $(git-url)/gnulib.git/plain/build-aux/$(patsubst get-config/%,%,$@)
get-config/texinfo.tex:
	@echo $(WGET) $(gnulib-url) -O $(target) \
	  && $(WGET) $(gnulib-url) -O $(target).t \
	  && $(move_if_change)

gnustandards-url = $(cvs-url)/gnustandards/gnustandards/$(patsubst get-doc/%,%,$@)
get-doc/make-stds.texi get-doc/fdl.texi:
	@echo $(WGET) $(gnustandards-url) -O $(target) \
	  && $(WGET) $(gnustandards-url) -O $(target).t \
	  && $(move_if_change)

.PHONY: scm-update
scm-update: get-config/texinfo.tex get-config/config.guess get-config/config.sub get-doc/make-stds.texi get-doc/fdl.texi


# --------------------- #
# Updating everything.  #
# --------------------- #

.PHONY: update
update: po-update scm-update


# ---------------------------------- #
# Alternative configuration checks.  #
# ---------------------------------- #

.PHONY: check-alt-config
check-alt-config: \
	checkcfg.--disable-job-server \
	checkcfg.--disable-load \
	checkcfg.--without-guile \
	checkcfg.CPPFLAGS^-DNO_OUTPUT_SYNC \
	checkcfg.CPPFLAGS^-DNO_ARCHIVES

NR_MAKE = $(MAKE)

# Check builds both with build.sh and with make
checkcfg.%: distdir
	@( rm -rf $(distdir)/_build \
	&& mkdir $(distdir)/_build \
	&& cd $(distdir)/_build \
	&& echo "Testing configure with $(subst ^,=,$*)" \
	&& ../configure --srcdir=.. $(subst ^,=,$*) \
		$(AM_DISTCHECK_CONFIGURE_FLAGS) $(DISTCHECK_CONFIGURE_FLAGS) \
		CFLAGS='$(AM_CFLAGS)' \
	&& ./build.sh \
	&& ./make $(AM_MAKEFLAGS) check \
	&& rm -f *.o make \
	&& $(NR_MAKE) $(AM_MAKEFLAGS) \
	&& ./make $(AM_MAKEFLAGS) check ) 2>&1 | tee checkcfg.$*.log


## --------------- ##
## Sanity checks.  ##
## --------------- ##

# Before we build a distribution be sure we run our local checks
#distdir: local-check

.PHONY: local-check po-check changelog-check

# Checks that don't require Git.  Run 'changelog-check' last as
# previous test may reveal problems requiring new ChangeLog entries.
local-check: po-check changelog-check

# copyright-check writable-files

changelog-check:
	if head $(top_srcdir)/ChangeLog | grep 'Version $(VERSION)' >/dev/null; then \
	  :; \
	else \
	  echo "$(VERSION) not in ChangeLog" 1>&2; \
	  exit 1; \
	fi

# Verify that all source files using _() are listed in po/POTFILES.in.
# Ignore makeint.h; it defines _().
po-check:
	if test -f po/POTFILES.in; then \
	  grep '^[^#]' po/POTFILES.in | sort > $@-1; \
	  $(PERL) -wn -e 'if (/\b_\(/) { $$ARGV eq "makeint.h" || print "$$ARGV\n" and close ARGV }' *.c *.h | sort > $@-2; \
	  diff -u $@-1 $@-2 || exit 1; \
	  rm -f $@-1 $@-2; \
	fi


## --------------- ##
## Generate docs.  ##
## --------------- ##

.PHONY: update-www gendocs

CVS = cvs

makeweb-repo = $(USER)@cvs.sv.gnu.org:/web/make
gnuweb-repo = :pserver:anonymous@cvs.sv.gnu.org:/web/www
gnuweb-dir = www/server/standards

# Get the GNU make web page boilerplate etc.
update-makeweb:
	[ -d '$(MAKEWEBDIR)' ] || mkdir -p '$(MAKEWEBDIR)'
	[ -d '$(MAKEWEBDIR)'/CVS ] \
	    && { cd '$(MAKEWEBDIR)' && $(CVS) update; } \
	    || { mkdir -p '$(dir $(MAKEWEBDIR))' && cd '$(dir $(MAKEWEBDIR))' \
		 && $(CVS) -d $(makeweb-repo) co -d '$(notdir $(MAKEWEBDIR))' make; }

# Get the GNU web page boilerplate etc.
update-gnuweb:
	[ -d '$(GNUWEBDIR)' ] || mkdir -p '$(GNUWEBDIR)'
	[ -d '$(GNUWEBDIR)/$(gnuweb-dir)'/CVS ] \
	    && { cd '$(GNUWEBDIR)/$(gnuweb-dir)' && $(CVS) update; } \
	    || { cd '$(GNUWEBDIR)' && $(CVS) -d $(gnuweb-repo) co '$(gnuweb-dir)'; }

gendocs: update-gnuweb update-makeweb
	cp $(GNULIBDIR)/doc/gendocs_template doc
	cd doc \
	  && rm -rf doc/manual \
	  && $(GNULIBDIR)/build-aux/gendocs.sh --email '$(BUGLIST)' \
		make 'GNU Make Manual'
	find '$(MAKEWEBDIR)'/manual \( -name CVS -prune \) -o \( -name '[!.]*' -type f -exec rm -f '{}' \; \)
	cp -r doc/manual '$(MAKEWEBDIR)'
	@echo 'Status of $(MAKEWEBDIR) repo:' && cd '$(MAKEWEBDIR)' \
	    && cvs -q -n update \
	    && echo '- cvs add <new files>' \
	    && echo '- cvs remove <deleted files>' \
	    && echo '- cvs commit' \
	    && echo '- cvs tag make-$(subst .,-,$(VERSION))'

## ------------------------- ##
## Make release targets.     ##
## ------------------------- ##

.PHONY: tag-release
tag-release:
	case '$(VERSION)' in \
	    (*.*.9*) message=" candidate" ;; \
	    (*)      message= ;; \
	esac; \
	$(GIT) tag -m "GNU Make release$$message $(VERSION)" -u '$(GPG_FINGERPRINT)' '$(VERSION)'

## ------------------------- ##
## GNU FTP upload artifacts. ##
## ------------------------- ##

# This target creates the upload artifacts.
# Sign it with my key.  If you don't have my key/passphrase then sorry,
# you're SOL! :)

GPG = gpg
GPGFLAGS = -u $(GPG_FINGERPRINT)

DIST_ARCHIVES_SIG = $(addsuffix .sig,$(DIST_ARCHIVES))
DIST_ARCHIVES_DIRECTIVE = $(addsuffix .directive.asc,$(DIST_ARCHIVES))

# A simple rule to test signing, etc.
.PHONY: distsign
distsign: $(DIST_ARCHIVES_SIG) $(DIST_ARCHIVES_DIRECTIVE)

%.sig : %
	@echo "Signing file '$<':"
	$(GPG) $(GPGFLAGS) -o "$@" -b "$<"

%.directive.asc: %
	@echo "Creating directive file '$@':"
	@( \
	   echo 'version: 1.1'; \
	   echo 'directory: make'; \
	   echo 'filename: $*'; \
	   echo 'comment: Official upload of GNU make version $(VERSION)'; \
	 ) > "$*.directive"
	$(GPG) $(GPGFLAGS) -o "$@" --clearsign "$*.directive"
	@rm -f "$*.directive"

# Upload the artifacts

FTPPUT = ncftpput
gnu-upload-host = ftp-upload.gnu.org
gnu-upload-dir  = /incoming


UPLOADS = upload-alpha upload-ftp
.PHONY: $(UPLOADS)
$(UPLOADS): $(DIST_ARCHIVES) $(DIST_ARCHIVES_SIG) $(DIST_ARCHIVES_DIRECTIVE)
	$(FTPPUT) "$(gnu-upload-host)" "$(gnu-upload-dir)/$(@:upload-%=%)" $^


# Copyright (C) 1997-2013 Free Software Foundation, Inc.
# This file is part of GNU Make.
#
# GNU Make 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 3 of the License, or (at your option) any later
# version.
#
# GNU Make 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.
#
# You should have received a copy of the GNU General Public License along with
# this program.  If not, see <http://www.gnu.org/licenses/>.
