[Pkg-ocaml-maint-commits] [dose3] 04/07: Imported Upstream version 5.0~rc2

Ralf Treinen treinen at moszumanska.debian.org
Sun Jun 19 18:54:54 UTC 2016


This is an automated email from the git hooks/post-receive script.

treinen pushed a commit to branch experimental/master
in repository dose3.

commit 0740c4fa769e2210b5031f84cac05bbaed148837
Author: Ralf Treinen <treinen at free.fr>
Date:   Wed Jun 15 20:14:34 2016 +0200

    Imported Upstream version 5.0~rc2
---
 Makefile                      |  3 +-
 algo/depsolver.ml             | 36 +++++++++++++-------
 algo/depsolver_int.ml         | 79 ++++++++++++++++++++-----------------------
 algo/depsolver_int.mli        | 34 +++++++++++--------
 algo/strongconflicts_int.ml   |  2 +-
 algo/strongdeps.ml            | 10 +++---
 applications/distcheck.ml     | 13 -------
 applications/outdated.ml      | 16 ++++-----
 common/edosSolver.ml          | 26 +++++++++++---
 configure                     | 18 +++++-----
 configure.ac                  |  2 +-
 deb/tests.ml                  |  4 ++-
 doseparse/stdLoaders.ml       |  2 +-
 pef/pef.itarget               |  4 ---
 versioning/versioning.itarget |  4 ---
 15 files changed, 132 insertions(+), 121 deletions(-)

diff --git a/Makefile b/Makefile
index 4efc591..09464ff 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,8 @@ DIST_TARBALL = $(DIST_DIR).tar.gz
 #VERBOSE := -classic-display
 OBFLAGS := $(VERBOSE) -j 10 -no-links -cflags -warn-error,FPSXY
 APPFLAGS := $(VERBOSE) -j 10
-#OBFLAGS := $(OBFLAGS) -tag profile -tag debug
+#OBFLAGS := $(OBFLAGS) -tag debug
+#OBFLAGS := $(OBFLAGS) -tag profile
 #OBFLAGS := $(OBFLAGS) -classic-display
 
 addnotrpm:
diff --git a/algo/depsolver.ml b/algo/depsolver.ml
index acb36ca..2f05f51 100644
--- a/algo/depsolver.ml
+++ b/algo/depsolver.ml
@@ -19,6 +19,8 @@ let label =  __label ;;
 include Util.Logging(struct let label = label end) ;;
 
 type solver = Depsolver_int.solver
+let timer_solver = Util.Timer.create "Algo.Depsolver.solver" 
+let timer_init = Util.Timer.create "Algo.Depsolver.init" 
 
 let load ?(global_constraints=[]) universe =
   let global_constraints =
@@ -35,14 +37,15 @@ let load ?(global_constraints=[]) universe =
 *)
 let univcheck ?(global_constraints=[]) ?callback ?(explain=true) universe =
   let aux ?callback univ =
-    let timer = Util.Timer.create "Algo.Depsolver.univcheck" in
-    Util.Timer.start timer;
     let global_constraints =
       List.map (fun (vpkg,l) ->
         (vpkg,List.map (CudfAdd.pkgtoint universe) l)
       ) global_constraints
     in
+    Util.Timer.start timer_init;
     let solver = Depsolver_int.init_solver_univ ~global_constraints ~explain univ in
+    Util.Timer.stop timer_init ();
+    Util.Timer.start timer_solver;
     let failed = ref 0 in
     (* This is size + 1 because we encode the global constraint of the
      * universe as a package that must be tested like any other *)
@@ -53,7 +56,7 @@ let univcheck ?(global_constraints=[]) ?callback ?(explain=true) universe =
     (* we do not test the last package that encodes the global constraints
      * on the universe as it is tested all the time with all other packages. *)
     for id = 0 to size - 2 do if not(check id) then incr failed done;
-    Util.Timer.stop timer !failed
+    Util.Timer.stop timer_solver !failed
   in
   let map = new Common.Util.identity in
   match callback with
@@ -76,19 +79,26 @@ let listcheck ?(global_constraints=[]) ?callback ?(explain=true) universe pkglis
         (vpkg,List.map (CudfAdd.pkgtoint universe) l)
       ) global_constraints
     in
+    Util.Timer.start timer_init;
     let solver = Depsolver_int.init_solver_univ ~global_constraints ~explain univ in
