# (C) Copyright David Abrahams 2001. Permission to copy, use, modify, sell and # distribute this software is granted provided this copyright notice appears in # all copies. This software is provided "as is" without express or implied # warranty, and with no claim as to its suitability for any purpose. rule ungrist ( names * ) { local result ; for local name in $(names) { local stripped = [ MATCH ^<(.*)>$ : $(name) ] ; if ! $(stripped) { ECHO *** error: in ungrist $(names) ; EXIT *** $(name) is not of the form <.*> ; } result += $(stripped) ; } return $(result) ; } # Return the file of the caller of the rule that called caller-file. rule caller-file ( ) { local bt = [ BACKTRACE ] ; return $(bt[9]) ; } rule MkDir { # If dir exists, don't update it # Do this even for $(DOT). NOUPDATE $(<) ; if $(<) != $(DOT) && ! $($(<)-mkdir) { local s ; # Cheesy gate to prevent multiple invocations on same dir # MkDir1 has the actions # Arrange for jam dirs $(<)-mkdir = true ; MkDir1 $(<) ; Depends dirs : $(<) ; # Recursively make parent directories. # $(<:P) = $(<)'s parent, & we recurse until root s = $(<:P) ; if $(NT) { switch $(s) { case *: : s = ; case *:\\ : s = ; } } if $(s) && $(s) != $(<) { Depends $(<) : $(s) ; MkDir $(s) ; } else if $(s) { NOTFILE $(s) ; } } } actions MkDir1 { mkdir $(<) } actions piecemeal together existing Clean { rm $(>) } local rule __test__ ( ) { import assert ; assert.result foo bar : ungrist ; }