Fix Windows build to work with ghc 7.10
It was failing at link time, some problem with terminatePID.
Re-implemented that to not use a C wrapper function, which cleared up the
problem. Removed old EvilLinker hack with must have been related to the
same problem.
Note that I have not tested this with older ghc's. In
f11f7520b5
I mention having tried this
approach before, and getting segfaults.. So, who knows. It seems to work
fine with ghc 7.10 at least.
This commit is contained in:
parent
4ee9cb9c6d
commit
86e638567a
5 changed files with 22 additions and 20 deletions
|
@ -95,19 +95,13 @@ parseCollect2 = do
|
|||
path <- manyTill anyChar (try $ string ldcmd)
|
||||
void $ char ' '
|
||||
params <- restOfLine
|
||||
return $ CmdParams (path ++ ldcmd) (skipHack $ escapeDosPaths params) Nothing
|
||||
return $ CmdParams (path ++ ldcmd) (escapeDosPaths params) Nothing
|
||||
where
|
||||
ldcmd = "ld.exe"
|
||||
versionline = do
|
||||
void $ string "collect2 version"
|
||||
restOfLine
|
||||
|
||||
{- For unknown reasons, asking the linker to link this in fails,
|
||||
- with error about multiple definitions of a symbol from the library.
|
||||
- This is a horrible hack. -}
|
||||
skipHack :: String -> String
|
||||
skipHack = replace "dist/build/git-annex/git-annex-tmp/Utility/winprocess.o" ""
|
||||
|
||||
{- Input contains something like
|
||||
- c:/program files/haskell platform/foo -LC:/Program Files/Haskell Platform/ -L...
|
||||
- and the *right* spaces must be escaped with \
|
||||
|
|
|
@ -11,5 +11,18 @@ module Utility.WinProcess where
|
|||
|
||||
import Utility.PID
|
||||
|
||||
foreign import ccall unsafe "terminatepid"
|
||||
terminatePID :: PID -> IO ()
|
||||
import System.Win32.Process
|
||||
import Control.Exception (bracket)
|
||||
import Control.Monad
|
||||
|
||||
terminatePID :: PID -> IO ()
|
||||
terminatePID p = bracket
|
||||
(openProcess pROCESS_TERMINATE False p)
|
||||
(void . c_closeProcess)
|
||||
(\h -> void $ c_TerminateProcess h 1)
|
||||
|
||||
foreign import ccall unsafe "windows.h TerminateProcess"
|
||||
c_TerminateProcess :: ProcessHandle -> Int -> IO Int
|
||||
|
||||
foreign import ccall unsafe "windows.h CloseHandle"
|
||||
c_closeProcess :: ProcessHandle -> IO Bool
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
#include <windows.h>
|
||||
|
||||
void terminatepid (DWORD pid) {
|
||||
HANDLE h;
|
||||
h = OpenProcess(PROCESS_TERMINATE, 0, pid);
|
||||
if (h != NULL) {
|
||||
TerminateProcess(h, 1);
|
||||
}
|
||||
CloseHandle(h);
|
||||
}
|
6
debian/changelog
vendored
6
debian/changelog
vendored
|
@ -1,3 +1,9 @@
|
|||
git-annex (5.20150825) UNRELEASED; urgency=medium
|
||||
|
||||
* Fix Windows build to work with ghc 7.10.
|
||||
|
||||
-- Joey Hess <id@joeyh.name> Tue, 01 Sep 2015 14:46:18 -0700
|
||||
|
||||
git-annex (5.20150824) unstable; urgency=medium
|
||||
|
||||
* Sped up downloads of files from ssh remotes, reducing the
|
||||
|
|
|
@ -158,7 +158,6 @@ Executable git-annex
|
|||
|
||||
if (os(windows))
|
||||
Build-Depends: Win32, Win32-extras, unix-compat (>= 0.4.1.3), setenv
|
||||
C-Sources: Utility/winprocess.c
|
||||
else
|
||||
Build-Depends: unix
|
||||
-- Need to list these because they're generated from .hsc files.
|
||||
|
|
Loading…
Reference in a new issue