[GHC] #16368: Boot GHC's libffi installation path leaks into stage1 build

GHC ghc-devs at haskell.org
Tue Feb 26 17:16:17 UTC 2019


#16368: Boot GHC's libffi installation path leaks into stage1 build
-------------------------------------+-------------------------------------
        Reporter:  sgraf             |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:  ⊥
       Component:  Build System      |              Version:  8.6.3
  (Hadrian)                          |
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Changes (by sgraf):

 * cc: bgamari (added)


Comment:

 The `libffi` bit seems to be pulled in from `rts`, which itself isn't
 mentioned as include dir:

 {{{
 {sourcePackageId = PackageIdentifier {pkgName = PackageName "rts",
 pkgVersion = mkVersion [1,0]}, sourceLibName = LMainLibName,
 installedComponentId_ = ComponentId "", installedUnitId = UnitId "rts",
 instantiatedWith = [], compatPackageKey = "rts", license = Left (License
 (ELicense (ELicenseId BSD_3_Clause) Nothing)), copyright = "", maintainer
 = "glasgow-haskell-users at haskell.org", author = "", stability = "",
 homepage = "", pkgUrl = "", synopsis = "", description = "", category =
 "", abiHash = AbiHash "", indefinite = False, exposed = True,
 exposedModules = [], hiddenModules = [], trusted = False, importDirs = [],
 libraryDirs = ["/nix/store/7874h075nf8yikvr47642xqrwqwyv99s-
 ghc-8.6.3/lib/ghc-8.6.3/rts","/nix/store/karxq4hlfmfj0c3yk4wv5mfaz06p70k8-libffi-3.2.1/lib"],
 libraryDynDirs = [], dataDir = "", hsLibraries = ["HSrts"], extraLibraries
 = ["m","rt","dl","ffi","pthread"], extraGHCiLibraries = [], includeDirs =
 ["/nix/store/7874h075nf8yikvr47642xqrwqwyv99s-
 ghc-8.6.3/lib/ghc-8.6.3/include","/nix/store/karxq4hlfmfj0c3yk4wv5mfaz06p70k8-libffi-3.2.1/include"],
 includes = ["Stg.h"], depends = [], abiDepends = [], ccOptions = [],
 cxxOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [],
 haddockInterfaces = [], haddockHTMLs = [], pkgRoot = Just "/nix/store
 /23ndnrb11m3k7zh4p84vjmdgand0p45b-ghc-8.6.3-with-packages/lib/ghc-8.6.3",
 libVisibility = LibraryVisibilityPrivate}
 }}}

 I could probably fix this by the following patch:

 {{{#!diff
 diff --git a/utils/ghc-cabal/Main.hs b/utils/ghc-cabal/Main.hs
 index 8b776499fd..f4a2313194 100644
 --- a/utils/ghc-cabal/Main.hs
 +++ b/utils/ghc-cabal/Main.hs
 @@ -338,14 +338,22 @@ generate directory distdir config_args
                [(_,[rts])] ->
                   PackageIndex.insert rts{
                       Installed.ldOptions = [],
 -                     Installed.libraryDirs = filter (not . ("gcc-lib"
 `isSuffixOf`)) (Installed.libraryDirs rts)} index
 -                        -- GHC <= 6.12 had $topdir/gcc-lib in their
 -                        -- library-dirs for the rts package, which causes
 -                        -- problems when we try to use the in-tree mingw,
 -                        -- due to accidentally picking up the
 incompatible
 -                        -- libraries there.  So we filter out gcc-lib
 from
 -                        -- the RTS's library-dirs here.
 +                     Installed.libraryDirs = filter_dirs
 (Installed.libraryDirs rts),
 +                     Installed.includeDirs = filter_dirs
 (Installed.includeDirs rts)
 +                  } index
                _ -> error "No (or multiple) ghc rts package is
 registered!!"
 +          filter_dirs = filter (\dir -> not (or [is_gcc_lib dir,
 is_libffi dir]))
 +          -- GHC <= 6.12 had $topdir/gcc-lib in their
 +          -- library-dirs for the rts package, which causes
 +          -- problems when we try to use the in-tree mingw,
 +          -- due to accidentally picking up the incompatible
 +          -- libraries there.  So we filter out gcc-lib from
 +          -- the RTS's library-dirs here.
 +          is_gcc_lib = ("gcc-lib" `isSuffixOf`)
 +          -- In Trac #16368, we noticed that libffi paths
 +          -- from the boot GHC shadow the local libffi tarballs
 +          -- in a similar manner.
 +          is_libffi = ("libffi" `isInfixOf`)

            dep_ids  = map snd (externalPackageDeps lbi)
            deps     = map display dep_ids
 }}}

 Are there any other packages in the above list that look from to you?
 bgamari, perhaps?

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/16368#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list