arch-hs 0.10.0.0 → 0.10.1.0
raw patch · 7 files changed
+134/−94 lines, 7 filesdep ~aesondep ~polysemydep ~servant-clientPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: aeson, polysemy, servant-client
API changes (from Hackage documentation)
+ Distribution.ArchHs.PkgBuild: [_flags] :: PkgBuild -> String
+ Distribution.ArchHs.Utils: defaultFlags :: [PkgFlag] -> FlagAssignment -> FlagAssignment
+ Distribution.ArchHs.Utils: getFlagAssignment :: PackageName -> FlagAssignments -> FlagAssignment
- Distribution.ArchHs.PkgBuild: PkgBuild :: String -> String -> String -> String -> String -> String -> String -> String -> String -> Maybe String -> Bool -> Bool -> PkgBuild
+ Distribution.ArchHs.PkgBuild: PkgBuild :: String -> String -> String -> String -> String -> String -> String -> String -> String -> Maybe String -> Bool -> Bool -> String -> PkgBuild
- Distribution.ArchHs.PkgBuild: felixTemplate :: Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text
+ Distribution.ArchHs.PkgBuild: felixTemplate :: Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text
Files
- CHANGELOG.md +83/−71
- app/Main.hs +2/−2
- arch-hs.cabal +5/−5
- data/NAME_PRESET.json +1/−0
- src/Distribution/ArchHs/Core.hs +9/−12
- src/Distribution/ArchHs/PkgBuild.hs +10/−4
- src/Distribution/ArchHs/Utils.hs +24/−0
CHANGELOG.md view
@@ -3,175 +3,187 @@ `arch-hs` uses [PVP Versioning][1]. The changelog is available [on GitHub][2]. +## 0.10.1.0++- Always generate `-f` or `-f-` for each flag in PKGBUILD++- Better prompt for missing packages++- Fix the bug that resolved targets were not filtered out correctly when processing sub-libraries++- Update name preset+ ## 0.10.0.0 -* Add `arch-hs-sync list` to list Haskell packages in [community]+- Add `arch-hs-sync list` to list Haskell packages in [community] -* Remove generating meta package+- Remove generating meta package -* Add `--install-deps` to call pacman to install all dependencies of a target+- Add `--install-deps` to call pacman to install all dependencies of a target -* Fix the list of packages to be packed is not consistent+- Fix the list of packages to be packed is not consistent -* Add `--no-skip-missing` to consider abnormal dependencies in packaging+- Add `--no-skip-missing` to consider abnormal dependencies in packaging -* Update dependency versions+- Update dependency versions -* Update name preset+- Update name preset ## 0.9.1.0 -* Support Cabal 3.4+- Support Cabal 3.4 -* Use the version of [`haskell-ghc`](https://archlinux.org/packages/community/x86_64/ghc/) to evaluate condition trees+- Use the version of [`haskell-ghc`](https://archlinux.org/packages/community/x86_64/ghc/) to evaluate condition trees -* Fix the bug that sub-lib components appear wrongly in results+- Fix the bug that sub-lib components appear wrongly in results ## 0.9.0.0 -* Remove `arch-hs-submit` executable+- Remove `arch-hs-submit` executable -* Add `arch-hs-sync` executable, which has two commands:- * `arch-hs-sync submit` - the same as `arch-hs-submit` previously- * `arch-hs-sync check` - check version inconsistencies between [community] and Hackage+- Add `arch-hs-sync` executable, which has two commands: -* Improve CLI options: - * values of `--skip` and `--flag` are no longer separated by comma- * the options can be set many times, for example: `arch-hs -f packageA:flagA:true -f packageB:flagB:false`+ - `arch-hs-sync submit` - the same as `arch-hs-submit` previously+ - `arch-hs-sync check` - check version inconsistencies between [community] and Hackage -* Update name preset+- Improve CLI options: + - values of `--skip` and `--flag` are no longer separated by comma+ - the options can be set many times, for example: `arch-hs -f packageA:flagA:true -f packageB:flagB:false`++- Update name preset+ ## 0.8.0.0 -* Fix the bug that unable to run with dependency-free packages+- Fix the bug that unable to run with dependency-free packages -* Do not generate PKGBUILDs for missing dependencies of the target+- Do not generate PKGBUILDs for missing dependencies of the target -* Support resolving sub-libraries in `arch-hs-diff`+- Support resolving sub-libraries in `arch-hs-diff` -* Remove `falseList`, which `arch-hs-submit` no longer uses+- Remove `falseList`, which `arch-hs-submit` no longer uses ## 0.7.1.0 -* Bump ghc version to 8.10.4+- Bump ghc version to 8.10.4 -* Fix some output formats+- Fix some output formats ## 0.7.0.0 -* Support dumping output of `arch-hs` to JSON+- Support dumping output of `arch-hs` to JSON -* Support resolving setup dependencies in `arch-hs-diff`+- Support resolving setup dependencies in `arch-hs-diff` -* Fix wrong concatenation direction of differentiating dependencies in `arch-hs-diff`+- Fix wrong concatenation direction of differentiating dependencies in `arch-hs-diff` -* Replace `req` with [`arch-web`](https://github.com/berberman/arch-web) and `http-client`+- Replace `req` with [`arch-web`](https://github.com/berberman/arch-web) and `http-client` -* Make `getLatestSHA256` become total function+- Make `getLatestSHA256` become total function ## 0.6.2.0 -* Use `Doc` to print prompt messages+- Use `Doc` to print prompt messages -* Fix wrong line feeds in `arch-hs-diff`+- Fix wrong line feeds in `arch-hs-diff` ## 0.6.1.0 -* Show dependens and makedepends in `arch-hs-diff` even if there is no difference between two target versions+- Show dependens and makedepends in `arch-hs-diff` even if there is no difference between two target versions -* Bump ghc version to 8.10.3+- Bump ghc version to 8.10.3 -* Fix an alignment error in `arch-hs-submit`+- Fix an alignment error in `arch-hs-submit` ## 0.6.0.0 -* Adopt [prettyprinter](https://hackage.haskell.org/package/prettyprinter)+- Adopt [prettyprinter](https://hackage.haskell.org/package/prettyprinter) -* Support resolving `pkgconfigDepends` and `extraLibs` using pacman files db+- Support resolving `pkgconfigDepends` and `extraLibs` using pacman files db -* Support resolving custom-setup dependencies+- Support resolving custom-setup dependencies -* Add an option to force `arch-hs` to run even if the target is in [community] +- Add an option to force `arch-hs` to run even if the target is in [community] -* Adopt [Diff](https://hackage.haskell.org/package/Diff) in `arch-hs-diff` and `arch-hs-submit`+- Adopt [Diff](https://hackage.haskell.org/package/Diff) in `arch-hs-diff` and `arch-hs-submit` -* Fix the bug that `ghc` is missing in depends+- Fix the bug that `ghc` is missing in depends -* Fix typo ([#35](https://github.com/berberman/arch-hs/pull/35))+- Fix typo ([#35](https://github.com/berberman/arch-hs/pull/35)) -* Update dependencies ([#34](https://github.com/berberman/arch-hs/pull/34))+- Update dependencies ([#34](https://github.com/berberman/arch-hs/pull/34)) ## 0.5.0.0 -* Add `TargetDisappearException` to complain if target is clearly not reachable+- Add `TargetDisappearException` to complain if target is clearly not reachable -* Warn abnormal dependencies+- Warn abnormal dependencies -* Clear trace file if is not empty+- Clear trace file if is not empty -* Collect test dependencies recursively+- Collect test dependencies recursively -* Drop meaningless `alpm_errno_t`+- Drop meaningless `alpm_errno_t` -* Update name preset ([#30](https://github.com/berberman/arch-hs/pull/30) [#32](https://github.com/berberman/arch-hs/pull/32))+- Update name preset ([#30](https://github.com/berberman/arch-hs/pull/30) [#32](https://github.com/berberman/arch-hs/pull/32)) -* Fix a typo ([#29](https://github.com/berberman/arch-hs/pull/29))+- Fix a typo ([#29](https://github.com/berberman/arch-hs/pull/29)) ## 0.4.0.0 -* [Alpm](https://www.archlinux.org/pacman/libalpm.3.html) support+- [Alpm](https://www.archlinux.org/pacman/libalpm.3.html) support -* Fix sub-libraries handling ([#22](https://github.com/berberman/arch-hs/issues/22))+- Fix sub-libraries handling ([#22](https://github.com/berberman/arch-hs/issues/22)) -* Fix missing build tools ([#24](https://github.com/berberman/arch-hs/issues/24))+- Fix missing build tools ([#24](https://github.com/berberman/arch-hs/issues/24)) -* Fix flag comparison in diff ([#25](https://github.com/berberman/arch-hs/issues/25))+- Fix flag comparison in diff ([#25](https://github.com/berberman/arch-hs/issues/25)) -* Fix pretty printing of flags+- Fix pretty printing of flags -* Update name preset ([#26](https://github.com/berberman/arch-hs/pull/26))+- Update name preset ([#26](https://github.com/berberman/arch-hs/pull/26)) ## 0.3.0.0 -* Update name preset+- Update name preset -* Add check in submit+- Add check in submit ## 0.2.0.0 -* More accurate naming conversion between hackage representation and archlinux representation, according to [NAME_PRESET.json](https://github.com/berberman/arch-hs/blob/master/data/NAME_PRESET.json)+- More accurate naming conversion between hackage representation and archlinux representation, according to [NAME_PRESET.json](https://github.com/berberman/arch-hs/blob/master/data/NAME_PRESET.json) -* Clearer project structure+- Clearer project structure -* More reasonable exceptions+- More reasonable exceptions -* Provide versions of haskell packages in archlinux community+- Provide versions of haskell packages in archlinux community -* Add `arch-hs-submit` executable+- Add `arch-hs-submit` executable ## 0.1.1.0 -* Add uusi option+- Add uusi option ## 0.1.0.0 -* Support sub-libraries ([#16](https://github.com/berberman/arch-hs/issues/16))+- Support sub-libraries ([#16](https://github.com/berberman/arch-hs/issues/16)) -* Split `arch-hs-uusi` into [`uusi`](https://github.com/berberman/uusi)+- Split `arch-hs-uusi` into [`uusi`](https://github.com/berberman/uusi) -* Better performance in dependency resolving+- Better performance in dependency resolving -* Fix recommended package order+- Fix recommended package order -* Trace for dependency resolving+- Trace for dependency resolving -* More reasonable PKGBUILD template ([#17](https://github.com/berberman/arch-hs/issues/16) [#18](https://github.com/berberman/arch-hs/issues/16) [#19](https://github.com/berberman/arch-hs/issues/16) [#20](https://github.com/berberman/arch-hs/issues/16))+- More reasonable PKGBUILD template ([#17](https://github.com/berberman/arch-hs/issues/16) [#18](https://github.com/berberman/arch-hs/issues/16) [#19](https://github.com/berberman/arch-hs/issues/16) [#20](https://github.com/berberman/arch-hs/issues/16)) -* Fix indentation of flags' pretty printing+- Fix indentation of flags' pretty printing ## 0.0.0.0 -* Initially created.+- Initially created. [1]: https://pvp.haskell.org [2]: https://github.com/berberman/arch-hs/releases
app/Main.hs view
@@ -97,7 +97,7 @@ forM_ children $ putStrLn . unPackageName unless (null abnormalDependencies || noSkipMissing) $- printWarn "Those package(s) are ignored unless you specify --no-skip-missing"+ printWarn "Above package(s) are ignored unless you specify --no-skip-missing" let fillProvidedPkgs provideList provider = map (\x -> if (x ^. pkgName) `elem` provideList then ProvidedPackage (x ^. pkgName) provider else x) fillProvidedDeps provideList provider = map (pkgDeps %~ each %~ (\y -> if y ^. depName `elem` provideList then y & depProvider ?~ provider else y))@@ -138,7 +138,7 @@ -- add sign for missing children if we have embed . putDoc $ (prettyDeps . reverse $ map (\x -> (x, x `elem` missingChildren)) flattened) <> line <> line - unless (null missingChildren) $+ unless (null missingChildren || not noSkipMissing) $ embed . putDoc $ annotate italicized $ yellowStarInParens <+> "indicates a missing package" <> line <> line let sysDepsToBePacked = Map.filterWithKey (\k _ -> k `elem` flattened) sysDeps
arch-hs.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: arch-hs-version: 0.10.0.0+version: 0.10.1.0 synopsis: Distribute hackage packages to archlinux description: @arch-hs@ is a command-line program, which simplifies the process of producing@@ -15,7 +15,7 @@ license-file: LICENSE author: berberman maintainer: berberman <berberman@yandex.com>-copyright: (c) 2020-2021 berberman+copyright: (c) 2020-2022 berberman category: Distribution build-type: Simple extra-source-files: data/NAME_PRESET.json@@ -36,7 +36,7 @@ common common-options build-depends:- , aeson ^>=1.5.4+ , aeson >=1.5.4 && <2.1 , algebraic-graphs >=0.5 && <0.7 , arch-web ^>=0.1.0 , base >=4.12 && <5@@ -57,10 +57,10 @@ , microlens-th ^>=0.4.3 , neat-interpolation ^>=0.5.1 , optparse-simple ^>=0.1.1.3- , polysemy ^>=1.5.0 || ^>=1.6.0+ , polysemy >=1.5.0 && <1.7.2 , prettyprinter ^>=1.7.0 , prettyprinter-ansi-terminal ^>=1.1.2- , servant-client ^>=0.18.2+ , servant-client >=0.18.2 && <0.20 , split ^>=0.2.3 , tar-conduit ^>=0.3.2 , template-haskell ^>=2.16.0 || ^>=2.17.0
data/NAME_PRESET.json view
@@ -67,6 +67,7 @@ "haskell-safesemaphore": "SafeSemaphore", "haskell-sha": "SHA", "haskell-smtlib": "smtLib",+ "haskell-src": "haskell-src", "haskell-src-exts": "haskell-src-exts", "haskell-src-exts-util": "haskell-src-exts-util", "haskell-src-meta": "haskell-src-meta",
src/Distribution/ArchHs/Core.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeApplications #-}+{-# LANGUAGE ViewPatterns #-} -- | Copyright: (c) 2020-2021 berberman -- SPDX-License-Identifier: MIT@@ -34,6 +35,7 @@ import Distribution.ArchHs.Hackage ( getLatestCabal, getLatestSHA256,+ getPackageFlag, ) import Distribution.ArchHs.Internal.Prelude import Distribution.ArchHs.Local (ignoreList)@@ -76,17 +78,8 @@ flagAssignments <- ask let name = getPkgName' cabal packageFlags = genPackageFlags cabal- defaultFlagAssignments =- foldr (\f acc -> insertFlagAssignment (flagName f) (flagDefault f) acc) (mkFlagAssignment []) packageFlags- flagAssignment = case Map.lookup name flagAssignments of- Just f -> unFlagAssignment f- _ -> []- flagNames = fmap fst flagAssignment- thisFlag =- mkFlagAssignment- . (<> flagAssignment)- . filter (\(fName, _) -> fName `notElem` flagNames)- $ unFlagAssignment defaultFlagAssignments+ flagAssignment = getFlagAssignment name flagAssignments+ thisFlag = defaultFlags packageFlags flagAssignment trace' $ "Evaluating condition tree of " <> show name trace' $ "Flags: " <> show thisFlag traceCallStack@@ -178,7 +171,7 @@ nextExe <- processNext $ fmap snd filteredExeDeps -- TODO: maybe unstable nextTest <- processNext $ fmap snd filteredTestDeps- nextSubLibs <- mapM (getDependencies skip (Just name)) $ fmap snd filteredSubLibDeps+ nextSubLibs <- processNext $ fmap snd filteredSubLibDeps let temp = [nextLib, nextSetup, nextExe, nextTest, nextSubLibs] nexts = G.overlays $ temp ^. each ^.. each . _1 subsubs = temp ^. each ^.. each . _2 ^. each@@ -297,6 +290,10 @@ cabalToPkgBuild pkg uusi sysDeps = do let name = pkg ^. pkgName cabal <- packageDescription <$> getLatestCabal name+ pkgFlags <- getPackageFlag name+ assignment <- getFlagAssignment name <$> ask+ let showFlagForCmd (unFlagName -> fName, enabled) = "-f" <> (if enabled then "" else "-") <> fName+ _flags = unwords . fmap showFlagForCmd . unFlagAssignment $ defaultFlags pkgFlags assignment _sha256sums <- (\case Just s -> "'" <> s <> "'"; Nothing -> "'SKIP'") <$> getLatestSHA256 name let _hkgName = pkg ^. pkgName & unPackageName _pkgName = unArchLinuxName . toArchLinuxName $ pkg ^. pkgName
src/Distribution/ArchHs/PkgBuild.hs view
@@ -49,7 +49,9 @@ -- | Whether generate @prepare()@ bash function which calls @uusi@ _enableUusi :: Bool, -- | Whether generate @check()@ bash function- _enableCheck :: Bool+ _enableCheck :: Bool,+ -- | Command-line flags+ _flags :: String } -- | Map 'LicenseId' to 'ArchLicense'. License not provided by system will be mapped to @custom:...@.@@ -105,6 +107,10 @@ ) (if _enableUusi then "\n" <> uusi <> "\n\n" else "\n") (if _enableCheck then "\n" <> check <> "\n\n" else "\n")+ ( pack $ case _flags of+ [] -> ""+ xs -> "\\\n" <> xs+ ) -- | Text of @check()@ function. check :: Text@@ -133,8 +139,8 @@ |] -- | A fixed template of haskell package in archlinux. See <https://wiki.archlinux.org/index.php/Haskell_package_guidelines Haskell package guidelines> .-felixTemplate :: Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text-felixTemplate hkgname pkgname pkgver pkgdesc url license depends makedepends sha256sums licenseF uusiF checkF =+felixTemplate :: Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text+felixTemplate hkgname pkgname pkgver pkgdesc url license depends makedepends sha256sums licenseF uusiF checkF flags = [text| # This file was generated by https://github.com/berberman/arch-hs, please check it manually. # Maintainer: Your Name <youremail@domain.com>@@ -159,7 +165,7 @@ --prefix=/usr --docdir=/usr/share/doc/$$pkgname --enable-tests \ --dynlibdir=/usr/lib --libsubdir=\$$compiler/site-local/\$$pkgid \ --ghc-option=-optl-Wl\,-z\,relro\,-z\,now \- --ghc-option='-pie'+ --ghc-option='-pie' $flags runhaskell Setup build runhaskell Setup register --gen-script
src/Distribution/ArchHs/Utils.hs view
@@ -39,11 +39,15 @@ mapDiff, unDiff, archHsVersion,+ defaultFlags,+ getFlagAssignment, ) where import Control.Monad ((<=<)) import Data.Algorithm.Diff+import qualified Data.Map.Strict as Map+import Data.Maybe (fromMaybe) import Distribution.ArchHs.Internal.Prelude import Distribution.ArchHs.Local (ghcLibList) import Distribution.ArchHs.Types@@ -235,3 +239,23 @@ -- | The version of arch-hs archHsVersion :: String archHsVersion = $(simpleVersion Path.version)++-- | Take default flag values of @pkgFlag@ overriden by @assignment@+defaultFlags :: [PkgFlag] -> FlagAssignment -> FlagAssignment+defaultFlags pkgFlags assignment = result+ where+ defaultFlagAssignments =+ foldr (\f acc -> insertFlagAssignment (flagName f) (flagDefault f) acc) (mkFlagAssignment []) pkgFlags+ flagAssignment = unFlagAssignment assignment+ flagNames = fmap fst flagAssignment+ result =+ mkFlagAssignment+ . (<> flagAssignment)+ . filter (\(fName, _) -> fName `notElem` flagNames)+ $ unFlagAssignment defaultFlagAssignments++-- | Get 'FlagAssignment' from 'FlagAssignments'+--+-- Returns an empty FlagAssignment if no corresponding package in 'FlagAssignments'+getFlagAssignment :: PackageName -> FlagAssignments -> FlagAssignment+getFlagAssignment k v = fromMaybe (mkFlagAssignment []) $ k `Map.lookup` v