2005-04-17 02:20:36 +04:00
# ==========================================================================
# Cleaning up
# ==========================================================================
src := $( obj)
.PHONY : __clean
__clean :
2005-07-26 02:41:12 +04:00
# Shorthand for $(Q)$(MAKE) scripts/Makefile.clean obj=dir
# Usage:
# $(Q)$(MAKE) $(clean)=dir
clean := -f $( if $( KBUILD_SRC) ,$( srctree) /) scripts/Makefile.clean obj
2005-07-26 00:26:04 +04:00
# The filename Kbuild has precedence over Makefile
2005-07-28 00:11:01 +04:00
kbuild-dir := $( if $( filter /%,$( src) ) ,$( src) ,$( srctree) /$( src) )
i n c l u d e $( if $ ( wildcard $ ( kbuild -dir ) /Kbuild ) , $ ( kbuild -dir ) /Kbuild , $ ( kbuild -dir ) /Makefile )
2005-04-17 02:20:36 +04:00
# Figure out what we need to build from the various variables
# ==========================================================================
__subdir-y := $( patsubst %/,%,$( filter %/, $( obj-y) ) )
subdir-y += $( __subdir-y)
__subdir-m := $( patsubst %/,%,$( filter %/, $( obj-m) ) )
subdir-m += $( __subdir-m)
__subdir-n := $( patsubst %/,%,$( filter %/, $( obj-n) ) )
subdir-n += $( __subdir-n)
__subdir- := $( patsubst %/,%,$( filter %/, $( obj-) ) )
subdir- += $( __subdir-)
# Subdirectories we need to descend into
subdir-ym := $( sort $( subdir-y) $( subdir-m) )
subdir-ymn := $( sort $( subdir-ym) $( subdir-n) $( subdir-) )
# Add subdir path
subdir-ymn := $( addprefix $( obj) /,$( subdir-ymn) )
# build a list of files to remove, usually releative to the current
# directory
__clean-files := $( extra-y) $( EXTRA_TARGETS) $( always) \
$( targets) $( clean-files) \
$( host-progs) \
$( hostprogs-y) $( hostprogs-m) $( hostprogs-)
# as clean-files is given relative to the current directory, this adds
# a $(obj) prefix, except for absolute paths
__clean-files := $( wildcard \
$( addprefix $( obj) /, $( filter-out /%, $( __clean-files) ) ) \
$( filter /%, $( __clean-files) ) )
# as clean-dirs is given relative to the current directory, this adds
# a $(obj) prefix, except for absolute paths
__clean-dirs := $( wildcard \
$( addprefix $( obj) /, $( filter-out /%, $( clean-dirs) ) ) \
$( filter /%, $( clean-dirs) ) )
# ==========================================================================
quiet_cmd_clean = CLEAN $( obj)
cmd_clean = rm -f $( __clean-files)
quiet_cmd_cleandir = CLEAN $( __clean-dirs)
cmd_cleandir = rm -rf $( __clean-dirs)
__clean : $( subdir -ymn )
i f n e q ( $( strip $ ( __clean -files ) ) , )
+$( call cmd,clean)
e n d i f
i f n e q ( $( strip $ ( __clean -dirs ) ) , )
+$( call cmd,cleandir)
e n d i f
i f n e q ( $( strip $ ( clean -rule ) ) , )
+$( clean-rule)
e n d i f
@:
# ===========================================================================
# Generic stuff
# ===========================================================================
# Descending
# ---------------------------------------------------------------------------
.PHONY : $( subdir -ymn )
$(subdir-ymn) :
$( Q) $( MAKE) $( clean) = $@
# If quiet is set, only print short version of command
cmd = @$( if $( $( quiet) cmd_$( 1) ) ,echo ' $($(quiet)cmd_$(1))' && ) $( cmd_$( 1) )