|
|
- # -*- mode: sh; sh-indentation: 4; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
- # Almost all code borrowed from Zshell's _make function
- #
- # Copyright (c) 2018 Sebastian Gniazdowski
-
- local -a TARGETS
-
- .make-expandVars() {
- local open close var val front='' rest=$1
-
- while [[ $rest == (#b)[^$]#($)* ]]; do
- front=$front${rest[1,$mbegin[1]-1]}
- rest=${rest[$mbegin[1],-1]}
-
- case $rest[2] in
- ($) # '$$'. may not appear in target and variable's value
- front=$front\$\$
- rest=${rest[3,-1]}
- continue
- ;;
- (\() # Variable of the form $(foobar)
- open='('
- close=')'
- ;;
- ({) # ${foobar}
- open='{'
- close='}'
- ;;
- ([[:alpha:]]) # $foobar. This is exactly $(f)oobar.
- open=''
- close=''
- var=$rest[2]
- ;;
- (*) # bad parameter name
- print -- $front$rest
- return 1
- ;;
- esac
-
- if [[ -n $open ]]; then
- if [[ $rest == \$$open(#b)([[:alnum:]_]##)(#B)$close* ]]; then
- var=$match
- else # unmatched () or {}, or bad parameter name
- print -- $front$rest
- return 1
- fi
- fi
-
- val=''
- if [[ -n ${VAR_ARGS[(i)$var]} ]]; then
- val=${VAR_ARGS[$var]}
- else
- if [[ -n $opt_args[(I)(-e|--environment-overrides)] ]]; then
- if [[ $parameters[$var] == scalar-export* ]]; then
- val=${(P)var}
- elif [[ -n ${VARIABLES[(i)$var]} ]]; then
- val=${VARIABLES[$var]}
- fi
- else
- if [[ -n ${VARIABLES[(i)$var]} ]]; then
- val=${VARIABLES[$var]}
- elif [[ $parameters[$var] == scalar-export* ]]; then
- val=${(P)var}
- fi
- fi
- fi
- rest=${rest//\$$open$var$close/$val}
- done
-
- print -- ${front}${rest}
- }
-
-
- .make-parseMakefile () {
- local input var val target dep TAB=$'\t' tmp IFS=
-
- while read input
- do
- case "$input " in
- # TARGET: dependencies
- # TARGET1 TARGET2 TARGET3: dependencies
- ([[*?[:alnum:]$][^$TAB:=%]#:[^=]*)
- target=$(.make-expandVars ${input%%:*})
- TARGETS+=( ${(z)target} )
- ;;
- esac
- done
- }
-
- if [[ -z "${FAST_HIGHLIGHT[chroma-make-cache]}" || $(( EPOCHSECONDS - FAST_HIGHLIGHT[chroma-make-cache-born-at] )) -gt 7 ]]; then
- .make-parseMakefile
- FAST_HIGHLIGHT[chroma-make-cache-born-at]="$EPOCHSECONDS"
- FAST_HIGHLIGHT[chroma-make-cache]="${(j:;:)TARGETS}"
- fi
-
- reply2=( "${(s:;:)FAST_HIGHLIGHT[chroma-make-cache]}" )
-
- # vim:ft=zsh:et
|