-    let timer = Util.Timer.create "Algo.Depsolver.listcheck" in
-    Util.Timer.start timer;
+    Util.Timer.stop timer_init ();
+    Util.Timer.start timer_solver;
     let failed = ref 0 in
     let size = (Cudf.universe_size univ) + 1 in
     let tested = Array.make size false in
     Util.Progress.set_total Depsolver_int.progressbar_univcheck size ;
     let check = Depsolver_int.pkgcheck callback explain solver tested in
-    List.iter (function
-      |id when id = solver.Depsolver_int.globalid -> ()
-      |id -> if not(check id) then incr failed
-    ) idlist ;
-    Util.Timer.stop timer !failed
+    begin match (fst solver.Depsolver_int.globalid) with
+    |(false,false) ->
+        List.iter (fun id -> if not(check id) then incr failed) idlist
+    |_ -> 
+        let gid = snd solver.Depsolver_int.globalid in
+        List.iter (function
+          |id when id = gid -> ()
+          |id ->if not(check id) then incr failed
+        ) idlist 
+    end;
+    Util.Timer.stop timer_solver !failed
   in
   let idlist = List.map (CudfAdd.pkgtoint universe) pkglist in
   let map = new Common.Util.identity in
@@ -162,8 +172,8 @@ let univcheck_lowmem ?(global_constraints=[]) ?callback ?(explain=true) universe
 let edos_install_cache univ cudfpool pkglist =
   let idlist = List.map (CudfAdd.pkgtoint univ) pkglist in
   let closure = Depsolver_int.dependency_closure_cache cudfpool idlist in
-  let solver = Depsolver_int.init_solver_closure cudfpool closure in
-  let res = Depsolver_int.solve solver ~explain:true idlist in
+  let solver = Depsolver_int.init_solver_closure ~global_constraints:[] cudfpool closure in
+  let res = Depsolver_int.solve solver  ~explain:true idlist in
   Diagnostic.diagnosis solver.Depsolver_int.map univ res idlist
 ;;
 
@@ -545,7 +555,7 @@ let depclean ?(global_constraints=[]) ?(callback=(fun _ -> ())) universe pkglist
   (* if a package p depends on a package that make p uninstallable, then it 
      can be removed. If p depends on a missing package, the dependency can
      be equally removed *)
-  let test_depends univ (`CudfPool pool) pkg l =
+  let test_depends univ (`CudfPool (_,pool)) pkg l =
     List.fold_left (fun acc -> function
       |(vpkglist,vpkg,_,[]) -> (vpkglist,vpkg,[])::acc
       |(vpkglist,vpkg,depends,l) ->
diff --git a/algo/depsolver_int.ml b/algo/depsolver_int.ml
index 911766e..964a638 100644
--- a/algo/depsolver_int.ml
+++ b/algo/depsolver_int.ml
@@ -10,25 +10,9 @@
 (*  library, see the COPYING file for more information.                               *)
 (**************************************************************************************)
 
-(** Dependency solver. Low Level API *)
-
-(** Implementation of the EDOS algorithms (and more).
-    This module respects the cudf semantic. 
-
-    This module contains two type of functions.
-    Normal functions work on a cudf universe. These are just a wrapper to
-    _cache functions.
-
-    _cache functions work on a pool of ids that is a more compact
-    representation of a cudf universe based on arrays of integers.
-    _cache function can be used to avoid recreating the pool for each
-    operation and therefore speed up operations.
-*)
-
 open ExtLib
 open Common
 
-(** progress bar *)
 let progressbar_init = Util.Progress.create "Depsolver_int.init_solver"
 let progressbar_univcheck = Util.Progress.create "Depsolver_int.univcheck"
 
@@ -39,20 +23,19 @@ include Util.Logging(struct let label = label end) ;;
 module R = struct type reason = Diagnostic.reason_int end
 module S = EdosSolver.M(R)
 
-(** low level solver data type *)
 type solver = {
-  constraints : S.state; (** the sat problem *)
-  map : Util.projection; (** a map from cudf package ids to solver ids *)
-  globalid : int (* the last index of the cudfpool. 
-                    Used to encode a 'dummy' package and to enforce global
-                    constraints *)
+  constraints : S.state;
+  map : Util.projection;
+  globalid : (bool * bool) * int
 }
 
+type global_constraints = (Cudf_types.vpkglist * int list) list
+
 type dep_t = 
   ((Cudf_types.vpkg list * S.var list) list * 
    (Cudf_types.vpkg * S.var list) list ) 
 and pool = dep_t array
-and t = [`SolverPool of pool | `CudfPool of pool]
+and t = [`SolverPool of pool | `CudfPool of (bool * pool)]
 
 type result =
   |Success of (unit -> int list)
@@ -60,7 +43,7 @@ type result =
 
 (* cudf uid -> cudf uid array . Here we assume cudf uid are sequential
    and we can use them as an array index *)
-let init_pool_univ ?global_constraints univ =
+let init_pool_univ ~global_constraints univ =
   (* the last element of the array *)
   let size = Cudf.universe_size univ in
   let keep = Hashtbl.create 200 in
@@ -117,17 +100,14 @@ let init_pool_univ ?global_constraints univ =
   let keep_dll =
     Hashtbl.fold (fun cnstr {contents = l} acc ->
       ([cnstr],l) :: acc
-    ) keep (
-      if Option.is_none global_constraints then []
-      else Option.get global_constraints
-    )
+    ) keep global_constraints
   in
   pool.(size) <- (keep_dll,[]);
