From 1ad2fa452a0d96be96dbe812c182cd1753992c14 Mon Sep 17 00:00:00 2001 From: Brian McKenna Date: Thu, 7 May 2015 13:00:01 -0600 Subject: [PATCH] Add EventStore package This turns the V8 expression into a generic build, so that we can build with the required version. --- pkgs/development/libraries/v8/3.24.10.nix | 6 ++ pkgs/development/libraries/v8/default.nix | 71 ++-------------------- pkgs/development/libraries/v8/generic.nix | 73 +++++++++++++++++++++++ pkgs/servers/nosql/eventstore/default.nix | 54 +++++++++++++++++ pkgs/top-level/all-packages.nix | 8 +++ 5 files changed, 145 insertions(+), 67 deletions(-) create mode 100644 pkgs/development/libraries/v8/3.24.10.nix create mode 100644 pkgs/development/libraries/v8/generic.nix create mode 100644 pkgs/servers/nosql/eventstore/default.nix diff --git a/pkgs/development/libraries/v8/3.24.10.nix b/pkgs/development/libraries/v8/3.24.10.nix new file mode 100644 index 000000000000..e7b10f23ac8a --- /dev/null +++ b/pkgs/development/libraries/v8/3.24.10.nix @@ -0,0 +1,6 @@ +{ callPackage, ... } @ args: + +callPackage ./generic.nix (args // { + version = "3.24.10"; + sha256 = "1blz5h9syk93bb4x3shcai3s2jhh6ai4bpymr9rz0f1ysvg60x75"; +}) diff --git a/pkgs/development/libraries/v8/default.nix b/pkgs/development/libraries/v8/default.nix index dbf2f376d0f9..6ae5c896efa1 100644 --- a/pkgs/development/libraries/v8/default.nix +++ b/pkgs/development/libraries/v8/default.nix @@ -1,69 +1,6 @@ -{ stdenv, fetchurl, gyp, readline, python, which, icu }: +{ callPackage, ... } @ args: -assert readline != null; - -let - arch = if stdenv.is64bit then "x64" else "ia32"; -in - -stdenv.mkDerivation rec { - name = "v8-${version}"; +callPackage ./generic.nix (args // { version = "3.30.33.16"; - - src = fetchurl { - url = "https://commondatastorage.googleapis.com/chromium-browser-official/" - + "${name}.tar.bz2"; - sha256 = "1azf1b36gqj4z5x0k9wq2dkp99zfyhwb0d6i2cl5fjm3k6js7l45"; - }; - - patchPhase = '' - sed -i 's,#!/usr/bin/env python,#!${python}/bin/python,' build/gyp_v8 - ''; - - configurePhase = '' - PYTHONPATH="tools/generate_shim_headers:$PYTHONPATH" \ - PYTHONPATH="$(toPythonPath ${gyp}):$PYTHONPATH" \ - build/gyp_v8 \ - -f make \ - --generator-output="out" \ - -Dflock_index=0 \ - -Dv8_enable_i18n_support=1 \ - -Duse_system_icu=1 \ - -Dconsole=readline \ - -Dcomponent=shared_library \ - -Dv8_target_arch=${arch} - ''; - - nativeBuildInputs = [ which ]; - buildInputs = [ readline python icu ]; - - buildFlags = [ - "LINK=g++" - "-C out" - "builddir=$(CURDIR)/Release" - "BUILDTYPE=Release" - ]; - - enableParallelBuilding = true; - - installPhase = '' - install -vD out/Release/d8 "$out/bin/d8" - ${if stdenv.system == "x86_64-darwin" then '' - install -vD out/Release/lib.target/libv8.dylib "$out/lib/libv8.dylib" - '' else '' - install -vD out/Release/lib.target/libv8.so "$out/lib/libv8.so" - ''} - cp -vr include "$out/" - ''; - - postFixup = if stdenv.isDarwin then '' - install_name_tool -change /usr/local/lib/libv8.dylib $out/lib/libv8.dylib -change /usr/lib/libgcc_s.1.dylib ${stdenv.cc.cc}/lib/libgcc_s.1.dylib $out/bin/d8 - install_name_tool -id $out/lib/libv8.dylib -change /usr/lib/libgcc_s.1.dylib ${stdenv.cc.cc}/lib/libgcc_s.1.dylib $out/lib/libv8.dylib - '' else null; - - meta = with stdenv.lib; { - description = "Google's open source JavaScript engine"; - platforms = with platforms; linux; - license = licenses.bsd3; - }; -} + sha256 = "1azf1b36gqj4z5x0k9wq2dkp99zfyhwb0d6i2cl5fjm3k6js7l45"; +}) diff --git a/pkgs/development/libraries/v8/generic.nix b/pkgs/development/libraries/v8/generic.nix new file mode 100644 index 000000000000..b056ba640d2d --- /dev/null +++ b/pkgs/development/libraries/v8/generic.nix @@ -0,0 +1,73 @@ +{ stdenv, fetchurl, gyp, readline, python, which, icu +, version +, sha256 +, ... +}: + +assert readline != null; + +let + arch = if stdenv.is64bit then "x64" else "ia32"; +in + +stdenv.mkDerivation rec { + name = "v8-${version}"; + inherit version; + + src = fetchurl { + url = "https://commondatastorage.googleapis.com/chromium-browser-official/" + + "${name}.tar.bz2"; + inherit sha256; + }; + + patchPhase = '' + sed -i 's,#!/usr/bin/env python,#!${python}/bin/python,' build/gyp_v8 + ''; + + configurePhase = '' + PYTHONPATH="tools/generate_shim_headers:$PYTHONPATH" \ + PYTHONPATH="$(toPythonPath ${gyp}):$PYTHONPATH" \ + build/gyp_v8 \ + -f make \ + --generator-output="out" \ + -Dflock_index=0 \ + -Dv8_enable_i18n_support=1 \ + -Duse_system_icu=1 \ + -Dconsole=readline \ + -Dcomponent=shared_library \ + -Dv8_target_arch=${arch} + ''; + + nativeBuildInputs = [ which ]; + buildInputs = [ readline python icu ]; + + buildFlags = [ + "LINK=g++" + "-C out" + "builddir=$(CURDIR)/Release" + "BUILDTYPE=Release" + ]; + + enableParallelBuilding = true; + + installPhase = '' + install -vD out/Release/d8 "$out/bin/d8" + ${if stdenv.system == "x86_64-darwin" then '' + install -vD out/Release/lib.target/libv8.dylib "$out/lib/libv8.dylib" + '' else '' + install -vD out/Release/lib.target/libv8.so "$out/lib/libv8.so" + ''} + cp -vr include "$out/" + ''; + + postFixup = if stdenv.isDarwin then '' + install_name_tool -change /usr/local/lib/libv8.dylib $out/lib/libv8.dylib -change /usr/lib/libgcc_s.1.dylib ${stdenv.cc.cc}/lib/libgcc_s.1.dylib $out/bin/d8 + install_name_tool -id $out/lib/libv8.dylib -change /usr/lib/libgcc_s.1.dylib ${stdenv.cc.cc}/lib/libgcc_s.1.dylib $out/lib/libv8.dylib + '' else null; + + meta = with stdenv.lib; { + description = "Google's open source JavaScript engine"; + platforms = with platforms; linux; + license = licenses.bsd3; + }; +} diff --git a/pkgs/servers/nosql/eventstore/default.nix b/pkgs/servers/nosql/eventstore/default.nix new file mode 100644 index 000000000000..e13d99c104d4 --- /dev/null +++ b/pkgs/servers/nosql/eventstore/default.nix @@ -0,0 +1,54 @@ +{ stdenv, fetchgit, fetchpatch, git, mono, v8, icu }: + +# There are some similarities with the pinta derivation. We should +# have a helper to make it easy to package these Mono apps. + +stdenv.mkDerivation rec { + name = "EventStore-${version}"; + version = "3.0.3"; + src = fetchgit { + url = "https://github.com/EventStore/EventStore.git"; + rev = "a1382252dd1ed0554ddb04015cdb2cbc1b0a65c1"; + sha256 = "07ir6jlli2q1yvsnyw8r8dfril6h1wmfj98yf7a6k81585v2mc6g"; + leaveDotGit = true; + }; + + patches = [ + # see: https://github.com/EventStore/EventStore/issues/461 + (fetchpatch { + url = https://github.com/EventStore/EventStore/commit/9a0987f19935178df143a3cf876becaa1b11ffae.patch; + sha256 = "04qw0rb1pypa8dqvj94j2mwkc1y6b40zrpkn1d3zfci3k8cam79y"; + }) + ]; + + buildPhase = '' + ln -s ${v8}/lib/libv8.so src/libs/libv8.so + ln -s ${icu}/lib/libicui18n.so src/libs/libicui18n.so + ln -s ${icu}/lib/libicuuc.so src/libs/libicuuc.so + + ./build.sh js1 + ./build.sh quick ${version} + ''; + + installPhase = '' + mkdir -p $out/{bin,lib/eventstore/clusternode} + cp -r bin/clusternode/* $out/lib/eventstore/clusternode/ + cat > $out/bin/clusternode << EOF + #!/bin/sh + exec ${mono}/bin/mono $out/lib/eventstore/clusternode/EventStore.ClusterNode.exe "\$@" + EOF + chmod +x $out/bin/clusternode + ''; + + buildInputs = [ git v8 mono ]; + + dontStrip = true; + + meta = { + homepage = https://geteventstore.com/; + description = "Event sourcing database with processing logic in JavaScript."; + license = stdenv.lib.licenses.bsd3; + maintainers = with stdenv.lib.maintainers; [ puffnfresh ]; + platforms = with stdenv.lib.platforms; linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3269737a3b35..2d480da59547 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -7832,6 +7832,10 @@ let inherit (pythonPackages) gyp; }; + v8_3_24_10 = callPackage ../development/libraries/v8/3.24.10.nix { + inherit (pythonPackages) gyp; + }; + v8 = callPackage ../development/libraries/v8 { inherit (pythonPackages) gyp; }; @@ -8425,6 +8429,10 @@ let elasticmq = callPackage ../servers/elasticmq { }; + eventstore = callPackage ../servers/nosql/eventstore { + v8 = v8_3_24_10; + }; + etcdctl = callPackage ../development/tools/etcdctl { }; exim = callPackage ../servers/mail/exim { };