From 1f22caf4686a9e3c3e3a71102b290a4106f38f7f Mon Sep 17 00:00:00 2001 From: Max Horn Date: Thu, 8 Oct 2020 05:30:40 +0200 Subject: [PATCH] parse_dl_name_version: fix regex for .so files (#37921) ... by escaping the `.` in `.so`, to avoid matching files like `share/terminfo/c/cons60-iso` from ncurses --- base/binaryplatforms.jl | 2 +- test/binaryplatforms.jl | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/base/binaryplatforms.jl b/base/binaryplatforms.jl index fce94b073d775..24fe7b8b381d3 100644 --- a/base/binaryplatforms.jl +++ b/base/binaryplatforms.jl @@ -795,7 +795,7 @@ function parse_dl_name_version(path::String, os::String) dlregex = r"^(.*?)((?:\.[\d]+)*)\.dylib$" else # On Linux and FreeBSD, libraries look like `libnettle.so.6.3.0` - dlregex = r"^(.*?).so((?:\.[\d]+)*)$" + dlregex = r"^(.*?)\.so((?:\.[\d]+)*)$" end m = match(dlregex, basename(path)) diff --git a/test/binaryplatforms.jl b/test/binaryplatforms.jl index b4438a06aef15..ea7e867245712 100644 --- a/test/binaryplatforms.jl +++ b/test/binaryplatforms.jl @@ -261,21 +261,25 @@ end @test parse_dl_name_version("libgfortran.so.3.4", "linux") == ("libgfortran", v"3.4") @test_throws ArgumentError parse_dl_name_version("libgfortran.so.3.4a", "linux") @test_throws ArgumentError parse_dl_name_version("libgfortran", "linux") + @test_throws ArgumentError parse_dl_name_version("libgfortranso", "linux") @test parse_dl_name_version("libgfortran.so", "freebsd") == ("libgfortran", nothing) @test parse_dl_name_version("libgfortran.so.3", "freebsd") == ("libgfortran", v"3") @test parse_dl_name_version("libgfortran.so.3.4", "freebsd") == ("libgfortran", v"3.4") @test_throws ArgumentError parse_dl_name_version("libgfortran.so.3.4a", "freebsd") @test_throws ArgumentError parse_dl_name_version("libgfortran", "freebsd") + @test_throws ArgumentError parse_dl_name_version("libgfortranso", "freebsd") @test parse_dl_name_version("libgfortran.dylib", "macos") == ("libgfortran", nothing) @test parse_dl_name_version("libgfortran.3.dylib", "macos") == ("libgfortran", v"3") @test parse_dl_name_version("libgfortran.3.4.dylib", "macos") == ("libgfortran", v"3.4") @test parse_dl_name_version("libgfortran.3.4a.dylib", "macos") == ("libgfortran.3.4a", nothing) @test_throws ArgumentError parse_dl_name_version("libgfortran", "macos") + @test_throws ArgumentError parse_dl_name_version("libgfortrandylib", "macos") @test parse_dl_name_version("libgfortran.dll", "windows") == ("libgfortran", nothing) @test parse_dl_name_version("libgfortran-3.dll", "windows") == ("libgfortran", v"3") @test parse_dl_name_version("libgfortran-3.4.dll", "windows") == ("libgfortran", v"3.4") @test parse_dl_name_version("libgfortran-3.4a.dll", "windows") == ("libgfortran-3.4a", nothing) @test_throws ArgumentError parse_dl_name_version("libgfortran", "windows") + @test_throws ArgumentError parse_dl_name_version("libgfortrandll", "windows") end @testset "Sys.is* overloading" begin