# 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 -Wwrite-strings -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

# Create preprocessor output files--GCC specific!
%.i : %.c
	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) -E -dD -o $@ $<

# 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.  ##
## ---------------- ##
RSYNC = rsync -Lrtvz
WGET = wget --passive-ftp -np -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 -f $(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-check-certificate
po_repo = http://translationproject.org/latest/$(PACKAGE)
po_sync = translationproject.org::tp/latest/$(PACKAGE)/

.PHONY: do-po-update po-update
do-po-update:
	tmppo="/tmp/po-$(PACKAGE)-$(VERSION).$$$$" \
	  && rm -rf "$$tmppo" \
	  && mkdir "$$tmppo" \
	  && $(RSYNC) $(po_sync)  "$$tmppo" \
	  && 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

# Trick GNU make so it doesn't run the submake as a recursive make.
NR_MAKE = $(MAKE)

# Check builds both with build.sh and with make
checkcfg.%: distdir
	@echo "Building $@ (output in checkcfg.$*.log)"
	@exec >'checkcfg.$*.log' 2>&1; \
	   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


## --------------- ##
## 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 }' `find . -name '*.[ch]'` | sed 's,^\./,,' | sort > $@-2; \
	  diff -u $@-1 $@-2 || exit 1; \
	  rm -f $@-1 $@-2; \
	fi


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

.PHONY: update-makeweb 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 | grep -v '^M ' \
	    && 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-%=%)" $^


# Rebuild Makefile.in if this file is modifed.
Makefile.in: maintMakefile

# Copyright (C) 1997-2016 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/>.
