termux-packages/packages/ghc-libs/semaphore.patch
Aditya Alok 3165e3c2f4
feat(ghc-libs): link against libandroid-posix-semaphore
GHC unix lib uses `ccall` ffi which ignores include indirection. It
directly links against available symbols during compile.

Although, directly linking to `libandroid-posix-semaphore` should work
too, but that depends upon library load order during runtime, i.e if
`libc` is loaded before (very unlikely, unless LD_PRELOAD is set)
`libandroid-posix-semaphore`, it would use sem_{open,close,unlink} from
it, which isn't implemented.

So, to be sure that it always links against `libandroid-posix-semaphore`
symbols, I have patched it to use `capi` ffi which considers include
indirections.

Signed-off-by: Aditya Alok <dev.aditya.alok@gmail.com>
2022-04-11 19:47:18 +05:30

26 lines
983 B
Diff

--- ghc-8.10.7/libraries/unix/System/Posix/Semaphore.hsc 2020-04-19 14:47:09.000000000 +0530
+++ ghc-8.10.7-patch/libraries/unix/System/Posix/Semaphore.hsc 2022-04-11 12:43:10.193206043 +0530
@@ -3,6 +3,7 @@
#else
{-# LANGUAGE Trustworthy #-}
#endif
+{-# LANGUAGE CApiFFI #-}
-----------------------------------------------------------------------------
-- |
-- Module : System.Posix.Semaphore
@@ -114,11 +115,11 @@
cint <- peek ptr
return $ fromEnum cint
-foreign import ccall safe "sem_open"
+foreign import capi safe "semaphore.h sem_open"
sem_open :: CString -> CInt -> CMode -> CUInt -> IO (Ptr ())
-foreign import ccall safe "sem_close"
+foreign import capi safe "semaphore.h sem_close"
sem_close :: Ptr () -> IO CInt
-foreign import ccall safe "sem_unlink"
+foreign import capi safe "semaphore.h sem_unlink"
sem_unlink :: CString -> IO CInt
foreign import ccall safe "sem_wait"