From 351f9114b0b63eaa3d94e396330545e190774858 Mon Sep 17 00:00:00 2001 From: Pontus Stenetorp Date: Sat, 24 Apr 2021 15:42:14 +0000 Subject: [PATCH 1/2] julia: init julia_16-bin at 1.6.1 Relevant patches lifted from the `release-1.6` branch of my Julia fork: https://git.sr.ht/~ninjin/julia-nix/tree/release-1.6 --- pkgs/development/compilers/julia/1.6-bin.nix | 73 +++++++++++++++++++ ...Skip-tempname-test-broken-in-sandbox.patch | 28 +++++++ ...x-Skip-chown-tests-broken-in-sandbox.patch | 27 +++++++ ...able-parallel-unit-tests-for-sandbox.patch | 30 ++++++++ pkgs/top-level/all-packages.nix | 4 + 5 files changed, 162 insertions(+) create mode 100644 pkgs/development/compilers/julia/1.6-bin.nix create mode 100644 pkgs/development/compilers/julia/patches/1.6-bin/0002-nix-Skip-tempname-test-broken-in-sandbox.patch create mode 100644 pkgs/development/compilers/julia/patches/1.6-bin/0003-nix-Skip-chown-tests-broken-in-sandbox.patch create mode 100644 pkgs/development/compilers/julia/patches/1.6-bin/0005-nix-Enable-parallel-unit-tests-for-sandbox.patch diff --git a/pkgs/development/compilers/julia/1.6-bin.nix b/pkgs/development/compilers/julia/1.6-bin.nix new file mode 100644 index 0000000000000..19aab27ba7486 --- /dev/null +++ b/pkgs/development/compilers/julia/1.6-bin.nix @@ -0,0 +1,73 @@ +{ autoPatchelfHook, fetchurl, lib, stdenv }: + +stdenv.mkDerivation rec { + pname = "julia-bin"; + version = "1.6.1"; + + src = { + x86_64-linux = fetchurl { + url = "https://julialang-s3.julialang.org/bin/linux/x64/${lib.versions.majorMinor version}/julia-${version}-linux-x86_64.tar.gz"; + sha256 = "01i5sm4vqb0y5qznql571zap19b42775drrcxnzsyhpaqgg8m23w"; + }; + }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); + + # Julia’s source files are in different locations for source and binary + # releases. Thus we temporarily create a symlink to allow us to share patches + # with source releases. + prePatch = '' + ln -s share/julia/test + ''; + patches = [ + # Source release Nix patch(es) relevant for binary releases as well. + ./patches/1.6-bin/0002-nix-Skip-tempname-test-broken-in-sandbox.patch + ./patches/1.6-bin/0003-nix-Skip-chown-tests-broken-in-sandbox.patch + ./patches/1.6-bin/0005-nix-Enable-parallel-unit-tests-for-sandbox.patch + ]; + postPatch = '' + # Revert symlink hack. + rm test + + # Julia fails to pick up our Certification Authority root certificates, but + # it provides its own so we can simply disable the test. Patching in the + # dynamic path to ours require us to rebuild the Julia system image. + substituteInPlace share/julia/stdlib/v${lib.versions.majorMinor version}/NetworkOptions/test/runtests.jl \ + --replace '@test ca_roots_path() != bundled_ca_roots()' \ + '@test_skip ca_roots_path() != bundled_ca_roots()' + ''; + + nativeBuildInputs = [ autoPatchelfHook ]; + + installPhase = '' + runHook preInstall + cp -r . $out + runHook postInstall + ''; + + # Breaks backtraces, etc. + dontStrip = true; + + doInstallCheck = true; + preInstallCheck = '' + # Some tests require read/write access to $HOME. + export HOME="$TMPDIR" + ''; + installCheckPhase = '' + runHook preInstallCheck + # Command lifted from `test/Makefile`. + $out/bin/julia \ + --check-bounds=yes \ + --startup-file=no \ + --depwarn=error \ + $out/share/julia/test/runtests.jl + runHook postInstallCheck + ''; + + meta = { + description = "High-level, high-performance dynamic language for technical computing."; + homepage = "https://julialang.org"; + # Bundled and linked with various GPL code, although Julia itself is MIT. + license = lib.licenses.gpl2Plus; + maintainers = with lib.maintainers; [ ninjin raskin ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/pkgs/development/compilers/julia/patches/1.6-bin/0002-nix-Skip-tempname-test-broken-in-sandbox.patch b/pkgs/development/compilers/julia/patches/1.6-bin/0002-nix-Skip-tempname-test-broken-in-sandbox.patch new file mode 100644 index 0000000000000..d47efe25c5a09 --- /dev/null +++ b/pkgs/development/compilers/julia/patches/1.6-bin/0002-nix-Skip-tempname-test-broken-in-sandbox.patch @@ -0,0 +1,28 @@ +From ffe227676352a910754d96d92e9b06e475f28ff1 Mon Sep 17 00:00:00 2001 +From: Pontus Stenetorp +Date: Thu, 8 Apr 2021 04:25:19 +0000 +Subject: [PATCH 2/6] nix: Skip `tempname` test broken in sandbox + +Reported upstream: + + https://github.com/JuliaLang/julia/issues/38873 +--- + test/file.jl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/file.jl b/test/file.jl +index 0f39bc7c14..bd4dd78f62 100644 +--- a/test/file.jl ++++ b/test/file.jl +@@ -95,7 +95,7 @@ end + @test dirname(t) == tempdir() + mktempdir() do d + t = tempname(d) +- @test dirname(t) == d ++ @test_skip dirname(t) == d + end + @test_throws ArgumentError tempname(randstring()) + end +-- +2.29.3 + diff --git a/pkgs/development/compilers/julia/patches/1.6-bin/0003-nix-Skip-chown-tests-broken-in-sandbox.patch b/pkgs/development/compilers/julia/patches/1.6-bin/0003-nix-Skip-chown-tests-broken-in-sandbox.patch new file mode 100644 index 0000000000000..e63c88c8fe3b9 --- /dev/null +++ b/pkgs/development/compilers/julia/patches/1.6-bin/0003-nix-Skip-chown-tests-broken-in-sandbox.patch @@ -0,0 +1,27 @@ +From b20357fb1044d2c100172b1d5cbdf6c6d9bd3590 Mon Sep 17 00:00:00 2001 +From: Pontus Stenetorp +Date: Thu, 8 Apr 2021 05:10:39 +0000 +Subject: [PATCH 3/6] nix: Skip `chown` tests broken in sandbox + +--- + test/file.jl | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/test/file.jl b/test/file.jl +index bd4dd78f62..06fd4e49da 100644 +--- a/test/file.jl ++++ b/test/file.jl +@@ -503,8 +503,8 @@ if !Sys.iswindows() + @test stat(file).gid == 0 + @test stat(file).uid == 0 + else +- @test_throws Base._UVError("chown($(repr(file)), -2, -1)", Base.UV_EPERM) chown(file, -2, -1) # Non-root user cannot change ownership to another user +- @test_throws Base._UVError("chown($(repr(file)), -1, -2)", Base.UV_EPERM) chown(file, -1, -2) # Non-root user cannot change group to a group they are not a member of (eg: nogroup) ++ @test_skip @test_throws Base._UVError("chown($(repr(file)), -2, -1)", Base.UV_EPERM) chown(file, -2, -1) # Non-root user cannot change ownership to another user ++ @test_skip @test_throws Base._UVError("chown($(repr(file)), -1, -2)", Base.UV_EPERM) chown(file, -1, -2) # Non-root user cannot change group to a group they are not a member of (eg: nogroup) + end + else + # test that chown doesn't cause any errors for Windows +-- +2.29.3 + diff --git a/pkgs/development/compilers/julia/patches/1.6-bin/0005-nix-Enable-parallel-unit-tests-for-sandbox.patch b/pkgs/development/compilers/julia/patches/1.6-bin/0005-nix-Enable-parallel-unit-tests-for-sandbox.patch new file mode 100644 index 0000000000000..243a9cfd76aee --- /dev/null +++ b/pkgs/development/compilers/julia/patches/1.6-bin/0005-nix-Enable-parallel-unit-tests-for-sandbox.patch @@ -0,0 +1,30 @@ +From 44c2c979c4f2222567ce65f506cf47fb87482348 Mon Sep 17 00:00:00 2001 +From: Pontus Stenetorp +Date: Thu, 8 Apr 2021 04:37:44 +0000 +Subject: [PATCH 5/6] nix: Enable parallel unit tests for sandbox + +Disabled by default due to lack of networking in the Nix sandbox. This +greatly speeds up the build process on a multi-core system. +--- + test/runtests.jl | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/test/runtests.jl b/test/runtests.jl +index 2f9cd058bb..2f8c19fa32 100644 +--- a/test/runtests.jl ++++ b/test/runtests.jl +@@ -83,8 +83,9 @@ prepend!(tests, linalg_tests) + import LinearAlgebra + cd(@__DIR__) do + n = 1 +- if net_on +- n = min(Sys.CPU_THREADS, length(tests)) ++ if net_on || haskey(ENV, "NIX_BUILD_CORES") ++ x = haskey(ENV, "NIX_BUILD_CORES") ? parse(Int, ENV["NIX_BUILD_CORES"]) : Sys.CPU_THREADS ++ n = min(x, Sys.CPU_THREADS, length(tests)) + n > 1 && addprocs_with_testenv(n) + LinearAlgebra.BLAS.set_num_threads(1) + end +-- +2.29.3 + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1544ad8c68dc0..74260b966b760 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11113,6 +11113,10 @@ in julia-stable = julia_15; julia = julia-lts; + julia_16-bin = callPackage ../development/compilers/julia/1.6-bin.nix { }; + julia-stable-bin = julia_16-bin; + + jwasm = callPackage ../development/compilers/jwasm { }; knightos-genkfs = callPackage ../development/tools/knightos/genkfs { }; From 8949ae188a04bee92b57778ad4d94948fd4b4b0b Mon Sep 17 00:00:00 2001 From: Pontus Stenetorp Date: Tue, 27 Apr 2021 14:39:21 +0000 Subject: [PATCH 2/2] julia: init julia_10-bin at 1.0.5 Almost as clean as it could be, but was forced to set `LD_LIBRARY_PATH` to work around a `Libdl` failure that is unique to v1.0.x. --- pkgs/development/compilers/julia/1.0-bin.nix | 72 +++++++++++++++ ...ip-tests-that-require-network-access.patch | 87 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 5 +- 3 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/compilers/julia/1.0-bin.nix create mode 100644 pkgs/development/compilers/julia/patches/1.0-bin/0002-nix-Skip-tests-that-require-network-access.patch diff --git a/pkgs/development/compilers/julia/1.0-bin.nix b/pkgs/development/compilers/julia/1.0-bin.nix new file mode 100644 index 0000000000000..50c421bbd4314 --- /dev/null +++ b/pkgs/development/compilers/julia/1.0-bin.nix @@ -0,0 +1,72 @@ +{ autoPatchelfHook, fetchurl, lib, makeWrapper, openssl, stdenv }: + +stdenv.mkDerivation rec { + pname = "julia-bin"; + version = "1.0.5"; + + src = { + x86_64-linux = fetchurl { + url = "https://julialang-s3.julialang.org/bin/linux/x64/${lib.versions.majorMinor version}/julia-${version}-linux-x86_64.tar.gz"; + sha256 = "00vbszpjmz47nqy19v83xa463ajhzwanjyg5mvcfp9kvfw9xdvcx"; + }; + }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); + + # Julia’s source files are in different locations for source and binary + # releases. Thus we temporarily create symlinks to allow us to share patches + # with source releases. + prePatch = '' + ln -s share/julia/stdlib/v${lib.versions.majorMinor version} stdlib + ln -s share/julia/test + ''; + patches = [ + # Source release Nix patch(es) relevant for binary releases as well. + ./patches/1.0-bin/0002-nix-Skip-tests-that-require-network-access.patch + ]; + postPatch = '' + # Revert symlink hack. + rm stdlib test + ''; + + buildInputs = [ makeWrapper ]; + nativeBuildInputs = [ autoPatchelfHook ]; + + installPhase = '' + runHook preInstall + cp -r . $out + # Setting `LD_LIBRARY_PATH` resolves `Libdl` failures. Not sure why this is + # only necessary on v1.0.x and a cleaner solution is welcome, but after + # staring at `strace` for a few hours this is as clean as I could make it. + wrapProgram $out/bin/julia \ + --suffix LD_LIBRARY_PATH : $out/lib + runHook postInstall + ''; + + # Breaks backtraces, etc. + dontStrip = true; + + doInstallCheck = true; + installCheckInputs = [ openssl ]; + preInstallCheck = '' + # Some tests require read/write access to $HOME. + export HOME="$TMPDIR" + ''; + installCheckPhase = '' + runHook preInstallCheck + # Command lifted from `test/Makefile`. + $out/bin/julia \ + --check-bounds=yes \ + --startup-file=no \ + --depwarn=error \ + $out/share/julia/test/runtests.jl + runHook postInstallCheck + ''; + + meta = { + description = "High-level, high-performance dynamic language for technical computing"; + homepage = "https://julialang.org"; + # Bundled and linked with various GPL code, although Julia itself is MIT. + license = lib.licenses.gpl2Plus; + maintainers = with lib.maintainers; [ ninjin raskin ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/pkgs/development/compilers/julia/patches/1.0-bin/0002-nix-Skip-tests-that-require-network-access.patch b/pkgs/development/compilers/julia/patches/1.0-bin/0002-nix-Skip-tests-that-require-network-access.patch new file mode 100644 index 0000000000000..0de1f7c010d39 --- /dev/null +++ b/pkgs/development/compilers/julia/patches/1.0-bin/0002-nix-Skip-tests-that-require-network-access.patch @@ -0,0 +1,87 @@ +From 4954b99efae367da49412edd31a7bd832ec62c69 Mon Sep 17 00:00:00 2001 +From: Pontus Stenetorp +Date: Mon, 15 Mar 2021 05:55:18 +0000 +Subject: [PATCH 2/3] nix: Skip tests that require network access + +Necessary as the Nix build sandbox does not permit network access. +--- + stdlib/Sockets/test/runtests.jl | 40 ++++++++++++++++----------------- + test/file.jl | 4 ++-- + 2 files changed, 22 insertions(+), 22 deletions(-) + +diff --git a/stdlib/Sockets/test/runtests.jl b/stdlib/Sockets/test/runtests.jl +index 6145f87616..9cc7a001e5 100644 +--- a/stdlib/Sockets/test/runtests.jl ++++ b/stdlib/Sockets/test/runtests.jl +@@ -151,33 +151,33 @@ defaultport = rand(2000:4000) + end + + @testset "getnameinfo on some unroutable IP addresses (RFC 5737)" begin +- @test getnameinfo(ip"192.0.2.1") == "192.0.2.1" +- @test getnameinfo(ip"198.51.100.1") == "198.51.100.1" +- @test getnameinfo(ip"203.0.113.1") == "203.0.113.1" +- @test getnameinfo(ip"0.1.1.1") == "0.1.1.1" +- @test getnameinfo(ip"::ffff:0.1.1.1") == "::ffff:0.1.1.1" +- @test getnameinfo(ip"::ffff:192.0.2.1") == "::ffff:192.0.2.1" +- @test getnameinfo(ip"2001:db8::1") == "2001:db8::1" ++ @test_skip getnameinfo(ip"192.0.2.1") == "192.0.2.1" ++ @test_skip getnameinfo(ip"198.51.100.1") == "198.51.100.1" ++ @test_skip getnameinfo(ip"203.0.113.1") == "203.0.113.1" ++ @test_skip getnameinfo(ip"0.1.1.1") == "0.1.1.1" ++ @test_skip getnameinfo(ip"::ffff:0.1.1.1") == "::ffff:0.1.1.1" ++ @test_skip getnameinfo(ip"::ffff:192.0.2.1") == "::ffff:192.0.2.1" ++ @test_skip getnameinfo(ip"2001:db8::1") == "2001:db8::1" + end + + @testset "getnameinfo on some valid IP addresses" begin + @test !isempty(getnameinfo(ip"::")::String) +- @test !isempty(getnameinfo(ip"0.0.0.0")::String) +- @test !isempty(getnameinfo(ip"10.1.0.0")::String) +- @test !isempty(getnameinfo(ip"10.1.0.255")::String) +- @test !isempty(getnameinfo(ip"10.1.255.1")::String) +- @test !isempty(getnameinfo(ip"255.255.255.255")::String) +- @test !isempty(getnameinfo(ip"255.255.255.0")::String) +- @test !isempty(getnameinfo(ip"192.168.0.1")::String) +- @test !isempty(getnameinfo(ip"::1")::String) ++ @test_skip !isempty(getnameinfo(ip"0.0.0.0")::String) ++ @test_skip !isempty(getnameinfo(ip"10.1.0.0")::String) ++ @test_skip !isempty(getnameinfo(ip"10.1.0.255")::String) ++ @test_skip !isempty(getnameinfo(ip"10.1.255.1")::String) ++ @test_skip !isempty(getnameinfo(ip"255.255.255.255")::String) ++ @test_skip !isempty(getnameinfo(ip"255.255.255.0")::String) ++ @test_skip !isempty(getnameinfo(ip"192.168.0.1")::String) ++ @test_skip !isempty(getnameinfo(ip"::1")::String) + end + + @testset "getaddrinfo" begin +- let localhost = getnameinfo(ip"127.0.0.1")::String +- @test !isempty(localhost) && localhost != "127.0.0.1" +- @test !isempty(getalladdrinfo(localhost)::Vector{IPAddr}) +- @test getaddrinfo(localhost, IPv4)::IPv4 != ip"0.0.0.0" +- @test try ++ let localhost = getnameinfo(ip"::")::String ++ @test_skip !isempty(localhost) && localhost != "127.0.0.1" ++ @test_skip !isempty(getalladdrinfo(localhost)::Vector{IPAddr}) ++ @test_skip getaddrinfo(localhost, IPv4)::IPv4 != ip"0.0.0.0" ++ @test_skip try + getaddrinfo(localhost, IPv6)::IPv6 != ip"::" + catch ex + isa(ex, Sockets.DNSError) && ex.code == Base.UV_EAI_NONAME && ex.host == localhost +diff --git a/test/file.jl b/test/file.jl +index e86476f975..579276f82c 100644 +--- a/test/file.jl ++++ b/test/file.jl +@@ -874,8 +874,8 @@ if !Sys.iswindows() || (Sys.windows_version() >= Sys.WINDOWS_VISTA_VER) + else + @test_throws ErrorException symlink(file, "ba\0d") + end +-@test_throws ArgumentError download("good", "ba\0d") +-@test_throws ArgumentError download("ba\0d", "good") ++@test_skip @test_throws ArgumentError download("good", "ba\0d") ++@test_skip @test_throws ArgumentError download("ba\0d", "good") + + ################### + # walkdir # +-- +2.29.3 + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 74260b966b760..a3c56ab551623 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11113,9 +11113,12 @@ in julia-stable = julia_15; julia = julia-lts; + julia_10-bin = callPackage ../development/compilers/julia/1.0-bin.nix { }; julia_16-bin = callPackage ../development/compilers/julia/1.6-bin.nix { }; - julia-stable-bin = julia_16-bin; + julia-lts-bin = julia_10-bin; + julia-stable-bin = julia_16-bin; + julia-bin = julia-lts-bin; jwasm = callPackage ../development/compilers/jwasm { };