| # 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 | |
| # | |
| ifeq ($(CHECKSRC),2) | |
| # Check every .c file with sparse CHECK_CMD, do not call compiler | |
| $(LTCOMMAND) $(LTLIBRARY) : $(SUBDIRS) $(OBJECTS) | |
| .PHONY: $(LTCOMMAND) $(LTLIBRARY) | |
| %.lo %.o : %.c FORCE | |
| @echo " [CHECK] $<" | |
| $(Q)$(CHECK_CMD) $(CFLAGS) $< | |
| FORCE: | |
| else | |
| # Regular build, possibly calling sparse CHECK_CMD as well | |
| ifdef LTCOMMAND | |
| $(LTCOMMAND) : $(SUBDIRS) $(OBJECTS) $(LTDEPENDENCIES) | |
| @echo " [LD] $*" | |
| $(Q)$(LTLINK) -o $@ $(LDFLAGS) $(OBJECTS) $(LDLIBS) | |
| endif | |
| ifdef LTLIBRARY | |
| $(LTLIBRARY) : $(SUBDIRS) $(LTOBJECTS) | |
| @echo " [LD] $*" | |
| $(Q)$(LTLINK) $(LTLDFLAGS) -o $(LTLIBRARY) $(LTOBJECTS) $(LTLIBS) | |
| %.lo: %.c | |
| @echo " [CC] $@" | |
| $(Q)$(LTCOMPILE) -c $< | |
| $(Q)$(CHECK_CMD) $(CFLAGS) $< | |
| else | |
| %.o: %.c | |
| @echo " [CC] $@" | |
| $(Q)$(CC) $(CFLAGS) -c $< | |
| $(Q)$(CHECK_CMD) $(CFLAGS) $< | |
| endif | |
| endif | |
| ifdef POTHEAD | |
| %.pot: $(XGETTEXTFILES) | |
| $(XGETTEXT) --language=C --keyword=_ -o $@ $(XGETTEXTFILES) | |
| # 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 # _BUILDRULES_INCLUDED_ | |
| $(_FORCE): | |
| # dependency build is automatic, relies on gcc -MM to generate. | |
| .PHONY : depend | |
| MAKEDEP := $(MAKEDEPEND) $(CFLAGS) | |
| .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))) |