-  (`CudfPool pool)
+  (`CudfPool (keep_dll <> [],pool))
 
 (** this function creates an array indexed by solver ids that can be 
     used to init the edos solver *)
-let init_solver_pool map (`CudfPool cudfpool) closure =
+let init_solver_pool map (`CudfPool (keep_constraints,cudfpool)) closure =
   let convert (dll,cl) =
     let sdll = 
       List.map (fun (vpkgs,uidl) ->
@@ -258,9 +238,16 @@ let solve ?tested ~explain solver request =
       else
         Diagnostic.FailureInt(fun () -> [])
   in
-  (* the global id "package" is always co-installed *)
-  let il = List.map solver.map#vartoint (solver.globalid :: request) in
-  result S.solve_lst S.collect_reasons_lst il
+  match request,solver.globalid with
+  |[],((false,false),_) -> Diagnostic.SuccessInt(fun ?(all=false) () -> [])
+  |[],(((_,true)|(true,_)),gid) -> result S.solve S.collect_reasons (solver.map#vartoint gid)
+  |[i],((false,false),_) -> result S.solve S.collect_reasons (solver.map#vartoint i)
+  |l,((false,false),_) ->
+      let il = List.map solver.map#vartoint l in
+      result S.solve_lst S.collect_reasons_lst il
+  |l,(_,gid) ->
+      let il = List.map solver.map#vartoint (gid :: l) in
+      result S.solve_lst S.collect_reasons_lst il
 
 (* this function is used to "distcheck" a list of packages. The id is a cudfpool index *)
 let pkgcheck callback explain solver tested id =
@@ -298,15 +285,17 @@ let pkgcheck callback explain solver tested id =
     @param buffer debug buffer to print out debug messages
     @param univ cudf package universe
 *)
-let init_solver_univ ?global_constraints ?(buffer=false) ?(explain=true) univ =
+let init_solver_univ ~global_constraints ?(buffer=false) ?(explain=true) univ =
   let map = new Util.identity in
   (* here we convert a cudfpool in a varpool. The assumption
    * that cudf package identifiers are contiguous is essential ! *)
-  let `CudfPool pool = init_pool_univ ?global_constraints univ in
+  let `CudfPool (keep_constraints,pool) = init_pool_univ ~global_constraints univ in
   let varpool = `SolverPool pool in
   let constraints = init_solver_cache ~buffer ~explain varpool in
-  let globalid = Cudf.universe_size univ in
-  { constraints = constraints ; map = map; globalid = globalid }
+  let gid = Cudf.universe_size univ in
+  let global_constraints = global_constraints <> [] in
+  { constraints = constraints ; map = map;
+    globalid = ((keep_constraints,global_constraints),gid) }
 
 (** low level constraint solver initialization
  
@@ -315,13 +304,19 @@ let init_solver_univ ?global_constraints ?(buffer=false) ?(explain=true) univ =
     @param closure subset of packages used to initialize the solver
 *)
 (* pool = cudf pool - closure = dependency clousure . cudf uid list *)
-let init_solver_closure ?(buffer=false) (`CudfPool cudfpool) closure =
-  let globalid = Array.length cudfpool - 1 in
+let init_solver_closure ~global_constraints ?(buffer=false) 
+  (`CudfPool (keep_constraints,cudfpool)) closure =
+  let gid = Array.length cudfpool - 1 in
+  let global_constraints = global_constraints <> [] in
   let map = new Util.intprojection (List.length closure) in
   List.iter map#add closure;
-  let varpool = init_solver_pool map (`CudfPool cudfpool) closure in
+  let varpool =
+    init_solver_pool map
+      (`CudfPool (keep_constraints,cudfpool)) closure
+  in
   let constraints = init_solver_cache ~buffer varpool in
-  { constraints = constraints ; map = map; globalid = globalid }
+  { constraints ; map = map;
+    globalid = ((keep_constraints,global_constraints),gid) }
 
 (** return a copy of the state of the solver *)
 let copy_solver solver =
@@ -350,7 +345,7 @@ let reverse_dependencies univ =
   reverse
 
 let dependency_closure_cache ?(maxdepth=max_int) 
-  ?(conjunctive=false) (`CudfPool cudfpool) idlist =
+  ?(conjunctive=false) (`CudfPool (_,cudfpool)) idlist =
   let queue = Queue.create () in
   let globalid = (Array.length cudfpool - 1) in
   let visited = Hashtbl.create (2 * (List.length idlist)) in
diff --git a/algo/depsolver_int.mli b/algo/depsolver_int.mli
index 89a96ef..e28441f 100644
--- a/algo/depsolver_int.mli
+++ b/algo/depsolver_int.mli
@@ -34,12 +34,18 @@ module S : Common.EdosSolver.T with module X = R
     sat solver variables (that must be contiguous) to integers 
     representing the id of a package *)
 type solver = {
-  constraints : S.state;        (** the sat problem *)
-  map : Common.Util.projection; (** a map from cudf package ids to solver ids *)
-  globalid : int                (** the last index of the cudfpool. Used to encode 
-                                    a 'dummy' package and to enforce global constraints *)
+  constraints : S.state;         (** the sat problem *)
+  map : Common.Util.projection;  (** a map from cudf package ids to solver ids *)
+  globalid : (bool * bool) * int (** (keep_constrains,global_constrains),gui) where
+                                     gid is the last index of the cudfpool. Used to encode 
+                                     a 'dummy' package and to enforce global constraints.
+                                     keep_constrains and global_constrains are true if either
+                                     keep_constrains or global_constrains are enforceble.
+                                  *)
 }
 
+type global_constraints = (Cudf_types.vpkglist * int list) list
+
 (** Solver Package Pool. [pool_t] is an array where each index
   is an solver variable and the content of the array associates
   cudf dependencies to a list of solver varialbles representing
@@ -50,8 +56,10 @@ type dep_t =
 and pool = dep_t array
 (** A pool can either be a low level representation of the universe
     where all integers are interpreted as solver variables or a universe
-    where all integers are interpreted as cudf package indentifiers *)
-and t = [`SolverPool of pool | `CudfPool of pool]
+    where all integers are interpreted as cudf package indentifiers. The
+    boolean associate to the cudfpool is true if keep_constrains are 
+    present in the universe. *)
+and t = [`SolverPool of pool | `CudfPool of (bool * pool)]
 
 type result =
   | Success of (unit -> int list) (** return a function providing the list of the 
@@ -61,14 +69,12 @@ type result =
 
 (** Given a cudf universe , this function returns a [CudfPool]. 
     We assume that cudf uid are sequential and we can use them as an array index *)
-val init_pool_univ :
-  ?global_constraints:(Cudf_types.vpkglist * int list) list ->
-    Cudf.universe -> [> `CudfPool of pool]
+val init_pool_univ : global_constraints : global_constraints -> Cudf.universe -> [> `CudfPool of (bool * pool)]
 
 (** this function creates an array indexed by solver ids that can be 
     used to init the edos solver. Return a [SolverPool] *)
 val init_solver_pool : Common.Util.projection -> 
-  [< `CudfPool of pool] -> 'a list -> [> `SolverPool of pool]
+  [< `CudfPool of (bool * pool)] -> 'a list -> [> `SolverPool of pool]
 
 (** Initalise the sat solver. Operates only on solver ids [SolverPool] *)
 val init_solver_cache : ?buffer:bool -> ?explain:bool ->
@@ -99,8 +105,7 @@ val pkgcheck :
     @param buffer debug buffer to print out debug messages
     @param univ cudf package universe
 *)
