From e2b929c37d847f5e63ded68c8f5ae90a4ec2d77b Mon Sep 17 00:00:00 2001 From: Hussein Ait-Lahcen Date: Mon, 5 Nov 2018 16:13:32 +0100 Subject: [PATCH] upgrade to 1.1.0 and get rid of nodegit --- README.md | 12 +--------- check.sh | 2 +- clever-tools/default.nix | 51 +++++++++++++++++++++++++++++----------- default.nix | 10 +++++--- example.nix | 12 ++++++---- nodegit/default.nix | 35 --------------------------- 6 files changed, 53 insertions(+), 69 deletions(-) delete mode 100644 nodegit/default.nix diff --git a/README.md b/README.md index b47a4bc..ec8e333 100644 --- a/README.md +++ b/README.md @@ -12,14 +12,4 @@ Main job of those derivations is to use patchelf to make it nix compliant. ## How to use it -```nix -{ pkgs ? import {} }: with pkgs; - -let clever-tools = fetchFromGitHub { - owner = "fretlink"; - repo = "clever-tools-nix"; - rev = "DESIRED_REVISION_HASH"; - sha256 = "CONTENT_HASH"; - }; -in (import clever-tools {}).latest # select appropriate version -``` +[See the example.nix](https://github.com/fretlink/clever-tools-nix/blob/master/example.nix) diff --git a/check.sh b/check.sh index 1b14239..8515fa4 100755 --- a/check.sh +++ b/check.sh @@ -1 +1 @@ -[ "$(clever --version)" == "0.9.3" ] +[ "$(clever --version)" == "1.1.0" ] diff --git a/clever-tools/default.nix b/clever-tools/default.nix index 6c729a5..9ac69e6 100644 --- a/clever-tools/default.nix +++ b/clever-tools/default.nix @@ -1,36 +1,59 @@ -{ stdenv, fetchurl, glibc, nodegit }: +{ stdenv, fetchurl, glibc }: stdenv.mkDerivation rec { name = "clever-tools-${version}"; - version = "0.9.3"; + version = "1.1.0"; src = fetchurl { url = "https://clever-tools.cellar.services.clever-cloud.com/releases/${version}/clever-tools-${version}_linux.tar.gz"; - sha256 = "adcae5af912dcbdc74d996b6e94767f24d16bf1bdcd5073797f999fe75b018a4"; + sha256 = "1lkwckmlz2gf41xmnzydpcbly0jcry3bn8lp570gha768ic7xmb1"; }; - buildInputs = [ nodegit ]; - libPath = stdenv.lib.makeLibraryPath [ stdenv.cc.cc glibc ]; - nodegitLibrary = stdenv.lib.makeLibraryPath [ nodegit ]; - installPhase = '' - tar --extract --file=$src linux/clever --transform 's/linux\///' + tar --extract --file=$src bin=$out/bin/clever mkdir -p $out/bin mv clever $bin - ln -s "$nodegitLibrary/nodegit.node" "$out/bin/nodegit.node" ''; dontStrip = "true"; + # See https://github.com/brendan-hall/nixpkgs/blob/e3b313bb59f49f10970205aafd44878d35da07e7/pkgs/development/web/now-cli/default.nix#L25 + # There is no helper in nixpkgs lib right now + # The algorithm for zeit/pkg fix is given https://github.com/NixOS/nixpkgs/pull/48193 + # it has been used for Unity3D as well https://github.com/NixOS/nixpkgs/pull/48643 preFixup = '' bin=$out/bin/clever - patchelf \ - --set-rpath "$libPath" \ - --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ - "$bin" + orig_size=$(stat --printf=%s $bin) + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $bin + patchelf --set-rpath ${libPath} $bin + new_size=$(stat --printf=%s $bin) + ###### zeit-pkg fixing starts here. + # we're replacing plaintext js code that looks like + # PAYLOAD_POSITION = '1234 ' | 0 + # [...] + # PRELUDE_POSITION = '1234 ' | 0 + # ^-----20-chars-----^^------22-chars------^ + # ^-- grep points here + # + # var_* are as described above + # shift_by seems to be safe so long as all patchelf adjustments occur + # before any locations pointed to by hardcoded offsets + var_skip=20 + var_select=22 + shift_by=$(expr $new_size - $orig_size) + function fix_offset { + # $1 = name of variable to adjust + location=$(grep -obUam1 "$1" $bin | cut -d: -f1) + location=$(expr $location + $var_skip) + value=$(dd if=$bin iflag=count_bytes,skip_bytes skip=$location \ + bs=1 count=$var_select status=none) + value=$(expr $shift_by + $value) + echo -n $value | dd of=$bin bs=1 seek=$location conv=notrunc + } + fix_offset PAYLOAD_POSITION + fix_offset PRELUDE_POSITION ''; - } diff --git a/default.nix b/default.nix index e8849a1..bed769c 100644 --- a/default.nix +++ b/default.nix @@ -11,7 +11,11 @@ let in (import olderVersion {}).latest; in { - latest = callPackage ./clever-tools { - nodegit = callPackage ./nodegit {}; - }; + v0_9_3 = mkOlderVersion { + rev = "a60f5f961215e9a011b4a0dfe651758001f116d8"; + sha256 = "1n831iw55di0s2izbl03xivs59792swfji2n46vhi3mkdawrsjkg"; + }; + + # 1.1.0 + latest = callPackage ./clever-tools {}; } diff --git a/example.nix b/example.nix index d7b53db..30142f5 100644 --- a/example.nix +++ b/example.nix @@ -1,9 +1,11 @@ { pkgs ? import {} }: with pkgs; -let clever-tools = fetchFromGitHub { +let clever-tools = import (fetchFromGitHub { owner = "fretlink"; repo = "clever-tools-nix"; - rev = "DESIRED_REVISION_HASH"; - sha256 = "CONTENT_HASH"; - }; -in (import clever-tools {}).latest # select appropriate version + rev = "master"; + sha256 = "computed_hash"; + }) {}; + # select appropriate version (see default.nix for the supported one) + # clever-tools.v0_9_3 +in clever-tools.latest diff --git a/nodegit/default.nix b/nodegit/default.nix deleted file mode 100644 index 4bf6dd1..0000000 --- a/nodegit/default.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ stdenv, fetchurl, curl, glibc, openssl }: - -assert stdenv.system == "x86_64-linux"; - -stdenv.mkDerivation rec { - name = "nodegit-${version}-node-v51"; - version = "0.20.3"; - - src = fetchurl { - url = "https://nodegit.s3.amazonaws.com/nodegit/nodegit/nodegit-v${version}-node-v51-linux-x64.tar.gz"; - sha256 = "d022a88e58fa70f78b59b475fa6ecc6724d372a779b132264cf571f71bc50020"; - }; - - libPath = stdenv.lib.makeLibraryPath [ - stdenv.cc.cc - (curl.override { - sslSupport = false; - gnutlsSupport = true; - }) - glibc - openssl - ]; - - installPhase = '' - tar --extract --file=$src Release/nodegit.node --transform 's/Release\//linux-/' - lib=$out/lib/nodegit.node - mkdir -p $out/lib - mv linux-nodegit.node $lib - ''; - - preFixup = '' - lib=$out/lib/nodegit.node - patchelf --set-rpath "$libPath" "$lib" - ''; -} -- 2.41.0