@@ -137,7 +137,7 @@ data HaddockArgs = HaddockArgs
137
137
-- ^ Re-exported modules
138
138
, argTargets :: [FilePath ]
139
139
-- ^ Modules to process.
140
- , argLib :: Flag String
140
+ , argResourcesDir :: Flag String
141
141
-- ^ haddock's static \/ auxiliary files.
142
142
}
143
143
deriving (Generic )
@@ -287,10 +287,18 @@ haddock pkg_descr lbi suffixes flags' = do
287
287
[] -> allTargetsInBuildOrder' pkg_descr lbi
288
288
_ -> targets
289
289
290
+ version' =
291
+ if flag haddockNoVersionCPP then
292
+ Nothing
293
+ else
294
+ Just version
295
+
296
+ index = installedPkgs lbi
297
+
290
298
internalPackageDB <-
291
299
createInternalPackageDB verbosity lbi (flag haddockDistPref)
292
300
293
- ( \ f -> foldM_ f (installedPkgs lbi) targets') $ \ index target -> do
301
+ forM_ targets' $ \ target -> do
294
302
let component = targetComponent target
295
303
clbi = targetCLBI target
296
304
@@ -305,28 +313,25 @@ haddock pkg_descr lbi suffixes flags' = do
305
313
306
314
preprocessComponent pkg_descr component lbi' clbi False verbosity suffixes
307
315
let
308
- doExe com = case ( compToExe com) of
316
+ doExe com = case compToExe com of
309
317
Just exe -> do
310
- withTempDirectoryEx verbosity tmpFileOpts (buildDir lbi') " tmp" $
311
- \ tmp -> do
312
- exeArgs <-
313
- fromExecutable
314
- verbosity
315
- tmp
316
- lbi'
317
- clbi
318
- htmlTemplate
319
- version
320
- exe
321
- let exeArgs' = commonArgs `mappend` exeArgs
322
- runHaddock
323
- verbosity
324
- tmpFileOpts
325
- comp
326
- platform
327
- haddockProg
328
- True
329
- exeArgs'
318
+ exeArgs <-
319
+ fromExecutable
320
+ verbosity
321
+ lbi'
322
+ clbi
323
+ htmlTemplate
324
+ version'
325
+ exe
326
+ let exeArgs' = commonArgs `mappend` exeArgs
327
+ runHaddock
328
+ verbosity
329
+ tmpFileOpts
330
+ comp
331
+ platform
332
+ haddockProg
333
+ True
334
+ exeArgs'
330
335
Nothing -> do
331
336
warn
332
337
(fromFlag $ haddockVerbosity flags)
@@ -345,67 +350,62 @@ haddock pkg_descr lbi suffixes flags' = do
345
350
(maybeComponentInstantiatedWith clbi)
346
351
case component of
347
352
CLib lib -> do
348
- withTempDirectoryEx verbosity tmpFileOpts (buildDir lbi) " tmp" $
349
- \ tmp -> do
350
- smsg
351
- libArgs <-
352
- fromLibrary
353
- verbosity
354
- tmp
355
- lbi'
356
- clbi
357
- htmlTemplate
358
- version
359
- lib
360
- let libArgs' = commonArgs `mappend` libArgs
361
- runHaddock verbosity tmpFileOpts comp platform haddockProg True libArgs'
362
-
363
- pwd <- getCurrentDirectory
364
-
365
- let
366
- ipi =
367
- inplaceInstalledPackageInfo
368
- pwd
369
- (flag haddockDistPref)
370
- pkg_descr
371
- (mkAbiHash " inplace" )
372
- lib
373
- lbi'
374
- clbi
353
+ smsg
354
+ libArgs <-
355
+ fromLibrary
356
+ verbosity
357
+ lbi'
358
+ clbi
359
+ htmlTemplate
360
+ version'
361
+ lib
362
+ let libArgs' = commonArgs `mappend` libArgs
363
+ runHaddock verbosity tmpFileOpts comp platform haddockProg True libArgs'
375
364
376
- debug verbosity $
377
- " Registering inplace:\n "
378
- ++ (InstalledPackageInfo. showInstalledPackageInfo ipi)
365
+ pwd <- getCurrentDirectory
366
+
367
+ let
368
+ ipi =
369
+ inplaceInstalledPackageInfo
370
+ pwd
371
+ (flag haddockDistPref)
372
+ pkg_descr
373
+ (mkAbiHash " inplace" )
374
+ lib
375
+ lbi'
376
+ clbi
377
+
378
+ debug verbosity $
379
+ " Registering inplace:\n "
380
+ ++ (InstalledPackageInfo. showInstalledPackageInfo ipi)
381
+
382
+ registerPackage
383
+ verbosity
384
+ (compiler lbi')
385
+ (withPrograms lbi')
386
+ (withPackageDB lbi')
387
+ ipi
388
+ HcPkg. defaultRegisterOptions
389
+ { HcPkg. registerMultiInstance = True
390
+ }
391
+
392
+ return $ PackageIndex. insert ipi index
379
393
380
- registerPackage
381
- verbosity
382
- (compiler lbi')
383
- (withPrograms lbi')
384
- (withPackageDB lbi')
385
- ipi
386
- HcPkg. defaultRegisterOptions
387
- { HcPkg. registerMultiInstance = True
388
- }
389
-
390
- return $ PackageIndex. insert ipi index
391
394
CFLib flib ->
392
395
when
393
396
(flag haddockForeignLibs)
394
397
( do
395
- withTempDirectoryEx verbosity tmpFileOpts (buildDir lbi') " tmp" $
396
- \ tmp -> do
397
- smsg
398
- flibArgs <-
399
- fromForeignLib
400
- verbosity
401
- tmp
402
- lbi'
403
- clbi
404
- htmlTemplate
405
- version
406
- flib
407
- let libArgs' = commonArgs `mappend` flibArgs
408
- runHaddock verbosity tmpFileOpts comp platform haddockProg True libArgs'
398
+ smsg
399
+ flibArgs <-
400
+ fromForeignLib
401
+ verbosity
402
+ lbi'
403
+ clbi
404
+ htmlTemplate
405
+ version'
406
+ flib
407
+ let libArgs' = commonArgs `mappend` flibArgs
408
+ runHaddock verbosity tmpFileOpts comp platform haddockProg True libArgs'
409
409
)
410
410
>> return index
411
411
CExe _ -> when (flag haddockExecutables) (smsg >> doExe component) >> return index
@@ -465,7 +465,7 @@ fromFlags env flags =
465
465
(haddockIndex flags)
466
466
, argGenIndex = Flag False
467
467
, argBaseUrl = haddockBaseUrl flags
468
- , argLib = haddockLib flags
468
+ , argResourcesDir = haddockResourcesDir flags
469
469
, argVerbose =
470
470
maybe mempty (Any . (>= deafening))
471
471
. flagToMaybe
@@ -491,7 +491,7 @@ fromHaddockProjectFlags flags =
491
491
, argPrologueFile = haddockProjectPrologue flags
492
492
, argInterfaces = fromFlagOrDefault [] (haddockProjectInterfaces flags)
493
493
, argLinkedSource = Flag True
494
- , argLib = haddockProjectLib flags
494
+ , argResourcesDir = haddockProjectResourcesDir flags
495
495
}
496
496
497
497
fromPackageDescription :: HaddockTarget -> PackageDescription -> HaddockArgs
@@ -536,27 +536,20 @@ componentGhcOptions verbosity lbi bi clbi odir =
536
536
537
537
mkHaddockArgs
538
538
:: Verbosity
539
- -> FilePath
540
539
-> LocalBuildInfo
541
540
-> ComponentLocalBuildInfo
542
541
-> Maybe PathTemplate
543
542
-- ^ template for HTML location
544
- -> Version
543
+ -> Maybe Version
544
+ -- ^ 'Nothing' if the user requested not to define the __HADDOCK_VERSION__
545
+ -- macro
545
546
-> [FilePath ]
546
547
-> BuildInfo
547
548
-> IO HaddockArgs
548
- mkHaddockArgs verbosity tmp lbi clbi htmlTemplate haddockVersion inFiles bi = do
549
+ mkHaddockArgs verbosity lbi clbi htmlTemplate haddockVersion inFiles bi = do
549
550
ifaceArgs <- getInterfaces verbosity lbi clbi htmlTemplate
550
551
let vanillaOpts =
551
- (componentGhcOptions normal lbi bi clbi (buildDir lbi))
552
- { -- Noooooooooo!!!!!111
553
- -- haddock stomps on our precious .hi
554
- -- and .o files. Workaround by telling
555
- -- haddock to write them elsewhere.
556
- ghcOptObjDir = toFlag tmp
557
- , ghcOptHiDir = toFlag tmp
558
- , ghcOptStubDir = toFlag tmp
559
- }
552
+ componentGhcOptions normal lbi bi clbi (buildDir lbi)
560
553
`mappend` getGhcCppOpts haddockVersion bi
561
554
sharedOpts =
562
555
vanillaOpts
@@ -583,20 +576,20 @@ mkHaddockArgs verbosity tmp lbi clbi htmlTemplate haddockVersion inFiles bi = do
583
576
584
577
fromLibrary
585
578
:: Verbosity
586
- -> FilePath
587
579
-> LocalBuildInfo
588
580
-> ComponentLocalBuildInfo
589
581
-> Maybe PathTemplate
590
582
-- ^ template for HTML location
591
- -> Version
583
+ -> Maybe Version
584
+ -- ^ 'Nothing' if the user requested not to define the __HADDOCK_VERSION__
585
+ -- macro
592
586
-> Library
593
587
-> IO HaddockArgs
594
- fromLibrary verbosity tmp lbi clbi htmlTemplate haddockVersion lib = do
588
+ fromLibrary verbosity lbi clbi htmlTemplate haddockVersion lib = do
595
589
inFiles <- map snd `fmap` getLibSourceFiles verbosity lbi lib clbi
596
590
args <-
597
591
mkHaddockArgs
598
592
verbosity
599
- tmp
600
593
lbi
601
594
clbi
602
595
htmlTemplate
@@ -610,20 +603,20 @@ fromLibrary verbosity tmp lbi clbi htmlTemplate haddockVersion lib = do
610
603
611
604
fromExecutable
612
605
:: Verbosity
613
- -> FilePath
614
606
-> LocalBuildInfo
615
607
-> ComponentLocalBuildInfo
616
608
-> Maybe PathTemplate
617
609
-- ^ template for HTML location
618
- -> Version
610
+ -> Maybe Version
611
+ -- ^ 'Nothing' if the user requested not to define the __HADDOCK_VERSION__
612
+ -- macro
619
613
-> Executable
620
614
-> IO HaddockArgs
621
- fromExecutable verbosity tmp lbi clbi htmlTemplate haddockVersion exe = do
615
+ fromExecutable verbosity lbi clbi htmlTemplate haddockVersion exe = do
622
616
inFiles <- map snd `fmap` getExeSourceFiles verbosity lbi exe clbi
623
617
args <-
624
618
mkHaddockArgs
625
619
verbosity
626
- tmp
627
620
lbi
628
621
clbi
629
622
htmlTemplate
@@ -638,20 +631,20 @@ fromExecutable verbosity tmp lbi clbi htmlTemplate haddockVersion exe = do
638
631
639
632
fromForeignLib
640
633
:: Verbosity
641
- -> FilePath
642
634
-> LocalBuildInfo
643
635
-> ComponentLocalBuildInfo
644
636
-> Maybe PathTemplate
645
637
-- ^ template for HTML location
646
- -> Version
638
+ -> Maybe Version
639
+ -- ^ 'Nothing' if the user requested not to define the __HADDOCK_VERSION__
640
+ -- macro
647
641
-> ForeignLib
648
642
-> IO HaddockArgs
649
- fromForeignLib verbosity tmp lbi clbi htmlTemplate haddockVersion flib = do
643
+ fromForeignLib verbosity lbi clbi htmlTemplate haddockVersion flib = do
650
644
inFiles <- map snd `fmap` getFLibSourceFiles verbosity lbi flib clbi
651
645
args <-
652
646
mkHaddockArgs
653
647
verbosity
654
- tmp
655
648
lbi
656
649
clbi
657
650
htmlTemplate
@@ -707,7 +700,9 @@ getReexports LibComponentLocalBuildInfo{componentExposedModules = mods} =
707
700
getReexports _ = []
708
701
709
702
getGhcCppOpts
710
- :: Version
703
+ :: Maybe Version
704
+ -- ^ 'Nothing' if the user requested not to define the __HADDOCK_VERSION__
705
+ -- macro
711
706
-> BuildInfo
712
707
-> GhcOptions
713
708
getGhcCppOpts haddockVersion bi =
@@ -717,16 +712,21 @@ getGhcCppOpts haddockVersion bi =
717
712
}
718
713
where
719
714
needsCpp = EnableExtension CPP `elem` usedExtensions bi
720
- defines = [haddockVersionMacro]
721
- haddockVersionMacro =
722
- " -D__HADDOCK_VERSION__= "
723
- ++ show (v1 * 1000 + v2 * 10 + v3)
715
+ defines =
716
+ [ " -D__HADDOCK_VERSION__= " ++ show vn
717
+ | Just vn <- [versionInt . versionNumbers <$> haddockVersion]
718
+ ]
724
719
where
725
- (v1, v2, v3) = case versionNumbers haddockVersion of
726
- [] -> (0 , 0 , 0 )
727
- [x] -> (x, 0 , 0 )
728
- [x, y] -> (x, y, 0 )
729
- (x : y : z : _) -> (x, y, z)
720
+ -- For some list xs = [x, y, z ...], versionInt xs results in
721
+ -- x * 1000 + y * 10 + z. E.g.:
722
+ -- >>> versionInt [2, 29, 0]
723
+ -- 2290
724
+ -- >>> versionInt [3, 4]
725
+ -- 3040
726
+ -- >>> versionInt []
727
+ -- 0
728
+ versionInt :: [Int ] -> Int
729
+ versionInt = foldr ((+) . uncurry (*) ) 0 . zip [1000 ,10 ,1 ]
730
730
731
731
getGhcLibDir
732
732
:: Verbosity
@@ -922,7 +922,7 @@ renderPureArgs version comp platform args =
922
922
, isVersion 2 19
923
923
]
924
924
, argTargets $ args
925
- , maybe [] ((: [] ) . (" --lib= " ++ )) . flagToMaybe . argLib $ args
925
+ , maybe [] ((: [] ) . (resourcesDirFlag ++ )) . flagToMaybe . argResourcesDir $ args
926
926
]
927
927
where
928
928
renderInterfaces = map renderInterface
@@ -964,6 +964,9 @@ renderPureArgs version comp platform args =
964
964
verbosityFlag
965
965
| isVersion 2 5 = " --verbosity=1"
966
966
| otherwise = " --verbose"
967
+ resourcesDirFlag
968
+ | isVersion 2 29 = " --resources-dir="
969
+ | otherwise = " --lib="
967
970
haddockSupportsVisibility = version >= mkVersion [2 , 26 , 1 ]
968
971
haddockSupportsPackageName = version > mkVersion [2 , 16 ]
969
972
0 commit comments