-val init_solver_univ :
-  ?global_constraints:(Cudf_types.vpkglist * int list) list -> ?buffer: bool -> 
+val init_solver_univ : global_constraints : global_constraints -> ?buffer: bool -> 
     ?explain: bool -> Cudf.universe -> solver
 
 (** Constraint solver initialization
@@ -110,7 +115,8 @@ val init_solver_univ :
     @param closure subset of packages used to initialize the solver
 *)
 (* pool = cudf pool - closure = dependency clousure . cudf uid list *)
-val init_solver_closure : ?buffer:bool -> [< `CudfPool of pool] -> int list -> solver
+val init_solver_closure : global_constraints : global_constraints -> ?buffer:bool ->
+  [< `CudfPool of (bool * pool)] -> int list -> solver
 
 (** return a copy of the state of the solver *)
 val copy_solver : solver -> solver
@@ -123,7 +129,7 @@ val copy_solver : solver -> solver
 val reverse_dependencies : Cudf.universe -> int list array
 
 val dependency_closure_cache : ?maxdepth:int -> ?conjunctive:bool ->
-  [< `CudfPool of pool] -> int list -> S.var list
+  [< `CudfPool of (bool * pool)] -> int list -> S.var list
 
 (** return the dependency closure of the reverse dependency graph.
     The visit is bfs.    
diff --git a/algo/strongconflicts_int.ml b/algo/strongconflicts_int.ml
index 653b52e..f834587 100644
--- a/algo/strongconflicts_int.ml
+++ b/algo/strongconflicts_int.ml
@@ -75,7 +75,7 @@ let triangle reverse xpred ypred common =
 
 (* [strongconflicts mdf] return the list of strong conflicts *)
 let strongconflicts univ =
-  let solver = Depsolver_int.init_solver_univ univ in
+  let solver = Depsolver_int.init_solver_univ ~global_constraints:[] univ in
   let reverse = Depsolver_int.reverse_dependencies univ in
   let size = Cudf.universe_size univ in
   let cache = IG.make size in
diff --git a/algo/strongdeps.ml b/algo/strongdeps.ml
index 08dd606..59d62f8 100644
--- a/algo/strongdeps.ml
+++ b/algo/strongdeps.ml
@@ -41,7 +41,8 @@ let check_strong univ transitive graph solver p l =
   let pkg_p = CudfAdd.inttopkg univ p in
   List.iter (fun q ->
     let q = solver.Depsolver_int.map#inttovar q in
-    if q <> solver.Depsolver_int.globalid then
+    let gid = (snd solver.Depsolver_int.globalid) in
+    if q <> gid then
       let pkg_q = CudfAdd.inttopkg univ q in
       if p <> q then
         if not(Defaultgraphs.PackageGraph.G.mem_edge graph pkg_p pkg_q) then
@@ -50,7 +51,7 @@ let check_strong univ transitive graph solver p l =
   ) l
 
 (* true if at least one dependency is disjunctive *)
-let somedisj (`CudfPool cudfpool) id = 
+let somedisj (`CudfPool (_,cudfpool)) id = 
   let (depends,_) = cudfpool.(id) in
   if List.length depends > 0 then
     try
@@ -66,7 +67,8 @@ let somedisj (`CudfPool cudfpool) id =
    might be hidden in the closure.
 *)
 let strongdeps_int ?(transitive=true) graph univ pkglist =
-  let cudfpool = Depsolver_int.init_pool_univ univ in
+  let global_constraints = [] in
+  let cudfpool = Depsolver_int.init_pool_univ ~global_constraints univ in
   let pkglist_size = List.length pkglist in
   let universe_size = Cudf.universe_size univ in
 
@@ -78,7 +80,7 @@ let strongdeps_int ?(transitive=true) graph univ pkglist =
     let id = CudfAdd.pkgtoint univ pkg in
     if (pkglist_size <> universe_size) || (somedisj cudfpool id) then begin 
       let closure = Depsolver_int.dependency_closure_cache cudfpool [id] in
-      let solver = Depsolver_int.init_solver_closure cudfpool closure in
+      let solver = Depsolver_int.init_solver_closure ~global_constraints cudfpool closure in
       match Depsolver_int.solve solver ~explain:true [id] with
       |Diagnostic.FailureInt(_) -> ()
       |Diagnostic.SuccessInt(f_int) ->
diff --git a/applications/distcheck.ml b/applications/distcheck.ml
index 776d6d9..48c323f 100644
--- a/applications/distcheck.ml
+++ b/applications/distcheck.ml
@@ -240,19 +240,6 @@ let main () =
     let nbp =
       if (OptParse.Opt.is_set Options.checkonly) && (List.length checklist) = 0 then 0
       else if OptParse.Opt.is_set Options.checkonly || not(bg_pkglist = []) then 
-        (*
-        let subuniverse =
-          let l =
-            Cudf.fold_packages (fun acc pkg ->
-                match pkg.Cudf.keep with
-                |`Keep_package |`Keep_version | `Keep_feature 
-                  when pkg.Cudf.installed -> pkg::acc
-                |_ -> acc
-            ) checklist universe
-          in
-          Cudf.load_universe (CudfAdd.cone universe l)
-        in
-        *)
         Depsolver.listcheck ~global_constraints ~callback ~explain universe checklist
       else
         univcheck ~global_constraints ~callback ~explain universe 
