]>
Commit | Line | Data |
---|---|---|
54c06c60 JS |
1 | #!/bin/sh |
2 | ||
3 | die () { | |
4 | echo "$*" >&2 | |
5 | exit 1 | |
6 | } | |
7 | ||
8 | cd "$(dirname "$0")"/../.. || | |
9 | die "Could not cd to top-level directory" | |
10 | ||
11 | mkdir -p .vscode || | |
12 | die "Could not create .vscode/" | |
13 | ||
14 | # General settings | |
15 | ||
0f47f78e | 16 | cat >.vscode/settings.json.new <<\EOF || |
54c06c60 JS |
17 | { |
18 | "C_Cpp.intelliSenseEngine": "Default", | |
19 | "C_Cpp.intelliSenseEngineFallback": "Disabled", | |
f2a3b683 JS |
20 | "[git-commit]": { |
21 | "editor.wordWrap": "wordWrapColumn", | |
22 | "editor.wordWrapColumn": 72 | |
23 | }, | |
5482f418 JS |
24 | "[c]": { |
25 | "editor.detectIndentation": false, | |
26 | "editor.insertSpaces": false, | |
27 | "editor.tabSize": 8, | |
85845580 DS |
28 | "files.trimTrailingWhitespace": true |
29 | }, | |
30 | "[txt]": { | |
31 | "editor.detectIndentation": false, | |
32 | "editor.insertSpaces": false, | |
33 | "editor.tabSize": 8, | |
5482f418 JS |
34 | "files.trimTrailingWhitespace": true |
35 | }, | |
54c06c60 JS |
36 | "files.associations": { |
37 | "*.h": "c", | |
38 | "*.c": "c" | |
2a2cdd06 | 39 | }, |
12861e20 JS |
40 | "cSpell.ignorePaths": [ |
41 | ], | |
2a2cdd06 JS |
42 | "cSpell.words": [ |
43 | "DATAW", | |
44 | "DBCACHED", | |
45 | "DFCHECK", | |
46 | "DTYPE", | |
47 | "Hamano", | |
48 | "HCAST", | |
49 | "HEXSZ", | |
50 | "HKEY", | |
51 | "HKLM", | |
52 | "IFGITLINK", | |
53 | "IFINVALID", | |
54 | "ISBROKEN", | |
55 | "ISGITLINK", | |
56 | "ISSYMREF", | |
57 | "Junio", | |
58 | "LPDWORD", | |
59 | "LPPROC", | |
60 | "LPWSTR", | |
61 | "MSVCRT", | |
62 | "NOARG", | |
63 | "NOCOMPLETE", | |
64 | "NOINHERIT", | |
65 | "RENORMALIZE", | |
66 | "STARTF", | |
67 | "STARTUPINFOEXW", | |
68 | "Schindelin", | |
69 | "UCRT", | |
70 | "YESNO", | |
71 | "argcp", | |
72 | "beginthreadex", | |
73 | "committish", | |
74 | "contentp", | |
75 | "cpath", | |
76 | "cpidx", | |
77 | "ctim", | |
78 | "dequote", | |
79 | "envw", | |
80 | "ewah", | |
81 | "fdata", | |
82 | "fherr", | |
83 | "fhin", | |
84 | "fhout", | |
85 | "fragp", | |
86 | "fsmonitor", | |
87 | "hnsec", | |
88 | "idents", | |
89 | "includeif", | |
90 | "interpr", | |
91 | "iprog", | |
92 | "isexe", | |
93 | "iskeychar", | |
94 | "kompare", | |
2a2cdd06 JS |
95 | "mktag", |
96 | "mktree", | |
97 | "mmblob", | |
98 | "mmbuffer", | |
99 | "mmfile", | |
100 | "noenv", | |
101 | "nparents", | |
102 | "ntpath", | |
103 | "ondisk", | |
104 | "ooid", | |
105 | "oplen", | |
106 | "osdl", | |
107 | "pnew", | |
108 | "pold", | |
109 | "ppinfo", | |
110 | "pushf", | |
111 | "pushv", | |
112 | "rawsz", | |
113 | "rebasing", | |
114 | "reencode", | |
115 | "repo", | |
116 | "rerere", | |
117 | "scld", | |
118 | "sharedrepo", | |
119 | "spawnv", | |
120 | "spawnve", | |
121 | "spawnvpe", | |
122 | "strdup'ing", | |
123 | "submodule", | |
124 | "submodules", | |
125 | "topath", | |
126 | "topo", | |
127 | "tpatch", | |
128 | "unexecutable", | |
129 | "unhide", | |
130 | "unkc", | |
131 | "unkv", | |
132 | "unmark", | |
133 | "unmatch", | |
134 | "unsets", | |
135 | "unshown", | |
136 | "untracked", | |
137 | "untrackedcache", | |
138 | "unuse", | |
139 | "upos", | |
140 | "uval", | |
141 | "vreportf", | |
142 | "wargs", | |
143 | "wargv", | |
144 | "wbuffer", | |
145 | "wcmd", | |
146 | "wcsnicmp", | |
147 | "wcstoutfdup", | |
148 | "wdeltaenv", | |
149 | "wdir", | |
150 | "wenv", | |
151 | "wenvblk", | |
152 | "wenvcmp", | |
153 | "wenviron", | |
154 | "wenvpos", | |
155 | "wenvsz", | |
156 | "wfile", | |
157 | "wfilename", | |
158 | "wfopen", | |
159 | "wfreopen", | |
160 | "wfullpath", | |
161 | "which'll", | |
162 | "wlink", | |
163 | "wmain", | |
164 | "wmkdir", | |
165 | "wmktemp", | |
166 | "wnewpath", | |
167 | "wotype", | |
168 | "wpath", | |
169 | "wpathname", | |
170 | "wpgmptr", | |
171 | "wpnew", | |
172 | "wpointer", | |
173 | "wpold", | |
174 | "wpos", | |
175 | "wputenv", | |
176 | "wrmdir", | |
177 | "wship", | |
178 | "wtarget", | |
179 | "wtemplate", | |
180 | "wunlink", | |
181 | "xcalloc", | |
182 | "xgetcwd", | |
183 | "xmallocz", | |
184 | "xmemdupz", | |
185 | "xmmap", | |
186 | "xopts", | |
187 | "xrealloc", | |
188 | "xsnprintf", | |
189 | "xutftowcs", | |
190 | "xutftowcsn", | |
191 | "xwcstoutf" | |
192 | ], | |
193 | "cSpell.ignoreRegExpList": [ | |
194 | "\\\"(DIRC|FSMN|REUC|UNTR)\\\"", | |
195 | "\\\\u[0-9a-fA-Fx]{4}\\b", | |
196 | "\\b(filfre|frotz|xyzzy)\\b", | |
197 | "\\bCMIT_FMT_DEFAULT\\b", | |
198 | "\\bde-munge\\b", | |
199 | "\\bGET_OID_DISAMBIGUATORS\\b", | |
200 | "\\bHASH_RENORMALIZE\\b", | |
201 | "\\bTREESAMEness\\b", | |
202 | "\\bUSE_STDEV\\b", | |
203 | "\\Wchar *\\*\\W*utfs\\W", | |
204 | "cURL's", | |
205 | "nedmalloc'ed", | |
206 | "ntifs\\.h", | |
207 | ], | |
54c06c60 JS |
208 | } |
209 | EOF | |
210 | die "Could not write settings.json" | |
211 | ||
212 | # Infer some setup-specific locations/names | |
213 | ||
214 | GCCPATH="$(which gcc)" | |
215 | GDBPATH="$(which gdb)" | |
216 | MAKECOMMAND="make -j5 DEVELOPER=1" | |
217 | OSNAME= | |
218 | X= | |
219 | case "$(uname -s)" in | |
220 | MINGW*) | |
221 | GCCPATH="$(cygpath -am "$GCCPATH")" | |
222 | GDBPATH="$(cygpath -am "$GDBPATH")" | |
223 | MAKE_BASH="$(cygpath -am /git-cmd.exe) --command=usr\\\\bin\\\\bash.exe" | |
224 | MAKECOMMAND="$MAKE_BASH -lc \\\"$MAKECOMMAND\\\"" | |
225 | OSNAME=Win32 | |
226 | X=.exe | |
227 | ;; | |
228 | Linux) | |
229 | OSNAME=Linux | |
230 | ;; | |
231 | Darwin) | |
232 | OSNAME=macOS | |
233 | ;; | |
234 | esac | |
235 | ||
236 | # Default build task | |
237 | ||
0f47f78e | 238 | cat >.vscode/tasks.json.new <<EOF || |
54c06c60 JS |
239 | { |
240 | // See https://go.microsoft.com/fwlink/?LinkId=733558 | |
241 | // for the documentation about the tasks.json format | |
242 | "version": "2.0.0", | |
243 | "tasks": [ | |
244 | { | |
245 | "label": "make", | |
246 | "type": "shell", | |
247 | "command": "$MAKECOMMAND", | |
248 | "group": { | |
249 | "kind": "build", | |
250 | "isDefault": true | |
251 | } | |
252 | } | |
253 | ] | |
254 | } | |
255 | EOF | |
256 | die "Could not install default build task" | |
257 | ||
258 | # Debugger settings | |
259 | ||
0f47f78e | 260 | cat >.vscode/launch.json.new <<EOF || |
54c06c60 JS |
261 | { |
262 | // Use IntelliSense to learn about possible attributes. | |
263 | // Hover to view descriptions of existing attributes. | |
264 | // For more information, visit: | |
265 | // https://go.microsoft.com/fwlink/?linkid=830387 | |
266 | "version": "0.2.0", | |
267 | "configurations": [ | |
268 | { | |
269 | "name": "(gdb) Launch", | |
270 | "type": "cppdbg", | |
271 | "request": "launch", | |
272 | "program": "\${workspaceFolder}/git$X", | |
273 | "args": [], | |
274 | "stopAtEntry": false, | |
275 | "cwd": "\${workspaceFolder}", | |
276 | "environment": [], | |
54c06c60 JS |
277 | "MIMode": "gdb", |
278 | "miDebuggerPath": "$GDBPATH", | |
279 | "setupCommands": [ | |
280 | { | |
281 | "description": "Enable pretty-printing for gdb", | |
282 | "text": "-enable-pretty-printing", | |
283 | "ignoreFailures": true | |
284 | } | |
285 | ] | |
286 | } | |
287 | ] | |
288 | } | |
289 | EOF | |
290 | die "Could not write launch configuration" | |
291 | ||
292 | # C/C++ extension settings | |
293 | ||
294 | make -f - OSNAME=$OSNAME GCCPATH="$GCCPATH" vscode-init \ | |
295 | >.vscode/c_cpp_properties.json <<\EOF || | |
296 | include Makefile | |
297 | ||
298 | vscode-init: | |
299 | @mkdir -p .vscode && \ | |
300 | incs= && defs= && \ | |
dee33823 JS |
301 | for e in $(ALL_CFLAGS) \ |
302 | '-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \ | |
303 | '-DGIT_LOCALE_PATH="$(localedir_relative_SQ)"' \ | |
304 | '-DBINDIR="$(bindir_relative_SQ)"' \ | |
305 | '-DFALLBACK_RUNTIME_PREFIX="$(prefix_SQ)"' \ | |
306 | '-DDEFAULT_GIT_TEMPLATE_DIR="$(template_dir_SQ)"' \ | |
307 | '-DETC_GITCONFIG="$(ETC_GITCONFIG_SQ)"' \ | |
308 | '-DETC_GITATTRIBUTES="$(ETC_GITATTRIBUTES_SQ)"' \ | |
309 | '-DGIT_LOCALE_PATH="$(localedir_relative_SQ)"' \ | |
310 | '-DCURL_DISABLE_TYPECHECK', \ | |
311 | '-DGIT_HTML_PATH="$(htmldir_relative_SQ)"' \ | |
312 | '-DGIT_MAN_PATH="$(mandir_relative_SQ)"' \ | |
313 | '-DGIT_INFO_PATH="$(infodir_relative_SQ)"'; do \ | |
54c06c60 JS |
314 | case "$$e" in \ |
315 | -I.) \ | |
316 | incs="$$(printf '% 16s"$${workspaceRoot}",\n%s' \ | |
317 | "" "$$incs")" \ | |
318 | ;; \ | |
319 | -I/*) \ | |
320 | incs="$$(printf '% 16s"%s",\n%s' \ | |
321 | "" "$${e#-I}" "$$incs")" \ | |
322 | ;; \ | |
323 | -I*) \ | |
324 | incs="$$(printf '% 16s"$${workspaceRoot}/%s",\n%s' \ | |
325 | "" "$${e#-I}" "$$incs")" \ | |
326 | ;; \ | |
327 | -D*) \ | |
328 | defs="$$(printf '% 16s"%s",\n%s' \ | |
329 | "" "$$(echo "$${e#-D}" | sed 's/"/\\&/g')" \ | |
330 | "$$defs")" \ | |
331 | ;; \ | |
332 | esac; \ | |
333 | done && \ | |
334 | echo '{' && \ | |
335 | echo ' "configurations": [' && \ | |
336 | echo ' {' && \ | |
337 | echo ' "name": "$(OSNAME)",' && \ | |
338 | echo ' "intelliSenseMode": "clang-x64",' && \ | |
339 | echo ' "includePath": [' && \ | |
340 | echo "$$incs" | sort | sed '$$s/,$$//' && \ | |
341 | echo ' ],' && \ | |
342 | echo ' "defines": [' && \ | |
343 | echo "$$defs" | sort | sed '$$s/,$$//' && \ | |
344 | echo ' ],' && \ | |
345 | echo ' "browse": {' && \ | |
346 | echo ' "limitSymbolsToIncludedHeaders": true,' && \ | |
347 | echo ' "databaseFilename": "",' && \ | |
348 | echo ' "path": [' && \ | |
349 | echo ' "$${workspaceRoot}"' && \ | |
350 | echo ' ]' && \ | |
351 | echo ' },' && \ | |
352 | echo ' "cStandard": "c11",' && \ | |
353 | echo ' "cppStandard": "c++17",' && \ | |
354 | echo ' "compilerPath": "$(GCCPATH)"' && \ | |
355 | echo ' }' && \ | |
356 | echo ' ],' && \ | |
357 | echo ' "version": 4' && \ | |
358 | echo '}' | |
359 | EOF | |
360 | die "Could not write settings for the C/C++ extension" | |
0f47f78e JS |
361 | |
362 | for file in .vscode/settings.json .vscode/tasks.json .vscode/launch.json | |
363 | do | |
364 | if test -f $file | |
365 | then | |
366 | if git diff --no-index --quiet --exit-code $file $file.new | |
367 | then | |
368 | rm $file.new | |
369 | else | |
370 | printf "The file $file.new has these changes:\n\n" | |
371 | git --no-pager diff --no-index $file $file.new | |
372 | printf "\n\nMaybe \`mv $file.new $file\`?\n\n" | |
373 | fi | |
374 | else | |
375 | mv $file.new $file | |
376 | fi | |
377 | done |