Skip to content

Commit 7d7dc07

Browse files
committed
Scope FFI include fix to Mac only
1 parent ba9b1c9 commit 7d7dc07

File tree

4 files changed

+26
-18
lines changed

4 files changed

+26
-18
lines changed

Shakefiles/Dependencies.hs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,24 @@ import Development.Shake
44
import Development.Shake.Command
55
import Development.Shake.FilePath
66
import Development.Shake.Util
7+
-- import Shakefiles.Platform (platform, Platform(..))
8+
import Shakefiles.Extra
79

810

911
localBinDir :: String
1012
localBinDir = "bin"
1113

12-
--ghc-option required because of https://gitlab.haskell.org/ghc/ghc/-/issues/20592
13-
ghcOptionFFI = "--ghc-option=-I/Library/Developer/CommandLineTools/SDKs/MacOSX11.sdk/usr/include/ffi"
14-
1514

1615
cabalInstallExe :: String -> Action ()
1716
cabalInstallExe package =
18-
cmd_ "cabal"
17+
cmd_ "cabal" $
18+
addGhcOptionFFI
1919
[ "v2-install"
2020
, package
2121
, "--installdir", localBinDir
2222
-- these are currently needed because Windows doesn't support the default symlink method
2323
, "--install-method=copy"
2424
, "--overwrite-policy=always"
25-
, ghcOptionFFI
2625
]
2726

2827

@@ -45,7 +44,7 @@ rules = do
4544
, "cabal.project"
4645
, "cabal.project.freeze"
4746
]
48-
cmd_ "cabal" [ "v2-build", "--only-dependencies", ghcOptionFFI ]
47+
cmd_ "cabal" $ addGhcOptionFFI [ "v2-build", "--only-dependencies" ]
4948
writeFile' out ""
5049

5150
"_build/cabal-test-dependencies.ok" %> \out -> do
@@ -54,7 +53,7 @@ rules = do
5453
, "cabal.project"
5554
, "cabal.project.freeze"
5655
]
57-
cmd_ "cabal" [ "v2-build", "--only-dependencies", "--enable-tests", ghcOptionFFI ]
56+
cmd_ "cabal" $ addGhcOptionFFI [ "v2-build", "--only-dependencies", "--enable-tests" ]
5857
writeFile' out ""
5958

6059
shellcheck %> \out -> do

Shakefiles/Extra.hs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
module Shakefiles.Extra (phonyPrefix, forEach) where
1+
module Shakefiles.Extra (phonyPrefix, forEach, addGhcOptionFFI) where
22

33
import Development.Shake
44
import Data.List (stripPrefix)
5+
import Shakefiles.Platform (platform, Platform(..))
56

67

78
phonyPrefix :: String -> (String -> Action ()) -> Rules ()
@@ -15,3 +16,11 @@ phonyPrefix prefix action =
1516
forEach :: Monad m => [a] -> (a -> m ()) -> m ()
1617
forEach list f =
1718
mapM_ f list
19+
20+
21+
--ghc-option required because of https://gitlab.haskell.org/ghc/ghc/-/issues/20592
22+
addGhcOptionFFI :: [String] -> [String]
23+
addGhcOptionFFI options =
24+
case platform of
25+
Mac -> ["--ghc-option=-I/Library/Developer/CommandLineTools/SDKs/MacOSX11.sdk/usr/include/ffi"] ++ options
26+
_ -> options

Shakefiles/Haskell.hs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,6 @@ import Data.Char (isSpace)
1111
import Data.List (dropWhileEnd, stripPrefix)
1212
import Shakefiles.Extra
1313

14-
-- --ghc-option required because of https://gitlab.haskell.org/ghc/ghc/-/issues/20592
15-
ghcOptionFFI = "--ghc-option=-I/Library/Developer/CommandLineTools/SDKs/MacOSX11.sdk/usr/include/ffi"
16-
1714

1815
cabalProject :: String -> [String] -> [String] -> [String] -> [String] -> [String] -> Rules ()
1916
cabalProject name sourceFiles sourcePatterns deps testPatterns testDeps =
@@ -38,16 +35,16 @@ cabalProject name sourceFiles sourcePatterns deps testPatterns testDeps =
3835
do
3936
"_build/cabal/" </> name </> "build.ok" %> \out -> do
4037
hash <- needProjectFiles
41-
cmd_ "cabal" "v2-build" ghcOptionFFI "-O0" (cabalName name ++ ":libs") "--enable-tests"
38+
cmd_ "cabal" $ addGhcOptionFFI ["v2-build", "-O0", (cabalName name ++ ":libs"), "--enable-tests" ]
4239
writeFile' out hash
4340

4441
cabalBinPath name "noopt" %> \out -> do
4542
_ <- needProjectFiles
46-
cmd_ "cabal" "v2-build" ghcOptionFFI "-O0" (cabalName name ++ ":exes") "--enable-tests"
43+
cmd_ "cabal" $ addGhcOptionFFI ["v2-build", "-O0", (cabalName name ++ ":exes"), "--enable-tests" ]
4744

4845
cabalBinPath name "opt" %> \out -> do
4946
_ <- needProjectFiles
50-
cmd_ "cabal" "v2-build" ghcOptionFFI "-O2" (cabalName name ++ ":exes")
47+
cmd_ "cabal" $ addGhcOptionFFI ["v2-build", "-O2", (cabalName name ++ ":exes") ]
5148

5249
"_build/cabal/" </> name </> "test.ok" %> \out -> do
5350
need globalConfig
@@ -58,7 +55,7 @@ cabalProject name sourceFiles sourcePatterns deps testPatterns testDeps =
5855
need sourceFilesFromPatterns
5956
testFiles <- getDirectoryFiles "" testPatterns
6057
need testFiles
61-
cmd_ "cabal" "v2-test" "-O0" (cabalName name ++ ":tests") "--test-show-details=streaming" ghcOptionFFI
58+
cmd_ "cabal" $ addGhcOptionFFI ["v2-test", "-O0", (cabalName name ++ ":tests"), "--test-show-details=streaming" ]
6259
writeFile' out ""
6360

6461

build.sh

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ PKG_ENV_FILE="_build/shake-package-env-$(ghc --numeric-version)"
66
mkdir -p _build
77
# install shake if it's not installed
88
if ! grep -qs '^package-id \(shake\|shk\)-' "$PKG_ENV_FILE"; then
9-
echo "$0: installing shake"
10-
# --ghc-option required because of https://gitlab.haskell.org/ghc/ghc/-/issues/20592
11-
cabal v2-install --package-env "$PKG_ENV_FILE" --ghc-option="`pkg-config --cflags libffi`" --lib shake
9+
if [[ $OSTYPE == darwin* ]]; then
10+
# --ghc-option required because of https://gitlab.haskell.org/ghc/ghc/-/issues/20592
11+
cabal v2-install --package-env "$PKG_ENV_FILE" --ghc-option="`pkg-config --cflags libffi`" --lib shake
12+
else
13+
cabal v2-install --package-env "$PKG_ENV_FILE" --lib shake
14+
fi
1215
fi
1316

1417
# compile the build script

0 commit comments

Comments
 (0)