diff --git a/applications/outdated.ml b/applications/outdated.ml
index 5e78749..c42e166 100644
--- a/applications/outdated.ml
+++ b/applications/outdated.ml
@@ -92,8 +92,6 @@ let version_of_target getv = function
   |`Lo v |`In (_,v) -> (getv v) - 1
 ;;
 
-let timer = Util.Timer.create "Solver"
-
 (* the repository should contain only the most recent version of each
    package *)
 let future ~options ?(checklist=[]) repository =
@@ -273,17 +271,16 @@ let outdated
   let results = Diagnostic.default_result universe_size in
   let callback d = 
     if summary then Diagnostic.collect results d ;
-    Diagnostic.fprintf ~pp ~failure ~explain fmt d 
+    if failure then
+      Diagnostic.fprintf ~pp ~failure ~explain fmt d 
   in
 
-  Util.Timer.start timer;
   let broken =
     if checklist <> [] then
-      Depsolver.listcheck ~callback universe checklist
+      Depsolver.listcheck ~callback ~explain universe checklist
     else
-      Depsolver.univcheck ~callback universe
+      Depsolver.univcheck ~callback ~explain universe
   in
-  ignore(Util.Timer.stop timer ());
 
   if failure then Format.fprintf fmt "@]@.";
 
@@ -306,8 +303,9 @@ let main () =
 
   StdDebug.enable_debug (OptParse.Opt.get Options.verbose);
   StdDebug.enable_bars (OptParse.Opt.get Options.progress)
