Skip to content

Commit 2d282ec

Browse files
committed
Make libs and includes order-dependent (fixes #4527)
1 parent 6a5540a commit 2d282ec

File tree

7 files changed

+28
-30
lines changed

7 files changed

+28
-30
lines changed

ChangeLog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ Bug fixes:
164164
* Using `--ghc-options` with `stack script --compile` now works.
165165
* Ensure the detailed-0.9 type tests work.
166166
See [#4453](https://github.com/commercialhaskell/stack/issues/4453).
167+
* Extra include and lib dirs are now order-dependent. See
168+
[#4527](https://github.com/commercialhaskell/stack/issues/4527).
167169

168170
## v1.9.3
169171

src/Stack/Options/ConfigParser.hs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
module Stack.Options.ConfigParser where
33

44
import Data.Char
5-
import qualified Data.Set as Set
65
import Options.Applicative
76
import Options.Applicative.Builder.Extra
87
import Path
@@ -88,20 +87,20 @@ configOptsParser currentDir hide0 =
8887
<> help "Number of concurrent jobs to run"
8988
<> hide
9089
))
91-
<*> fmap Set.fromList (many ((currentDir FilePath.</>) <$> strOption
90+
<*> many ((currentDir FilePath.</>) <$> strOption
9291
( long "extra-include-dirs"
9392
<> metavar "DIR"
9493
<> completer dirCompleter
9594
<> help "Extra directories to check for C header files"
9695
<> hide
97-
)))
98-
<*> fmap Set.fromList (many ((currentDir FilePath.</>) <$> strOption
96+
))
97+
<*> many ((currentDir FilePath.</>) <$> strOption
9998
( long "extra-lib-dirs"
10099
<> metavar "DIR"
101100
<> completer dirCompleter
102101
<> help "Extra directories to check for libraries"
103102
<> hide
104-
)))
103+
))
105104
<*> optionalFirst (absFileOption
106105
( long "with-gcc"
107106
<> metavar "PATH-TO-GCC"

src/Stack/Package.hs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -338,8 +338,8 @@ data BioInput = BioInput
338338
, biAddPackages :: ![PackageName]
339339
, biBuildInfo :: !BuildInfo
340340
, biDotCabalPaths :: ![DotCabalPath]
341-
, biConfigLibDirs :: !(Set FilePath)
342-
, biConfigIncludeDirs :: !(Set FilePath)
341+
, biConfigLibDirs :: ![FilePath]
342+
, biConfigIncludeDirs :: ![FilePath]
343343
, biComponentName :: !NamedComponent
344344
, biCabalVersion :: !Version
345345
}
@@ -407,17 +407,15 @@ generateBuildInfoOpts BioInput {..} =
407407
toIncludeDir "." = Just biCabalDir
408408
toIncludeDir relDir = concatAndColapseAbsDir biCabalDir relDir
409409
includeOpts =
410-
map ("-I" <>) (configExtraIncludeDirs <> pkgIncludeOpts)
411-
configExtraIncludeDirs = S.toList biConfigIncludeDirs
410+
map ("-I" <>) (biConfigIncludeDirs <> pkgIncludeOpts)
412411
pkgIncludeOpts =
413412
[ toFilePathNoTrailingSep absDir
414413
| dir <- includeDirs biBuildInfo
415414
, absDir <- handleDir dir
416415
]
417416
libOpts =
418417
map ("-l" <>) (extraLibs biBuildInfo) <>
419-
map ("-L" <>) (configExtraLibDirs <> pkgLibDirs)
420-
configExtraLibDirs = S.toList biConfigLibDirs
418+
map ("-L" <>) (biConfigLibDirs <> pkgLibDirs)
421419
pkgLibDirs =
422420
[ toFilePathNoTrailingSep absDir
423421
| dir <- extraLibDirs biBuildInfo

src/Stack/Path.hs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ module Stack.Path
1010

1111
import Stack.Prelude
1212
import Data.List (intercalate)
13-
import qualified Data.Set as Set
1413
import qualified Data.Text as T
1514
import qualified Data.Text.IO as T
1615
import Lens.Micro (lens)
@@ -186,10 +185,10 @@ paths =
186185
, WithoutHaddocks $ view $ configL.to configLocalBin.to toFilePathNoTrailingSep.to T.pack)
187186
, ( "Extra include directories"
188187
, "extra-include-dirs"
189-
, WithoutHaddocks $ T.intercalate ", " . map T.pack . Set.elems . configExtraIncludeDirs . view configL )
188+
, WithoutHaddocks $ T.intercalate ", " . map T.pack . configExtraIncludeDirs . view configL )
190189
, ( "Extra library directories"
191190
, "extra-library-dirs"
192-
, WithoutHaddocks $ T.intercalate ", " . map T.pack . Set.elems . configExtraLibDirs . view configL )
191+
, WithoutHaddocks $ T.intercalate ", " . map T.pack . configExtraLibDirs . view configL )
193192
, ( "Snapshot package database"
194193
, "snapshot-pkg-db"
195194
, WithoutHaddocks $ T.pack . toFilePathNoTrailingSep . piSnapDb )

