summaryrefslogtreecommitdiffstats
path: root/src/kmk/maintMakefile
diff options
context:
space:
mode:
Diffstat (limited to 'src/kmk/maintMakefile')
-rw-r--r--src/kmk/maintMakefile414
1 files changed, 414 insertions, 0 deletions
diff --git a/src/kmk/maintMakefile b/src/kmk/maintMakefile
new file mode 100644
index 0000000..d817efc
--- /dev/null
+++ b/src/kmk/maintMakefile
@@ -0,0 +1,414 @@
+# 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!
+ifeq ($(KBUILD_TARGET),openbsd) # bird
+AM_CFLAGS += -Wall -Wwrite-strings -Wshadow -Wpointer-arith -Wbad-function-cast
+else
+AM_CFLAGS += -Wall -Wwrite-strings -Wextra -Wdeclaration-after-statement -Wshadow -Wpointer-arith -Wbad-function-cast
+endif
+
+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/>.