Mercurial > vim-unreal
annotate autoload/unreal.vim @ 11:06af9916ba7c default tip
Generate compilation database for clang by default
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Tue, 29 Aug 2023 13:07:20 -0700 |
| parents | b5040cfea052 |
| children |
| rev | line source |
|---|---|
| 0 | 1 " unreal.vim - Work with the Unreal Engine in Vim |
| 2 | |
| 3 " Utilities {{{ | |
| 4 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
5 let s:basedir = expand('<sfile>:p:h:h') |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
6 |
| 0 | 7 function! unreal#throw(message) |
| 8 throw "unreal: ".a:message | |
| 9 endfunction | |
| 10 | |
| 11 function! unreal#error(message) | |
| 12 let v:errmsg = "unreal: ".a:message | |
| 13 echoerr v:errmsg | |
| 14 endfunction | |
| 15 | |
| 16 function! unreal#warning(message) | |
| 17 echohl WarningMsg | |
| 18 echom "unreal: ".a:message | |
| 19 echohl None | |
| 20 endfunction | |
| 21 | |
| 22 function! unreal#info(message) | |
| 23 echom "unreal: ".a:message | |
| 24 endfunction | |
| 25 | |
| 26 function! unreal#trace(message) | |
| 27 if g:unreal_trace | |
| 28 echom "unreal: ".a:message | |
| 29 endif | |
| 30 endfunction | |
| 31 | |
| 32 if has('win32') || has('win64') | |
| 33 let s:iswin = 1 | |
| 34 let s:dirsep = "\\" | |
| 35 let s:scriptext = ".bat" | |
| 36 else | |
| 37 let s:iswin = 0 | |
| 38 let s:dirsep = "/" | |
| 39 let s:scriptext = ".sh" | |
| 40 endif | |
| 41 | |
| 42 " }}} | |
| 43 | |
| 44 " Modules {{{ | |
| 45 | |
| 46 function! unreal#call_modules(funcname, ...) abort | |
| 47 for module in g:unreal_modules | |
| 48 let l:fullfuncname = module.'#'.a:funcname | |
| 49 if exists('*'.l:fullfuncname) | |
| 50 call unreal#trace("Calling module function: ".l:fullfuncname) | |
| 51 call call(l:fullfuncname, a:000) | |
| 52 else | |
| 53 call unreal#trace("Skipping ".l:fullfuncname.": doesn't exist.") | |
| 54 endif | |
| 55 endfor | |
| 56 endfunction | |
| 57 | |
| 58 " }}} | |
| 59 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
60 " {{{ Scripts and Cache Files |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
61 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
62 let s:scriptsdir = s:basedir.'\scripts' |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
63 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
64 function! unreal#get_vim_script_path(scriptname) abort |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
65 return s:scriptsdir.s:dirsep.a:scriptname.s:scriptext |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
66 endfunction |
| 0 | 67 |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
68 function! unreal#get_cache_path(name, ...) abort |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
69 if empty(g:unreal_branch_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
70 call unreal#throw("No UE branch defined") |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
71 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
72 let l:cache_dir = g:unreal_branch_dir.s:dirsep.".vimunreal" |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
73 let l:path = l:cache_dir.s:dirsep.a:name |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
74 if a:0 && a:1 && !isdirectory(l:cache_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
75 call mkdir(l:cache_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
76 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
77 return l:path |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
78 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
79 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
80 " }}} |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
81 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
82 " Branch and Project Management {{{ |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
83 |
|
7
59d75d8c254f
Don't complain on startup if no UE branch is found.
Ludovic Chabant <ludovic@chabant.com>
parents:
6
diff
changeset
|
84 function! unreal#find_branch_dir_and_project(silent) abort |
|
59d75d8c254f
Don't complain on startup if no UE branch is found.
Ludovic Chabant <ludovic@chabant.com>
parents:
6
diff
changeset
|
85 call unreal#find_branch_dir(a:silent) |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
86 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
87 if !empty(g:unreal_branch_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
88 call unreal#find_project() |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
89 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
90 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
91 |
|
7
59d75d8c254f
Don't complain on startup if no UE branch is found.
Ludovic Chabant <ludovic@chabant.com>
parents:
6
diff
changeset
|
92 function! unreal#find_branch_dir(silent) abort |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
93 if !empty(g:unreal_branch_dir_finder) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
94 let l:branch_dir = call(g:unreal_branch_dir_finder) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
95 else |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
96 let l:branch_dir = unreal#default_branch_dir_finder(getcwd()) |
| 0 | 97 endif |
| 98 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
99 if !empty(l:branch_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
100 call unreal#set_branch_dir(l:branch_dir, 1) " Set branch silently. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
101 else |
|
7
59d75d8c254f
Don't complain on startup if no UE branch is found.
Ludovic Chabant <ludovic@chabant.com>
parents:
6
diff
changeset
|
102 if a:silent |
|
59d75d8c254f
Don't complain on startup if no UE branch is found.
Ludovic Chabant <ludovic@chabant.com>
parents:
6
diff
changeset
|
103 call unreal#trace("No UE branch found") |
|
59d75d8c254f
Don't complain on startup if no UE branch is found.
Ludovic Chabant <ludovic@chabant.com>
parents:
6
diff
changeset
|
104 else |
|
59d75d8c254f
Don't complain on startup if no UE branch is found.
Ludovic Chabant <ludovic@chabant.com>
parents:
6
diff
changeset
|
105 call unreal#throw("No UE branch found!") |
|
59d75d8c254f
Don't complain on startup if no UE branch is found.
Ludovic Chabant <ludovic@chabant.com>
parents:
6
diff
changeset
|
106 endif |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
107 endif |
| 0 | 108 endfunction |
| 109 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
110 function! unreal#default_branch_dir_finder(path) abort |
| 0 | 111 let l:cur = a:path |
| 112 let l:prev = "" | |
| 113 while l:cur != l:prev | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
114 let l:markers = globpath(l:cur, g:unreal_branch_dir_marker, 0, 1) |
| 0 | 115 if !empty(l:markers) |
| 116 call unreal#trace("Found marker file: ".l:markers[0]) | |
| 117 return l:cur | |
| 118 endif | |
| 119 let l:prev = l:cur | |
| 120 let l:cur = fnamemodify(l:cur, ':h') | |
| 121 endwhile | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
122 return "" |
| 0 | 123 endfunction |
| 124 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
125 function! unreal#set_branch_dir(branch_dir, ...) abort |
| 0 | 126 " Strip any end slashes on the directory path. |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
127 let l:prev_dir = g:unreal_branch_dir |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
128 let g:unreal_branch_dir = fnamemodify(a:branch_dir, ':s?[/\\]$??') |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
129 let l:branch_was_set = !empty(g:unreal_branch_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
130 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
131 " Update our projects infos. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
132 let g:unreal_branch_projects = unreal#get_branch_projects(g:unreal_branch_dir) |
| 0 | 133 |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
134 " Notify our modules. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
135 if l:branch_was_set |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
136 call unreal#call_modules('on_branch_changed', g:unreal_branch_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
137 else |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
138 call unreal#call_modules('on_branch_cleared') |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
139 endif |
| 0 | 140 |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
141 " Auto-set the Vimcrosoft solution if that plugin is installed. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
142 " TODO: move this into a module. |
| 0 | 143 if exists(":VimcrosoftSetSln") |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
144 if l:branch_was_set |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
145 let l:sln_files = glob(g:unreal_branch_dir.s:dirsep."*.sln", 0, 1) |
| 0 | 146 if !empty(l:sln_files) |
|
1
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
147 " Vimcrosoft might have auto-found the same solution, already, |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
148 " in which case we don't have to set it. |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
149 if g:vimcrosoft_current_sln != l:sln_files[0] |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
150 execute "VimcrosoftSetSln ".fnameescape(l:sln_files[0]) |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
151 endif |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
152 " Make sure we have our extra compiler args ready. |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
153 call unreal#generate_vimcrosoft_extra_args(l:sln_files[0]) |
| 0 | 154 endif |
| 155 else | |
| 156 execute "VimcrosoftUnsetSln" | |
| 157 endif | |
| 158 endif | |
| 159 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
160 let l:silent = a:0 && a:1 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
161 if !l:silent |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
162 if l:branch_was_set |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
163 echom "UE branch set to: ".g:unreal_branch_dir |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
164 else |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
165 echom "UE branch cleared" |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
166 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
167 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
168 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
169 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
170 function! unreal#find_project() abort |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
171 if empty(g:unreal_branch_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
172 call unreal#throw("No UE branch set!") |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
173 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
174 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
175 if len(g:unreal_branch_projects) == 0 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
176 call unreal#throw("No UE projects found in branch: ".g:unreal_branch_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
177 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
178 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
179 let l:proj = "" |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
180 let l:cached_proj_file = unreal#get_cache_path("LastProject.txt") |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
181 try |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
182 let l:cached_proj = readfile(l:cached_proj_file, '', 1) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
183 catch |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
184 let l:cached_proj = [] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
185 endtry |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
186 if len(l:cached_proj) > 0 && !empty(l:cached_proj[0]) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
187 if has_key(g:unreal_branch_projects, l:cached_proj[0]) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
188 let l:proj = l:cached_proj[0] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
189 call unreal#trace("Found previously set project: ".l:proj) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
190 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
191 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
192 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
193 if l:proj == "" |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
194 let l:projnames = sort(keys(g:unreal_branch_projects)) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
195 if len(l:projnames) > 0 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
196 let l:proj = l:projnames[0] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
197 call unreal#trace("Picking first project in branch: ".l:proj) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
198 endif |
| 0 | 199 endif |
| 200 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
201 if l:proj == "" |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
202 call unreal#throw("No UE projects found in branch: ".g:unreal_branch_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
203 else |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
204 call unreal#set_project(l:proj) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
205 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
206 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
207 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
208 function! unreal#set_project(projname) abort |
|
8
5cd58b3fd93d
Clean-up project name before setting it, and do proper error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
7
diff
changeset
|
209 let l:clean_projname = trim(a:projname) |
|
5cd58b3fd93d
Clean-up project name before setting it, and do proper error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
7
diff
changeset
|
210 if !has_key(g:unreal_branch_projects, l:clean_projname) |
|
5cd58b3fd93d
Clean-up project name before setting it, and do proper error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
7
diff
changeset
|
211 call unreal#throw("No project '".l:clean_projname."' in the current branch. Branch projects are: ".string(keys(g:unreal_branch_projects))) |
|
5cd58b3fd93d
Clean-up project name before setting it, and do proper error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
7
diff
changeset
|
212 endif |
|
5cd58b3fd93d
Clean-up project name before setting it, and do proper error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
7
diff
changeset
|
213 |
|
5cd58b3fd93d
Clean-up project name before setting it, and do proper error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
7
diff
changeset
|
214 let g:unreal_project = l:clean_projname |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
215 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
216 let l:cached_proj_file = unreal#get_cache_path("LastProject.txt", 1) " Auto-create cache dir. |
|
8
5cd58b3fd93d
Clean-up project name before setting it, and do proper error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
7
diff
changeset
|
217 call writefile([l:clean_projname], l:cached_proj_file) |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
218 |
|
8
5cd58b3fd93d
Clean-up project name before setting it, and do proper error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
7
diff
changeset
|
219 call unreal#trace("Set UE project: ".l:clean_projname) |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
220 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
221 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
222 function! unreal#get_branch_projects(branch_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
223 if empty(a:branch_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
224 return {} |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
225 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
226 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
227 " Reset the known projects. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
228 let l:projs = {} |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
229 call unreal#trace("Finding projects in branch: ".a:branch_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
230 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
231 " Find project files in the branch directory. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
232 let l:dirs = readdir(a:branch_dir) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
233 for l:dir in l:dirs |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
234 let l:dirpath = a:branch_dir.s:dirsep.l:dir.s:dirsep |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
235 let l:uprojfiles = glob(l:dirpath."*.uproject", 0, 1) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
236 if len(l:uprojfiles) > 0 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
237 let l:lines = readfile(l:uprojfiles[0]) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
238 let l:jsonraw = join(l:lines, "\n") |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
239 let l:json = json_decode(l:jsonraw) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
240 let l:json["Path"] = l:uprojfiles[0] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
241 let l:projname = fnamemodify(l:uprojfiles[0], ':t:r') |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
242 let l:projs[l:projname] = l:json |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
243 call unreal#trace("Found project: ".l:projname) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
244 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
245 endfor |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
246 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
247 return l:projs |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
248 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
249 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
250 function! unreal#get_project_info(proppath) abort |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
251 if empty(g:unreal_project) || empty(g:unreal_branch_projects) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
252 call unreal#throw("No project(s) set!") |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
253 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
254 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
255 let l:proj = g:unreal_branch_projects[g:unreal_project] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
256 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
257 let l:cur = l:proj |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
258 let l:propnames = split(a:proppath, '.') |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
259 for l:propname in l:propnames |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
260 if type(l:cur) == type([]) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
261 let l:cur = l:cur[str2nr(l:propname)] |
| 0 | 262 else |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
263 let l:cur = l:cur[l:propname] |
| 0 | 264 endif |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
265 endfor |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
266 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
267 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
268 function! unreal#find_project_module_of_type(project, module_type) abort |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
269 if empty(a:project) || empty(g:unreal_branch_projects) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
270 call unreal#throw("No project(s) set!") |
| 0 | 271 endif |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
272 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
273 let l:proj = g:unreal_branch_projects[a:project] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
274 for l:module in l:proj["Modules"] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
275 if get(l:module, "Type", "") == a:module_type |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
276 return copy(l:module) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
277 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
278 endfor |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
279 return {} |
| 0 | 280 endfunction |
| 281 | |
| 282 let s:extra_args_version = 1 | |
| 283 | |
| 284 function! unreal#generate_vimcrosoft_extra_args(solution) abort | |
|
9
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
285 let l:argdir = |
|
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
286 \fnamemodify(a:solution, ':p:h').s:dirsep.'.vimcrosoft' |
|
1
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
287 let l:argfile = |
|
9
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
288 \l:argdir.s:dirsep.fnamemodify(a:solution, ':t').'.flags' |
| 0 | 289 |
|
1
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
290 let l:do_regen = 0 |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
291 let l:version_line = "# version ".string(s:extra_args_version) |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
292 try |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
293 call unreal#trace("Checking for extra clang args file: ".l:argfile) |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
294 let l:lines = readfile(l:argfile) |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
295 if len(l:lines) < 1 |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
296 call unreal#trace("Extra clang args file is empty... regenerating") |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
297 let l:do_regen = 1 |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
298 elseif trim(l:lines[0]) != l:version_line |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
299 call unreal#trace("Extra clang args file is outdated... regenerating") |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
300 let l:do_regen = 1 |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
301 endif |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
302 catch |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
303 call unreal#trace("Extra clang args file doesn't exist... regenerating") |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
304 let l:do_regen = 1 |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
305 endtry |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
306 if l:do_regen |
|
9
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
307 if !isdirectory(l:argdir) |
|
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
308 call mkdir(l:argdir) |
|
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
309 endif |
|
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
310 |
|
1
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
311 let l:arglines = [ |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
312 \l:version_line, |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
313 \"-DUNREAL_CODE_ANALYZER" |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
314 \] |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
315 call writefile(l:arglines, l:argfile) |
|
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
316 endif |
| 0 | 317 endfunction |
| 318 | |
| 319 " }}} | |
| 320 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
321 " Configuration and Platform {{{ |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
322 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
323 let s:unreal_configs = [] |
|
9
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
324 let s:unreal_configs_map = {} |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
325 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
326 function! s:cache_unreal_configs() abort |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
327 if len(s:unreal_configs) == 0 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
328 for l:state in g:unreal_config_states |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
329 for l:target in g:unreal_config_targets |
|
9
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
330 let l:key = l:state.l:target |
|
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
331 call add(s:unreal_configs, l:key) |
|
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
332 let s:unreal_configs_map[l:key] = [l:state, l:target] |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
333 endfor |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
334 endfor |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
335 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
336 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
337 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
338 function! s:parse_config_state_and_target(config) abort |
|
9
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
339 let l:config = trim(a:config) |
| 0 | 340 |
|
9
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
341 for l:key in keys(s:unreal_configs_map) |
|
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
342 if l:config == l:key |
|
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
343 let [l:config_state, l:config_target] = s:unreal_configs_map[l:key] |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
344 break |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
345 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
346 endfor |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
347 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
348 if index(g:unreal_config_states, l:config_state) >= 0 || |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
349 \index(g:unreal_config_targets, l:config_target) >= 0 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
350 return [l:config_state, l:config_target] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
351 else |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
352 call unreal#throw("Invalid config state or target: ".l:config_state.l:config_target) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
353 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
354 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
355 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
356 function! unreal#set_config(config) abort |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
357 let [l:config_state, l:config_target] = s:parse_config_state_and_target(a:config) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
358 let g:unreal_config_state = l:config_state |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
359 let g:unreal_config_target = l:config_target |
| 0 | 360 endfunction |
| 361 | |
| 362 function! unreal#set_platform(platform) abort | |
|
9
b5040cfea052
Tweak how configs and targets are parsed and handled
Ludovic Chabant <ludovic@chabant.com>
parents:
8
diff
changeset
|
363 if index(g:unreal_platforms, trim(a:platform)) < 0 |
| 0 | 364 call unreal#throw("Invalid Unreal platform: ".a:platform) |
| 365 endif | |
| 366 let g:unreal_project_platform = a:platform | |
| 367 endfunction | |
| 368 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
369 " }}} |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
370 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
371 " Build {{{ |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
372 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
373 function! unreal#get_ubt_args(...) abort |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
374 " Start with modules we should always build. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
375 let l:mod_names = keys(g:unreal_auto_build_modules) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
376 let l:mod_args = copy(g:unreal_auto_build_modules) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
377 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
378 " Function arguments are: |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
379 " <Project> <Platform> <Config> [<...MainModuleOptions>] [<...GlobalOptions>] <?NoGlobalModules> |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
380 let l:project = g:unreal_project |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
381 if a:0 >= 1 && !empty(a:1) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
382 let l:project = a:1 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
383 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
384 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
385 let l:platform = g:unreal_platform |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
386 if a:0 >= 2 && !empty(a:2) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
387 let l:platform = a:2 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
388 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
389 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
390 let [l:config_state, l:config_target] = [g:unreal_config_state, g:unreal_config_target] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
391 if a:0 >= 3 && !empty(a:3) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
392 let [l:config_state, l:config_target] = s:parse_config_state_and_target(a:3) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
393 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
394 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
395 let l:mod_opts = [] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
396 if a:0 >= 4 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
397 if type(a:4) == type([]) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
398 let l:mod_opts = a:4 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
399 else |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
400 let l:mod_opts = [a:4] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
401 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
402 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
403 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
404 let l:global_opts = copy(g:unreal_auto_build_options) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
405 if a:0 >= 5 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
406 if type(a:5) == type([]) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
407 call extend(l:global_opts, a:5) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
408 else |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
409 call extend(l:global_opts, [a:5]) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
410 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
411 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
412 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
413 if a:0 >= 6 && a:6 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
414 let l:mod_names = [] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
415 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
416 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
417 " Find the appropriate module for our project. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
418 if l:config_target == "Editor" |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
419 let l:module = unreal#find_project_module_of_type(l:project, "Editor") |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
420 else |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
421 let l:module = unreal#find_project_module_of_type(l:project, "Runtime") |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
422 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
423 if empty(l:module) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
424 call unreal#throw("Can't find module for target '".l:config_target."' in project: ".l:project) |
| 0 | 425 endif |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
426 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
427 " Add the module's arguments to the list. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
428 call insert(l:mod_names, l:module["Name"], 0) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
429 let l:mod_args[l:module["Name"]] = l:mod_opts |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
430 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
431 " Build the argument list for our modules. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
432 let l:ubt_cmdline = [] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
433 for l:mod_name in l:mod_names |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
434 let l:mod_cmdline = '-Target="'. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
435 \l:mod_name.' '. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
436 \l:platform.' '. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
437 \l:config_state |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
438 let l:mod_arg = l:mod_args[l:mod_name] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
439 if !empty(l:mod_arg) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
440 let l:mod_cmdline .= ' '.join(l:mod_arg, ' ') |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
441 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
442 let l:mod_cmdline .= '"' |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
443 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
444 call add(l:ubt_cmdline, l:mod_cmdline) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
445 endfor |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
446 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
447 " Add any global options. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
448 call extend(l:ubt_cmdline, l:global_opts) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
449 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
450 return l:ubt_cmdline |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
451 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
452 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
453 function! unreal#build(bang, ...) abort |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
454 let g:__unreal_makeprg_script = "Build" |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
455 let g:__unreal_makeprg_args = call('unreal#get_ubt_args', a:000) |
|
6
613f13dc42f7
Support command bang for building.
Ludovic Chabant <ludovic@chabant.com>
parents:
2
diff
changeset
|
456 call unreal#run_make("ubuild", a:bang) |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
457 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
458 |
|
6
613f13dc42f7
Support command bang for building.
Ludovic Chabant <ludovic@chabant.com>
parents:
2
diff
changeset
|
459 function! unreal#rebuild(bang, ...) abort |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
460 let g:__unreal_makeprg_script = "Rebuild" |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
461 let g:__unreal_makeprg_args = call('unreal#get_ubt_args', a:000) |
|
6
613f13dc42f7
Support command bang for building.
Ludovic Chabant <ludovic@chabant.com>
parents:
2
diff
changeset
|
462 call unreal#run_make("ubuild", a:bang) |
| 0 | 463 endfunction |
| 464 | |
|
6
613f13dc42f7
Support command bang for building.
Ludovic Chabant <ludovic@chabant.com>
parents:
2
diff
changeset
|
465 function! unreal#clean(bang, ...) abort |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
466 let g:__unreal_makeprg_script = "Clean" |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
467 let g:__unreal_makeprg_args = call('unreal#get_ubt_args', a:000) |
|
6
613f13dc42f7
Support command bang for building.
Ludovic Chabant <ludovic@chabant.com>
parents:
2
diff
changeset
|
468 call unreal#run_make("ubuild", a:bang) |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
469 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
470 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
471 function! unreal#generate_compilation_database() abort |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
472 let g:__unreal_makeprg_script = "Build" |
|
11
06af9916ba7c
Generate compilation database for clang by default
Ludovic Chabant <ludovic@chabant.com>
parents:
9
diff
changeset
|
473 let g:__unreal_makeprg_args = unreal#get_ubt_args('', '', '', [], ['-allmodules', '-Mode=GenerateClangDatabase', '-Compiler=Clang'], 1) |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
474 call unreal#run_make("ubuild") |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
475 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
476 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
477 function! unreal#generate_project_files() abort |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
478 if !g:unreal_auto_generate_compilation_database |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
479 call unreal#run_make("ugenprojfiles") |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
480 else |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
481 " Generate a response file that will run both the project generation |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
482 " and the compilation database generation one after the other. Then we |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
483 " pass that to our little script wrapper. |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
484 let l:genscriptpath = shellescape( |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
485 \unreal#get_script_path("Engine/Build/BatchFiles/GenerateProjectFiles")) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
486 let l:buildscriptpath = shellescape( |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
487 \unreal#get_script_path("Engine/Build/BatchFiles/Build")) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
488 let l:buildscriptargs = |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
489 \unreal#get_ubt_args('', '', '', [], ['-allmodules', '-Mode=GenerateClangDatabase'], 1) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
490 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
491 let l:rsplines = [ |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
492 \l:genscriptpath, |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
493 \l:buildscriptpath.' '.join(l:buildscriptargs, ' ') |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
494 \] |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
495 let l:rsppath = tempname() |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
496 call unreal#trace("Writing response file: ".l:rsppath) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
497 call writefile(l:rsplines, l:rsppath) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
498 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
499 let g:__unreal_makeprg_args = l:rsppath |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
500 call unreal#run_make("uscriptwrapper") |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
501 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
502 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
503 |
| 0 | 504 " }}} |
| 505 | |
| 506 " Completion Functions {{{ | |
| 507 | |
| 508 function! s:add_unique_suggestion_trailing_space(suggestions) | |
| 509 " If there's only one answer, add a space so we can start typing the | |
| 510 " next argument right away. | |
| 511 if len(a:suggestions) == 1 | |
| 512 let a:suggestions[0] = a:suggestions[0] . ' ' | |
| 513 endif | |
| 514 return a:suggestions | |
| 515 endfunction | |
| 516 | |
| 517 function! s:filter_suggestions(arglead, suggestions) | |
| 518 let l:argpat = tolower(a:arglead) | |
| 519 let l:suggestions = filter(a:suggestions, | |
| 520 \{idx, val -> val =~? l:argpat}) | |
| 521 return s:add_unique_suggestion_trailing_space(l:suggestions) | |
| 522 endfunction | |
| 523 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
524 function! unreal#complete_projects(ArgLead, CmdLine, CursorPos) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
525 return s:filter_suggestions(a:ArgLead, keys(g:unreal_branch_projects)) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
526 endfunction |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
527 |
| 0 | 528 function! unreal#complete_platforms(ArgLead, CmdLine, CursorPos) |
| 529 return s:filter_suggestions(a:ArgLead, copy(g:unreal_platforms)) | |
| 530 endfunction | |
| 531 | |
| 532 function! unreal#complete_configs(ArgLead, CmdLine, CursorPos) | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
533 call s:cache_unreal_configs() |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
534 return s:filter_suggestions(a:ArgLead, copy(s:unreal_configs)) |
| 0 | 535 endfunction |
| 536 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
537 function! unreal#complete_build_args(ArgLead, CmdLine, CursorPos) |
| 0 | 538 let l:bits = split(a:CmdLine.'_', ' ') |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
539 let l:bits = l:bits[1:] " Remove the `UnrealBuild` command from the line. |
| 0 | 540 if len(l:bits) <= 1 |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
541 let l:suggestions = keys(g:unreal_branch_projects) |
| 0 | 542 elseif len(l:bits) == 2 |
| 543 let l:suggestions = copy(g:unreal_platforms) | |
| 544 elseif len(l:bits) == 3 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
545 call s:cache_unreal_configs() |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
546 let l:suggestions = s:unreal_configs |
| 0 | 547 elseif len(l:bits) >= 4 |
| 548 let l:suggestions = copy(g:unreal_build_options) | |
| 549 endif | |
| 550 return s:filter_suggestions(a:ArgLead, l:suggestions) | |
| 551 endfunction | |
| 552 | |
| 553 " }}} | |
| 554 | |
| 555 " Build System {{{ | |
| 556 | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
557 function! unreal#run_make(compilername, ...) abort |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
558 let l:bang = 0 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
559 if a:0 && a:1 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
560 let l:bang = 1 |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
561 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
562 |
| 0 | 563 execute "compiler ".a:compilername |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
564 |
| 0 | 565 if exists(':Make') " Support for vim-dispatch |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
566 if l:bang |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
567 Make! |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
568 else |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
569 Make |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
570 endif |
| 0 | 571 else |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
572 if l:bang |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
573 make! |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
574 else |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
575 make |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
576 endif |
| 0 | 577 endif |
| 578 endfunction | |
| 579 | |
| 580 " }}} | |
| 581 | |
| 582 " Unreal Scripts {{{ | |
| 583 | |
| 584 let s:builds_in_progress = [] | |
| 585 | |
| 586 function! unreal#get_script_path(scriptname, ...) abort | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
587 if s:iswin |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
588 let l:name = substitute(a:scriptname, '/', "\\", 'g') |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
589 else |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
590 let l:name = a:scriptname |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
591 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
592 return g:unreal_branch_dir.s:dirsep.l:name.s:scriptext |
| 0 | 593 endfunction |
| 594 | |
| 595 " }}} | |
| 596 | |
| 597 " Initialization {{{ | |
| 598 | |
| 599 function! unreal#init() abort | |
| 600 if g:unreal_auto_find_project | |
|
7
59d75d8c254f
Don't complain on startup if no UE branch is found.
Ludovic Chabant <ludovic@chabant.com>
parents:
6
diff
changeset
|
601 call unreal#find_branch_dir_and_project(1) |
| 0 | 602 endif |
| 603 endfunction | |
| 604 | |
| 605 " }}} | |
| 606 | |
| 607 " Statusline Functions {{{ | |
| 608 | |
| 609 function! unreal#statusline(...) abort | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
610 if empty(g:unreal_branch_dir) |
| 0 | 611 return '' |
| 612 endif | |
|
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
613 if empty(g:unreal_project) |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
614 return 'UE:'.g:unreal_branch_dir.':<no project>' |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
615 endif |
|
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
616 return 'UE:'.g:unreal_branch_dir.':'.g:unreal_project.'('.g:unreal_config_state.g:unreal_config_target.'|'.g:unreal_platform.')' |
| 0 | 617 endfunction |
| 618 | |
| 619 " }}} |
