lol
1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 ocaml,
6 findlib,
7 perl,
8 makeWrapper,
9 rresult,
10 bos,
11 pcre2,
12 re,
13 camlp-streams,
14 legacy ? false,
15}:
16
17if lib.versionOlder ocaml.version "4.02" then
18 throw "camlp5 is not available for OCaml ${ocaml.version}"
19else
20
21 let
22 params =
23 if lib.versionAtLeast ocaml.version "4.12" && !legacy then
24 rec {
25 version = "8.03.02";
26
27 src = fetchFromGitHub {
28 owner = "camlp5";
29 repo = "camlp5";
30 rev = version;
31 hash = "sha256-nz+VfGR/6FdBvMzPPpVpviAXXBWNqM3Ora96Yzx964o=";
32 };
33
34 nativeBuildInputs = [
35 makeWrapper
36 ocaml
37 findlib
38 perl
39 ];
40 buildInputs = [
41 bos
42 pcre2
43 re
44 rresult
45 ];
46 propagatedBuildInputs = [ camlp-streams ];
47 postInstall = ''
48 for prog in camlp5 camlp5o camlp5r camlp5sch mkcamlp5 ocpp5
49 do
50 wrapProgram $out/bin/$prog \
51 --prefix CAML_LD_LIBRARY_PATH : "$CAML_LD_LIBRARY_PATH"
52 done
53 '';
54
55 }
56 else
57 rec {
58 version = "7.14";
59 src = fetchFromGitHub {
60 owner = "camlp5";
61 repo = "camlp5";
62 rev = "rel${builtins.replaceStrings [ "." ] [ "" ] version}";
63 sha256 = "1dd68bisbpqn5lq2pslm582hxglcxnbkgfkwhdz67z4w9d5nvr7w";
64 };
65 nativeBuildInputs = [
66 ocaml
67 perl
68 ];
69 };
70 in
71
72 stdenv.mkDerivation (
73 params
74 // {
75
76 pname = "ocaml${ocaml.version}-camlp5";
77
78 strictDeps = true;
79
80 prefixKey = "-prefix ";
81
82 preConfigure = ''
83 configureFlagsArray=(--strict --libdir $out/lib/ocaml/${ocaml.version}/site-lib)
84 patchShebangs ./config/find_stuffversion.pl etc/META.pl
85 '';
86
87 buildFlags = [ "world.opt" ];
88
89 dontStrip = true;
90
91 meta = with lib; {
92 description = "Preprocessor-pretty-printer for OCaml";
93 longDescription = ''
94 Camlp5 is a preprocessor and pretty-printer for OCaml programs.
95 It also provides parsing and printing tools.
96 '';
97 homepage = "https://camlp5.github.io/";
98 license = licenses.bsd3;
99 platforms = ocaml.meta.platforms or [ ];
100 maintainers = with maintainers; [
101 maggesi
102 vbgl
103 ];
104 };
105 }
106 )