X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=febootstrap_debian.ml;h=23f3593bb5a4a5c60072e5eab85d11b8e7454959;hb=3ac623701e5fe5ce94b22b4f40f72ee0161d5184;hp=f26df4ae740d749354209ab8fe6c6f9c6988eac7;hpb=72101b100aa33b0b9879f9b18edfdd88c1aa2755;p=febootstrap.git diff --git a/febootstrap_debian.ml b/febootstrap_debian.ml index f26df4a..23f3593 100644 --- a/febootstrap_debian.ml +++ b/febootstrap_debian.ml @@ -32,12 +32,17 @@ let debian_detect () = file_exists "/etc/debian_version" && Config.aptitude <> "no" && Config.apt_cache <> "no" && Config.dpkg <> "no" -let debian_resolve_dependencies_and_download names = +let rec debian_resolve_dependencies_and_download names = let cmd = sprintf "%s depends --recurse -i %s | grep -v '^[<[:space:]]'" Config.apt_cache (String.concat " " (List.map Filename.quote names)) in let pkgs = run_command_get_lines cmd in + let pkgs = + if Config.apt_cache_depends_recurse_broken then + workaround_broken_apt_cache_depends_recurse (sort_uniq pkgs) + else + pkgs in (* Exclude packages matching [--exclude] regexps on the command line. *) let pkgs = @@ -78,6 +83,29 @@ let debian_resolve_dependencies_and_download names = List.sort compare pkgs +(* On Ubuntu 10.04 LTS, apt-cache depends --recurse is broken. It + * doesn't return the full list of dependencies. Therefore recurse + * into these dependencies one by one until we reach a fixpoint. + *) +and workaround_broken_apt_cache_depends_recurse names = + debug "workaround for broken 'apt-cache depends --recurse' command:\n %s" + (String.concat " " names); + + let names' = + List.map ( + fun name -> + let cmd = + sprintf "%s depends --recurse -i %s | grep -v '^[<[:space:]]'" + Config.apt_cache (Filename.quote name) in + run_command_get_lines cmd + ) names in + let names' = List.flatten names' in + let names' = sort_uniq names' in + if names <> names' then + workaround_broken_apt_cache_depends_recurse names' + else + names + let debian_list_files pkg = debug "unpacking %s ..." pkg;