swift: fix build w/ glibc-2.39
Failing Hydra build: https://hydra.nixos.org/build/249763077/nixlog/12 The problem is that glibc commit 64b1a44183a3094672ed304532bedb9acc707554 marked the `FILE*` argument of a few functions including `fread` & `ferror` as non-null. The applied patch ("Android: add better nullability checks for nullability annotations added in NDK 26") is targeted for the Android platform, but fixes said issue as well: the handle returned from `fopen` is of type `Optional<T>` and the `guard` expression unwraps that now (and throws an exception if `nil` is returned). The previous `nil`-check didn't modify the type of `fp`, but only raised the exception and moved on with `Optional<T>`. It's a little sad that the patch needs to be applied at so many places, but I guess that's what you get with language-level package managers 🤷 Also, seems good-enough to me given that it's actually temporary, the patch is already upstream and will probably be obsolete at one of the next Swift updates.
This commit is contained in:
parent
1c003da73c
commit
2dcdf60272
|
@ -1,6 +1,7 @@
|
||||||
{ lib
|
{ lib
|
||||||
, stdenv
|
, stdenv
|
||||||
, callPackage
|
, callPackage
|
||||||
|
, fetchpatch
|
||||||
, pkg-config
|
, pkg-config
|
||||||
, swift
|
, swift
|
||||||
, swiftpm
|
, swiftpm
|
||||||
|
@ -41,7 +42,11 @@ stdenv.mkDerivation {
|
||||||
patch -p1 -d .build/checkouts/indexstore-db -i ${./patches/indexstore-db-macos-target.patch}
|
patch -p1 -d .build/checkouts/indexstore-db -i ${./patches/indexstore-db-macos-target.patch}
|
||||||
|
|
||||||
swiftpmMakeMutable swift-tools-support-core
|
swiftpmMakeMutable swift-tools-support-core
|
||||||
patch -p1 -d .build/checkouts/swift-tools-support-core -i ${./patches/force-unwrap-file-handles.patch}
|
patch -p1 -d .build/checkouts/swift-tools-support-core -i ${fetchpatch {
|
||||||
|
url = "https://github.com/apple/swift-tools-support-core/commit/990afca47e75cce136d2f59e464577e68a164035.patch";
|
||||||
|
hash = "sha256-PLzWsp+syiUBHhEFS8+WyUcSae5p0Lhk7SSRdNvfouE=";
|
||||||
|
includes = [ "Sources/TSCBasic/FileSystem.swift" ];
|
||||||
|
}}
|
||||||
|
|
||||||
# This toggles a section specific to Xcode XCTest, which doesn't work on
|
# This toggles a section specific to Xcode XCTest, which doesn't work on
|
||||||
# Darwin, where we also use swift-corelibs-xctest.
|
# Darwin, where we also use swift-corelibs-xctest.
|
||||||
|
|
|
@ -54,7 +54,11 @@ stdenv.mkDerivation {
|
||||||
|
|
||||||
configurePhase = generated.configure + ''
|
configurePhase = generated.configure + ''
|
||||||
swiftpmMakeMutable swift-tools-support-core
|
swiftpmMakeMutable swift-tools-support-core
|
||||||
patch -p1 -d .build/checkouts/swift-tools-support-core -i ${./patches/force-unwrap-file-handles.patch}
|
patch -p1 -d .build/checkouts/swift-tools-support-core -i ${fetchpatch {
|
||||||
|
url = "https://github.com/apple/swift-tools-support-core/commit/990afca47e75cce136d2f59e464577e68a164035.patch";
|
||||||
|
hash = "sha256-PLzWsp+syiUBHhEFS8+WyUcSae5p0Lhk7SSRdNvfouE=";
|
||||||
|
includes = [ "Sources/TSCBasic/FileSystem.swift" ];
|
||||||
|
}}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# TODO: Tests depend on indexstore-db being provided by an existing Swift
|
# TODO: Tests depend on indexstore-db being provided by an existing Swift
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
From 8d9ab4b6ed24a97e8af0cc338a52aacdcf438b8c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pavel Sobolev <paveloom@riseup.net>
|
|
||||||
Date: Tue, 21 Nov 2023 20:53:33 +0300
|
|
||||||
Subject: [PATCH] Force-unwrap file handles.
|
|
||||||
|
|
||||||
---
|
|
||||||
Sources/TSCBasic/FileSystem.swift | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Sources/TSCBasic/FileSystem.swift b/Sources/TSCBasic/FileSystem.swift
|
|
||||||
index 3a63bdf..a1f3d9d 100644
|
|
||||||
--- a/Sources/TSCBasic/FileSystem.swift
|
|
||||||
+++ b/Sources/TSCBasic/FileSystem.swift
|
|
||||||
@@ -425,7 +425,7 @@ private class LocalFileSystem: FileSystem {
|
|
||||||
if fp == nil {
|
|
||||||
throw FileSystemError(errno: errno, path)
|
|
||||||
}
|
|
||||||
- defer { fclose(fp) }
|
|
||||||
+ defer { fclose(fp!) }
|
|
||||||
|
|
||||||
// Read the data one block at a time.
|
|
||||||
let data = BufferedOutputByteStream()
|
|
||||||
@@ -455,7 +455,7 @@ private class LocalFileSystem: FileSystem {
|
|
||||||
if fp == nil {
|
|
||||||
throw FileSystemError(errno: errno, path)
|
|
||||||
}
|
|
||||||
- defer { fclose(fp) }
|
|
||||||
+ defer { fclose(fp!) }
|
|
||||||
|
|
||||||
// Write the data in one chunk.
|
|
||||||
var contents = bytes.contents
|
|
||||||
--
|
|
||||||
2.42.0
|
|
|
@ -1,5 +1,6 @@
|
||||||
{ lib
|
{ lib
|
||||||
, stdenv
|
, stdenv
|
||||||
|
, fetchpatch
|
||||||
, callPackage
|
, callPackage
|
||||||
, swift
|
, swift
|
||||||
, swiftpm
|
, swiftpm
|
||||||
|
@ -21,7 +22,11 @@ stdenv.mkDerivation {
|
||||||
|
|
||||||
configurePhase = generated.configure + ''
|
configurePhase = generated.configure + ''
|
||||||
swiftpmMakeMutable swift-tools-support-core
|
swiftpmMakeMutable swift-tools-support-core
|
||||||
patch -p1 -d .build/checkouts/swift-tools-support-core -i ${./patches/force-unwrap-file-handles.patch}
|
patch -p1 -d .build/checkouts/swift-tools-support-core -i ${fetchpatch {
|
||||||
|
url = "https://github.com/apple/swift-tools-support-core/commit/990afca47e75cce136d2f59e464577e68a164035.patch";
|
||||||
|
hash = "sha256-PLzWsp+syiUBHhEFS8+WyUcSae5p0Lhk7SSRdNvfouE=";
|
||||||
|
includes = [ "Sources/TSCBasic/FileSystem.swift" ];
|
||||||
|
}}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# We only install the swift-format binary, so don't need the other products.
|
# We only install the swift-format binary, so don't need the other products.
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
From 8d9ab4b6ed24a97e8af0cc338a52aacdcf438b8c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pavel Sobolev <paveloom@riseup.net>
|
|
||||||
Date: Tue, 21 Nov 2023 20:53:33 +0300
|
|
||||||
Subject: [PATCH] Force-unwrap file handles.
|
|
||||||
|
|
||||||
---
|
|
||||||
Sources/TSCBasic/FileSystem.swift | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Sources/TSCBasic/FileSystem.swift b/Sources/TSCBasic/FileSystem.swift
|
|
||||||
index 3a63bdf..a1f3d9d 100644
|
|
||||||
--- a/Sources/TSCBasic/FileSystem.swift
|
|
||||||
+++ b/Sources/TSCBasic/FileSystem.swift
|
|
||||||
@@ -425,7 +425,7 @@ private class LocalFileSystem: FileSystem {
|
|
||||||
if fp == nil {
|
|
||||||
throw FileSystemError(errno: errno, path)
|
|
||||||
}
|
|
||||||
- defer { fclose(fp) }
|
|
||||||
+ defer { fclose(fp!) }
|
|
||||||
|
|
||||||
// Read the data one block at a time.
|
|
||||||
let data = BufferedOutputByteStream()
|
|
||||||
@@ -455,7 +455,7 @@ private class LocalFileSystem: FileSystem {
|
|
||||||
if fp == nil {
|
|
||||||
throw FileSystemError(errno: errno, path)
|
|
||||||
}
|
|
||||||
- defer { fclose(fp) }
|
|
||||||
+ defer { fclose(fp!) }
|
|
||||||
|
|
||||||
// Write the data in one chunk.
|
|
||||||
var contents = bytes.contents
|
|
||||||
--
|
|
||||||
2.42.0
|
|
|
@ -1,6 +1,7 @@
|
||||||
{ lib
|
{ lib
|
||||||
, stdenv
|
, stdenv
|
||||||
, callPackage
|
, callPackage
|
||||||
|
, fetchpatch
|
||||||
, cmake
|
, cmake
|
||||||
, ninja
|
, ninja
|
||||||
, git
|
, git
|
||||||
|
@ -195,12 +196,22 @@ let
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Part of this patch fixes for glibc 2.39: glibc patch 64b1a44183a3094672ed304532bedb9acc707554
|
||||||
|
# marks the `FILE*` argument to a few functions including `ferror` & `fread` as non-null. However
|
||||||
|
# the code passes an `Optional<T>` to these functions.
|
||||||
|
# This patch uses a `guard` which effectively unwraps the type (or throws an exception).
|
||||||
|
swift-tools-support-core-glibc-fix = fetchpatch {
|
||||||
|
url = "https://github.com/apple/swift-tools-support-core/commit/990afca47e75cce136d2f59e464577e68a164035.patch";
|
||||||
|
hash = "sha256-PLzWsp+syiUBHhEFS8+WyUcSae5p0Lhk7SSRdNvfouE=";
|
||||||
|
includes = [ "Sources/TSCBasic/FileSystem.swift" ];
|
||||||
|
};
|
||||||
|
|
||||||
swift-tools-support-core = mkBootstrapDerivation {
|
swift-tools-support-core = mkBootstrapDerivation {
|
||||||
name = "swift-tools-support-core";
|
name = "swift-tools-support-core";
|
||||||
src = generated.sources.swift-tools-support-core;
|
src = generated.sources.swift-tools-support-core;
|
||||||
|
|
||||||
patches = [
|
patches = [
|
||||||
./patches/force-unwrap-file-handles.patch
|
swift-tools-support-core-glibc-fix
|
||||||
];
|
];
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
|
@ -389,7 +400,7 @@ in stdenv.mkDerivation (commonAttrs // {
|
||||||
swiftpmMakeMutable swift-tools-support-core
|
swiftpmMakeMutable swift-tools-support-core
|
||||||
substituteInPlace .build/checkouts/swift-tools-support-core/Sources/TSCTestSupport/XCTestCasePerf.swift \
|
substituteInPlace .build/checkouts/swift-tools-support-core/Sources/TSCTestSupport/XCTestCasePerf.swift \
|
||||||
--replace 'canImport(Darwin)' 'false'
|
--replace 'canImport(Darwin)' 'false'
|
||||||
patch -p1 -d .build/checkouts/swift-tools-support-core -i ${./patches/force-unwrap-file-handles.patch}
|
patch -p1 -d .build/checkouts/swift-tools-support-core -i ${swift-tools-support-core-glibc-fix}
|
||||||
|
|
||||||
# Prevent a warning about SDK directories we don't have.
|
# Prevent a warning about SDK directories we don't have.
|
||||||
swiftpmMakeMutable swift-driver
|
swiftpmMakeMutable swift-driver
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
From 8d9ab4b6ed24a97e8af0cc338a52aacdcf438b8c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pavel Sobolev <paveloom@riseup.net>
|
|
||||||
Date: Tue, 21 Nov 2023 20:53:33 +0300
|
|
||||||
Subject: [PATCH] Force-unwrap file handles.
|
|
||||||
|
|
||||||
---
|
|
||||||
Sources/TSCBasic/FileSystem.swift | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Sources/TSCBasic/FileSystem.swift b/Sources/TSCBasic/FileSystem.swift
|
|
||||||
index 3a63bdf..a1f3d9d 100644
|
|
||||||
--- a/Sources/TSCBasic/FileSystem.swift
|
|
||||||
+++ b/Sources/TSCBasic/FileSystem.swift
|
|
||||||
@@ -425,7 +425,7 @@ private class LocalFileSystem: FileSystem {
|
|
||||||
if fp == nil {
|
|
||||||
throw FileSystemError(errno: errno, path)
|
|
||||||
}
|
|
||||||
- defer { fclose(fp) }
|
|
||||||
+ defer { fclose(fp!) }
|
|
||||||
|
|
||||||
// Read the data one block at a time.
|
|
||||||
let data = BufferedOutputByteStream()
|
|
||||||
@@ -455,7 +455,7 @@ private class LocalFileSystem: FileSystem {
|
|
||||||
if fp == nil {
|
|
||||||
throw FileSystemError(errno: errno, path)
|
|
||||||
}
|
|
||||||
- defer { fclose(fp) }
|
|
||||||
+ defer { fclose(fp!) }
|
|
||||||
|
|
||||||
// Write the data in one chunk.
|
|
||||||
var contents = bytes.contents
|
|
||||||
--
|
|
||||||
2.42.0
|
|
Loading…
Reference in New Issue
Block a user