blob: 99e53610c01c4a1bfd7521665e310707e697f60e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
{ stdenv, fetchFromGitHub, ocamlPackages, makeWrapper, writeScript
, dune, python3, rsync, fetchpatch }:
let
# Manually set version - the setup script requires
# hg and git + keeping the .git directory around.
pyre-version = "0.0.14";
versionFile = writeScript "version.ml" ''
cat > "./version.ml" <<EOF
open Core
let build_info () =
"pyre-nixpkgs ${pyre-version}"
let version () =
"${pyre-version}"
let log_version_banner () =
Log.info "Running as pid: %d" (Pid.to_int (Unix.getpid ()));
Log.info "Version: %s" (version ());
EOF
'';
pyre-bin = stdenv.mkDerivation {
name = "pyre-${pyre-version}";
src = fetchFromGitHub {
owner = "facebook";
repo = "pyre-check";
rev = "v${pyre-version}";
sha256 = "0c8xzaa3ljqb6llr041sydw0l4xqn7x21nw9vaymdxh35nx9bp2v";
};
nativeBuildInputs = [ makeWrapper ];
buildInputs = with ocamlPackages; [
ocaml
findlib
menhir
yojson
core
sedlex
ppx_deriving_yojson
ocamlbuild
ppxlib
dune
ounit
# python36Packages.python36Full # TODO
];
buildPhase = ''
# build requires HOME to be set
export HOME=.
# "external" because https://github.com/facebook/pyre-check/pull/8/files
cp Makefile.template Makefile
sed "s/%VERSION%/external/" dune.in > dune
cp ${versionFile} ./scripts/generate-version-number.sh
mkdir $(pwd)/build
export OCAMLFIND_DESTDIR=$(pwd)/build
export OCAMLPATH=$OCAMLPATH:$(pwd)/build
make release
'';
checkPhase = ''
make test
# ./scripts/run-python-tests.sh # TODO: once typeshed and python bits are added
'';
# Note that we're not installing the typeshed yet.
# Improvement for a future version.
installPhase = ''
mkdir -p $out/bin
cp ./_build/default/main.exe $out/bin/pyre.bin
'';
meta = with stdenv.lib; {
description = "A performant type-checker for Python 3";
homepage = https://pyre-check.org;
license = licenses.mit;
platforms = with platforms; linux;
maintainers = with maintainers; [ teh ];
};
};
typeshed = stdenv.mkDerivation {
name = "typeshed";
# typeshed doesn't have versions, it seems to be synchronized with
# mypy relases. I'm assigning a random version here (same as pyre).
version = pyre-version;
src = fetchFromGitHub {
owner = "python";
repo = "typeshed";
rev = "a08c6ea";
sha256 = "0wy8yh43vhyyc4g7iqnmlj66kz5in02y5qc0c4jdckhpa3mchaqk";
};
phases = [ "unpackPhase" "installPhase" ];
installPhase = "cp -r $src $out";
};
in python3.pkgs.buildPythonApplication rec {
pname = "pyre-check";
version = pyre-version;
src = fetchFromGitHub {
owner = "facebook";
repo = "pyre-check";
rev = "v${pyre-version}";
sha256 = "0ig7bx2kfn2kbxw74wysh5365yp5gyby42l9l29iclrzdghgk32l";
};
patches = [
(fetchpatch {
url = "https://github.com/facebook/pyre-check/commit/b473d2ed9fc11e7c1cd0c7b8c42f521e5cdc2003.patch";
sha256 = "05xvyp7j4n6z92bxf64rxfq5pvaadxgx1c8c5qziy75vdz72lkcy";
})
./pyre-bdist-wheel.patch
];
# The build-pypi-package script does some funky stuff with build
# directories - easier to patch it a bit than to replace it
# completely though:
postPatch = ''
mkdir ./build
substituteInPlace scripts/build-pypi-package.sh \
--replace 'NIX_BINARY_FILE' '${pyre-bin}/bin/pyre.bin' \
--replace 'BUILD_ROOT="$(mktemp -d)"' "BUILD_ROOT=$(pwd)/build"
'';
buildInputs = [ pyre-bin rsync ];
propagatedBuildInputs = with python3.pkgs; [ docutils typeshed ];
buildPhase = ''
bash scripts/build-pypi-package.sh --version ${pyre-version} --bundle-typeshed ${typeshed}
cp -r build/dist dist
'';
doCheck = false; # can't open file 'nix_run_setup':
}
|