# 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

# Fuchsia-specific flags. getopt.c has some constructs that gcc-6.2.0
# doesn't care for.
AM_CFLAGS += -Wno-unused-parameter -Wno-parentheses

# 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/>.