-    ["Depsolver_int.univcheck";"Depsolver_int.init_solver"] ;
-  StdDebug.enable_timers (OptParse.Opt.get Options.timers) ["Solver"];
+  ["Depsolver_int.univcheck";"Depsolver_int.init_solver"];
+  StdDebug.enable_timers (OptParse.Opt.get Options.timers)
+    ["Algo.Depsolver.solver"; "Algo.Depsolver.init" ] ;
   StdDebug.all_quiet (OptParse.Opt.get Options.quiet);
 
   let checklist = OptParse.Opt.opt Options.checkonly in
diff --git a/common/edosSolver.ml b/common/edosSolver.ml
index 9b4b6f4..c699854 100644
--- a/common/edosSolver.ml
+++ b/common/edosSolver.ml
@@ -12,6 +12,7 @@
 (*  library, see the COPYING file for more information.                                *)
 (***************************************************************************************)
 
+
 module type S = sig
   type reason
 end
@@ -55,6 +56,27 @@ module IntHash =
     let hash i = i
   end)
 
+open ExtLib
+(*
+let (@) l1 l2 =
+  let rec geq = function
+    |[],[] -> true
+    |_::_,[] -> true
+    |[],_::_ -> false
+    |_::r1,_::r2 -> geq (r1,r2)
+  in 
+  if geq (l1,l2) then List.append l2 l1 else List.append l1 l2
+*)
+
+(* join two lists ignoring the order *)
+let (@) l1 l2 =
+  let rec aux l1 l2 acc =
+    match (l1,l2) with
+    |x::r1,y::r2 -> aux r1 r2 (x::y::acc)
+    |l1,[] -> List.fold_left (fun accu x -> x::accu) l1 acc
+    |[],l2 -> List.fold_left (fun accu x -> x::accu) l2 acc
+  in aux l1 l2 []
+
 module M (X : S) = struct
 
   module X = X
@@ -442,10 +464,6 @@ module M (X : S) = struct
       reasons := !r.reasons @ !reasons;
       for i = 0 to Array.length !r.all_lits - 1 do
         let p = !r.all_lits.(i) in
