summaryrefslogtreecommitdiffstats
path: root/src/config
diff options
context:
space:
mode:
authorTom Yu <tlyu@mit.edu>2002-12-12 21:10:55 +0000
committerTom Yu <tlyu@mit.edu>2002-12-12 21:10:55 +0000
commit9e06e2f27bfc68bbabacf78ea1d2932bee5b3770 (patch)
treecc7ae9f4f3f2403ed393ca040cc82ed82b80e9bf /src/config
parentf598347300f012130c0edb4bda19146439fcb6b8 (diff)
downloadkrb5-9e06e2f27bfc68bbabacf78ea1d2932bee5b3770.tar.gz
krb5-9e06e2f27bfc68bbabacf78ea1d2932bee5b3770.tar.xz
krb5-9e06e2f27bfc68bbabacf78ea1d2932bee5b3770.zip
Fix depend rules to keep state about whether verification of various
things succeeded. Change some double colons to single colons. Add a new depend-dependencies target to allow Makefile.in to specify things that must be built for depend to work. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@15045 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/config')
-rw-r--r--src/config/ChangeLog10
-rw-r--r--src/config/post.in102
-rw-r--r--src/config/pre.in111
3 files changed, 173 insertions, 50 deletions
diff --git a/src/config/ChangeLog b/src/config/ChangeLog
index 1361cb9a1a..b7731d9b26 100644
--- a/src/config/ChangeLog
+++ b/src/config/ChangeLog
@@ -1,3 +1,13 @@
+2002-12-12 Tom Yu <tlyu@mit.edu>
+
+ * post.in: Fix depend rules to keep state about whether
+ verification of various things succeeded. Change some double
+ colons to single colons. Add a new depend-dependencies target to
+ allow Makefile.in to specify things that must be built for depend
+ to work.
+
+ * pre.in: Fix recursion rules to use fewer double colons.
+
2002-12-09 Tom Yu <tlyu@mit.edu>
* post.in: depfix2.sed -> .depfix2.sed to avoid a little clutter.
diff --git a/src/config/post.in b/src/config/post.in
index d84a84af72..2e90625c6c 100644
--- a/src/config/post.in
+++ b/src/config/post.in
@@ -1,63 +1,110 @@
-# config/post.in
+############################################################
+## config/post.in
+##
+
+# in case there is no default target (very unlikely)
+all::
check-windows::
+##############################
+# dependency generation
+#
+
+depend:: depend-postrecurse
+depend-postrecurse: depend-recurse
+depend-recurse: depend-prerecurse
+
+depend-prerecurse:
+depend-postrecurse:
+
+depend-postrecurse: depend-update-makefile
+
ALL_DEP_SRCS= $(SRCS) $(EXTRADEPSRCS)
# be sure to check ALL_DEP_SRCS against *what it would be if SRCS and
# EXTRADEPSRCS are both empty*
-depend-verify-srcdir:
+.depend-verify-srcdir:
@if test "$(srcdir)" = "." ; then \
echo 1>&2 error: cannot build dependencies with srcdir=. ; \
echo 1>&2 "(can't distinguish generated files from source files)" ; \
exit 1 ; \
+ else \
+ if test -r .depend-verify-srcdir; then :; \
+ else (set -x; touch .depend-verify-srcdir); fi \
fi
-depend-verify-et: depend-verify-et-$(COM_ERR_VERSION)
+.depend-verify-et: depend-verify-et-$(COM_ERR_VERSION)
depend-verify-et-k5:
+ @if test -r .depend-verify-et; then :; \
+ else (set -x; touch .depend-verify-et); fi
depend-verify-et-sys:
@echo 1>&2 error: cannot build dependencies using system et package
@exit 1
-depend-verify-ss: depend-verify-ss-$(SS_VERSION)
+.depend-verify-ss: depend-verify-ss-$(SS_VERSION)
depend-verify-ss-k5:
+ @if test -r .depend-verify-ss; then :; \
+ else (set -x; touch .depend-verify-ss); fi
depend-verify-ss-sys:
@echo 1>&2 error: cannot build dependencies using system ss package
@exit 1
-depend-verify-db: depend-verify-db-$(DB_VERSION)
+.depend-verify-db: depend-verify-db-$(DB_VERSION)
depend-verify-db-k5:
+ @if test -r .depend-verify-db; then :; \
+ else (set -x; touch .depend-verify-db); fi
depend-verify-db-sys:
@echo 1>&2 error: cannot build dependencies using system db package
@exit 1
-depend-verify-gcc: depend-verify-gcc-@HAVE_GCC@
+.depend-verify-gcc: depend-verify-gcc-@HAVE_GCC@
depend-verify-gcc-yes:
+ @if test -r .depend-verify-gcc; then :; \
+ else (set -x; touch .depend-verify-gcc); fi
depend-verify-gcc-no:
@echo 1>&2 error: The '"depend"' rules are written for gcc.
@echo 1>&2 Please use gcc, or update the rules to handle your compiler.
@exit 1
-.d: $(ALL_DEP_SRCS) depend-verify-srcdir depend-verify-et depend-verify-ss depend-verify-db
+DEP_CFG_VERIFY = .depend-verify-srcdir \
+ .depend-verify-et .depend-verify-ss .depend-verify-db
+DEP_VERIFY = $(DEP_CFG_VERIFY) .depend-verify-gcc
+
+.d: $(ALL_DEP_SRCS) $(DEP_CFG_VERIFY) depend-dependencies
if test "$(ALL_DEP_SRCS)" != " " ; then \
- $(CC) -M $(ALL_CFLAGS) $(ALL_DEP_SRCS) > .dtmp || exit 1 ; \
- mv -f .dtmp .d ; \
+ $(RM) .dtmp && $(MAKE) .dtmp && mv -f .dtmp .d ; \
else \
touch .d ; \
fi
+# These are dependencies of the depend target that do not get fed to
+# the compiler. Examples include generated header files.
+depend-dependencies:
+
+# .dtmp must *always* be out of date so that $? can be used to perform
+# VPATH searches on the sources.
+#
+# NOTE: This will fail when using Make programs whose VPATH support is
+# broken.
+.dtmp: $(ALL_DEP_SRCS)
+ $(CC) -M $(ALL_CFLAGS) $? > .dtmp
+
# Generate a script for dropping in the appropriate make variables, using
# directory-specific parameters. General substitutions independent of local
# make variables happen in depfix.sed.
-.depfix2.sed: depend-verify-gcc Makefile $(SRCTOP)/util/depgen.sed
+.depfix2.sed: .depend-verify-gcc Makefile $(SRCTOP)/util/depgen.sed
x=`$(CC) -print-libgcc-file-name` ; \
echo '$(SRCTOP)' '$(myfulldir)' '$(srcdir)' '$(BUILDTOP)' "$$x" | sed -f $(SRCTOP)/util/depgen.sed > .depfix2.tmp
mv -f .depfix2.tmp .depfix2.sed
DEPLIBOBJNAMEFIX = sed -e 's;^\$$(OUTPRE)\([a-zA-Z0-9_\-]*\)\.\$$(OBJEXT):;\1.so \1.po &;'
+# NOTE: This will also generate spurious $(OUTPRE) and $(OBJEXT)
+# references in rules for non-library objects in a directory where
+# library objects happen to be built. It's mostly harmless.
.depend: .d .depfix2.sed $(SRCTOP)/util/depfix.sed
sed -f .depfix2.sed < .d | sed -f $(SRCTOP)/util/depfix.sed | \
(if test "x$(STLIBOBJS)" != "x"; then $(DEPLIBOBJNAMEFIX) ; else cat; fi ) \
> .depend
-depend-postrecurse:: .depend
+depend-update-makefile: .depend depend-recurse
if test -n "$(SRCS)" ; then \
sed -e '/^# +++ Dependency line eater +++/,$$d' \
< $(srcdir)/Makefile.in | cat - .depend \
@@ -65,13 +112,16 @@ depend-postrecurse:: .depend
$(SRCTOP)/config/move-if-changed $(srcdir)/Makefile.in.new $(srcdir)/Makefile.in ; \
else :; fi
-depend:: depend-prerecurse depend-recurse depend-postrecurse
-depend-prerecurse::
+DEPTARGETS = .depend .d .dtmp .depfix2.sed .depfix2.tmp $(DEP_VERIFY)
+
+#
+# end dependency generation
+##############################
clean:: clean-$(WHAT)
clean-unix::
- $(RM) $(OBJS) .depend .d .depfix2.sed .depfix2.tmp
+ $(RM) $(OBJS) $(DEPTARGETS)
clean-windows::
$(RM) *.$(OBJEXT)
@@ -79,14 +129,17 @@ clean-windows::
distclean:: distclean-$(WHAT)
-distclean-prerecurse::
+distclean-normal-clean:
$(MAKE) NORECURSE=true clean
-
-distclean-postrecurse::
+distclean-prerecurse: distclean-normal-clean
+distclean-nuke-configure-state:
$(RM) config.log config.cache config.status Makefile
+distclean-postrecurse: distclean-nuke-configure-state
-Makefiles-prerecurse:: Makefile
+Makefiles-prerecurse: Makefile
+# thisconfigdir = relative path from this Makefile to config.status
+# mydir = relative path from config.status to this Makefile
Makefile: $(srcdir)/Makefile.in $(thisconfigdir)/config.status \
$(SRCTOP)/config/pre.in $(SRCTOP)/config/post.in
cd $(thisconfigdir) && $(SHELL) config.status $(mydir)/Makefile
@@ -102,6 +155,15 @@ $(srcdir)/$(thisconfigdir)/configure: $(srcdir)/$(thisconfigdir)/configure.in \
RECURSE_TARGETS=all-recurse clean-recurse distclean-recurse install-recurse \
check-recurse depend-recurse Makefiles-recurse install-headers-recurse
+# MY_SUBDIRS overrides any setting of SUBDIRS generated by the
+# configure script that generated this Makefile. This is needed when
+# the configure script that produced this Makefile creates multiple
+# Makefiles in different directories; the setting of SUBDIRS will be
+# the same in each.
+#
+# LOCAL_SUBDIRS seems to account for the case where the configure
+# script doesn't call any other subsidiary configure scripts, but
+# generates multiple Makefiles.
$(RECURSE_TARGETS):
@case "`echo 'x$(MFLAGS)'|sed -e 's/^x//' -e 's/ --.*$$//'`" \
in *[ik]*) e="status=1" ;; *) e="exit 1";; esac; \
@@ -129,3 +191,7 @@ $(RECURSE_TARGETS):
else :; \
fi;\
exit $$status
+
+##
+## end of post.in
+############################################################
diff --git a/src/config/pre.in b/src/config/pre.in
index ff162ccc93..1752522b78 100644
--- a/src/config/pre.in
+++ b/src/config/pre.in
@@ -1,5 +1,7 @@
+############################################################
## config/pre.in
## common prefix for all Makefile.in in the Kerberos V5 tree.
+##
WHAT = unix
SHELL=/bin/sh
@@ -8,59 +10,103 @@ all:: all-$(WHAT)
clean:: clean-$(WHAT)
+distclean:: distclean-$(WHAT)
+
install:: install-$(WHAT)
check:: check-$(WHAT)
install-headers:: install-headers-$(WHAT)
-all-recurse: all-prerecurse
-all-postrecurse:: all-recurse
+##############################
+# Recursion rule support
+#
+
+# The commands for the recursion targets live in config/post.in.
+#
+# General form of recursion rules:
+#
+# Each recursive target foo-unix has related targets: foo-prerecurse,
+# foo-recurse, and foo-postrecurse
+#
+# The foo-recurse rule is in post.in. It is what actually recursively
+# calls make.
+#
+# foo-recurse depends on foo-prerecurse, so any targets that must be
+# built before descending into subdirectories must be dependencies of
+# foo-prerecurse.
+#
+# foo-postrecurse depends on foo-recurse, but targets that must be
+# built after descending into subdirectories should be have
+# foo-recurse as dependencies in addition to being listed under
+# foo-postrecurse, to avoid ordering issues.
+#
+# The foo-prerecurse, foo-recurse, and foo-postrecurse rules are all
+# single-colon rules, to avoid nasty ordering problems with
+# double-colon rules.
+#
+# e.g.
+# all:: includes foo
+# foo:
+# echo foo
+# includes::
+# echo bar
+# includes::
+# echo baz
+#
+# will result in "bar", "foo", "baz" on AIX, and possibly others.
all-unix:: all-postrecurse
+all-postrecurse: all-recurse
+all-recurse: all-prerecurse
-all-prerecurse::
-all-postrecurse::
+all-prerecurse:
+all-postrecurse:
-clean-unix:: clean-prerecurse
-clean-unix:: clean-recurse
clean-unix:: clean-postrecurse
+clean-postrecurse: clean-recurse
+clean-recurse: clean-prerecurse
-clean-prerecurse::
-clean-postrecurse::
+clean-prerecurse:
+clean-postrecurse:
-distclean-unix:: distclean-prerecurse
-distclean-unix:: distclean-recurse
-distclean-unix:: distclean-postrecurse
+distclean-unix: distclean-postrecurse
+distclean-postrecurse: distclean-recurse
+distclean-recurse: distclean-prerecurse
+
+distclean-prerecurse:
+distclean-postrecurse:
-install-unix:: install-prerecurse
-install-unix:: install-recurse
install-unix:: install-postrecurse
+install-postrecurse: install-recurse
+install-recurse: install-prerecurse
-install-prerecurse::
-install-postrecurse::
+install-prerecurse:
+install-postrecurse:
-install-headers-unix:: install-headers-prerecurse
-install-headers-unix:: install-headers-recurse
install-headers-unix:: install-headers-postrecurse
+install-headers-postrecurse: install-headers-recurse
+install-headers-recurse: install-headers-prerecurse
-install-headers-prerecurse::
-
-install-headers-postrecurse::
+install-headers-prerecurse:
+install-headers-postrecurse:
-
-check-unix:: check-prerecurse
-check-unix:: check-recurse
check-unix:: check-postrecurse
+check-postrecurse: check-recurse
+check-recurse: check-prerecurse
+
+check-prerecurse:
+check-postrecurse:
-check-prerecurse::
-check-postrecurse::
+Makefiles: Makefiles-postrecurse
+Makefiles-postrecurse: Makefiles-recurse
+Makefiles-recurse: Makefiles-prerecurse
-Makefiles:: Makefiles-prerecurse
-Makefiles:: Makefiles-recurse
-Makefiles:: Makefiles-postrecurse
+Makefiles-prerecurse:
+Makefiles-postrecurse:
-Makefiles-prerecurse::
-Makefiles-postrecurse::
+#
+# end recursion rule support
+##############################
# Directory syntax:
#
@@ -364,5 +410,6 @@ MAKE_COMMANDS-k5= $(BUILDTOP)/util/ss/mk_cmds
.ct.c:
$(MAKE_COMMANDS) $<
-#
-# end of pre.in
+##
+## end of pre.in
+############################################################