diff options
Diffstat (limited to 'nixpkgs/pkgs/development/interpreters/pixie')
4 files changed, 275 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/interpreters/pixie/default.nix b/nixpkgs/pkgs/development/interpreters/pixie/default.nix new file mode 100644 index 000000000000..9b57e153aa05 --- /dev/null +++ b/nixpkgs/pkgs/development/interpreters/pixie/default.nix @@ -0,0 +1,93 @@ +{ stdenv, fetchgit, fetchurl, python2, makeWrapper, pkgconfig, gcc, + pypy, libffi, libedit, libuv, boost, zlib, + variant ? "jit", buildWithPypy ? false }: + +let + commit-count = "1364"; + common-flags = "--thread --gcrootfinder=shadowstack --continuation"; + variants = { + jit = { flags = "--opt=jit"; target = "target.py"; }; + jit-preload = { flags = "--opt=jit"; target = "target_preload.py"; }; + no-jit = { flags = ""; target = "target.py"; }; + no-jit-preload = { flags = ""; target = "target_preload.py"; }; + }; + pixie-src = fetchgit { + url = "https://github.com/pixie-lang/pixie.git"; + rev = "5eb0ccbe8b0087d3a5f2d0bbbc6998d624d3cd62"; + sha256 = "0pf31x5h2m6dpxlidv98qay1y179qw40cw4cb4v4xa88gmq2f3vm"; + }; + pypy-tag = "91db1a9"; + pypy-src = fetchurl { + name = "pypy-src-${pypy-tag}"; + url = "https://bitbucket.org/pypy/pypy/get/${pypy-tag}.tar.bz2"; + sha256 = "0ylbqvhbcp5m09l15i2q2h3a0vjd055x2r37cq71lkhgmmaxrwbq"; + }; + libs = [ libffi libedit libuv boost.dev boost.out zlib ]; + include-path = stdenv.lib.concatStringsSep ":" + (map (p: "${p}/include") libs); + library-path = stdenv.lib.concatStringsSep ":" + (map (p: "${p}/lib") libs); + bin-path = stdenv.lib.concatStringsSep ":" + (map (p: "${p}/bin") [ gcc ]); + build = {flags, target}: stdenv.mkDerivation rec { + pname = "pixie"; + version = "0-r${commit-count}-${variant}"; + nativeBuildInputs = [ makeWrapper pkgconfig ]; + buildInputs = libs; + PYTHON = if buildWithPypy + then "${pypy}/pypy-c/pypy-c" + else python2.interpreter; + unpackPhase = '' + cp -R ${pixie-src} pixie-src + mkdir pypy-src + (cd pypy-src + tar --strip-components=1 -xjf ${pypy-src}) + chmod -R +w pypy-src pixie-src + ''; + patchPhase = '' + (cd pixie-src + patch -p1 < ${./load_paths.patch} + libraryPaths='["${libuv}" "${libedit}" "${libffi.dev}" "${boost.dev}" "${boost.out}" "${zlib.dev}"]' + export libraryPaths + substituteAllInPlace ./pixie/ffi-infer.pxi) + ''; + buildPhase = ''( + PYTHONPATH="`pwd`/pypy-src:$PYTHONPATH"; + RPYTHON="`pwd`/pypy-src/rpython/bin/rpython"; + cd pixie-src + $PYTHON $RPYTHON ${common-flags} ${target} + find pixie -name "*.pxi" -exec ./pixie-vm -c {} \; + )''; + LD_LIBRARY_PATH = library-path; + C_INCLUDE_PATH = include-path; + LIBRARY_PATH = library-path; + PATH = bin-path; + installPhase = '' + mkdir -p $out/share $out/bin + cp pixie-src/pixie-vm $out/share/pixie-vm + cp -R pixie-src/pixie $out/share/pixie + makeWrapper $out/share/pixie-vm $out/bin/pixie \ + --prefix LD_LIBRARY_PATH : ${LD_LIBRARY_PATH} \ + --prefix C_INCLUDE_PATH : ${C_INCLUDE_PATH} \ + --prefix LIBRARY_PATH : ${LIBRARY_PATH} \ + --prefix PATH : ${PATH} + ''; + doCheck = true; + checkPhase = '' + RES=$(./pixie-src/pixie-vm -e "(print :ok)") + if [ "$RES" != ":ok" ]; then + echo "ERROR Unexpected output: '$RES'" + return 1 + else + echo "$RES" + fi + ''; + meta = { + description = "A clojure-like lisp, built with the pypy vm toolkit"; + homepage = "https://github.com/pixie-lang/pixie"; + license = stdenv.lib.licenses.lgpl3; + platforms = ["x86_64-linux" "i686-linux" "x86_64-darwin"]; + maintainers = with stdenv.lib.maintainers; [ bendlas ]; + }; + }; +in build (builtins.getAttr variant variants) diff --git a/nixpkgs/pkgs/development/interpreters/pixie/dust.nix b/nixpkgs/pkgs/development/interpreters/pixie/dust.nix new file mode 100644 index 000000000000..4a7f3423defd --- /dev/null +++ b/nixpkgs/pkgs/development/interpreters/pixie/dust.nix @@ -0,0 +1,35 @@ +{ stdenv, pixie, fetchFromGitHub }: + +stdenv.mkDerivation rec { + name = "dust-0-91"; + src = fetchFromGitHub { + owner = "pixie-lang"; + repo = "dust"; + rev = "efe469661e749a71e86858fd006f61464810575a"; + sha256 = "09n57b6haxwask9m8vimv42ikczf7lgfc7m9izjrcqgs0padvfzc"; + }; + buildInputs = [ pixie ]; + patches = [ ./make-paths-configurable.patch ]; + configurePhase = '' + pixiePath="${pixie}/bin/pixie-vm" \ + basePath="$out/share/dust" \ + substituteAll dust.in dust + chmod +x dust + ''; +# FIXME: AOT for dust +# buildPhase = '' +# find . -name "*.pxi" -exec pixie-vm -c {} \; +# ''; + installPhase = '' + mkdir -p $out/bin $out/share/dust + cp -a src/ run.pxi $out/share/dust + mv dust $out/bin/dust + ''; + + meta = { + description = "Provides tooling around pixie, e.g. a nicer repl, running tests and fetching dependencies"; + homepage = src.meta.homepage; + license = stdenv.lib.licenses.lgpl3; + platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin; + }; +} diff --git a/nixpkgs/pkgs/development/interpreters/pixie/load_paths.patch b/nixpkgs/pkgs/development/interpreters/pixie/load_paths.patch new file mode 100644 index 000000000000..a36d280c5867 --- /dev/null +++ b/nixpkgs/pkgs/development/interpreters/pixie/load_paths.patch @@ -0,0 +1,25 @@ +diff --git a/pixie/ffi-infer.pxi b/pixie/ffi-infer.pxi +index 9f13ac7..74301c2 100644 +--- a/pixie/ffi-infer.pxi ++++ b/pixie/ffi-infer.pxi +@@ -1,15 +1,12 @@ + (ns pixie.ffi-infer + (:require [pixie.io-blocking :as io])) + ++(defn -add-library-path [p] ++ (swap! load-paths conj (str p "/include")) ++ (swap! load-paths conj (str p "/lib"))) + +-(defn -add-rel-path [rel] +- (swap! load-paths conj (str (first @load-paths) "/" rel))) +- +-(-add-rel-path "lib") +-(-add-rel-path "include") +-(-add-rel-path "../lib") +-(-add-rel-path "../include") +- ++(doseq [lp @libraryPaths@] ++ (-add-library-path lp)) + + (def *config* nil) + (set-dynamic! (var *config*)) diff --git a/nixpkgs/pkgs/development/interpreters/pixie/make-paths-configurable.patch b/nixpkgs/pkgs/development/interpreters/pixie/make-paths-configurable.patch new file mode 100644 index 000000000000..122ab6e2c07b --- /dev/null +++ b/nixpkgs/pkgs/development/interpreters/pixie/make-paths-configurable.patch @@ -0,0 +1,122 @@ +From 0cbb82e606610d36e52c70d888995fbbf9b0d7c8 Mon Sep 17 00:00:00 2001 +From: Herwig Hochleitner <herwig@bendlas.net> +Date: Sun, 28 Feb 2016 16:34:14 +0100 +Subject: [PATCH] make paths configurable + +--- + dust | 52 ---------------------------------------------------- + dust.in | 43 +++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 43 insertions(+), 52 deletions(-) + delete mode 100755 dust + create mode 100755 dust.in + +diff --git a/dust b/dust +deleted file mode 100755 +index ffced9b..0000000 +--- a/dust ++++ /dev/null +@@ -1,52 +0,0 @@ +-#!/usr/bin/env bash +- +-base_path=$0 +-if [ -L "$base_path" ]; then +- base_path=`readlink $base_path` +-fi +-base_path=`dirname $base_path` +- +-pixie_path=`which pixie-vm` +-if [ -z "$pixie_path" ]; then +- echo "Error: 'pixie-vm' must be on your PATH" +- exit 1 +-fi +- +-function set_load_path() { +- load_path="" +- if ([ -f "project.edn" ] || [ -f "project.pxi" ]) && [ -f ".load-path" ]; then +- load_path="`cat .load-path`" +- fi +-} +- +-if [ ! -f "project.edn" ] && [ -f "project.pxi" ]; then +- echo "Warning: 'project.pxi' is deprecated, please use 'project.edn'." +- echo "To start you can run the following command:" +- echo " pixie-vm -l $base_path/src -e '(require dust.project :as p) (p/load-project!) (prn (dissoc @p/*project* :path))'" +- echo +-fi +- +-set_load_path +-run_dust="$pixie_path -l $base_path/src $load_path $base_path/run.pxi" +- +-case $1 in +- ""|"repl") +- rlwrap_cmd="" +- if [ -n "`which rlwrap`" ]; then +- rlwrap_cmd="rlwrap -aignored -n" +- fi +- $rlwrap_cmd $pixie_path $load_path +- ;; +- "run") +- shift +- file=$1 +- shift +- $pixie_path $load_path $file $@ +- ;; +- -h|--help) +- $run_dust help +- ;; +- *) +- $run_dust $@ +- ;; +-esac +diff --git a/dust.in b/dust.in +new file mode 100755 +index 0000000..44a7fbd +--- /dev/null ++++ b/dust.in +@@ -0,0 +1,43 @@ ++#!/usr/bin/env bash ++ ++base_path=@basePath@ ++pixie_path=@pixiePath@ ++ ++function set_load_path() { ++ load_path="" ++ if ([ -f "project.edn" ] || [ -f "project.pxi" ]) && [ -f ".load-path" ]; then ++ load_path="`cat .load-path`" ++ fi ++} ++ ++if [ ! -f "project.edn" ] && [ -f "project.pxi" ]; then ++ echo "Warning: 'project.pxi' is deprecated, please use 'project.edn'." ++ echo "To start you can run the following command:" ++ echo " pixie-vm -l $base_path/src -e '(require dust.project :as p) (p/load-project!) (prn (dissoc @p/*project* :path))'" ++ echo ++fi ++ ++set_load_path ++run_dust="$pixie_path -l $base_path/src $load_path $base_path/run.pxi" ++ ++case $1 in ++ ""|"repl") ++ rlwrap_cmd="" ++ if [ -n "`which rlwrap`" ]; then ++ rlwrap_cmd="rlwrap -aignored -n" ++ fi ++ $rlwrap_cmd $pixie_path $load_path ++ ;; ++ "run") ++ shift ++ file=$1 ++ shift ++ $pixie_path $load_path $file $@ ++ ;; ++ -h|--help) ++ $run_dust help ++ ;; ++ *) ++ $run_dust $@ ++ ;; ++esac +-- +2.7.1 + |