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

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

.PHONY: update
update:

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

# Enable Perl warnings for the test suite
PERLFLAGS := -w

# We like mondo-warnings!
# Also force comments to be preserved.  This helps when using ccache, in
# combination with GCC 7's implicit-fallthrough warning.
MAKE_CFLAGS := -C -Wall -Wextra -Werror -Wwrite-strings -Wshadow \
	-Wdeclaration-after-statement -Wbad-function-cast -Wformat-security \
	-Wtype-limits -Wunused-but-set-parameter -Wlogical-op -Wpointer-arith \
	-Wignored-qualifiers -Wformat-signedness -Wduplicated-cond

AM_CFLAGS += $(MAKE_CFLAGS)

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

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

# Create the mkconfig.h file for non-POSIX config headers

all: src/mkconfig.h
src/mkconfig.h: src/mkconfig.h.in config.status
	./config.status --header=$@

# Build the README

all: README
README : README.in config.status
	./config.status --file=$@

# Construct Makefiles by adding on dependencies, etc.
#
cvt = $(patsubst $1/%,$$($1)%,$(filter %.c,$2))
Basic.mk: Basic.mk.template .dep_segment Makefile
	rm -f $@
	sed -e 's@%make_SOURCES%@$(call cvt,src,$(make_SRCS))@g' \
	    -e 's@%w32_SOURCES%@$(call cvt,src,$(w32_SRCS))@g' \
	    -e 's@%vms_SOURCES%@$(call cvt,src,$(vms_SRCS))@g' \
	    -e 's@%loadavg_SOURCES%@$(call cvt,lib,$(loadavg_SRCS))@g' \
	    -e 's@%alloca_SOURCES%@$(call cvt,lib,$(alloca_SRCS))@g' \
	    -e 's@%glob_SOURCES%@$(call cvt,lib,$(glob_SRCS))@g' \
	  $< > $@
	echo >>$@; echo '# --------------- DEPENDENCIES' >>$@; echo '#' >>$@; \
	echo >>$@; echo '$$(OBJECTS): $$(SRCDIR)/src/mkconfig.h' >>$@; \
	sed -e 's@^\([^ ]*\)\.o:@$$(OUTDIR)\1.$$(OBJEXT):@' \
	    -e 's@\([^ ]*\.[ch]\)@$$(SRCDIR)/\1@g' \
	    -e 's@$$(SRCDIR)/src/config.h@$$(OUTDIR)src/config.h@g' \
	    -e 's@$$(SRCDIR)/lib/alloca.h@@g' \
	    -e 's@$$(SRCDIR)/lib/stdbool.h@@g' \
	  $(word 2,$^) >>$@
	chmod a-w $@


