Hi, I took the wiki's Vim tip to build a module from within Vim and enhanced it to compile the current source file (and only that) in both, dmake and gbuild modules. If the current file is a Makefile, the entire module is built using make. If the current file is build.lst, the entire module is built using build. Should work (can't test at the moment due to a dying graphics adapter) also with a detached gvim where sourcing the environment is needed first. Attached. Enjoy Eike -- PGP/OpenPGP/GnuPG encrypted mail preferred in all private communication. Key ID: 0x293C05FD - 997A 4C60 CE41 0149 0DB3 9E96 2F1A D073 293C 05FD
" Call appropriate makeprg with Ctrl+K map <C-K> :call Make()<CR> if $SOLARENV == "" " Normal makeprg, not in LibreOffice/OpenOffice.org environment function Make() make endfun else " The root of the directory where we stop going further up, excluding. " For example, if /libo/core is the tree's root, the root of that is /libo let s:dir_root = fnamemodify( $SRC_ROOT, ":h" ) function DirLimit( dir ) return a:dir == s:dir_root endfunction function GetDotPath() let l:dir = "." while !DirLimit( l:dir ) && !filereadable( l:dir . "/Makefile" ) && !filereadable( l:dir . "/prj/build.lst" ) let l:dir .= "/.." endwhile if DirLimit( l:dir ) let l:dir = "." else " get rid of first ./ " The loop above could be changed to make this unnecessary, but " as is it is identical to the one in GetModuleRoot() let l:dir = substitute( dir, "\./", "", "" ) endif return l:dir endfunction function GetModuleRoot() let l:mods = ":p:h" let l:dir = expand( "%" . l:mods ) while !DirLimit( l:dir ) && !filereadable( l:dir . "/Makefile" ) && !filereadable( l:dir . "/prj/build.lst" ) let l:mods .= ":h" let l:dir = expand( "%" . l:mods ) endwhile if DirLimit( l:dir ) let l:dir = expand( "%:p:h" ) endif return l:dir endfunction function Make() " cd into current file's directory before obtaining module's root let l:my_local_path = expand("%:h") if (l:my_local_path == "") let l:my_local_path = "." endif exec 'lcd ' . l:my_local_path if has("gui_running") " Source environment for detached gvim. Use ENV.$INPATH instead of " Env.Host.sh when building for more than one platform and " ln -s Env.Host.sh ENV.$INPATH " or something similar. let l:mymake = "source $SRC_ROOT/Env.Host.sh && " else let l:mymake = "" endif let l:jobs = "1" " define how many jobs you want with make let l:module = GetModuleRoot() " Define the make tool, order is significant as a Makefile exists in " the project's root returned as module if none exists in the module. if expand( "%:t" ) == "Makefile" " If the current file is a Makefile, gbuild the entire module. exec 'lcd ' . l:module let l:mymake .= "make -sr -j" . l:jobs . " wall=true debug=true" elseif expand( "%:t" ) == "build.lst" " If the current file is a build.lst, dmake the entire module. let l:mymake .= "build.pl wall=true debug=true -P2 -- -P3" elseif filereadable( "makefile.mk" ) let l:mymake .= "dmake wall=true debug=true " . GetDotPath() . "/$INPATH/slo/%:t:r.obj" elseif filereadable( l:module . "/Makefile" ) exec 'lcd ' . l:module " Pass target as full path constructed of now relative part. let l:mymake .= "make -sr -j" . l:jobs . " wall=true debug=true $WORKDIR/CxxObject/" . fnamemodify( l:module, ":t" ) . "/%:.:h/%:t:r.o" else let l:mymake .= "build.pl wall=true debug=true -P2 -- -P3" endif let &makeprg = l:mymake make endfunction endif
Attachment:
pgp247GZc_LtF.pgp
Description: PGP signature