# 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

clean clobber : $(addsuffix -clean,$(SUBDIRS))
	@rm -f $(DIRT) .ltdep .dep
	@rm -fr $(DIRDIRT)
%-clean:
	@echo "Cleaning $*"
	$(Q)$(MAKE) $(MAKEOPTS) -C $* clean

ifdef HDR_SUBDIRS
.PHONY: .xfs

headers: $(addsuffix -headers, $(HDR_SUBDIRS))

%-headers: .xfs
	@echo "   [HEADERS] $*"
	$(Q)$(MAKE) $(MAKEOPTS) -C $* NODEP=1 install-headers

.xfs:
	@mkdir -p include/xfs
endif

# Never blow away subdirs
ifdef SUBDIRS
.PRECIOUS: $(SUBDIRS)
.PHONY: $(SUBDIRS)

$(SUBDIRS):
	@echo "Building $@"
	$(Q)$(MAKE) $(MAKEOPTS) -q -C $@ || $(MAKE) $(MAKEOPTS) -C $@
endif

ifndef CHECK_CMD
CHECK_CMD = @true
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
$(POTHEAD): $(XGETTEXTFILES)
	@echo "    [GETTXT] $@"
	$(Q)$(XGETTEXT) --language=C --keyword=_ --keyword=N_ -o $@ $(XGETTEXTFILES)

# Update translations
update-po: $(POTHEAD) $(wildcard $(TOPDIR)/po/*.po)
	catalogs="$(wildcard $(TOPDIR)/po/*.po)"; \
	for cat in $$catalogs; do \
	  lang=`basename $$cat .po`; \
	  mv $$lang.po $$lang.old.po; \
	  echo "$$lang:"; \
	  if $(MSGMERGE) $$lang.old.po $(POTHEAD) -o $$lang.po; then \
	    rm -f $$lang.old.po; \
	  else \
	    echo "msgmerge for $$lang failed!"; \
	    rm -f $$lang.po; \
	    mv $$lang.old.po $$lang.po; \
	  fi; \
	done

%.mo: %.po
	@echo "    [MSGFMT] $@"
	$(Q)$(MSGFMT) -c --statistics -o $@ $<
endif

endif # _BUILDRULES_INCLUDED_

$(_FORCE):

# dependency build is automatic, relies on gcc -MM to generate.
#
# This is a bit messy. It regenerates the dependencies on each build so
# that we catch files being added and removed. There are other ways of doing
# this (e.g. per-file dependency files) but that requires more in-depth changes
# to the build system. Compile time is not an issue for us, so the
# rebuild on every make invocation isn't a problem we need to care about. Just
# do it silently so it doesn't make the build unnecessarily noisy.

.PHONY : depend ltdepend

MAKEDEP := $(MAKEDEPEND) $(CFLAGS)

ltdepend: rmltdep .ltdep

rmltdep:
	$(Q)rm -f .ltdep

.ltdep: $(CFILES) $(HFILES)
	$(Q)$(MAKEDEP) $(CFILES) | $(SED) -e 's,^\([^:]*\)\.o,\1.lo,' > .ltdep

depend: rmdep .dep

rmdep:
	$(Q)rm -f .dep

.dep: $(CFILES) $(HFILES)
	$(Q)$(MAKEDEP) $(CFILES) > .dep
