# 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_KEYID := 80CB727A20C79BB2

# 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 -Werror -Wwrite-strings -Wshadow -Wpointer-arith \
	-Wdeclaration-after-statement -Wbad-function-cast -Wformat-security \
	-Wtype-limits -Wunused-but-set-parameter -Wlogical-op \
	-Wignored-qualifiers -Wformat-signedness -Wduplicated-cond

# Unfortunately the Guile headers are sometimes broken.  Convince GCC
# to treat them as system headers so warnings are ignored.
GUILE_CFLAGS := $(patsubst -I%,-isystem %,$(GUILE_CFLAGS))

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))'


## --------------------------------------------- ##
## Submitting Coverity cov-build results to Scan ##
## --------------------------------------------- ##

# Note you must have set COVERITY_TOKEN and COVERITY_EMAIL properly
# to submit results.  COVERITY_PATH can be set to the root of the
# cov-build tools if it's not already on your PATH.

COV_BUILD_FILE := cov-build.tgz

.PHONY: cov-build cov-submit

cov-build: $(COV_BUILD_FILE)

$(COV_BUILD_FILE): $(filter %.c %.h,$(DISTFILES))
	$(MAKE) distdir
	@echo "Running Coverity cov-build"
	rm -rf '$(distdir)'/_build
	mkdir '$(distdir)'/_build
	cd '$(distdir)'/_build \
	    && ../configure --srcdir=.. \
		$(AM_DISTCHECK_CONFIGURE_FLAGS) $(DISTCHECK_CONFIGURE_FLAGS) \
		CFLAGS='$(AM_CFLAGS)'
	PATH="$${COVERITY_PATH:+$$COVERITY_PATH/bin:}$$PATH"; \
	    cd '$(distdir)'/_build \
		&& cov-build --dir cov-int ./build.sh
	rm -f '$@'
	(cd '$(distdir)'/_build && tar czf - cov-int) > '$@'

cov-submit: $(COV_BUILD_FILE)-submitted

$(COV_BUILD_FILE)-submitted: $(COV_BUILD_FILE)
	@[ -n "$(COVERITY_TOKEN)" ] || { echo 'COVERITY_TOKEN not set'; exit 1; }
	@[ -n "$(COVERITY_EMAIL)" ] || { echo 'COVERITY_EMAIL not set'; exit 1; }
	rm -f '$@'
	case '$(VERSION)' in \
	    (*.*.9*) type="daily build"; ext=".$$(date +%Y%m%d)" ;; \
	    (*)      type="release"; ext= ;; \
	esac; \
	curl --form token='$(COVERITY_TOKEN)' \
	     --form email='$(COVERITY_EMAIL)' \
	     --form file='@$<' \
	     --form version="$(VERSION)$$ext" \
	     --form description="GNU make $$type" \
	     'https://scan.coverity.com/builds?project=gmake'
	cp '$<' '$@'


## ------------------------- ##
## 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_KEYID)' '$(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_KEYID)

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 signed directive file '$@':"
	@( \
	   echo 'version: 1.2'; \
	   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/>.
