From 5fa281ee6a855916f85192ca5ff2bfcb3478c048 Mon Sep 17 00:00:00 2001 From: Guillaume Girol Date: Mon, 12 Oct 2026 12:00:00 +0000 Subject: [PATCH] comby: 1.8.1 -> 1.8.1-unstable-2026-06-08 Unbreak comby by building an unreleased commit with support for ocaml5. --- pkgs/development/tools/comby/comby.patch | 1076 ---------------------- pkgs/development/tools/comby/default.nix | 68 +- pkgs/top-level/all-packages.nix | 4 +- 3 files changed, 28 insertions(+), 1120 deletions(-) delete mode 100644 pkgs/development/tools/comby/comby.patch diff --git a/pkgs/development/tools/comby/comby.patch b/pkgs/development/tools/comby/comby.patch deleted file mode 100644 index b780560093d4..000000000000 --- a/pkgs/development/tools/comby/comby.patch +++ /dev/null @@ -1,1076 +0,0 @@ -diff --git a/comby-kernel.opam b/comby-kernel.opam -index 9db7cc5..83e6e7b 100644 ---- a/comby-kernel.opam -+++ b/comby-kernel.opam -@@ -20,7 +20,7 @@ build: [ - depends: [ - "dune" {>= "2.8.0"} - "ocaml" {>= "4.08.1"} -- "core_kernel" -+ "core-kernel" {>= "v0.16.0"} - "mparser" {>= "1.3"} - "mparser-pcre" - "ppx_deriving" -diff --git a/comby-semantic.opam b/comby-semantic.opam -index 88563f6..fbbc122 100644 ---- a/comby-semantic.opam -+++ b/comby-semantic.opam -@@ -20,7 +20,7 @@ build: [ - depends: [ - "dune" {>= "2.8.0"} - "ocaml" {>= "4.08.1"} -- "core_kernel" -+ "core_kernel" {>= "v0.15.0"} - "ppx_deriving" - "lwt" - "cohttp" -diff --git a/comby.opam b/comby.opam -index 9e5d96b..d5be316 100644 ---- a/comby.opam -+++ b/comby.opam -@@ -31,7 +31,7 @@ depends: [ - "cohttp-lwt-unix" - "comby-kernel" {= "1.7.0"} - "comby-semantic" {= "1.7.0"} -- "core" -+ "core" {>= "v0.16.0"} - "hack_parallel" {arch != "arm32" & arch != "arm64"} - "lwt" - "lwt_react" -diff --git a/lib/app/configuration/command_configuration.ml b/lib/app/configuration/command_configuration.ml -index 75c3107..29826a9 100644 ---- a/lib/app/configuration/command_configuration.ml -+++ b/lib/app/configuration/command_configuration.ml -@@ -1,7 +1,7 @@ - open Core - open Camlzip - --open Polymorphic_compare -+open Poly - - open Comby_kernel - -@@ -16,21 +16,21 @@ type 'a next = - - let fold_directory ?(sorted=false) root ~init ~f = - let rec aux acc absolute_path depth = -- if Sys.is_file absolute_path = `Yes then -+ if Sys_unix.is_file absolute_path = `Yes then - match f acc ~depth ~absolute_path ~is_file:true with - | Continue acc - | Skip acc -> acc -- else if Sys.is_directory absolute_path = `Yes then -+ else if Sys_unix.is_directory absolute_path = `Yes then - match f acc ~depth ~absolute_path ~is_file:false with - | Skip acc -> acc - | Continue acc -> - let dir_contents = - if Option.is_some (Sys.getenv "COMBY_TEST") || sorted then -- Sys.ls_dir absolute_path -+ Sys_unix.ls_dir absolute_path - |> List.sort ~compare:String.compare - |> List.rev - else -- Sys.ls_dir absolute_path -+ Sys_unix.ls_dir absolute_path - in - List.fold dir_contents ~init:acc ~f:(fun acc subdir -> - aux acc (Filename.concat absolute_path subdir) (depth + 1)) -@@ -50,8 +50,8 @@ let parse_source_directories - let exact_file_paths, file_patterns = - List.partition_map file_filters ~f:(fun path -> - let is_exact path = -- (String.contains path '/' && Sys.is_file path = `Yes) -- || (Sys.is_file ("." ^/ path) = `Yes) (* See if it matches something in the current directory *) -+ (String.contains path '/' && Sys_unix.is_file path = `Yes) -+ || (Sys_unix.is_file ("." ^/ path) = `Yes) (* See if it matches something in the current directory *) - in - if is_exact path then Either.First path else Either.Second path) - in -@@ -167,8 +167,8 @@ let parse_templates ?metasyntax ?(warn_for_missing_file_in_dir = false) paths = - let f acc ~depth:_ ~absolute_path ~is_file = - let is_leaf_directory absolute_path = - not is_file && -- Sys.ls_dir absolute_path -- |> List.for_all ~f:(fun path -> Sys.is_directory (absolute_path ^/ path) = `No) -+ Sys_unix.ls_dir absolute_path -+ |> List.for_all ~f:(fun path -> Sys_unix.is_directory (absolute_path ^/ path) = `No) - in - if is_leaf_directory absolute_path then - match parse_directory absolute_path with -@@ -178,7 +178,7 @@ let parse_templates ?metasyntax ?(warn_for_missing_file_in_dir = false) paths = - Continue acc - in - List.concat_map paths ~f:(fun path -> -- if Sys.is_directory path = `Yes then -+ if Sys_unix.is_directory path = `Yes then - fold_directory path ~sorted:true ~init:[] ~f - else - parse_toml ?metasyntax path) -@@ -428,7 +428,7 @@ let parse_metasyntax metasyntax_path = - match metasyntax_path with - | None -> Matchers.Metasyntax.default_metasyntax - | Some metasyntax_path -> -- match Sys.file_exists metasyntax_path with -+ match Sys_unix.file_exists metasyntax_path with - | `No | `Unknown -> - Format.eprintf "Could not open file: %s@." metasyntax_path; - exit 1 -@@ -477,14 +477,14 @@ let emit_errors { input_options; output_options; _ } = - ; Option.is_some input_options.directory_depth - && Option.value_exn (input_options.directory_depth) < 0 - , "-depth must be 0 or greater." -- ; Sys.is_directory input_options.target_directory = `No -+ ; Sys_unix.is_directory input_options.target_directory = `No - , "Directory specified with -d or -directory is not a directory." - ; output_options.json_only_diff && not output_options.json_lines - , "-json-only-diff can only be supplied with -json-lines." - ; (Option.is_some output_options.chunk_matches) && Option.is_some input_options.zip_file - , "chunk-matches output format is not supported for zip files." - ; Option.is_some output_options.interactive_review && -- (not (String.equal input_options.target_directory (Sys.getcwd ()))) -+ (not (String.equal input_options.target_directory (Sys_unix.getcwd ()))) - , "Please remove the -d option and `cd` to the directory where you want to \ - review from. The -review, -editor, or -default-no options should only be run \ - at the root directory of the project files to patch." -@@ -492,11 +492,11 @@ let emit_errors { input_options; output_options; _ } = - match input_options.templates with - | Some inputs -> - List.find_map inputs ~f:(fun input -> -- if Sys.is_file input = `Yes then -+ if Sys_unix.is_file input = `Yes then - (match Toml.Parser.from_filename input with - | `Error (s, _) -> Some s - | _ -> None) -- else if not (Sys.is_directory input = `Yes) then -+ else if not (Sys_unix.is_directory input = `Yes) then - Some (Format.sprintf "Directory %S specified with -templates is not a directory." input) - else - None) -@@ -611,7 +611,7 @@ let filter_zip_entries file_filters exclude_directory_prefix exclude_file_prefix - - let syntax custom_matcher_path = - match -- Sys.file_exists custom_matcher_path with -+ Sys_unix.file_exists custom_matcher_path with - | `No | `Unknown -> - Format.eprintf "Could not open file: %s@." custom_matcher_path; - exit 1 -@@ -795,7 +795,7 @@ let create - | Directory -> - let target_directory = - if target_directory = "." then -- Filename.realpath target_directory -+ Filename_unix.realpath target_directory - else - target_directory - in -diff --git a/lib/app/configuration/dune b/lib/app/configuration/dune -index e0f9748..e417cfe 100644 ---- a/lib/app/configuration/dune -+++ b/lib/app/configuration/dune -@@ -1,6 +1,21 @@ - (library -- (name configuration) -- (public_name comby.configuration) -- (instrumentation (backend bisect_ppx)) -- (preprocess (pps ppx_deriving.show ppx_sexp_conv ppx_sexp_message ppx_deriving_yojson)) -- (libraries comby-kernel comby-semantic comby.patdiff comby.camlzip core yojson ppx_deriving_yojson toml lwt lwt.unix tar tar-unix)) -+ (name configuration) -+ (public_name comby.configuration) -+ (instrumentation -+ (backend bisect_ppx)) -+ (preprocess -+ (pps ppx_deriving.show ppx_sexp_conv ppx_sexp_message ppx_deriving_yojson)) -+ (libraries -+ comby-kernel -+ comby-semantic -+ comby.patdiff -+ comby.camlzip -+ core -+ core_unix.sys_unix -+ yojson -+ ppx_deriving_yojson -+ toml -+ lwt -+ lwt.unix -+ tar -+ tar-unix)) -diff --git a/lib/app/configuration/external_semantic.ml b/lib/app/configuration/external_semantic.ml -index bdc7051..ac69b1b 100644 ---- a/lib/app/configuration/external_semantic.ml -+++ b/lib/app/configuration/external_semantic.ml -@@ -2,13 +2,10 @@ open Core_kernel - - open Comby_semantic - --let debug = -- match Sys.getenv "DEBUG_COMBY" with -- | exception Not_found -> false -- | _ -> true -+let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some - - let lsif_hover ~name:_ ~filepath ~line ~column = -- String.chop_prefix_if_exists filepath ~prefix:(Sys.getcwd ()) |> fun filepath_relative_root -> -+ String.chop_prefix_if_exists filepath ~prefix:(Sys_unix.getcwd ()) |> fun filepath_relative_root -> - if debug then Format.printf "File relative root: %s@." filepath; - if debug then Format.printf "Querying type at %d::%d@." line column; - let context = -diff --git a/lib/app/dune b/lib/app/dune -index 2ed553c..a91f826 100644 ---- a/lib/app/dune -+++ b/lib/app/dune -@@ -1,9 +1,8 @@ - (library -- (name comby) -- (public_name comby) -- (instrumentation (backend bisect_ppx)) -- (preprocess (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv)) -- (libraries -- core -- comby-kernel -- comby.pipeline)) -+ (name comby) -+ (public_name comby) -+ (instrumentation -+ (backend bisect_ppx)) -+ (preprocess -+ (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv)) -+ (libraries core comby-kernel comby.pipeline)) -diff --git a/lib/app/interactive/dune b/lib/app/interactive/dune -index 815aff5..63c1757 100644 ---- a/lib/app/interactive/dune -+++ b/lib/app/interactive/dune -@@ -1,5 +1,12 @@ - (library -- (name interactive) -- (public_name comby.interactive) -- (preprocess (pps ppx_sexp_conv)) -- (libraries comby-kernel comby.configuration core shell.filename_extended lwt lwt.unix)) -+ (name interactive) -+ (public_name comby.interactive) -+ (preprocess -+ (pps ppx_sexp_conv)) -+ (libraries -+ comby-kernel -+ comby.configuration -+ core -+ shell.filename_extended -+ lwt -+ lwt.unix)) -diff --git a/lib/app/interactive/interactive.ml b/lib/app/interactive/interactive.ml -index d4bf200..b27105a 100644 ---- a/lib/app/interactive/interactive.ml -+++ b/lib/app/interactive/interactive.ml -@@ -1,5 +1,6 @@ - open Core - open Lwt -+module Unix = Core_unix - - open Configuration - -@@ -37,6 +38,7 @@ module Diff = struct - ~big_enough:line_big_enough - ~prev - ~next -+ () - | Some prog -> - let compare x y = - let cmd = sprintf "%s %S %S" prog x y in -@@ -52,7 +54,7 @@ module Diff = struct - let compare = compare - end) - in -- P.get_hunks ~transform ~context ~big_enough:line_big_enough ~prev ~next -+ P.get_hunks ~transform ~context ~big_enough:line_big_enough ~prev ~next () - in - match float_tolerance with - | None -> hunks -diff --git a/lib/app/pipeline/dune b/lib/app/pipeline/dune -index 3369b9e..e6ec880 100644 ---- a/lib/app/pipeline/dune -+++ b/lib/app/pipeline/dune -@@ -1,11 +1,23 @@ - (library -- (name pipeline) -- (public_name comby.pipeline) -- (instrumentation (backend bisect_ppx)) -- (preprocess (pps ppx_sexp_conv ppx_deriving_yojson)) -- (libraries comby-kernel comby.statistics comby.configuration comby.interactive comby.camlzip core core.uuid yojson ppx_deriving_yojson parany -- (select parallel_hack.ml from -- (hack_parallel -> parallel_hack.available.ml) -- (!hack_parallel -> parallel_hack.parany_fallback.ml)) -- )) -- -+ (name pipeline) -+ (public_name comby.pipeline) -+ (instrumentation -+ (backend bisect_ppx)) -+ (preprocess -+ (pps ppx_sexp_conv ppx_deriving_yojson)) -+ (libraries -+ comby-kernel -+ comby.statistics -+ comby.configuration -+ comby.interactive -+ comby.camlzip -+ core -+ core_unix.uuid -+ yojson -+ ppx_deriving_yojson -+ parany -+ (select -+ parallel_hack.ml -+ from -+ (hack_parallel -> parallel_hack.available.ml) -+ (!hack_parallel -> parallel_hack.parany_fallback.ml)))) -diff --git a/lib/app/pipeline/parallel_hack.available.ml b/lib/app/pipeline/parallel_hack.available.ml -index a901eea..ad33070 100644 ---- a/lib/app/pipeline/parallel_hack.available.ml -+++ b/lib/app/pipeline/parallel_hack.available.ml -@@ -1,4 +1,5 @@ - open Core -+module Unix = Core_unix - - open Hack_parallel - -diff --git a/lib/app/statistics/dune b/lib/app/statistics/dune -index b14d5b1..12aff7f 100644 ---- a/lib/app/statistics/dune -+++ b/lib/app/statistics/dune -@@ -1,6 +1,8 @@ - (library -- (name statistics) -- (public_name comby.statistics) -- (instrumentation (backend bisect_ppx)) -- (preprocess (pps ppx_deriving_yojson)) -- (libraries yojson ppx_deriving_yojson ppx_deriving_yojson.runtime)) -+ (name statistics) -+ (public_name comby.statistics) -+ (instrumentation -+ (backend bisect_ppx)) -+ (preprocess -+ (pps ppx_deriving_yojson)) -+ (libraries yojson ppx_deriving_yojson ppx_deriving_yojson.runtime)) -diff --git a/lib/app/vendored/patdiff/kernel/src/dune b/lib/app/vendored/patdiff/kernel/src/dune -index 7a6353d..b79cba2 100644 ---- a/lib/app/vendored/patdiff/kernel/src/dune -+++ b/lib/app/vendored/patdiff/kernel/src/dune -@@ -1,3 +1,6 @@ --(library (name patdiff_kernel) (public_name comby.patdiff_kernel) -+(library -+ (name patdiff_kernel) -+ (public_name comby.patdiff_kernel) - (libraries core_kernel.composition_infix core_kernel patience_diff re) -- (preprocess (pps ppx_jane))) -+ (preprocess -+ (pps ppx_jane))) -diff --git a/lib/app/vendored/patdiff/kernel/src/float_tolerance.ml b/lib/app/vendored/patdiff/kernel/src/float_tolerance.ml -index 4e064fb..dca77b2 100644 ---- a/lib/app/vendored/patdiff/kernel/src/float_tolerance.ml -+++ b/lib/app/vendored/patdiff/kernel/src/float_tolerance.ml -@@ -287,7 +287,7 @@ end = struct - ~running_step:(fun (car, pos) cadr -> - match car, cadr with - | Same car_lines, Same cadr_lines -> -- Skip (Same (Array.concat [ car_lines; cadr_lines ]), pos) -+ Skip {state = (Same (Array.concat [ car_lines; cadr_lines ]), pos)} - | Unified _, _ | _, Unified _ -> - raise_s - [%message -@@ -296,7 +296,7 @@ end = struct - (cadr : string Range.t)] - | (Prev _ | Next _ | Replace _), (Prev _ | Next _ | Replace _) - | Same _, (Prev _ | Next _ | Replace _) -- | (Prev _ | Next _ | Replace _), Same _ -> Yield ((car, pos), (cadr, Middle))) -+ | (Prev _ | Next _ | Replace _), Same _ -> Yield {value = (car, pos); state = (cadr, Middle)}) - ~inner_finished:(fun (last, pos) -> - match last, pos with - | Unified _, _ -> -@@ -308,7 +308,7 @@ end = struct - Some (last, End)) - ~finishing_step:(function - | None -> Done -- | Some result -> Yield (result, None)) -+ | Some result -> Yield {value = result; state = None}) - ;; - - include struct -@@ -448,7 +448,7 @@ end = struct - ~init:{ prev_start; next_start; ranges = [] } - ~running_step:(fun t drop_or_keep -> - match (drop_or_keep : Drop_or_keep.t) with -- | Keep range -> Skip { t with ranges = range :: t.ranges } -+ | Keep range -> Skip {state = { t with ranges = range :: t.ranges }} - | Drop n -> - let hunk = to_hunk t in - let t = -@@ -457,11 +457,11 @@ end = struct - ; ranges = [] - } - in -- if List.is_empty (Hunk.ranges hunk) then Skip t else Yield (hunk, t)) -+ if List.is_empty (Hunk.ranges hunk) then Skip {state = t} else Yield {value = hunk; state = t}) - ~inner_finished:(fun t -> if List.is_empty t.ranges then None else Some t) - ~finishing_step:(function - | None -> Done -- | Some t -> Yield (to_hunk t, None)) -+ | Some t -> Yield {value = to_hunk t; state = None}) - ;; - end - -diff --git a/lib/app/vendored/patdiff/kernel/src/patdiff_core.ml b/lib/app/vendored/patdiff/kernel/src/patdiff_core.ml -index 4f53a0b..88ee0e3 100644 ---- a/lib/app/vendored/patdiff/kernel/src/patdiff_core.ml -+++ b/lib/app/vendored/patdiff/kernel/src/patdiff_core.ml -@@ -138,6 +138,7 @@ module Make (Output_impls : Output_impls) = struct - ~big_enough:line_big_enough - ~prev - ~next -+ () - ;; - - type word_or_newline = -@@ -345,6 +346,7 @@ module Make (Output_impls : Output_impls) = struct - ~big_enough:word_big_enough - ~prev:prev_pieces - ~next:next_pieces -+ () - ;; - - let ranges_are_just_whitespace (ranges : _ Patience_diff.Range.t list) = -diff --git a/lib/app/vendored/patdiff/lib/src/compare_core.ml b/lib/app/vendored/patdiff/lib/src/compare_core.ml -index fafb201..8b40d09 100644 ---- a/lib/app/vendored/patdiff/lib/src/compare_core.ml -+++ b/lib/app/vendored/patdiff/lib/src/compare_core.ml -@@ -1,5 +1,6 @@ - open! Core - open! Import -+module Unix = Core_unix - - let lines_of_contents contents = - let lines = Array.of_list (String.split_lines contents) in -@@ -100,6 +101,7 @@ let compare_lines (config : Configuration.t) ?prev_diff ?next_diff ~prev ~next ( - ~big_enough:line_big_enough - ~prev - ~next -+ () - | Some prog -> - let compare x y = - let cmd = sprintf "%s %S %S" prog x y in -@@ -116,7 +118,7 @@ let compare_lines (config : Configuration.t) ?prev_diff ?next_diff ~prev ~next ( - let compare = compare - end) - in -- P.get_hunks ~transform ~context ~big_enough:line_big_enough ~prev ~next -+ P.get_hunks ~transform ~context ~big_enough:line_big_enough ~prev ~next () - in - let hunks = - match config.float_tolerance with -@@ -361,7 +363,7 @@ let rec diff_dirs_internal (config : Configuration.t) ~prev_dir ~next_dir ~file_ - | None -> Fn.const true - | Some file_filter -> file_filter - in -- Sys.ls_dir (File_name.real_name_exn dir) -+ Sys_unix.ls_dir (File_name.real_name_exn dir) - |> List.filter ~f:(fun x -> - let x = File_name.real_name_exn dir ^/ x in - match Unix.stat x with -diff --git a/lib/app/vendored/patdiff/lib/src/compare_core.mli b/lib/app/vendored/patdiff/lib/src/compare_core.mli -index e919512..caa8dcb 100644 ---- a/lib/app/vendored/patdiff/lib/src/compare_core.mli -+++ b/lib/app/vendored/patdiff/lib/src/compare_core.mli -@@ -1,5 +1,6 @@ - open! Core - open! Import -+module Unix = Core_unix - - val diff_files - : Configuration.t -diff --git a/lib/app/vendored/patdiff/lib/src/configuration.ml b/lib/app/vendored/patdiff/lib/src/configuration.ml -index 6879daa..7d59706 100644 ---- a/lib/app/vendored/patdiff/lib/src/configuration.ml -+++ b/lib/app/vendored/patdiff/lib/src/configuration.ml -@@ -481,7 +481,7 @@ let rec load_exn' ~set config_file = - | Error _another_exn -> raise exn - | Ok c -> - (let new_file = config_file ^ ".new" in -- match Sys.file_exists new_file with -+ match Sys_unix.file_exists new_file with - | `Yes | `Unknown -> () - | `No -> - (try Sexp.save_hum new_file (On_disk.V1.sexp_of_t c) with -@@ -564,7 +564,7 @@ let get_config ?filename () = - (* ~/.patdiff exists *) - Option.bind (Sys.getenv "HOME") ~f:(fun home -> - let f = home ^/ ".patdiff" in -- match Sys.file_exists f with -+ match Sys_unix.file_exists f with - | `Yes -> Some f - | `No | `Unknown -> None) - in -diff --git a/lib/app/vendored/patdiff/lib/src/dune b/lib/app/vendored/patdiff/lib/src/dune -index 007acad..b6a0f80 100644 ---- a/lib/app/vendored/patdiff/lib/src/dune -+++ b/lib/app/vendored/patdiff/lib/src/dune -@@ -1,4 +1,13 @@ --(library (name patdiff) (public_name comby.patdiff) -- (libraries core_kernel.composition_infix core core.linux_ext comby.patdiff_kernel -+(library -+ (name patdiff) -+ (public_name comby.patdiff) -+ (libraries -+ core_kernel.composition_infix -+ core -+ core_unix -+ core_unix.linux_ext -+ core_unix.sys_unix -+ comby.patdiff_kernel - patience_diff) -- (preprocess (pps ppx_jane))) -+ (preprocess -+ (pps ppx_jane))) -diff --git a/lib/app/vendored/patdiff/lib/src/html_output.ml b/lib/app/vendored/patdiff/lib/src/html_output.ml -index 3d08f91..93ae8af 100644 ---- a/lib/app/vendored/patdiff/lib/src/html_output.ml -+++ b/lib/app/vendored/patdiff/lib/src/html_output.ml -@@ -1,5 +1,6 @@ - open! Core - open! Import -+module Unix = Core_unix - - include Patdiff_kernel.Html_output.Private.Make (struct - let mtime file = -diff --git a/lib/kernel/match/dune b/lib/kernel/match/dune -index 03b120a..4d48b61 100644 ---- a/lib/kernel/match/dune -+++ b/lib/kernel/match/dune -@@ -1,6 +1,12 @@ - (library -- (name match) -- (public_name comby-kernel.match) -- (instrumentation (backend bisect_ppx)) -- (preprocess (pps ppx_deriving.eq ppx_sexp_conv ppx_deriving_yojson)) -- (libraries core_kernel yojson ppx_deriving_yojson ppx_deriving_yojson.runtime)) -+ (name match) -+ (public_name comby-kernel.match) -+ (instrumentation -+ (backend bisect_ppx)) -+ (preprocess -+ (pps ppx_deriving.eq ppx_sexp_conv ppx_deriving_yojson)) -+ (libraries -+ core_kernel -+ yojson -+ ppx_deriving_yojson -+ ppx_deriving_yojson.runtime)) -diff --git a/lib/kernel/matchers/alpha.ml b/lib/kernel/matchers/alpha.ml -index d6116f7..7d16171 100644 ---- a/lib/kernel/matchers/alpha.ml -+++ b/lib/kernel/matchers/alpha.ml -@@ -13,20 +13,11 @@ module R = MakeRegexp(Regexp) - let configuration_ref = ref (Configuration.create ()) - let weaken_delimiter_hole_matching = false - --let debug = -- match Sys.getenv "DEBUG_COMBY" with -- | exception Not_found -> false -- | _ -> true -+let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some - --let debug_hole = -- match Sys.getenv "DEBUG_COMBY_HOLE" with -- | exception Not_found -> false -- | _ -> true -+let debug_hole = Sys.getenv "DEBUG_COMBY_HOLE" |> Option.is_some - --let debug_position = -- match Sys.getenv "DEBUG_COMBY_POS" with -- | exception Not_found -> false -- | _ -> true -+let debug_position = Sys.getenv "DEBUG_COMBY_POS" |> Option.is_some - - let f _ = return Types.Unit - -@@ -147,7 +138,7 @@ module Make (Lang : Types.Language.S) (Meta : Types.Metasyntax.S) (Ext : Types.E - ] - >>= fun _ -> f Types.Unit - -- let sequence_chain (plist : ('c, Match.t) parser sexp_list) : ('c, Match.t) parser = -+ let sequence_chain (plist : ('c, Match.t) parser list) : ('c, Match.t) parser = - List.fold plist ~init:(return Types.Unit) ~f:(>>) - - let with_debug_matcher s tag = -@@ -745,7 +736,7 @@ module Make (Lang : Types.Language.S) (Meta : Types.Metasyntax.S) (Ext : Types.E - let hole_parser ?at_depth sort dimension = - let open Types.Hole in - let hole_parser = -- let open Polymorphic_compare in -+ let open Poly in - List.fold ~init:[] hole_parsers ~f:(fun acc (sort', parser) -> if sort' = sort then parser::acc else acc) - in - let skip_signal hole = skip (string "_signal_hole") |>> fun () -> Types.Hole hole in -diff --git a/lib/kernel/matchers/dune b/lib/kernel/matchers/dune -index 12ed326..4625458 100644 ---- a/lib/kernel/matchers/dune -+++ b/lib/kernel/matchers/dune -@@ -1,6 +1,18 @@ - (library -- (name matchers) -- (public_name comby-kernel.matchers) -- (instrumentation (backend bisect_ppx)) -- (preprocess (pps ppx_here ppx_sexp_conv ppx_sexp_message ppx_deriving_yojson)) -- (libraries comby-kernel.replacement comby-kernel.parsers comby-kernel.match comby-kernel.vangstrom core_kernel mparser mparser-pcre re yojson ppx_deriving_yojson)) -+ (name matchers) -+ (public_name comby-kernel.matchers) -+ (instrumentation -+ (backend bisect_ppx)) -+ (preprocess -+ (pps ppx_here ppx_sexp_conv ppx_sexp_message ppx_deriving_yojson)) -+ (libraries -+ comby-kernel.replacement -+ comby-kernel.parsers -+ comby-kernel.match -+ comby-kernel.vangstrom -+ core_kernel -+ mparser -+ mparser-pcre -+ re -+ yojson -+ ppx_deriving_yojson)) -diff --git a/lib/kernel/matchers/evaluate.ml b/lib/kernel/matchers/evaluate.ml -index 9ea71a0..4f63ab6 100644 ---- a/lib/kernel/matchers/evaluate.ml -+++ b/lib/kernel/matchers/evaluate.ml -@@ -3,10 +3,7 @@ open Core_kernel - open Match - open Types.Ast - --let debug = -- match Sys.getenv "DEBUG_COMBY" with -- | exception Not_found -> false -- | _ -> true -+let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some - - type result = bool * Match.environment option - -@@ -102,7 +99,7 @@ let apply - |> Option.some - in - List.find_map cases ~f:(fun (template, case_expression) -> evaluate template case_expression) -- |> Option.value_map ~f:ident ~default:(false, Some env) -+ |> Option.value_map ~f:Fn.id ~default:(false, Some env) - - (* rewrite ... { ... } *) - | Rewrite (Template t, (match_template, rewrite_template)) -> -diff --git a/lib/kernel/matchers/omega.ml b/lib/kernel/matchers/omega.ml -index 61cc69a..3445307 100644 ---- a/lib/kernel/matchers/omega.ml -+++ b/lib/kernel/matchers/omega.ml -@@ -32,15 +32,9 @@ let push_source_ref : string ref = ref "" - - let filepath_ref : string option ref = ref None - --let debug = -- match Sys.getenv "DEBUG_COMBY" with -- | exception Not_found -> false -- | _ -> true -+let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some - --let rewrite = -- match Sys.getenv "REWRITE" with -- | exception Not_found -> false -- | _ -> true -+let rewrite = Sys.getenv "REWRITE" |> Option.is_some - - let actual = Buffer.create 10 - -@@ -540,7 +534,7 @@ module Make (Language : Types.Language.S) (Meta : Metasyntax.S) (Ext : External. - - let hole_parser sort dimension : (production * 'a) t t = - let hole_parser = (* This must be fold, can't be find *) -- let open Polymorphic_compare in -+ let open Poly in - List.fold ~init:[] Template.Matching.hole_parsers ~f:(fun acc (sort', parser) -> - if sort' = sort then parser::acc else acc) - in -diff --git a/lib/kernel/matchers/preprocess.ml b/lib/kernel/matchers/preprocess.ml -index 84f3ed0..b6d10e7 100644 ---- a/lib/kernel/matchers/preprocess.ml -+++ b/lib/kernel/matchers/preprocess.ml -@@ -1,9 +1,6 @@ - open Core_kernel - --let debug = -- match Sys.getenv "DEBUG_COMBY" with -- | exception Not_found -> false -- | _ -> true -+let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some - - let append_rule (module Parser : Types.Rule.S) rule parent_rule = - let open Option in -diff --git a/lib/kernel/matchers/regexp.ml b/lib/kernel/matchers/regexp.ml -index ef0bd59..906820b 100644 ---- a/lib/kernel/matchers/regexp.ml -+++ b/lib/kernel/matchers/regexp.ml -@@ -3,7 +3,7 @@ open Vangstrom - let debug = - match Sys.getenv "DEBUG_COMBY" with - | exception Not_found -> false -- | _ -> true -+ | (_ : string) -> true - - module type Regexp_engine_intf = sig - type t -diff --git a/lib/kernel/matchers/rewrite.ml b/lib/kernel/matchers/rewrite.ml -index 32c4740..545cba5 100644 ---- a/lib/kernel/matchers/rewrite.ml -+++ b/lib/kernel/matchers/rewrite.ml -@@ -4,10 +4,7 @@ open Core_kernel - open Match - open Replacement - --let debug = -- match Sys.getenv "DEBUG_COMBY" with -- | exception Not_found -> false -- | _ -> true -+let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some - - let counter = - let uuid_for_id_counter = ref 0 in -@@ -46,24 +43,24 @@ let parse_first_label ?(metasyntax = Metasyntax.default_metasyntax) template = - in - parse_string ~consume:All parser template - |> function -- | Ok label -> List.find_map label ~f:ident -+ | Ok label -> List.find_map label ~f:Fn.id - | Error _ -> None - - let substitute_fresh - ?(metasyntax = Metasyntax.default_metasyntax) - ?(fresh = counter) - template = -- let label_table = String.Table.create () in -+ let label_table = Hashtbl.create (module String) in - let template_ref = ref template in - let current_label_ref = ref (parse_first_label ~metasyntax !template_ref) in - while Option.is_some !current_label_ref do - let label = Option.value_exn !current_label_ref in - let id = -- match String.Table.find label_table label with -+ match Hashtbl.find label_table label with - | Some id -> id - | None -> - let id = fresh () in -- if String.(label <> "") then String.Table.add_exn label_table ~key:label ~data:id; -+ if String.(label <> "") then Hashtbl.add_exn label_table ~key:label ~data:id; - id - in - let left, right = replacement_sentinel metasyntax in -diff --git a/lib/kernel/matchers/template.ml b/lib/kernel/matchers/template.ml -index 423a07f..136236c 100644 ---- a/lib/kernel/matchers/template.ml -+++ b/lib/kernel/matchers/template.ml -@@ -4,10 +4,7 @@ open Core_kernel - open Match - open Types.Template - --let debug = -- match Sys.getenv "DEBUG_COMBY" with -- | exception Not_found -> false -- | _ -> true -+let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some - - module Make (Metasyntax : Types.Metasyntax.S) (External : Types.External.S) : Types.Template.S = struct - -diff --git a/lib/kernel/parsers/dune b/lib/kernel/parsers/dune -index 28b020c..0cc1fa5 100644 ---- a/lib/kernel/parsers/dune -+++ b/lib/kernel/parsers/dune -@@ -1,6 +1,8 @@ - (library -- (name parsers) -- (public_name comby-kernel.parsers) -- (instrumentation (backend bisect_ppx)) -- (preprocess (pps ppx_sexp_conv)) -- (libraries core_kernel comby-kernel.vangstrom mparser)) -+ (name parsers) -+ (public_name comby-kernel.parsers) -+ (instrumentation -+ (backend bisect_ppx)) -+ (preprocess -+ (pps ppx_sexp_conv)) -+ (libraries core_kernel comby-kernel.vangstrom mparser)) -diff --git a/lib/kernel/replacement/dune b/lib/kernel/replacement/dune -index 3e62de6..485b716 100644 ---- a/lib/kernel/replacement/dune -+++ b/lib/kernel/replacement/dune -@@ -1,6 +1,13 @@ - (library -- (name replacement) -- (public_name comby-kernel.replacement) -- (instrumentation (backend bisect_ppx)) -- (preprocess (pps ppx_deriving_yojson)) -- (libraries comby-kernel.match core_kernel yojson ppx_deriving_yojson ppx_deriving_yojson.runtime)) -+ (name replacement) -+ (public_name comby-kernel.replacement) -+ (instrumentation -+ (backend bisect_ppx)) -+ (preprocess -+ (pps ppx_deriving_yojson)) -+ (libraries -+ comby-kernel.match -+ core_kernel -+ yojson -+ ppx_deriving_yojson -+ ppx_deriving_yojson.runtime)) -diff --git a/lib/semantic/dune b/lib/semantic/dune -index 9a244d3..186a2ed 100644 ---- a/lib/semantic/dune -+++ b/lib/semantic/dune -@@ -1,11 +1,8 @@ - (library -- (name comby_semantic) -- (public_name comby-semantic) -- (instrumentation (backend bisect_ppx)) -- (preprocess (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv)) -- (libraries -- core_kernel -- lwt -- cohttp -- cohttp-lwt-unix -- yojson)) -+ (name comby_semantic) -+ (public_name comby-semantic) -+ (instrumentation -+ (backend bisect_ppx)) -+ (preprocess -+ (pps ppx_deriving.show ppx_deriving.eq ppx_sexp_conv)) -+ (libraries core_kernel lwt cohttp cohttp-lwt-unix yojson)) -diff --git a/lib/semantic/lsif.ml b/lib/semantic/lsif.ml -index 49747bc..d6b3e19 100644 ---- a/lib/semantic/lsif.ml -+++ b/lib/semantic/lsif.ml -@@ -3,10 +3,7 @@ open Lwt - open Cohttp - open Cohttp_lwt_unix - --let debug = -- match Sys.getenv "DEBUG_COMBY" with -- | exception Not_found -> false -- | _ -> true -+let debug = Sys.getenv "DEBUG_COMBY" |> Option.is_some - - module Formatting = struct - type t = -diff --git a/src/dune b/src/dune -index 444a5a3..f006195 100644 ---- a/src/dune -+++ b/src/dune -@@ -1,10 +1,17 @@ - (executables -- (libraries comby core ppx_deriving_yojson ppx_deriving_yojson.runtime -- (select if_hack_parallel.ml from -- (hack_parallel -> if_hack_parallel.available.ml) -- (!hack_parallel -> if_hack_parallel.unavailable.ml)) -- ) -- (preprocess (pps ppx_deriving_yojson ppx_let ppx_deriving.show ppx_sexp_conv)) -+ (libraries -+ comby -+ core -+ core_unix.command_unix -+ ppx_deriving_yojson -+ ppx_deriving_yojson.runtime -+ (select -+ if_hack_parallel.ml -+ from -+ (hack_parallel -> if_hack_parallel.available.ml) -+ (!hack_parallel -> if_hack_parallel.unavailable.ml))) -+ (preprocess -+ (pps ppx_deriving_yojson ppx_let ppx_deriving.show ppx_sexp_conv)) - (modules main if_hack_parallel) - (modes byte exe) - (names main)) -@@ -20,4 +27,5 @@ - (install - (package comby) - (section bin) -- (files (main.exe as comby))) -+ (files -+ (main.exe as comby))) -diff --git a/src/main.ml b/src/main.ml -index 1def81d..79af76b 100644 ---- a/src/main.ml -+++ b/src/main.ml -@@ -1,4 +1,5 @@ - open Core -+module Unix = Core_unix - open Command.Let_syntax - - open Comby_kernel -@@ -47,7 +48,7 @@ let substitute_environment_only_and_exit metasyntax_path anonymous_arguments jso - match metasyntax_path with - | None -> Matchers.Metasyntax.default_metasyntax - | Some metasyntax_path -> -- match Sys.file_exists metasyntax_path with -+ match Sys_unix.file_exists metasyntax_path with - | `No | `Unknown -> - Format.eprintf "Could not open file: %s@." metasyntax_path; - exit 1 -@@ -95,7 +96,7 @@ let base_command_parameters : (unit -> 'result) Command.Param.t = - and verbose = flag "verbose" no_arg ~doc:(Format.sprintf "Log to %s" verbose_out_file) - and rule = flag "rule" (optional_with_default "where true" string) ~doc:"rule Apply rules to matches." - and match_timeout = flag "timeout" (optional_with_default 3 int) ~doc:"seconds Set match timeout on a source. Default: 3 seconds" -- and target_directory = flag "directory" ~aliases:["d"] (optional_with_default (Sys.getcwd ()) string) ~doc:(Format.sprintf "path Run recursively on files in a directory relative to the root. Default is current directory: %s" @@ Sys.getcwd ()) -+ and target_directory = flag "directory" ~aliases:["d"] (optional_with_default (Sys_unix.getcwd ()) string) ~doc:(Format.sprintf "path Run recursively on files in a directory relative to the root. Default is current directory: %s" @@ Sys_unix.getcwd ()) - and directory_depth = flag "depth" (optional int) ~doc:"n Depth to recursively descend into directories" - and templates = flag "templates" ~aliases:["config"; "configuration"] (optional (Arg_type.comma_separated string)) ~doc:"paths CSV of directories containing templates, or TOML configuration files" - and file_filters = flag "extensions" ~aliases:["e"; "file-extensions"; "f"] (optional (Arg_type.comma_separated string)) ~doc:"extensions Comma-separated extensions to include, like \".go\" or \".c,.h\". It is just a file suffix, so you can use it to filter file names like \"main.go\". The extension will be used to infer a matcher, unless -custom-matcher or -matcher is specified" -@@ -147,7 +148,7 @@ let base_command_parameters : (unit -> 'result) Command.Param.t = - | l -> - List.map l ~f:(fun pattern -> - if String.contains pattern '/' then -- match Filename.realpath pattern with -+ match Filename_unix.realpath pattern with - | exception Unix.Unix_error _ -> - Format.eprintf - "No such file or directory: %s. Comby interprets \ -@@ -204,7 +205,7 @@ let base_command_parameters : (unit -> 'result) Command.Param.t = - let omega = omega || omega_env in - let fast_offset_conversion_env = Option.is_some @@ Sys.getenv "FAST_OFFSET_CONVERSION_COMBY" in - let fast_offset_conversion = fast_offset_conversion_env || fast_offset_conversion in -- let arch = Unix.Utsname.machine (Core.Unix.uname ()) in -+ let arch = Unix.Utsname.machine (Unix.uname ()) in - let compute_mode = match sequential, parany, arch with - | true, _, _ -> `Sequential - | _, true, _ -@@ -304,7 +305,7 @@ let parse_comby_dot_file () = - - let () = - If_hack_parallel.check_entry_point (); -- Command.run default_command ~version:"1.8.1" ~extend:(fun _ -> -- match Sys.file_exists ".comby" with -+ Command_unix.run default_command ~version:"1.8.1" ~extend:(fun _ -> -+ match Sys_unix.file_exists ".comby" with - | `Yes -> parse_comby_dot_file () - | _ -> []) -diff --git a/test/alpha/dune b/test/alpha/dune -index d7e5532..020677c 100644 ---- a/test/alpha/dune -+++ b/test/alpha/dune -@@ -1,17 +1,14 @@ - (library - (name alpha_test_integration) - (package comby) -- (modules -- test_special_matcher_cases -- test_substring_disabled) -+ (modules test_special_matcher_cases test_substring_disabled) - (inline_tests) -- (preprocess (pps ppx_expect ppx_sexp_message ppx_deriving_yojson)) -- (libraries -- comby -- cohttp-lwt-unix -- core -- camlzip)) -+ (preprocess -+ (pps ppx_expect ppx_sexp_message ppx_deriving_yojson)) -+ (libraries comby cohttp-lwt-unix core camlzip)) - - (alias --(name runtest) --(deps (source_tree example) (source_tree example/src/.ignore-me))) -+ (name runtest) -+ (deps -+ (source_tree example) -+ (source_tree example/src/.ignore-me))) -diff --git a/test/common/dune b/test/common/dune -index 6851f2e..bc3c055 100644 ---- a/test/common/dune -+++ b/test/common/dune -@@ -36,16 +36,14 @@ - test_regex_holes - test_template_constraints - test_custom_metasyntax -- test_rewrite_attributes -- ) -+ test_rewrite_attributes) - (inline_tests) -- (preprocess (pps ppx_expect ppx_sexp_message ppx_deriving_yojson)) -- (libraries -- comby -- cohttp-lwt-unix -- core -- camlzip)) -+ (preprocess -+ (pps ppx_expect ppx_sexp_message ppx_deriving_yojson)) -+ (libraries comby cohttp-lwt-unix core camlzip)) - - (alias --(name runtest) --(deps (source_tree example) (source_tree example/src/.ignore-me))) -+ (name runtest) -+ (deps -+ (source_tree example) -+ (source_tree example/src/.ignore-me))) -diff --git a/test/common/test_cli.ml b/test/common/test_cli.ml -index 3606367..d5d0c0b 100644 ---- a/test/common/test_cli.ml -+++ b/test/common/test_cli.ml -@@ -1,7 +1,10 @@ - open Core - open Camlzip - -+module Filename = Filename_unix -+module Sys = Sys_unix - module Time = Core_kernel.Time_ns.Span -+module Unix = Core_unix - - let binary_path = "../../../../comby" - -diff --git a/test/common/test_cli_helper.ml b/test/common/test_cli_helper.ml -index 5791ee6..18372ae 100644 ---- a/test/common/test_cli_helper.ml -+++ b/test/common/test_cli_helper.ml -@@ -1,6 +1,7 @@ - open Core - - module Time = Core_kernel.Time_ns.Span -+module Unix = Core_unix - - let binary_path = "../../../../comby" - -diff --git a/test/omega/dune b/test/omega/dune -index 3b31a7e..bf68dcb 100644 ---- a/test/omega/dune -+++ b/test/omega/dune -@@ -2,20 +2,19 @@ - (name omega_test_integration) - (package comby) - (modules --; --; TODO --; -+ ; -+ ; TODO -+ ; - test_optional_holes - test_special_matcher_cases - test_substring_disabled) - (inline_tests) -- (preprocess (pps ppx_expect ppx_sexp_message ppx_deriving_yojson)) -- (libraries -- comby -- cohttp-lwt-unix -- core -- camlzip)) -+ (preprocess -+ (pps ppx_expect ppx_sexp_message ppx_deriving_yojson)) -+ (libraries comby cohttp-lwt-unix core camlzip)) - - (alias --(name runtest) --(deps (source_tree example) (source_tree example/src/.ignore-me))) -+ (name runtest) -+ (deps -+ (source_tree example) -+ (source_tree example/src/.ignore-me))) diff --git a/pkgs/development/tools/comby/default.nix b/pkgs/development/tools/comby/default.nix index b8571d58018d..408c8e400574 100644 --- a/pkgs/development/tools/comby/default.nix +++ b/pkgs/development/tools/comby/default.nix @@ -9,7 +9,6 @@ libev, autoconf, sqlite, - stdenv, }: let mkCombyPackage = @@ -17,37 +16,28 @@ let pname, extraBuildInputs ? [ ], extraNativeInputs ? [ ], - preBuild ? "", + preConfigure ? "", }: - ocamlPackages.buildDunePackage rec { - inherit pname preBuild; - version = "1.8.1"; - duneVersion = "3"; - minimalOCamlVersion = "4.08.1"; + ocamlPackages.buildDunePackage { + inherit pname preConfigure; + version = "1.8.1-unstable-2026-06-08"; doCheck = true; src = fetchFromGitHub { owner = "comby-tools"; repo = "comby"; - rev = version; - sha256 = "sha256-yQrfSzJgJm0OWJxhxst2XjZULIVHeEfPMvMIwH7BYDc="; + rev = "3b6bdff7bc3b50361b621da9db030152772e7e6b"; + hash = "sha256-1BbsHnvJ/h99zZb5qKlQpXMsV5xW0idpJWt/SQEOd6M="; }; - patches = [ ./comby.patch ]; - nativeBuildInputs = extraNativeInputs; buildInputs = [ ocamlPackages.core ocamlPackages.core_kernel - ocamlPackages.ocaml_pcre - ocamlPackages.mparser - ocamlPackages.mparser-pcre - ocamlPackages.angstrom + ocamlPackages.core_unix ocamlPackages.ppx_deriving ocamlPackages.ppx_deriving_yojson - ocamlPackages.ppx_sexp_conv - ocamlPackages.ppx_sexp_message ] ++ extraBuildInputs; @@ -58,29 +48,34 @@ let mainProgram = "comby"; license = lib.licenses.asl20; homepage = "https://comby.dev"; - broken = true; # Not compatible with ocamlPackages.tar ≥ 3 }; }; - combyKernel = mkCombyPackage { pname = "comby-kernel"; }; + combyKernel = mkCombyPackage { + pname = "comby-kernel"; + extraBuildInputs = [ + ocamlPackages.ocaml_pcre + ocamlPackages.bigstringaf + ]; + # tests cannot be built until all of comby is built + preConfigure = '' + rm src test -r + ''; + + }; combySemantic = mkCombyPackage { pname = "comby-semantic"; extraBuildInputs = [ ocamlPackages.cohttp-lwt-unix ]; + # tests cannot be built until all of comby is built + preConfigure = '' + rm src test -r + ''; + }; in mkCombyPackage { pname = "comby"; - # tests have to be removed before building otherwise installPhase will fail - # cli tests expect a path to the built binary - preBuild = '' - substituteInPlace test/common/dune \ - --replace "test_cli_list" "" \ - --replace "test_cli_helper" "" \ - --replace "test_cli" "" - rm test/common/{test_cli_list,test_cli_helper,test_cli}.ml - ''; - extraBuildInputs = [ zlib gmp @@ -91,25 +86,16 @@ mkCombyPackage { ocamlPackages.patience_diff ocamlPackages.toml ocamlPackages.cohttp-lwt-unix - ocamlPackages.textutils - ocamlPackages.jst-config ocamlPackages.parany ocamlPackages.conduit-lwt-unix ocamlPackages.lwt_react ocamlPackages.tar-unix - ocamlPackages.tls - ocamlPackages.ppx_jane - ocamlPackages.ppx_expect + ocamlPackages.ocaml_pcre + ocamlPackages.cstruct-lwt ocamlPackages.dune-configurator combyKernel combySemantic - ] - ++ ( - if !stdenv.hostPlatform.isAarch32 && !stdenv.hostPlatform.isAarch64 then - [ ocamlPackages.hack_parallel ] - else - [ ] - ); + ]; extraNativeInputs = [ autoconf diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c22f3dc78d56..f61110bf24d5 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3082,9 +3082,7 @@ with pkgs; clangStdenv = if stdenv.cc.isClang then stdenv else lowPrio llvmPackages.stdenv; libcxxStdenv = if stdenv.hostPlatform.isDarwin then stdenv else lowPrio llvmPackages.libcxxStdenv; - comby = callPackage ../development/tools/comby { - ocamlPackages = ocaml-ng.ocamlPackages_4_14; - }; + comby = callPackage ../development/tools/comby { }; inherit (coqPackages_9_2) compcert;