-(*
-      for i = 0 to Array.length !r.lits - 1 do
-        let p = !r.lits.(i) in
-*)
         let x = var_of_lit p in
         if  st.st_seen_var.(x) <> st.st_seen then begin
           assert (val_of_lit st p = False);
diff --git a/configure b/configure
index 62790bc..692fdb3 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for dose3 5.0.
+# Generated by GNU Autoconf 2.69 for dose3 5.0~rc2.
 #
 # Report bugs to <pietro.abate at inria.fr>.
 #
@@ -582,8 +582,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='dose3'
 PACKAGE_TARNAME='dose3'
-PACKAGE_VERSION='5.0'
-PACKAGE_STRING='dose3 5.0'
+PACKAGE_VERSION='5.0~rc2'
+PACKAGE_STRING='dose3 5.0~rc2'
 PACKAGE_BUGREPORT='pietro.abate at inria.fr'
 PACKAGE_URL=''
 
@@ -1317,7 +1317,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures dose3 5.0 to adapt to many kinds of systems.
+\`configure' configures dose3 5.0~rc2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1379,7 +1379,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of dose3 5.0:";;
+     short | recursive ) echo "Configuration of dose3 5.0~rc2:";;
    esac
   cat <<\_ACEOF
 
@@ -1475,7 +1475,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-dose3 configure 5.0
+dose3 configure 5.0~rc2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1733,7 +1733,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by dose3 $as_me 5.0, which was
+It was created by dose3 $as_me 5.0~rc2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -5933,7 +5933,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by dose3 $as_me 5.0, which was
+This file was extended by dose3 $as_me 5.0~rc2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -5986,7 +5986,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-dose3 config.status 5.0
+dose3 config.status 5.0~rc2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 694b2eb..c884911 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT(dose3, 5.0, pietro.abate at inria.fr)
+AC_INIT(dose3, 5.0~rc2, pietro.abate at inria.fr)
 AC_COPYRIGHT(Copyright 2009-2016 Mancoosi Project)
 
 AC_CONFIG_MACRO_DIR([m4])
diff --git a/deb/tests.ml b/deb/tests.ml
index 7079a5f..96728fe 100644
--- a/deb/tests.ml
+++ b/deb/tests.ml
@@ -1071,8 +1071,10 @@ let test_essential_constraints =
         SETPKG.S.of_list l
       ) (Debcudf.get_essential ~options tables)
     in
+    let cc = Debcudf.tocudf ~options tables (List.find (fun p -> p#name = "cc" && p#version = "1") pkgl) in
+    let dd = Debcudf.tocudf ~options tables (List.find (fun p -> p#name = "dd" && p#version = "1") pkgl) in
     SetPKG.assert_equal
-      (SetPKG.of_list [])
+      (SetPKG.of_list [SETPKG.S.of_list [cc]; SETPKG.S.of_list [dd]])
       (SetPKG.of_list essential)
   )
 ;;
diff --git a/doseparse/stdLoaders.ml b/doseparse/stdLoaders.ml
index d85e8fd..94be9c0 100644
--- a/doseparse/stdLoaders.ml
+++ b/doseparse/stdLoaders.ml
@@ -235,7 +235,7 @@ let rpm_load_list dll =
 
 (** transform a list of rpm control stanza into a cudf universe *)
 let rpm_load_universe l =
-  let (pr,cll,r,f,t,w) = rpm_load_list [l] in
+  let (pr,cll,r,f,t,w,_) = rpm_load_list [l] in
   (pr,Cudf.load_universe (List.flatten cll), r, f, t, w)
 
 (** parse a cudf file and return a triple (preamble,package list,request
diff --git a/pef/pef.itarget b/pef/pef.itarget
deleted file mode 100644
index b9d44ad..0000000
--- a/pef/pef.itarget
+++ /dev/null
@@ -1,4 +0,0 @@
-pef.cma
-pef.cmxa
-pef.cmxs
-pef.a
diff --git a/versioning/versioning.itarget b/versioning/versioning.itarget
deleted file mode 100644
index 78d77f9..0000000
--- a/versioning/versioning.itarget
+++ /dev/null
@@ -1,4 +0,0 @@
-versioning.cma
-versioning.cmxa
-versioning.cmxs
-versioning.a

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/dose3.git



More information about the Pkg-ocaml-maint-commits mailing list