From caabb37a95069a6f7550b0ebc8ee722e3dfb9001 Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Wed, 24 Aug 2022 11:24:54 +0200 Subject: [PATCH 1/4] Crypto/DAL: 4.12 compatibility --- src/lib_crypto/dal/dal_cryptobox.ml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lib_crypto/dal/dal_cryptobox.ml b/src/lib_crypto/dal/dal_cryptobox.ml index f5675497c93a..b141337e5a27 100644 --- a/src/lib_crypto/dal/dal_cryptobox.ml +++ b/src/lib_crypto/dal/dal_cryptobox.ml @@ -695,25 +695,25 @@ module Make (C : CONSTANTS) = struct let _save_precompute_shards_proofs (preprocess : shards_proofs_precomputation) filename = - let chan = Out_channel.open_bin filename in - Out_channel.output_bytes + let chan = Stdlib.open_out_bin filename in + Stdlib.output_bytes chan (Data_encoding.Binary.to_bytes_exn Encoding.shards_proofs_precomputation_encoding preprocess) ; - Out_channel.close_noerr chan + Stdlib.close_out_noerr chan let _load_precompute_shards_proofs filename = - let chan = In_channel.open_bin filename in - let len = Int64.to_int (In_channel.length chan) in + let chan = Stdlib.open_in_bin filename in + let len = Int64.to_int (Stdlib.LargeFile.in_channel_length chan) in let data = Bytes.create len in - let (_ : unit option) = In_channel.really_input chan data 0 len in + let () = try Stdlib.really_input chan data 0 len with End_of_file -> () in let precomp = Data_encoding.Binary.of_bytes_exn Encoding.shards_proofs_precomputation_encoding data in - In_channel.close_noerr chan ; + Stdlib.close_in_noerr chan ; precomp let prove_shards srs p = -- GitLab From 194139623e0bdeb6fe85f79053ed6c272d384db9 Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Wed, 24 Aug 2022 11:27:45 +0200 Subject: [PATCH 2/4] WASM: 4.12 compatibility --- src/lib_webassembly/util/chunked_byte_vector.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib_webassembly/util/chunked_byte_vector.ml b/src/lib_webassembly/util/chunked_byte_vector.ml index 0a0e8297868e..1b494f05b6e1 100644 --- a/src/lib_webassembly/util/chunked_byte_vector.ml +++ b/src/lib_webassembly/util/chunked_byte_vector.ml @@ -26,7 +26,7 @@ module Chunk = struct let of_bytes bytes = let chunk = alloc () in - for i = 0 to Int.max (Int64.to_int size) (Bytes.length bytes) - 1 do + for i = 0 to max (Int64.to_int size) (Bytes.length bytes) - 1 do Array1.set chunk i (Char.code (Bytes.get bytes i)) done ; chunk -- GitLab From d79af7d56ecf010eee24f3c347cd2ffe274e5b99 Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Wed, 24 Aug 2022 14:57:06 +0200 Subject: [PATCH 3/4] Manifest: allow vendored libs to have version constraints --- manifest/main.ml | 2 +- manifest/manifest.ml | 57 +++++++++++++++++++++++++++++++------------ manifest/manifest.mli | 12 ++++++++- 3 files changed, 54 insertions(+), 17 deletions(-) diff --git a/manifest/main.ml b/manifest/main.ml index 89175ac109d0..792fdaeea7af 100644 --- a/manifest/main.ml +++ b/manifest/main.ml @@ -332,7 +332,7 @@ let zarith_stubs_js = external_lib ~js_compatible:true "zarith_stubs_js" V.True (* VENDORED LIBS *) -let ledgerwallet_tezos = vendored_lib "ledgerwallet-tezos" +let ledgerwallet_tezos = vendored_lib "ledgerwallet-tezos" V.True let vdf = external_lib ~js_compatible:true "class_group_vdf" V.(at_least "0.0.4") diff --git a/manifest/manifest.ml b/manifest/manifest.ml index d2e6f1f1dd59..23f308d179f8 100644 --- a/manifest/manifest.ml +++ b/manifest/manifest.ml @@ -862,6 +862,7 @@ module Target = struct type vendored = { name : string; main_module : string option; + version : Version.constraints; js_compatible : bool; npm_deps : Npm.t list; released_on_opam : bool; @@ -1515,9 +1516,10 @@ module Target = struct | head :: tail -> Test_executable {names = (head, tail); runtest_alias} let vendored_lib ?(released_on_opam = true) ?main_module - ?(js_compatible = false) ?(npm_deps = []) name = + ?(js_compatible = false) ?(npm_deps = []) name version = Some - (Vendored {name; main_module; js_compatible; npm_deps; released_on_opam}) + (Vendored + {name; main_module; version; js_compatible; npm_deps; released_on_opam}) let external_lib ?main_module ?opam ?(js_compatible = false) ?(npm_deps = []) name version = @@ -2014,36 +2016,52 @@ let generate_dune_files () = [None] is returned, since a package cannot depend on itself and there is no need to. - If [fix_version] is [true], require [target]'s version to be - exactly the same as [for_package]'s version, but only if [target] is internal. *) -let rec as_opam_dependency ~fix_version ~(for_package : string) ~with_test - (target : Target.t) : Opam.dependency list = + If [for_release] is [true], require [target]'s version to be + exactly the same as [for_package]'s version, but only if [target] is internal. + Also, if [for_release] is [true], use version constraints of vendored libraries. + + If [for_release] is [false] but [for_conflicts] is [true], + ignore vendored libraries. *) +let rec as_opam_dependency ~for_release ~for_conflicts ~(for_package : string) + ~with_test (target : Target.t) : Opam.dependency list = match target with | External {opam = None; _} -> [] | Internal {opam = Some package; _} -> if package = for_package then [] else let version = - if fix_version then Version.(Exactly Version) else Version.True + if for_release then Version.(Exactly Version) else Version.True in [{Opam.package; version; with_test; optional = false}] | Internal ({opam = None; _} as internal) -> (* If a target depends on a global "private" target, we must include its dependencies as well *) let deps = Target.all_internal_deps internal in List.concat_map - (as_opam_dependency ~fix_version ~for_package ~with_test) + (as_opam_dependency ~for_release ~for_conflicts ~for_package ~with_test) deps - | Vendored {name = package; _} -> - [{Opam.package; version = True; with_test; optional = false}] + | Vendored {name = package; version; _} -> + if for_release then [{Opam.package; version; with_test; optional = false}] + else if for_conflicts then [] + else [{Opam.package; version = True; with_test; optional = false}] | External {opam = Some opam; version; _} | Opam_only {name = opam; version; _} -> [{Opam.package = opam; version; with_test; optional = false}] | Optional target | Select {package = target; _} -> List.map (fun (dep : Opam.dependency) -> {dep with optional = true}) - (as_opam_dependency ~fix_version ~for_package ~with_test target) + (as_opam_dependency + ~for_release + ~for_conflicts + ~for_package + ~with_test + target) | Open (target, _) -> - as_opam_dependency ~fix_version ~for_package ~with_test target + as_opam_dependency + ~for_release + ~for_conflicts + ~for_package + ~with_test + target let as_opam_monorepo_opam_provided = function | Target.Opam_only {can_vendor = false; name; _} -> Some name @@ -2065,7 +2083,11 @@ let generate_opam ?release for_package (internals : Target.internal list) : in let deps = List.concat_map - (as_opam_dependency ~fix_version:for_release ~for_package ~with_test) + (as_opam_dependency + ~for_release + ~for_conflicts:false + ~for_package + ~with_test) deps in (deps, x_opam_monorepo_opam_provided) @@ -2123,7 +2145,11 @@ let generate_opam ?release for_package (internals : Target.internal list) : List.flatten @@ map internals @@ fun internal -> List.concat_map - (as_opam_dependency ~fix_version:false ~for_package ~with_test:Never) + (as_opam_dependency + ~for_release + ~for_conflicts:true + ~for_package + ~with_test:Never) internal.conflicts in let synopsis = @@ -2715,7 +2741,8 @@ let generate_opam_ci () = |> List.map (fun i -> Target.Internal i) |> List.concat_map (as_opam_dependency - ~fix_version:false + ~for_release:false + ~for_conflicts:false ~for_package:package_name ~with_test:Never)) |> deduplicate_list diff --git a/manifest/manifest.mli b/manifest/manifest.mli index 3f2c9b66f4b7..bcdf2b11d504 100644 --- a/manifest/manifest.mli +++ b/manifest/manifest.mli @@ -823,13 +823,23 @@ val tezt : [released_on_opam]: whether the library is available on the upstream opam-repository (default true). In case the lib is not available on opam, tezos packages depending - on it won't be installable on opam. *) + on it won't be installable on opam. + + Version constraints are only added to released [.opam] files + (i.e. when running the manifest with [--release]). + And when appearing in [~conflicts], vendored libraries are only added to released + [.opam] files. The idea is that vendored libraries are compiled from the local copy, + so version and conflicts do not matter, except when installing with [opam install], + in which case local copies are ignored and vendored libraries are installed through + opam. This is because we [rm -r vendors] in [.opam] files because of a bug of dune + when multiple layers of vendored libraries are involved. *) val vendored_lib : ?released_on_opam:bool -> ?main_module:string -> ?js_compatible:bool -> ?npm_deps:Npm.t list -> string -> + Version.constraints -> target (** Make an external library, for use in internal target dependencies. -- GitLab From e979475ffe2f78b2815eca987c9ce4912be050f6 Mon Sep 17 00:00:00 2001 From: Romain Bardou Date: Wed, 24 Aug 2022 11:22:33 +0200 Subject: [PATCH 4/4] Manifest: backport opam fixes from 14.0 --- manifest/main.ml | 7 ++++--- opam/tezos-crypto.opam | 2 +- opam/tezos-error-monad.opam | 3 +++ opam/tezos-webassembly-interpreter.opam | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/manifest/main.ml b/manifest/main.ml index 792fdaeea7af..1d6dadfff37d 100644 --- a/manifest/main.ml +++ b/manifest/main.ml @@ -89,7 +89,7 @@ let bls12_381 = version let bls12_381_polynomial = - let version = V.at_least "0.1.0" in + let version = V.exactly "0.1.2" in external_lib ~js_compatible:false "tezos-bls12-381-polynomial" version let camlzip = external_lib "camlzip" V.(at_least "1.11" && less_than "1.12") @@ -332,7 +332,7 @@ let zarith_stubs_js = external_lib ~js_compatible:true "zarith_stubs_js" V.True (* VENDORED LIBS *) -let ledgerwallet_tezos = vendored_lib "ledgerwallet-tezos" V.True +let ledgerwallet_tezos = vendored_lib "ledgerwallet-tezos" V.(at_least "0.2.1") let vdf = external_lib ~js_compatible:true "class_group_vdf" V.(at_least "0.0.4") @@ -576,13 +576,14 @@ let octez_error_monad = lwt; octez_lwt_result_stdlib; ] + ~conflicts:[external_lib "result" V.(less_than "1.5")] ~js_compatible:true let octez_webassembly_interpreter = public_lib "tezos-webassembly-interpreter" ~path:"src/lib_webassembly" - ~license:"Apache License 2.0" + ~license:"Apache-2.0" ~extra_authors:["WebAssembly Authors"] ~synopsis:"WebAssembly reference interpreter with tweaks for Tezos" ~flags:(Flags.standard ~disable_warnings:[27] ()) diff --git a/opam/tezos-crypto.opam b/opam/tezos-crypto.opam index 70f7f41fc38c..e5b66ad4de73 100644 --- a/opam/tezos-crypto.opam +++ b/opam/tezos-crypto.opam @@ -25,7 +25,7 @@ depends: [ "qcheck-alcotest" { with-test & >= "0.18" } "tezos-test-helpers" {with-test} "alcotest-lwt" { with-test & >= "1.5.0" } - "tezos-bls12-381-polynomial" { >= "0.1.0" } + "tezos-bls12-381-polynomial" { = "0.1.2" } ] build: [ ["rm" "-r" "vendors"] diff --git a/opam/tezos-error-monad.opam b/opam/tezos-error-monad.opam index d5db76415996..c0a6bda06812 100644 --- a/opam/tezos-error-monad.opam +++ b/opam/tezos-error-monad.opam @@ -17,6 +17,9 @@ depends: [ "tezos-lwt-result-stdlib" "alcotest" { with-test & >= "1.5.0" } ] +conflicts: [ + "result" { < "1.5" } +] build: [ ["rm" "-r" "vendors"] ["dune" "build" "-p" name "-j" jobs] diff --git a/opam/tezos-webassembly-interpreter.opam b/opam/tezos-webassembly-interpreter.opam index 432c9d7f71cf..5072b002a99d 100644 --- a/opam/tezos-webassembly-interpreter.opam +++ b/opam/tezos-webassembly-interpreter.opam @@ -6,7 +6,7 @@ authors: ["Tezos devteam" "WebAssembly Authors"] homepage: "https://www.tezos.com/" bug-reports: "https://gitlab.com/tezos/tezos/issues" dev-repo: "git+https://gitlab.com/tezos/tezos.git" -license: "Apache License 2.0" +license: "Apache-2.0" depends: [ "dune" { >= "3.0" } "tezos-lwt-result-stdlib" -- GitLab