src/Stack/Setup.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -443,12 +443,12 @@ withNewLocalBuildTargets targets f = do
443443
-- | Add the include and lib paths to the given Config
444444
addIncludeLib :: ExtraDirs -> Config -> Config
445445
addIncludeLib (ExtraDirs _bins includes libs) config = config
446-
{ configExtraIncludeDirs = Set.union
447-
(configExtraIncludeDirs config)
448-
(Set.fromList (map toFilePathNoTrailingSep includes))
449-
, configExtraLibDirs = Set.union
450-
(configExtraLibDirs config)
451-
(Set.fromList (map toFilePathNoTrailingSep libs))
446+
{ configExtraIncludeDirs =
447+
configExtraIncludeDirs config ++
448+
map toFilePathNoTrailingSep includes
449+
, configExtraLibDirs =
450+
configExtraLibDirs config ++
451+
map toFilePathNoTrailingSep libs
452452
}
453453

454454
-- | Ensure compiler (ghc or ghcjs) is installed and provide the PATHs to add if necessary

src/Stack/Types/Build.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -629,8 +629,8 @@ configureOptsNoDir econfig bco deps isLocal package = concat
629629
flagNameString name)
630630
(Map.toList flags)
631631
, concatMap (\x -> [compilerOptionsCabalFlag wc, T.unpack x]) (packageGhcOptions package)
632-
, map ("--extra-include-dirs=" ++) (Set.toList (configExtraIncludeDirs config))
633-
, map ("--extra-lib-dirs=" ++) (Set.toList (configExtraLibDirs config))
632+
, map ("--extra-include-dirs=" ++) (configExtraIncludeDirs config)
633+
, map ("--extra-lib-dirs=" ++) (configExtraLibDirs config)
634634
, maybe [] (\customGcc -> ["--with-gcc=" ++ toFilePath customGcc]) (configOverrideGccPath config)
635635
, ["--ghcjs" | wc == Ghcjs]
636636
, ["--exact-configuration" | useExactConf]

src/Stack/Types/Config.hs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -301,9 +301,9 @@ data Config =
301301
-- ^ How many concurrent jobs to run, defaults to number of capabilities
302302
,configOverrideGccPath :: !(Maybe (Path Abs File))
303303
-- ^ Optional gcc override path
304-
,configExtraIncludeDirs :: !(Set FilePath)
304+
,configExtraIncludeDirs :: ![FilePath]
305305
-- ^ --extra-include-dirs arguments
306-
,configExtraLibDirs :: !(Set FilePath)
306+
,configExtraLibDirs :: ![FilePath]
307307
-- ^ --extra-lib-dirs arguments
308308
,configConcurrentTests :: !Bool
309309
-- ^ Run test suites concurrently
@@ -703,9 +703,9 @@ data ConfigMonoid =
703703
-- ^ Used for overriding the GHC build
704704
,configMonoidJobs :: !(First Int)
705705
-- ^ See: 'configJobs'
706-
,configMonoidExtraIncludeDirs :: !(Set FilePath)
706+
,configMonoidExtraIncludeDirs :: ![FilePath]
707707
-- ^ See: 'configExtraIncludeDirs'
708-
,configMonoidExtraLibDirs :: !(Set FilePath)
708+
,configMonoidExtraLibDirs :: ![FilePath]
709709
-- ^ See: 'configExtraLibDirs'
710710
, configMonoidOverrideGccPath :: !(First (Path Abs File))
711711
-- ^ Allow users to override the path to gcc
@@ -808,10 +808,10 @@ parseConfigMonoidObject rootDir obj = do
808808
configMonoidGHCVariant <- First <$> obj ..:? configMonoidGHCVariantName
809809
configMonoidGHCBuild <- First <$> obj ..:? configMonoidGHCBuildName
810810
configMonoidJobs <- First <$> obj ..:? configMonoidJobsName
811-
configMonoidExtraIncludeDirs <- fmap (Set.map (toFilePath rootDir FilePath.</>)) $
812-
obj ..:? configMonoidExtraIncludeDirsName ..!= Set.empty
813-
configMonoidExtraLibDirs <- fmap (Set.map (toFilePath rootDir FilePath.</>)) $
814-
obj ..:? configMonoidExtraLibDirsName ..!= Set.empty
811+
configMonoidExtraIncludeDirs <- map (toFilePath rootDir FilePath.</>) <$>
812+
obj ..:? configMonoidExtraIncludeDirsName ..!= []
813+
configMonoidExtraLibDirs <- map (toFilePath rootDir FilePath.</>) <$>
814+
obj ..:? configMonoidExtraLibDirsName ..!= []
815815
configMonoidOverrideGccPath <- First <$> obj ..:? configMonoidOverrideGccPathName
816816
configMonoidOverrideHpack <- First <$> obj ..:? configMonoidOverrideHpackName
817817
configMonoidConcurrentTests <- First <$> obj ..:? configMonoidConcurrentTestsName

0 commit comments

Comments
 (0)