# Use automake to build a dependency list file, for Makebase.mk.
#
# Automake used to have a --generate-deps flag but it's gone now, so we have
# to do it ourselves.
#
DEP_FILES := $(wildcard src/$(DEPDIR)/*.Po)
.dep_segment: Makefile.am maintMakefile $(DEP_FILES)
	rm -f $@
	(for f in src/$(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 -fdx


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

# Where the gnulib project has been locally cloned
GNULIBDIR ?= $(or $(wildcard $(GNULIB_SRCDIR)),./gnulib)

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

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

.PHONY: FORCE
FORCE:;@:

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

# NOTE: This is handled by the bootstrap script now

#update: po-update
update: po-check

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

po_wget_flags = --recursive --level=1 --no-directories --no-check-certificate
po_repo = https://translationproject.org/latest/$(PACKAGE)
po_sync = translationproject.org::tp/latest/$(PACKAGE)/

.PHONY: do-po-update po-update
do-po-update:
	tmppo="/tmp/po-$(PACKAGE)-$(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:
	test -d "po" && $(MAKE) do-po-update

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

# Note: this is handled by the bootstrap script now
#update: scm-update

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

# 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 = https://savannah.gnu.org/cgi-bin/viewcvs/~checkout~
git-url = https://git.savannah.gnu.org/cgit
target = $(patsubst get-%,%,$@)

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

gnulib-url = $(git-url)/gnulib.git/plain/build-aux/$(patsubst get-build-aux/%,%,$@)
get-build-aux/texinfo.tex:
	@echo Retrieving $(target) from $(gnulib-url)
	$(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 Retrieving $(target) from $(gnustandards-url)
	$(WGET) $(gnustandards-url) -O $(target).t \
	  && $(move_if_change)


# ---------------------------- #
# Extra configuration checks.  #
# ---------------------------- #

# Make the dist file contents more regular, if we're using GNU tar.
# Suggested by Tzvetelin Katchov <katchov@gnu.org>

export TAR_OPTIONS := --mode=u+w,go-w --owner=0 --group=0 --numeric-owner --sort=name

# When I released 4.3 somehow the INSTALL file was missing.
# When I tried to build it again, it was there.  I have no idea what happened
# but add a new check to be sure it doesn't happen again.
mk_dist_files = AUTHORS ChangeLog COPYING INSTALL README src/mkconfig.h

dist: mk-dist mk-distcheck

.PHONY: mk-distcheck
mk-distcheck: distdir
	@echo "Checking for extra installed files..."
	@for fn in $(mk_dist_files); do \
	    test -f '$(distdir)'/"$$fn" \
		|| { echo "Missing dist file: $$fn"; exit 1; }; \
	done; true

# Make sure that the files in lib/ have been updated from the files in gl/lib/

GL_LIB_FILES := $(wildcard gl/lib/*)

mk-dist:
	@echo "Checking gl/lib files..."
	@for fn in $(GL_LIB_FILES); do \
	    cmp $$fn $${fn##gl/} \
		|| { echo "Run ./bootstrap --gen ?"; exit 1; }; \
	done; true

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

CFGCHECK_CONFIGFLAGS =
CFGCHECK_BUILDFLAGS  =
# We can't use our mondo warnings as these are used to compile gnulib modules
# as well, and that will fail.
CFGCHECK_MAKEFLAGS   = # CFLAGS='$(AM_CFLAGS)'

# We don't support C90 anymore, strictly, but this test still works (with lots
# of warnings) and it helps us avoid egregious incompatibilities.
checkcfg.strict-c90:  CFGCHECK_CONFIGFLAGS = CFLAGS='-std=c90 -pedantic'
checkcfg.strict-c90:  CFGCHECK_MAKEFLAGS   =

checkcfg.job-pipe:    CFGCHECK_CONFIGFLAGS = CPPFLAGS=-DJOBSERVER_USE_FIFO=0
checkcfg.no-jobserver:CFGCHECK_CONFIGFLAGS = --disable-job-server
checkcfg.no-load:     CFGCHECK_CONFIGFLAGS = --disable-load
checkcfg.no-guile:    CFGCHECK_CONFIGFLAGS = --without-guile
checkcfg.no-spawn:    CFGCHECK_CONFIGFLAGS = --disable-posix-spawn
checkcfg.no-sysglob:  CFGCHECK_CONFIGFLAGS = make_cv_sys_gnu_glob=no
checkcfg.no-loadavg:  CFGCHECK_CONFIGFLAGS = ac_cv_func_getloadavg=no \
					     ac_cv_have_decl_getloadavg=no \
					     gl_cv_have_raw_decl_getloadavg=no \
					     ac_cv_lib_util_getloadavg=no \
					     ac_cv_lib_getloadavg_getloadavg=no
checkcfg.no-sync:     CFGCHECK_CONFIGFLAGS = CPPFLAGS=-DNO_OUTPUT_SYNC
checkcfg.no-archives: CFGCHECK_CONFIGFLAGS = CPPFLAGS=-DNO_ARCHIVES

CONFIG_CHECKS := \
	checkcfg.strict-c90 \
	checkcfg.job-pipe \
	checkcfg.no-jobserver \
	checkcfg.no-load \
	checkcfg.no-guile \
	checkcfg.no-spawn \
	checkcfg.no-sysglob \
	checkcfg.no-loadavg \
	checkcfg.no-sync \
	checkcfg.no-archives

.PHONY: check-alt-config
check-alt-config: $(CONFIG_CHECKS)
	@echo --- $@ SUCCESS

# 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
build.sh_SCRIPT = exec >>'checkcfg.$*.log' 2>&1; set -x; \
		cd $(distdir)/_build \
		&& OUTDIR=_bld ../build.sh -k $(CFGCHECK_BUILD_FLAGS) \
		&& _bld/make GMK_OUTDIR=../_bld $(AM_MAKEFLAGS) check-local \
		&& _bld/make GMK_OUTDIR=../_bld $(AM_MAKEFLAGS) clean

nrmake_SCRIPT = exec >>'checkcfg.$*.log' 2>&1; set -x; \
		cd $(distdir)/_build \
		&& $(NR_MAKE) $(AM_MAKEFLAGS) $(CFGCHECK_MAKEFLAGS) \
		&& ./make $(AM_MAKEFLAGS) check \
		&& ./make $(AM_MAKEFLAGS) clean

$(CONFIG_CHECKS): checkcfg.%: distdir
	@echo "Building $@ (output in checkcfg.$*.log)"
	exec >'checkcfg.$*.log' 2>&1; \
	   echo "Testing configure with $(CFGCHECK_CONFIGFLAGS)"; set -x; \
	   rm -rf $(distdir)/_build \
	&& mkdir $(distdir)/_build \
	&& cd $(distdir)/_build \
	&& ../configure --srcdir=.. $(CFGCHECK_CONFIGFLAGS) \
	       $(AM_DISTCHECK_CONFIGURE_FLAGS) $(DISTCHECK_CONFIGURE_FLAGS)
	$(build.sh_SCRIPT)
	$(nrmake_SCRIPT)

# Try using Basic.mk.  I can't test this on POSIX systems because it is only
# used for non-POSIX systems; POSIX systems can just use normal
# configure/Makefile.in etc.
checkcfg.basicmk: checkcfg.% : distdir
	@echo "Building $@ (output in checkcfg.$*.log)"
	exec >'checkcfg.$*.log' 2>&1; \
	   echo "Testing Basic.mk SRCDIR=.."; set -x; \
	   rm -rf $(distdir)/_build \
	&& mkdir $(distdir)/_build \
	&& cd $(distdir)/_build \
	&& ../configure --srcdir=.. \
	       $(AM_DISTCHECK_CONFIGURE_FLAGS) $(DISTCHECK_CONFIGURE_FLAGS)
	exec >>'checkcfg.$*.log' 2>&1; set -x; \
	   cd $(distdir)/_build \
	&& $(NR_MAKE) $(AM_MAKEFLAGS) -f ../Basic.mk SRCDIR=.. $(CFGCHECK_MAKEFLAGS)
	&& ./make $(AM_MAKEFLAGS) -f ../Basic.mk SRCDIR=.. check \
	&& ./make $(AM_MAKEFLAGS) -f ../Basic.mk SRCDIR=.. clean
	exec >>'checkcfg.$*.log' 2>&1; \
	   echo "Testing Basic.mk SRCDIR=."; set -x; \
	&& rm -rf $(distdir)/_build \
	&& cd $(distdir) \
	&& ./configure \
	       $(AM_DISTCHECK_CONFIGURE_FLAGS) $(DISTCHECK_CONFIGURE_FLAGS) \
	&& $(NR_MAKE) $(AM_MAKEFLAGS) -f Basic.mk '$(CFGCHECK_MAKEFLAGS)' \
	&& ./make $(AM_MAKEFLAGS) -f Basic.mk check \
	&& ./make $(AM_MAKEFLAGS) -f Basic.mk clean


## --------------- ##
## 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 $(PACKAGE_VERSION)' >/dev/null; then \
	  :; \
	else \
	  echo "$(PACKAGE_VERSION) not in ChangeLog" 1>&2; \
	  exit 1; \
	fi

# Verify that all source files using _() are listed in po/POTFILES.in.
# Ignore src/makeint.h; it defines _().
po-check:
	if test -f po/POTFILES.in; then \
	  grep '^[^#]' po/POTFILES.in | sort > $@-1; \
	  find [a-z]* -name '*.[ch]' | xargs grep -l '\b_(' | grep -v src/makeint.h | 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:
	test -d '$(MAKEWEBDIR)' || mkdir -p '$(MAKEWEBDIR)'
	test -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:
	test -d '$(GNUWEBDIR)' || mkdir -p '$(GNUWEBDIR)'
	test -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 '$(PACKAGE_NAME) 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 .,-,$(PACKAGE_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) \
		$(CFGCHECK_MAKEFLAGS)
	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)
	@test -n "$(COVERITY_TOKEN)" || { echo 'COVERITY_TOKEN not set'; exit 1; }
	@test -n "$(COVERITY_EMAIL)" || { echo 'COVERITY_EMAIL not set'; exit 1; }
	rm -f '$@'
	case '$(PACKAGE_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="$(PACKAGE_VERSION)$$ext" \
	     --form description="$(PACKAGE_NAME) $$type" \
	     'https://scan.coverity.com/builds?project=gmake'
	cp '$<' '$@'


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

.PHONY: tag-release
tag-release:
	case '$(PACKAGE_VERSION)' in \
	    (*.*.9*) message=" candidate" ;; \
	    (*)      message= ;; \
	esac; \
	$(GIT) tag -m "$(PACKAGE_NAME) release$$message $(PACKAGE_VERSION)" -u '$(GPG_KEYID)' '$(PACKAGE_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! :)

GNUPLOAD := $(GNULIBDIR)/build-aux/gnupload

UPLOADS = upload-alpha upload-ftp
.PHONY: $(UPLOADS)
$(UPLOADS): upload-%: $(DIST_ARCHIVES)
	$(GNUPLOAD) --user "$(GPG_KEYID)" --to "$*.gnu.org:make" -- $^


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

# Copyright (C) 1997-2024 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 <https://www.gnu.org/licenses/>.
