Skip to content

Commit

Permalink
dev-ml/eliom: fix build with ocaml 4.03 and add missing dep on camlp4
Browse files Browse the repository at this point in the history
Package-Manager: portage-2.3.0
  • Loading branch information
aballier committed Aug 12, 2016
1 parent 05a6452 commit 6a42f01
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright 1999-2015 Gentoo Foundation
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

Expand Down Expand Up @@ -26,11 +26,18 @@ RDEPEND=">=dev-lang/ocaml-4.00:=[ocamlopt?]
dev-ml/ocaml-ssl:=
>=dev-ml/lwt-2.5.0:=
dev-ml/calendar:=
dev-ml/camlp4:=
ppx? ( >=dev-ml/ppx_tools-0.99.3:= )"
DEPEND="${RDEPEND}
dev-ml/ocamlbuild
dev-ml/opam"

src_prepare() {
if has_version '>=dev-lang/ocaml-4.03' ; then
epatch "${FILESDIR}/"{camlp4,oc43}.patch
fi
}

src_compile() {
if use ocamlopt ; then
emake PPX=$(usex ppx true false) all
Expand Down
48 changes: 48 additions & 0 deletions dev-ml/eliom/files/camlp4.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
commit f157a5b913451b85e8cfe7549c66e5c98669233b
Author: Vasilis Papavasileiou <[email protected]>
Date: Wed Mar 2 14:23:02 2016 +0100

Compile against Camlp4 4.02+7

diff --git a/src/syntax/pa_eliom_seed.ml b/src/syntax/pa_eliom_seed.ml
index c101ff8..dc31caa 100644
--- a/src/syntax/pa_eliom_seed.ml
+++ b/src/syntax/pa_eliom_seed.ml
@@ -632,8 +632,26 @@ module Register(Id : sig val name: string end)(Pass : Pass) = struct
| None ->
Printf.ksprintf (Syntax_error.raise loc) fmt

- module E2 = Camlp4.ErrorHandler.Register(Syntax_error)
- DELETE_RULE Gram expr: "{"; TRY [label_expr_list; "}"] END;
+ module E2 = Camlp4.ErrorHandler.Register(Syntax_error) ;;
+
+ try
+ DELETE_RULE Gram expr: "{"; TRY [label_expr_list; "}"] END
+ with Camlp4.Struct.Grammar.Delete.Rule_not_found _ ->
+ (let test_record_field =
+ Gram.Entry.of_parser "record_field" (fun strm ->
+ let rec loop = function
+ | [] -> ()
+ | (UIDENT _, _) :: (KEYWORD ".", _) :: rest -> loop rest
+ | (LIDENT _, _) :: (KEYWORD "=", _) :: _ -> ()
+ | (LIDENT _, _) :: (KEYWORD ";", _) :: _ -> ()
+ | [LIDENT _, _] -> ()
+ | _ -> raise Stream.Failure
+ in
+ loop (Stream.npeek 100 strm))
+ in
+ DELETE_RULE Gram expr:
+ "{"; test_record_field; label_expr_list; "}" END) ;;
+
DELETE_RULE Gram expr: "{"; TRY [expr LEVEL "."; "with"]; label_expr_list; "}" END;

(* Extending syntax *)
@@ -812,7 +830,7 @@ module Register(Id : sig val name: string end)(Pass : Pass) = struct
expr: LEVEL "simple"

[ [ KEYWORD "{"; lel = TRY [lel = label_expr_list; "}" -> lel] ->
- <:expr< { $lel$ } >>
+ Ast.ExRec (_loc, lel, Ast.ExNil _loc)
| KEYWORD "{shared#";
typ = TRY [ typ = OPT ctyp; KEYWORD "{" -> typ];
opt_lvl = dummy_set_level_shared_value_expr ;
37 changes: 37 additions & 0 deletions dev-ml/eliom/files/oc43.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
Index: eliom-5.0.0/src/lib/eliom_lib.client.mli
===================================================================
--- eliom-5.0.0.orig/src/lib/eliom_lib.client.mli
+++ eliom-5.0.0/src/lib/eliom_lib.client.mli
@@ -43,7 +43,6 @@ type 'a shared_value = 'a

val create_shared_value : 'a -> 'a client_value -> 'a shared_value

-exception Eliom_Internal_Error of string

(** This exception is raised (in Lwt) on the client if a call to a
server function {% <<a_api subproject="server"|val
Index: eliom-5.0.0/src/lib/eliom_lib.server.mli
===================================================================
--- eliom-5.0.0.orig/src/lib/eliom_lib.server.mli
+++ eliom-5.0.0/src/lib/eliom_lib.server.mli
@@ -50,7 +50,6 @@ type +'a shared_value
*)
exception Client_value_creation_invalid_context of string

-exception Eliom_Internal_Error of string

type file_info = Ocsigen_extensions.file_info

Index: eliom-5.0.0/src/syntax/pa_include.ml
===================================================================
--- eliom-5.0.0.orig/src/syntax/pa_include.ml
+++ eliom-5.0.0/src/syntax/pa_include.ml
@@ -27,7 +27,7 @@ module Make(Syntax : Camlp4.Sig.Camlp4Sy
class subst_type env = object (self)
inherit Ast.map as super
method sig_item si = match si with
- | Ast.SgTyp (_loc, (Ast.TyDcl (_, lid, _, Ast.TyNil _, _)))
+ | Ast.SgTyp (_loc, rf, (Ast.TyDcl (_, lid, _, Ast.TyNil _, _)))
when List.mem_assoc lid env -> <:sig_item< >>
| si -> super#sig_item si
method ctyp ty = match ty with

0 comments on commit 6a42f01

Please sign in to comment.