xfstests: Automatic build dependency calculations
authorDave Chinner <david@fromorbit.com>
Tue, 26 Jan 2010 03:22:35 +0000 (14:22 +1100)
committerDave Chinner <david@fromorbit.com>
Tue, 26 Jan 2010 03:22:35 +0000 (14:22 +1100)
Currently the xfstest builds do not have any automatic dependency
calculations. It relies on a separate make depend run to build or
update dependency information. It also relies on an external
makedepend binary. If that binary does not exist, the dependencies
do not get calculated.

To remove the dependency on makedepend, gcc can be used instead as
it has a command to generate dependency information. This patch
changes the dependency rule building to use gcc.

In case anyone uses an old (several years) gcc compiler or a
compiler that doesn't support gcc compatible dependency generation,
a new configure check is added to turn off dependency checking so
builds can still be done.

To use the dependencies automatically, we need to use a special
include makefile directive to include the build dependencies into
the current makefile.  Essentially once the dependencies are
calculated, they can be included into the makefile and make will
recalculate the build dependencies automatically based on that
information.

Hence we get a build that automatically calculates and keeps
dependencies up to date without dependence on any external tools.

Signed-off-by: Dave Chinner <david@fromorbit.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
.gitignore
include/builddefs.in
include/buildrules
lib/Makefile
ltp/Makefile
m4/package_utilies.m4
src/Makefile
src/aio-dio-regress/Makefile

index d7cbab1aa12104366ea98b51368ff105768ac53e..563c30ad6e46d1c1400d636f766ab1f32a24fc4e 100644 (file)
@@ -1,9 +1,12 @@
 *.lo
 *.o
 *.la
+.dep
 
 autom4te.cache
 configure
+config.log
+config.status
 include/builddefs
 include/config.h
 include/config.h.in
index 7827ed5acc9e940c44731659f5b651c41ca27d9d..23a499176757ecd799d8d1dabf52d344f1f991a5 100644 (file)
@@ -65,18 +65,14 @@ GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall
 
 ifeq ($(PKG_PLATFORM),linux)
 PCFLAGS = -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 $(GCCFLAGS)
-DEPENDFLAGS = -D__linux__
 endif
 ifeq ($(PKG_PLATFORM),darwin)
 PCFLAGS = -traditional-cpp $(GCCFLAGS)
-DEPENDFLAGS = -D__APPLE__
 endif
 ifeq ($(PKG_PLATFORM),irix)
 PCFLAGS = -nostdinc -I$(ROOT)/usr/include -I$(TOPDIR)/../irix/include
-DEPENDFLAGS = -D__sgi__
 endif
 ifeq ($(PKG_PLATFORM),freebsd)
-DEPENDFLAGS = -D__FreeBSD__
 endif
 
 GCFLAGS = $(OPTIMIZER) $(DEBUG) $(CPPFLAGS) \
index 54283911f6446a0bd5619cc15875e99ea0b12e59..5388210e4a60fe08cc4ae8238b4f84c718181306 100644 (file)
@@ -8,7 +8,7 @@ include $(TOPDIR)/include/builddefs
 
 clean clobber : $(addsuffix -clean,$(SUBDIRS))
        $(Q)rm -f $(DIRT)
-       $(Q)rm -fr .libs
+       $(Q)rm -fr .libs .dep
 
 %-clean:
        @echo "Cleaning $*"
@@ -70,32 +70,16 @@ endif # _BUILDRULES_INCLUDED_
 
 $(_FORCE):
 
-.PHONY : depend
+# dependency build is automatic, relies on gcc -MM to generate.
+.PHONY : depend ltdepend
 
-DEPENDSCRIPT := $(MAKEDEPEND) $(DEPENDFLAGS) -f - -- $(CFLAGS) -- $(CFILES) | \
-       $(SED) -e 's,`pwd`,$(TOPDIR),g' \
-           -e 's,  */[^ ]*,,g' \
-           -e '/^[^ ]*: *$$/d' \
-           -e '/^ *$$/d'
+MAKEDEP := $(MAKEDEPEND) $(CFLAGS)
 
-ifdef LTLIBRARY
-DEPENDSCRIPT := $(DEPENDSCRIPT) | $(SED) -e 's,^\([^:]*\)\.o,\1.lo,'
-endif
+ltdepend: $(CFILES) $(HFILES)
+       @echo "    [DEP]"
+       $(Q)$(MAKEDEP) $(CFILES) | $(SED) -e 's,^\([^:]*\)\.o,\1.lo,' > .dep
 
-depend : $(CFILES) $(HFILES) $(addsuffix -depend,$(SUBDIRS))
-       $(DEPENDSCRIPT) > .dep
-       test -s .dep || rm -f .dep
+depend: $(CFILES) $(HFILES)
+       @echo "    [DEP]"
+       $(Q)$(MAKEDEP) $(CFILES) | $(SED) -e 's,^\([^:]*\)\.o,\1,' > .dep
 
-%-depend:
-       $(MAKE) -C $* depend
-
-# Include dep, but only if it exists
-ifeq ($(shell test -f .dep && echo .dep), .dep)
-include .dep
-else
-ifdef LTLIBRARY
-$(LTOBJECTS): $(HFILES)
-else
-$(OBJECTS): $(HFILES)
-endif
-endif
index 435c38c8ac5320f95f450c614abbae7709c2273e..43fb0a092808eccd36464e21b5bbb279ea42ea96 100644 (file)
@@ -19,8 +19,10 @@ CFILES = dataascii.c databin.c datapid.c file_lock.c forker.c \
        str_to_bytes.c tlibio.c write_log.c \
        random.c
 
