From 358c07da3d3026a404c469b9f8a919daa9febd8e Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Fri, 22 Dec 2023 14:07:02 -0500 Subject: [PATCH 1/4] Iterate over `readmeta` results --- src/Auditor.jl | 66 +++++++++++++++++---------------- src/auditor/compiler_abi.jl | 4 +- src/auditor/dynamic_linkage.jl | 12 ++++-- src/auditor/soname_matching.jl | 2 +- src/wizard/interactive_build.jl | 7 ++-- src/wizard/utils.jl | 6 +-- test/auditing.jl | 66 +++++++++++++++++++-------------- 7 files changed, 91 insertions(+), 72 deletions(-) diff --git a/src/Auditor.jl b/src/Auditor.jl index 2ba9b989f..699274bfd 100644 --- a/src/Auditor.jl +++ b/src/Auditor.jl @@ -81,38 +81,40 @@ function audit(prefix::Prefix, src_name::AbstractString = ""; # Peel this binary file open like a delicious tangerine try - readmeta(f) do oh - if !is_for_platform(oh, platform) - if verbose - @warn("Skipping binary analysis of $(relpath(f, prefix.path)) (incorrect platform)") - end - else - # Check that the ISA isn't too high - all_ok &= check_isa(oh, platform, prefix; verbose, silent) - # Check that the OS ABI is set correctly (often indicates the wrong linker was used) - all_ok &= check_os_abi(oh, platform; verbose) - # Make sure all binary files are executables, if libraries aren't - # executables Julia may not be able to dlopen them: - # https://github.com/JuliaLang/julia/issues/38993. In principle this - # should be done when autofix=true, but we have to run this fix on MKL - # for Windows, for which however we have to set autofix=false: - # https://github.com/JuliaPackaging/Yggdrasil/pull/922. - all_ok &= ensure_executability(oh; verbose, silent) - - # If this is a dynamic object, do the dynamic checks - if isdynamic(oh) - # Check that the libgfortran version matches - all_ok &= check_libgfortran_version(oh, platform; verbose, has_csl) - # Check whether the library depends on any of the most common - # libraries provided by `CompilerSupportLibraries_jll`. - all_ok &= check_csl_libs(oh, platform; verbose, has_csl) - # Check that the libstdcxx string ABI matches - all_ok &= check_cxxstring_abi(oh, platform; verbose) - # Check that this binary file's dynamic linkage works properly. Note to always - # DO THIS ONE LAST as it can actually mutate the file, which causes the previous - # checks to freak out a little bit. - all_ok &= check_dynamic_linkage(oh, prefix, bin_files; - platform, silent, verbose, autofix, src_name) + readmeta(f) do ohs + foreach(ohs) do oh + if !is_for_platform(oh, platform) + if verbose + @warn("Skipping binary analysis of $(relpath(f, prefix.path)) (incorrect platform)") + end + else + # Check that the ISA isn't too high + all_ok &= check_isa(oh, platform, prefix; verbose, silent) + # Check that the OS ABI is set correctly (often indicates the wrong linker was used) + all_ok &= check_os_abi(oh, platform; verbose) + # Make sure all binary files are executables, if libraries aren't + # executables Julia may not be able to dlopen them: + # https://github.com/JuliaLang/julia/issues/38993. In principle this + # should be done when autofix=true, but we have to run this fix on MKL + # for Windows, for which however we have to set autofix=false: + # https://github.com/JuliaPackaging/Yggdrasil/pull/922. + all_ok &= ensure_executability(oh; verbose, silent) + + # If this is a dynamic object, do the dynamic checks + if isdynamic(oh) + # Check that the libgfortran version matches + all_ok &= check_libgfortran_version(oh, platform; verbose, has_csl) + # Check whether the library depends on any of the most common + # libraries provided by `CompilerSupportLibraries_jll`. + all_ok &= check_csl_libs(oh, platform; verbose, has_csl) + # Check that the libstdcxx string ABI matches + all_ok &= check_cxxstring_abi(oh, platform; verbose) + # Check that this binary file's dynamic linkage works properly. Note to always + # DO THIS ONE LAST as it can actually mutate the file, which causes the previous + # checks to freak out a little bit. + all_ok &= check_dynamic_linkage(oh, prefix, bin_files; + platform, silent, verbose, autofix, src_name) + end end end end diff --git a/src/auditor/compiler_abi.jl b/src/auditor/compiler_abi.jl index 2b8a2ebc8..ab36c7ed0 100644 --- a/src/auditor/compiler_abi.jl +++ b/src/auditor/compiler_abi.jl @@ -120,8 +120,8 @@ function detect_libstdcxx_version(oh::ObjectHandle, platform::AbstractPlatform) # Extract all pieces of `.gnu.version_d` from libstdc++.so, find the `GLIBCXX_*` # symbols, and use the maximum version of that to find the GLIBCXX ABI version number - version_symbols = readmeta(first(libstdcxx_libs)) do oh - unique(vcat((x -> x.names).(ELFVersionData(oh))...)) + version_symbols = readmeta(first(libstdcxx_libs)) do ohs + unique(vcat((x -> x.names).(vcat(ELFVersionData.(ohs)...))...)) end version_symbols = filter(x -> startswith(x, "GLIBCXX_"), version_symbols) if isempty(version_symbols) diff --git a/src/auditor/dynamic_linkage.jl b/src/auditor/dynamic_linkage.jl index 3106c790e..bf81def7e 100644 --- a/src/auditor/dynamic_linkage.jl +++ b/src/auditor/dynamic_linkage.jl @@ -68,14 +68,18 @@ function platform_for_object(oh::ObjectHandle) end function _rpaths(file::AbstractString) - readmeta(file) do oh - rpaths(RPath(oh)) + readmeta(file) do ohs + foreach(ohs) do oh + rpaths(RPath(oh)) + end end end function _canonical_rpaths(file::AbstractString) - readmeta(file) do oh - canonical_rpaths(RPath(oh)) + readmeta(file) do ohs + foreach(ohs) do oh + canonical_rpaths(RPath(oh)) + end end end diff --git a/src/auditor/soname_matching.jl b/src/auditor/soname_matching.jl index 6c4cd6beb..fe929979d 100644 --- a/src/auditor/soname_matching.jl +++ b/src/auditor/soname_matching.jl @@ -4,7 +4,7 @@ get_soname(oh::ObjectHandle) = nothing # Auto-open a path into an ObjectHandle function get_soname(path::AbstractString) try - readmeta(get_soname, path) + only(readmeta(get_soname, path)) catch e @warn "Could not probe $(path) for an SONAME!" exception=(e, catch_backtrace()) return nothing diff --git a/src/wizard/interactive_build.jl b/src/wizard/interactive_build.jl index c23da85d2..e55cfa0fa 100644 --- a/src/wizard/interactive_build.jl +++ b/src/wizard/interactive_build.jl @@ -34,15 +34,16 @@ function step4(state::WizardState, ur::Runner, platform::AbstractPlatform, # Check if we can load them as an object file files = filter(files) do f - readmeta(f) do oh - return Auditor.is_for_platform(oh, platform) + readmeta(f) do ohs + return any(Auditor.is_for_platform(oh, platform) for oh in ohs) end end # Strip out the prefix from filenames state.files = map(file->replace(file, "$(destdir_path)/" => ""), files) state.file_kinds = map(files) do f - readmeta(f) do oh + readmeta(f) do ohs + oh = first(ohs) if isexecutable(oh) return :executable elseif islibrary(oh) diff --git a/src/wizard/utils.jl b/src/wizard/utils.jl index 5c07d6c4b..730cfd739 100644 --- a/src/wizard/utils.jl +++ b/src/wizard/utils.jl @@ -85,7 +85,7 @@ from `ObjectFile`. function filter_object_files(files) return filter(files) do f try - readmeta(f) do oh + readmeta(f) do ohs return true end catch e @@ -121,8 +121,8 @@ function match_files(state::WizardState, prefix::Prefix, prefix_files = filter_object_files(prefix_files) # Check if we can load them as an object file prefix_files = filter(prefix_files) do f - readmeta(f) do oh - if !Auditor.is_for_platform(oh, platform) + readmeta(f) do ohs + if !any(Auditor.is_for_platform(oh, platform) for oh in ohs) if !silent @warn("Skipping binary `$f` with incorrect platform") end diff --git a/test/auditing.jl b/test/auditing.jl index 3f2361625..995d60352 100644 --- a/test/auditing.jl +++ b/test/auditing.jl @@ -86,9 +86,11 @@ end prefix = Prefix(testdir) # Run ISA test - readmeta(locate(product, prefix)) do oh - detected_isa = Auditor.analyze_instruction_set(oh, platform; verbose=true) - @test detected_isa == "avx512" + readmeta(locate(product, prefix)) do ohs + foreach(ohs) do oh + detected_isa = Auditor.analyze_instruction_set(oh, platform; verbose=true) + @test detected_isa == "avx512" + end end end end @@ -133,9 +135,11 @@ end prefix = Prefix(testdir) # Run ISA test - readmeta(locate(product, prefix)) do oh - detected_march = Auditor.analyze_instruction_set(oh, platform; verbose=true) - @test detected_march == "avx" + readmeta(locate(product, prefix)) do ohs + foreach(ohs) do oh + detected_march = Auditor.analyze_instruction_set(oh, platform; verbose=true) + @test detected_march == "avx" + end end end end @@ -182,14 +186,16 @@ end prefix = Prefix(testdir) # Run ISA test - readmeta(locate(product, prefix)) do oh - detected_march = Auditor.analyze_instruction_set(oh, platform; verbose=true) - if march == "avx2" - # Detecting the ISA isn't 100% reliable and it's even less - # accurate when looking for AVX2 features - @test_broken march == detected_march - else - @test march == detected_march + readmeta(locate(product, prefix)) do ohs + foreach(ohs) do oh + detected_march = Auditor.analyze_instruction_set(oh, platform; verbose=true) + if march == "avx2" + # Detecting the ISA isn't 100% reliable and it's even less + # accurate when looking for AVX2 features + @test_broken march == detected_march + else + @test march == detected_march + end end end end @@ -243,9 +249,11 @@ end prefix = Prefix(testdir) # Ensure that the library detects as the correct cxxstring_abi: - readmeta(locate(libcxxstringabi_test, prefix)) do oh - detected_cxxstring_abi = Auditor.detect_cxxstring_abi(oh, platform) - @test detected_cxxstring_abi == cxxstring_abi(platform) + readmeta(locate(libcxxstringabi_test, prefix)) do ohs + foreach(ohs) do oh + detected_cxxstring_abi = Auditor.detect_cxxstring_abi(oh, platform) + @test detected_cxxstring_abi == cxxstring_abi(platform) + end end # Explicitly test cxx string abi mismatches @@ -404,11 +412,13 @@ end prefix = Prefix(testdir) # Helper to extract the dylib id of a path - function get_dylib_id(path) - return readmeta(path) do oh - dylib_id_lcs = [lc for lc in MachOLoadCmds(oh) if isa(lc, MachOIdDylibCmd)] - @test !isempty(dylib_id_lcs) - return dylib_name(first(dylib_id_lcs)) + function get_dylib_ids(path) + return readmeta(path) do ohs + map(ohs) do oh + dylib_id_lcs = [lc for lc in MachOLoadCmds(oh) if isa(lc, MachOIdDylibCmd)] + @test !isempty(dylib_id_lcs) + return dylib_name(first(dylib_id_lcs)) + end end end @@ -419,7 +429,7 @@ end right_id_path = locate(right_id, prefix; platform=platform) for p in (no_id_path, abs_id_path, right_id_path) @test any(startswith.(p, libdirs(prefix))) - @test get_dylib_id(p) == "@rpath/$(basename(p))" + @test all(get_dylib_ids(p) .== "@rpath/$(basename(p))") end # Only if it already has an `@rpath/`-ified ID, it doesn't get touched. @@ -534,10 +544,12 @@ end # audit should warn us. libgfortran_versions = (3, 4, 5) other_libgfortran_version = libgfortran_versions[findfirst(v -> v != our_libgfortran_version.major, libgfortran_versions)] - @test_logs (:warn, Regex("but we are supposedly building for libgfortran$(other_libgfortran_version)")) (:warn, r"Linked library libgfortran.so.5") (:warn, r"Linked library libquadmath.so.0") (:warn, r"Linked library libgcc_s.so.1") readmeta(hello_world_path) do oh - p = deepcopy(platform) - p["libgfortran_version"] = "$(other_libgfortran_version).0.0" - @test !Auditor.audit(Prefix(testdir); platform=p, autofix=false) + @test_logs (:warn, Regex("but we are supposedly building for libgfortran$(other_libgfortran_version)")) (:warn, r"Linked library libgfortran.so.5") (:warn, r"Linked library libquadmath.so.0") (:warn, r"Linked library libgcc_s.so.1") readmeta(hello_world_path) do ohs + foreach(ohs) do oh + p = deepcopy(platform) + p["libgfortran_version"] = "$(other_libgfortran_version).0.0" + @test !Auditor.audit(Prefix(testdir); platform=p, autofix=false) + end end end end From 56594a6c75c1e419b2a25da8b4cd35983daccef1 Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Fri, 22 Dec 2023 14:25:00 -0500 Subject: [PATCH 2/4] Correct get_soname --- src/auditor/dynamic_linkage.jl | 8 ++------ src/auditor/soname_matching.jl | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/auditor/dynamic_linkage.jl b/src/auditor/dynamic_linkage.jl index bf81def7e..b1fa3aa69 100644 --- a/src/auditor/dynamic_linkage.jl +++ b/src/auditor/dynamic_linkage.jl @@ -69,17 +69,13 @@ end function _rpaths(file::AbstractString) readmeta(file) do ohs - foreach(ohs) do oh - rpaths(RPath(oh)) - end + vcat(rpaths.(RPath.(ohs))...) end end function _canonical_rpaths(file::AbstractString) readmeta(file) do ohs - foreach(ohs) do oh - canonical_rpaths(RPath(oh)) - end + vcat(canonical_rpaths.(RPath.(ohs))...) end end diff --git a/src/auditor/soname_matching.jl b/src/auditor/soname_matching.jl index fe929979d..61b55aa56 100644 --- a/src/auditor/soname_matching.jl +++ b/src/auditor/soname_matching.jl @@ -4,7 +4,7 @@ get_soname(oh::ObjectHandle) = nothing # Auto-open a path into an ObjectHandle function get_soname(path::AbstractString) try - only(readmeta(get_soname, path)) + only(readmeta(ns -> get_soname.(ns), path)) catch e @warn "Could not probe $(path) for an SONAME!" exception=(e, catch_backtrace()) return nothing From e67a41a7ba690f1e3b025ec6e2a9db604687fea0 Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Thu, 4 Jan 2024 11:42:52 -0500 Subject: [PATCH 3/4] Require ObjectFile 0.4 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index f12cc4f0e..1a751ea3b 100644 --- a/Project.toml +++ b/Project.toml @@ -41,7 +41,7 @@ JLD2 = "0.1.6, 0.2, 0.3, 0.4" JLLWrappers = "1.2.0" JSON = "0.21" LoggingExtras = "0.4, 1" -ObjectFile = "0.3.6, 0.4" +ObjectFile = "0.4" OutputCollectors = "0.1" PkgLicenses = "0.2" Registrator = "1.1" From 36c10e21d18dc129df75dbe00b2bfc6f7cd4c317 Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Thu, 11 Jan 2024 13:49:00 -0500 Subject: [PATCH 4/4] Update Manifest.toml --- Manifest.toml | 227 +++++++++++++++++++++++++++----------------------- 1 file changed, 123 insertions(+), 104 deletions(-) diff --git a/Manifest.toml b/Manifest.toml index 8041c9c50..aef9b486f 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -1,8 +1,8 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.7.2" +julia_version = "1.7.3" manifest_format = "2.0" -project_hash = "1e87134dc5853b26c2f65af5a46eb0a2d987da86" +project_hash = "37b1c77f30c4c87e9820261f70d049fd61c325f2" [[deps.ArgParse]] deps = ["Logging", "TextWrap"] @@ -37,17 +37,17 @@ version = "0.2.0" uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" [[deps.BinaryBuilderBase]] -deps = ["Bzip2_jll", "CodecZlib", "Downloads", "Gzip_jll", "HistoricalStdlibVersions", "InteractiveUtils", "JLLWrappers", "JSON", "LibGit2", "LibGit2_jll", "Libdl", "Logging", "OrderedCollections", "OutputCollectors", "Pkg", "ProgressMeter", "Random", "SHA", "Scratch", "SimpleBufferStream", "TOML", "Tar", "Tar_jll", "UUIDs", "XZ_jll", "Zstd_jll", "p7zip_jll", "pigz_jll"] -git-tree-sha1 = "6cbf80be4757d3268c4fbced9e6bcefcbe23d765" +deps = ["Bzip2_jll", "CodecZlib", "Downloads", "Gzip_jll", "HistoricalStdlibVersions", "InteractiveUtils", "JLLWrappers", "JSON", "LibGit2", "LibGit2_jll", "Libdl", "Logging", "OrderedCollections", "OutputCollectors", "Pkg", "Printf", "ProgressMeter", "REPL", "Random", "SHA", "Scratch", "SimpleBufferStream", "TOML", "Tar", "Tar_jll", "UUIDs", "XZ_jll", "Zstd_jll", "p7zip_jll", "pigz_jll", "unzip_jll"] +git-tree-sha1 = "6f8c4fb870b394c018455d05c2f6f9097f80175b" repo-rev = "master" repo-url = "https://github.com/JuliaPackaging/BinaryBuilderBase.jl.git" uuid = "7f725544-6523-48cd-82d1-3fa08ff4056e" -version = "1.21.0" +version = "1.29.0" [[deps.BitFlags]] -git-tree-sha1 = "43b1a4a8f797c1cddadf60499a8a077d4af2cd2d" +git-tree-sha1 = "2dc09997850d68179b69dafb58ae806167a32b1b" uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" -version = "0.1.7" +version = "0.1.8" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -57,24 +57,30 @@ version = "1.0.8+0" [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] -git-tree-sha1 = "9c209fb7536406834aa938fb149964b985de6c83" +git-tree-sha1 = "cd67fc487743b2f0fd4380d4cbd3a24660d0eec8" uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.7.1" +version = "0.7.3" [[deps.Compat]] -deps = ["Dates", "LinearAlgebra", "UUIDs"] -git-tree-sha1 = "7a60c856b9fa189eb34f5f8a6f6b5529b7942957" +deps = ["Dates", "LinearAlgebra", "TOML", "UUIDs"] +git-tree-sha1 = "ed2ebb1ff7550226ddb584ba8352facf8d9ffb22" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.6.1" +version = "4.11.0" [[deps.CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "8cfa272e8bdedfa88b6aefbbca7c19f1befac519" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.3.0" + [[deps.DataAPI]] -git-tree-sha1 = "e8119c1a33d267e16108be441a287a6981ba1630" +git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.14.0" +version = "1.15.0" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -90,19 +96,25 @@ deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" [[deps.Downloads]] -deps = ["ArgTools", "LibCURL", "NetworkOptions"] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.10" + [[deps.ExprTools]] -git-tree-sha1 = "c1d06d129da9f55715c6c212866f5b1bddc5fa00" +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" -version = "0.1.9" +version = "0.1.10" [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "7be5f99f7d15578798f338f5433b6c432ea8037b" +git-tree-sha1 = "c5c28c245101bd59154f649e19b038d15901b5dc" uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.16.0" +version = "1.16.2" [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" @@ -115,21 +127,21 @@ version = "0.4.2" [[deps.GitHub]] deps = ["Base64", "Dates", "HTTP", "JSON", "MbedTLS", "Sockets", "SodiumSeal", "URIs"] -git-tree-sha1 = "5688002de970b9eee14b7af7bbbd1fdac10c9bbe" +git-tree-sha1 = "7ee730a8484d673a8ce21d8536acfe6494475994" uuid = "bc5e4493-9b4d-5f90-b8aa-2b2bcaad7a26" -version = "5.8.2" +version = "5.9.0" [[deps.Gzip_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "e7a48abe6d5ba74904df632160aa4486b0e80bf0" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "9be9f33a49f1261cc4e0f90f617901f0427fe434" uuid = "be1be57a-8558-53c3-a7e5-50095f79957e" -version = "1.12.0+0" +version = "1.13.0+0" [[deps.HTTP]] -deps = ["Base64", "CodecZlib", "Dates", "IniFile", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "37e4657cd56b11abe3d10cd4a1ec5fbdb4180263" +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "abbbb9ec3afd783a7cbd82ef01dcd088ea051398" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.7.4" +version = "1.10.1" [[deps.Hiccup]] deps = ["MacroTools", "Test"] @@ -138,14 +150,9 @@ uuid = "9fb69e20-1954-56bb-a84f-559cc56a8ff7" version = "0.2.2" [[deps.HistoricalStdlibVersions]] -git-tree-sha1 = "4bcad2c3d4901426fbf3416fb8fded81397d3b44" +git-tree-sha1 = "c8b04a26eaa706b4da6968dfc27ae2d030547cba" uuid = "6df8b67a-e8a0-4029-b4b7-ac196fe72102" -version = "1.2.0" - -[[deps.IniFile]] -git-tree-sha1 = "f550e6e32074c939295eb5ea6de31849ac2c9625" -uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" -version = "0.5.1" +version = "1.2.2" [[deps.InlineStrings]] deps = ["Parsers"] @@ -163,28 +170,28 @@ uuid = "82899510-4779-5014-852e-03e436cf321d" version = "1.0.0" [[deps.JLD2]] -deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "Printf", "Reexport", "Requires", "TranscodingStreams", "UUIDs"] -git-tree-sha1 = "42c17b18ced77ff0be65957a591d34f4ed57c631" +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "PrecompileTools", "Printf", "Reexport", "Requires", "TranscodingStreams", "UUIDs"] +git-tree-sha1 = "853b9e0b876e8c7093a824c4f83c619d23525e64" uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" -version = "0.4.31" +version = "0.4.43" [[deps.JLLWrappers]] -deps = ["Preferences"] -git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.4.1" +version = "1.5.0" [[deps.JSON]] deps = ["Dates", "Mmap", "Parsers", "Unicode"] -git-tree-sha1 = "3c837543ddb02250ef42f4738347454f95079d4e" +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "0.21.3" +version = "0.21.4" [[deps.JSON3]] -deps = ["Dates", "Mmap", "Parsers", "SnoopPrecompile", "StructTypes", "UUIDs"] -git-tree-sha1 = "84b10656a41ef564c39d2d477d7236966d2b5683" +deps = ["Dates", "Mmap", "Parsers", "PrecompileTools", "StructTypes", "UUIDs"] +git-tree-sha1 = "eb3edce0ed4fa32f75a0a11217433c31d56bd48b" uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" -version = "1.12.0" +version = "1.14.0" [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] @@ -213,6 +220,12 @@ uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.17.0+0" + [[deps.LinearAlgebra]] deps = ["Libdl", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" @@ -222,25 +235,25 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" [[deps.LoggingExtras]] deps = ["Dates", "Logging"] -git-tree-sha1 = "cedb76b37bc5a6c702ade66be44f831fa23c681e" +git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" -version = "1.0.0" +version = "1.0.3" [[deps.MacroTools]] deps = ["Markdown", "Random"] -git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2" +git-tree-sha1 = "b211c553c199c111d998ecdaf7623d1b89b69f93" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.10" +version = "0.5.12" [[deps.Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" [[deps.MbedTLS]] -deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "Random", "Sockets"] -git-tree-sha1 = "03a9b9718f5682ecb107ac9f7308991db4ce395b" +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" uuid = "739be429-bea8-5141-9913-cc70e7f3736d" -version = "1.1.7" +version = "1.1.9" [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] @@ -251,18 +264,18 @@ uuid = "a63ad114-7e13-5084-954f-fe012c677804" [[deps.Mocking]] deps = ["Compat", "ExprTools"] -git-tree-sha1 = "782e258e80d68a73d8c916e55f8ced1de00c2cea" +git-tree-sha1 = "4cc0c5a83933648b615c36c2b956d94fda70641e" uuid = "78c3b35d-d492-501b-9361-3d52fe80e533" -version = "0.7.6" +version = "0.7.7" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" [[deps.Mustache]] deps = ["Printf", "Tables"] -git-tree-sha1 = "87c371d27dbf2449a5685652ab322be163269df0" +git-tree-sha1 = "a7cefa21a2ff993bff0456bf7521f46fc077ddf1" uuid = "ffc61752-8dc7-55ee-8c37-f3e9cdd09e70" -version = "1.0.15" +version = "1.0.19" [[deps.Mux]] deps = ["AssetRegistry", "Base64", "HTTP", "Hiccup", "MbedTLS", "Pkg", "Sockets"] @@ -275,9 +288,9 @@ uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" [[deps.ObjectFile]] deps = ["Reexport", "StructIO"] -git-tree-sha1 = "55ce61d43409b1fb0279d1781bf3b0f22c83ab3b" +git-tree-sha1 = "195e0a19842f678dd3473ceafbe9d82dfacc583c" uuid = "d8793406-e978-5875-9003-1fc021f44a92" -version = "0.3.7" +version = "0.4.1" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] @@ -285,20 +298,20 @@ uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] -git-tree-sha1 = "6503b77492fd7fcb9379bf73cd31035670e3c509" +git-tree-sha1 = "51901a49222b09e3743c65b8847687ae5fc78eb2" uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" -version = "1.3.3" +version = "1.4.1" [[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9ff31d101d987eb9d66bd8b176ac7c277beccd09" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "cc6e1927ac521b659af340e0ca45828a3ffc748f" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "1.1.20+0" +version = "3.0.12+0" [[deps.OrderedCollections]] -git-tree-sha1 = "85f8e6578bf1f9ee0d11e7bb1b1456435479d47c" +git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.4.1" +version = "1.6.3" [[deps.OutputCollectors]] git-tree-sha1 = "5d3f2b3b2e2a9d7d6f1774c78e94530ac7f360cc" @@ -306,10 +319,10 @@ uuid = "6c11c7d4-943b-4e2b-80de-f2cfc2930a8c" version = "0.1.1" [[deps.Parsers]] -deps = ["Dates", "SnoopPrecompile"] -git-tree-sha1 = "478ac6c952fddd4399e71d4779797c538d0ff2bf" +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.5.8" +version = "2.8.1" [[deps.Pidfile]] deps = ["FileWatching", "Test"] @@ -327,11 +340,17 @@ git-tree-sha1 = "0af826be249c6751a3e783c07b8cd3034f508943" uuid = "fc669557-7ec9-5e45-bca9-462afbc28879" version = "0.2.0" +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "03b4c25b43cb84cee5c90aa9b5ea0a78fd848d2f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.0" + [[deps.Preferences]] deps = ["TOML"] -git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" +git-tree-sha1 = "00805cd429dcb4870060ff49ef443486c262e38e" uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.3.0" +version = "1.4.1" [[deps.Printf]] deps = ["Unicode"] @@ -339,9 +358,9 @@ uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" [[deps.ProgressMeter]] deps = ["Distributed", "Printf"] -git-tree-sha1 = "d7a7aef8f8f2d537104f170139553b14dfe39fe9" +git-tree-sha1 = "00099623ffee15972c16111bcf84c58a0051257c" uuid = "92933f4c-e287-5a05-a399-4b506db050ca" -version = "1.7.2" +version = "1.9.0" [[deps.REPL]] deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] @@ -352,10 +371,10 @@ deps = ["SHA", "Serialization"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" [[deps.RecipesBase]] -deps = ["SnoopPrecompile"] -git-tree-sha1 = "261dddd3b862bd2c940cf6ca4d1c8fe593e457c8" +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.3.3" +version = "1.3.4" [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" @@ -364,15 +383,15 @@ version = "1.2.2" [[deps.Registrator]] deps = ["AutoHashEquals", "Base64", "Dates", "Distributed", "FileWatching", "GitForge", "GitHub", "HTTP", "JSON", "LibGit2", "Logging", "MbedTLS", "Mocking", "Mustache", "Mux", "Pkg", "RegistryTools", "Serialization", "Sockets", "TimeToLive", "URIs", "UUIDs", "ZMQ"] -git-tree-sha1 = "7242ef64be5953fac9bf8b3efa3a7c4d2d44ca09" +git-tree-sha1 = "17aec322677d9b81cdd6b9b9236b09a3f1374c6a" uuid = "4418983a-e44d-11e8-3aec-9789530b3b3e" -version = "1.8.0" +version = "1.9.1" [[deps.RegistryTools]] deps = ["AutoHashEquals", "LibGit2", "Pkg", "SHA", "UUIDs"] -git-tree-sha1 = "94060d91cc152680842357aacb402afbd06601aa" +git-tree-sha1 = "3dd9eaa965a2925b0a34d994b4d886d797f54b20" uuid = "d1eb7eb1-105f-429d-abf5-b0f65cb9e2c4" -version = "2.1.0" +version = "2.2.3" [[deps.Requires]] deps = ["UUIDs"] @@ -385,9 +404,9 @@ uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" [[deps.Scratch]] deps = ["Dates"] -git-tree-sha1 = "30449ee12237627992a99d5e30ae63e4d78cd24a" +git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" uuid = "6c6a2e73-6563-6170-7368-637461726353" -version = "1.2.0" +version = "1.2.1" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" @@ -397,12 +416,6 @@ git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" version = "1.1.0" -[[deps.SnoopPrecompile]] -deps = ["Preferences"] -git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c" -uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c" -version = "1.0.3" - [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" @@ -435,20 +448,20 @@ uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" version = "1.0.1" [[deps.Tables]] -deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] -git-tree-sha1 = "1544b926975372da01227b382066ab70e574a3ec" +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "1.10.1" +version = "1.11.1" [[deps.Tar]] deps = ["ArgTools", "SHA"] uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" [[deps.Tar_jll]] -deps = ["Artifacts", "Attr_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "f563224757d6c7bddf393435e96504259a517337" +deps = ["Artifacts", "Attr_jll", "JLLWrappers", "Libdl", "Libiconv_jll"] +git-tree-sha1 = "85e7d0ef5248971fbd824f29c52ab6168b895dfd" uuid = "9b64493d-8859-5bf3-93d7-7c32dd38186f" -version = "1.34.0+1" +version = "1.35.0+0" [[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] @@ -467,20 +480,20 @@ version = "0.3.0" [[deps.TimeZones]] deps = ["Dates", "Downloads", "InlineStrings", "LazyArtifacts", "Mocking", "Printf", "RecipesBase", "Scratch", "Unicode"] -git-tree-sha1 = "a92ec4466fc6e3dd704e2668b5e7f24add36d242" +git-tree-sha1 = "5b347464bdac31eccfdbe1504d9484c31645cafc" uuid = "f269a46b-ccf7-5d73-abea-4c690281aa53" -version = "1.9.1" +version = "1.11.0" [[deps.TranscodingStreams]] deps = ["Random", "Test"] -git-tree-sha1 = "94f38103c984f89cf77c402f2a68dbd870f8165f" +git-tree-sha1 = "1fbeaaca45801b4ba17c251dd8603ef24801dd84" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.9.11" +version = "0.10.2" [[deps.URIs]] -git-tree-sha1 = "074f993b0ca030848b897beff716d93aca60f06a" +git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" -version = "1.4.2" +version = "1.5.1" [[deps.UUIDs]] deps = ["Random", "SHA"] @@ -490,10 +503,10 @@ uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" [[deps.XZ_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "7928d348322698fb93d5c14b184fdc176c8afc82" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "522b8414d40c4cbbab8dee346ac3a09f9768f25d" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.2.9+0" +version = "5.4.5+0" [[deps.ZMQ]] deps = ["FileWatching", "Sockets", "ZeroMQ_jll"] @@ -513,9 +526,9 @@ uuid = "83775a58-1f1d-513f-b197-d71354ab007a" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "c6edfe154ad7b313c01aceca188c05c835c67360" +git-tree-sha1 = "49ce682769cd5de6c72dcf1b94ed7790cd08974c" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" -version = "1.5.4+0" +version = "1.5.5+0" [[deps.ghr_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -546,3 +559,9 @@ deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] git-tree-sha1 = "3c0c0b0c133b6ab53e1af05dc526091ce8781f16" uuid = "1bc43ea1-30af-5bc8-a9d4-c018457e6e3e" version = "2.7.0+0" + +[[deps.unzip_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "5d543463432c2e25027d88f5a314d40d44488391" +uuid = "88f77b66-78eb-5ed0-bc16-ebba0796830d" +version = "6.0.2+0"