До цих пір ніде не бачив підтримку скриптів Boost Build v2 для редактора Vim. Незручно, бо цією системою я користуюся ледь не щодня. Отже, довелося поправити ситуацію самостійно.
Насправді, це дуже просто. Насамперед заводимо розпізнавання типу файлів у ftdetect/bbv2.vim
:
au BufNewFile,BufRead Jamfile setlocal filetype=bbv2
au BufNewFile,BufRead Jamroot setlocal filetype=bbv2
Потім розпізнаємо ключові слова у syntax/bbv2.vim
:
" Чутливість до реєстру
syn case match
" Розпізнаємо цілі BBv2
syn match bbv2Target "^\s*\(exe\|lib\|install\|alias\|actions\|notfile\|make\|import\|path-constant\|explicit\|local\|project\|run\|test-suite\|build-project\)\>"
" Деякі властивості
syn match bbv2Feature "\(<location>\|<include>\|<cflags>\|<linkflags>\|<library>\|<define>\|<file>\)"
" Деякі ключові слова
syn match bbv2BuiltIn "\<\(glob-tree\|glob\|SHELL\|run\)\>"
" Змінні на зразок $(THIS) чи $(THAT)
syn match bbv2Variable "\$([^)]\+)"
" Коментарі
syn region bbv2Comment start="#" end="$"
" Розділ actions містить команди оболонки Unix
syn include @Shell syntax/sh.vim
syn region bbv2Actions start="^{$" end="^}$" keepend fold contains=@Shell
" Нарешті співставляємо розпізнані частини із відомими типами.
hi def link bbv2Comment Comment
hi def link bbv2Target Type
hi def link bbv2Feature Special
hi def link bbv2BuiltIn Keyword
hi def link bbv2Variable Identifier
І ось результат:
import notfile ;
############# Generic environment ###########
lib sys_gsmme : : <name>gsmme ;
lib sys_mysqlwrapped : : <name>mysqlwrapped ;
alias gsmme : sys_gsmme ;
alias libmysqlwrapped : sys_mysqlwrapped ;
############# VDNS environment ##############
# alias gsmme : $(VDNS_TOP)/src_gsmlib//libgsmme ; #gsmme
# alias libmysqlwrapped : $(VDNS_TOP)/src_mysqlwrapper//libmysqlwrapped ;
#############################################
path-constant BIN_DIR : . ;
# Main target.
exe mps
: main.cc
app//app_src common//common_src
;
install bin/stage
: mps
: <location>$(BIN_DIR)
;
install bin/stage2
: mps
: <location>$(VDNS_TOP)/binaries
;
# Black magic. Use this carefully.
notfile distclean : @distclean ;
actions distclean
{
echo "Cleaning..."
rm -rf `find . -name 'bin*'`
rm -rf `find . -name '*.log'`
rm -rf `find . -name '*.bak'`
rm -rf `find . -name 'a.out'`
rm -rf lib*.so
rm -f mps
}
explicit distclean ;
# Another piece of the magic, white one. Use this to make sure
# everything works.
alias test : [ glob-tree test ] ;
explicit test ;