Mercurial > vim-unreal
annotate autoload/unreal.vim @ 7:59d75d8c254f
Don't complain on startup if no UE branch is found.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Tue, 26 Jan 2021 11:59:58 -0800 |
parents | 613f13dc42f7 |
children | 5cd58b3fd93d |
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 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
209 let g:unreal_project = a:projname |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
210 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
211 let l:cached_proj_file = unreal#get_cache_path("LastProject.txt", 1) " Auto-create cache dir. |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
212 call writefile([a:projname], l:cached_proj_file) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
213 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
214 call unreal#trace("Set UE project: ".a:projname) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
215 endfunction |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
216 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
217 function! unreal#get_branch_projects(branch_dir) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
218 if empty(a:branch_dir) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
219 return {} |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
220 endif |
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 " Reset the known projects. |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
223 let l:projs = {} |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
224 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
|
225 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
226 " Find project files in the branch directory. |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
227 let l:dirs = readdir(a:branch_dir) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
228 for l:dir in l:dirs |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
229 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
|
230 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
|
231 if len(l:uprojfiles) > 0 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
232 let l:lines = readfile(l:uprojfiles[0]) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
233 let l:jsonraw = join(l:lines, "\n") |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
234 let l:json = json_decode(l:jsonraw) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
235 let l:json["Path"] = l:uprojfiles[0] |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
236 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
|
237 let l:projs[l:projname] = l:json |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
238 call unreal#trace("Found project: ".l:projname) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
239 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
240 endfor |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
241 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
242 return l:projs |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
243 endfunction |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
244 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
245 function! unreal#get_project_info(proppath) abort |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
246 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
|
247 call unreal#throw("No project(s) set!") |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
248 endif |
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 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
|
251 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
252 let l:cur = l:proj |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
253 let l:propnames = split(a:proppath, '.') |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
254 for l:propname in l:propnames |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
255 if type(l:cur) == type([]) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
256 let l:cur = l:cur[str2nr(l:propname)] |
0 | 257 else |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
258 let l:cur = l:cur[l:propname] |
0 | 259 endif |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
260 endfor |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
261 endfunction |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
262 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
263 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
|
264 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
|
265 call unreal#throw("No project(s) set!") |
0 | 266 endif |
2
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 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
|
269 for l:module in l:proj["Modules"] |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
270 if get(l:module, "Type", "") == a:module_type |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
271 return copy(l:module) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
272 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
273 endfor |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
274 return {} |
0 | 275 endfunction |
276 | |
277 let s:extra_args_version = 1 | |
278 | |
279 function! unreal#generate_vimcrosoft_extra_args(solution) abort | |
1
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
280 let 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
|
281 \fnamemodify(a:solution, ':p:h').s:dirsep. |
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
282 \'.vimcrosoft'.s:dirsep. |
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
283 \fnamemodify(a:solution, ':t').'.flags' |
0 | 284 |
1
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
285 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
|
286 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
|
287 try |
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
288 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
|
289 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
|
290 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
|
291 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
|
292 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
|
293 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
|
294 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
|
295 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
|
296 endif |
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
297 catch |
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
298 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
|
299 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
|
300 endtry |
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
301 if l:do_regen |
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
302 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
|
303 \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
|
304 \"-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
|
305 \] |
43d0e448edce
Don't change the vimcrosoft solution if it's not needed. Fix indenting.
Ludovic Chabant <ludovic@chabant.com>
parents:
0
diff
changeset
|
306 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
|
307 endif |
0 | 308 endfunction |
309 | |
310 " }}} | |
311 | |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
312 " Configuration and Platform {{{ |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
313 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
314 let s:unreal_configs = [] |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
315 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
316 function! s:cache_unreal_configs() abort |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
317 if len(s:unreal_configs) == 0 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
318 for l:state in g:unreal_config_states |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
319 for l:target in g:unreal_config_targets |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
320 call add(s:unreal_configs, l:state.l:target) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
321 endfor |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
322 endfor |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
323 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
324 endfunction |
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:parse_config_state_and_target(config) abort |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
327 let l:alen = len(a:config) |
0 | 328 |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
329 let l:config_target = "" |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
330 for l:target in g:unreal_config_targets |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
331 let l:tlen = len(l:target) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
332 if l:alen > l:tlen && a:config[l:alen - l:tlen : ] == l:target |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
333 let l:config_target = l:target |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
334 break |
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 endfor |
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 let l:config_state = a:config[0 : l:alen - t:tlen - 1] |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
339 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
340 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
|
341 \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
|
342 return [l:config_state, l:config_target] |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
343 else |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
344 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
|
345 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
346 endfunction |
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 function! unreal#set_config(config) abort |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
349 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
|
350 let g:unreal_config_state = l:config_state |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
351 let g:unreal_config_target = l:config_target |
0 | 352 endfunction |
353 | |
354 function! unreal#set_platform(platform) abort | |
355 if index(g:unreal_platforms, a:platform) < 0 | |
356 call unreal#throw("Invalid Unreal platform: ".a:platform) | |
357 endif | |
358 let g:unreal_project_platform = a:platform | |
359 endfunction | |
360 | |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
361 " }}} |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
362 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
363 " Build {{{ |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
364 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
365 function! unreal#get_ubt_args(...) abort |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
366 " Start with modules we should always build. |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
367 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
|
368 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
|
369 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
370 " Function arguments are: |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
371 " <Project> <Platform> <Config> [<...MainModuleOptions>] [<...GlobalOptions>] <?NoGlobalModules> |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
372 let l:project = g:unreal_project |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
373 if a:0 >= 1 && !empty(a:1) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
374 let l:project = a:1 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
375 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
376 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
377 let l:platform = g:unreal_platform |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
378 if a:0 >= 2 && !empty(a:2) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
379 let l:platform = a:2 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
380 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
381 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
382 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
|
383 if a:0 >= 3 && !empty(a:3) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
384 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
|
385 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
386 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
387 let l:mod_opts = [] |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
388 if a:0 >= 4 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
389 if type(a:4) == type([]) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
390 let l:mod_opts = a:4 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
391 else |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
392 let l:mod_opts = [a:4] |
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 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
395 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
396 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
|
397 if a:0 >= 5 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
398 if type(a:5) == type([]) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
399 call extend(l:global_opts, a:5) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
400 else |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
401 call extend(l:global_opts, [a:5]) |
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 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
404 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
405 if a:0 >= 6 && a:6 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
406 let l:mod_names = [] |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
407 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
408 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
409 " Find the appropriate module for our project. |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
410 if l:config_target == "Editor" |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
411 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
|
412 else |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
413 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
|
414 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
415 if empty(l:module) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
416 call unreal#throw("Can't find module for target '".l:config_target."' in project: ".l:project) |
0 | 417 endif |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
418 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
419 " Add the module's arguments to the list. |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
420 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
|
421 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
|
422 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
423 " Build the argument list for our modules. |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
424 let l:ubt_cmdline = [] |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
425 for l:mod_name in l:mod_names |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
426 let l:mod_cmdline = '-Target="'. |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
427 \l:mod_name.' '. |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
428 \l:platform.' '. |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
429 \l:config_state |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
430 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
|
431 if !empty(l:mod_arg) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
432 let l:mod_cmdline .= ' '.join(l:mod_arg, ' ') |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
433 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
434 let l:mod_cmdline .= '"' |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
435 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
436 call add(l:ubt_cmdline, l:mod_cmdline) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
437 endfor |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
438 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
439 " Add any global options. |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
440 call extend(l:ubt_cmdline, l:global_opts) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
441 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
442 return l:ubt_cmdline |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
443 endfunction |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
444 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
445 function! unreal#build(bang, ...) abort |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
446 let g:__unreal_makeprg_script = "Build" |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
447 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
|
448 call unreal#run_make("ubuild", a:bang) |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
449 endfunction |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
450 |
6
613f13dc42f7
Support command bang for building.
Ludovic Chabant <ludovic@chabant.com>
parents:
2
diff
changeset
|
451 function! unreal#rebuild(bang, ...) abort |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
452 let g:__unreal_makeprg_script = "Rebuild" |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
453 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
|
454 call unreal#run_make("ubuild", a:bang) |
0 | 455 endfunction |
456 | |
6
613f13dc42f7
Support command bang for building.
Ludovic Chabant <ludovic@chabant.com>
parents:
2
diff
changeset
|
457 function! unreal#clean(bang, ...) abort |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
458 let g:__unreal_makeprg_script = "Clean" |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
459 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
|
460 call unreal#run_make("ubuild", a:bang) |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
461 endfunction |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
462 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
463 function! unreal#generate_compilation_database() abort |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
464 let g:__unreal_makeprg_script = "Build" |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
465 let g:__unreal_makeprg_args = unreal#get_ubt_args('', '', '', [], ['-allmodules', '-Mode=GenerateClangDatabase'], 1) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
466 call unreal#run_make("ubuild") |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
467 endfunction |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
468 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
469 function! unreal#generate_project_files() abort |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
470 if !g:unreal_auto_generate_compilation_database |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
471 call unreal#run_make("ugenprojfiles") |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
472 else |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
473 " 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
|
474 " 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
|
475 " pass that to our little script wrapper. |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
476 let l:genscriptpath = shellescape( |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
477 \unreal#get_script_path("Engine/Build/BatchFiles/GenerateProjectFiles")) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
478 let l:buildscriptpath = shellescape( |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
479 \unreal#get_script_path("Engine/Build/BatchFiles/Build")) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
480 let l:buildscriptargs = |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
481 \unreal#get_ubt_args('', '', '', [], ['-allmodules', '-Mode=GenerateClangDatabase'], 1) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
482 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
483 let l:rsplines = [ |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
484 \l:genscriptpath, |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
485 \l:buildscriptpath.' '.join(l:buildscriptargs, ' ') |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
486 \] |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
487 let l:rsppath = tempname() |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
488 call unreal#trace("Writing response file: ".l:rsppath) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
489 call writefile(l:rsplines, l:rsppath) |
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 g:__unreal_makeprg_args = l:rsppath |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
492 call unreal#run_make("uscriptwrapper") |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
493 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
494 endfunction |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
495 |
0 | 496 " }}} |
497 | |
498 " Completion Functions {{{ | |
499 | |
500 function! s:add_unique_suggestion_trailing_space(suggestions) | |
501 " If there's only one answer, add a space so we can start typing the | |
502 " next argument right away. | |
503 if len(a:suggestions) == 1 | |
504 let a:suggestions[0] = a:suggestions[0] . ' ' | |
505 endif | |
506 return a:suggestions | |
507 endfunction | |
508 | |
509 function! s:filter_suggestions(arglead, suggestions) | |
510 let l:argpat = tolower(a:arglead) | |
511 let l:suggestions = filter(a:suggestions, | |
512 \{idx, val -> val =~? l:argpat}) | |
513 return s:add_unique_suggestion_trailing_space(l:suggestions) | |
514 endfunction | |
515 | |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
516 function! unreal#complete_projects(ArgLead, CmdLine, CursorPos) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
517 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
|
518 endfunction |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
519 |
0 | 520 function! unreal#complete_platforms(ArgLead, CmdLine, CursorPos) |
521 return s:filter_suggestions(a:ArgLead, copy(g:unreal_platforms)) | |
522 endfunction | |
523 | |
524 function! unreal#complete_configs(ArgLead, CmdLine, CursorPos) | |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
525 call s:cache_unreal_configs() |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
526 return s:filter_suggestions(a:ArgLead, copy(s:unreal_configs)) |
0 | 527 endfunction |
528 | |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
529 function! unreal#complete_build_args(ArgLead, CmdLine, CursorPos) |
0 | 530 let l:bits = split(a:CmdLine.'_', ' ') |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
531 let l:bits = l:bits[1:] " Remove the `UnrealBuild` command from the line. |
0 | 532 if len(l:bits) <= 1 |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
533 let l:suggestions = keys(g:unreal_branch_projects) |
0 | 534 elseif len(l:bits) == 2 |
535 let l:suggestions = copy(g:unreal_platforms) | |
536 elseif len(l:bits) == 3 | |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
537 call s:cache_unreal_configs() |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
538 let l:suggestions = s:unreal_configs |
0 | 539 elseif len(l:bits) >= 4 |
540 let l:suggestions = copy(g:unreal_build_options) | |
541 endif | |
542 return s:filter_suggestions(a:ArgLead, l:suggestions) | |
543 endfunction | |
544 | |
545 " }}} | |
546 | |
547 " Build System {{{ | |
548 | |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
549 function! unreal#run_make(compilername, ...) abort |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
550 let l:bang = 0 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
551 if a:0 && a:1 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
552 let l:bang = 1 |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
553 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
554 |
0 | 555 execute "compiler ".a:compilername |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
556 |
0 | 557 if exists(':Make') " Support for vim-dispatch |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
558 if l:bang |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
559 Make! |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
560 else |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
561 Make |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
562 endif |
0 | 563 else |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
564 if l:bang |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
565 make! |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
566 else |
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 endif |
0 | 569 endif |
570 endfunction | |
571 | |
572 " }}} | |
573 | |
574 " Unreal Scripts {{{ | |
575 | |
576 let s:builds_in_progress = [] | |
577 | |
578 function! unreal#get_script_path(scriptname, ...) abort | |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
579 if s:iswin |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
580 let l:name = substitute(a:scriptname, '/', "\\", 'g') |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
581 else |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
582 let l:name = a:scriptname |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
583 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
584 return g:unreal_branch_dir.s:dirsep.l:name.s:scriptext |
0 | 585 endfunction |
586 | |
587 " }}} | |
588 | |
589 " Initialization {{{ | |
590 | |
591 function! unreal#init() abort | |
592 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
|
593 call unreal#find_branch_dir_and_project(1) |
0 | 594 endif |
595 endfunction | |
596 | |
597 " }}} | |
598 | |
599 " Statusline Functions {{{ | |
600 | |
601 function! unreal#statusline(...) abort | |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
602 if empty(g:unreal_branch_dir) |
0 | 603 return '' |
604 endif | |
2
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
605 if empty(g:unreal_project) |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
606 return 'UE:'.g:unreal_branch_dir.':<no project>' |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
607 endif |
9235d8341a18
Refactor the build system invocation commands.
Ludovic Chabant <ludovic@chabant.com>
parents:
1
diff
changeset
|
608 return 'UE:'.g:unreal_branch_dir.':'.g:unreal_project.'('.g:unreal_config_state.g:unreal_config_target.'|'.g:unreal_platform.')' |
0 | 609 endfunction |
610 | |
611 " }}} |