Skip to content

Commit

Permalink
fake builtin package db close #20
Browse files Browse the repository at this point in the history
  • Loading branch information
phischu committed Oct 15, 2014
1 parent a04bbf0 commit 4d8d685
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 13 deletions.
1 change: 1 addition & 0 deletions fragnix.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ executable package-modules

executable haskell-modules
main-is: haskell-modules.hs
other-modules: Fragnix.BuiltinPackages
build-depends: base >=4.6 && <4.7,
haskell-names >=0.4 && <0.5,
haskell-src-exts >=1.16 && <1.17,
Expand Down
15 changes: 15 additions & 0 deletions src/Fragnix/BuiltinPackages.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
module Fragnix.BuiltinPackages where

import Distribution.HaskellSuite.Packages
import Distribution.InstalledPackageInfo
import Distribution.Package hiding (depends)
import Data.Version
import Distribution.ModuleName
import Distribution.License
import Data.List (intercalate)

builtinpackages :: Packages
builtinpackages = [InstalledPackageInfo {installedPackageId = InstalledPackageId "base-4.7.0.0", sourcePackageId = PackageIdentifier {pkgName = PackageName "base", pkgVersion = Version {versionBranch = [4,7,0,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "Basic libraries", description = "This package contains the Prelude and its support libraries,\nand a large collection of useful libraries ranging from data\nstructures to parsing combinators and debugging utilities.", category = "", exposed = True, exposedModules = [moduleName ["Foreign","Concurrent"],moduleName ["GHC","Arr"],moduleName ["GHC","Base"],moduleName ["GHC","Char"],moduleName ["GHC","Conc"],moduleName ["GHC","Conc","IO"],moduleName ["GHC","Conc","Signal"],moduleName ["GHC","Conc","Sync"],moduleName ["GHC","ConsoleHandler"],moduleName ["GHC","Constants"],moduleName ["GHC","Desugar"],moduleName ["GHC","Enum"],moduleName ["GHC","Environment"],moduleName ["GHC","Err"],moduleName ["GHC","Exception"],moduleName ["GHC","Exts"],moduleName ["GHC","Fingerprint"],moduleName ["GHC","Fingerprint","Type"],moduleName ["GHC","Float"],moduleName ["GHC","Float","ConversionUtils"],moduleName ["GHC","Float","RealFracMethods"],moduleName ["GHC","Foreign"],moduleName ["GHC","ForeignPtr"],moduleName ["GHC","Generics"],moduleName ["GHC","GHCi"],moduleName ["GHC","IO"],moduleName ["GHC","IO","Buffer"],moduleName ["GHC","IO","BufferedIO"],moduleName ["GHC","IO","Device"],moduleName ["GHC","IO","Encoding"],moduleName ["GHC","IO","Encoding","CodePage"],moduleName ["GHC","IO","Encoding","Failure"],moduleName ["GHC","IO","Encoding","Iconv"],moduleName ["GHC","IO","Encoding","Latin1"],moduleName ["GHC","IO","Encoding","Types"],moduleName ["GHC","IO","Encoding","UTF16"],moduleName ["GHC","IO","Encoding","UTF32"],moduleName ["GHC","IO","Encoding","UTF8"],moduleName ["GHC","IO","Exception"],moduleName ["GHC","IO","FD"],moduleName ["GHC","IO","Handle"],moduleName ["GHC","IO","Handle","FD"],moduleName ["GHC","IO","Handle","Internals"],moduleName ["GHC","IO","Handle","Text"],moduleName ["GHC","IO","Handle","Types"],moduleName ["GHC","IO","IOMode"],moduleName ["GHC","IOArray"],moduleName ["GHC","IORef"],moduleName ["GHC","IP"],moduleName ["GHC","Int"],moduleName ["GHC","List"],moduleName ["GHC","MVar"],moduleName ["GHC","Num"],moduleName ["GHC","PArr"],moduleName ["GHC","Pack"],moduleName ["GHC","Profiling"],moduleName ["GHC","Ptr"],moduleName ["GHC","Read"],moduleName ["GHC","Real"],moduleName ["GHC","ST"],moduleName ["GHC","Stack"],moduleName ["GHC","Stats"],moduleName ["GHC","Show"],moduleName ["GHC","Stable"],moduleName ["GHC","Storable"],moduleName ["GHC","STRef"],moduleName ["GHC","TypeLits"],moduleName ["GHC","TopHandler"],moduleName ["GHC","Unicode"],moduleName ["GHC","Weak"],moduleName ["GHC","Word"],moduleName ["System","Timeout"],moduleName ["Control","Applicative"],moduleName ["Control","Arrow"],moduleName ["Control","Category"],moduleName ["Control","Concurrent"],moduleName ["Control","Concurrent","Chan"],moduleName ["Control","Concurrent","MVar"],moduleName ["Control","Concurrent","QSem"],moduleName ["Control","Concurrent","QSemN"],moduleName ["Control","Exception"],moduleName ["Control","Exception","Base"],moduleName ["Control","Monad"],moduleName ["Control","Monad","Fix"],moduleName ["Control","Monad","Instances"],moduleName ["Control","Monad","ST"],moduleName ["Control","Monad","ST","Safe"],moduleName ["Control","Monad","ST","Unsafe"],moduleName ["Control","Monad","ST","Lazy"],moduleName ["Control","Monad","ST","Lazy","Safe"],moduleName ["Control","Monad","ST","Lazy","Unsafe"],moduleName ["Control","Monad","ST","Strict"],moduleName ["Control","Monad","Zip"],moduleName ["Data","Bits"],moduleName ["Data","Bool"],moduleName ["Data","Char"],moduleName ["Data","Complex"],moduleName ["Data","Dynamic"],moduleName ["Data","Either"],moduleName ["Data","Eq"],moduleName ["Data","Data"],moduleName ["Data","Fixed"],moduleName ["Data","Foldable"],moduleName ["Data","Function"],moduleName ["Data","Functor"],moduleName ["Data","IORef"],moduleName ["Data","Int"],moduleName ["Data","Ix"],moduleName ["Data","List"],moduleName ["Data","Maybe"],moduleName ["Data","Monoid"],moduleName ["Data","Ord"],moduleName ["Data","Ratio"],moduleName ["Data","STRef"],moduleName ["Data","STRef","Lazy"],moduleName ["Data","STRef","Strict"],moduleName ["Data","String"],moduleName ["Data","Traversable"],moduleName ["Data","Tuple"],moduleName ["Data","Typeable"],moduleName ["Data","Typeable","Internal"],moduleName ["Data","OldTypeable"],moduleName ["Data","OldTypeable","Internal"],moduleName ["Data","Unique"],moduleName ["Data","Version"],moduleName ["Data","Word"],moduleName ["Debug","Trace"],moduleName ["Foreign"],moduleName ["Foreign","C"],moduleName ["Foreign","C","Error"],moduleName ["Foreign","C","String"],moduleName ["Foreign","C","Types"],moduleName ["Foreign","ForeignPtr"],moduleName ["Foreign","ForeignPtr","Safe"],moduleName ["Foreign","ForeignPtr","Unsafe"],moduleName ["Foreign","Marshal"],moduleName ["Foreign","Marshal","Alloc"],moduleName ["Foreign","Marshal","Array"],moduleName ["Foreign","Marshal","Error"],moduleName ["Foreign","Marshal","Pool"],moduleName ["Foreign","Marshal","Safe"],moduleName ["Foreign","Marshal","Utils"],moduleName ["Foreign","Marshal","Unsafe"],moduleName ["Foreign","Ptr"],moduleName ["Foreign","Safe"],moduleName ["Foreign","StablePtr"],moduleName ["Foreign","Storable"],moduleName ["Numeric"],moduleName ["Prelude"],moduleName ["System","Console","GetOpt"],moduleName ["System","CPUTime"],moduleName ["System","Environment"],moduleName ["System","Exit"],moduleName ["System","IO"],moduleName ["System","IO","Error"],moduleName ["System","IO","Unsafe"],moduleName ["System","Info"],moduleName ["System","Mem"],moduleName ["System","Mem","StableName"],moduleName ["System","Mem","Weak"],moduleName ["System","Posix","Internals"],moduleName ["System","Posix","Types"],moduleName ["Text","ParserCombinators","ReadP"],moduleName ["Text","ParserCombinators","ReadPrec"],moduleName ["Text","Printf"],moduleName ["Text","Read"],moduleName ["Text","Read","Lex"],moduleName ["Text","Show"],moduleName ["Text","Show","Functions"],moduleName ["Unsafe","Coerce"],moduleName ["GHC","Event"]], hiddenModules = [moduleName ["Control","Monad","ST","Imp"],moduleName ["Control","Monad","ST","Lazy","Imp"],moduleName ["Foreign","ForeignPtr","Imp"],moduleName ["System","Environment","ExecutablePath"],moduleName ["GHC","Event","Array"],moduleName ["GHC","Event","Clock"],moduleName ["GHC","Event","Control"],moduleName ["GHC","Event","EPoll"],moduleName ["GHC","Event","IntMap"],moduleName ["GHC","Event","Internal"],moduleName ["GHC","Event","KQueue"],moduleName ["GHC","Event","Manager"],moduleName ["GHC","Event","TimerManager"],moduleName ["GHC","Event","PSQ"],moduleName ["GHC","Event","Poll"],moduleName ["GHC","Event","Thread"],moduleName ["GHC","Event","Unique"]], trusted = False, importDirs = ["/home/feuerbach/.cabal/lib/i386-linux-haskell-names-0.2/base-4.7.0.0"], libraryDirs = ["base-4.7.0.0"], hsLibraries = ["HSbase-4.7.0.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = ["/home/feuerbach/.cabal/lib/i386-linux-haskell-names-0.2/base-4.7.0.0/include"], includes = ["HsBase.h"], depends = [InstalledPackageId "ghc-prim-0.3.1.0",InstalledPackageId "integer-simple-0.1.1.0"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/feuerbach/.cabal/share/doc/i386-linux-haskell-names-0.2/base-4.7.0.0/html/base.haddock"], haddockHTMLs = ["/home/feuerbach/.cabal/share/doc/i386-linux-haskell-names-0.2/base-4.7.0.0/html"]},InstalledPackageInfo {installedPackageId = InstalledPackageId "ghc-prim-0.3.1.0", sourcePackageId = PackageIdentifier {pkgName = PackageName "ghc-prim", pkgVersion = Version {versionBranch = [0,3,1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "GHC primitives", description = "GHC primitives.", category = "", exposed = True, exposedModules = [moduleName ["GHC","Classes"],moduleName ["GHC","CString"],moduleName ["GHC","Debug"],moduleName ["GHC","Magic"],moduleName ["GHC","PrimopWrappers"],moduleName ["GHC","IntWord64"],moduleName ["GHC","Tuple"],moduleName ["GHC","Types"],moduleName ["GHC","Prim"]], hiddenModules = [], trusted = False, importDirs = ["/home/feuerbach/.cabal/lib/i386-linux-haskell-names-0.2/ghc-prim-0.3.1.0"], libraryDirs = ["ghc-prim-0.3.1.0"], hsLibraries = ["HSghc-prim-0.3.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/feuerbach/.cabal/share/doc/i386-linux-haskell-names-0.2/ghc-prim-0.3.1.0/html/ghc-prim.haddock"], haddockHTMLs = ["/home/feuerbach/.cabal/share/doc/i386-linux-haskell-names-0.2/ghc-prim-0.3.1.0/html"]},InstalledPackageInfo {installedPackageId = InstalledPackageId "integer-simple-0.1.1.0", sourcePackageId = PackageIdentifier {pkgName = PackageName "integer-simple", pkgVersion = Version {versionBranch = [0,1,1,0], versionTags = []}}, license = BSD3, copyright = "", maintainer = "igloo@earth.li", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "Simple Integer library", description = "This package contains an simple Integer library.", category = "", exposed = True, exposedModules = [moduleName ["GHC","Integer"],moduleName ["GHC","Integer","Simple","Internals"],moduleName ["GHC","Integer","Logarithms"],moduleName ["GHC","Integer","Logarithms","Internals"]], hiddenModules = [moduleName ["GHC","Integer","Type"]], trusted = False, importDirs = ["/home/feuerbach/.cabal/lib/i386-linux-haskell-names-0.2/integer-simple-0.1.1.0"], libraryDirs = ["integer-simple-0.1.1.0"], hsLibraries = ["HSinteger-simple-0.1.1.0"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "ghc-prim-0.3.1.0"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/feuerbach/.cabal/share/doc/i386-linux-haskell-names-0.2/integer-simple-0.1.1.0/html/integer-simple.haddock"], haddockHTMLs = ["/home/feuerbach/.cabal/share/doc/i386-linux-haskell-names-0.2/integer-simple-0.1.1.0/html"]},InstalledPackageInfo {installedPackageId = InstalledPackageId "array-0.4.0.2", sourcePackageId = PackageIdentifier {pkgName = PackageName "array", pkgVersion = Version {versionBranch = [0,4,0,2], versionTags = []}}, license = BSD3, copyright = "", maintainer = "libraries@haskell.org", author = "", stability = "", homepage = "", pkgUrl = "", synopsis = "Mutable and immutable arrays", description = "This package defines the classes @IArray@ of immutable arrays and\n@MArray@ of arrays mutable within appropriate monads, as well as\nsome instances of these classes.", category = "Data Structures", exposed = True, exposedModules = [moduleName ["Data","Array"],moduleName ["Data","Array","Base"],moduleName ["Data","Array","IArray"],moduleName ["Data","Array","IO"],moduleName ["Data","Array","IO","Safe"],moduleName ["Data","Array","IO","Internals"],moduleName ["Data","Array","MArray"],moduleName ["Data","Array","MArray","Safe"],moduleName ["Data","Array","ST"],moduleName ["Data","Array","ST","Safe"],moduleName ["Data","Array","Storable"],moduleName ["Data","Array","Storable","Safe"],moduleName ["Data","Array","Storable","Internals"],moduleName ["Data","Array","Unboxed"],moduleName ["Data","Array","Unsafe"]], hiddenModules = [], trusted = False, importDirs = ["/home/feuerbach/.cabal/lib/i386-linux-haskell-names-0.2/array-0.4.0.2"], libraryDirs = ["array-0.4.0.2"], hsLibraries = ["HSarray-0.4.0.2"], extraLibraries = [], extraGHCiLibraries = [], includeDirs = [], includes = [], depends = [InstalledPackageId "base-4.7.0.0"], hugsOptions = [], ccOptions = [], ldOptions = [], frameworkDirs = [], frameworks = [], haddockInterfaces = ["/home/feuerbach/.cabal/share/doc/i386-linux-haskell-names-0.2/array-0.4.0.2/html/array.haddock"], haddockHTMLs = ["/home/feuerbach/.cabal/share/doc/i386-linux-haskell-names-0.2/array-0.4.0.2/html"]}]

moduleName :: [String] -> ModuleName
moduleName = fromString . (intercalate ".")
45 changes: 33 additions & 12 deletions src/haskell-modules.hs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
{-# LANGUAGE OverloadedStrings,GeneralizedNewtypeDeriving,TypeFamilies #-}
module Main where

import Fragnix.BuiltinPackages (builtinpackages)

import Language.Haskell.Exts.Annotated (
Module(Module),ModuleHead(ModuleHead),ModuleName(ModuleName),
parseFileContentsWithMode,
Expand All @@ -12,16 +14,16 @@ import Language.Haskell.Exts.Extension (
import Language.Preprocessor.Cpphs (
runCpphs,CpphsOptions(..),BoolOptions(..))
import Data.Version (Version(Version))
import Data.Tagged (Tagged(Tagged))

import Distribution.HaskellSuite (
IsDBName(getDBName),StandardDB)
IsPackageDB(..),Packages)
import qualified Distribution.HaskellSuite.Compiler as Compiler (
main,Simple,simple,CompileFn)

import Distribution.Package (
PackageIdentifier(pkgName),PackageName(PackageName))

import Data.Tagged (Tagged(Tagged))
import System.Directory (createDirectoryIfMissing)
import Control.Monad (forM_)
import Data.Maybe (fromMaybe)
Expand All @@ -31,15 +33,7 @@ main :: IO ()
main =
Compiler.main theTool

version :: Version
version = Version [0,1] []

data DeclarationsDB = DeclarationsDB

instance IsDBName DeclarationsDB where
getDBName = Tagged "haskell-modules"

theTool :: Compiler.Simple (StandardDB DeclarationsDB)
theTool :: Compiler.Simple DummyDB
theTool =
Compiler.simple
"haskell-modules"
Expand All @@ -49,6 +43,33 @@ theTool =
compile
[]

version :: Version
version = Version [0,1] []

data DummyDB = DummyDB

instance IsPackageDB DummyDB where
--dbName :: Tagged db String
dbName = Tagged "haskell-modules"

--readPackageDB :: MaybeInitDB -> db -> IO Packages
readPackageDB _ DummyDB = return builtinpackages

--writePackageDB :: db -> Packages -> IO ()
writePackageDB _ _ = return ()

--globalDB :: IO (Maybe db)
globalDB = return (Just DummyDB)

--dbFromPath :: FilePath -> IO db
dbFromPath _ = return DummyDB

--locateDB :: PackageDB -> IO (Maybe db)
locateDB _ = return (Just DummyDB)

--userDB :: IO db
userDB = return DummyDB

fixCppOpts :: CpphsOptions -> CpphsOptions
fixCppOpts opts =
opts {
Expand Down Expand Up @@ -120,4 +141,4 @@ compile _ maybelanguage exts cppoptions packagename _ _ filenames = do

modulfilename :: Module SrcSpanInfo -> FilePath
modulfilename (Module _ (Just (ModuleHead _ (ModuleName _ modulname) _ _)) _ _ _) =
"fragnix/modules" </> modulname <.> "hs"
"/home/pschuster/Projects/fragnix/fragnix/modules" </> modulname <.> "hs"
2 changes: 1 addition & 1 deletion src/package-modules.hs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@ main = do
exitCode <- rawSystem "cabal" [
"install","--force-reinstalls",
"--gcc-option=-I/usr/lib/ghc/include",
"--haskell-suite","-w",".cabal-sandbox/bin/haskell-modules",
"--haskell-suite","-w","haskell-modules",
packagequalifier]
print exitCode

0 comments on commit 4d8d685

Please sign in to comment.