summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/Makefile.in71
1 files changed, 55 insertions, 16 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in
index 756898365b..029c64698b 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -813,28 +813,67 @@ uninstallscripts:
# Toplevel clean files
TOPFILES=dynconfig.o dynconfig.po
-clean: delheaders
- -rm -f core */*~ *~ */*.o */*.po */*.po32 */*.@SHLIBEXT@ \
- $(TOPFILES) $(PROGS) $(SPROGS) .headers.stamp
+# NB: According to the GNU standards, "make clean" should not delete
+# things that normally come with the distribution, even if they could
+# possibly be rebuilt. For Samba, that includes the header files.
+clean:
+ -rm -f core *.o *.po */*~ *~ */*.o */*.po */*.po32 */*.@SHLIBEXT@ \
+ $(TOPFILES) $(PROGS) $(SPROGS) .proto.stamp .proto.check
winbindd_proto:
@cd $(srcdir) && $(SHELL) script/mkproto.sh $(AWK) \
-h _WINBINDD_PROTO_H_ nsswitch/winbindd_proto.h \
$(WINBINDD_OBJ1)
+# We don't kill .proto.stamp, because we don't want to force
+# rebuilding of everything.
delheaders:
- @/bin/rm -f $(srcdir)/include/proto.h $(srcdir)/include/build_env.h
- @/bin/rm -f include/proto.h include/build_env.h
-
-# we want our generated headers to be rebuilt if they don't exist, but not rebuilt every time
-.headers.stamp:
- @[ -f $@ ] || touch $@
-
-$(PROTO_OBJ) : .headers.stamp
-
-include/proto.h:
- @echo rebuilding include/proto.h
- @cd $(srcdir) && $(AWK) -f script/mkproto.awk `echo $(PROTO_OBJ) | tr ' ' '\n' | sed -e 's/\.o/\.c/g' | sort -u | egrep -v 'ubiqx/|wrapped'` > $(builddir)/include/proto.h
+ @rm -f $(srcdir)/include/proto.h $(srcdir)/include/build_env.h
+ @rm -f $(srcdir)/.proto.check
+ @rm -f $(builddir)/.proto.check
+ @rm -f include/proto.h include/build_env.h
+
+# Intended new behaviour for proto.h, whenever source is being
+# compiled: -- mbp
+#
+# If proto.h does not exist, it is built.
+#
+# If any source files have changed since proto.h was last checked
+# (.proto.check), then proto.h is checked. If there are no actual
+# changes since last time, its mtime is not changed, but we do
+# remember the time at which it was checked.
+#
+# Whenever we try to build a .o, we need to check the headers are up
+# to date. However, rebuilding the prototypes does not (yet) imply
+# rebuilding all object files. (To change this behaviour, make
+# PROTO_OBJ depend on proto.h)
+#
+# Also to allow people to build on machines without Awk, we never try
+# to use it unless a source file has changed. I guess if we wanted,
+# we could have lack of Awk only cause a warning, not failure.
+
+$(PROTO_OBJ): .proto.stamp
+
+# Whenever a source file changes, we regenerate the prototypes and see if they're
+# different to the existing ones.
+$(srcdir)/include/proto.h: .proto.check
+
+.proto.check: $(srcdir)/*.c $(srcdir)/*/*.c
+ @echo Checking $(srcdir)/include/proto.h
+ @cd $(srcdir) && $(AWK) -f script/mkproto.awk \
+ `echo $(PROTO_OBJ) | tr ' ' '\n' | sed -e 's/\.o/\.c/g' | sort -u | egrep -v 'ubiqx/|wrapped'` \
+ > $(builddir)/include/proto.h.new && \
+ touch $(builddir)/.proto.check && \
+ if test -f include/proto.h && cmp -s $(builddir)/include/proto.h.new include/proto.h; \
+ then rm -f $(builddir)/include/proto.h.new; \
+ echo No changes to include/proto.h; \
+ else \
+ echo Installing new proto.h; \
+ mv $(builddir)/include/proto.h.new include/proto.h; \
+ fi
+
+.proto.stamp: .proto.check
+ @[ -f .proto.stamp ] || touch .proto.stamp
include/build_env.h:
@echo rebuilding include/build_env.h
@@ -846,7 +885,7 @@ include/wrepld_proto.h:
-h _WREPLD_PROTO_H_ $(builddir)/include/wrepld_proto.h \
$(WREPL_OBJ1)
-headers: delheaders include/proto.h include/build_env.h include/wrepld_proto.h .headers.stamp
+headers: .proto.check $(srcdir)/include/proto.h include/build_env.h include/wrepld_proto.h
proto: headers winbindd_proto