1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-10-22 20:41:26 +00:00

- Update ocamlgraph to 1.8.3

- This includes two patches from upstream,
  (will be included in the next release)

Submitted by:	bf
This commit is contained in:
Johan van Selst 2013-06-14 05:12:34 +00:00
parent c27dac147f
commit b9882db939
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=320883
4 changed files with 108 additions and 9 deletions

View File

@ -2,10 +2,10 @@
# $FreeBSD$
PORTNAME= ocamlgraph
PORTVERSION= 1.8.2
PORTREVISION= 1
PORTVERSION= 1.8.3
CATEGORIES= math
MASTER_SITES= http://ocamlgraph.lri.fr/download/
MASTER_SITES= http://ocamlgraph.lri.fr/download/ \
ftp://ftp.stack.nl/pub/users/johans/ocamlgraph/
PKGNAMEPREFIX= ocaml-
MAINTAINER= johans@FreeBSD.org
@ -51,10 +51,6 @@ post-patch:
.if empty(PORT_OPTIONS:MGUI)
# Override auto-detection
@${REINPLACE_CMD} -Ee 's/(LABLGTK2)=yes/\1=no/' ${WRKSRC}/configure
.else
@${REINPLACE_CMD} -Ee 's@(\+|/)(lablgtk2)@\1site-lib/\2@' \
${WRKSRC}/configure \
${WRKSRC}/view_graph/Makefile
.endif
post-install:

View File

@ -1,2 +1,2 @@
SHA256 (ocamlgraph-1.8.2.tar.gz) = e54ae60cd977a032854166dad56348d0fb76c6cd8e03e960af455268f0c8b5a6
SIZE (ocamlgraph-1.8.2.tar.gz) = 249253
SHA256 (ocamlgraph-1.8.3.tar.gz) = 0df7114b6b6a57125b9c998cc08870b6595fcfd6f2376a0e84cb666c1fd345bd
SIZE (ocamlgraph-1.8.3.tar.gz) = 262876

View File

@ -0,0 +1,100 @@
diff --git CHANGES CHANGES
index 5a8db64..8b53839 100644
--- CHANGES
+++ CHANGES
@@ -1,7 +1,10 @@
+ o Merge: fixed bug with vertices with no incoming nor outcoming edge.
+ o fixed compilation issue with OCaml 3.12.1
+
version 1.8.3, April 17, 2013
---------------------------
- o new module Merge implementing several different of merges of vertices and
+ o new module Merge implementing several different merges of vertices and
edges into a graph (contributed by Emmanuel Haucourt)
o fixed DOT parser (contributed by Alex Reece)
o Topological: fixed bug in presence of disjoint cycles; new implementation
diff --git src/merge.ml src/merge.ml
index c8581e3..563ab77 100644
--- src/merge.ml
+++ src/merge.ml
@@ -57,12 +57,26 @@ module B(B: Builder.S) = struct
in
B.G.fold_edges_e f g []
+ (* former buggy version the case where v is neither the source nor the
+ destination of some arrow was not taken into account, so that vertices were
+ just removed
+
+ let merge_vertex g vl = match vl with
+ | [] -> g
+ | _ :: vl' ->
+ let to_be_added = identify_extremities g vl in
+ let g = List.fold_left B.remove_vertex g vl' in
+ List.fold_left B.add_edge_e g to_be_added
+ *)
+
let merge_vertex g vl = match vl with
| [] -> g
- | _ :: vl' ->
+ | v :: vl' ->
let to_be_added = identify_extremities g vl in
let g = List.fold_left B.remove_vertex g vl' in
- List.fold_left B.add_edge_e g to_be_added
+ if to_be_added = []
+ then B.add_vertex g v
+ else List.fold_left B.add_edge_e g to_be_added
let merge_edges_e ?src ?dst g el = match el with
| e :: el' ->
@@ -108,13 +122,32 @@ module B(B: Builder.S) = struct
in
let edges_to_be_merged = B.G.fold_edges_e collect_edge g [] in
merge_edges_e ?src ?dst g edges_to_be_merged
+
+ (* To deduce a comparison function on labels from a comparison function on
+ edges *)
+
+ let compare_label g =
+ try
+ let default_vertex =
+ let a_vertex_of_g = ref None in
+ (try B.G.iter_vertex (fun v -> a_vertex_of_g := Some v ; raise Exit) g
+ with Exit -> ());
+ match !a_vertex_of_g with
+ | Some v -> v
+ | None -> raise Exit (*hence g is empty*) in
+ fun l1 l2 ->
+ let e1 = B.G.E.create default_vertex l1 default_vertex in
+ let e2 = B.G.E.create default_vertex l2 default_vertex in
+ B.G.E.compare e1 e2
+ with Exit -> (fun l1 l2 -> 0)
let merge_isolabelled_edges g =
let module S = Set.Make(B.G.V) in
let do_meet s1 s2 = S.exists (fun x -> S.mem x s2) s1 in
let module M =
- (* TODO: using [compare] here is really suspicious *)
- Map.Make(struct type t = B.G.E.label let compare = compare end)
+ (* TODO: using [compare] here is really suspicious ...
+ DONE yet not so clean *)
+ Map.Make(struct type t = B.G.E.label let compare = compare_label g end)
in
let accumulating e accu =
let l = B.G.E.label e in
diff --git src/merge.mli src/merge.mli
index 3b13413..8e574ae 100644
--- src/merge.mli
+++ src/merge.mli
@@ -133,10 +133,7 @@ module I(G: Sig.I): sig
?loop_killer:bool -> ?specified_vertex:(vertex list -> vertex) -> graph ->
unit
-end with type graph = G.t
- and type vertex := G.vertex
- and type edge := G.edge
- and type edge_label = G.E.label
+end
(*
Local Variables:

View File

@ -11,6 +11,7 @@
%%OCAMLGRAPHDIR%%/components.mli
%%OCAMLGRAPHDIR%%/contraction.mli
%%OCAMLGRAPHDIR%%/delaunay.mli
%%OCAMLGRAPHDIR%%/dominator.mli
%%OCAMLGRAPHDIR%%/dot.mli
%%OCAMLGRAPHDIR%%/dot_ast.mli
%%OCAMLGRAPHDIR%%/dot_parser.mli
@ -24,12 +25,14 @@
%%OCAMLGRAPHDIR%%/graph.cmo
%%OCAMLGRAPHDIR%%/graph.cmx
%%OCAMLGRAPHDIR%%/graph.cmxa
%%OCAMLGRAPHDIR%%/graphml.mli
%%OCAMLGRAPHDIR%%/graphviz.mli
%%OCAMLGRAPHDIR%%/imperative.mli
%%OCAMLGRAPHDIR%%/kruskal.mli
%%OCAMLGRAPHDIR%%/leaderlist.mli
%%OCAMLGRAPHDIR%%/mcs_m.mli
%%OCAMLGRAPHDIR%%/md.mli
%%OCAMLGRAPHDIR%%/merge.mli
%%OCAMLGRAPHDIR%%/minsep.mli
%%OCAMLGRAPHDIR%%/nonnegative.mli
%%OCAMLGRAPHDIR%%/oper.mli