-default: $(LTLIBRARY)
+default: ltdepend $(LTLIBRARY)
 
 include $(BUILDRULES)
 
 install install-dev: default
+
+-include .dep
index fee10f551dde7849ca54ece284613f4fb22c35bb..d74a9df76a054629f840199c39436498655fa209 100644 (file)
@@ -27,7 +27,7 @@ LCFLAGS += -DAIO
 LLDLIBS += -laio -lpthread
 endif
 
-default: $(TARGETS)
+default: depend $(TARGETS)
 
 include $(BUILDRULES)
 
@@ -39,3 +39,4 @@ install: default
        $(INSTALL) -m 755 -d $(PKG_LIB_DIR)/ltp
        $(INSTALL) -m 755 $(TARGETS) $(PKG_LIB_DIR)/ltp
 
+-include .dep
index c034a7c6cee181794e71d977399bb48938df2b81..726406c8afad2e44e8a573e2cea0c73e6a9f5d60 100644 (file)
@@ -10,10 +10,28 @@ AC_DEFUN([AC_PACKAGE_NEED_UTILITY],
     fi
   ])
 
+#
+#check compiler can generate dependencies
+#
+AC_DEFUN([AC_PACKAGE_GCC_DEPS],
+  [AC_CACHE_CHECK(whether gcc -MM is supported,
+                  ac_cv_gcc_nodeps,
+                  [cat > conftest.c <<EOF
+                  #include <stdio.h>
+                  int main() { exit(0); }
+EOF
+                  ac_cv_gcc_nodeps=no
+                  if ${CC} -MM conftest.c >/dev/null 2>&1; then
+                     ac_cv_gcc_nodeps=yes
+                  fi
+                  rm -f conftest.c a.out
+                  ])
+  ])
+
 #
 # Generic macro, sets up all of the global build variables.
 # The following environment variables may be set to override defaults:
-#  CC MAKE LIBTOOL TAR ZIP MAKEDEPEND AWK SED ECHO SORT
+#  CC MAKE LIBTOOL TAR ZIP eMAKEDEPEND AWK SED ECHO SORT
 #  MSGFMT MSGMERGE RPM
 #
 AC_DEFUN([AC_PACKAGE_UTILITIES],
@@ -54,10 +72,11 @@ AC_DEFUN([AC_PACKAGE_UTILITIES],
     zip=$ZIP
     AC_SUBST(zip)
 
-    if test -z "$MAKEDEPEND"; then
-        AC_PATH_PROG(MAKEDEPEND, makedepend, /bin/true)
+    AC_PACKAGE_GCC_DEPS()
+    makedepend="$cc -MM"
+    if test $ac_cv_gcc_nodeps = no; then
+       makedepend=/bin/true
     fi
-    makedepend=$MAKEDEPEND
     AC_SUBST(makedepend)
 
     if test -z "$AWK"; then
index e5ebcd8e3002d5a26b54da1d6d71f7165b40b341..ac2a88f7e39e12df63b1a1c4f618394724737cb3 100644 (file)
@@ -13,11 +13,12 @@ TARGETS = dirstress fill fill2 getpagesize holes lstat64 \
        multi_open_unlink dmiperf unwritten_sync genhashnames
 
 LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize \
-       preallo_rw_pattern_reader preallo_rw_pattern_writer ftrunc trunc \
-       fs_perms testx looptest locktest unwritten_mmap \
+       ftrunc trunc fs_perms testx looptest locktest unwritten_mmap \
        bulkstat_unlink_test bulkstat_unlink_test_modified t_dir_offset \
        t_futimens
 
+SUBDIRS =
+
 LLDLIBS = $(LIBATTR) $(LIBHANDLE) $(LIBACL)
 
 ifeq ($(HAVE_XLOG_ASSIGN_LSN), true)
@@ -27,6 +28,7 @@ endif
 IRIX_TARGETS = open_unlink
 
 ifeq ($(PKG_PLATFORM),linux)
+PREALLO_TARGETS = preallo_rw_pattern_reader
 TARGETS += $(LINUX_TARGETS)
 TARGETS += t_immutable
 endif
@@ -49,7 +51,7 @@ CFILES = $(TARGETS:=.c)
 LDIRT = $(TARGETS)
 
 
-default: $(TARGETS) $(SUBDIRS)
+default: depend $(TARGETS) $(SUBDIRS)
 
 include $(BUILDRULES)
 
@@ -67,3 +69,5 @@ install: default $(addsuffix -install,$(SUBDIRS))
 
 %-install:
        $(MAKE) -C $* install
+
+-include .dep
index f0e4d154c894b4b641a279c8cd20ead4d8376eda..3f9d1c266b3151efcf5f1309f092b2fed5075d75 100644 (file)
@@ -8,7 +8,7 @@ LDIRT = $(TARGETS)
 
 LLDLIBS = -laio -lpthread
 
-default: $(TARGETS)
+default: depend $(TARGETS)
 
 include $(BUILDRULES)
 
@@ -19,3 +19,5 @@ $(TARGETS):
 install:
        $(INSTALL) -m 755 -d $(PKG_LIB_DIR)/src/aio-dio-regress
        $(INSTALL) -m 755 $(TARGETS) $(PKG_LIB_DIR)/src/aio-dio-regress
+
+-include .dep