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 *.lo
*.o *.o
*.la *.la
.dep
autom4te.cache autom4te.cache
configure configure
config.log
config.status
include/builddefs include/builddefs
include/config.h include/config.h
include/config.h.in include/config.h.in
-4
View File
@@ -65,18 +65,14 @@ GCCFLAGS = -funsigned-char -fno-strict-aliasing -Wall
ifeq ($(PKG_PLATFORM),linux) ifeq ($(PKG_PLATFORM),linux)
PCFLAGS = -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 $(GCCFLAGS) PCFLAGS = -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 $(GCCFLAGS)
DEPENDFLAGS = -D__linux__
endif endif
ifeq ($(PKG_PLATFORM),darwin) ifeq ($(PKG_PLATFORM),darwin)
PCFLAGS = -traditional-cpp $(GCCFLAGS) PCFLAGS = -traditional-cpp $(GCCFLAGS)
DEPENDFLAGS = -D__APPLE__
endif endif
ifeq ($(PKG_PLATFORM),irix) ifeq ($(PKG_PLATFORM),irix)
PCFLAGS = -nostdinc -I$(ROOT)/usr/include -I$(TOPDIR)/../irix/include PCFLAGS = -nostdinc -I$(ROOT)/usr/include -I$(TOPDIR)/../irix/include
DEPENDFLAGS = -D__sgi__
endif endif
ifeq ($(PKG_PLATFORM),freebsd) ifeq ($(PKG_PLATFORM),freebsd)
DEPENDFLAGS = -D__FreeBSD__
endif endif
GCFLAGS = $(OPTIMIZER) $(DEBUG) $(CPPFLAGS) \ GCFLAGS = $(OPTIMIZER) $(DEBUG) $(CPPFLAGS) \
+10 -26
View File
@@ -8,7 +8,7 @@ include $(TOPDIR)/include/builddefs
clean clobber : $(addsuffix -clean,$(SUBDIRS)) clean clobber : $(addsuffix -clean,$(SUBDIRS))
$(Q)rm -f $(DIRT) $(Q)rm -f $(DIRT)
$(Q)rm -fr .libs $(Q)rm -fr .libs .dep
%-clean: %-clean:
@echo "Cleaning $*" @echo "Cleaning $*"
@@ -70,32 +70,16 @@ endif # _BUILDRULES_INCLUDED_
$(_FORCE): $(_FORCE):
.PHONY : depend # dependency build is automatic, relies on gcc -MM to generate.
.PHONY : depend ltdepend
DEPENDSCRIPT := $(MAKEDEPEND) $(DEPENDFLAGS) -f - -- $(CFLAGS) -- $(CFILES) | \ MAKEDEP := $(MAKEDEPEND) $(CFLAGS)
$(SED) -e 's,`pwd`,$(TOPDIR),g' \
-e 's, */[^ ]*,,g' \
-e '/^[^ ]*: *$$/d' \
-e '/^ *$$/d'
ifdef LTLIBRARY ltdepend: $(CFILES) $(HFILES)
DEPENDSCRIPT := $(DEPENDSCRIPT) | $(SED) -e 's,^\([^:]*\)\.o,\1.lo,' @echo " [DEP]"
endif $(Q)$(MAKEDEP) $(CFILES) | $(SED) -e 's,^\([^:]*\)\.o,\1.lo,' > .dep
depend : $(CFILES) $(HFILES) $(addsuffix -depend,$(SUBDIRS)) depend: $(CFILES) $(HFILES)
$(DEPENDSCRIPT) > .dep @echo " [DEP]"
test -s .dep || rm -f .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 \ str_to_bytes.c tlibio.c write_log.c \
random.c random.c
default: $(LTLIBRARY) default: ltdepend $(LTLIBRARY)
include $(BUILDRULES) include $(BUILDRULES)
install install-dev: default install install-dev: default
-include .dep
+2 -1
View File
@@ -27,7 +27,7 @@ LCFLAGS += -DAIO
LLDLIBS += -laio -lpthread LLDLIBS += -laio -lpthread
endif endif
default: $(TARGETS) default: depend $(TARGETS)
include $(BUILDRULES) include $(BUILDRULES)
@@ -39,3 +39,4 @@ install: default
$(INSTALL) -m 755 -d $(PKG_LIB_DIR)/ltp $(INSTALL) -m 755 -d $(PKG_LIB_DIR)/ltp
$(INSTALL) -m 755 $(TARGETS) $(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 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. # Generic macro, sets up all of the global build variables.
# The following environment variables may be set to override defaults: # 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 # MSGFMT MSGMERGE RPM
# #
AC_DEFUN([AC_PACKAGE_UTILITIES], AC_DEFUN([AC_PACKAGE_UTILITIES],
@@ -54,10 +72,11 @@ AC_DEFUN([AC_PACKAGE_UTILITIES],
zip=$ZIP zip=$ZIP
AC_SUBST(zip) AC_SUBST(zip)
if test -z "$MAKEDEPEND"; then AC_PACKAGE_GCC_DEPS()
AC_PATH_PROG(MAKEDEPEND, makedepend, /bin/true) makedepend="$cc -MM"
if test $ac_cv_gcc_nodeps = no; then
makedepend=/bin/true
fi fi
makedepend=$MAKEDEPEND
AC_SUBST(makedepend) AC_SUBST(makedepend)
if test -z "$AWK"; then 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 multi_open_unlink dmiperf unwritten_sync genhashnames
LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize \ LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize \
preallo_rw_pattern_reader preallo_rw_pattern_writer ftrunc trunc \ ftrunc trunc fs_perms testx looptest locktest unwritten_mmap \
fs_perms testx looptest locktest unwritten_mmap \
bulkstat_unlink_test bulkstat_unlink_test_modified t_dir_offset \ bulkstat_unlink_test bulkstat_unlink_test_modified t_dir_offset \
t_futimens t_futimens
SUBDIRS =
LLDLIBS = $(LIBATTR) $(LIBHANDLE) $(LIBACL) LLDLIBS = $(LIBATTR) $(LIBHANDLE) $(LIBACL)
ifeq ($(HAVE_XLOG_ASSIGN_LSN), true) ifeq ($(HAVE_XLOG_ASSIGN_LSN), true)
@@ -27,6 +28,7 @@ endif
IRIX_TARGETS = open_unlink IRIX_TARGETS = open_unlink
ifeq ($(PKG_PLATFORM),linux) ifeq ($(PKG_PLATFORM),linux)
PREALLO_TARGETS = preallo_rw_pattern_reader
TARGETS += $(LINUX_TARGETS) TARGETS += $(LINUX_TARGETS)
TARGETS += t_immutable TARGETS += t_immutable
endif endif
@@ -49,7 +51,7 @@ CFILES = $(TARGETS:=.c)
LDIRT = $(TARGETS) LDIRT = $(TARGETS)
default: $(TARGETS) $(SUBDIRS) default: depend $(TARGETS) $(SUBDIRS)
include $(BUILDRULES) include $(BUILDRULES)
@@ -67,3 +69,5 @@ install: default $(addsuffix -install,$(SUBDIRS))
%-install: %-install:
$(MAKE) -C $* install $(MAKE) -C $* install
-include .dep
+3 -1
View File
@@ -8,7 +8,7 @@ LDIRT = $(TARGETS)
LLDLIBS = -laio -lpthread LLDLIBS = -laio -lpthread
default: $(TARGETS) default: depend $(TARGETS)
include $(BUILDRULES) include $(BUILDRULES)
@@ -19,3 +19,5 @@ $(TARGETS):
install: install:
$(INSTALL) -m 755 -d $(PKG_LIB_DIR)/src/aio-dio-regress $(INSTALL) -m 755 -d $(PKG_LIB_DIR)/src/aio-dio-regress
$(INSTALL) -m 755 $(TARGETS) $(PKG_LIB_DIR)/src/aio-dio-regress $(INSTALL) -m 755 $(TARGETS) $(PKG_LIB_DIR)/src/aio-dio-regress
-include .dep