mirror of
https://git.savannah.gnu.org/git/make.git
synced 2025-01-27 09:43:41 +00:00
6ccf33cdbd
string into the strcache. As a side-effect, many more structure members and function arguments can/should be declared const. As mentioned in the changelog, unfortunately measurement shows that this change does not yet reduce memory. The problem is with secondary expansion: because of this we store all the prerequisites in the string cache twice. First we store the prerequisite string after initial expansion but before secondary expansion, then we store each individual file after secondary expansion and expand_deps(). I plan to change expand_deps() to be callable in either context (eval or snap_deps) then have non-second-expansion targets call expand_deps() during eval, so that we only need to store that dependency list once.
282 lines
8.9 KiB
Text
282 lines
8.9 KiB
Text
# Maintainer-only makefile segment. This contains things that are relevant
|
|
# only if you have the full copy of the GNU make sources from the CVS
|
|
# tree, not a dist copy.
|
|
|
|
# We like mondo-warnings!
|
|
AM_CFLAGS += -Wall -Wextra -Wdeclaration-after-statement -Wshadow -Wpointer-arith -Wbad-function-cast
|
|
|
|
# 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
|
|
|
|
# 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) > $@
|
|
|
|
# Get rid of everything "else".
|
|
#
|
|
maintFILES = configure aclocal.m4 config.h.in Makefile.in stamp-h.in
|
|
|
|
CVS-CLEAN-FILES += $(maintFILES) $(TEMPLATES) $(MTEMPLATES) NMakefile \
|
|
build.sh.in .deps .dep_segment ABOUT-NLS \
|
|
ansi2knr.*
|
|
|
|
# This rule tries to clean the tree right down to how it looks when you do a
|
|
# virgin CVS checkout.
|
|
|
|
# This target is potentially dangerous since it removes _ANY FILE_ that
|
|
# is not in CVS. Including files you might mean to add to CVS but
|
|
# haven't yet... I only use this in subdirectories where it's unlikely
|
|
# we have any new files. Still... be careful!!
|
|
|
|
cvsclean = $(PERL) -e '$$k{CVS} = 1; open(E,"< CVS/Entries") || die "CVS/Entries: $$!\n"; while (defined ($$_ = <E>)) { m%^/([^/]*)% or next; $$k{$$1} = 1; } close(E) || die "CVS/Entries: $$!\n"; opendir(D, ".") || die ".: $$!\n"; while (defined ($$_ = readdir(D))) { -f $$_ && ! exists $$k{$$_} && unlink($$_); } closedir(D) || die ".: $$!\n";'
|
|
|
|
.PHONY: cvs-clean
|
|
cvs-clean: maintainer-clean
|
|
-rm -rf *~ $(CVS-CLEAN-FILES)
|
|
-cd config && $(cvsclean)
|
|
-cd po && $(cvsclean)
|
|
-cd doc && $(cvsclean)
|
|
-cd glob && $(cvsclean)
|
|
|
|
|
|
# ----------------------------------------------------------------------
|
|
#
|
|
# The sections below were stolen from the Makefile.maint used by fileutils,
|
|
# sh-utils, textutils, CPPI, Bison, and Autoconf.
|
|
|
|
|
|
## ---------------- ##
|
|
## Updating files. ##
|
|
## ---------------- ##
|
|
|
|
WGET = wget --passive-ftp -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 $(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_repo = http://www.iro.umontreal.ca/translation/maint/$(PACKAGE)
|
|
.PHONY: do-po-update po-update
|
|
do-po-update:
|
|
tmppo="/tmp/po-$(PACKAGE)-$(VERSION).$$$$" \
|
|
&& rm -rf "$$tmppo" \
|
|
&& mkdir "$$tmppo" \
|
|
&& (cd "$$tmppo" \
|
|
&& $(WGET) -r -l1 -nd --no-parent -A '*.po' $(po_repo)) \
|
|
&& cp "$$tmppo"/*.po po && rm -rf "$$tmppo"
|
|
cd po && $(MAKE) update-po
|
|
$(MAKE) po-check
|
|
|
|
po-update:
|
|
if test -d "po"; then \
|
|
$(MAKE) do-po-update; \
|
|
fi
|
|
|
|
# -------------------------- #
|
|
# 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.
|
|
|
|
savannah-url = http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~
|
|
target = $(patsubst get-%,%,$@)
|
|
|
|
config-url = $(savannah-url)/config/config/$(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 = $(savannah-url)/gnulib/gnulib/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 = $(savannah-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: cvs-update
|
|
cvs-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 cvs-update
|
|
|
|
|
|
## --------------- ##
|
|
## Sanity checks. ##
|
|
## --------------- ##
|
|
|
|
# Checks that don't require cvs. 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 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 make.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 "make.h" || print "$$ARGV\n" and close ARGV }' *.c *.h | sort > $@-2; \
|
|
diff -u $@-1 $@-2 || exit 1; \
|
|
rm -f $@-1 $@-2; \
|
|
fi
|
|
|
|
## ------------------------- ##
|
|
## 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 6338B6D4
|
|
|
|
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 'verstion: 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-url = ftp-upload.gnu.org /incoming
|
|
|
|
UPLOADS = upload-alpha upload-ftp
|
|
.PHONY: $(UPLOADS)
|
|
$(UPLOADS): $(DIST_ARCHIVES) $(DIST_ARCHIVES_SIG) $(DIST_ARCHIVES_DIRECTIVE)
|
|
$(FTPPUT) "$(gnu-url)/$(@:upload-%=%)" $^
|
|
|
|
|
|
# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
|
# 2007 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 2, 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
|
|
# GNU Make; see the file COPYING. If not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|