From 166c99be5db38d59a17798feb42d2d1856887467 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Fri, 17 Oct 2025 13:11:52 +0200 Subject: [PATCH 01/26] allow specifying projects in a workspace more than one level under it (#59849) (cherry picked from commit b26e7ccbb36d9ca9739a522c5ded833e5c9f1897) --- base/loading.jl | 51 ++++++++++++++----- doc/src/manual/code-loading.md | 4 +- test/loading.jl | 8 +++ test/project/SubProject/Project.toml | 2 +- .../SubProject/nested/deep/Project.toml | 2 + .../SubProject/nested/deep/src/DeepNested.jl | 2 + 6 files changed, 54 insertions(+), 15 deletions(-) create mode 100644 test/project/SubProject/nested/deep/Project.toml create mode 100644 test/project/SubProject/nested/deep/src/DeepNested.jl diff --git a/base/loading.jl b/base/loading.jl index 428b106aa08ee..316f652c78fa3 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -667,20 +667,45 @@ function env_project_file(env::String)::Union{Bool,String} end function base_project(project_file) - base_dir = abspath(joinpath(dirname(project_file), "..")) - base_project_file = env_project_file(base_dir) - base_project_file isa String || return nothing - d = parsed_toml(base_project_file) - workspace = get(d, "workspace", nothing)::Union{Dict{String, Any}, Nothing} - if workspace === nothing - return nothing - end - projects = get(workspace, "projects", nothing)::Union{Vector{String}, Nothing, String} - projects === nothing && return nothing - if projects isa Vector && basename(dirname(project_file)) in projects - return base_project_file + home_dir = abspath(homedir()) + project_dir = abspath(dirname(project_file)) + current_dir = project_dir + # Only stop at home boundary if we started under home + started_in_home = startswith(project_dir, home_dir) + + while true + parent_dir = dirname(current_dir) + # Stop if we've reached root + if parent_dir == current_dir + return nothing + end + # Stop if we started in home and have now left it + if started_in_home && !startswith(parent_dir, home_dir) + return nothing + end + + base_project_file = env_project_file(parent_dir) + if base_project_file isa String + d = parsed_toml(base_project_file) + workspace = get(d, "workspace", nothing)::Union{Dict{String, Any}, Nothing} + if workspace !== nothing + projects = get(workspace, "projects", nothing)::Union{Vector{String}, Nothing, String} + if projects isa Vector + # Check if any project in the workspace matches the original project + workspace_root = dirname(base_project_file) + for project in projects + project_path = joinpath(workspace_root, project) + if isdir(project_path) + if samefile(project_path, project_dir) + return base_project_file + end + end + end + end + end + end + current_dir = parent_dir end - return nothing end function project_deps_get(env::String, name::String)::Union{Nothing,PkgId} diff --git a/doc/src/manual/code-loading.md b/doc/src/manual/code-loading.md index 9b17518d32882..0c08b2ea9d470 100644 --- a/doc/src/manual/code-loading.md +++ b/doc/src/manual/code-loading.md @@ -406,7 +406,9 @@ A project file can define a workspace by giving a set of projects that is part o projects = ["test", "benchmarks", "docs", "SomePackage"] ``` -Each subfolder contains its own `Project.toml` file, which may include additional dependencies and compatibility constraints. In such cases, the package manager gathers all dependency information from all the projects in the workspace generating a single manifest file that combines the versions of all dependencies. +Each project listed in the `projects` array is specified by its relative path from the workspace root. This can be a direct child directory (e.g., `"test"`) or a nested subdirectory (e.g., `"nested/subdir/MyPackage"`). Each project contains its own `Project.toml` file, which may include additional dependencies and compatibility constraints. In such cases, the package manager gathers all dependency information from all the projects in the workspace generating a single manifest file that combines the versions of all dependencies. + +When Julia loads a project, it searches upward through parent directories until it reaches the user's home directory to find a workspace that includes that project. This allows workspace projects to be nested at arbitrary depth within the workspace directory tree. Furthermore, workspaces can be "nested", meaning a project defining a workspace can also be part of another workspace. In this scenario, a single manifest file is still utilized, stored alongside the "root project" (the project that doesn't have another workspace including it). An example file structure could look like this: diff --git a/test/loading.jl b/test/loading.jl index 49db010ce1adc..1a0a723eee533 100644 --- a/test/loading.jl +++ b/test/loading.jl @@ -1658,6 +1658,14 @@ end @test isfile(Base.locate_package(id_dev)) @test Base.identify_package("Devved2") === nothing + # Test that workspace projects can be specified with subfolder paths + # and that base_project searches upward through multiple directory levels + empty!(LOAD_PATH) + push!(LOAD_PATH, joinpath(@__DIR__, "project", "SubProject", "nested", "deep")) + proj_file = joinpath(@__DIR__, "project", "SubProject", "nested", "deep", "Project.toml") + base_proj = Base.base_project(proj_file) + @test base_proj == joinpath(@__DIR__, "project", "SubProject", "Project.toml") + finally copy!(LOAD_PATH, old_load_path) end diff --git a/test/project/SubProject/Project.toml b/test/project/SubProject/Project.toml index dcb84d865ac85..40fb20eee6826 100644 --- a/test/project/SubProject/Project.toml +++ b/test/project/SubProject/Project.toml @@ -2,7 +2,7 @@ name = "MyPkg" uuid = "0cafdeb2-d7a2-40d0-8d22-4411fcc2c4ee" [workspace] -projects = ["sub", "PackageThatIsSub", "test"] +projects = ["sub", "PackageThatIsSub", "test", "nested/deep"] [deps] Devved = "cbce3a6e-7a3d-4e84-8e6d-b87208df7599" diff --git a/test/project/SubProject/nested/deep/Project.toml b/test/project/SubProject/nested/deep/Project.toml new file mode 100644 index 0000000000000..5567e6f4974db --- /dev/null +++ b/test/project/SubProject/nested/deep/Project.toml @@ -0,0 +1,2 @@ +name = "DeepNested" +uuid = "d5e3a334-7f12-4e5f-9ab8-123456789abc" diff --git a/test/project/SubProject/nested/deep/src/DeepNested.jl b/test/project/SubProject/nested/deep/src/DeepNested.jl new file mode 100644 index 0000000000000..3e5553c1fd9ba --- /dev/null +++ b/test/project/SubProject/nested/deep/src/DeepNested.jl @@ -0,0 +1,2 @@ +module DeepNested +end From 4b01fcb33986ab3cf4dc78db05b30de4d0b0c9af Mon Sep 17 00:00:00 2001 From: Simeon David Schaub Date: Fri, 17 Oct 2025 19:33:15 +0200 Subject: [PATCH 02/26] update llvmcall docs, opaque pointers are now supported (#59873) (cherry picked from commit a0a65e6024adcd3bb0fc9cf45c90aa2cd520aea2) --- base/docs/basedocs.jl | 2 -- 1 file changed, 2 deletions(-) diff --git a/base/docs/basedocs.jl b/base/docs/basedocs.jl index 83e0bab4cc730..51eb5139ecc68 100644 --- a/base/docs/basedocs.jl +++ b/base/docs/basedocs.jl @@ -1396,8 +1396,6 @@ a tuple of types. All types, as well as the LLVM code, should be specified as li not as variables or expressions (it may be necessary to use `@eval` to generate these literals). -[Opaque pointers](https://llvm.org/docs/OpaquePointers.html) (written as `ptr`) are not allowed in the LLVM code. - See [`test/llvmcall.jl`](https://github.com/JuliaLang/julia/blob/v$VERSION/test/llvmcall.jl) for usage examples. From 53eb2dc197588920786a11d63a50408a7f5779f9 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Sat, 18 Oct 2025 20:55:48 -0400 Subject: [PATCH 03/26] fix accidental save (and restore) of sigmask when interpreting try (#59878) Noticed during bug hunting of https://github.com/ericphanson/LicenseCheck.jl/issues/11#issuecomment-3417207015 and may cause performance degradation for interpreter-executed try blocks or scope entry. Co-authored-by: Dilum Aluthge (cherry picked from commit c1353acc1008548cecd5ed51ef605df1d7003a43) --- src/interpreter.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/interpreter.c b/src/interpreter.c index 57c3e715ffed6..a692cadaf9be1 100644 --- a/src/interpreter.c +++ b/src/interpreter.c @@ -545,7 +545,7 @@ static jl_value_t *eval_body(jl_array_t *stmts, interpreter_state *s, size_t ip, // replaced later JL_GC_PUSH1(&scope); ct->scope = scope; - if (!jl_setjmp(__eh.eh_ctx, 1)) { + if (!jl_setjmp(__eh.eh_ctx, 0)) { ct->eh = &__eh; eval_body(stmts, s, next_ip, toplevel); jl_unreachable(); @@ -553,7 +553,7 @@ static jl_value_t *eval_body(jl_array_t *stmts, interpreter_state *s, size_t ip, JL_GC_POP(); } else { - if (!jl_setjmp(__eh.eh_ctx, 1)) { + if (!jl_setjmp(__eh.eh_ctx, 0)) { ct->eh = &__eh; eval_body(stmts, s, next_ip, toplevel); jl_unreachable(); From d5266180b9f47b671710778f2e61f03ef66a267f Mon Sep 17 00:00:00 2001 From: James Wrigley Date: Mon, 20 Oct 2025 13:13:36 +0200 Subject: [PATCH 04/26] Type-assert `isfinite(::AbstractFloat)` (#59888) (cherry picked from commit 78ba3be7e44da8ae686cc0ccf0b125d1fad820ca) --- base/float.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/float.jl b/base/float.jl index 1878a6a953360..57334bfbbd943 100644 --- a/base/float.jl +++ b/base/float.jl @@ -709,7 +709,7 @@ See also: [`iszero`](@ref), [`isone`](@ref), [`isinf`](@ref), [`ismissing`](@ref isnan(x::AbstractFloat) = (x != x)::Bool isnan(x::Number) = false -isfinite(x::AbstractFloat) = !isnan(x - x) +isfinite(x::AbstractFloat) = !(isnan(x - x)::Bool) isfinite(x::Real) = decompose(x)[3] != 0 isfinite(x::Integer) = true From 9ff6c46d0b39aa3d7378e8bb04067be46ebdb921 Mon Sep 17 00:00:00 2001 From: James Wrigley Date: Mon, 20 Oct 2025 19:57:30 +0200 Subject: [PATCH 05/26] Type-assert `DataType.layout` in some Base functions (#59886) This prevents a bunch of invalidations, specifically these ones in Julia 1.12 with UnsafePointers.jl (CC @cjdoris): ```julia inserting convert(P::Type{<:Ptr}, p::UnsafePointers.UnsafePtr) @ UnsafePointers ~/git/UnsafePointers.jl/src/UnsafePointers.jl:66 invalidated: mt_backedges: 1: signature Tuple{typeof(convert), Type{Ptr{Base.DataTypeLayout}}, Any} triggered MethodInstance for Base.datatype_npointers(::Type{T} where T<:(NamedTuple{names, T} where {T<:Tuple, names})) (4 children) 2: signature Tuple{typeof(convert), Type{Ptr{Base.DataTypeLayout}}, Any} triggered MethodInstance for Base.datatype_npointers(::Type{T} where T<:AbstractString) (4 children) 3: signature Tuple{typeof(convert), Type{Ptr{Base.DataTypeLayout}}, Any} triggered MethodInstance for Base.datatype_npointers(::Type{T} where T<:Tuple{Symbol, Any}) (4 children) 4: signature Tuple{typeof(convert), Type{Ptr{Base.DataTypeLayout}}, Any} triggered MethodInstance for Base.datatype_npointers(::Type{T} where T<:(NamedTuple{(:message, :position, :hint), _A} where _A)) (4 children) 5: signature Tuple{typeof(convert), Type{Ptr{Base.DataTypeLayout}}, Any} triggered MethodInstance for Base.datatype_npointers(::Type{T} where T<:(SubString{_A} where _A)) (4 children) 6: signature Tuple{typeof(convert), Type{Ptr{Base.DataTypeLayout}}, Any} triggered MethodInstance for Base.datatype_alignment(::Type{T} where T<:(NamedTuple{(:message, :position, :hint), _A} where _A)) (15 children) 7: signature Tuple{typeof(convert), Type{Ptr{Base.DataTypeLayout}}, Any} triggered MethodInstance for Base.datatype_alignment(::Type{T} where T<:(SubString{_A} where _A)) (19 children) 8: signature Tuple{typeof(convert), Type{Ptr{Base.DataTypeLayout}}, Any} triggered MethodInstance for Base.datatype_alignment(::Type{T} where T<:Tuple{Any, Symbol, Symbol}) (21 children) 9: signature Tuple{typeof(convert), Type{Ptr{Base.DataTypeLayout}}, Any} triggered MethodInstance for Base.datatype_alignment(::Type{T} where T<:Tuple{Symbol, Any}) (23 children) 10: signature Tuple{typeof(convert), Type{Ptr{Base.DataTypeLayout}}, Any} triggered MethodInstance for Base.datatype_alignment(::Type{T} where T<:AbstractString) (52 children) 11: signature Tuple{typeof(convert), Type{Ptr{Base.DataTypeLayout}}, Any} triggered MethodInstance for Base.datatype_alignment(::Type{T} where T<:(NamedTuple{names, T} where {T<:Tuple, names})) (1739 children) ``` Using Cthulhu to look at the last invalidation with 1739 children showed this: ```julia datatype_alignment(dt::DataType) @ Base ~/.julia/juliaup/julia-1.12.1+0.x64.linux.gnu/share/julia/base/runtime_internals.jl:544 544 function datatype_alignment(dt::Type{T} where T<:(NamedTuple{names, T} where {T<:Tuple, names})::DataType)::Any 545 @_foldable_meta 546 (dt::Type{T} where T<:(NamedTuple{names, T} where {T<:Tuple, names}).layout::Any == C_NULL::Core.Const(Ptr{Nothing}(0x0000000000000000)))::Any && throw(UndefRefError()::Core.Const(UndefRefError())) 547 alignment::Any = unsafe_load(convert(Ptr{DataTypeLayout}::Type{Ptr{Base.DataTypeLayout}}, dt::Type{T} where T<:(NamedTuple{names, T} where {T<:Tuple, names}).layout::Any)::Any)::Any.alignment::Any 548 return Int::Type{Int64}(alignment::Any)::Any 549 end ``` The `.layout` field was getting inferred as `Any` which caused that method to be invalidated when UnsafePointers.jl defined a new `convert()` method. Would it be possible to backport this to 1.12? UnsafePointers is a dependency of PythonCall so it's quite widely used. --------- Co-authored-by: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> (cherry picked from commit 90f42895abb4041929724ebe41236a30d04ad603) --- base/runtime_internals.jl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/base/runtime_internals.jl b/base/runtime_internals.jl index cabedc7b46964..cbe0a120babef 100644 --- a/base/runtime_internals.jl +++ b/base/runtime_internals.jl @@ -543,8 +543,9 @@ alignment of the elements, not the whole object. """ function datatype_alignment(dt::DataType) @_foldable_meta - dt.layout == C_NULL && throw(UndefRefError()) - alignment = unsafe_load(convert(Ptr{DataTypeLayout}, dt.layout)).alignment + layout = dt.layout::Ptr{Cvoid} + layout == C_NULL && throw(UndefRefError()) + alignment = unsafe_load(convert(Ptr{DataTypeLayout}, layout)).alignment return Int(alignment) end @@ -627,8 +628,9 @@ Return the number of pointers in the layout of a datatype. """ function datatype_npointers(dt::DataType) @_foldable_meta - dt.layout == C_NULL && throw(UndefRefError()) - return unsafe_load(convert(Ptr{DataTypeLayout}, dt.layout)).npointers + layout = dt.layout::Ptr{Cvoid} + layout == C_NULL && throw(UndefRefError()) + return unsafe_load(convert(Ptr{DataTypeLayout}, layout)).npointers end """ From 8e5da22366ebd530414fd41a27d3a0ec0a0e0f8d Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Tue, 21 Oct 2025 02:57:45 +0900 Subject: [PATCH 06/26] absint: allow ad-hoc cancellation of concrete evaluation (#59908) This change is not necessary for `NativeInterpreter` at all, but is particularly useful for JET. For error reporting, which is the purpose of `JETAnalyzer`, it is desirable to present error causes in a user-understandable form even when concrete evaluation presents errors. This requires analysis using regular abstract interpretation (constant propagation) in general. However, to reduce false positives, the precision that concrete evaluation brings is very important, and completely disabling concrete evaluation is not desirable either. Currently, `JETAnalyzer` aims to avoid this tradeoff by limiting concrete evaluation to only some functions, but this approach does not scale and occasionally causes problems like JuliaLang/julia#59884. This commit enables ad-hoc cancellation of concrete evaluation based on the result of `concrete_eval_call`, allowing `JETAnalyzer` to fallback to abstract interpretation only when concrete evaluation causes errors, fundamentally avoiding such problems. (cherry picked from commit c6091de0942ab75c9da18bbf1b49db1fb760e353) --- Compiler/src/abstractinterpretation.jl | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Compiler/src/abstractinterpretation.jl b/Compiler/src/abstractinterpretation.jl index 10cbca8c0c3d8..3a368c3404e9b 100644 --- a/Compiler/src/abstractinterpretation.jl +++ b/Compiler/src/abstractinterpretation.jl @@ -872,11 +872,12 @@ function abstract_call_method_with_const_args(interp::AbstractInterpreter, concrete_eval_result = nothing if eligibility === :concrete_eval concrete_eval_result = concrete_eval_call(interp, f, result, arginfo, sv, invokecall) - # if we don't inline the result of this concrete evaluation, - # give const-prop' a chance to inline a better method body - if !may_optimize(interp) || ( - may_inline_concrete_result(concrete_eval_result.const_result::ConcreteResult) || - concrete_eval_result.rt === Bottom) # unless this call deterministically throws and thus is non-inlineable + if (concrete_eval_result !== nothing && # allow external abstract interpreters to disable concrete evaluation ad-hoc + # if we don't inline the result of this concrete evaluation, + # give const-prop' a chance to inline a better method body + (!may_optimize(interp) || + may_inline_concrete_result(concrete_eval_result.const_result::ConcreteResult) || + concrete_eval_result.rt === Bottom)) # unless this call deterministically throws and thus is non-inlineable return concrete_eval_result end # TODO allow semi-concrete interp for this call? From d9aa8e5edd8c4813ca6338c801ab25bee3ace082 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Tue, 21 Oct 2025 22:23:11 +0900 Subject: [PATCH 07/26] reflection: enable `Base._which` with non-base `Compiler.MethodTableView` (#59915) When packages using non-Base compilers call `Base._which`, a method error occurs due to module context mismatch. Like other reflection functions, the module context of `mt::Compiler.MethodTableView` needs to be properly determined. --- base/reflection.jl | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/base/reflection.jl b/base/reflection.jl index c3766447f87fe..b2fcca66f4154 100644 --- a/base/reflection.jl +++ b/base/reflection.jl @@ -261,7 +261,7 @@ function invoke_interp_compiler(interp, fname::Symbol, args...) T = typeof(interp) while true Tname = typename(T).name - Tname === :Any && error("Expected Interpreter") + Tname === :Any && error("Expected AbstractInterpreter") Tname === :AbstractInterpreter && break T = supertype(T) end @@ -269,6 +269,21 @@ function invoke_interp_compiler(interp, fname::Symbol, args...) end end +function invoke_mt_compiler(mt, fname::Symbol, args...) + if mt === nothing + return invoke_default_compiler(fname, args...) + else + T = typeof(mt) + while true + Tname = typename(T).name + Tname === :Any && error("Expected MethodTableView") + Tname === :MethodTableView && break + T = supertype(T) + end + return getglobal(typename(T).module, fname)(args...) + end +end + """ code_typed_by_type(types::Type{<:Tuple}; ...) @@ -870,7 +885,7 @@ function _which(@nospecialize(tt::Type); world::UInt=get_world_counter(), raise::Bool=true) world == typemax(UInt) && error("code reflection cannot be used from generated functions") - match, = invoke_default_compiler(:findsup_mt, tt, world, method_table) + match, = invoke_mt_compiler(method_table, :findsup_mt, tt, world, method_table) if match === nothing raise && error("no unique matching method found for the specified argument types") return nothing From 19ae89d3980f0a80cbcf80b5cb9b2384ba193064 Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Wed, 22 Oct 2025 02:58:45 -0400 Subject: [PATCH 08/26] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.12]?= =?UTF-8?q?=20Bump=20LinearAlgebra=20stdlib=2024f5e21=20=E2=86=92=20556750?= =?UTF-8?q?4=20(#59927)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stdlib: LinearAlgebra URL: https://github.com/JuliaLang/LinearAlgebra.jl.git Stdlib branch: release-1.12 Julia branch: backports-release-1.12 Old commit: 24f5e21 New commit: 5567504 Julia version: 1.12.1 LinearAlgebra version: 1.12.0(Does not match) Bump invoked by: @ViralBShah Powered by: [BumpStdlibs.jl](https://github.com/JuliaLang/BumpStdlibs.jl) Diff: https://github.com/JuliaLang/LinearAlgebra.jl/compare/24f5e21cf3a560ca560c5a1759ff21ba68382ebd...5567504893591e552f08cc08353b285182a1c8cc ``` $ git log --oneline 24f5e21..5567504 5567504 Backports to v1.12 (#1472) a2a4981 Overload array constructors for BunchKaufman (#1461) (#1466) 1ebc0cb Generic fallback for `fillstored!` (#1389) ``` Co-authored-by: ViralBShah <744411+ViralBShah@users.noreply.github.com> --- .../md5 | 1 - .../sha512 | 1 - .../md5 | 1 + .../sha512 | 1 + stdlib/LinearAlgebra.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/LinearAlgebra-24f5e21cf3a560ca560c5a1759ff21ba68382ebd.tar.gz/md5 delete mode 100644 deps/checksums/LinearAlgebra-24f5e21cf3a560ca560c5a1759ff21ba68382ebd.tar.gz/sha512 create mode 100644 deps/checksums/LinearAlgebra-5567504893591e552f08cc08353b285182a1c8cc.tar.gz/md5 create mode 100644 deps/checksums/LinearAlgebra-5567504893591e552f08cc08353b285182a1c8cc.tar.gz/sha512 diff --git a/deps/checksums/LinearAlgebra-24f5e21cf3a560ca560c5a1759ff21ba68382ebd.tar.gz/md5 b/deps/checksums/LinearAlgebra-24f5e21cf3a560ca560c5a1759ff21ba68382ebd.tar.gz/md5 deleted file mode 100644 index 9b1701abea5dc..0000000000000 --- a/deps/checksums/LinearAlgebra-24f5e21cf3a560ca560c5a1759ff21ba68382ebd.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -93162fc479ba1762028ef917176f45e0 diff --git a/deps/checksums/LinearAlgebra-24f5e21cf3a560ca560c5a1759ff21ba68382ebd.tar.gz/sha512 b/deps/checksums/LinearAlgebra-24f5e21cf3a560ca560c5a1759ff21ba68382ebd.tar.gz/sha512 deleted file mode 100644 index 721f154ad5366..0000000000000 --- a/deps/checksums/LinearAlgebra-24f5e21cf3a560ca560c5a1759ff21ba68382ebd.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -d6c421048e52d5cf32848cf7a16db1ac269f2c553672b0f1126230a7f5954adb6f2883982efe747bd91fa8135071e1b2f717a12ceb1631c1c7effbf6cece8f4c diff --git a/deps/checksums/LinearAlgebra-5567504893591e552f08cc08353b285182a1c8cc.tar.gz/md5 b/deps/checksums/LinearAlgebra-5567504893591e552f08cc08353b285182a1c8cc.tar.gz/md5 new file mode 100644 index 0000000000000..0b24489826784 --- /dev/null +++ b/deps/checksums/LinearAlgebra-5567504893591e552f08cc08353b285182a1c8cc.tar.gz/md5 @@ -0,0 +1 @@ +e9b0f2123d80968562e410dab5d18fce diff --git a/deps/checksums/LinearAlgebra-5567504893591e552f08cc08353b285182a1c8cc.tar.gz/sha512 b/deps/checksums/LinearAlgebra-5567504893591e552f08cc08353b285182a1c8cc.tar.gz/sha512 new file mode 100644 index 0000000000000..999958331e4a1 --- /dev/null +++ b/deps/checksums/LinearAlgebra-5567504893591e552f08cc08353b285182a1c8cc.tar.gz/sha512 @@ -0,0 +1 @@ +b258fb01851417aa0f17615ce4bfcd501aa1ad3add465ca455fb9f2556df9844ad93ba8f946fd44075b2028a929c0155b8ab7e86a000e162f6600332418f23f4 diff --git a/stdlib/LinearAlgebra.version b/stdlib/LinearAlgebra.version index b5383b0749ae0..7d7904e1f708c 100644 --- a/stdlib/LinearAlgebra.version +++ b/stdlib/LinearAlgebra.version @@ -1,4 +1,4 @@ LINEARALGEBRA_BRANCH = release-1.12 -LINEARALGEBRA_SHA1 = 24f5e21cf3a560ca560c5a1759ff21ba68382ebd +LINEARALGEBRA_SHA1 = 5567504893591e552f08cc08353b285182a1c8cc LINEARALGEBRA_GIT_URL := https://github.com/JuliaLang/LinearAlgebra.jl.git LINEARALGEBRA_TAR_URL = https://api.github.com/repos/JuliaLang/LinearAlgebra.jl/tarball/$1 From 570139ab859efded0194e8d844258190b35b177d Mon Sep 17 00:00:00 2001 From: James Wrigley Date: Fri, 24 Oct 2025 16:56:29 +0200 Subject: [PATCH 09/26] Set types of boxed variables in `abstract_eval_nonlinearized_foreigncall_name` (#59921) This prevents invalidations of `isready()` from loading Distributed on 1.12: ```julia inserting isready(pool::Distributed.WorkerPool) @ Distributed ~/.julia/juliaup/julia-1.12.1+0.x64.linux.gnu/share/julia/stdlib/v1.12/Distributed/src/workerpool.jl:168 invalidated: mt_backedges: 1: signature Tuple{typeof(isready), Any} triggered MethodInstance for (::Compiler.var"#evalargs#abstract_eval_nonlinearized_foreigncall_name##0"{Expr, Compiler.StatementState, Compiler.Future{Compiler.CallMeta}, Vector{Any}, Int64})(::Compiler.AbstractInterpreter, ::Compiler.InferenceState) (0 children) 2: signature Tuple{typeof(isready), Any} triggered MethodInstance for (::Compiler.var"#evalargs#abstract_eval_nonlinearized_foreigncall_name##0"{Expr, Compiler.StatementState, Compiler.Future{Compiler.CallMeta}, Vector{Any}, Int64})(::Compiler.NativeInterpreter, ::Compiler.InferenceState) (0 children) 3: signature Tuple{typeof(isready), Any} triggered MethodInstance for (::Compiler.var"#evalargs#abstract_eval_nonlinearized_foreigncall_name##0"{Expr, Compiler.StatementState, Compiler.Future{Compiler.CallMeta}, Vector{Any}, Int64})(::Compiler.AbstractInterpreter, ::Compiler.InferenceState) (249 children) ``` I think ideally it wouldn't use a closure at all, but I'm not familiar enough with the code to refactor it that much. I'm making the PR against the `release-1.12` branch because this function is deleted entirely on master by #59165. --- Compiler/src/abstractinterpretation.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Compiler/src/abstractinterpretation.jl b/Compiler/src/abstractinterpretation.jl index 3a368c3404e9b..b455f078d83eb 100644 --- a/Compiler/src/abstractinterpretation.jl +++ b/Compiler/src/abstractinterpretation.jl @@ -3458,7 +3458,7 @@ function abstract_eval_nonlinearized_foreigncall_name( callresult = Future{CallMeta}() i::Int = 1 nextstate::UInt8 = 0x0 - local ai, res + local ai::Future, res::Future function evalargs(interp, sv) if nextstate === 0x1 @goto state1 From ec3201ffe265a874fbb416b5b4b1ea4774edaee6 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 29 Oct 2025 09:59:14 +0100 Subject: [PATCH 10/26] Update left-over reference to Core.GlobalMethods (#59976) Renaming happened in f9b7d27b753020b828d6a050a341b3c2af49000c / PR #59158 by @JeffBezanson --- doc/src/devdocs/functions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/devdocs/functions.md b/doc/src/devdocs/functions.md index 0cbbb4623e9fa..0521e676d5130 100644 --- a/doc/src/devdocs/functions.md +++ b/doc/src/devdocs/functions.md @@ -7,7 +7,7 @@ This document will explain how functions, method definitions, and method tables Every function in Julia is a generic function. A generic function is conceptually a single function, but consists of many definitions, or methods. The methods of a generic function are stored in a -method table. There is one global method table (type `MethodTable`) named `Core.GlobalMethods`. Any +method table. There is one global method table (type `MethodTable`) named `Core.methodtable`. Any default operation on methods (such as calls) uses that table. ## [Function calls](@id Function-calls) From e611d7fb65a2b1e01d5f426f78b6331aabdada47 Mon Sep 17 00:00:00 2001 From: Philip Tellis Date: Wed, 29 Oct 2025 08:57:29 -0400 Subject: [PATCH 11/26] [backports-release-1.12] OpenSSL: Update to version 3.5.4 (#59710) (#59941) Co-authored-by: Erik Schnetter --- deps/checksums/openssl | 76 ++++++++++++++--------------- deps/openssl.version | 2 +- stdlib/OpenSSL_jll/Project.toml | 2 +- stdlib/OpenSSL_jll/test/runtests.jl | 2 +- 4 files changed, 41 insertions(+), 41 deletions(-) diff --git a/deps/checksums/openssl b/deps/checksums/openssl index cca21ccd8c5a5..1dee209bb0c5f 100644 --- a/deps/checksums/openssl +++ b/deps/checksums/openssl @@ -1,38 +1,38 @@ -OpenSSL.v3.5.1+0.aarch64-apple-darwin.tar.gz/md5/b19522093c25c50685002ad48933a835 -OpenSSL.v3.5.1+0.aarch64-apple-darwin.tar.gz/sha512/afa6363f8396deac5131f5efbe92d5b60f4d6982d279d63b5847e80ac4717d89e32edcc9bc7a5fbaab95e03908a6e3e9b386a3931effb0a7163b947b38ed2cd5 -OpenSSL.v3.5.1+0.aarch64-linux-gnu.tar.gz/md5/60af2cb22b7d5f4fddd94bd196f86ad2 -OpenSSL.v3.5.1+0.aarch64-linux-gnu.tar.gz/sha512/3d384f5da4be3af848b47f48f2438dbda8cdb228b8569d01bd4fbd6feea9f494ecafd3cab6e7b0bbed596746aa2614826971133a2b6dea02836c0904ce870760 -OpenSSL.v3.5.1+0.aarch64-linux-musl.tar.gz/md5/5f96641ec5256a547e03cd6028892a50 -OpenSSL.v3.5.1+0.aarch64-linux-musl.tar.gz/sha512/668c08f2a08f9d65b2e5c1ca4db8f74932995d0fa97c4737a2d9cedb3548482f85fddd478fad37325e2d48f76259fd8f7e003d31fc2a9ecfdb88c4748f90e1d6 -OpenSSL.v3.5.1+0.aarch64-unknown-freebsd.tar.gz/md5/377bd17ae448f4394b3100b290602f35 -OpenSSL.v3.5.1+0.aarch64-unknown-freebsd.tar.gz/sha512/f989a15062b47f059086d4dc8fd53af00717ca622ef8c475a11f6e62a29d8ec4a80159d93a683e8729da66c4bda4c46b7647754dc996ed2ff5635cbbdaf702aa -OpenSSL.v3.5.1+0.armv6l-linux-gnueabihf.tar.gz/md5/83bcc0b545bea092a0a5de9e64cbcbf1 -OpenSSL.v3.5.1+0.armv6l-linux-gnueabihf.tar.gz/sha512/c589119945ff6c1341bc229a2e61096c630288f7d483ea9538202915f8ee1a9e26cd53efc479f1e92a83a75aa6c7453ceba446832678ffed340a4bec13fefbfc -OpenSSL.v3.5.1+0.armv6l-linux-musleabihf.tar.gz/md5/3b2e34e506960259dbb40a36fed26ffe -OpenSSL.v3.5.1+0.armv6l-linux-musleabihf.tar.gz/sha512/735f22fe1202818f64f369471292bb8fdf8cf1f3395d01e70ddf8f65efc5430aec54a63fe950e52625f2c8a5dbd59ed0175f088144af8d99c7db1967ed0e5aeb -OpenSSL.v3.5.1+0.armv7l-linux-gnueabihf.tar.gz/md5/aedb37bde1b3fad428987745dc1dd095 -OpenSSL.v3.5.1+0.armv7l-linux-gnueabihf.tar.gz/sha512/1919823df3c0de01c59a5f9cf42b912a1d56fe7de903c4e7cbcd54603760783a99fe34cd1c108e954d5fe41502c1791b803d67742d70abae64d316c3656b7280 -OpenSSL.v3.5.1+0.armv7l-linux-musleabihf.tar.gz/md5/573a752ca28fd62644208a4c0b32eaa4 -OpenSSL.v3.5.1+0.armv7l-linux-musleabihf.tar.gz/sha512/3385b170973a9e50919981e66e591077479ae7561368941f018aca6f42c86b3d01aa1d9896d4d5f6deb69760fa42f535f6aaa076b75a15f207328ba6f0a32660 -OpenSSL.v3.5.1+0.i686-linux-gnu.tar.gz/md5/fcdb2ab108900c412abf154a6cbd46e7 -OpenSSL.v3.5.1+0.i686-linux-gnu.tar.gz/sha512/b558e6c23809f702a7388dba7031a9df577e1a2eb1ca86b7cf0dcd9809973dff1c9b56d4a09c315b17dcc9860e7f89604513a2d022117d9145f2bc81befa094b -OpenSSL.v3.5.1+0.i686-linux-musl.tar.gz/md5/0192e44a52d9518d712db58019ace62c -OpenSSL.v3.5.1+0.i686-linux-musl.tar.gz/sha512/fe9740850e6eb32eb539d16303b39d9ad1d3e8cc2e5a742304013890a0e1e8af93e131a5393c3c817b5723680425947d6954455dd715cc83589fd097c517b5c2 -OpenSSL.v3.5.1+0.i686-w64-mingw32.tar.gz/md5/51b5546301f8c474bcc9c97b625df2c1 -OpenSSL.v3.5.1+0.i686-w64-mingw32.tar.gz/sha512/47874ce005e6944f3a4d482f3edf44bcaa3724338230d68fff22c484c0620fe857a11bdc515ef9154522a2884f64bacadfd1fddb1430a45c7722a6a4799107f6 -OpenSSL.v3.5.1+0.powerpc64le-linux-gnu.tar.gz/md5/1aeaa0660006b4b8c13cd1cb45b2acfc -OpenSSL.v3.5.1+0.powerpc64le-linux-gnu.tar.gz/sha512/dff025feb0d1ae96a7c33f1beff5e6f76d5a85833314470f59d75bf791e90363145ae79f3ed82c5c40e36416b75fa9deb5807911c8133fe11f31b4705737f0bc -OpenSSL.v3.5.1+0.riscv64-linux-gnu.tar.gz/md5/160065eb12650c504fd40a25e4bae2ba -OpenSSL.v3.5.1+0.riscv64-linux-gnu.tar.gz/sha512/68951cf98c4eb778d372e239d14497405e6161461a623135a5254c3fd65bc3a12fe3df1ecce88909cb05dc29104b5b18caafea115799c5abf2505afe75be3207 -OpenSSL.v3.5.1+0.x86_64-apple-darwin.tar.gz/md5/7e5903d1d051de70a93a9b801ce274db -OpenSSL.v3.5.1+0.x86_64-apple-darwin.tar.gz/sha512/729b33cc208b8646394bcf0029a276ad41cf2e9d44737dbc1e15dca794cc55a52e2b782b0c72ef57b5580b84a93b25133788424f1b16ef2b784d409bca598150 -OpenSSL.v3.5.1+0.x86_64-linux-gnu.tar.gz/md5/9cee745524f41dc21af2f460ac2f1293 -OpenSSL.v3.5.1+0.x86_64-linux-gnu.tar.gz/sha512/6949c7f19b7919073542af903019ec0d8fd5172450141a3f69f0c325f0c5cc19618f1959b96380719538c5a1a5a388165a0db8e6eab041d0a5874a627820212b -OpenSSL.v3.5.1+0.x86_64-linux-musl.tar.gz/md5/e55565c84e5cff597ea490e02c559d1a -OpenSSL.v3.5.1+0.x86_64-linux-musl.tar.gz/sha512/c27930401c72b6be94ba7717f7b3be0025b09138e146f3d2a761e805308ee51f4ca871459941448e102f64b0e3c1aa479f39ee77f3234321890fa7105418ed44 -OpenSSL.v3.5.1+0.x86_64-unknown-freebsd.tar.gz/md5/276d97e2d573977727ca8d2113335fac -OpenSSL.v3.5.1+0.x86_64-unknown-freebsd.tar.gz/sha512/71f72a82c590542928660f004f38f84ea335b303e7da53578d712994fff9e84a3b69fc836c08d03dd8310d17c9edc63e5f6975e6d26e67124124763633ab1b59 -OpenSSL.v3.5.1+0.x86_64-w64-mingw32.tar.gz/md5/cebdbbf8a8a301e332d75c46dcdb1af0 -OpenSSL.v3.5.1+0.x86_64-w64-mingw32.tar.gz/sha512/0e141d7317ac8f5c43d1ecc9d161b00345f99145af785d7554f750b5787ea69969f785e7a1305059137271d26450835c25dd126bf9e5aef2cdf7dcbbdebb6911 -openssl-3.5.1.tar.gz/md5/562a4e8d14ee5272f677a754b9c1ca5c -openssl-3.5.1.tar.gz/sha512/0fa152ae59ab5ea066319de039dfb1d24cbb247172d7512feb5dd920db3740f219d76b0195ea562f84fe5eae36c23772302eddfbb3509df13761452b4dafb9d3 +OpenSSL.v3.5.4+0.aarch64-apple-darwin.tar.gz/md5/d3a74c8ea6a26b89b250ea72d4df09f4 +OpenSSL.v3.5.4+0.aarch64-apple-darwin.tar.gz/sha512/6586b7c070409be5a4a8c2b436f78d43d5e007698721478919b10247b8ba72fe591f22432b366e21f63d1d9e0f59e0bf708726b13e8e76cf46b83dfd9c6290e2 +OpenSSL.v3.5.4+0.aarch64-linux-gnu.tar.gz/md5/a63078615f652e9c8802ee4f157ce670 +OpenSSL.v3.5.4+0.aarch64-linux-gnu.tar.gz/sha512/bfb1810bf33e8428d32f9f454cb48c1ec1aff1b8cadb92e7042f053791e27b49b28676d7843b13c1837e44916553b34fcc2f6dc891b7a9ef691a249de384a17e +OpenSSL.v3.5.4+0.aarch64-linux-musl.tar.gz/md5/f5cdb3a716692ca6f3ab704eb54d2af3 +OpenSSL.v3.5.4+0.aarch64-linux-musl.tar.gz/sha512/1734abca858d554d4e8b46d494e3a41e99726b53ff9534dd85ea47e3c576c5da354940245b73d1d31fb6cc14ca50dd331385da8b7328a97d19d0592414c36835 +OpenSSL.v3.5.4+0.aarch64-unknown-freebsd.tar.gz/md5/812279eb91f01e35a39d77f77ab54a1d +OpenSSL.v3.5.4+0.aarch64-unknown-freebsd.tar.gz/sha512/17a1e1fa314c8c766e957b2adbb6bbe3bcd20e81df5a5d6280f8013821774cd447076757bb9eb436a39e31ba4921ccea25f02c4adf3784945a740fbe4192a1f0 +OpenSSL.v3.5.4+0.armv6l-linux-gnueabihf.tar.gz/md5/07bfc3d49e4085e3bf286bf0f89c9771 +OpenSSL.v3.5.4+0.armv6l-linux-gnueabihf.tar.gz/sha512/1d1e93735f208f7704259ddb1bc791d8e79f57d962b8e3ea4888aee1cb42c5726800310137a2d0a3b26e78cc7f419e3410894716932cceae549acd4aaa632ac5 +OpenSSL.v3.5.4+0.armv6l-linux-musleabihf.tar.gz/md5/0e7f6a4fc89cc7917a63f514eee960fc +OpenSSL.v3.5.4+0.armv6l-linux-musleabihf.tar.gz/sha512/2124ae606fbc3d9b60fa092241f2ca228e666758b24a043104791a7b58f8a9d1bb657918b2be67f70175ace25e336996e047ce1eb34f1ce02c95412ea657e515 +OpenSSL.v3.5.4+0.armv7l-linux-gnueabihf.tar.gz/md5/e8d8e328f953f0ed4cbc010bb760b165 +OpenSSL.v3.5.4+0.armv7l-linux-gnueabihf.tar.gz/sha512/07a80f5c370d1e61d16031bc32fd0ff2605de09afd1bcb60e4da2237e595c09336103f37d0d9d972849e6e0a4190e83f29360cbd646967f3d8aaac1bd9330e62 +OpenSSL.v3.5.4+0.armv7l-linux-musleabihf.tar.gz/md5/fb14accd074b1527dab887f6481b5e2a +OpenSSL.v3.5.4+0.armv7l-linux-musleabihf.tar.gz/sha512/366d70e849d8d7e809b8d204b8446c8b190dd87d34ac09dc5c5631dbaa6b470dc554f908e90b4346947a93d570a127d3acb4e48a6372ce0c7d8fdb52d9591e2a +OpenSSL.v3.5.4+0.i686-linux-gnu.tar.gz/md5/f8debcbb53d95da043b1105b8299202e +OpenSSL.v3.5.4+0.i686-linux-gnu.tar.gz/sha512/4c619a87cb37a2d67d7940a50b1b7b2aec2d7bdfddbadd7310a52058494026bcbd1459c09dc1e9db7f2969093070a1110e0c592c671cdc1a084737e8edb106a1 +OpenSSL.v3.5.4+0.i686-linux-musl.tar.gz/md5/ee85ed549ebd79c4fe0a02cc6f408cfc +OpenSSL.v3.5.4+0.i686-linux-musl.tar.gz/sha512/e89e76e2c375fbabbf7d9195e3212f77fd929ff4089eab2662988033a2232eaf842783079d254b01e80e82aa8bea7507ea6ffacb74c029a8c107255ff9d3502e +OpenSSL.v3.5.4+0.i686-w64-mingw32.tar.gz/md5/20f9847da4ea3a42de7a69441c68cb77 +OpenSSL.v3.5.4+0.i686-w64-mingw32.tar.gz/sha512/d88556fa5ce1164bc5890077a387d30dec4d454d1e35b743cdc562e594f872c01270fa447ced0fe8b0a6a6d1589e117576510b8d8d8abab9f0b85cc2b12232c0 +OpenSSL.v3.5.4+0.powerpc64le-linux-gnu.tar.gz/md5/cd3a9bfcc9c2ac35c363cd629303e025 +OpenSSL.v3.5.4+0.powerpc64le-linux-gnu.tar.gz/sha512/107f7a3c640c4105ed66a002020b4aa397cbd31af4305f485676b90d0a8c53ba9aae4721dfeb3406b109413e8313cc2a1fadba5786780c7af0ee5bc14e01dec0 +OpenSSL.v3.5.4+0.riscv64-linux-gnu.tar.gz/md5/4d1eb41a393b36a1ca39d52113991861 +OpenSSL.v3.5.4+0.riscv64-linux-gnu.tar.gz/sha512/ad896b5623d746b09866d378b9f05f515aa34d5f874f57fc76329df8630bced8d6d7576dd5ae79248347bbca98b035b941773692ba27a1c899fd5500e01b6432 +OpenSSL.v3.5.4+0.x86_64-apple-darwin.tar.gz/md5/37b748664516d632886aab07cabaeb96 +OpenSSL.v3.5.4+0.x86_64-apple-darwin.tar.gz/sha512/49f24b13906cf4538d56b562f26c9641ed5d64e05cc176dc4c461ff9e238828c216e0e396527c7403fd8672b313bc59839a767ab530222878191b1dc01f9c39d +OpenSSL.v3.5.4+0.x86_64-linux-gnu.tar.gz/md5/c3cf2b5c53332edd6755beabde9ec7ca +OpenSSL.v3.5.4+0.x86_64-linux-gnu.tar.gz/sha512/dab8ff0ca15785d8023a8e3b770d72761191fdf1f1f3525e4ddf10104c6a8905e089f6e888a24bf6717bc944f1ba498e4af68724d8af32393c147c59de309fbc +OpenSSL.v3.5.4+0.x86_64-linux-musl.tar.gz/md5/fa61e1bd29a34b58971224715929fe21 +OpenSSL.v3.5.4+0.x86_64-linux-musl.tar.gz/sha512/22d00cae28d3e63fac59518423cfbb76eb82bc18b72f42c89b60b37e346b19affabe01feb8c0b785b3cb88110356efb576ffe74ff5af00fc9c9f1669711e3faf +OpenSSL.v3.5.4+0.x86_64-unknown-freebsd.tar.gz/md5/ac3b835042008fe1229d5822b89a0ff2 +OpenSSL.v3.5.4+0.x86_64-unknown-freebsd.tar.gz/sha512/bf70b67488571b53bca8bb695da5206f401c759cb290b8007b0175bb262cff22d2145fc8e4690b7a1b819593a5de3a94beed6484fbbbf5a5ae03161ed2a866e9 +OpenSSL.v3.5.4+0.x86_64-w64-mingw32.tar.gz/md5/0ca1bc12a96a1b80217b780e4eda1d10 +OpenSSL.v3.5.4+0.x86_64-w64-mingw32.tar.gz/sha512/b9b98e9b1b1942b1141cb21166548a81cbd336c62ec335905fcf2aad536b16d90d68d160714a376dc70159e17063588893276b345d67833ccf5f28d2ccd32551 +openssl-3.5.4.tar.gz/md5/570a7ab371147b6ba72c6d0fed93131f +openssl-3.5.4.tar.gz/sha512/365aca6f2e59b5c8261fba683425d177874cf6024b0d216ca309112b879c1f4e8da78617e23c3c95d0b4a26b83ecd0d8348038b999d30e597d19f466c4761227 diff --git a/deps/openssl.version b/deps/openssl.version index 2313ae5ffe116..a5239226ef862 100644 --- a/deps/openssl.version +++ b/deps/openssl.version @@ -3,4 +3,4 @@ OPENSSL_JLL_NAME := OpenSSL ## source build -OPENSSL_VER := 3.5.1 +OPENSSL_VER := 3.5.4 diff --git a/stdlib/OpenSSL_jll/Project.toml b/stdlib/OpenSSL_jll/Project.toml index d11c3b25a6922..ac024da2f9a02 100644 --- a/stdlib/OpenSSL_jll/Project.toml +++ b/stdlib/OpenSSL_jll/Project.toml @@ -1,6 +1,6 @@ name = "OpenSSL_jll" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.5.1+0" +version = "3.5.4+0" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/OpenSSL_jll/test/runtests.jl b/stdlib/OpenSSL_jll/test/runtests.jl index 9ef99d57134e0..6c4cfc1184b87 100644 --- a/stdlib/OpenSSL_jll/test/runtests.jl +++ b/stdlib/OpenSSL_jll/test/runtests.jl @@ -6,5 +6,5 @@ using Test, Libdl, OpenSSL_jll major = ccall((:OPENSSL_version_major, libcrypto), Cuint, ()) minor = ccall((:OPENSSL_version_minor, libcrypto), Cuint, ()) patch = ccall((:OPENSSL_version_patch, libcrypto), Cuint, ()) - @test VersionNumber(major, minor, patch) == v"3.5.1" + @test VersionNumber(major, minor, patch) == v"3.5.4" end From d0161e49c93b9b90e442e7bec46d4c19940f29ab Mon Sep 17 00:00:00 2001 From: Philip Tellis Date: Sat, 1 Nov 2025 11:50:15 -0400 Subject: [PATCH 12/26] [backports-release-1.12] Bump LibCURL_jll to 8.15.0 (#59983) --- .../md5 | 1 + .../sha512 | 1 + .../md5 | 1 - .../sha512 | 1 - .../md5 | 1 + .../sha512 | 1 + deps/checksums/curl | 80 +++++++++---------- deps/curl.mk | 7 +- deps/curl.version | 2 +- doc/Manifest.toml | 2 +- stdlib/Downloads.version | 2 +- stdlib/LibCURL.version | 2 +- stdlib/LibCURL_jll/Project.toml | 2 +- stdlib/LibCURL_jll/src/LibCURL_jll.jl | 3 +- stdlib/Manifest.toml | 2 +- 15 files changed, 53 insertions(+), 55 deletions(-) create mode 100644 deps/checksums/Downloads-06916258c3ff7bd37a0ff8b525f2bb58ce1ba1b3.tar.gz/md5 create mode 100644 deps/checksums/Downloads-06916258c3ff7bd37a0ff8b525f2bb58ce1ba1b3.tar.gz/sha512 delete mode 100644 deps/checksums/Downloads-e692e77fb5427bf3c6e81514b323c39a88217eec.tar.gz/md5 delete mode 100644 deps/checksums/Downloads-e692e77fb5427bf3c6e81514b323c39a88217eec.tar.gz/sha512 create mode 100644 deps/checksums/LibCURL-038790a793203248362cf2bd8d85e42f8c56a72d.tar.gz/md5 create mode 100644 deps/checksums/LibCURL-038790a793203248362cf2bd8d85e42f8c56a72d.tar.gz/sha512 diff --git a/deps/checksums/Downloads-06916258c3ff7bd37a0ff8b525f2bb58ce1ba1b3.tar.gz/md5 b/deps/checksums/Downloads-06916258c3ff7bd37a0ff8b525f2bb58ce1ba1b3.tar.gz/md5 new file mode 100644 index 0000000000000..ed84729b00910 --- /dev/null +++ b/deps/checksums/Downloads-06916258c3ff7bd37a0ff8b525f2bb58ce1ba1b3.tar.gz/md5 @@ -0,0 +1 @@ +ac2209576b09a9c7a4da02a058e9ec87 diff --git a/deps/checksums/Downloads-06916258c3ff7bd37a0ff8b525f2bb58ce1ba1b3.tar.gz/sha512 b/deps/checksums/Downloads-06916258c3ff7bd37a0ff8b525f2bb58ce1ba1b3.tar.gz/sha512 new file mode 100644 index 0000000000000..aa81c3a943f3f --- /dev/null +++ b/deps/checksums/Downloads-06916258c3ff7bd37a0ff8b525f2bb58ce1ba1b3.tar.gz/sha512 @@ -0,0 +1 @@ +0636b4e7f17d8747408949b77470f5f7f1b4c4b618dc905e20d84d0a5ca4713834e8a4d6a10bcccf7a28982edefe03eeff11bb0aca7d8cb49cb230b7e1ddc06f diff --git a/deps/checksums/Downloads-e692e77fb5427bf3c6e81514b323c39a88217eec.tar.gz/md5 b/deps/checksums/Downloads-e692e77fb5427bf3c6e81514b323c39a88217eec.tar.gz/md5 deleted file mode 100644 index 221a62b1cf231..0000000000000 --- a/deps/checksums/Downloads-e692e77fb5427bf3c6e81514b323c39a88217eec.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -cdaea923f7fa855409e8456159251f54 diff --git a/deps/checksums/Downloads-e692e77fb5427bf3c6e81514b323c39a88217eec.tar.gz/sha512 b/deps/checksums/Downloads-e692e77fb5427bf3c6e81514b323c39a88217eec.tar.gz/sha512 deleted file mode 100644 index b537ef2e9e1f6..0000000000000 --- a/deps/checksums/Downloads-e692e77fb5427bf3c6e81514b323c39a88217eec.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -e893fbe079a433c3038b79c4c2998d1ae9abaf92ff74152820a67e97ffee6f7f052085a7108410cbb1a3bd8cc6670736b0827c8b0608cc31941251dd6500d36a diff --git a/deps/checksums/LibCURL-038790a793203248362cf2bd8d85e42f8c56a72d.tar.gz/md5 b/deps/checksums/LibCURL-038790a793203248362cf2bd8d85e42f8c56a72d.tar.gz/md5 new file mode 100644 index 0000000000000..264c8e5ea6293 --- /dev/null +++ b/deps/checksums/LibCURL-038790a793203248362cf2bd8d85e42f8c56a72d.tar.gz/md5 @@ -0,0 +1 @@ +b3a67e92f5a9d5832699623e34abf1b2 diff --git a/deps/checksums/LibCURL-038790a793203248362cf2bd8d85e42f8c56a72d.tar.gz/sha512 b/deps/checksums/LibCURL-038790a793203248362cf2bd8d85e42f8c56a72d.tar.gz/sha512 new file mode 100644 index 0000000000000..78f04bb4becb8 --- /dev/null +++ b/deps/checksums/LibCURL-038790a793203248362cf2bd8d85e42f8c56a72d.tar.gz/sha512 @@ -0,0 +1 @@ +d558321aa6099ddb61cc402f85d3ea7f0d5c875aee1371f10e6b50c53d8b578045a132a3fd361b96fabf44658b364496d0377371d1ec232962fc8450eb242217 diff --git a/deps/checksums/curl b/deps/checksums/curl index b0a223f42c5e2..9ce2d704e6637 100644 --- a/deps/checksums/curl +++ b/deps/checksums/curl @@ -1,40 +1,40 @@ -LibCURL-a65b64f6eabc932f63c2c0a4a5fb5d75f3e688d0.tar.gz/md5/e8c53aa3fb963c80921787d5d565eb2c -LibCURL-a65b64f6eabc932f63c2c0a4a5fb5d75f3e688d0.tar.gz/sha512/8e442ea834299df9c02acb87226c121395ad8e550025ac5ee1103df09c6ff43817e9e48dd1bcbc92c80331ef3ddff531962430269115179acbec2bab2de5b011 -LibCURL.v8.11.1+1.aarch64-apple-darwin.tar.gz/md5/890c65523227b4352344b78575cd4c5c -LibCURL.v8.11.1+1.aarch64-apple-darwin.tar.gz/sha512/fae539243adc805d8da0ac88cf67901ff1f12ae94e40293dc6a7e17072f8c0cb9f0a54b7e324bd52ad9361b764c8bc88728ff4495e0cd6dbf1eb93d2bae8994b -LibCURL.v8.11.1+1.aarch64-linux-gnu.tar.gz/md5/bf937fb6a8ea8a82b732821f3652641c -LibCURL.v8.11.1+1.aarch64-linux-gnu.tar.gz/sha512/230c9983e4c7810d3eee1a5eff7e8b8c44f76db7af8a8312a608609f87bc8a56031c337c06af00a536c10ed33725200aa137c3153ef6dcf6575cc7c350b3b461 -LibCURL.v8.11.1+1.aarch64-linux-musl.tar.gz/md5/b40ea4266dc48a1fbfa016fb8d0ca987 -LibCURL.v8.11.1+1.aarch64-linux-musl.tar.gz/sha512/032d6208ebe226da90d0ef1f1f2d20580fd4e37db68146d1e836a9be4c1fc5f7890f1b808337ca41f46a07a833b55f06f09a4a164f26d0824a649ea40b30233f -LibCURL.v8.11.1+1.aarch64-unknown-freebsd.tar.gz/md5/69097390c0bd3a32969e47608f24363f -LibCURL.v8.11.1+1.aarch64-unknown-freebsd.tar.gz/sha512/391019370a9c122e6425a3097edafe0980dc2077be015919e7914aa781ba10060e3af9ee1fa881d8536d0ca57783d0616a1b5735e2ae7e06ea4edfaee2994120 -LibCURL.v8.11.1+1.armv6l-linux-gnueabihf.tar.gz/md5/bc4ab567f8cc4cd88b2239123d103113 -LibCURL.v8.11.1+1.armv6l-linux-gnueabihf.tar.gz/sha512/0ecbf2380852744815a8f7e99e7c276c342f847907eb7b0d256905ba854ee59d37f83456fcdc8931dc39dbaed58f0949205b80d23e43e2b59195d18a539d4047 -LibCURL.v8.11.1+1.armv6l-linux-musleabihf.tar.gz/md5/18c896c544f02f7f2b976c03fc3772f1 -LibCURL.v8.11.1+1.armv6l-linux-musleabihf.tar.gz/sha512/e9a73670f1c3638c3a886055b32df5baadc41aad9829cfa0d4e05acd46d2d012464114ed6fd1e3d182a4adc266c1da97e9a683c7ba69e93f61592acf8567e336 -LibCURL.v8.11.1+1.armv7l-linux-gnueabihf.tar.gz/md5/4672f9d67ff357a2eda6f77d8f470659 -LibCURL.v8.11.1+1.armv7l-linux-gnueabihf.tar.gz/sha512/a2f2dc8d8e10c652a324a4da3d2337d2886626e1c417c68efbcfcefa443cb3ec81b52f2a212c4a7dbd6a5ae920e54d1bfdc02b68c2607d09784206cd4d11ffb0 -LibCURL.v8.11.1+1.armv7l-linux-musleabihf.tar.gz/md5/49d297563fd44a03f88f67bb7ea2a0be -LibCURL.v8.11.1+1.armv7l-linux-musleabihf.tar.gz/sha512/5cc3902571f04c96be38de53b5320876a3e7e54934090ff2a80304a7ca59a361ed9f3f328c3e3c06ef33550d221a8243e924b7ea49792753f839c12aceb1e979 -LibCURL.v8.11.1+1.i686-linux-gnu.tar.gz/md5/f05a86574278ecf7802edeffe1fee9ac -LibCURL.v8.11.1+1.i686-linux-gnu.tar.gz/sha512/e493b5836022a6280f21237fef423034a9701097cb271683e81d4b4e487a6289080d00016fbaaa8bddeb004d44626a0076fa7832835fe7f58b60af6798223f89 -LibCURL.v8.11.1+1.i686-linux-musl.tar.gz/md5/03340412ba27f231dbf2de58a1af871f -LibCURL.v8.11.1+1.i686-linux-musl.tar.gz/sha512/541fbdd5570432832d3835038b41df73aac8e0e7bc03f41c696dc12a57bd4784b4da1f485264fd1fba263fe9e520a7dbb0ef9a365275efc30dfc361ceab252f3 -LibCURL.v8.11.1+1.i686-w64-mingw32.tar.gz/md5/5f2071282d572bbb53dfcfb16d0d9608 -LibCURL.v8.11.1+1.i686-w64-mingw32.tar.gz/sha512/e4d6fbd518055e8f2a71b89ee9a33728e6e076729adeafc358fc40f47d032b739363c9b57df5bfb3c43244f7b833afc76ae255e70bcf43b81262d74278532a22 -LibCURL.v8.11.1+1.powerpc64le-linux-gnu.tar.gz/md5/806ee9b51c2bffd798c1682867a7a2a0 -LibCURL.v8.11.1+1.powerpc64le-linux-gnu.tar.gz/sha512/20ae5f47ad24e1fba8ecdc3a81aa81acb5c3c224041f12f8be48f9a0abd5ce44117b096a59fc8f861b6f8c6ad9e4177e3a3ba3e2dbecb2078d4bab19bdd4d239 -LibCURL.v8.11.1+1.riscv64-linux-gnu.tar.gz/md5/2e029213e81955f39423733608c4ffa8 -LibCURL.v8.11.1+1.riscv64-linux-gnu.tar.gz/sha512/a634ae9de047bd8a93cbfaa3cd5375d895baf9917b5062653f15472527836b51eeb15006b5e1888251e3f09d8177b489ea9975580fe6d95bc759708fc9654fd1 -LibCURL.v8.11.1+1.x86_64-apple-darwin.tar.gz/md5/56cf7cf4ea22123e516843a5751eea17 -LibCURL.v8.11.1+1.x86_64-apple-darwin.tar.gz/sha512/5ae5569ade42cdf0a1aa8acfda7d1dd3df30d498637f83e93bd9f8be883ae777e789b417be24df83e42ebe32fb67cc328bedac3dc231d3569f585641175ed257 -LibCURL.v8.11.1+1.x86_64-linux-gnu.tar.gz/md5/a4a733fe879693e83e1f05b6ef742ea6 -LibCURL.v8.11.1+1.x86_64-linux-gnu.tar.gz/sha512/2767f49d4a528080a5c7fcdecd8374dd5498c5b1e0d65f58d027f6a9138cd00203732e5da1806b689efbaacb1ee905a6839a09eab35f0174279af314a34fca81 -LibCURL.v8.11.1+1.x86_64-linux-musl.tar.gz/md5/837a64073c3d8fd115cadf4af1b19235 -LibCURL.v8.11.1+1.x86_64-linux-musl.tar.gz/sha512/cf0559b65c213889ab0bad388ca6dc1699891e5cd2c5c34faf80cd60404b5f363eaa624d425fd463407d35c5cfd814c1a9964a2b3b638fa7e7a0a2919980ba8c -LibCURL.v8.11.1+1.x86_64-unknown-freebsd.tar.gz/md5/22726eb8caed9b279e6cddbfa328f2c6 -LibCURL.v8.11.1+1.x86_64-unknown-freebsd.tar.gz/sha512/b9e304575bb0e3241f938c545a91cc5b722e8dfc53d6ad270ea75b8fb05655ae8a03e5f844f5b8a75a84133d0883369bc6c46f0805be37ee840f2f1168994c37 -LibCURL.v8.11.1+1.x86_64-w64-mingw32.tar.gz/md5/aa5ce49a63d216776ef9fc11b6b3b012 -LibCURL.v8.11.1+1.x86_64-w64-mingw32.tar.gz/sha512/4e7fe5ff82ca9bafbaca476aa51273ee9590058350c889a6dd8a0eecaa024d19f0a26dd7078808d08dfdf2f5751daec51e88dc88253a4638274edb63ae93fd3c -curl-8.11.1.tar.bz2/md5/31dc730e6fff880a6ba92bdacead9d38 -curl-8.11.1.tar.bz2/sha512/30041e15b919684c46b6b3853950cba22e6fbc21157b1f682097277d2b20066ba71e51eb5d2c34bbd81b8bf4c2791255d6492ee21d49f606d71f66e211a6adde +LibCURL-038790a793203248362cf2bd8d85e42f8c56a72d.tar.gz/md5/b3a67e92f5a9d5832699623e34abf1b2 +LibCURL-038790a793203248362cf2bd8d85e42f8c56a72d.tar.gz/sha512/d558321aa6099ddb61cc402f85d3ea7f0d5c875aee1371f10e6b50c53d8b578045a132a3fd361b96fabf44658b364496d0377371d1ec232962fc8450eb242217 +LibCURL.v8.15.0+0.aarch64-apple-darwin.tar.gz/md5/47db9bf4549442b466ae465b48544f46 +LibCURL.v8.15.0+0.aarch64-apple-darwin.tar.gz/sha512/a4819a6a94958cfeb0b035b87cfe6cb40ac3c0f015b7b52b5314ec3f8a129a9aa96ccae04fe3774318bc1a9316299c3fbe1a47b2e2e5ce37a38d9a8e01d6f5e5 +LibCURL.v8.15.0+0.aarch64-linux-gnu.tar.gz/md5/7e04291557b99a53f8b8fca1235862b3 +LibCURL.v8.15.0+0.aarch64-linux-gnu.tar.gz/sha512/399b9a538dc54647b5ca1ad182e5c1c4da8ba0f3217fe8d01737bf0a689a67ed0be185ebbd98d60b2739900df664feae6cedb90643c2e53dc7c12ec5a5a8b57d +LibCURL.v8.15.0+0.aarch64-linux-musl.tar.gz/md5/63f3e0171c8f56592a3c810136154ccd +LibCURL.v8.15.0+0.aarch64-linux-musl.tar.gz/sha512/03b67d73bd41597c6080155e5a0eb58d8cb559d1325c2954aa92c54905dd6f425ba46dd16c5411b16ac683c041ed685893954c4ab431d794bd3f929c11de4ae7 +LibCURL.v8.15.0+0.aarch64-unknown-freebsd.tar.gz/md5/31f249d293bbea3a0669197e6559d467 +LibCURL.v8.15.0+0.aarch64-unknown-freebsd.tar.gz/sha512/bb047b609e69926d3837dfe39d68057c55c7380427a3807ccc71e631530d75f64e9edd0a4ef5ab30b44e3d763d2798e9f8c4727fb565674de228cf95ebccd922 +LibCURL.v8.15.0+0.armv6l-linux-gnueabihf.tar.gz/md5/462094d229be838090eb6d3353bb3907 +LibCURL.v8.15.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/3bac7d0b0a065e5793d466823eb2a62d8256d41291c9bf6926bafc434eaec51a72ca289b2803b0b6fc19c4d0e6776205e55b235701496e84d56abdd4da7be8a2 +LibCURL.v8.15.0+0.armv6l-linux-musleabihf.tar.gz/md5/3f95a180a1fe427b642f05814029f9d0 +LibCURL.v8.15.0+0.armv6l-linux-musleabihf.tar.gz/sha512/8a4483486dd355d61f0c6f60d0a1b38d9942dc126b36368adcb9499daf2a134087fb54ffbd2930adf3fe1cc39497f2f7e1f6304f48f7540cf05ebeb792d0ec1f +LibCURL.v8.15.0+0.armv7l-linux-gnueabihf.tar.gz/md5/d033e4eba1455ef17b5d86d9911d2d32 +LibCURL.v8.15.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/91e31ec413ee15574ee7e4258eebd6963d6679ea8b41c43e0f02f18521d52f5a9f258c46f8df27163019dd89a2598b7c3bcd3d2aa2bd3fd3a545de9060ef7dd1 +LibCURL.v8.15.0+0.armv7l-linux-musleabihf.tar.gz/md5/3ba22fe71ba61b92e297f64593d69387 +LibCURL.v8.15.0+0.armv7l-linux-musleabihf.tar.gz/sha512/a87bc28cac150d76c281b1baa6f79da8140bf849595dcca684fcd64299fc801c3c2dcd733b264c5a809fbba95dbe8dfac0c30ecd7c5d0bb77fee7d3da91d6816 +LibCURL.v8.15.0+0.i686-linux-gnu.tar.gz/md5/67612302faac6b9822271d01c1959d78 +LibCURL.v8.15.0+0.i686-linux-gnu.tar.gz/sha512/0f47c1f8307054eca308650f13dfee62a6eaae70f5385f460339a821cb73f97eb56ac5f685cb9e14d51e109a510508e6e0e7b6f31319e57413396473ac19a1c6 +LibCURL.v8.15.0+0.i686-linux-musl.tar.gz/md5/b14f7012d2aa9ed353387c3b357255c6 +LibCURL.v8.15.0+0.i686-linux-musl.tar.gz/sha512/177b4581c4717854420073731398dc8bb2a3370a572fd6b61e545a8e852dcb9ce76f4c26bf28e1250cece1dcbe34e53d0edd2c421c6251c117e2f3255b8945a6 +LibCURL.v8.15.0+0.i686-w64-mingw32.tar.gz/md5/2afb5832ab12120e755505916cad0e95 +LibCURL.v8.15.0+0.i686-w64-mingw32.tar.gz/sha512/4e78b5d0a8ec3e1bc7131c66fc5f041090f5fb64fe6b85224fea1e3ebcbdbf56604492a059ae311281052da7ff67c066910c6c74fb7d19b3e46b4d3cdb7163b7 +LibCURL.v8.15.0+0.powerpc64le-linux-gnu.tar.gz/md5/9d5bd94798a63a14ba945949b054195f +LibCURL.v8.15.0+0.powerpc64le-linux-gnu.tar.gz/sha512/eb4c6a555b1b6dc39a890e819803d4d5015e9ad8a841e21b484fa7442330ea0b3c2da07fcc1afb09faf115fc4818eaf2f328f92fc07400a523aca45828b71e4b +LibCURL.v8.15.0+0.riscv64-linux-gnu.tar.gz/md5/68b576c1f2086490a3d7997ce8627a32 +LibCURL.v8.15.0+0.riscv64-linux-gnu.tar.gz/sha512/e7dc57b985a6f6289d7a56a1cae49522cc623831167ec317bcdb66b578f1d967befb5d849d2c24dc49e183524a6f3b72b6c688e3500c5cb8a3f00ce748728fc6 +LibCURL.v8.15.0+0.x86_64-apple-darwin.tar.gz/md5/75320e06cd2370343684279f744b694a +LibCURL.v8.15.0+0.x86_64-apple-darwin.tar.gz/sha512/198f520a860337aaf367db970083db8c7a3742b3f37f5594e4dc86669b319cc4dc4bdfc9e875c3e4ca9f93aae24705b7c47711bac66daa629ed0d386d352b053 +LibCURL.v8.15.0+0.x86_64-linux-gnu.tar.gz/md5/3f159aada40e7f4489b179a570d36c9a +LibCURL.v8.15.0+0.x86_64-linux-gnu.tar.gz/sha512/42e646400aca6d0b233ab8feb3b32c3a9e89ca4b27fb0c82e0c52b4b008e9d9aad6640988f32397d705cc52c36ffa4379f6ba4c015ee24b6e2bd750235c8f10c +LibCURL.v8.15.0+0.x86_64-linux-musl.tar.gz/md5/d4e35eee8af7d9e640f9f2616abf1ebf +LibCURL.v8.15.0+0.x86_64-linux-musl.tar.gz/sha512/16a9ee5afe025db931e7209fbc711494ff7795a9463cf81a307e7ea74cf53b64a1c5413d388e328a372e4480255b4b1324448e17f51db141adcb2716aa00d698 +LibCURL.v8.15.0+0.x86_64-unknown-freebsd.tar.gz/md5/94e871b6200ab1768112aa3a7195f31e +LibCURL.v8.15.0+0.x86_64-unknown-freebsd.tar.gz/sha512/84474b36d21ab1d90331850b914908add5afd239f9111a48dec9b6e7ff770e9a730c7cad6d322f0cdd3567822fb157e1470716e181dd29b594a4e471b8fd6c54 +LibCURL.v8.15.0+0.x86_64-w64-mingw32.tar.gz/md5/99c54cbc43fc719281b48bb3137e9364 +LibCURL.v8.15.0+0.x86_64-w64-mingw32.tar.gz/sha512/d817951ec0ba4513e50c2bf2159ccefb6b38fa74478b84b8f006b6a47897c610fe6c9f1c9db0533595c243f8b84d40456aa9fd1aa3afb22ea272dced5b6e237c +curl-8.15.0.tar.bz2/md5/8b475c3eec74c5e78a9fb45a902dae76 +curl-8.15.0.tar.bz2/sha512/797fc9af599de88ceb36c8bc284d3f1a2a1ca0703c7bdd377d67ce6da4317ca673ba4a946c61f3bd5a66febee37b5aa88826f26fbbb398f5e20630769a0de033 diff --git a/deps/curl.mk b/deps/curl.mk index 6232d56e5e333..5de8c1f766072 100644 --- a/deps/curl.mk +++ b/deps/curl.mk @@ -31,7 +31,7 @@ $(SRCCACHE)/curl-$(CURL_VER).tar.bz2: | $(SRCCACHE) $(SRCCACHE)/curl-$(CURL_VER)/source-extracted: $(SRCCACHE)/curl-$(CURL_VER).tar.bz2 $(JLCHECKSUM) $< - cd $(dir $<) && $(TAR) jxf $(notdir $<) + cd $(dir $<) && $(TAR) -jxf $(notdir $<) echo 1 > $@ checksum-curl: $(SRCCACHE)/curl-$(CURL_VER).tar.bz2 @@ -54,12 +54,9 @@ CURL_CONFIGURE_FLAGS += \ # We use different TLS libraries on different platforms. # On Windows, we use schannel -# On MacOS, we use SecureTransport -# On Linux, we use OpenSSL +# On other platforms, we use OpenSSL ifeq ($(OS), WINNT) CURL_TLS_CONFIGURE_FLAGS := --with-schannel -else ifeq ($(OS), Darwin) -CURL_TLS_CONFIGURE_FLAGS := --with-secure-transport else CURL_TLS_CONFIGURE_FLAGS := --with-openssl endif diff --git a/deps/curl.version b/deps/curl.version index fbbb55ffb17ea..ecd8089d9fd1f 100644 --- a/deps/curl.version +++ b/deps/curl.version @@ -3,4 +3,4 @@ CURL_JLL_NAME := LibCURL ## source build -CURL_VER := 8.11.1 +CURL_VER := 8.15.0 diff --git a/doc/Manifest.toml b/doc/Manifest.toml index 05dd8edebe5a6..3cdd97bdcb4f1 100644 --- a/doc/Manifest.toml +++ b/doc/Manifest.toml @@ -117,7 +117,7 @@ version = "0.6.4" [[deps.LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.11.1+1" +version = "8.15.0+0" [[deps.LibGit2]] deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] diff --git a/stdlib/Downloads.version b/stdlib/Downloads.version index 40004d8337091..4829d63b31668 100644 --- a/stdlib/Downloads.version +++ b/stdlib/Downloads.version @@ -1,4 +1,4 @@ DOWNLOADS_BRANCH = master -DOWNLOADS_SHA1 = e692e77fb5427bf3c6e81514b323c39a88217eec +DOWNLOADS_SHA1 = 06916258c3ff7bd37a0ff8b525f2bb58ce1ba1b3 DOWNLOADS_GIT_URL := https://github.com/JuliaLang/Downloads.jl.git DOWNLOADS_TAR_URL = https://api.github.com/repos/JuliaLang/Downloads.jl/tarball/$1 diff --git a/stdlib/LibCURL.version b/stdlib/LibCURL.version index 216ab4e7aca22..9bf12e7a8287b 100644 --- a/stdlib/LibCURL.version +++ b/stdlib/LibCURL.version @@ -1,4 +1,4 @@ LIBCURL_BRANCH = master -LIBCURL_SHA1 = a65b64f6eabc932f63c2c0a4a5fb5d75f3e688d0 +LIBCURL_SHA1 = 038790a793203248362cf2bd8d85e42f8c56a72d LIBCURL_GIT_URL := https://github.com/JuliaWeb/LibCURL.jl.git LIBCURL_TAR_URL = https://api.github.com/repos/JuliaWeb/LibCURL.jl/tarball/$1 diff --git a/stdlib/LibCURL_jll/Project.toml b/stdlib/LibCURL_jll/Project.toml index 61d44beac14e1..5f48426bf6fa3 100644 --- a/stdlib/LibCURL_jll/Project.toml +++ b/stdlib/LibCURL_jll/Project.toml @@ -1,6 +1,6 @@ name = "LibCURL_jll" uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.11.1+1" +version = "8.15.0+0" [deps] LibSSH2_jll = "29816b5a-b9ab-546f-933c-edad1886dfa8" diff --git a/stdlib/LibCURL_jll/src/LibCURL_jll.jl b/stdlib/LibCURL_jll/src/LibCURL_jll.jl index 5c1c2aa14b23a..21cb7335785ae 100644 --- a/stdlib/LibCURL_jll/src/LibCURL_jll.jl +++ b/stdlib/LibCURL_jll/src/LibCURL_jll.jl @@ -4,8 +4,7 @@ baremodule LibCURL_jll using Base, Libdl, nghttp2_jll, LibSSH2_jll, Zlib_jll -if !(Sys.iswindows() || Sys.isapple()) - # On Windows and macOS we use system SSL/crypto libraries +if !Sys.iswindows() using OpenSSL_jll end diff --git a/stdlib/Manifest.toml b/stdlib/Manifest.toml index 8d6093f744f14..c0f4e7c929713 100644 --- a/stdlib/Manifest.toml +++ b/stdlib/Manifest.toml @@ -93,7 +93,7 @@ version = "0.6.4" [[deps.LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.11.1+1" +version = "8.15.0+0" [[deps.LibGit2]] deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] From f9733bdebd04878cfc8cf896c07718b345b15230 Mon Sep 17 00:00:00 2001 From: Jakob Nybo Nissen Date: Mon, 20 Oct 2025 13:09:45 +0200 Subject: [PATCH 13/26] Fix: waitall can throw when all tasks are done (#59905) Closes #59901 (cherry picked from commit a1adecb83e8cfa3b317a85943ab2609dd0486046) --- base/task.jl | 18 ++++++++++++------ test/threads_exec.jl | 11 +++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/base/task.jl b/base/task.jl index 951e980ee903c..999da9b493d08 100644 --- a/base/task.jl +++ b/base/task.jl @@ -435,19 +435,21 @@ function _wait_multiple(waiting_tasks, throwexc=false, all=false, failfast=false done_mask[i] = true exception |= istaskfailed(t) nremaining -= 1 - else - done_mask[i] = false end end - if nremaining == 0 - return tasks, Task[] - elseif any(done_mask) && (!all || (failfast && exception)) + # We can return early all tasks are done, or if any is done and we only + # needed to wait for one, or if any task failed and we have failfast + if nremaining == 0 || (any(done_mask) && (!all || (failfast && exception))) if throwexc && (!all || failfast) && exception exceptions = [TaskFailedException(t) for t in tasks[done_mask] if istaskfailed(t)] throw(CompositeException(exceptions)) else - return tasks[done_mask], tasks[.~done_mask] + if nremaining == 0 + return tasks, Task[] + else + return tasks[done_mask], tasks[.~done_mask] + end end end @@ -489,6 +491,10 @@ function _wait_multiple(waiting_tasks, throwexc=false, all=false, failfast=false close(chan) if nremaining == 0 + if throwexc && exception + exceptions = [TaskFailedException(t) for t in tasks if istaskfailed(t)] + throw(CompositeException(exceptions)) + end return tasks, Task[] else remaining_mask = .~done_mask diff --git a/test/threads_exec.jl b/test/threads_exec.jl index 629f474f53a38..6942a5fb1335b 100644 --- a/test/threads_exec.jl +++ b/test/threads_exec.jl @@ -1362,6 +1362,17 @@ end @test !istaskdone(tasks[3]) teardown(tasks, event) + + @test_throws CompositeException begin + waitall(Threads.@spawn(div(1, i)) for i = 0:1) + end + + tasks = [Threads.@spawn(div(1, i)) for i = 0:1] + wait(tasks[1]; throw=false) + wait(tasks[2]; throw=false) + @test_throws CompositeException begin + waitall(Threads.@spawn(div(1, i)) for i = 0:1) + end end end end From edf9fa737b4634a29cec84764a7d26a3cefc392c Mon Sep 17 00:00:00 2001 From: Lilith Orion Hafner Date: Fri, 24 Oct 2025 14:06:17 -0500 Subject: [PATCH 14/26] Names docstring: compat & implicit using (#59937) Followup of https://github.com/JuliaLang/julia/pull/54609 (cherry picked from commit c2f42a6b6147eeb1c68a745210e22409975da4af) --- base/runtime_internals.jl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/base/runtime_internals.jl b/base/runtime_internals.jl index cbe0a120babef..69520ae47f745 100644 --- a/base/runtime_internals.jl +++ b/base/runtime_internals.jl @@ -95,7 +95,7 @@ If `all` is true, then the list also includes non-public names defined in the mo deprecated names, and compiler-generated names. If `imported` is true, then names explicitly imported from other modules are also included. -If `usings` is true, then names explicitly imported via `using` are also included. +If `usings` is true, then names explicitly or implicitly imported via `using` are also included. Names are returned in sorted order. As a special case, all names defined in `Main` are considered \"public\", @@ -110,6 +110,9 @@ since it is not idiomatic to explicitly mark names from `Main` as public. `names` may return duplicate names. The duplication happens, e.g. if an `import`ed name conflicts with an already existing identifier. +!!! compat "Julia 1.12" + The `usings` argument requires Julia 1.12 or later. + See also: [`Base.isexported`](@ref), [`Base.ispublic`](@ref), [`Base.@locals`](@ref), [`@__MODULE__`](@ref). """ names(m::Module; kwargs...) = sort!(unsorted_names(m; kwargs...)) From eda6a12b65d4023c1c179504e2e041cdc912f2a9 Mon Sep 17 00:00:00 2001 From: Haakon Ludvig Langeland Ervik <45243236+haakon-e@users.noreply.github.com> Date: Fri, 31 Oct 2025 04:22:06 -0700 Subject: [PATCH 15/26] fix: TOML parsing of fractional seconds (#59999) fix a bug in which parsing the digits after the decimal point of a (date-)time like "00:00:00.12" were interpreted as "12 milliseconds" instead of "0.12 seconds". Now, the fractional part is correctly parsed as a fraction of a second, then correctly converted to milliseconds. As before, only the first three digits after the decimal point are considered. Closes #59997 --- With a local build of this PR, the example from the above issue now evaluates to: ```julia julia> t2 = TOML.parse("""time = 00:00:00.2""") Dict{String, Any} with 1 entry: "time" => 00:00:00.2 julia> millisecond(t2["time"]) 200 ``` (cherry picked from commit 906d64e6d3b5dd128fd43f59bec992d053d50d2f) --- base/toml_parser.jl | 9 ++++++--- stdlib/TOML/test/values.jl | 9 ++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/base/toml_parser.jl b/base/toml_parser.jl index 4d07cfed05d8a..378322e8cba95 100644 --- a/base/toml_parser.jl +++ b/base/toml_parser.jl @@ -1110,7 +1110,7 @@ function _parse_local_time(l::Parser, skip_hour=false)::Err{NTuple{4, Int64}} second in 0:59 || return ParserError(ErrParsingDateTime) # optional fractional second - fractional_second = Int64(0) + millisecond = Int64(0) if accept(l, '.') set_marker!(l) found_fractional_digit = false @@ -1121,12 +1121,15 @@ function _parse_local_time(l::Parser, skip_hour=false)::Err{NTuple{4, Int64}} return ParserError(ErrParsingDateTime) end # DateTime in base only manages 3 significant digits in fractional - # second + # second. Interpret parsed digits as fractional seconds and scale to + # milliseconds precision (e.g., ".2" => 200ms, ".20" => 200ms). + ndigits = l.prevpos - l.marker fractional_second = parse_int(l, false)::Int64 + millisecond = fractional_second * 10^(3 - ndigits) # Truncate off the rest eventual digits accept_batch(l, isdigit) end - return hour, minute, second, fractional_second + return hour, minute, second, millisecond end diff --git a/stdlib/TOML/test/values.jl b/stdlib/TOML/test/values.jl index 53be1b04708b3..b7c3730006723 100644 --- a/stdlib/TOML/test/values.jl +++ b/stdlib/TOML/test/values.jl @@ -116,6 +116,9 @@ end @test testval("2016-09-09T09:09:09Z" , DateTime(2016 , 9 , 9 , 9 , 9 , 9)) @test testval("2016-09-09T09:09:09.0Z" , DateTime(2016 , 9 , 9 , 9 , 9 , 9)) @test testval("2016-09-09T09:09:09.012" , DateTime(2016 , 9 , 9 , 9 , 9 , 9 , 12)) + @test testval("2016-09-09T09:09:09.2" , DateTime(2016 , 9 , 9 , 9 , 9 , 9 , 200)) + @test testval("2016-09-09T09:09:09.20" , DateTime(2016 , 9 , 9 , 9 , 9 , 9 , 200)) + @test testval("2016-09-09T09:09:09.02" , DateTime(2016 , 9 , 9 , 9 , 9 , 9 , 20)) @test failval("2016-09-09T09:09:09.0+10:00" , Internals.ErrOffsetDateNotSupported) @test failval("2016-09-09T09:09:09.012-02:00" , Internals.ErrOffsetDateNotSupported) @@ -132,8 +135,12 @@ end end @testset "Time" begin - @test testval("09:09:09.99" , Time(9 , 9 , 9 , 99)) + @test testval("09:09:09.99" , Time(9 , 9 , 9 , 990)) @test testval("09:09:09.99999" , Time(9 , 9 , 9 , 999)) + @test testval("00:00:00.2" , Time(0 , 0 , 0 , 200)) + @test testval("00:00:00.20" , Time(0 , 0 , 0 , 200)) + @test testval("00:00:00.23" , Time(0 , 0 , 0 , 230)) + @test testval("00:00:00.234" , Time(0 , 0 , 0 , 234)) @test failval("09:09x09", Internals.ErrParsingDateTime) end From 82184354988cb434d5b849c73ed74541d77eaf78 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 31 Oct 2025 20:52:03 -0600 Subject: [PATCH 16/26] inference: revisit all methods in cycle (#59974) When encountering complicated cycles within cycles, make sure to revisit all applicable methods explicitly, since not all methods within the cycle will necessarily change return type after resolving the cycle. This shows up as the possibility of frames that don't get revisited before being cached, probably just caching `Union{}` as the call type instead. I always assumed this code was probably wrong, but didn't have any way to construct the counter-example to have confidence that fixing it would not cause some other side-effect. But still keep the backedge work lazy, since we don't want to allocate unnecessarily for a rarely used feature (recursion). Fix #59943 (cherry picked from commit f4847bf687ab0fa37fdcd237512d5ec6486ae788) --- Compiler/src/typeinfer.jl | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/Compiler/src/typeinfer.jl b/Compiler/src/typeinfer.jl index 8fdfaa2966b8f..746b32c22506c 100644 --- a/Compiler/src/typeinfer.jl +++ b/Compiler/src/typeinfer.jl @@ -761,17 +761,10 @@ function type_annotate!(interp::AbstractInterpreter, sv::InferenceState) end function merge_call_chain!(::AbstractInterpreter, parent::InferenceState, child::InferenceState) - # add backedge of parent <- child - # then add all backedges of parent <- parent.parent + # update all cycleid to be in the same group frames = parent.callstack::Vector{AbsIntState} @assert child.callstack === frames ancestorid = child.cycleid - while true - add_cycle_backedge!(parent, child) - parent.cycleid === ancestorid && break - child = parent - parent = cycle_parent(child)::InferenceState - end # ensure that walking the callstack has the same cycleid (DAG) for frameid = reverse(ancestorid:length(frames)) frame = frames[frameid]::InferenceState @@ -782,7 +775,6 @@ function merge_call_chain!(::AbstractInterpreter, parent::InferenceState, child: end function add_cycle_backedge!(caller::InferenceState, frame::InferenceState) - update_valid_age!(caller, frame.world.valid_worlds) backedge = (caller, caller.currpc) contains_is(frame.cycle_backedges, backedge) || push!(frame.cycle_backedges, backedge) return frame @@ -801,9 +793,8 @@ end # frame matching `mi` is encountered, then there is a cycle in the call graph # (i.e. `mi` is a descendant callee of itself). Upon encountering this cycle, # we "resolve" it by merging the call chain, which entails updating each intermediary -# frame's `cycleid` field and adding the appropriate backedges. Finally, -# we return `mi`'s pre-existing frame. If no cycles are found, `nothing` is -# returned instead. +# frame's `cycleid` field. Finally, we return `mi`'s pre-existing frame. +# If no cycles are found, `nothing` is returned instead. function resolve_call_cycle!(interp::AbstractInterpreter, mi::MethodInstance, parent::AbsIntState) # TODO (#48913) implement a proper recursion handling for irinterp: # This works most of the time currently just because the irinterp code doesn't get used much with @@ -992,6 +983,7 @@ function typeinf_edge(interp::AbstractInterpreter, method::Method, @nospecialize result.ci_as_edge = edge_ci # set the edge for the inliner usage VolatileInferenceResult(result) end + isinferred || add_cycle_backedge!(caller, frame) mresult[] = MethodCallResult(interp, caller, method, bestguess, exc_bestguess, effects, edge, edgecycle, edgelimited, volatile_inf_result) return true @@ -1010,6 +1002,7 @@ function typeinf_edge(interp::AbstractInterpreter, method::Method, @nospecialize update_valid_age!(caller, valid_worlds) bestguess = frame.bestguess exc_bestguess = refine_exception_type(frame.exc_bestguess, effects) + add_cycle_backedge!(caller, frame) return Future(MethodCallResult(interp, caller, method, bestguess, exc_bestguess, effects, nothing, edgecycle, edgelimited)) end From 2fc0ebd8eaa4c1d33731106e2f28e653c42f2795 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Sat, 1 Nov 2025 06:45:23 -0400 Subject: [PATCH 17/26] REPL: make interactive precompiles test more robust (#60006) (cherry picked from commit a933cf4f8b061cb9fdb5b4a5d44c2c3c04b79de6) --- stdlib/REPL/test/precompilation.jl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/stdlib/REPL/test/precompilation.jl b/stdlib/REPL/test/precompilation.jl index 7efcf0b5e8282..bc3eda15eae61 100644 --- a/stdlib/REPL/test/precompilation.jl +++ b/stdlib/REPL/test/precompilation.jl @@ -18,7 +18,7 @@ if !Sys.iswindows() # start an interactive session, ensuring `TERM` is unset since it can trigger # different amounts of precompilation stemming from `base/terminfo.jl` depending # on the value, making the test here unreliable - cmd = addenv(`$(Base.julia_cmd()[1]) --trace-compile=$f -q --startup-file=no -i`, + cmd = addenv(`$(Base.julia_cmd()) --trace-compile=$f -q --startup-file=no -i`, Dict("TERM" => "")) pts, ptm = open_fake_pty() p = run(cmd, pts, pts, pts; wait=false) @@ -26,7 +26,10 @@ if !Sys.iswindows() std = readuntil(ptm, "julia>") # check for newlines instead of equality with "julia>" because color may be on occursin("\n", std) && @info "There was output before the julia prompt:\n$std" - sleep(1) # sometimes precompiles output just after prompt appears + @async write(ptm, "\n") # another prompt + readuntil(ptm, "julia>") + @async write(ptm, "\n") # another prompt + readuntil(ptm, "julia>") tracecompile_out = read(f, String) close(ptm) # close after reading so we don't get precompiles from error shutdown From 6286cfd759bd17f0cecdceb051a8dc008df5a430 Mon Sep 17 00:00:00 2001 From: Oscar Smith Date: Sat, 1 Nov 2025 08:32:08 -0400 Subject: [PATCH 18/26] fix `pointerarith_tfunc` for Const ptr (#60011) fixes https://github.com/JuliaLang/julia/issues/60009 (cherry picked from commit 97f880ae6d9c727a1ea8bb650b7578572f3e8972) --- Compiler/src/tfuncs.jl | 2 +- Compiler/test/effects.jl | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Compiler/src/tfuncs.jl b/Compiler/src/tfuncs.jl index fcead89d0a151..57c1fe45ba661 100644 --- a/Compiler/src/tfuncs.jl +++ b/Compiler/src/tfuncs.jl @@ -713,7 +713,7 @@ function pointer_eltype(@nospecialize(ptr)) end @nospecs function pointerarith_tfunc(𝕃::AbstractLattice, ptr, offset) - return ptr + return widenconst(ptr) end @nospecs function pointerref_tfunc(𝕃::AbstractLattice, a, i, align) return pointer_eltype(a) diff --git a/Compiler/test/effects.jl b/Compiler/test/effects.jl index e06d885fcefd7..6b0ca0efc67e6 100644 --- a/Compiler/test/effects.jl +++ b/Compiler/test/effects.jl @@ -1478,3 +1478,10 @@ let effects = Base.infer_effects((Core.SimpleVector,Int); optimize=false) do sve end @test Compiler.is_nothrow(Base.infer_effects(length, (Core.SimpleVector,))) + + +# https://github.com/JuliaLang/julia/issues/60009 +function null_offset(offset) + Ptr{UInt8}(C_NULL) + offset +end +@test null_offset(Int(100)) == Ptr{UInt8}(UInt(100)) From f8f009d2ddd6dc1420abbb3473738bb350a83371 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Wed, 5 Nov 2025 16:49:41 -0500 Subject: [PATCH 19/26] Don't trigger full rebuild if git is dirty (#60023) (cherry picked from commit 6f2f7f5dbdcb26f6ca6ae1e487b7927894323196) --- base/.gitignore | 1 + base/Makefile | 1 + base/version_git.sh | 29 +++++++++++++++++-- .../InteractiveUtils/src/InteractiveUtils.jl | 2 +- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/base/.gitignore b/base/.gitignore index 0fab5b41fda08..4d02a98c01000 100644 --- a/base/.gitignore +++ b/base/.gitignore @@ -7,5 +7,6 @@ /uv_constants.jl /version_git.jl /version_git.jl.phony +/version_git_dirty /userimg.jl /JuliaSyntax diff --git a/base/Makefile b/base/Makefile index 34791f7b4b0d4..f748295c2e6fc 100644 --- a/base/Makefile +++ b/base/Makefile @@ -306,4 +306,5 @@ clean: -rm -f $(BUILDDIR)/file_constants.jl -rm -f $(BUILDDIR)/version_git.jl -rm -f $(BUILDDIR)/version_git.jl.phony + -rm -f $(BUILDDIR)/version_git_dirty -rm -f $(build_private_libdir)/lib*.$(SHLIB_EXT)* diff --git a/base/version_git.sh b/base/version_git.sh index 76092e9800594..b88fbcf04d0d1 100644 --- a/base/version_git.sh +++ b/base/version_git.sh @@ -6,7 +6,7 @@ echo "# This file was autogenerated by base/version_git.sh" echo "struct GitVersionInfo" echo " commit::String" -echo " commit_short::String" +echo " commit_short_raw::String" echo " branch::String" echo " build_number::Int" echo " date_string::String" @@ -17,6 +17,24 @@ echo " build_system_commit::String" echo " build_system_commit_short::String" echo "end" echo "" +echo "function Base.getproperty(info::GitVersionInfo, s::Symbol)" +echo " if s === :commit_short" +echo " commit = getfield(info, :commit_short_raw)" +echo " dirty_file = joinpath(Sys.BINDIR, Base.DATAROOTDIR, \"julia\", \"base\", \"version_git_dirty\")" +echo " dirty_str = try" +echo " read(dirty_file, String)" +echo " catch" +echo " \"\"" +echo " end" +echo " if strip(dirty_str) == \"true\"" +echo " return commit * \"*\"" +echo " end" +echo " return commit" +echo " else" +echo " return getfield(info, s)" +echo " end" +echo "end" +echo "" cd $1 @@ -38,8 +56,9 @@ git_time=$(git log -1 --pretty=format:%ct) commit=$(git rev-parse HEAD) commit_short=$(git rev-parse --short HEAD) if [ -n "$(git status --porcelain)" ]; then - # append dirty mark '*' if the repository has uncommitted changes - commit_short="$commit_short"* + dirty="true" +else + dirty="false" fi # Our CI system checks commits out as a detached head, and so we must @@ -117,3 +136,7 @@ echo " $fork_master_timestamp.0," echo " \"$build_system_commit\"," echo " \"$build_system_commit_short\"," echo ")" + +# Write dirty status to a separate file to avoid triggering rebuilds +# when only the dirty status changes +echo "$dirty" > version_git_dirty diff --git a/stdlib/InteractiveUtils/src/InteractiveUtils.jl b/stdlib/InteractiveUtils/src/InteractiveUtils.jl index c39112eded49a..ac5b81b54f52d 100644 --- a/stdlib/InteractiveUtils/src/InteractiveUtils.jl +++ b/stdlib/InteractiveUtils/src/InteractiveUtils.jl @@ -102,7 +102,7 @@ See also: [`VERSION`](@ref). """ function versioninfo(io::IO=stdout; verbose::Bool=false) println(io, "Julia Version $VERSION") - if !isempty(Base.GIT_VERSION_INFO.commit_short) + if !isempty(Base.GIT_VERSION_INFO.commit_short_raw) println(io, "Commit $(Base.GIT_VERSION_INFO.commit_short) ($(Base.GIT_VERSION_INFO.date_string))") end official_release = Base.TAGGED_RELEASE_BANNER == "Official https://julialang.org release" From c53224f1b1ab1281323e89c22389670c92340b83 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 5 Nov 2025 17:26:16 -0500 Subject: [PATCH 20/26] fix waitall deadlock if any errors occur (#60030) When errors occur, `waitall` may skip allocating Channel producers, leading to deadlock in the subsequent loop in the event that the user asked it to failfast (ironically). This is seen often in the failing of the threads_exec test ever since the test was added for this call. Simplify this to just use separate loops for the wait and the return computation. (cherry picked from commit e2f3178d9bd94ce452bbf63adceffd71d6b449ce) --- base/task.jl | 43 +++++++++++++++++++++++++++++++++---------- test/threads_exec.jl | 4 +--- 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/base/task.jl b/base/task.jl index 999da9b493d08..67412fafa5723 100644 --- a/base/task.jl +++ b/base/task.jl @@ -383,8 +383,11 @@ completed tasks, and the other consists of uncompleted tasks. each runs serially, since this needs to scan the list of `tasks` each time and synchronize with each one every time this is called. Or consider using [`waitall(tasks; failfast=true)`](@ref waitall) instead. + +!!! compat "Julia 1.12" + This function requires at least Julia 1.12. """ -waitany(tasks; throw=true) = _wait_multiple(tasks, throw) +waitany(tasks; throw=true) = _wait_multiple(collect_tasks(tasks), throw) """ waitall(tasks; failfast=true, throw=true) -> (done_tasks, remaining_tasks) @@ -400,17 +403,22 @@ given tasks is finished by exception. If `throw` is `true`, throw The return value consists of two task vectors. The first one consists of completed tasks, and the other consists of uncompleted tasks. + +!!! compat "Julia 1.12" + This function requires at least Julia 1.12. """ -waitall(tasks; failfast=true, throw=true) = _wait_multiple(tasks, throw, true, failfast) +waitall(tasks; failfast=true, throw=true) = _wait_multiple(collect_tasks(tasks), throw, true, failfast) -function _wait_multiple(waiting_tasks, throwexc=false, all=false, failfast=false) +function collect_tasks(waiting_tasks) tasks = Task[] - for t in waiting_tasks t isa Task || error("Expected an iterator of `Task` object") push!(tasks, t) end + return tasks +end +function _wait_multiple(tasks::Vector{Task}, throwexc::Bool=false, all::Bool=false, failfast::Bool=false) if (all && !failfast) || length(tasks) <= 1 exception = false # Force everything to finish synchronously for the case of waitall @@ -474,22 +482,36 @@ function _wait_multiple(waiting_tasks, throwexc=false, all=false, failfast=false end while nremaining > 0 + exception && failfast && break i = take!(chan) t = tasks[i] waiter_tasks[i] = sentinel done_mask[i] = true exception |= istaskfailed(t) nremaining -= 1 - - # stop early if requested, unless there is something immediately - # ready to consume from the channel (using a race-y check) - if (!all || (failfast && exception)) && !isready(chan) - break - end + # stop early if requested + all || break end close(chan) + # now just read which tasks finished directly: the channel is not needed anymore for that + # repeat until we get (acquire) the list of all dependent-exited tasks + changed = true + while changed + changed = false + for (i, done) in enumerate(done_mask) + done && continue + t = tasks[i] + if istaskdone(t) + done_mask[i] = true + exception |= istaskfailed(t) + nremaining -= 1 + changed = true + end + end + end + if nremaining == 0 if throwexc && exception exceptions = [TaskFailedException(t) for t in tasks if istaskfailed(t)] @@ -500,6 +522,7 @@ function _wait_multiple(waiting_tasks, throwexc=false, all=false, failfast=false remaining_mask = .~done_mask for i in findall(remaining_mask) waiter = waiter_tasks[i] + waiter === sentinel && continue donenotify = tasks[i].donenotify::ThreadSynchronizer @lock donenotify Base.list_deletefirst!(donenotify.waitq, waiter) end diff --git a/test/threads_exec.jl b/test/threads_exec.jl index 6942a5fb1335b..e80cacd836ebb 100644 --- a/test/threads_exec.jl +++ b/test/threads_exec.jl @@ -1370,9 +1370,7 @@ end tasks = [Threads.@spawn(div(1, i)) for i = 0:1] wait(tasks[1]; throw=false) wait(tasks[2]; throw=false) - @test_throws CompositeException begin - waitall(Threads.@spawn(div(1, i)) for i = 0:1) - end + @test_throws CompositeException waitall(tasks) end end end From fc0e31273e0b64a4e31851586f60d4ff262f2bd9 Mon Sep 17 00:00:00 2001 From: James Wrigley Date: Tue, 4 Nov 2025 16:02:21 +0100 Subject: [PATCH 21/26] Type-assert the return type of `collect(...)` in TOML (#59932) (cherry picked from commit fda084f06388ade885b69214e5f31b36b263b31f) --- stdlib/TOML/src/print.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/TOML/src/print.jl b/stdlib/TOML/src/print.jl index c6c046b9b40c6..d93380678c5c1 100644 --- a/stdlib/TOML/src/print.jl +++ b/stdlib/TOML/src/print.jl @@ -118,7 +118,7 @@ function print_integer(io::IO, value::Integer) end function print_inline_table(f::MbyFunc, io::IO, value::AbstractDict, sorted::Bool) - vkeys = collect(keys(value)) + vkeys = collect(keys(value))::AbstractArray if sorted sort!(vkeys) end From 2e88e34e88cafe546671bd61cb4336330447225f Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 7 Nov 2025 11:09:32 +0100 Subject: [PATCH 22/26] Markdown: don't allow space between parts of a link (#59977) In Markdown, links are written as `[desc](URL)`, and no space is allowed between `]` and `(`. However, Julia's Markdown parser explicitly accepted it (not clear why). This may break links in a few package manuals, but the fix will be easy in each case (just remove the extra spaces). But being more consistent with most (all??) other Markdown implementations seems more important to me; it is very surprising when one copies basic Markdown that works fine elsewhere into a Julia package manual and it suddenly is treated completely differently. Resolves JuliaDocs/Documenter.jl#2681 (cherry picked from commit fe30573f3465ffe1b6c99d0a58252fb4b586bf4c) --- stdlib/Markdown/src/Common/inline.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/stdlib/Markdown/src/Common/inline.jl b/stdlib/Markdown/src/Common/inline.jl index a2a4140f80050..eb9d1ffccbfbd 100644 --- a/stdlib/Markdown/src/Common/inline.jl +++ b/stdlib/Markdown/src/Common/inline.jl @@ -96,7 +96,6 @@ function link(stream::IO, md::MD) startswith(stream, '[') || return text = readuntil(stream, ']', match = '[') text ≡ nothing && return - skipwhitespace(stream) startswith(stream, '(') || return url = readuntil(stream, ')', match = '(') url ≡ nothing && return From 4a79cf9ea7ca10d5b245b1bf36b214ad83c73ecc Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sat, 8 Nov 2025 14:58:47 +0100 Subject: [PATCH 23/26] bump Pkg to latest 1.12 --- .../Pkg-499e7d35565c0c8582d0d7b56bfe2109dcbac4c0.tar.gz/md5 | 1 + .../Pkg-499e7d35565c0c8582d0d7b56bfe2109dcbac4c0.tar.gz/sha512 | 1 + .../Pkg-f571edda902c848382517503665fea6aa275ceb9.tar.gz/md5 | 1 - .../Pkg-f571edda902c848382517503665fea6aa275ceb9.tar.gz/sha512 | 1 - stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Pkg-499e7d35565c0c8582d0d7b56bfe2109dcbac4c0.tar.gz/md5 create mode 100644 deps/checksums/Pkg-499e7d35565c0c8582d0d7b56bfe2109dcbac4c0.tar.gz/sha512 delete mode 100644 deps/checksums/Pkg-f571edda902c848382517503665fea6aa275ceb9.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-f571edda902c848382517503665fea6aa275ceb9.tar.gz/sha512 diff --git a/deps/checksums/Pkg-499e7d35565c0c8582d0d7b56bfe2109dcbac4c0.tar.gz/md5 b/deps/checksums/Pkg-499e7d35565c0c8582d0d7b56bfe2109dcbac4c0.tar.gz/md5 new file mode 100644 index 0000000000000..7ea55cf23ddff --- /dev/null +++ b/deps/checksums/Pkg-499e7d35565c0c8582d0d7b56bfe2109dcbac4c0.tar.gz/md5 @@ -0,0 +1 @@ +0a0fc12d029bda3a2286e9ce7c8b6047 diff --git a/deps/checksums/Pkg-499e7d35565c0c8582d0d7b56bfe2109dcbac4c0.tar.gz/sha512 b/deps/checksums/Pkg-499e7d35565c0c8582d0d7b56bfe2109dcbac4c0.tar.gz/sha512 new file mode 100644 index 0000000000000..6c682295a0d77 --- /dev/null +++ b/deps/checksums/Pkg-499e7d35565c0c8582d0d7b56bfe2109dcbac4c0.tar.gz/sha512 @@ -0,0 +1 @@ +3f49f5a5fd34257bce95b8b03c2f5e79b838db11bfca679366ed82d7773b12a888c4e661c7255eca88c56c83baca595be423dd896862ed294ab6bab5a9e4bad7 diff --git a/deps/checksums/Pkg-f571edda902c848382517503665fea6aa275ceb9.tar.gz/md5 b/deps/checksums/Pkg-f571edda902c848382517503665fea6aa275ceb9.tar.gz/md5 deleted file mode 100644 index 480f2f77c5cb8..0000000000000 --- a/deps/checksums/Pkg-f571edda902c848382517503665fea6aa275ceb9.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -1f7f4710e3216abc3109024c41051ae8 diff --git a/deps/checksums/Pkg-f571edda902c848382517503665fea6aa275ceb9.tar.gz/sha512 b/deps/checksums/Pkg-f571edda902c848382517503665fea6aa275ceb9.tar.gz/sha512 deleted file mode 100644 index 5c3356eb58bc0..0000000000000 --- a/deps/checksums/Pkg-f571edda902c848382517503665fea6aa275ceb9.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -47286eb6d32836b34524833e0461dabc2e25fd917f2cf552242c6807da1cb2b637c60a2e3b40e457bc5296ae932ba4432ec2c5647dc1861407031f74bdb674fc diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 7f2e0b664dcc1..6b0aabd63eeda 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.12 -PKG_SHA1 = f571edda902c848382517503665fea6aa275ceb9 +PKG_SHA1 = 499e7d35565c0c8582d0d7b56bfe2109dcbac4c0 PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From c4448e258e180483ab4138eb5d153e4a8bf08db1 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sat, 8 Nov 2025 21:05:40 +0100 Subject: [PATCH 24/26] Backport p7zip_jll infrastructure changes from f03e9c3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bring over the p7zip_jll handling improvements from f03e9c3 ([deps] enable zstd support): - Move p7zip binary from bindir to private_libexecdir - Add Windows DLL handling for binary builder installs - Simplify p7zip_jll.jl by removing LIBPATH handling - Add P7ZIP_BUILD_OPTS variable for consistent build flags These changes prepare for the p7zip 17.7.0 upgrade and ensure p7zip is installed in the correct location. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- Makefile | 20 +++++---- deps/p7zip.mk | 30 +++++++++++--- stdlib/p7zip_jll/src/p7zip_jll.jl | 67 +++++++++---------------------- 3 files changed, 52 insertions(+), 65 deletions(-) diff --git a/Makefile b/Makefile index f58fda5ec8558..bae449b255a10 100644 --- a/Makefile +++ b/Makefile @@ -204,6 +204,9 @@ endif # private libraries, that are installed in $(prefix)/lib/julia JL_PRIVATE_LIBS-0 := libccalltest libccalllazyfoo libccalllazybar libllvmcalltest +JL_PRIVATE_LIBS-1 := # libraries from USE_SYSTEM=1 +JL_PRIVATE_EXES := 7z +JL_PRIVATE_TOOLS := lld$(EXE) dsymutil$(EXE) ifeq ($(JULIA_BUILD_MODE),release) JL_PRIVATE_LIBS-0 += libjulia-internal libjulia-codegen else ifeq ($(JULIA_BUILD_MODE),debug) @@ -325,9 +328,6 @@ endif -$(INSTALL_M) $(wildcard $(build_private_libdir)/*.a) $(DESTDIR)$(private_libdir)/ -rm -f $(DESTDIR)$(private_libdir)/sys-o.a - # We have a single exception; we want 7z.dll to live in private_libexecdir, - # not bindir, so that 7z.exe can find it. - -mv $(DESTDIR)$(bindir)/7z.dll $(DESTDIR)$(private_libexecdir)/ -$(INSTALL_M) $(build_bindir)/libopenlibm.dll.a $(DESTDIR)$(libdir)/ -$(INSTALL_M) $(build_libdir)/libssp.dll.a $(DESTDIR)$(libdir)/ else @@ -384,14 +384,12 @@ endif done \ done endif - # Install `7z` into private_libexecdir - $(INSTALL_M) $(build_bindir)/7z$(EXE) $(DESTDIR)$(private_libexecdir)/ - - # Install `lld` into private_libexecdir - $(INSTALL_M) $(build_depsbindir)/lld$(EXE) $(DESTDIR)$(private_libexecdir)/ - - # Install `dsymutil` into private_libexecdir/ - $(INSTALL_M) $(build_depsbindir)/dsymutil$(EXE) $(DESTDIR)$(private_libexecdir)/ + for exe in $(JL_PRIVATE_EXES) ; do \ + $(INSTALL_M) $(build_private_libexecdir)/$$exe $(DESTDIR)$(private_libexecdir) || exit 1; \ + done + for exe in $(JL_PRIVATE_TOOLS) ; do \ + $(INSTALL_M) $(build_depsbindir)/$$exe $(DESTDIR)$(private_libexecdir) || exit 1; \ + done # Copy public headers cp -R -L $(build_includedir)/julia/* $(DESTDIR)$(includedir)/julia diff --git a/deps/p7zip.mk b/deps/p7zip.mk index c7c2874d49a5e..b817db31c7cba 100644 --- a/deps/p7zip.mk +++ b/deps/p7zip.mk @@ -3,6 +3,8 @@ include $(SRCDIR)/p7zip.version ifneq ($(USE_BINARYBUILDER_P7ZIP),1) +P7ZIP_BUILD_OPTS := bindir=$(build_private_libexecdir) CC="$(CC)" CXX="$(CXX)" + $(SRCCACHE)/p7zip-$(P7ZIP_VER).tar.gz: | $(SRCCACHE) $(JLDOWNLOAD) $@ https://github.com/p7zip-project/p7zip/archive/refs/tags/v$(P7ZIP_VER).tar.gz @@ -17,12 +19,12 @@ checksum-p7zip: $(SRCCACHE)/p7zip-$(P7ZIP_VER).tar.gz $(BUILDDIR)/p7zip-$(P7ZIP_VER)/build-configured: $(BUILDDIR)/p7zip-$(P7ZIP_VER)/source-extracted $(BUILDDIR)/p7zip-$(P7ZIP_VER)/build-compiled: $(BUILDDIR)/p7zip-$(P7ZIP_VER)/build-configured - $(MAKE) -C $(dir $<) $(MAKE_COMMON) CC="$(CC)" CXX="$(CXX)" 7za + $(MAKE) -C $(dir $<) $(MAKE_COMMON) $(P7ZIP_BUILD_OPTS) 7za$(EXE) echo 1 > $@ define P7ZIP_INSTALL - mkdir -p $2/$$(build_bindir) - cp -a $1/bin/7za $2/$$(build_bindir)/7z + mkdir -p $2/$$(build_private_libexecdir)/ + cp -a $1/bin/7za$(EXE) $2/$$(build_private_libexecdir)/7z$(EXE) endef $(eval $(call staged-install, \ p7zip,p7zip-$(P7ZIP_VER), \ @@ -30,8 +32,8 @@ $(eval $(call staged-install, \ clean-p7zip: -rm -f $(BUILDDIR)/p7zip-$(P7ZIP_VER)/build-configured $(BUILDDIR)/p7zip-$(P7ZIP_VER)/build-compiled - -rm -f $(build_bindir)/7za - -$(MAKE) -C $(BUILDDIR)/p7zip-$(P7ZIP_VER) clean + -rm -f $(build_bindir)/7z$(EXE) $(build_bindir)/7z$(EXE) $(build_private_libexecdir)/7z$(EXE) + -$(MAKE) -C $(BUILDDIR)/p7zip-$(P7ZIP_VER) $(MAKE_COMMON) $(P7ZIP_BUILD_OPTS) clean distclean-p7zip: rm -rf $(SRCCACHE)/p7zip-$(P7ZIP_VER).tar.gz $(SRCCACHE)/p7zip-$(P7ZIP_VER) $(BUILDDIR)/p7zip-$(P7ZIP_VER) @@ -48,5 +50,23 @@ check-p7zip: compile-p7zip else # USE_BINARYBUILDER_P7ZIP $(eval $(call bb-install,p7zip,P7ZIP,false)) +# move from bindir to shlibdir, where we expect to install it +install-p7zip: post-install-p7zip +uninstall-p7zip: pre-uninstall-p7zip +post-install-p7zip: $(build_prefix)/manifest/p7zip + mkdir -p $(build_private_libexecdir)/ + [ ! -e $(build_bindir)/7z$(EXE) ] || mv $(build_bindir)/7z$(EXE) $(build_private_libexecdir)/7z$(EXE) + [ -e $(build_private_libexecdir)/7z$(EXE) ] +ifeq ($(OS),WINNT) + [ ! -e $(build_bindir)/7z.dll ] || mv $(build_bindir)/7z.dll $(build_private_libexecdir)/7z.dll + [ -e $(build_private_libexecdir)/7z.dll ] +endif +pre-uninstall-p7zip: + -rm -f $(build_private_libexecdir)/7z$(EXE) +ifeq ($(OS),WINNT) + -rm -f $(build_private_libexecdir)/7z.dll +endif + +.PHONY: post-install-p7zip pre-uninstall-p7zip endif diff --git a/stdlib/p7zip_jll/src/p7zip_jll.jl b/stdlib/p7zip_jll/src/p7zip_jll.jl index a2a90a2450ea6..af461c6719632 100644 --- a/stdlib/p7zip_jll/src/p7zip_jll.jl +++ b/stdlib/p7zip_jll/src/p7zip_jll.jl @@ -4,14 +4,10 @@ baremodule p7zip_jll using Base -const PATH_list = String[] -const LIBPATH_list = String[] - export p7zip # These get calculated in __init__() const PATH = Ref("") -const LIBPATH = Ref("") artifact_dir::String = "" p7zip_path::String = "" if Sys.iswindows() @@ -21,71 +17,44 @@ else end if Sys.iswindows() - const LIBPATH_env = "PATH" - const LIBPATH_default = "" const pathsep = ';' elseif Sys.isapple() - const LIBPATH_env = "DYLD_FALLBACK_LIBRARY_PATH" - const LIBPATH_default = "~/lib:/usr/local/lib:/lib:/usr/lib" const pathsep = ':' else - const LIBPATH_env = "LD_LIBRARY_PATH" - const LIBPATH_default = "" const pathsep = ':' end -function adjust_ENV!(env::Dict{keytype(Base.EnvDict),valtype(Base.EnvDict)}, PATH::String, LIBPATH::String, adjust_PATH::Bool, adjust_LIBPATH::Bool) - if adjust_LIBPATH - LIBPATH_base = get(env, LIBPATH_env, expanduser(LIBPATH_default)) - if !isempty(LIBPATH_base) - env[LIBPATH_env] = string(LIBPATH, pathsep, LIBPATH_base) - else - env[LIBPATH_env] = LIBPATH - end - end - if adjust_PATH && (LIBPATH_env != "PATH" || !adjust_LIBPATH) - if adjust_PATH - if !isempty(get(env, "PATH", "")) - env["PATH"] = string(PATH, pathsep, env["PATH"]) - else - env["PATH"] = PATH - end - end - end - return env +function adjust_ENV() + addPATH = PATH[] + oldPATH = get(ENV, "PATH", "") + newPATH = isempty(oldPATH) ? addPATH : "$addPATH$pathsep$oldPATH" + return ("PATH"=>newPATH,) end -function p7zip(f::Function; adjust_PATH::Bool = true, adjust_LIBPATH::Bool = true) - env = adjust_ENV!(copy(ENV), PATH[], LIBPATH[], adjust_PATH, adjust_LIBPATH) - withenv(env...) do - return f(p7zip_path) +function p7zip(f::Function; adjust_PATH::Bool = true, adjust_LIBPATH::Bool = true) # deprecated, for compat only + withenv((adjust_PATH ? adjust_ENV() : ())...) do + return f(p7zip()) end end -function p7zip(; adjust_PATH::Bool = true, adjust_LIBPATH::Bool = true) - env = adjust_ENV!(copy(ENV), PATH[], LIBPATH[], adjust_PATH, adjust_LIBPATH) - return Cmd(Cmd([p7zip_path]); env) -end +# the 7z.exe we ship has no dependencies, so it needs no PATH adjustment +p7zip(; adjust_PATH::Bool = true, adjust_LIBPATH::Bool = true) = `$p7zip_path` function init_p7zip_path() # Prefer our own bundled p7zip, but if we don't have one, pick it up off of the PATH - # If this is an in-tree build, `7z` will live in `bindir`. Otherwise, it'll be in `private_libexecdir` - for bundled_p7zip_path in (joinpath(Sys.BINDIR, Base.PRIVATE_LIBEXECDIR, p7zip_exe), - joinpath(Sys.BINDIR, p7zip_exe)) - if isfile(bundled_p7zip_path) - global p7zip_path = abspath(bundled_p7zip_path) - return - end + # Our `7z` lives in `private_libexecdir` + bundled_p7zip_path = joinpath(Sys.BINDIR, Base.PRIVATE_LIBEXECDIR, p7zip_exe) + if isfile(bundled_p7zip_path) + global p7zip_path = abspath(bundled_p7zip_path) + else + global p7zip_path = something(Sys.which(p7zip_exe), p7zip_exe) end - global p7zip_path = something(Sys.which(p7zip_exe), p7zip_exe) end function __init__() global artifact_dir = dirname(Sys.BINDIR) init_p7zip_path() - PATH[] = dirname(p7zip_path) - push!(PATH_list, PATH[]) - append!(LIBPATH_list, [joinpath(Sys.BINDIR, Base.LIBDIR, "julia"), joinpath(Sys.BINDIR, Base.LIBDIR)]) - LIBPATH[] = join(LIBPATH_list, pathsep) + PATH[] = path = dirname(p7zip_path) + nothing end # JLLWrappers API compatibility shims. Note that not all of these will really make sense. From 84f859eac388b02b400dc3bff613d69fefb55a65 Mon Sep 17 00:00:00 2001 From: Nathan Zimmerberg <39104088+nhz2@users.noreply.github.com> Date: Fri, 7 Nov 2025 02:49:43 -0500 Subject: [PATCH 25/26] p7zip 17.7.0 (#60025) --- deps/checksums/p7zip | 76 +++++++++++++++++------------------ deps/p7zip.mk | 27 +++++-------- deps/p7zip.version | 2 +- stdlib/Manifest.toml | 4 +- stdlib/p7zip_jll/Project.toml | 5 ++- 5 files changed, 53 insertions(+), 61 deletions(-) diff --git a/deps/checksums/p7zip b/deps/checksums/p7zip index 6850967ace1b5..a75aec9ac0e9d 100644 --- a/deps/checksums/p7zip +++ b/deps/checksums/p7zip @@ -1,38 +1,38 @@ -p7zip-17.05.tar.gz/md5/de921a08f37242a8eed8e4a758fbcb58 -p7zip-17.05.tar.gz/sha512/97a7cfd15287998eb049c320548477be496c4ddf6b45c833c42adca4ab88719b07a442ae2e71cf2dc3b30a0777a3acab0a1a30f01fd85bacffa3fa9bd22c3f7d -p7zip.v17.5.0+2.aarch64-apple-darwin.tar.gz/md5/2a254e251901b3d1ddfd7aff23a6e5eb -p7zip.v17.5.0+2.aarch64-apple-darwin.tar.gz/sha512/8efb9a2c9bcab388e523adba3dc0b876e8ae34e2440c3eee01fd780eb87c8619c7a7bbdc46d703ccefff6aa6ad64c4e4b45b723136ab1f6fd6de4f52e75ebbbf -p7zip.v17.5.0+2.aarch64-linux-gnu.tar.gz/md5/bb1f3773fd409dbb91a10f7d9d2e99b5 -p7zip.v17.5.0+2.aarch64-linux-gnu.tar.gz/sha512/e95ccc342be644570d218d25403b91a7db9ee983fbf8cce3deff453355d68d426f9301eaac865a98691025b596b8cd77ebebf6184c0eaf8b2f294bc6763b9a4b -p7zip.v17.5.0+2.aarch64-linux-musl.tar.gz/md5/3fac518a6a70412294d71ca510958cf2 -p7zip.v17.5.0+2.aarch64-linux-musl.tar.gz/sha512/fc127790739bf8a8b918b2e83753d86f5e79ee8706bde4cc79d74d9f7d846aae99a109da4b2b3cc92ccedc1eef4d52a555a65a95f588e173e0fecc11f2ca21e6 -p7zip.v17.5.0+2.aarch64-unknown-freebsd.tar.gz/md5/4190f8d7d42572b3fdab0fa382417d43 -p7zip.v17.5.0+2.aarch64-unknown-freebsd.tar.gz/sha512/5b0cb08374b8561873f76cb2b8bcbb8de1ff4c91bde23222cc1b650c6ea2fff265e48b6190551ed136324a47d25e1d357a754295b674e74b4628b20223ad067d -p7zip.v17.5.0+2.armv6l-linux-gnueabihf.tar.gz/md5/355410848192de3b02d12fd663867f4b -p7zip.v17.5.0+2.armv6l-linux-gnueabihf.tar.gz/sha512/8f103b41e755d157d70dacca89a0ef4610bea109686b4005e8edd5f79ed2e6419c00c2625d0ab90e6e33fa389e670490d8de263c0bdae952cc34cbbf440e275f -p7zip.v17.5.0+2.armv6l-linux-musleabihf.tar.gz/md5/34363b227306fce34a728af54b71064f -p7zip.v17.5.0+2.armv6l-linux-musleabihf.tar.gz/sha512/8dd7b37ce6223c9fedcaa999eb806eb6dec8c4a3133d3c07e2456cb8543b8e4f5b881c1bff2d2e25f19b1312b18673e9013aeff87d6a274eec6c451b1ba0d6b9 -p7zip.v17.5.0+2.armv7l-linux-gnueabihf.tar.gz/md5/dbb1fc0cf3bea674442ff8cc932a94cd -p7zip.v17.5.0+2.armv7l-linux-gnueabihf.tar.gz/sha512/c4d71d905fa420391417786ed206a0c334475dd0df8baa1fc3f6560ce548db11805003d0d0b35bb622fe818c761f2b0abe0796d1cbfce2a922da69e697f056a2 -p7zip.v17.5.0+2.armv7l-linux-musleabihf.tar.gz/md5/d188b5dd453faedb616ba9c48fdeab6b -p7zip.v17.5.0+2.armv7l-linux-musleabihf.tar.gz/sha512/ea30a775370502ca9e271b87cbda528d0c51d63ce0df41883d4dbc1527a32f251d797f3692fcf9b883b5fbaaad80515b971a8f8fe09ba102978b19a0ecb58528 -p7zip.v17.5.0+2.i686-linux-gnu.tar.gz/md5/dc02bdde045a0b6b22cf14d6960e63ed -p7zip.v17.5.0+2.i686-linux-gnu.tar.gz/sha512/d2d0dd14a5fc1163fea2276e0925bfa8d075d5dba1d8018e4e3160977d3b09642b2e521d8e57d049abaf0e2ea391a846f0b0136b3c59e8b476c8c52ac5210447 -p7zip.v17.5.0+2.i686-linux-musl.tar.gz/md5/0b8658147938a8ec109ee2b3b0a0665f -p7zip.v17.5.0+2.i686-linux-musl.tar.gz/sha512/411b2950f5928c537b87ba0651c09c08e57afed765db9fee89eda8b12939ef0da94c8ba38c0a24ba46b4513a0e4cca798eb09f2b20a011099ed3cf14455dd19e -p7zip.v17.5.0+2.i686-w64-mingw32.tar.gz/md5/98bdd8767c77a35f71303ff490a3d363 -p7zip.v17.5.0+2.i686-w64-mingw32.tar.gz/sha512/14f08071af74297df8bfe1d9f7efa3c0212e62ace573848f17b729e4c36dc3861110f3c5cc9315364c318e5b040736443a24492e86d76161993653a309996eb3 -p7zip.v17.5.0+2.powerpc64le-linux-gnu.tar.gz/md5/b18c917b9852898a9b9d6d24bcc6863e -p7zip.v17.5.0+2.powerpc64le-linux-gnu.tar.gz/sha512/0148dc8a0bc9c95212d7f8e2f92ee24e968eb7290fe72c7ae02e286bf5c05dd6b1f10b32350a7ff37777ed5a8cc21f3303f464620f3394c7a4690ae98bf77299 -p7zip.v17.5.0+2.riscv64-linux-gnu.tar.gz/md5/8d5f804091c2d21b2c35121d40d1024f -p7zip.v17.5.0+2.riscv64-linux-gnu.tar.gz/sha512/68042f32b8b9f8d422dc0390efa2502d4a1a816daf4adf1133128f9366ec93ee1c1dda699844c0c3c3649a6b55a16312bd6b8fe4aedd6780e6faf11509932a9a -p7zip.v17.5.0+2.x86_64-apple-darwin.tar.gz/md5/da31752a2556644d39e48649bb0111de -p7zip.v17.5.0+2.x86_64-apple-darwin.tar.gz/sha512/0695ad111263d2fadfdf9a46ce7ee80def0bf60db7d1c2585ed2af6fc945fb169311a9f1ffc6f95fb43b0b03694d2d1be9136d3d78ba2ef2b19228987883a385 -p7zip.v17.5.0+2.x86_64-linux-gnu.tar.gz/md5/2fb55d86e4eaccb0488bd637d088b996 -p7zip.v17.5.0+2.x86_64-linux-gnu.tar.gz/sha512/38ac355157d59c09f308fc29964d0e9c1466c9633efd8d3c6ff3c738abce2af45ebc6b92a29f56d5e7baa4871f9f39b14ecfcbedd4e2f4ca7c0fe6627c6b13e7 -p7zip.v17.5.0+2.x86_64-linux-musl.tar.gz/md5/f0bd567a851d2dd9d306552ffafbca3a -p7zip.v17.5.0+2.x86_64-linux-musl.tar.gz/sha512/e60047a6e7e3496cb6658f87c8c88676f399cd9f3d0d7daa880b6be09cd5525f7f22776896f1375722b47555514ff8c018f02ce800ec3fd0ed922e16e8a6d657 -p7zip.v17.5.0+2.x86_64-unknown-freebsd.tar.gz/md5/d37bd26e39a3ec84f262636f70624341 -p7zip.v17.5.0+2.x86_64-unknown-freebsd.tar.gz/sha512/0604a880c19f9d72d5828edd75be641625c29f230b3a5e7d70ec3812c014c96b76ee7b45e0e80f49be63f109a48700e75d1e5be01b5ae7b46d42dafda9885e8c -p7zip.v17.5.0+2.x86_64-w64-mingw32.tar.gz/md5/f02c7b2481dee880b096340a8735350f -p7zip.v17.5.0+2.x86_64-w64-mingw32.tar.gz/sha512/08b717c1b072d1309f6af8973eb09b1a482abb7ae7d01fba79873d4310a7c11292e2e8779029f99cc60627ed0d064224bc87782e587c520f970b840b7b838052 +7z2501-src.tar.xz/md5/00904e3039346ee32b7a500a34e2d699 +7z2501-src.tar.xz/sha512/5ee146ce993c6d12ad19333dc3545e6c3429212260c22d456390e49ca150e6fcbfc6eae45b5ec61138ae1598d7b4a79d6f2e3ff02929af38039c0ca59823e729 +p7zip.v17.7.0+0.aarch64-apple-darwin.tar.gz/md5/a52be1050f7903c9664379eede9ec6f0 +p7zip.v17.7.0+0.aarch64-apple-darwin.tar.gz/sha512/b8816a06bf964e55aaca09871ba59434e6c936d8449783bee7be8ba534d5eff9908a889e7b18f5a5cc1c51b291e3d6d107060cc1e83aced3cbc452e089f4cc0e +p7zip.v17.7.0+0.aarch64-linux-gnu.tar.gz/md5/4e14f09c1a57ad742c69e95b3df3a76e +p7zip.v17.7.0+0.aarch64-linux-gnu.tar.gz/sha512/79ca72ef17e50016b15d8bba9aaa49e1e174b6496470344e42658d861d4fd4a6337660a3b4b08c351f21f4d23ea96a0b1ba01d2f7b1724765c62be282d3c577b +p7zip.v17.7.0+0.aarch64-linux-musl.tar.gz/md5/07936d59f9cf3161ac8daf6427929a83 +p7zip.v17.7.0+0.aarch64-linux-musl.tar.gz/sha512/807dc652ea62823188774e16c6b93fceb904042e3d22cb4eaf82dc393966b458d0d9bca578da7087466e63007a918c5caf24f19b03b8720fc5b4c9cfedbdbcce +p7zip.v17.7.0+0.aarch64-unknown-freebsd.tar.gz/md5/6cd8a5e16ed17b56d8eadf1e7e167512 +p7zip.v17.7.0+0.aarch64-unknown-freebsd.tar.gz/sha512/1904bae2b48e27a02c3fda3324c5ebe2fb736984659bbfac4cb5071fb31130062e574eb2ac5fb8002d8c6f56ce89d47f74ac37343eee07822ad634db477582bb +p7zip.v17.7.0+0.armv6l-linux-gnueabihf.tar.gz/md5/32dff6435c64a22fb5a504d5c1429c49 +p7zip.v17.7.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/7bfee156ce16106f8ea50d4de63de7536030f560110aad9e8390a549443d311b4373c1940df680876b5b44a2f728981268c5d21bc083aa97820e79f362eecc21 +p7zip.v17.7.0+0.armv6l-linux-musleabihf.tar.gz/md5/cc7671317b0f450cb6584927ac31129e +p7zip.v17.7.0+0.armv6l-linux-musleabihf.tar.gz/sha512/76680da33289cf227686dbefae41401abd46826089d5880bad47e661c35f5d0ae2bbed4dadff60682651b3cc0ae7bcd0fd95d1c838197cf72a24c815be4c9895 +p7zip.v17.7.0+0.armv7l-linux-gnueabihf.tar.gz/md5/c7ef8bc1143cd7b7e8cabd150cb03015 +p7zip.v17.7.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/08d5934d1fa7795e7c956b3ac519bebe52cfebd7f546d60f03800265cec560dd004c12523e43d3fa9086f73276450dfd76c67bf6522c55c4fba81c8172944fb2 +p7zip.v17.7.0+0.armv7l-linux-musleabihf.tar.gz/md5/87067e9348d302e58740dd71b6dff9e7 +p7zip.v17.7.0+0.armv7l-linux-musleabihf.tar.gz/sha512/f04be74daf9ffc29ef0c33ef367e1136828f3e4dc027995eabb9e757e754bc9c34fd19089e5d8e5b6a4c4ec8e43237aedaee4b99f04c1d7631961e0d0aa3345f +p7zip.v17.7.0+0.i686-linux-gnu.tar.gz/md5/ff1aad93d8dae893f1dc23e856ed05ac +p7zip.v17.7.0+0.i686-linux-gnu.tar.gz/sha512/06475f5d401839e438db068b48a6a34ddf4b72ee3010589d4c3a9ae6f2afe18a7b2af34437c60c6b9e0d8f657a6df2d740f1e39885bd78bb0eddf02ce020a2b6 +p7zip.v17.7.0+0.i686-linux-musl.tar.gz/md5/a843068034a5410022afc6aa36bab84c +p7zip.v17.7.0+0.i686-linux-musl.tar.gz/sha512/15a32626ac48fb043c33f564dd36550913be19f0193fa2e52e95b81e2e4d087a84e1c05d42381ed57b3ac0d38695d50cf6d146f462460661b2a6a3abc9a6b578 +p7zip.v17.7.0+0.i686-w64-mingw32.tar.gz/md5/c7c4af99790b838f611c252b2268e83a +p7zip.v17.7.0+0.i686-w64-mingw32.tar.gz/sha512/a5d44bf97fbd9381d71bbc0472348221bcf77bc0813af5fb0c56d40a1774ee430865402481dba005166689e7c9670ff82deb4616d9d32ece226decc89be7ed19 +p7zip.v17.7.0+0.powerpc64le-linux-gnu.tar.gz/md5/dab2a1fcff915cce8e81740614e400c4 +p7zip.v17.7.0+0.powerpc64le-linux-gnu.tar.gz/sha512/ca71a8a2def311a21db5018f21613c1354704b0a03c92fea5f8ed38b9e6be776509bd138fdbc222e6c560928f4ad381e98c86e952a1707dd459705c5676f5754 +p7zip.v17.7.0+0.riscv64-linux-gnu.tar.gz/md5/cb86be2084d96777b3cb2b097a1cbd47 +p7zip.v17.7.0+0.riscv64-linux-gnu.tar.gz/sha512/537ac28020f88bc6fbf9cdd2b2cffe9879c9f0d74aa02567181b47a2a63c622bd5d2c9de67b7dc74cfc8e372d672b8269f965c6ee098a03a0b89ae0ed53bbf9c +p7zip.v17.7.0+0.x86_64-apple-darwin.tar.gz/md5/c9f06846dec4e868b669ada25409d031 +p7zip.v17.7.0+0.x86_64-apple-darwin.tar.gz/sha512/50ae225555b31a9ae31ce70c8489fd39718f274a8a0d4432f59b8e689f1b049614a148c389036458a53953485683cd9846b3a9413cd83d8a32b312f7d61b0650 +p7zip.v17.7.0+0.x86_64-linux-gnu.tar.gz/md5/c3a9a8e0c1870b7a841c3b3a37220a07 +p7zip.v17.7.0+0.x86_64-linux-gnu.tar.gz/sha512/75d8150566ac29ba06416767b742cf9c222da9e2c8c48dc8da7f5c0241c41b8e767db0aff9e14cc9240e8662c591505c872e850ad472b234951ab32799790d0c +p7zip.v17.7.0+0.x86_64-linux-musl.tar.gz/md5/34925d3032cdcd953c36ded1625f5e33 +p7zip.v17.7.0+0.x86_64-linux-musl.tar.gz/sha512/03d4e24015498e6e6b025e9ba2d25e43dcb8af3d78c49c9fb34fe2e0d75010c0cb09476dc317ef54f03e4e16449b25dab81121a4b3c54a565700d1a16ad958dc +p7zip.v17.7.0+0.x86_64-unknown-freebsd.tar.gz/md5/a1fea324148e8082db4657c195b91984 +p7zip.v17.7.0+0.x86_64-unknown-freebsd.tar.gz/sha512/ecf5b278077edc4e0e73e9d091c9f9d4b2edfbe742f2de8f05411a32ee0fd58d8adea2915f9295345ea1082a01f41719d1b3ed1744225ea4e129abd3785f4df3 +p7zip.v17.7.0+0.x86_64-w64-mingw32.tar.gz/md5/f0279fe7836fc0949410c8889c6ae09f +p7zip.v17.7.0+0.x86_64-w64-mingw32.tar.gz/sha512/79dfa0324f050202f091197102fa4749373ee737a86dcb37980d73a4795677431144f8308890eeae1ecc30d8f1694b19a3a08f963c1a91536a3f2f3d438b5dd7 diff --git a/deps/p7zip.mk b/deps/p7zip.mk index b817db31c7cba..006062f2932a2 100644 --- a/deps/p7zip.mk +++ b/deps/p7zip.mk @@ -3,28 +3,26 @@ include $(SRCDIR)/p7zip.version ifneq ($(USE_BINARYBUILDER_P7ZIP),1) -P7ZIP_BUILD_OPTS := bindir=$(build_private_libexecdir) CC="$(CC)" CXX="$(CXX)" +$(SRCCACHE)/7z$(subst .,,$(P7ZIP_VER))-src.tar.xz: | $(SRCCACHE) + $(JLDOWNLOAD) $@ https://downloads.sourceforge.net/project/sevenzip/7-Zip/$(P7ZIP_VER)/7z$(subst .,,$(P7ZIP_VER))-src.tar.xz -$(SRCCACHE)/p7zip-$(P7ZIP_VER).tar.gz: | $(SRCCACHE) - $(JLDOWNLOAD) $@ https://github.com/p7zip-project/p7zip/archive/refs/tags/v$(P7ZIP_VER).tar.gz - -$(BUILDDIR)/p7zip-$(P7ZIP_VER)/source-extracted: $(SRCCACHE)/p7zip-$(P7ZIP_VER).tar.gz +$(BUILDDIR)/p7zip-$(P7ZIP_VER)/source-extracted: $(SRCCACHE)/7z$(subst .,,$(P7ZIP_VER))-src.tar.xz $(JLCHECKSUM) $< mkdir -p $(dir $@) - cd $(dir $@) && $(TAR) --strip-components 1 -zxf $< + cd $(dir $@) && $(TAR) -Jxf $< echo 1 > $@ -checksum-p7zip: $(SRCCACHE)/p7zip-$(P7ZIP_VER).tar.gz +checksum-p7zip: $(SRCCACHE)/7z$(subst .,,$(P7ZIP_VER))-src.tar.xz $(JLCHECKSUM) $< $(BUILDDIR)/p7zip-$(P7ZIP_VER)/build-configured: $(BUILDDIR)/p7zip-$(P7ZIP_VER)/source-extracted $(BUILDDIR)/p7zip-$(P7ZIP_VER)/build-compiled: $(BUILDDIR)/p7zip-$(P7ZIP_VER)/build-configured - $(MAKE) -C $(dir $<) $(MAKE_COMMON) $(P7ZIP_BUILD_OPTS) 7za$(EXE) + $(MAKE) -C $(dir $<)CPP/7zip/Bundles/Alone -f makefile.gcc echo 1 > $@ define P7ZIP_INSTALL mkdir -p $2/$$(build_private_libexecdir)/ - cp -a $1/bin/7za$(EXE) $2/$$(build_private_libexecdir)/7z$(EXE) + cp -a $1/CPP/7zip/Bundles/Alone/_o/7za$(EXE) $2/$$(build_private_libexecdir)/7z$(EXE) endef $(eval $(call staged-install, \ p7zip,p7zip-$(P7ZIP_VER), \ @@ -36,10 +34,10 @@ clean-p7zip: -$(MAKE) -C $(BUILDDIR)/p7zip-$(P7ZIP_VER) $(MAKE_COMMON) $(P7ZIP_BUILD_OPTS) clean distclean-p7zip: - rm -rf $(SRCCACHE)/p7zip-$(P7ZIP_VER).tar.gz $(SRCCACHE)/p7zip-$(P7ZIP_VER) $(BUILDDIR)/p7zip-$(P7ZIP_VER) + rm -rf $(SRCCACHE)/7z$(subst .,,$(P7ZIP_VER))-src.tar.xz $(SRCCACHE)/p7zip-$(P7ZIP_VER) $(BUILDDIR)/p7zip-$(P7ZIP_VER) -get-p7zip: $(SRCCACHE)/p7zip-$(P7ZIP_VER).tar.gz +get-p7zip: $(SRCCACHE)/7z$(subst .,,$(P7ZIP_VER))-src.tar.xz extract-p7zip: $(SRCCACHE)/p7zip-$(P7ZIP_VER)/source-extracted configure-p7zip: $(BUILDDIR)/p7zip-$(P7ZIP_VER)/build-configured compile-p7zip: $(BUILDDIR)/p7zip-$(P7ZIP_VER)/build-compiled @@ -57,15 +55,8 @@ post-install-p7zip: $(build_prefix)/manifest/p7zip mkdir -p $(build_private_libexecdir)/ [ ! -e $(build_bindir)/7z$(EXE) ] || mv $(build_bindir)/7z$(EXE) $(build_private_libexecdir)/7z$(EXE) [ -e $(build_private_libexecdir)/7z$(EXE) ] -ifeq ($(OS),WINNT) - [ ! -e $(build_bindir)/7z.dll ] || mv $(build_bindir)/7z.dll $(build_private_libexecdir)/7z.dll - [ -e $(build_private_libexecdir)/7z.dll ] -endif pre-uninstall-p7zip: -rm -f $(build_private_libexecdir)/7z$(EXE) -ifeq ($(OS),WINNT) - -rm -f $(build_private_libexecdir)/7z.dll -endif .PHONY: post-install-p7zip pre-uninstall-p7zip diff --git a/deps/p7zip.version b/deps/p7zip.version index 0fcde938eeb95..740d269d8a757 100644 --- a/deps/p7zip.version +++ b/deps/p7zip.version @@ -2,4 +2,4 @@ P7ZIP_JLL_NAME := p7zip ## source build -P7ZIP_VER := 17.05 +P7ZIP_VER := 25.01 diff --git a/stdlib/Manifest.toml b/stdlib/Manifest.toml index c0f4e7c929713..3db51cf75328d 100644 --- a/stdlib/Manifest.toml +++ b/stdlib/Manifest.toml @@ -295,6 +295,6 @@ uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" version = "1.64.0+1" [[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.5.0+2" +version = "17.7.0+0" diff --git a/stdlib/p7zip_jll/Project.toml b/stdlib/p7zip_jll/Project.toml index 214c5b19a8a4b..2c7159f9a4766 100644 --- a/stdlib/p7zip_jll/Project.toml +++ b/stdlib/p7zip_jll/Project.toml @@ -1,10 +1,11 @@ name = "p7zip_jll" uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.5.0+2" +version = "17.7.0+0" [deps] -Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" Artifacts = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +CompilerSupportLibraries_jll = "e66e0078-7015-5450-92f7-15fbd957f2ae" +Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" [compat] julia = "1.6" From d9323c0906ff3e30835a8d1b5cae37e78667b6ea Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Wed, 5 Nov 2025 22:16:05 +0100 Subject: [PATCH 26/26] fix string completion with cursor in the middle of text --- stdlib/REPL/src/REPLCompletions.jl | 2 +- stdlib/REPL/test/replcompletions.jl | 39 +++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/stdlib/REPL/src/REPLCompletions.jl b/stdlib/REPL/src/REPLCompletions.jl index aafa8c04415d5..cd13f0880d7c4 100644 --- a/stdlib/REPL/src/REPLCompletions.jl +++ b/stdlib/REPL/src/REPLCompletions.jl @@ -1051,7 +1051,7 @@ function completions(string::String, pos::Int, context_module::Module=Main, shif # "~/example.txt TAB => "/home/user/example.txt" r, closed = find_str(cur) if r !== nothing - s = do_string_unescape(string[r]) + s = do_string_unescape(string[intersect(r, 1:pos)]) ret, success = complete_path_string(s, hint; string_escape=true, dirsep=Sys.iswindows() ? '\\' : '/') if length(ret) == 1 && !closed && close_path_completion(ret[1].path) diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index da1edb4d6542e..de723cf83d0e7 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -1455,6 +1455,45 @@ let (c, r) = test_complete("cd(\"folder_do_not_exist_77/file") @test length(c) == 0 end +# Test path completion in the middle of a line (issue #60050) +mktempdir() do path + # Create test directory structure + foo_dir = joinpath(path, "foo_dir") + mkpath(foo_dir) + touch(joinpath(path, "foo_file.txt")) + + # On Windows, use backslashes; on Unix, use forward slashes + sep = Sys.iswindows() ? "\\\\" : "/" + # On Windows, completion results have escaped backslashes + path_expected = Sys.iswindows() ? replace(path, "\\" => "\\\\") : path + + # Completion at end of line should work + let (c, r, res) = test_complete("\"$(path)$(sep)foo") + @test res + @test length(c) == 2 + @test "$(path_expected)$(sep)foo_dir$(sep)" in c + @test "$(path_expected)$(sep)foo_file.txt" in c + end + + # Completion in middle of line should also work (regression in 1.12) + let (c, r, res) = test_complete_pos("\"$(path)$(sep)foo|$(sep)bar.toml\"") + @test res + @test length(c) == 2 + @test "$(path_expected)$(sep)foo_dir$(sep)" in c + @test "$(path_expected)$(sep)foo_file.txt" in c + # Check that the range covers only the part before the cursor + @test findfirst("$(sep)bar", "\"$(path)$(sep)foo$(sep)bar.toml\"")[1] - 1 in r + end + + # Completion in middle of function call with trailing arguments + let (c, r, res) = test_complete_pos("run_something(\"$(path)$(sep)foo|$(sep)bar.toml\"; kwarg=true)") + @test res + @test length(c) == 2 + @test "$(path_expected)$(sep)foo_dir$(sep)" in c + @test "$(path_expected)$(sep)foo_file.txt" in c + end +end + if Sys.iswindows() tmp = tempname() touch(tmp)