Commit 94869f86 authored by Sam Ravnborg's avatar Sam Ravnborg

kbuild: Accept absolute paths in clean-files and introduce clean-dirs

Teach kbuild to accept absolute paths in clean-files. This avoids using
clean-rules in several places.
Introduced clean-dirs to delete complete directories.
Kept clean-rule - but do not print anything when used.
Cleaned up a few places now the infrastructure are improved.
Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
parent cb4f38e1
...@@ -185,9 +185,7 @@ clean-files := $(DOCBOOKS) \ ...@@ -185,9 +185,7 @@ clean-files := $(DOCBOOKS) \
$(patsubst %.sgml, %.9, $(DOCBOOKS)) \ $(patsubst %.sgml, %.9, $(DOCBOOKS)) \
$(C-procfs-example) $(C-procfs-example)
ifneq ($(wildcard $(patsubst %.html,%,$(HTML))),) clean-dirs := $(patsubst %.sgml,%,$(DOCBOOKS))
clean-rule := rm -rf $(wildcard $(patsubst %.html,%,$(HTML)))
endif
#man put files in man subdir - traverse down #man put files in man subdir - traverse down
subdir- := man/ subdir- := man/
...@@ -547,8 +547,17 @@ Additional files can be specified in kbuild makefiles by use of $(clean-files). ...@@ -547,8 +547,17 @@ Additional files can be specified in kbuild makefiles by use of $(clean-files).
clean-files := devlist.h classlist.h clean-files := devlist.h classlist.h
When executing "make clean", the two files "devlist.h classlist.h" will When executing "make clean", the two files "devlist.h classlist.h" will
be deleted. Kbuild knows that files specified by $(clean-files) are be deleted. Kbuild will assume files to be in same relative directory as the
located in the same directory as the makefile. Makefile except if an absolute path is specified (path starting with '/').
To delete a directory hirachy use:
Example:
#scripts/package/Makefile
clean-dirs := $(objtree)/debian/
This will delete the directory debian, including all subdirectories.
Kbuild will assume the directories to be in the same relative path as the
Makefile if no absolute path is specified (path does not start with '/').
Usually kbuild descends down in subdirectories due to "obj-* := dir/", Usually kbuild descends down in subdirectories due to "obj-* := dir/",
but in the architecture makefiles where the kbuild infrastructure but in the architecture makefiles where the kbuild infrastructure
......
...@@ -29,21 +29,35 @@ subdir-ymn := $(sort $(subdir-ym) $(subdir-n) $(subdir-)) ...@@ -29,21 +29,35 @@ subdir-ymn := $(sort $(subdir-ym) $(subdir-n) $(subdir-))
# Add subdir path # Add subdir path
subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn)) subdir-ymn := $(addprefix $(obj)/,$(subdir-ymn))
__clean-files := $(wildcard $(addprefix $(obj)/, \ __clean-files := $(extra-y) $(EXTRA_TARGETS) $(always) $(host-progs) \
$(extra-y) $(EXTRA_TARGETS) $(always) $(host-progs) \ $(targets) $(clean-files)
$(targets) $(clean-files))) __clean-files := $(wildcard \
$(addprefix $(obj)/, $(filter-out /%, $(__clean-files))) \
$(filter /%, $(__clean-files)))
__clean-dirs := $(wildcard \
$(addprefix $(obj)/, $(filter-out /%, $(clean-dirs))) \
$(filter /%, $(clean-dirs)))
# ========================================================================== # ==========================================================================
quiet_cmd_clean = CLEAN $(obj) quiet_cmd_clean = CLEAN $(obj)
cmd_clean = rm -f $(__clean-files); $(clean-rule) cmd_clean = rm -f $(__clean-files)
quiet_cmd_cleandir = CLEAN $(__clean-dirs)
cmd_cleandir = rm -rf $(__clean-dirs)
__clean: $(subdir-ymn) __clean: $(subdir-ymn)
ifneq ($(strip $(__clean-files) $(clean-rule)),) ifneq ($(strip $(__clean-files)),)
+$(call cmd,clean) +$(call cmd,clean)
else
@:
endif endif
ifneq ($(strip $(__clean-dirs)),)
+$(call cmd,cleandir)
endif
ifneq ($(strip $(clean-rule)),)
+$(clean-rule)
endif
@:
# =========================================================================== # ===========================================================================
# Generic stuff # Generic stuff
......
...@@ -51,7 +51,7 @@ rpm-pkg rpm: $(objtree)/kernel.spec ...@@ -51,7 +51,7 @@ rpm-pkg rpm: $(objtree)/kernel.spec
$(RPM) --target $(UTS_MACHINE) -ta ../$(KERNELPATH).tar.gz $(RPM) --target $(UTS_MACHINE) -ta ../$(KERNELPATH).tar.gz
rm ../$(KERNELPATH).tar.gz rm ../$(KERNELPATH).tar.gz
clean-rule += rm -f $(objtree)/kernel.spec clean-files := $(objtree)/kernel.spec
# binrpm-pkg # binrpm-pkg
.PHONY: binrpm-pkg .PHONY: binrpm-pkg
...@@ -67,7 +67,7 @@ binrpm-pkg: $(objtree)/binkernel.spec ...@@ -67,7 +67,7 @@ binrpm-pkg: $(objtree)/binkernel.spec
$(RPM) --define "_builddir $(srctree)" --target $(UTS_MACHINE) -bb $< $(RPM) --define "_builddir $(srctree)" --target $(UTS_MACHINE) -bb $<
clean-rule += rm -f $(objtree)/binkernel.spec clean-files += $(objtree)/binkernel.spec
# Deb target # Deb target
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
...@@ -77,7 +77,7 @@ deb-pkg: ...@@ -77,7 +77,7 @@ deb-pkg:
$(MAKE) $(MAKE)
$(CONFIG_SHELL) $(srctree)/scripts/package/builddeb $(CONFIG_SHELL) $(srctree)/scripts/package/builddeb
clean-rule += && rm -rf $(objtree)/debian/ clean-dirs += $(objtree)/debian/
# Help text displayed when executing 'make help' # Help text displayed when executing 'make help'
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment