You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
375 lines
8.5 KiB
375 lines
8.5 KiB
#!/bin/sh |
|
|
|
die () { |
|
echo "$*" >&2 |
|
exit 1 |
|
} |
|
|
|
cd "$(dirname "$0")"/../.. || |
|
die "Could not cd to top-level directory" |
|
|
|
mkdir -p .vscode || |
|
die "Could not create .vscode/" |
|
|
|
# General settings |
|
|
|
cat >.vscode/settings.json.new <<\EOF || |
|
{ |
|
"C_Cpp.intelliSenseEngine": "Default", |
|
"C_Cpp.intelliSenseEngineFallback": "Disabled", |
|
"[git-commit]": { |
|
"editor.wordWrap": "wordWrapColumn", |
|
"editor.wordWrapColumn": 72 |
|
}, |
|
"[c]": { |
|
"editor.detectIndentation": false, |
|
"editor.insertSpaces": false, |
|
"editor.tabSize": 8, |
|
"editor.wordWrap": "wordWrapColumn", |
|
"editor.wordWrapColumn": 80, |
|
"files.trimTrailingWhitespace": true |
|
}, |
|
"files.associations": { |
|
"*.h": "c", |
|
"*.c": "c" |
|
}, |
|
"cSpell.ignorePaths": [ |
|
], |
|
"cSpell.words": [ |
|
"DATAW", |
|
"DBCACHED", |
|
"DFCHECK", |
|
"DTYPE", |
|
"Hamano", |
|
"HCAST", |
|
"HEXSZ", |
|
"HKEY", |
|
"HKLM", |
|
"IFGITLINK", |
|
"IFINVALID", |
|
"ISBROKEN", |
|
"ISGITLINK", |
|
"ISSYMREF", |
|
"Junio", |
|
"LPDWORD", |
|
"LPPROC", |
|
"LPWSTR", |
|
"MSVCRT", |
|
"NOARG", |
|
"NOCOMPLETE", |
|
"NOINHERIT", |
|
"RENORMALIZE", |
|
"STARTF", |
|
"STARTUPINFOEXW", |
|
"Schindelin", |
|
"UCRT", |
|
"YESNO", |
|
"argcp", |
|
"beginthreadex", |
|
"committish", |
|
"contentp", |
|
"cpath", |
|
"cpidx", |
|
"ctim", |
|
"dequote", |
|
"envw", |
|
"ewah", |
|
"fdata", |
|
"fherr", |
|
"fhin", |
|
"fhout", |
|
"fragp", |
|
"fsmonitor", |
|
"hnsec", |
|
"idents", |
|
"includeif", |
|
"interpr", |
|
"iprog", |
|
"isexe", |
|
"iskeychar", |
|
"kompare", |
|
"mksnpath", |
|
"mktag", |
|
"mktree", |
|
"mmblob", |
|
"mmbuffer", |
|
"mmfile", |
|
"noenv", |
|
"nparents", |
|
"ntpath", |
|
"ondisk", |
|
"ooid", |
|
"oplen", |
|
"osdl", |
|
"pnew", |
|
"pold", |
|
"ppinfo", |
|
"pushf", |
|
"pushv", |
|
"rawsz", |
|
"rebasing", |
|
"reencode", |
|
"repo", |
|
"rerere", |
|
"scld", |
|
"sharedrepo", |
|
"spawnv", |
|
"spawnve", |
|
"spawnvpe", |
|
"strdup'ing", |
|
"submodule", |
|
"submodules", |
|
"topath", |
|
"topo", |
|
"tpatch", |
|
"unexecutable", |
|
"unhide", |
|
"unkc", |
|
"unkv", |
|
"unmark", |
|
"unmatch", |
|
"unsets", |
|
"unshown", |
|
"untracked", |
|
"untrackedcache", |
|
"unuse", |
|
"upos", |
|
"uval", |
|
"vreportf", |
|
"wargs", |
|
"wargv", |
|
"wbuffer", |
|
"wcmd", |
|
"wcsnicmp", |
|
"wcstoutfdup", |
|
"wdeltaenv", |
|
"wdir", |
|
"wenv", |
|
"wenvblk", |
|
"wenvcmp", |
|
"wenviron", |
|
"wenvpos", |
|
"wenvsz", |
|
"wfile", |
|
"wfilename", |
|
"wfopen", |
|
"wfreopen", |
|
"wfullpath", |
|
"which'll", |
|
"wlink", |
|
"wmain", |
|
"wmkdir", |
|
"wmktemp", |
|
"wnewpath", |
|
"wotype", |
|
"wpath", |
|
"wpathname", |
|
"wpgmptr", |
|
"wpnew", |
|
"wpointer", |
|
"wpold", |
|
"wpos", |
|
"wputenv", |
|
"wrmdir", |
|
"wship", |
|
"wtarget", |
|
"wtemplate", |
|
"wunlink", |
|
"xcalloc", |
|
"xgetcwd", |
|
"xmallocz", |
|
"xmemdupz", |
|
"xmmap", |
|
"xopts", |
|
"xrealloc", |
|
"xsnprintf", |
|
"xutftowcs", |
|
"xutftowcsn", |
|
"xwcstoutf" |
|
], |
|
"cSpell.ignoreRegExpList": [ |
|
"\\\"(DIRC|FSMN|REUC|UNTR)\\\"", |
|
"\\\\u[0-9a-fA-Fx]{4}\\b", |
|
"\\b(filfre|frotz|xyzzy)\\b", |
|
"\\bCMIT_FMT_DEFAULT\\b", |
|
"\\bde-munge\\b", |
|
"\\bGET_OID_DISAMBIGUATORS\\b", |
|
"\\bHASH_RENORMALIZE\\b", |
|
"\\bTREESAMEness\\b", |
|
"\\bUSE_STDEV\\b", |
|
"\\Wchar *\\*\\W*utfs\\W", |
|
"cURL's", |
|
"nedmalloc'ed", |
|
"ntifs\\.h", |
|
], |
|
} |
|
EOF |
|
die "Could not write settings.json" |
|
|
|
# Infer some setup-specific locations/names |
|
|
|
GCCPATH="$(which gcc)" |
|
GDBPATH="$(which gdb)" |
|
MAKECOMMAND="make -j5 DEVELOPER=1" |
|
OSNAME= |
|
X= |
|
case "$(uname -s)" in |
|
MINGW*) |
|
GCCPATH="$(cygpath -am "$GCCPATH")" |
|
GDBPATH="$(cygpath -am "$GDBPATH")" |
|
MAKE_BASH="$(cygpath -am /git-cmd.exe) --command=usr\\\\bin\\\\bash.exe" |
|
MAKECOMMAND="$MAKE_BASH -lc \\\"$MAKECOMMAND\\\"" |
|
OSNAME=Win32 |
|
X=.exe |
|
;; |
|
Linux) |
|
OSNAME=Linux |
|
;; |
|
Darwin) |
|
OSNAME=macOS |
|
;; |
|
esac |
|
|
|
# Default build task |
|
|
|
cat >.vscode/tasks.json.new <<EOF || |
|
{ |
|
// See https://go.microsoft.com/fwlink/?LinkId=733558 |
|
// for the documentation about the tasks.json format |
|
"version": "2.0.0", |
|
"tasks": [ |
|
{ |
|
"label": "make", |
|
"type": "shell", |
|
"command": "$MAKECOMMAND", |
|
"group": { |
|
"kind": "build", |
|
"isDefault": true |
|
} |
|
} |
|
] |
|
} |
|
EOF |
|
die "Could not install default build task" |
|
|
|
# Debugger settings |
|
|
|
cat >.vscode/launch.json.new <<EOF || |
|
{ |
|
// Use IntelliSense to learn about possible attributes. |
|
// Hover to view descriptions of existing attributes. |
|
// For more information, visit: |
|
// https://go.microsoft.com/fwlink/?linkid=830387 |
|
"version": "0.2.0", |
|
"configurations": [ |
|
{ |
|
"name": "(gdb) Launch", |
|
"type": "cppdbg", |
|
"request": "launch", |
|
"program": "\${workspaceFolder}/git$X", |
|
"args": [], |
|
"stopAtEntry": false, |
|
"cwd": "\${workspaceFolder}", |
|
"environment": [], |
|
"externalConsole": true, |
|
"MIMode": "gdb", |
|
"miDebuggerPath": "$GDBPATH", |
|
"setupCommands": [ |
|
{ |
|
"description": "Enable pretty-printing for gdb", |
|
"text": "-enable-pretty-printing", |
|
"ignoreFailures": true |
|
} |
|
] |
|
} |
|
] |
|
} |
|
EOF |
|
die "Could not write launch configuration" |
|
|
|
# C/C++ extension settings |
|
|
|
make -f - OSNAME=$OSNAME GCCPATH="$GCCPATH" vscode-init \ |
|
>.vscode/c_cpp_properties.json <<\EOF || |
|
include Makefile |
|
|
|
vscode-init: |
|
@mkdir -p .vscode && \ |
|
incs= && defs= && \ |
|
for e in $(ALL_CFLAGS) \ |
|
'-DGIT_EXEC_PATH="$(gitexecdir_SQ)"' \ |
|
'-DGIT_LOCALE_PATH="$(localedir_relative_SQ)"' \ |
|
'-DBINDIR="$(bindir_relative_SQ)"' \ |
|
'-DFALLBACK_RUNTIME_PREFIX="$(prefix_SQ)"' \ |
|
'-DDEFAULT_GIT_TEMPLATE_DIR="$(template_dir_SQ)"' \ |
|
'-DETC_GITCONFIG="$(ETC_GITCONFIG_SQ)"' \ |
|
'-DETC_GITATTRIBUTES="$(ETC_GITATTRIBUTES_SQ)"' \ |
|
'-DGIT_LOCALE_PATH="$(localedir_relative_SQ)"' \ |
|
'-DCURL_DISABLE_TYPECHECK', \ |
|
'-DGIT_HTML_PATH="$(htmldir_relative_SQ)"' \ |
|
'-DGIT_MAN_PATH="$(mandir_relative_SQ)"' \ |
|
'-DGIT_INFO_PATH="$(infodir_relative_SQ)"'; do \ |
|
case "$$e" in \ |
|
-I.) \ |
|
incs="$$(printf '% 16s"$${workspaceRoot}",\n%s' \ |
|
"" "$$incs")" \ |
|
;; \ |
|
-I/*) \ |
|
incs="$$(printf '% 16s"%s",\n%s' \ |
|
"" "$${e#-I}" "$$incs")" \ |
|
;; \ |
|
-I*) \ |
|
incs="$$(printf '% 16s"$${workspaceRoot}/%s",\n%s' \ |
|
"" "$${e#-I}" "$$incs")" \ |
|
;; \ |
|
-D*) \ |
|
defs="$$(printf '% 16s"%s",\n%s' \ |
|
"" "$$(echo "$${e#-D}" | sed 's/"/\\&/g')" \ |
|
"$$defs")" \ |
|
;; \ |
|
esac; \ |
|
done && \ |
|
echo '{' && \ |
|
echo ' "configurations": [' && \ |
|
echo ' {' && \ |
|
echo ' "name": "$(OSNAME)",' && \ |
|
echo ' "intelliSenseMode": "clang-x64",' && \ |
|
echo ' "includePath": [' && \ |
|
echo "$$incs" | sort | sed '$$s/,$$//' && \ |
|
echo ' ],' && \ |
|
echo ' "defines": [' && \ |
|
echo "$$defs" | sort | sed '$$s/,$$//' && \ |
|
echo ' ],' && \ |
|
echo ' "browse": {' && \ |
|
echo ' "limitSymbolsToIncludedHeaders": true,' && \ |
|
echo ' "databaseFilename": "",' && \ |
|
echo ' "path": [' && \ |
|
echo ' "$${workspaceRoot}"' && \ |
|
echo ' ]' && \ |
|
echo ' },' && \ |
|
echo ' "cStandard": "c11",' && \ |
|
echo ' "cppStandard": "c++17",' && \ |
|
echo ' "compilerPath": "$(GCCPATH)"' && \ |
|
echo ' }' && \ |
|
echo ' ],' && \ |
|
echo ' "version": 4' && \ |
|
echo '}' |
|
EOF |
|
die "Could not write settings for the C/C++ extension" |
|
|
|
for file in .vscode/settings.json .vscode/tasks.json .vscode/launch.json |
|
do |
|
if test -f $file |
|
then |
|
if git diff --no-index --quiet --exit-code $file $file.new |
|
then |
|
rm $file.new |
|
else |
|
printf "The file $file.new has these changes:\n\n" |
|
git --no-pager diff --no-index $file $file.new |
|
printf "\n\nMaybe \`mv $file.new $file\`?\n\n" |
|
fi |
|
else |
|
mv $file.new $file |
|
fi |
|
done
|
|
|