xfstests: Automatic build dependency calculations

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>
This commit is contained in:
Dave Chinner
2010-01-26 14:22:35 +11:00
parent 82e1e14dba
commit 76f1b870d9
8 changed files with 51 additions and 40 deletions
+3
View 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
-4
View 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) \
+10 -26
View 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
+3 -1
View 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
+2 -1
View 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
+23 -4
View 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
+7 -3
View 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
+3 -1
View 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