X-Git-Url: http://git.apps.os.sepia.ceph.com/?p=xfstests-dev.git;a=blobdiff_plain;f=include%2Fbuildrules;h=bf187662f66f019c11891188e5fab377641cb467;hp=dab3faeda441027b0b69f9ba9313a974eda7db3a;hb=2a8ee2afe5febe67e9e54c92fe59a8e3bce8ed7b;hpb=54a1ac018a63ebfbb82b7707cf3bf352312afbba;ds=sidebyside diff --git a/include/buildrules b/include/buildrules index dab3faed..bf187662 100644 --- a/include/buildrules +++ b/include/buildrules @@ -1,77 +1,134 @@ -# -# Copyright (C) 1999 Silicon Graphics, Inc. All Rights Reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of version 2 of the GNU General Public License as published -# by the Free Software Fondation. -# -# This program is distributed in the hope that it would be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. Further, any license provided herein, -# whether implied or otherwise, is limited to this program in accordance with -# the express provisions of the GNU General Public License. Patent licenses, -# if any, provided herein do not apply to combinations of this program with -# other product or programs, or any other product whatsoever. This program is -# distributed without any warranty that the program is delivered free of the -# rightful claim of any third person by way of infringement or the like. See -# the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write the Free Software Foundation, Inc., 59 Temple -# Place - Suite 330, Boston MA 02111-1307, USA. -# Common build rules for gmake +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 1999, 2001-2003 Silicon Graphics, Inc. All Rights Reserved. # ifndef _BUILDRULES_INCLUDED_ _BUILDRULES_INCLUDED_ = 1 include $(TOPDIR)/include/builddefs +depend: $(addsuffix -depend,$(SUBDIRS)) + +%-depend: + $(Q)$(MAKE) $(MAKEOPTS) -q -C $* depend || \ + $(MAKE) $(MAKEOPTS) -C $* depend + +clean clobber : $(addsuffix -clean,$(SUBDIRS)) + $(Q)rm -f $(DIRT) + $(Q)rm -fr .libs .ltdep .dep + +%-clean: + @echo "Cleaning $*" + $(Q)$(MAKE) $(MAKEOPTS) -q -C $* clean || \ + $(MAKE) $(MAKEOPTS) -C $* clean + +# Never blow away subdirs +ifdef SUBDIRS +.PRECIOUS: $(SUBDIRS) +.PHONY: $(SUBDIRS) + +$(SUBDIRS): + @echo "Building $@" + $(Q)$(MAKE) $(MAKEOPTS) -q -C $@ || $(MAKE) $(MAKEOPTS) -C $@ +endif + # # Standard targets # -ifdef CMDTARGET -$(CMDTARGET) : $(SUBDIRS) $(OBJECTS) - $(CCF) -o $(CMDTARGET) $(LDFLAGS) $(OBJECTS) $(LDLIBS) -$(CMDTARGET).static : $(SUBDIRS) $(OBJECTS) - $(CCF) -static -o $(CMDTARGET).static $(LDFLAGS) $(OBJECTS) $(LDLIBS) -endif -ifdef LIBTARGET -$(LIBTARGET) : $(SUBDIRS) $(OBJECTS) - $(CC) $(LDFLAGS) -fPIC -shared -Wl,-soname,$(LIBTARGET) -o $(LIBTARGET) $(OBJECTS) $(LDLIBS) +ifdef LTCOMMAND +$(LTCOMMAND) : $(SUBDIRS) $(OBJECTS) $(LTDEPENDENCIES) + @echo " [LD] $*" + $(Q)$(LTLINK) -o $@ $(LDFLAGS) $(OBJECTS) $(LDLIBS) endif -ifdef STATICLIBTARGET -$(STATICLIBTARGET) : $(SUBDIRS) $(OBJECTS) - $(AR) crf $(STATICLIBTARGET) $? +ifdef LTLIBRARY +$(LTLIBRARY) : $(SUBDIRS) $(LTOBJECTS) + @echo " [LD] $*" + $(Q)$(LTLINK) $(LTLDFLAGS) -o $(LTLIBRARY) $(LTOBJECTS) $(LTLIBS) + +%.lo: %.c + @echo " [CC] $@" + $(Q)$(LTCOMPILE) -c $< +else +%.o: %.c + @echo " [CC] $@" + $(Q)$(CC) $(CFLAGS) -c $< + endif -clean clobber : $(SUBDIRS) - rm -f $(DIRT) - $(SUBDIRS_MAKERULE) +ifdef POTHEAD +%.pot: $(XGETTEXTFILES) + $(XGETTEXT) --language=C --keyword=_ -o $@ $(XGETTEXTFILES) -# Never blow away subdirs -ifdef SUBDIRS -.PRECIOUS: $(SUBDIRS) -$(SUBDIRS): - $(SUBDIRS_MAKERULE) +# Generate temp .po files, to check whether translations need updating. +# Not by default, due to gettext output differences between versions. +%.po: $(POTHEAD) +# $(MSGMERGE) -o $@.tmpo $@ $(POTHEAD) +# if ! diff $@.tmpo $@ >/dev/null; then echo "$@ dated, see $@.tmpo"; fi + +%.mo: %.po + $(MSGFMT) -o $@ $< endif source : $(SOURCE_MAKERULE) -endif +endif # _BUILDRULES_INCLUDED_ $(_FORCE): +# dependency build is automatic, relies on gcc -MM to generate. .PHONY : depend -depend : $(CFILES) $(HFILES) - $(SUBDIRS_MAKERULE) - touch dep - $(MAKEDEPEND) -fdep -- $(CFLAGS) -- $(CFILES) +MAKEDEP := $(MAKEDEPEND) $(CFLAGS) -# Include dep, but only if it exists -ifeq ($(shell test -f dep && echo dep), dep) -include dep -endif +.ltdep: $(CFILES) $(HFILES) + @echo " [LTDEP]" + $(Q)if [ -n "$$( echo $(CFILES))" ]; then \ + $(MAKEDEP) $(CFILES) | \ + $(SED) -e 's,^\([^:]*\)\.o,\1.lo,' > .ltdep; \ + else \ + cp /dev/null .ltdep; \ + fi + +.dep: $(CFILES) $(HFILES) + @echo " [DEP]" + $(Q)if [ -n "$$( echo $(CFILES))" ]; then \ + $(MAKEDEP) $(CFILES) | \ + $(SED) -e 's,^\([^:]*\)\.o,\1,' > .dep; \ + else \ + cp /dev/null .dep; \ + fi + +# Gather files for installing into two lists: +# TESTS with executable scripts and OUTFILES with all the test outputs. +# Makefile has a very small matching, so we have to go this long way. + +# Start with all test related files: +ALLFILES = $(wildcard [0-9]??*) + +# Now build a list of known output files. Unfortunately, the +# multiple output test files are poorly handled as makefiles don't +# handle wildcarded multi-suffix matching. Hence we separate the +# processing of these right now. +EXTENDED_OUTFILES = $(wildcard [0-9]??*.out.*) +EXTENDED_OUTFILE_CFGS = $(wildcard [0-9]??.cfg) +BASIC_OUTFILES = $(wildcard [0-9]??*.out) +OUTFILES = $(EXTENDED_OUTFILES) $(EXTENDED_OUTFILE_CFGS) $(BASIC_OUTFILES) + +# Strip suffix to get matching tests. We want to strip from the +# first "." to the end, but makefiles don't have a built in +# operative for that. So: +# +# Hack: strip the multiple segments after .out with repeated basename calls. +EXTFILTER1 = $(basename $(EXTENDED_OUTFILES)) +EXTFILTER2 = $(basename $(EXTFILTER1)) +EXTFILTER3 = $(basename $(EXTFILTER2)) +EXTFILTER4 = $(basename $(EXTFILTER3)) + +# final filter list +FILTER = $(basename $(EXTFILTER4) $(BASIC_OUTFILES)) + +# finally, select the test files by filtering against against the +# stripped output files and sort them to remove duplicates. +TESTS = $(sort $(filter $(ALLFILES), $(FILTER)))