From ee1e29b44fe50c2906eac69fd4fbf3feabfc6e19 Mon Sep 17 00:00:00 2001 From: Hemant Shrestha Date: Thu, 15 May 2025 12:35:14 +0200 Subject: [PATCH 1/5] checkes before importing Glibc or Musl --- .DS_Store | Bin 0 -> 6148 bytes Sources/Signals/Signals.swift | 6 ++++-- 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..02004a7b7c5fd4cd8853605ccde46caad94ab680 GIT binary patch literal 6148 zcmeHKK~BRk5S)b`B5^4T>)3X75Gv>&xgRGSZ0id>F8jUQUIbpqm$9s zTtYb^W0^4;a)c&EB^p(7iXld4f5>rV#%O4CNKQT^ul$+3NLroqhZGJe4ZU^+T!Eni zht{0x{eRA1W;DqkQoQ8~xB~x70hv^FHRng=yY<`W>0KLGE?LwxE~-PLKX?SNq36g+ e8np4CKI6)a(NJg6{zNDGLm&y_l`HTI3VZ;WCqM`Q literal 0 HcmV?d00001 diff --git a/Sources/Signals/Signals.swift b/Sources/Signals/Signals.swift index dba84e2..5d58c37 100644 --- a/Sources/Signals/Signals.swift +++ b/Sources/Signals/Signals.swift @@ -20,8 +20,10 @@ #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) import Darwin -#elseif os(Linux) - import Glibc +#elseif canImport(Glibc) +import Glibc +#elseif canImport(Musl) +import Musl #endif import Foundation From 78276969301d15986a6f8a26d22efb287d776b2e Mon Sep 17 00:00:00 2001 From: Hemant Shrestha Date: Fri, 16 May 2025 10:37:13 +0200 Subject: [PATCH 2/5] quick fixes some issues with Glib notfound, SIGINFO not found and sigAtion.__sigaction_handler not found --- .DS_Store | Bin 6148 -> 6148 bytes Package.swift | 2 +- Sources/Signals/Signals.swift | 73 +++++++++++++++++++++++----------- 3 files changed, 50 insertions(+), 25 deletions(-) diff --git a/.DS_Store b/.DS_Store index 02004a7b7c5fd4cd8853605ccde46caad94ab680..4adabbeb12e696aae8bbe70fce1761b96de39720 100644 GIT binary patch delta 89 zcmZoMXfc=|#>B)qu~2NHo+2ab#DLw4m>3yZC-X2q7H4M&X2@qKWhi1uW=LfyPAN{# pNy^X9+58cxU^6=hKL=1Fkn^2+GQWr=2O|Rm5HT=p4iMSG3;-5=7B2t* delta 66 zcmZoMXfc=|#>B`mu~2NHo+2a5#DLw5ER%Vd9&Z+9{=~AeL5*=UI|n}pP{n3J=I_jt U`9&-_7=VD0fq`jrfXEhR07>)@!T Date: Mon, 19 May 2025 15:06:32 +0200 Subject: [PATCH 3/5] Refactor signal handling for Linux to properly differentiate between Musl and Glibc imports --- Sources/Signals/Signals.swift | 101 +++++++++++++++++----------------- 1 file changed, 49 insertions(+), 52 deletions(-) diff --git a/Sources/Signals/Signals.swift b/Sources/Signals/Signals.swift index 73e65de..86cff2d 100644 --- a/Sources/Signals/Signals.swift +++ b/Sources/Signals/Signals.swift @@ -20,10 +20,12 @@ #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) import Darwin -#elseif canImport(Glibc) - import Glibc -#elseif canImport(Musl) +#elseif os(Linux) + #if canImport(Musl) import Musl + #else + import Glibc + #endif #endif import Foundation @@ -93,11 +95,15 @@ public class Signals { case .winch: return Int32(SIGWINCH) - #if os(Linux) - case .info: return Int32(SIGUSR1) - #else +#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) || canImport(Glibc) case .info: return Int32(SIGINFO) - #endif +#elseif os(Linux) + #if canImport(Musl) + case .info: return Int32(SIGUSR1) // No SIGINFO signal in Musl. SIGUSR1 may be the best alternative for SIGINFO in Musl + #else + case .info: return Int32(SIGINFO) + #endif +#endif case .user(let sig): return Int32(sig) @@ -123,12 +129,16 @@ public class Signals { case Int(SIGIO): self = .io case Int(SIGPROF): self = .prof case Int(SIGWINCH): self = .winch -#if os(Linux) -#else +#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) || canImport(Glibc) + case Int(SIGINFO): self = .info +#elseif os(Linux) + #if canImport(Musl) + // no SIGINFO in Musl + #else case Int(SIGINFO): self = .info + #endif #endif - default: self = .user(rawValue) } @@ -164,23 +174,17 @@ public class Signals { sigaction(signal.rawValue, actionPointer, nil) } -// #elseif os(Linux) -// -// var sigAction = sigaction() -// -// sigAction.__sigaction_handler = unsafeBitCast(action, to: sigaction.__Unnamed_union___sigaction_handler.self) -// -// _ = sigaction(signal.rawValue, &sigAction, nil) - #elseif canImport(Glibc) - - var sigAction = sigaction() + #elseif os(Linux) + #if canImport(Musl) + // Musl: sigAction is not supported or need more research for alternative + #else + var sigAction = sigaction() - sigAction.__sigaction_handler = unsafeBitCast(action, to: sigaction.__Unnamed_union___sigaction_handler.self) + sigAction.__sigaction_handler = unsafeBitCast(action, to: sigaction.__Unnamed_union___sigaction_handler.self) - _ = sigaction(signal.rawValue, &sigAction, nil) - #else - // Musl: Signal setup is not supported - + _ = sigaction(signal.rawValue, &sigAction, nil) + #endif + #endif } @@ -220,15 +224,13 @@ public class Signals { public class func raise(signal: Signal) { #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) - _ = Darwin.raise(signal.rawValue) -// #elseif os(Linux) -// -// _ = Glibc.raise(signal.rawValue) - #elseif canImport(Glibc) - _ = Glibc.raise(signal.rawValue) - #elseif canImport(Musl) - _ = Musl.raise(signal.rawValue) + #elseif os(Linux) + #if canImport(Musl) + _ = Musl.raise(signal.rawValue) + #else + _ = Glibc.raise(signal.rawValue) + #endif #endif } @@ -242,15 +244,13 @@ public class Signals { #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) _ = Darwin.signal(signal.rawValue, SIG_IGN) -// #elseif os(Linux) -// -// _ = Glibc.signal(signal.rawValue, SIG_IGN) - #elseif canImport(Glibc) - _ = Glibc.signal(signal.rawValue, SIG_IGN) - #elseif canImport(Musl) - _ = Musl.signal(signal.rawValue, SIG_IGN) - - #endif + #elseif os(Linux) + #if canImport(Musl) + _ = Musl.signal(signal.rawValue, SIG_IGN) + #else + _ = Glibc.signal(signal.rawValue, SIG_IGN) + #endif + #endif } /// @@ -261,17 +261,14 @@ public class Signals { public class func restore(signal: Signal) { #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS) - _ = Darwin.signal(signal.rawValue, SIG_DFL) -// #elseif os(Linux) -// -// _ = Glibc.signal(signal.rawValue, SIG_DFL) - #elseif canImport(Glibc) - _ = Glibc.signal(signal.rawValue, SIG_IGN) - #elseif canImport(Musl) - _ = Musl.signal(signal.rawValue, SIG_IGN) - - #endif + #elseif os(Linux) + #if canImport(Musl) + _ = Musl.signal(signal.rawValue, SIG_DFL) + #else + _ = Glibc.signal(signal.rawValue, SIG_DFL) + #endif + #endif } } From a5c83830903d28b885797a6b47fe08dd5a6e2319 Mon Sep 17 00:00:00 2001 From: Hemant Shrestha Date: Mon, 19 May 2025 15:10:22 +0200 Subject: [PATCH 4/5] Add GitHub Actions workflow for testing Swift builds with Musl and Glibc --- .DS_Store | Bin 6148 -> 8196 bytes .../test-swift-build-with-musl-and-glibc.yaml | 48 ++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 .github/workflow/test-swift-build-with-musl-and-glibc.yaml diff --git a/.DS_Store b/.DS_Store index 4adabbeb12e696aae8bbe70fce1761b96de39720..47a2ee13369c20881edcd2dee0b00992dfbc1525 100644 GIT binary patch literal 8196 zcmeHM(P|Sx6g^XejTVa{g}w;;16?Ti0o#}e1r=$2!0v8LV>j8*Bv#+{-GA^8#J}*t zPw@i;A4Jcc8SCyOks@dX@4(F2%-nPD-7~wH-V}i8Eb@I|7eJd`@b(sm6;0NqFSQLn zvqLoG0|oMYmKAAP7E9JTp$e!1s(>n>3aA4Af&x6VrM1_b`)*Z7RX`Q^FBOpQhlpJ; z@mM*uUmYB52|#Rd+BROZ4zQfaW8$%LXsPt+st4n##+Mkz(YYRpIWh5AIdpUwM~Cr| zjjvFQjZR)<&0!LUI;sMyz_J2TyI)6)6bp>P`n|=4A*bhuMVX~VnbKI^uLJh@n{B)T zHhAr zO>RNXgg#=t#u!Dwm0auGb|dZ-bqEQtLk$aNEsaEJ%!;R*fp0_!h<^({PQlnkdFhxA_4x5>17QO|ZK zU?$A(=g!<;?@4yXY}aWJ1)Cj|CY5szgytz zrw{U`U5c6iCUbgH&$MDVzRi8Au%H$hHJJr!$a7TJGqA4x{1=Hc9@mM-${}ai^!&Fn z=%5N*nF7~b*C$Q3sIL%_75EN+=_?KZ delta 139 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{MGjUEV6q~50D9Q?w2a6>#EN1865M&0b2Lb_ZAmIu!XJg@a=E?jrjv$LbCb58M OCWuX7vCZ*3bC>} Date: Mon, 19 May 2025 15:41:20 +0200 Subject: [PATCH 5/5] remove ds_store --- .DS_Store | Bin 8196 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 47a2ee13369c20881edcd2dee0b00992dfbc1525..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHM(P|Sx6g^XejTVa{g}w;;16?Ti0o#}e1r=$2!0v8LV>j8*Bv#+{-GA^8#J}*t zPw@i;A4Jcc8SCyOks@dX@4(F2%-nPD-7~wH-V}i8Eb@I|7eJd`@b(sm6;0NqFSQLn zvqLoG0|oMYmKAAP7E9JTp$e!1s(>n>3aA4Af&x6VrM1_b`)*Z7RX`Q^FBOpQhlpJ; z@mM*uUmYB52|#Rd+BROZ4zQfaW8$%LXsPt+st4n##+Mkz(YYRpIWh5AIdpUwM~Cr| zjjvFQjZR)<&0!LUI;sMyz_J2TyI)6)6bp>P`n|=4A*bhuMVX~VnbKI^uLJh@n{B)T zHhAr zO>RNXgg#=t#u!Dwm0auGb|dZ-bqEQtLk$aNEsaEJ%!;R*fp0_!h<^({PQlnkdFhxA_4x5>17QO|ZK zU?$A(=g!<;?@4yXY}aWJ1)Cj|CY5szgytz zrw{U`U5c6iCUbgH&$MDVzRi8Au%H$hHJJr!$a7TJGqA4x{1=Hc9@mM-${}ai^!&Fn z=%5N*nF7~b*C$Q3sIL%_75EN+=_?KZ