2006-06-18 14:58:39 +04:00
# ==========================================================================
# Installing headers
#
2008-06-15 23:41:09 +04:00
# header-y - list files to be installed. They are preprocessed
# to remove __KERNEL__ section of the file
# objhdr-y - Same as header-y but for generated files
2006-06-18 14:58:39 +04:00
#
# ==========================================================================
2008-06-15 23:41:09 +04:00
# called may set destination dir (when installing to asm/)
2006-06-18 14:58:39 +04:00
_dst := $( if $( dst) ,$( dst) ,$( obj) )
2008-06-05 21:19:47 +04:00
kbuild-file := $( srctree) /$( obj) /Kbuild
i n c l u d e $( kbuild -file )
2006-06-18 14:58:39 +04:00
2009-04-10 10:52:43 +04:00
_dst := $( if $( destination-y) ,$( destination-y) ,$( _dst) )
2008-06-05 21:19:47 +04:00
i n c l u d e s c r i p t s / K b u i l d . i n c l u d e
2006-09-25 01:15:14 +04:00
2008-06-15 23:41:09 +04:00
install := $( INSTALL_HDR_PATH) /$( _dst)
2006-06-18 14:58:39 +04:00
2010-08-14 12:22:58 +04:00
header-y := $( sort $( header-y) )
2008-06-15 23:41:09 +04:00
subdirs := $( patsubst %/,%,$( filter %/, $( header-y) ) )
header-y := $( filter-out %/, $( header-y) )
2006-09-25 01:15:14 +04:00
2008-06-15 23:41:09 +04:00
# files used to track state of install/check
install-file := $( install) /.install
check-file := $( install) /.check
2006-09-25 01:15:14 +04:00
2008-06-15 23:41:09 +04:00
# all headers files for this dir
all-files := $( header-y) $( objhdr-y)
input-files := $( addprefix $( srctree) /$( obj) /,$( header-y) ) \
$( addprefix $( objtree) /$( obj) /,$( objhdr-y) )
output-files := $( addprefix $( install) /, $( all-files) )
2006-09-25 01:15:14 +04:00
2008-06-15 23:41:09 +04:00
# Work out what needs to be removed
oldheaders := $( patsubst $( install) /%,%,$( wildcard $( install) /*.h) )
unwanted := $( filter-out $( all-files) ,$( oldheaders) )
2006-06-18 14:58:39 +04:00
2008-06-15 23:41:09 +04:00
# Prefix unwanted with full paths to $(INSTALL_HDR_PATH)
unwanted-file := $( addprefix $( install) /, $( unwanted) )
2006-09-25 01:15:14 +04:00
2008-06-15 23:41:09 +04:00
printdir = $( patsubst $( INSTALL_HDR_PATH) /%/,%,$( dir $@ ) )
2006-06-18 15:02:10 +04:00
2008-06-15 23:41:09 +04:00
quiet_cmd_install = INSTALL $( printdir) ( $( words $( all-files) ) \
file$( if $( word 2, $( all-files) ) ,s) )
2008-06-16 23:29:38 +04:00
cmd_install = \
$( PERL) $< $( srctree) /$( obj) $( install) $( SRCARCH) $( header-y) ; \
$( PERL) $< $( objtree) /$( obj) $( install) $( SRCARCH) $( objhdr-y) ; \
touch $@
2006-06-18 14:58:39 +04:00
2008-06-15 23:41:09 +04:00
quiet_cmd_remove = REMOVE $( unwanted)
cmd_remove = rm -f $( unwanted-file)
2006-06-18 14:58:39 +04:00
2008-06-15 23:41:09 +04:00
quiet_cmd_check = CHECK $( printdir) ( $( words $( all-files) ) files)
2009-06-05 16:11:09 +04:00
# Headers list can be pretty long, xargs helps to avoid
# the "Argument list too long" error.
cmd_check = for f in $( all-files) ; do \
echo " $( install) / $$ {f} " ; done \
| xargs \
$( PERL) $< $( INSTALL_HDR_PATH) /include $( SRCARCH) ; \
2008-06-15 23:41:09 +04:00
touch $@
2006-09-25 01:15:14 +04:00
2008-06-15 23:41:09 +04:00
PHONY += __headersinst __headerscheck
2006-09-25 01:15:14 +04:00
2008-06-15 23:41:09 +04:00
i f n d e f H D R C H E C K
# Rules for installing headers
__headersinst : $( subdirs ) $( install -file )
@:
2006-09-25 01:15:14 +04:00
2008-06-15 23:41:09 +04:00
targets += $( install-file)
$(install-file) : scripts /headers_install .pl $( input -files ) FORCE
$( if $( unwanted) ,$( call cmd,remove) ,)
$( if $( wildcard $( dir $@ ) ) ,,$( shell mkdir -p $( dir $@ ) ) )
$( call if_changed,install)
2006-09-25 01:15:14 +04:00
2006-06-18 15:02:10 +04:00
e l s e
2008-06-15 23:41:09 +04:00
__headerscheck : $( subdirs ) $( check -file )
@:
2006-06-18 14:58:39 +04:00
2008-06-15 23:41:09 +04:00
targets += $( check-file)
$(check-file) : scripts /headers_check .pl $( output -files ) FORCE
$( call if_changed,check)
2006-06-18 14:58:39 +04:00
2008-06-15 23:41:09 +04:00
e n d i f
2006-09-25 01:15:14 +04:00
2008-06-15 23:41:09 +04:00
# Recursion
hdr-inst := -rR -f $( srctree) /scripts/Makefile.headersinst obj
.PHONY : $( subdirs )
$(subdirs) :
$( Q) $( MAKE) $( hdr-inst) = $( obj) /$@ dst = $( _dst) /$@
2006-06-18 14:58:39 +04:00
2008-06-15 23:41:09 +04:00
targets := $( wildcard $( sort $( targets) ) )
cmd_files := $( wildcard \
$( foreach f,$( targets) ,$( dir $( f) ) .$( notdir $( f) ) .cmd) )
2008-06-05 18:52:15 +04:00
2008-06-15 23:41:09 +04:00
i f n e q ( $( cmd_files ) , )
include $( cmd_files)
2006-06-18 14:58:39 +04:00
e n d i f
2008-06-15 23:41:09 +04:00
.PHONY : $( PHONY )
PHONY += FORCE
FORCE : ;