X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=fedora_ocaml_rebuild.ml;h=9cf135f15dda57c8b78b41f5b417b390a7f3a69e;hb=c4e0993e81c4bd3d1aadae4baa8d10ada8f06d76;hp=717572ee5bccf926afbe8f60bc4581b1c9fc51ef;hpb=d2052875bb9df0274192039f4b6eef064431e8f2;p=goaljobs-goals.git diff --git a/fedora_ocaml_rebuild.ml b/fedora_ocaml_rebuild.ml index 717572e..9cf135f 100644 --- a/fedora_ocaml_rebuild.ml +++ b/fedora_ocaml_rebuild.ml @@ -29,8 +29,9 @@ let blocked = [ "ocaml-pa-do"; (* build failure, complex *) "ocaml-lwt"; (* build failure on 4.02.0 *) "ocaml-preludeml"; (* build failure *) - "cduce"; (* camlp4-related failure, discussed upstream *) + "cduce"; (* broken again with latest 4.02 *) "frama-c"; (* build failure *) + "gappalib-coq"; (* build failure in configure script *) ] let blocked pkg = List.mem pkg blocked @@ -69,6 +70,30 @@ let source_packages = in List.filter (fun pkg -> not (is_blocked pkg)) source_packages +(* Short the dependencies lists so that the build order is stable + * each time it runs. + *) +let pkg_deps = + List.map (fun (pkg, deps) -> pkg, List.sort compare deps) pkg_deps + +(* Sort the source packages so that the packages with the largest + * number of reverse dependencies [other packages that depend on it] + * appear earlier in the list, on the basis that building these + * packages first has the greatest advantage. + *) +let source_packages = + let rdeps pkg = + Utils.filter_map ( + fun (rdep, deps) -> if List.mem pkg deps then Some rdep else None + ) pkg_deps + in + let cmp p1 p2 = + let r1 = rdeps p1 and r2 = rdeps p2 in + let n1 = List.length r1 and n2 = List.length r2 in + if n1 <> n2 then compare n2 n1 else compare p1 p2 + in + List.sort cmp source_packages + let () = printf "final list of source packages = %s\n%!" (String.concat " " source_packages) @@ -80,9 +105,17 @@ let install_build_dependencies pkg = sh "sudo yum-builddep -y --disablerepo=\\* --enablerepo=%s %s" (quote yum_repo) (fedora_specfile pkg branch) +(* Unset MAKEFLAGS so it doesn't affect local builds. *) +let () = Unix.putenv "MAKEFLAGS" "" + (* Goal: rebuild all packages. *) let rec goal all () = - List.iter (fun pkg -> require (rebuild_started pkg)) source_packages + let n = List.length source_packages in + List.iteri ( + fun i pkg -> + require (rebuild_started pkg); + printf "*** *** rebuilt %d/%d packages *** ***\n%!" (i+1) n + ) source_packages (* Goal: That 'package' has been rebuilt and exists in Koji. *) and rebuilt pkg =