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