@@ -26,8 +26,8 @@ execCabal_ = command_ [] "cabal"
26
26
27
27
cabalBuildData :: Action ()
28
28
cabalBuildData = do
29
- execCabal_ [" new -build" , " hoogle" ]
30
- execCabal_ [" new -exec" , " hoogle" , " generate" ]
29
+ execCabal_ [" v2 -build" , " hoogle" ]
30
+ execCabal_ [" v2 -exec" , " hoogle" , " generate" ]
31
31
32
32
cabalBuildHie :: VersionNumber -> Action ()
33
33
cabalBuildHie versionNumber = do
@@ -37,18 +37,26 @@ cabalBuildHie versionNumber = do
37
37
error (ghcVersionNotFoundFailMsg versionNumber)
38
38
Just p -> return p
39
39
execCabal_
40
- [" new -build" , " -w" , ghcPath, " --write-ghc-environment-files=never" , " --max-backjumps=5000" ]
40
+ [" v2 -build" , " -w" , ghcPath, " --write-ghc-environment-files=never" , " --max-backjumps=5000" , " --disable-tests " ]
41
41
42
42
cabalInstallHie :: VersionNumber -> Action ()
43
43
cabalInstallHie versionNumber = do
44
44
localBin <- getLocalBin
45
- execCabal_
46
- [ " new-install"
45
+ cabalVersion <- getCabalVersion
46
+
47
+ let isCabal3 = checkVersion [3 ,0 ,0 ,0 ] cabalVersion
48
+ installDirOpt | isCabal3 = " --installdir"
49
+ | otherwise = " --symlink-bindir"
50
+ installMethod | isWindowsSystem && isCabal3 = [" --install-method=copy" ]
51
+ | otherwise = []
52
+ execCabal_ $
53
+ [ " v2-install"
47
54
, " --write-ghc-environment-files=never"
48
- , " --symlink-bindir =" ++ localBin
55
+ , installDirOpt ++ " =" ++ localBin
49
56
, " exe:hie"
50
57
, " --overwrite-policy=always"
51
58
]
59
+ ++ installMethod
52
60
liftIO $ do
53
61
copyFile (localBin </> " hie" <.> exe)
54
62
(localBin </> " hie-" ++ versionNumber <.> exe)
@@ -66,7 +74,7 @@ installCabal = do
66
74
-- install `cabal-install` if not already installed
67
75
unless cabalExeOk $ execStackShake_ [" install" , " cabal-install" ]
68
76
69
- -- | check `stack ` has the required version
77
+ -- | check `cabal ` has the required version
70
78
checkCabal :: Action ()
71
79
checkCabal = do
72
80
cabalVersion <- getCabalVersion
@@ -77,22 +85,25 @@ checkCabal = do
77
85
getCabalVersion :: Action String
78
86
getCabalVersion = trimmedStdout <$> execCabal [" --numeric-version" ]
79
87
80
- -- TODO: this restriction will be gone in the next release of cabal
81
88
validateCabalNewInstallIsSupported :: Action ()
82
- validateCabalNewInstallIsSupported = when isWindowsSystem $ do
83
- printInStars cabalInstallNotSuportedFailMsg
84
- error cabalInstallNotSuportedFailMsg
89
+ validateCabalNewInstallIsSupported = do
90
+ cabalVersion <- getCabalVersion
91
+ let isUnsupportedVersion =
92
+ not $ checkVersion requiredCabalVersionForWindows cabalVersion
93
+ when (isWindowsSystem && isUnsupportedVersion) $ do
94
+ printInStars cabalInstallNotSuportedFailMsg
95
+ error cabalInstallNotSuportedFailMsg
85
96
86
- -- | Error message when a windows system tries to install HIE via `cabal new -install`
97
+ -- | Error message when a windows system tries to install HIE via `cabal v2 -install`
87
98
cabalInstallNotSuportedFailMsg :: String
88
99
cabalInstallNotSuportedFailMsg =
89
100
" This system has been identified as a windows system.\n "
90
- ++ " Unfortunately, `cabal new -install` is currently not supported on windows .\n "
91
- ++ " Please use one of the stack-based targets.\n\n "
101
+ ++ " Unfortunately, `cabal v2 -install` is supported since version " ++ cabalVersion ++ " .\n "
102
+ ++ " Please upgrade your cabal executable or use one of the stack-based targets.\n\n "
92
103
++ " If this system has been falsely identified, please open an issue at:\n\t https://github.com/haskell/haskell-ide-engine\n "
104
+ where cabalVersion = versionToString requiredCabalVersionForWindows
93
105
94
-
95
- -- | Error message when the `stack` binary is an older version
106
+ -- | Error message when the `cabal` binary is an older version
96
107
cabalInstallIsOldFailMsg :: String -> String
97
108
cabalInstallIsOldFailMsg cabalVersion =
98
109
" The `cabal` executable is outdated.\n "
@@ -106,3 +117,6 @@ cabalInstallIsOldFailMsg cabalVersion =
106
117
107
118
requiredCabalVersion :: RequiredVersion
108
119
requiredCabalVersion = [2 , 4 , 1 , 0 ]
120
+
121
+ requiredCabalVersionForWindows :: RequiredVersion
122
+ requiredCabalVersionForWindows = [3 , 0 , 0 , 0 ]
0 commit comments