From 33dc8ced657188aeb3f1a28ac5cdff107f99b81d Mon Sep 17 00:00:00 2001 From: Raymond Gauthier Date: Wed, 30 Aug 2017 22:55:53 -0400 Subject: vscode-extension-ms-vscode-cpptools: Init at 0.12.3 --- pkgs/misc/vscode-extensions/cpptools/default.nix | 128 +++++++++++++++++++++ .../vscode-cpptools-0-12-3-package-json.patch | 82 +++++++++++++ pkgs/misc/vscode-extensions/default.nix | 4 +- 3 files changed, 213 insertions(+), 1 deletion(-) create mode 100644 pkgs/misc/vscode-extensions/cpptools/default.nix create mode 100644 pkgs/misc/vscode-extensions/cpptools/vscode-cpptools-0-12-3-package-json.patch (limited to 'pkgs') diff --git a/pkgs/misc/vscode-extensions/cpptools/default.nix b/pkgs/misc/vscode-extensions/cpptools/default.nix new file mode 100644 index 0000000000000..87c782222fc51 --- /dev/null +++ b/pkgs/misc/vscode-extensions/cpptools/default.nix @@ -0,0 +1,128 @@ +{ stdenv, lib, fetchurl, vscode-utils, unzip, dos2unix, mono46, clang-tools, writeScript +, gdbUseFixed ? true, gdb # The gdb default setting will be fixed to specified. Use version from `PATH` otherwise. +}: + +assert gdbUseFixed -> null != gdb; + +/* + Note that this version of the extension still has some nix specific issues + which could not be fixed merely by patching (inside a C# dll). + + In particular, the debugger requires either gnome-terminal or xterm. However + instead of looking for the terminal executable in `PATH`, for any linux platform + the dll uses an hardcoded path to one of these. + + So, in order for debugging to work properly, you merely need to create symlinks + to one of these terminals at the appropriate location. + + The good news is the the utility library is open source and with some effort + we could build a patched version ourselves. See: + + + + Also, the extension should eventually no longer require an external terminal. See: + + + + Once the symbolic link temporary solution taken, everything shoud run smootly. +*/ + +let + gdbDefaultsTo = if gdbUseFixed then "${gdb}/bin/gdb" else "gdb"; + + langComponentBinaries = stdenv.mkDerivation { + name = "cpptools-language-component-binaries"; + + src = fetchurl { + url = https://download.visualstudio.microsoft.com/download/pr/11151953/d3cc8b654bffb8a2f3896d101f3c3155/Bin_Linux.zip; + sha256 = "12qbxsrdc73cqjb84xdck1xafzhfkcyn6bqbpcy1bxxr3b7hxbii"; + }; + + buildInputs = [ unzip ]; + + patchPhase = '' + elfInterpreter="${stdenv.glibc.out}/lib/ld-linux-x86-64.so.2" + patchelf --set-interpreter "$elfInterpreter" ./Microsoft.VSCode.CPP.Extension.linux + patchelf --set-interpreter "$elfInterpreter" ./Microsoft.VSCode.CPP.IntelliSense.Msvc.linux + chmod a+x ./Microsoft.VSCode.CPP.Extension.linux ./Microsoft.VSCode.CPP.IntelliSense.Msvc.linux + ''; + + installPhase = '' + mkdir -p "$out/bin" + find . -mindepth 1 -maxdepth 1 | xargs cp -a -t "$out/bin" + ''; + }; + + cpptoolsJsonFile = fetchurl { + url = https://download.visualstudio.microsoft.com/download/pr/11070848/7b97d6724d52cae8377c61bb4601c989/cpptools.json; + sha256 = "124f091aic92rzbg2vg831y22zr5wi056c1kh775djqs3qv31ja6"; + }; + + + + openDebugAD7Script = writeScript "OpenDebugAD7" '' + #!${stdenv.shell} + BIN_DIR="$(cd "$(dirname "$0")" && pwd -P)" + ${if gdbUseFixed + then '' + export PATH=''${PATH}''${PATH:+:}${gdb}/bin + '' + else ""} + ${mono46}/bin/mono $BIN_DIR/bin/OpenDebugAD7.exe $* + ''; +in + +vscode-utils.buildVscodeMarketplaceExtension { + mktplcRef = { + name = "cpptools"; + publisher = "ms-vscode"; + version = "0.12.3"; + sha256 = "1dcqy54n1w29xhbvxscd41hdrbdwar6g12zx02f6kh2f1kw34z5z"; + }; + + buildInputs = [ + dos2unix + ]; + + prePatch = '' + dos2unix package.json + ''; + + patches = [ + ./vscode-cpptools-0-12-3-package-json.patch + ]; + + postPatch = '' + # Patch `packages.json` so that nix's *gdb* is used as default value for `miDebuggerPath`. + substituteInPlace "./package.json" \ + --replace "\"default\": \"/usr/bin/gdb\"" "\"default\": \"${gdbDefaultsTo}\"" + + # Prevent download/install of extensions + touch "./install.lock" + + # Move unused files out of the way. + mv ./debugAdapters/bin/OpenDebugAD7.exe.config ./debugAdapters/bin/OpenDebugAD7.exe.config.unused + + # Bring the `cpptools.json` file at the root of the package, same as the extension would do. + cp -p "${cpptoolsJsonFile}" "./cpptools.json" + + # Combining the language component binaries as part of our package. + find "${langComponentBinaries}/bin" -mindepth 1 -maxdepth 1 | xargs cp -p -t "./bin" + + # Mono runtimes from nix package (used by generated `OpenDebugAD7`). + rm "./debugAdapters/OpenDebugAD7" + cp -p "${openDebugAD7Script}" "./debugAdapters/OpenDebugAD7" + + # Clang-format from nix package. + mkdir -p "./LLVM" + find "${clang-tools}" -mindepth 1 -maxdepth 1 | xargs ln -s -t "./LLVM" + ''; + + meta = with stdenv.lib; { + license = licenses.unfree; + maintainer = [ maintainers.jraygauthier ]; + # A 32 bit linux would also be possible with some effort (specific download of binaries + + # patching of the elf files with 32 bit interpreter). + platforms = [ "x86_64-linux" ]; + }; +} \ No newline at end of file diff --git a/pkgs/misc/vscode-extensions/cpptools/vscode-cpptools-0-12-3-package-json.patch b/pkgs/misc/vscode-extensions/cpptools/vscode-cpptools-0-12-3-package-json.patch new file mode 100644 index 0000000000000..1873963f460d6 --- /dev/null +++ b/pkgs/misc/vscode-extensions/cpptools/vscode-cpptools-0-12-3-package-json.patch @@ -0,0 +1,82 @@ +diff --git a/package.json b/package.json +index 518e839..1c17c35 100644 +--- a/package.json ++++ b/package.json +@@ -37,7 +37,26 @@ + "Linters" + ], + "activationEvents": [ +- "*" ++ "onLanguage:cpp", ++ "onLanguage:c", ++ "onCommand:extension.pickNativeProcess", ++ "onCommand:extension.pickRemoteNativeProcess", ++ "onCommand:extension.provideInitialConfigurations_cppvsdbg", ++ "onCommand:extension.provideInitialConfigurations_cppdbg", ++ "onCommand:C_Cpp.ConfigurationEdit", ++ "onCommand:C_Cpp.ConfigurationSelect", ++ "onCommand:C_Cpp.SwitchHeaderSource", ++ "onCommand:C_Cpp.UnloadLanguageServer", ++ "onCommand:C_Cpp.Navigate", ++ "onCommand:C_Cpp.GoToDeclaration", ++ "onCommand:C_Cpp.PeekDeclaration", ++ "onCommand:C_Cpp.ToggleErrorSquiggles", ++ "onCommand:C_Cpp.ToggleIncludeFallback", ++ "onCommand:C_Cpp.ShowReleaseNotes", ++ "onCommand:C_Cpp.ResetDatabase", ++ "workspaceContains:.vscode/c_cpp_properties.json", ++ "onDebug:cppdbg", ++ "onDebug:cppvsdbg" + ], + "main": "./out/src/main", + "contributes": { +@@ -281,8 +300,7 @@ + "cpp" + ] + }, +- "runtime": "node", +- "program": "./out/src/Debugger/Proxy/debugProxy.js", ++ "program": "./debugAdapters/OpenDebugAD7", + "aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217", + "variables": { + "pickProcess": "extension.pickNativeProcess", +@@ -722,7 +740,29 @@ + } + } + } +- } ++ }, ++ "configurationSnippets": [ ++ { ++ "label": "C/C++: (gdb) Launch", ++ "description": "Launch with gdb.", ++ "bodyText": "{\n\t\"name\": \"(gdb) Launch\",\n\t\"type\": \"cppdbg\",\n\t\"request\": \"launch\",\n\t\"program\": \"enter program name, for example \\${workspaceRoot}/a.out\",\n\t\"args\": [],\n\t\"stopAtEntry\": false,\n\t\"cwd\": \"\\${workspaceRoot}\",\n\t\"environment\": [],\n\t\"externalConsole\": true,\n\t\"MIMode\": \"gdb\",\n\t\"setupCommands\": [\n\t {\n\t \"description\": \"Enable pretty-printing for gdb\",\n\t \"text\": \"-enable-pretty-printing\",\n\t \"ignoreFailures\": true\n\t }\n\t]\n}" ++ }, ++ { ++ "label": "C/C++: (gdb) Attach", ++ "description": "Attach with gdb.", ++ "bodyText": "{ \n\t\"name\": \"(gdb) Attach\",\n\t\"type\": \"cppdbg\",\n\t\"request\": \"attach\",\n\t\"program\": \"enter program name, for example \\${workspaceRoot}/a.out\",\n\t\"processId\": \"\\${command:pickProcess}\",\n\t\"MIMode\": \"gdb\"\n}" ++ }, ++ { ++ "label": "C/C++: (gdb) Pipe Launch", ++ "description": "Pipe Launch with gdb.", ++ "bodyText": "{\n\t\"name\": \"(gdb) Pipe Launch\",\n\t\"type\": \"cppdbg\",\n\t\"request\": \"launch\",\n\t\"program\": \"enter program name, for example \\${workspaceRoot}/a.out\",\n\t\"args\": [],\n\t\"stopAtEntry\": false,\n\t\"cwd\": \"\\${workspaceRoot}\",\n\t\"environment\": [],\n\t\"externalConsole\": true,\n\t\"pipeTransport\": {\n\t\t\"debuggerPath\": \"/usr/bin/gdb\",\n\t\t\"pipeProgram\": \"/usr/bin/ssh\",\n\t\t\"pipeArgs\": [],\n\t\t\"pipeCwd\": \"\"\n\t},\n\t\"MIMode\": \"gdb\",\n\t\"setupCommands\": [\n\t {\n\t \"description\": \"Enable pretty-printing for gdb\",\n\t \"text\": \"-enable-pretty-printing\",\n\t \"ignoreFailures\": true\n\t }\n\t]\n}" ++ }, ++ { ++ "label": "C/C++: (gdb) Pipe Attach", ++ "description": "Pipe Attach with gdb.", ++ "bodyText": "{\n\t\"name\": \"(gdb) Pipe Attach\",\n\t\"type\": \"cppdbg\",\n\t\"request\": \"attach\",\n\t\"program\": \"enter program name, for example \\${workspaceRoot}/a.out\",\n\t\"processId\": \"\\${command:pickRemoteProcess}\",\n\t\"pipeTransport\": {\n\t\t\"debuggerPath\": \"/usr/bin/gdb\",\n\t\t\"pipeProgram\": \"/usr/bin/ssh\",\n\t\t\"pipeArgs\": [],\n\t\t\"pipeCwd\": \"\"\n\t},\n\t\"MIMode\": \"gdb\"\n}" ++ } ++ ] + }, + { + "type": "cppvsdbg", +@@ -741,7 +781,7 @@ + "variables": { + "pickProcess": "extension.pickNativeProcess" + }, +- "initialConfigurations": "extension.provideInitialConfigurations_cppvsdbg", ++ "initialConfigurations": "", + "configurationAttributes": { + "launch": { + "required": [ diff --git a/pkgs/misc/vscode-extensions/default.nix b/pkgs/misc/vscode-extensions/default.nix index d357c43abd858..8047e29ad5589 100644 --- a/pkgs/misc/vscode-extensions/default.nix +++ b/pkgs/misc/vscode-extensions/default.nix @@ -1,4 +1,4 @@ -{ stdenv, lib, fetchurl, vscode-utils }: +{ stdenv, lib, fetchurl, callPackage, vscode-utils }: let inherit (vscode-utils) buildVscodeExtension buildVscodeMarketplaceExtension; @@ -22,4 +22,6 @@ rec { license = licenses.mit; }; }; + + ms-vscode.cpptools = callPackage ./cpptools {}; } \ No newline at end of file -- cgit 1.4.1