diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # cpkg
 
+## 0.2.3.2
+    
+  * Add `.lz` support
+
 ## 0.2.3.1
 
   * Now works with Dhall 1.25.0 on a sufficiently new GHC
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -253,14 +253,14 @@
 -------------------------------------------------------------------------------
  Language             Files       Lines         Code     Comments       Blanks
 -------------------------------------------------------------------------------
- Bash                     3          50           40            5            5
+ Bash                     5          62           52            5            5
  Cabal                    1         157          143            0           14
  Cabal Project            1           4            3            0            1
- Dhall                    3        5191         4681            8          502
- Haskell                 32        1949         1602           37          310
- Markdown                 3         516          426            0           90
- YAML                     4         148          133            0           15
+ Dhall                    3        5299         4773           10          516
+ Haskell                 32        1977         1623           37          317
+ Markdown                 5         542          452            0           90
+ YAML                     2          51           47            0            4
 -------------------------------------------------------------------------------
- Total                   47        8015         7028           50          937
+ Total                   49        8092         7093           52          947
 -------------------------------------------------------------------------------
 ```
diff --git a/cpkg.cabal b/cpkg.cabal
--- a/cpkg.cabal
+++ b/cpkg.cabal
@@ -1,40 +1,41 @@
-cabal-version: 1.18
-name: cpkg
-version: 0.2.3.1
-license: BSD3
-license-file: LICENSE
-copyright: Copyright: (c) 2018-2019 Vanessa McHale
-maintainer: vamchale@gmail.com
-author: Vanessa McHale
-synopsis: Build tool for C
+cabal-version:      1.18
+name:               cpkg
+version:            0.2.3.2
+license:            BSD3
+license-file:       LICENSE
+copyright:          Copyright: (c) 2018-2019 Vanessa McHale
+maintainer:         vamchale@gmail.com
+author:             Vanessa McHale
+synopsis:           Build tool for C
 description:
     A build tool and package manager configured using [Dhall](https://github.com/dhall-lang/dhall-haskell).
-category: Packaging, Package Management, Dhall, C
-build-type: Simple
+
+category:           Packaging, Package Management, Dhall, C
+build-type:         Simple
 extra-source-files:
     cabal.project
     dhall/cpkg-prelude.dhall
     dhall/cpkg-types.dhall
     pkgs/pkg-set.dhall
     pkgs/patches/*.patch
-extra-doc-files: README.md
-                 CHANGELOG.md
 
+extra-doc-files:
+    README.md
+    CHANGELOG.md
+
 source-repository head
-    type: git
+    type:     git
     location: https://github.com/vmchale/cpkg
 
 flag development
-    description:
-        Enable `-Werror`
-    default: False
-    manual: True
+    description: Enable `-Werror`
+    default:     False
+    manual:      True
 
 library
-    exposed-modules:
-        Package.C
-    build-tools: cpphs -any
-    hs-source-dirs: src
+    exposed-modules:  Package.C
+    build-tools:      cpphs -any
+    hs-source-dirs:   src
     other-modules:
         Package.C.Dhall
         Package.C.Dhall.Type
@@ -65,10 +66,13 @@
         System.Directory.Executable
         Data.Text.Prettyprint.Doc.Custom
         CPkgPrelude
+
     default-language: Haskell2010
-    other-extensions: DeriveGeneric DeriveAnyClass OverloadedStrings
-                      DerivingStrategies GeneralizedNewtypeDeriving RankNTypes
-    ghc-options: -Wall
+    other-extensions:
+        DeriveGeneric DeriveAnyClass OverloadedStrings DerivingStrategies
+        GeneralizedNewtypeDeriving RankNTypes
+
+    ghc-options:      -Wall
     build-depends:
         base >=4.3 && <5,
         containers >=0.6.0.0,
@@ -96,32 +100,32 @@
         megaparsec -any,
         libarchive >=1.0.4.0,
         dir-traverse >=0.2.1.0,
-        composition-prelude >=1.5.2.0
+        composition-prelude >=1.5.2.0,
+        lzlib >=0.2.0.0
 
     if impl(ghc <8.4)
-        build-depends:
-            dhall >=1.23.0 && <1.25.0
+        build-depends: dhall >=1.23.0 && <1.25.0
+
     else
-        build-depends:
-            dhall >=1.23.0
+        build-depends: dhall >=1.23.0
 
     if (flag(development) && impl(ghc <=8.2))
         ghc-options: -Werror
 
     if impl(ghc >=8.0)
-        ghc-options: -Wincomplete-uni-patterns -Wincomplete-record-updates
-                     -Wredundant-constraints -Widentities
+        ghc-options:
+            -Wincomplete-uni-patterns -Wincomplete-record-updates
+            -Wredundant-constraints -Widentities
 
     if impl(ghc >=8.4)
         ghc-options: -Wmissing-export-lists
 
 executable cpkg
-    main-is: Main.hs
-    hs-source-dirs: app
-    other-modules:
-        Paths_cpkg
+    main-is:          Main.hs
+    hs-source-dirs:   app
+    other-modules:    Paths_cpkg
     default-language: Haskell2010
-    ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
+    ghc-options:      -threaded -rtsopts "-with-rtsopts=-N -qg" -Wall
     build-depends:
         base -any,
         cpkg -any,
@@ -133,18 +137,19 @@
         ghc-options: -Werror
 
     if impl(ghc >=8.0)
-        ghc-options: -Wincomplete-uni-patterns -Wincomplete-record-updates
-                     -Wredundant-constraints -Widentities
+        ghc-options:
+            -Wincomplete-uni-patterns -Wincomplete-record-updates
+            -Wredundant-constraints -Widentities
 
     if impl(ghc >=8.4)
         ghc-options: -Wmissing-export-lists
 
 test-suite cpkg-test
-    type: exitcode-stdio-1.0
-    main-is: Spec.hs
-    hs-source-dirs: test
+    type:             exitcode-stdio-1.0
+    main-is:          Spec.hs
+    hs-source-dirs:   test
     default-language: Haskell2010
-    ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
+    ghc-options:      -threaded -rtsopts -with-rtsopts=-N -Wall
     build-depends:
         base -any,
         cpkg -any,
@@ -156,8 +161,9 @@
         ghc-options: -Werror
 
     if impl(ghc >=8.0)
-        ghc-options: -Wincomplete-uni-patterns -Wincomplete-record-updates
-                     -Wredundant-constraints -Widentities
+        ghc-options:
+            -Wincomplete-uni-patterns -Wincomplete-record-updates
+            -Wredundant-constraints -Widentities
 
     if impl(ghc >=8.4)
         ghc-options: -Wmissing-export-lists
diff --git a/dhall/cpkg-prelude.dhall b/dhall/cpkg-prelude.dhall
--- a/dhall/cpkg-prelude.dhall
+++ b/dhall/cpkg-prelude.dhall
@@ -1,20 +1,20 @@
 {- Dhall prelude imports -}
-let concatMapSep = https://raw.githubusercontent.com/dhall-lang/dhall-lang/master/Prelude/Text/concatMapSep
+let concatMapSep = https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/Text/concatMapSep
 in
 
-let concatMapText = https://raw.githubusercontent.com/dhall-lang/dhall-lang/master/Prelude/Text/concatMap
+let concatMapText = https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/Text/concatMap
 in
 
-let concatMap = https://raw.githubusercontent.com/dhall-lang/dhall-lang/master/Prelude/List/concatMap
+let concatMap = https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/List/concatMap
 in
 
-let map = https://raw.githubusercontent.com/dhall-lang/dhall-lang/master/Prelude/List/map
+let map = https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/List/map
 in
 
-let mapOptional = https://raw.githubusercontent.com/dhall-lang/dhall-lang/master/Prelude/Optional/map
+let mapOptional = https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/Optional/map
 in
 
-let not = https://raw.githubusercontent.com/dhall-lang/dhall-lang/master/Prelude/Bool/not
+let not = https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/Bool/not
 in
 
 {- Imported types -}
@@ -473,17 +473,31 @@
     configureMkExesExtraFlags { bins = bins, extraFlags = ([] : List Text) }
 in
 
-let buildWith =
+let generalBuild =
+  λ(cpus : types.BuildVars → Natural) →
   λ(envs : List types.EnvVar) →
   λ(cfg : types.BuildVars) →
     [ call (defaultCall ⫽ { program = makeExe cfg.buildOS
-                          , arguments = [ "-j${Natural/show cfg.cpus}" ]
+                          , arguments = [ "-j${Natural/show (cpus cfg)}" ]
                           , environment =
                               Some envs
                           })
     ]
 in
 
+let defaultCpus =
+  λ(cfg : types.BuildVars) →
+    cfg.cpus
+in
+
+let singleThreaded =
+  λ(_ : types.BuildVars) →
+    1
+in
+
+let buildWith =
+  generalBuild defaultCpus
+
 let defaultBuild =
   λ(cfg : types.BuildVars) →
     buildWith (buildEnv cfg) cfg
@@ -776,7 +790,7 @@
 
 let mesonEnv =
   λ(cfg : types.BuildVars) →
-    Some [ mkPkgConfigVar cfg.linkDirs
+    Some [ mkPkgConfigVar (cfg.linkDirs # cfg.shareDirs)
          , { var = "PATH", value = mkPathVar cfg.binDirs ++ "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" }
          , mkPy3Path cfg.linkDirs
          , libPath cfg
@@ -818,16 +832,21 @@
 let ninjaBuildWith =
   λ(linkLibs : List Text) →
   λ(cfg : types.BuildVars) →
+    let ldPreload =
+      if cfg.isCross
+        then [] : List types.EnvVar
+        else [ mkLDPreload cfg.preloadLibs ]
+    in
+
     [ call (defaultCall ⫽ { program = "ninja"
-                          , environment = Some [ mkPkgConfigVar cfg.linkDirs
-                                               , { var = "PATH", value = mkPathVar cfg.binDirs ++ "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" }
-                                               , mkPy3Path cfg.linkDirs
-                                               , libPath cfg
-                                               , mkLDRunPath cfg.linkDirs
-                                               , mkLDFlagsGeneral cfg.linkDirs linkLibs
-                                               , mkCFlags cfg
-                                               , mkLDPreload cfg.preloadLibs
-                                               ]
+                          , environment = Some ([ mkPkgConfigVar cfg.linkDirs
+                                                , { var = "PATH", value = mkPathVar cfg.binDirs ++ "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" }
+                                                , mkPy3Path cfg.linkDirs
+                                                , libPath cfg
+                                                , mkLDRunPath cfg.linkDirs
+                                                , mkLDFlagsGeneral cfg.linkDirs linkLibs
+                                                , mkCFlags cfg
+                                                ] # ldPreload)
                           , procDir = Some "build" }) ]
 in
 
@@ -1241,4 +1260,7 @@
 , configureWithPatch  = configureWithPatch
 , installPrefix       = installPrefix
 , unixPath            = unixPath
+, generalBuild        = generalBuild
+, defaultCpus         = defaultCpus
+, singleThreaded      = singleThreaded
 }
diff --git a/pkgs/pkg-set.dhall b/pkgs/pkg-set.dhall
--- a/pkgs/pkg-set.dhall
+++ b/pkgs/pkg-set.dhall
@@ -1,11 +1,11 @@
 {- Dhall prelue imports -}
-let concatMapSep = https://raw.githubusercontent.com/dhall-lang/dhall-lang/master/Prelude/Text/concatMapSep
+let concatMapSep = https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/Text/concatMapSep
 in
 
-let concatMapText = https://raw.githubusercontent.com/dhall-lang/dhall-lang/master/Prelude/Text/concatMap
+let concatMapText = https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/Text/concatMap
 in
 
-let not = https://raw.githubusercontent.com/dhall-lang/dhall-lang/master/Prelude/Bool/not
+let not = https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/Bool/not
 in
 
 {- cpkg prelude imports -}
@@ -77,7 +77,7 @@
 let binutils =
   λ(v : List Natural) →
     prelude.makeGnuExe { name = "binutils", version = v } ⫽
-      { pkgUrl = "https://mirrors.ocf.berkeley.edu/gnu/binutils/binutils-${prelude.showVersion v}.tar.xz"
+      { pkgUrl = "https://ftp.gnu.org/pub/gnu/binutils/binutils-${prelude.showVersion v}.tar.xz"
       , configureCommand = prelude.configureMkExes [ "mkinstalldirs" ]
       , installCommand =
           prelude.installWithBinaries [ "bin/ar", "bin/as", "bin/ld", "bin/strip", "bin/strings", "bin/readelf", "bin/objdump", "bin/nm", "bin/ranlib" ]
@@ -88,6 +88,9 @@
   λ(v : List Natural) →
     prelude.makeGnuExe { name = "bison", version = v } ⫽
       { configureCommand = prelude.configureMkExes [ "build-aux/move-if-change" ]
+      , buildCommand =
+          λ(cfg : types.BuildVars) →
+             prelude.generalBuild prelude.singleThreaded (prelude.buildEnv cfg) cfg
       , installCommand = prelude.installWithBinaries [ "bin/bison", "bin/yacc" ]
       , pkgBuildDeps = [ prelude.unbounded "m4" ]
       }
@@ -152,18 +155,19 @@
 in
 
 let fltk =
-  λ(cfg : { version : List Natural, patch : Natural }) →
-
-    let versionString = prelude.showVersion cfg.version
-    in
-    let patchString = Natural/show cfg.patch
+  λ(v : List Natural) →
+    let versionString = prelude.showVersion v
     in
-
-    prelude.defaultPackage ⫽
-      { pkgName = "fltk"
-      , pkgVersion = prelude.fullVersion cfg
-      , pkgUrl = "http://fltk.org/pub/fltk/${versionString}/fltk-${versionString}-${patchString}-source.tar.bz2"
-      , pkgSubdir = "fltk-${versionString}-${patchString}"
+    prelude.simplePackage { name = "fltk", version = v } ⫽
+      { pkgUrl = "http://fltk.org/pub/fltk/${versionString}/fltk-${versionString}-source.tar.bz2"
+      , pkgSubdir = "fltk-${versionString}"
+      , pkgDeps = [ prelude.unbounded "libX11"
+                  , prelude.unbounded "alsa-lib"
+                  , prelude.unbounded "zlib"
+                  , prelude.unbounded "libpng"
+                  , prelude.unbounded "libXft"
+                  , prelude.unbounded "freetype"
+                  ]
       }
 in
 
@@ -264,7 +268,7 @@
 let gmp =
   λ(v : List Natural) →
     prelude.simplePackage { name = "gmp", version = v } ⫽
-      { pkgUrl = "https://gmplib.org/download/gmp/gmp-${prelude.showVersion v}.tar.xz"
+      { pkgUrl = "https://gmplib.org/download/gmp/gmp-${prelude.showVersion v}.tar.lz"
       , configureCommand = prelude.configureMkExes [ "mpn/m4-ccas" ]
       , pkgBuildDeps = [ prelude.unbounded "m4" ]
       -- TODO: run 'make check'?
@@ -324,7 +328,7 @@
     prelude.cmakePackage ⫽
       { pkgName = "libjpeg-turbo"
       , pkgVersion = v
-      , pkgUrl = "https://downloads.sourceforge.net/libjpeg-turbo/libjpeg-turbo-${prelude.showVersion v}.tar.gz"
+      , pkgUrl = "https://ayera.dl.sourceforge.net/project/libjpeg-turbo/${prelude.showVersion v}/libjpeg-turbo-${prelude.showVersion v}.tar.gz"
       , pkgSubdir = "libjpeg-turbo-${prelude.showVersion v}"
       , pkgBuildDeps = [ prelude.unbounded "cmake"
                        , prelude.unbounded "nasm"
@@ -369,6 +373,10 @@
           in
 
           prelude.configureWithFlags ([ "--with-shared", "--enable-widec" ] # crossArgs) cfg
+      , installCommand =
+          λ(cfg : types.BuildVars) →
+            prelude.defaultInstall cfg
+              # [ prelude.symlink "lib/libncursesw.so" "lib/libncurses.so" ]
           -- enable-widec is necessary because util-linux uses libncursesw
       }
 in
@@ -382,7 +390,9 @@
 let pcre =
   λ(v : List Natural) →
     prelude.simplePackage { name = "pcre", version = v } ⫽
-      { pkgUrl = "https://ftp.pcre.org/pub/pcre/pcre-${prelude.showVersion v}.tar.bz2" }
+      { pkgUrl = "https://ftp.pcre.org/pub/pcre/pcre-${prelude.showVersion v}.tar.bz2"
+      , configureCommand = prelude.configureWithFlags [ "--enable-utf8", "--enable-unicode-properties" ]
+      }
 in
 
 let perl5 =
@@ -418,14 +428,18 @@
 let libpng =
   λ(v : List Natural) →
     prelude.simplePackage { name = "libpng", version = v } ⫽
-      { pkgUrl = "https://download.sourceforge.net/libpng/libpng-${prelude.showVersion v}.tar.xz"
+      { pkgUrl = "https://newcontinuum.dl.sourceforge.net/project/libpng/libpng16/${prelude.showVersion v}/libpng-${prelude.showVersion v}.tar.xz"
+      -- "https://download.sourceforge.net/libpng/libpng-${prelude.showVersion v}.tar.xz"
       , pkgDeps = [ prelude.unbounded "zlib" ]
       }
 in
 
 let sed =
   λ(v : List Natural) →
-    prelude.makeGnuExe { name = "sed", version = v } -- TODO: require pcre?
+    prelude.makeGnuExe { name = "sed", version = v } ⫽ -- TODO: require pcre?
+      { installCommand =
+          prelude.installWithManpages [ { file = "share/man/man1/sed.1", section = 1 } ]
+      }
 in
 
 let tar =
@@ -464,7 +478,7 @@
           λ(cfg : types.BuildVars) →
             let mkLibDynload =
               λ(libs : List Text) →
-                concatMapSep ":" Text (λ(dir : Text) → "${dir}/python2.7/lib-dynload") libs
+                concatMapSep ":" Text (λ(dir : Text) → "${dir}:${dir}/python2.7/lib-dynload") libs
             in
             let mkPython =
               λ(libs : List Text) →
@@ -513,6 +527,7 @@
         [ prelude.mkExe "configure"
         , prelude.call (prelude.defaultCall ⫽ { program = "./configure"
                                               , arguments = [ "--prefix=${cfg.installDir}" ]
+                                              -- , environment = Some (host # [ { var = "PATH", value = prelude.mkPathVar cfg.binDirs } ])
                                               , environment = Some (host # [ { var = "PATH", value = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" } ])
                                               })
         ]
@@ -520,6 +535,9 @@
 
     prelude.simplePackage { name = "zlib", version = v } ⫽
       { pkgUrl = "http://www.zlib.net/zlib-${prelude.showVersion v}.tar.xz"
+      -- , pkgBuildDeps = [ prelude.unbounded "coreutils"
+                       -- , prelude.unbounded "sed"
+                       -- ]
       , configureCommand = zlibConfigure
       , installCommand =
           prelude.installWithManpages [ { file = "share/man/man3/zlib.3", section = 3 } ]
@@ -1196,15 +1214,9 @@
   λ(v : List Natural) →
     prelude.simplePackage { name = "shared-mime-info", version = v } ⫽
      { pkgUrl = "http://freedesktop.org/~hadess/shared-mime-info-${prelude.showVersion v}.tar.xz"
-     , buildCommand =
-        λ(cfg : types.BuildVars) →
-          [ prelude.call (prelude.defaultCall ⫽ { program = prelude.makeExe cfg.buildOS
-                                                , environment = Some (prelude.defaultPath cfg # [ prelude.libPath cfg
-                                                                                                , prelude.mkLDRunPath cfg.linkDirs
-                                                                                                , prelude.mkPerlLib { libDirs = cfg.linkDirs, perlVersion = [5,30,0], cfg = cfg }
-                                                                                                ])
-                                                })
-          ]
+      , buildCommand =
+          λ(cfg : types.BuildVars) →
+             prelude.generalBuild prelude.singleThreaded (prelude.buildEnv cfg) cfg
      , installCommand =
         λ(cfg : types.BuildVars) →
           prelude.defaultInstall cfg
@@ -1917,12 +1929,13 @@
                                               })
         , prelude.copyFile "libbz2.so.${versionString}" "lib/libbz2.so.${versionString}"
         , prelude.symlink "lib/libbz2.so.${versionString}" "lib/libbz2.so.1.0"
+        , prelude.symlink "lib/libbz2.so.${versionString}" "lib/libbz2.so"
         ]
     in
   let bzipShared =
     λ(cfg : types.BuildVars) →
       [ prelude.call (prelude.defaultCall ⫽ { program = prelude.makeExe cfg.buildOS
-                                            , arguments = [ "-f", "Makefile-libbz2_so" ]
+                                            , arguments = cc cfg # [ "-f", "Makefile-libbz2_so" ]
                                             })
       ]
   in
@@ -2269,7 +2282,7 @@
       { pkgUrl = "https://www.libarchive.org/downloads/libarchive-${prelude.showVersion v}.tar.gz"
       -- , pkgDeps = [ prelude.unbounded "libxml2" ]
       , pkgDeps = [ prelude.unbounded "xz"
-                  -- , prelude.unbounded "bzip2"
+                  , prelude.unbounded "bzip2"
                   , prelude.unbounded "zlib"
                   ]
       }
@@ -2402,8 +2415,8 @@
     prelude.simplePackage { name = "m17n-lib", version = v } ⫽
       { pkgUrl = "http://download.savannah.gnu.org/releases/m17n/m17n-lib-${prelude.showVersion v}.tar.gz"
       , buildCommand =
-        λ(cfg : types.BuildVars) →
-          [ prelude.call (prelude.defaultCall ⫽ { program = prelude.makeExe cfg.buildOS }) ]
+          λ(cfg : types.BuildVars) →
+             prelude.generalBuild prelude.singleThreaded (prelude.buildEnv cfg) cfg
       , pkgDeps = [ prelude.unbounded "libXt" ]
       , pkgBuildDeps = [ prelude.unbounded "binutils" ]
       }
@@ -2517,6 +2530,7 @@
     prelude.simplePackage { name = "libopenjpeg", version = v } ⫽ prelude.cmakePackage ⫽
       { pkgUrl = "https://github.com/uclouvain/openjpeg/archive/v${versionString}.tar.gz"
       , pkgSubdir = "openjpeg-${versionString}"
+      , pkgDeps = [ prelude.unbounded "zlib" ]
       , installCommand =
           λ(cfg : types.BuildVars) →
             prelude.cmakeInstall cfg
@@ -3131,6 +3145,25 @@
     ]
 in
 
+let clang =
+  λ(v : List Natural) →
+    let versionString = prelude.showVersion v in
+    prelude.simplePackage { name = "clang", version = v } ⫽ prelude.cmakePackage ⫽
+      { pkgUrl = "https://github.com/llvm/llvm-project/releases/download/llvmorg-${versionString}/cfe-${versionString}.src.tar.xz"
+      , pkgSubdir = "cfe-${versionString}.src"
+      , pkgStream = False
+      , buildCommand = slowBuild
+      , pkgDeps = [ prelude.unbounded "llvm" ]
+      , installCommand =
+          λ(cfg : types.BuildVars) →
+            prelude.cmakeInstall cfg
+              # [ prelude.symlinkBinary "bin/clang"
+                , prelude.symlinkBinary "bin/clang-format"
+                ]
+      }
+in
+
+
 let llvm =
   λ(v : List Natural) →
     let versionString = prelude.showVersion v in
@@ -3177,7 +3210,7 @@
   λ(v : List Natural) →
     let versionString = prelude.showVersion v in
     prelude.simplePackage { name = "gcc", version = v } ⫽
-      { pkgUrl = "http://mirror.linux-ia64.org/gnu/gcc/releases/gcc-${versionString}/gcc-${versionString}.tar.xz"
+      { pkgUrl = "https://ftp.gnu.org/pub/gnu/gcc/gcc-${versionString}/gcc-${versionString}.tar.xz"
       , configureCommand =
           λ(cfg : types.BuildVars) →
             [ prelude.call { program = "contrib/download_prerequisites"
@@ -3187,9 +3220,11 @@
                            }
             ] #
               prelude.configureWithFlags [ "--disable-multilib" ] cfg
-      , installCommand = prelude.installWithBinaries [ "bin/gcc", "bin/g++", "bin/gcc-ar", "bin/gcc-nm", "bin/gfortran", "bin/gcc-ranlib" ]
+      , installCommand =
+          prelude.installWithBinaries [ "bin/gcc", "bin/g++", "bin/gcc-ar", "bin/gcc-nm", "bin/gfortran", "bin/gcc-ranlib" ]
       , pkgBuildDeps = [ prelude.unbounded "curl"
                        , prelude.unbounded "sed"
+                       , prelude.unbounded "libtool"
                        ]
       , pkgStream = False
       }
@@ -3219,10 +3254,15 @@
       , pkgDeps = [ prelude.unbounded "fontconfig"
                   , prelude.unbounded "libopenjpeg"
                   , prelude.unbounded "libjpeg-turbo"
+                  , prelude.unbounded "libjpeg"
                   , prelude.unbounded "freetype"
                   , prelude.unbounded "zlib"
                   , prelude.unbounded "libpng"
+                  , prelude.unbounded "libiconv"
+                  , prelude.unbounded "harfbuzz"
+                  , prelude.unbounded "glib"
                   ]
+      -- , configureCommand = prelude.cmakeConfigureWithFlags [ "-DENABLE_LIBOPENJPEG='none'" ]
       , installCommand =
           λ(cfg : types.BuildVars) →
             prelude.cmakeInstall cfg
@@ -3327,6 +3367,7 @@
       , pkgBuildDeps = [ prelude.unbounded "nasm" ]
       -- TODO: cross-compile
       , configureCommand = prelude.configureWithFlags [ "--enable-shared" ]
+      , installCommand = prelude.installWithBinaries [ "bin/ffmpeg" ]
       , pkgDeps = [ prelude.unbounded "bzip2" ]
       , pkgStream = False
       }
@@ -3559,12 +3600,25 @@
       , pkgStream = False
       , pkgDeps = [ prelude.unbounded "readline"
                   , prelude.unbounded "libXt"
+                  , prelude.unbounded "pcre"
                   ]
       , pkgBuildDeps = [ prelude.unbounded "gcc" ]
       , installCommand = prelude.installWithBinaries [ "bin/R", "bin/Rscript" ]
       }
 in
 
+let libspng =
+  λ(v : List Natural) →
+    prelude.ninjaPackage { name = "libspng", version = v } ⫽
+      { pkgUrl = "https://github.com/randy408/libspng/archive/v${prelude.showVersion v}.tar.gz"
+      , pkgBuildDeps = [ prelude.unbounded "pkg-config"
+                       , prelude.unbounded "meson"
+                       , prelude.lowerBound { name = "ninja", lower = [1,5,0] }
+                       ]
+      , pkgDeps = [ prelude.unbounded "zlib" ]
+      }
+in
+
 let glib-networking =
   λ(x : { version : List Natural, patch : Natural }) →
     let versionString = prelude.showVersion x.version
@@ -3586,7 +3640,7 @@
 let libwebp =
   λ(v : List Natural) →
     prelude.simplePackage { name = "libwebp", version = v } ⫽
-      { pkgUrl = "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.0.3.tar.gz" }
+      { pkgUrl = "https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${prelude.showVersion v}.tar.gz" }
 in
 
 let rustc =
@@ -3654,76 +3708,200 @@
       }
 in
 
--- https://downloads.haskell.org/~ghc/8.6.5/ghc-8.6.5-x86_64-deb9-linux.tar.xz
--- http://www.linuxfromscratch.org/lfs/view/development/chapter06/findutils.html
+let libiconv =
+  λ(v : List Natural) →
+    prelude.simplePackage { name = "libiconv", version = v } ⫽
+      { pkgUrl = "https://ftp.gnu.org/pub/gnu/libiconv/libiconv-${prelude.showVersion v}.tar.gz" }
+in
+
+let libav =
+  λ(v : List Natural) →
+    prelude.simplePackage { name = "libav", version = v } ⫽
+      { pkgUrl = "https://libav.org/releases/libav-${prelude.showVersion v}.tar.xz"
+      , configureCommand = prelude.configureMkExes [ "version.sh", "doc/texi2pod.pl" ]
+      , pkgBuildDeps = [ prelude.unbounded "nasm"
+                       , prelude.unbounded "perl"
+                       ]
+      , installCommand = prelude.installWithBinaries [ "bin/avconv", "bin/avprobe" ]
+      }
+in
+
+-- TODO: use bzip2 approach here; build shared + static libs
+let alsa-lib =
+  λ(v : List Natural) →
+    prelude.simplePackage { name = "alsa-lib", version = v } ⫽
+      { pkgUrl = "https://www.alsa-project.org/files/pub/lib/alsa-lib-${prelude.showVersion v}.tar.bz2"
+      , pkgStream = False
+      }
+in
+
+let bash-completion =
+  λ(v : List Natural) →
+    let versionString = prelude.showVersion v in
+    prelude.simplePackage { name = "bash-completion", version = v } ⫽
+      { pkgUrl = "https://github.com/scop/bash-completion/releases/download/${versionString}/bash-completion-${versionString}.tar.xz" }
+in
+
+let hugs =
+  let hugsEnv =
+    λ(_ : List Text) →
+    λ(cfg : types.BuildVars) →
+      Some [ { var = "CFLAGS", value = "-std=gnu89" }
+           , { var = "PATH", value = prelude.mkPathVar cfg.binDirs }
+           ]
+  in
+  prelude.simplePackage { name = "hugs", version = [2006,9] } ⫽
+    { pkgUrl = "https://www.haskell.org/hugs/downloads/2006-09/hugs98-plus-Sep2006.tar.gz"
+    , pkgSubdir = "hugs98-plus-Sep2006"
+    , configureCommand = prelude.generalConfigure hugsEnv "configure" ([] : List Text) ([] : List Text)
+    , pkgStream = False
+    , pkgBuildDeps = [ prelude.unbounded "coreutils"
+                     , prelude.unbounded "sed"
+                     , prelude.unbounded "gcc"
+                     , prelude.unbounded "binutils"
+                     , prelude.unbounded "grep"
+                     , prelude.unbounded "findutils"
+                     ]
+    }
+in
+
+let bash =
+  λ(v : List Natural) →
+    prelude.simplePackage { name = "bash", version = v } ⫽
+        { pkgUrl = "https://ftp.gnu.org/gnu/bash/bash-${prelude.showVersion v}.tar.gz" }
+in
+
+let findutils =
+  λ(v : List Natural) →
+    prelude.simplePackage { name = "findutils", version = v } ⫽
+        { pkgUrl = "https://ftp.gnu.org/pub/gnu/findutils/findutils-${prelude.showVersion v}.tar.gz"
+        , pkgStream = False
+        }
+in
+
+let ghc =
+  λ(v : List Natural) →
+    let versionString = prelude.showVersion v in
+    prelude.simplePackage { name = "ghc", version = v } ⫽
+        { pkgUrl = "https://downloads.haskell.org/~ghc/${versionString}/ghc-${versionString}-x86_64-deb9-linux.tar.xz"
+        , buildCommand = prelude.doNothing
+        , pkgStream = False
+        }
+in
+
+-- TODO: runghc Setup.hs configure
+-- let composition-prelude =
+  -- λ(v : List Natural) →
+    -- prelude.mkHackagePackage { name = "composition-prelude", version = v }
+-- in
+
 -- TODO: musl-ghc?
 -- https://hub.darcs.net/raichoo/hikari
 -- https://versaweb.dl.sourceforge.net/project/schilytools/schily-2019-03-29.tar.bz2
 -- https://busybox.net/downloads/busybox-1.31.0.tar.bz2
 -- http://www.linuxfromscratch.org/blfs/view/svn/general/unzip.html
 -- https://github.com/jsoftware/jsource/archive/j807-release.tar.gz
+-- https://codeload.github.com/boyerjohn/rapidstring/zip/master
 
-[ autoconf [2,69]
-, automake [1,16,1]
+let cmark =
+  λ(v : List Natural) →
+    prelude.simplePackage { name = "cmark", version = v } ⫽ prelude.cmakePackage ⫽
+        { pkgUrl = "https://github.com/commonmark/cmark/archive/${prelude.showVersion v}.tar.gz" }
+in
+
+-- TODO: set CC for lzip and lzlib
+let lzip =
+  λ(v : List Natural) →
+    prelude.simplePackage { name = "lzip", version = v } ⫽
+        { pkgUrl = "http://download.savannah.gnu.org/releases/lzip/lzip-${prelude.showVersion v}.tar.gz"
+        , installCommand = prelude.installWithBinaries [ "bin/lzip" ]
+        }
+in
+
+let lzlib =
+  λ(v : List Natural) →
+    prelude.simplePackage { name = "lzlib", version = v } ⫽
+        { pkgUrl = "http://download.savannah.gnu.org/releases/lzip/lzlib/lzlib-${prelude.showVersion v}.tar.gz"
+        , configureCommand = prelude.configureWithFlags [ "--enable-shared" ]
+        }
+in
+
+let lziprecover =
+  λ(v : List Natural) →
+    prelude.simplePackage { name = "lziprecover", version = v } ⫽
+        { pkgUrl = "http://download.savannah.gnu.org/releases/lzip/lziprecover/lziprecover-1.21.tar.gz"
+        , installCommand = prelude.installWithBinaries [ "bin/lziprecover" ]
+        }
+in
+
+[ alsa-lib [1,1,9]
 , at-spi-atk { version = [2,33], patch = 2 }
 , at-spi-core { version = [2,33], patch = 2 }
 , atk { version = [2,33], patch = 3 }
 , ats [0,3,13]
+, autoconf [2,69]
+, automake [1,16,1]
 , babl { version = [0,1], patch = 68 }
+, bash [5,0]
+, bash-completion [2,9]
 , binutils [2,32]
-, bison [3,3,1]
+, bison [3,4,1]
 , blas [3,8,0]
 , bzip2 [1,0,6]
 , cairo [1,16,0]
 , chickenScheme [5,0,0]
-, cimg [2,6,6]
-, cmake { version = [3,15], patch = 1 }
+, cimg [2,7,0]
+, clang [8,0,1]
+, cmake { version = [3,15], patch = 2 }
+, cmark [0,29,0]
 , compositeproto [0,4]
 , coreutils [8,31]
 , ctags [5,8]
-, curl [7,65,0]
+, curl [7,66,0]
 , damageproto [1,2,1]
 , dbus [1,13,12]
 , diffutils [3,7]
 , dri2proto [2,8]
 , eigen [3,3,7]
 , elfutils [0,176]
-, emacs [26,2]
+, emacs [26,3]
 , exiv2 [0,27,1]
-, expat [2,2,6]
-, feh [3,1,1]
-, ffmpeg [4,1,3]
+, expat [2,2,7]
+, feh [3,2,1]
+, ffmpeg [4,2]
 , fftw [3,3,8]
+, findutils [4,6,0]
 , fixesproto [5,0]
 , fontconfig [2,13,1]
 , fossil [2,7]
 , flex [2,6,3] -- 2.6.4?
-, fltk { version = [1,3,4], patch = 2 }
-, freetype-prebuild [2,9,1] -- TODO: force both to have same version?
-, freetype [2,9,1]
+, fltk [1,3,5]
+, freetype-prebuild [2,10,1] -- TODO: force both to have same version?
+, freetype [2,10,1]
 , fribidi [1,0,5]
 , gawk [5,0,1]
 , gc [8,0,4]
-, gcc [9,1,0]
+, gcc [9,2,0]
 , gdb [8,2]
 , gdk-pixbuf { version = [2,38], patch = 1 }
 , gegl { version = [0,4], patch = 16 }
 , gettext [0,20,1]
 , gexiv2 { version = [0,12], patch = 0 }
+, ghc [8,6,5]
 , gperf [3,1]
 , gperftools [2,7]
 , giflib [5,1,4]
-, git [2,19,2]
+, git [2,23,0]
 , glib { version = [2,61], patch = 1 }
 , glib-networking { version = [2,61], patch = 2 }
 , glproto [1,4,17]
 , glu [9,0,0]
 , json-glib { version = [1,4], patch = 4 }
-, glibc [2,29]
+, glibc [2,30]
 , gmp [6,1,2]
 , gobject-introspection { version = [1,60], patch = 2 }
 , gnome-doc-utils { version = [0,20], patch = 10 }
-, gnupg [2,2,16]
+, gnupg [2,2,17]
 , gnutls { version = [3,6], patch = 9 }
 , graphviz [2,40,1]
 , grep [3,3]
@@ -3733,6 +3911,7 @@
 , gzip [1,9]
 , harfbuzz [2,5,3]
 , htop [2,2,0]
+, hugs
 , icu [64,2]
 , icu-le-hb [1,0,3]
 , imageMagick [7,0,8]
@@ -3748,9 +3927,10 @@
 , lapack [3,8,0]
 , lcms2 [2,9]
 , leptonica [1,78,0]
-, libarchive [3,3,3]
-, libassuan [2,5,2]
+, libarchive [3,4,0]
+, libassuan [2,5,3]
 , libatomic_ops [7,6,10]
+, libav [12,3]
 , libboost [1,69,0]
 , libcds [2,3,2]
 , libcroco { version = [0,6], patch = 12 }
@@ -3761,19 +3941,20 @@
 , libevent [2,1,10]
 , libexif [0,6,21]
 , libffi [3,2,1]
-, libgcrypt [1,8,4]
+, libgcrypt [1,8,5]
 , libglade { version = [2,6], patch = 4 }
-, libgpgError [1,33]
+, libgpgError [1,36]
 , libICE [1,0,9]
+, libiconv [1,16]
 , libjpeg [9]
-, libjpeg-turbo [2,0,2]
+, libjpeg-turbo [2,0,3]
 , libksba [1,3,5]
 , libmypaint [1,3,0]
 , libnettle [3,5,1]
 , libopenjpeg [2,3,1]
 , libotf [0,9,16]
 , libpciaccess [0,14]
-, libpng [1,6,35]
+, libpng [1,6,37]
 , libpsl [0,21,0]
 , libpthread-stubs [0,4]
 , libraw [0,19,2]
@@ -3784,6 +3965,7 @@
 , libsepol [2,8]
 , libsodium [1,0,17]
 , libsoup { version = [2,67], patch = 3 }
+, libspng [0,5,0]
 , libssh2 [1,8,0]
 , libtasn1 [4,14]
 , libtiff [4,0,10]
@@ -3820,6 +4002,9 @@
 , lmdb [0,9,23]
 , lua [5,3,5]
 , lz4 [1,9,1]
+, lzip [1,21]
+, lziprecover [1,21]
+, lzlib [1,11]
 , m17n [1,8,0]
 , m4 [1,4,18]
 , make [4,2,1]
@@ -3828,10 +4013,10 @@
 , memcached [1,5,12]
 , mercury
 , mesa [19,0,5]
-, meson [0,50,1]
+, meson [0,51,1]
 , mpc [1,1,0]
 , mpfr [4,0,2]
-, mpg123 [1,25,10]
+, mpg123 [1,25,12]
 , mosh [1,3,2]
 , motif [2,3,8]
 , musl [1,1,20]
@@ -3840,7 +4025,7 @@
 , ncurses [6,1]
 , nginx [1,15,7]
 , ninja [1,9,0]
-, node [10,15,1]
+, node [10,16,2]
 , npth [1,6]
 , nspr [4,20]
 , openblas [0,3,2]
@@ -3851,14 +4036,14 @@
 , pango { version = [1,43], patch = 0 }
 , pari [2,11,1]
 , patch [2,7]
-, pcre [8,42]
-, pcre2 [10,32]
+, pcre [8,43]
+, pcre2 [10,33]
 , pdfgrep [2,1,2]
 , perl5 [5,30,0]
 , phash [0,9,6]
 , pixman [0,38,4]
 , pkg-config [0,29,2]
-, poppler [0,79,0]
+, poppler [0,80,0]
 , postgresql [11,1]
 , protobuf [3,8,0]
 , pycairo [1,18,1]
@@ -3873,19 +4058,19 @@
 , ragel [6,10]
 , randrproto [1,5,0]
 , re2c [1,1,1]
-, readline [7,0]
+, readline [8,0]
 , recordproto [1,14,2]
 , renderproto [0,11,1]
 , ruby { version = [2,6], patch = 3 }
-, rustc [1,36,0]
+, rustc [1,37,0]
 , scour [0,37]
 , scrnsaverproto [1,2,2]
 , sdl2 [2,0,10]
 , sed [4,7]
 , shared-mime-info [1,10]
-, sqlite { year = 2018, version = [3,26,0] }
+, sqlite { year = 2019, version = [3,29,0] }
 , swig [3,0,12]
-, tar [1,30]
+, tar [1,32]
 , tcc [0,9,27]
 , texinfo [6,6]
 , tesseract [4,0,0]
diff --git a/src/Package/C/Build.hs b/src/Package/C/Build.hs
--- a/src/Package/C/Build.hs
+++ b/src/Package/C/Build.hs
@@ -138,7 +138,7 @@
 
 getPreloads :: [ FilePath ] -> IO [ FilePath ]
 getPreloads =
-    fmap fold . traverse (\fp -> namesMatching (fp </> "*.so"))
+    fmap concat . traverse (\fp -> namesMatching (fp </> "*.so"))
 
 -- only really suitable for hashing at this point, since we use @""@ as the
 -- install directory. we use this to get a hash which we then use to get the
diff --git a/src/Package/C/Fetch.hs b/src/Package/C/Fetch.hs
--- a/src/Package/C/Fetch.hs
+++ b/src/Package/C/Fetch.hs
@@ -22,6 +22,7 @@
 urlToCompression s | ".tar.gz" `isSuffixOf` s || ".tgz" `isSuffixOf` s = pure $ Tar Gz
                    | ".tar.xz" `isSuffixOf` s = pure $ Tar Xz
                    | ".tar.bz2" `isSuffixOf` s = pure $ Tar Bz2
+                   | ".tar.lz" `isSuffixOf` s = pure $ Tar Lz
                    | ".tar" `isSuffixOf` s = pure $ Tar None
                    | ".zip" `isSuffixOf` s = pure Zip
                    | otherwise = unrecognized s
diff --git a/src/Package/C/Unpack.hs b/src/Package/C/Unpack.hs
--- a/src/Package/C/Unpack.hs
+++ b/src/Package/C/Unpack.hs
@@ -9,12 +9,14 @@
 import qualified Codec.Compression.BZip as Bzip
 import qualified Codec.Compression.GZip as Gzip
 import qualified Codec.Compression.Lzma as Lzma
+import qualified Codec.Lzip             as Lzip
 import qualified Data.ByteString.Lazy   as BSL
 import           System.Directory
 
 data TarCompress = Gz
                  | Xz
                  | Bz2
+                 | Lz
                  | None
 
 data Compression = Tar TarCompress
@@ -26,6 +28,7 @@
 getCompressor None = id
 getCompressor Xz   = Lzma.decompress
 getCompressor Bz2  = Bzip.decompress
+getCompressor Lz   = Lzip.decompress . BSL.toStrict
 
 archiveResponse :: TarCompress -> FilePath -> BSL.ByteString -> IO ()
 archiveResponse compressScheme dirName =
