module Distribution.PackageDescription.Quirks (patchQuirks) where
import Distribution.Compat.Prelude
import Distribution.Utils.MD5
import GHC.Fingerprint (Fingerprint (..))
import Prelude ()
import qualified Data.ByteString as BS
import qualified Data.Map as Map
patchQuirks :: BS.ByteString -> (Bool, BS.ByteString)
patchQuirks bs = case Map.lookup (BS.take 256 bs, md5 bs) patches of
Nothing -> (False, bs)
Just (post, f)
| post /= md5 output -> (False, bs)
| otherwise -> (True, output)
where
output = f bs
patches :: Map.Map (BS.ByteString, Fingerprint) (Fingerprint, BS.ByteString -> BS.ByteString)
patches = Map.fromList
[ mk "-- This file has been generated from package.yaml by hpack version 0.17.0.\n--\n-- see: https://github.com/sol/hpack\n\nname: unicode-transforms\nversion: 0.3.3\nsynopsis: Unicode normalization\ndescription: Fast Unic"
(Fingerprint 15958160436627155571 10318709190730872881)
(Fingerprint 11008465475756725834 13815629925116264363)
(bsRemove " other-modules:\n .\n")
, mk "Name: DSTM\nVersion: 0.1.2\nCopyright: (c) 2010, Frank Kupke\nLicense: LGPL\nLicense-File: LICENSE\nAuthor: Frank Kupke\nMaintainer: frk@informatik.uni-kiel.de\nCabal-Version: >= 1.2.3\nStability: provisional\nSynopsis: A framework for using STM within distributed "
(Fingerprint 6919263071548559054 9050746360708965827)
(Fingerprint 17015177514298962556 11943164891661867280)
(bsReplace "Other modules:" "-- ")
, mk "Name: DSTM\nVersion: 0.1.1\nCopyright: (c) 2010, Frank Kupke\nLicense: LGPL\nLicense-File: LICENSE\nAuthor: Frank Kupke\nMaintainer: frk@informatik.uni-kiel.de\nCabal-Version: >= 1.2.3\nStability: provisional\nSynopsis: A framework for using STM within distributed "
(Fingerprint 17313105789069667153 9610429408495338584)
(Fingerprint 17250946493484671738 17629939328766863497)
(bsReplace "Other modules:" "-- ")
, mk "Name: DSTM\nVersion: 0.1\nCopyright: (c) 2010, Frank Kupke\nLicense: LGPL\nLicense-File: LICENSE\nAuthor: Frank Kupke\nMaintainer: frk@informatik.uni-kiel.de\nCabal-Version: >= 1.2.3\nStability: provisional\nSynopsis: A framework for using STM within distributed sy"
(Fingerprint 10502599650530614586 16424112934471063115)
(Fingerprint 13562014713536696107 17899511905611879358)
(bsReplace "Other modules:" "-- ")
, mk "name: control-monad-exception-mtl\nversion: 0.10.3\nCabal-Version: >= 1.10\nbuild-type: Simple\nlicense: PublicDomain\nauthor: Pepe Iborra\nmaintainer: pepeiborra@gmail.com\nhomepage: http://pepeiborra.github.com/control-monad-exception\nsynopsis: MTL instances f"
(Fingerprint 18274748422558568404 4043538769550834851)
(Fingerprint 11395257416101232635 4303318131190196308)
(bsReplace " default- extensions:" "unknown-section")
, mk "Name: vacuum-opengl\nVersion: 0.0\nSynopsis: Visualize live Haskell data structures using vacuum, graphviz and OpenGL.\nDescription: \DELVisualize live Haskell data structures using vacuum, graphviz and OpenGL.\n "
(Fingerprint 5946760521961682577 16933361639326309422)
(Fingerprint 14034745101467101555 14024175957788447824)
(bsRemove "\DEL")
, mk "Name: vacuum-opengl\nVersion: 0.0.1\nSynopsis: Visualize live Haskell data structures using vacuum, graphviz and OpenGL.\nDescription: \DELVisualize live Haskell data structures using vacuum, graphviz and OpenGL.\n "
(Fingerprint 10790950110330119503 1309560249972452700)
(Fingerprint 1565743557025952928 13645502325715033593)
(bsRemove "\DEL")
, mk "Name: ixset\nVersion: 1.0.4\nSynopsis: Efficient relational queries on Haskell sets.\nDescription:\n Create and query sets that are indexed by multiple indices.\nLicense: BSD3\nLicense-file: COPYING\nAut"
(Fingerprint 11886092342440414185 4150518943472101551)
(Fingerprint 5731367240051983879 17473925006273577821)
(bsRemoveStarting "{-")
, mk "name: ds-kanren\nversion: 0.2.0.0\nsynopsis: A subset of the miniKanren language\ndescription:\n ds-kanren is an implementation of the <http://minikanren.org miniKanren> language.\n .\n == What's in ds-kanren?\n .\n ['dis"
(Fingerprint 2804006762382336875 9677726932108735838)
(Fingerprint 9830506174094917897 12812107316777006473)
(bsReplace "Test-Suite test-unify:" "Test-Suite \"test-unify:\"" . bsReplace "Test-Suite test-list-ops:" "Test-Suite \"test-list-ops:\"")
, mk "name: ds-kanren\nversion: 0.2.0.1\nsynopsis: A subset of the miniKanren language\ndescription:\n ds-kanren is an implementation of the <http://minikanren.org miniKanren> language.\n\nlicense: MIT\nlicense-file: "
(Fingerprint 9130259649220396193 2155671144384738932)
(Fingerprint 1847988234352024240 4597789823227580457)
(bsReplace "Test-Suite test-unify:" "Test-Suite \"test-unify:\"" . bsReplace "Test-Suite test-list-ops:" "Test-Suite \"test-list-ops:\"")
, mk "name: metric\nversion: 0.1.4\nsynopsis: Metric spaces.\nlicense: MIT\nlicense-file: LICENSE\nauthor: Vikram Verma\nmaintainer: me@vikramverma.com\ncategory: Data\nbuild-type:"
(Fingerprint 6150019278861565482 3066802658031228162)
(Fingerprint 9124826020564520548 15629704249829132420)
(bsReplace "test-suite metric-tests:" "test-suite \"metric-tests:\"")
, mk "name: metric\nversion: 0.2.0\nsynopsis: Metric spaces.\nlicense: MIT\nlicense-file: LICENSE\nauthor: Vikram Verma\nmaintainer: me@vikramverma.com\ncategory: Data\nbuild-type:"
(Fingerprint 4639805967994715694 7859317050376284551)
(Fingerprint 5566222290622325231 873197212916959151)
(bsReplace "test-suite metric-tests:" "test-suite \"metric-tests:\"")
, mk "name: phasechange\ncategory: Data\nversion: 0.1\nauthor: G\195\161bor Lehel\nmaintainer: G\195\161bor Lehel <illissius@gmail.com>\nhomepage: http://github.com/glehel/phasechange\ncopyright: Copyright (C) 2012 G\195\161bor Lehel\nlicense: "
(Fingerprint 10546509771395401582 245508422312751943)
(Fingerprint 5169853482576003304 7247091607933993833)
(bsReplace "impl(ghc >= 7.4):" "erroneous-section" . bsReplace "impl(ghc >= 7.6):" "erroneous-section")
, mk "Name: smartword\nSynopsis: Web based flash card for Word Smart I and II vocabularies\nVersion: 0.0.0.5\nHomepage: http://kyagrd.dyndns.org/~kyagrd/project/smartword/\nCategory: Web,Education\nLicense: "
(Fingerprint 7803544783533485151 10807347873998191750)
(Fingerprint 1665635316718752601 16212378357991151549)
(bsReplace "build depends:" "--")
, mk "name: shelltestrunner\n-- sync with README.md, ANNOUNCE:\nversion: 1.3\ncategory: Testing\nsynopsis: A tool for testing command-line programs.\ndescription:\n shelltestrunner is a cross-platform tool for testing command-line\n program"
(Fingerprint 4403237110790078829 15392625961066653722)
(Fingerprint 10218887328390239431 4644205837817510221)
(bsReplace "other modules:" "--")
, mk "-- Initial hblas.cabal generated by cabal init. For further \n-- documentation, see http://haskell.org/cabal/users-guide/\n\n-- The name of the package.\nname: hblas\n\n-- The package version. See the Haskell package versioning policy (PVP) \n-- "
(Fingerprint 8570120150072467041 18315524331351505945)
(Fingerprint 10838007242302656005 16026440017674974175)
(bsReplace "&&!" "&& !")
, mk "-- Initial hblas.cabal generated by cabal init. For further \n-- documentation, see http://haskell.org/cabal/users-guide/\n\n-- The name of the package.\nname: hblas\n\n-- The package version. See the Haskell package versioning policy (PVP) \n-- "
(Fingerprint 5262875856214215155 10846626274067555320)
(Fingerprint 3022954285783401045 13395975869915955260)
(bsReplace "&&!" "&& !")
, mk "-- Initial hblas.cabal generated by cabal init. For further \n-- documentation, see http://haskell.org/cabal/users-guide/\n\n-- The name of the package.\nname: hblas\n\n-- The package version. See the Haskell package versioning policy (PVP) \n-- "
(Fingerprint 54222628930951453 5526514916844166577)
(Fingerprint 1749630806887010665 8607076506606977549)
(bsReplace "&&!" "&& !")
, mk "-- Initial hblas.cabal generated by cabal init. For further\n-- documentation, see http://haskell.org/cabal/users-guide/\n\n-- The name of the package.\nname: hblas\n\n-- The package version. See the Haskell package versioning policy (PVP)\n-- fo"
(Fingerprint 6817250511240350300 15278852712000783849)
(Fingerprint 15757717081429529536 15542551865099640223)
(bsReplace "&&!" "&& !")
, mk "-- Initial hblas.cabal generated by cabal init. For further\n-- documentation, see http://haskell.org/cabal/users-guide/\n\n-- The name of the package.\nname: hblas\n\n-- The package version. See the Haskell package versioning policy (PVP)\n-- fo"
(Fingerprint 8310050400349211976 201317952074418615)
(Fingerprint 10283381191257209624 4231947623042413334)
(bsReplace "&&!" "&& !")
, mk "-- Initial hblas.cabal generated by cabal init. For further\n-- documentation, see http://haskell.org/cabal/users-guide/\n\n-- The name of the package.\nname: hblas\n\n-- The package version. See the Haskell package versioning policy (PVP)\n-- fo"
(Fingerprint 7010988292906098371 11591884496857936132)
(Fingerprint 6158672440010710301 6419743768695725095)
(bsReplace "&&!" "&& !")
, mk "-- Initial hblas.cabal generated by cabal init. For further\r\n-- documentation, see http://haskell.org/cabal/users-guide/\r\n\r\n-- The name of the package.\r\nname: hblas\r\n\r\n-- The package version. See the Haskell package versioning policy (PVP)"
(Fingerprint 2076850805659055833 16615160726215879467)
(Fingerprint 10634706281258477722 5285812379517916984)
(bsReplace "&&!" "&& !")
, mk "-- Initial hblas.cabal generated by cabal init. For further\r\n-- documentation, see http://haskell.org/cabal/users-guide/\r\n\r\n-- The name of the package.\r\nname: hblas\r\n\r\n-- The package version. See the Haskell package versioning policy (PVP)"
(Fingerprint 11850020631622781099 11956481969231030830)
(Fingerprint 13702868780337762025 13383526367149067158)
(bsReplace "&&!" "&& !")
, mk "-- Initial hblas.cabal generated by cabal init. For further\n-- documentation, see http://haskell.org/cabal/users-guide/\n\n-- The name of the package.\nname: hblas\n\n-- The package version. See the Haskell package versioning policy (PVP)\n-- fo"
(Fingerprint 13690322768477779172 19704059263540994)
(Fingerprint 11189374824645442376 8363528115442591078)
(bsReplace "&&!" "&& !")
, mk "name: brainheck\nversion: 0.1.0.2\nsynopsis: Brainh*ck interpreter in haskell\ndescription: Brainh*ck interpreter written in haskell and taking advantage of many prominent libraries\nhomepage: https://gi"
(Fingerprint 6910727116443152200 15401634478524888973)
(Fingerprint 16551412117098094368 16260377389127603629)
(bsReplace "flag(llvm-fast)" "False")
, mk "name: brainheck\r\nversion: 0.1.0.2\r\nx-revision: 1\r\nsynopsis: Brainh*ck interpreter in haskell\r\ndescription: Brainh*ck interpreter written in haskell and taking advantage of many prominent libraries\r\nhomepage: "
(Fingerprint 14320987921316832277 10031098243571536929)
(Fingerprint 7959395602414037224 13279941216182213050)
(bsReplace "flag(llvm-fast)" "False")
, mk "name: brainheck\r\nversion: 0.1.0.2\r\nx-revision: 2\r\nsynopsis: Brainh*ck interpreter in haskell\r\ndescription: Brainh*ck interpreter written in haskell and taking advantage of many prominent libraries\r\nhomepage: "
(Fingerprint 3809078390223299128 10796026010775813741)
(Fingerprint 1127231189459220796 12088367524333209349)
(bsReplace "flag(llvm-fast)" "False")
, mk "name: brainheck\r\nversion: 0.1.0.2\r\nx-revision: 3\r\nsynopsis: Brainh*ck interpreter in haskell\r\ndescription: Brainh*ck interpreter written in haskell and taking advantage of many prominent libraries\r\nhomepage: "
(Fingerprint 13860013038089410950 12479824176801390651)
(Fingerprint 4687484721703340391 8013395164515771785)
(bsReplace "flag(llvm-fast)" "False")
, mk "name: wordchoice\nversion: 0.1.0.1\nsynopsis: Get word counts and distributions\ndescription: A command line tool to compute the word distribution from various types of document, converting to text with pandoc.\nho"
(Fingerprint 16215911397419608203 15594928482155652475)
(Fingerprint 15120681510314491047 2666192399775157359)
(bsReplace "flag(llvm-fast)" "False")
, mk "name: wordchoice\r\nversion: 0.1.0.1\r\nx-revision: 1\r\nsynopsis: Get word counts and distributions\r\ndescription: A command line tool to compute the word distribution from various types of document, converting to te"
(Fingerprint 16593139224723441188 4052919014346212001)
(Fingerprint 3577381082410411593 11481899387780544641)
(bsReplace "flag(llvm-fast)" "False")
, mk "name: wordchoice\nversion: 0.1.0.2\nsynopsis: Get word counts and distributions\ndescription: A command line tool to compute the word distribution from various types of document, converting to text with pandoc.\nho"
(Fingerprint 9321301260802539374 1316392715016096607)
(Fingerprint 3784628652257760949 12662640594755291035)
(bsReplace "flag(llvm-fast)" "False")
, mk "name: wordchoice\r\nversion: 0.1.0.2\r\nx-revision: 1\r\nsynopsis: Get word counts and distributions\r\ndescription: A command line tool to compute the word distribution from various types of document, converting to te"
(Fingerprint 2546901804824433337 2059732715322561176)
(Fingerprint 8082068680348326500 615008613291421947)
(bsReplace "flag(llvm-fast)" "False")
, mk "name: wordchoice\nversion: 0.1.0.3\nsynopsis: Get word counts and distributions\ndescription: A command line tool to compute the word distribution from various types of document, converting to text with pandoc.\nho"
(Fingerprint 2282380737467965407 12457554753171662424)
(Fingerprint 17324757216926991616 17172911843227482125)
(bsReplace "flag(llvm-fast)" "False")
, mk "name: wordchoice\r\nversion: 0.1.0.3\r\nx-revision: 1\r\nsynopsis: Get word counts and distributions\r\ndescription: A command line tool to compute the word distribution from various types of document, converting to te"
(Fingerprint 12907988890480595481 11078473638628359710)
(Fingerprint 13246185333368731848 4663060731847518614)
(bsReplace "flag(llvm-fast)" "False")
, mk "name: hw-prim-bits\nversion: 0.1.0.0\nsynopsis: Primitive support for bit manipulation\ndescription: Please see README.md\nhomepage: https://github.com/githubuser/hw-prim-bits#readme\nlicense: "
(Fingerprint 12386777729082870356 17414156731912743711)
(Fingerprint 3452290353395041602 14102887112483033720)
(bsReplace "flag(sse42)" "False")
, mk "name: hw-prim-bits\nversion: 0.1.0.1\nsynopsis: Primitive support for bit manipulation\ndescription: Please see README.md\nhomepage: https://github.com/githubuser/hw-prim-bits#readme\nlicen"
(Fingerprint 6870520675313101180 14553457351296240636)
(Fingerprint 12481021059537696455 14711088786769892762)
(bsReplace "flag(sse42)" "False")
, mk "name: Sit\nversion: 0.2017.02.26\nbuild-type: Simple\ncabal-version: >= 1.8\nlicense: OtherLicense\nlicense-file: LICENSE\nauthor: Anonymous\nmaintainer: Anonymous\nhomepage: NONE\ncategory: Dependent"
(Fingerprint 8458530898096910998 3228538743646501413)
(Fingerprint 14470502514907936793 17514354054641875371)
(bsReplace "0.2017.02.26" "0.2017.2.26")
, mk "name: Sit\nversion: 0.2017.05.01\nbuild-type: Simple\ncabal-version: >= 1.8\nlicense: OtherLicense\nlicense-file: LICENSE\nauthor: Andreas Abel <andreas.abel@gu.se>\nmaintainer: Andreas Abel <andreas.abel@gu.se>\n"
(Fingerprint 1450130849535097473 11742099607098860444)
(Fingerprint 16679762943850814021 4253724355613883542)
(bsReplace "0.2017.05.01" "0.2017.5.1")
, mk "name: Sit\nversion: 0.2017.05.02\nbuild-type: Simple\ncabal-version: >= 1.8\nlicense: OtherLicense\nlicense-file: LICENSE\nauthor: Andreas Abel <andreas.abel@gu.se>\nmaintainer: Andreas Abel <andreas.abel@gu.se>\n"
(Fingerprint 297248532398492441 17322625167861324800)
(Fingerprint 634812045126693280 1755581866539318862)
(bsReplace "0.2017.05.02" "0.2017.5.2")
, mk "name: Sit\nversion: 0.2017.5.02\nx-revision: 1\n-- x-revision:1 see https://github.com/haskell-infra/hackage-trustees/issues/128\nbuild-type: Simple\ncabal-version: >= 1.8\nlicense: OtherLicense\nlicense-file: LICENSE\nauthor: "
(Fingerprint 3697869560530373941 3942982281026987312)
(Fingerprint 14344526114710295386 16386400353475114712)
(bsReplace "0.2017.5.02" "0.2017.5.2")
, mk "name: MiniAgda\nversion: 0.2017.02.18\nbuild-type: Simple\ncabal-version: >= 1.22\nlicense: OtherLicense\nlicense-file: LICENSE\nauthor: Andreas Abel and Karl Mehltretter\nmaintainer: Andreas Abel <andreas.abel@i"
(Fingerprint 17167128953451088679 4300350537748753465)
(Fingerprint 12402236925293025673 7715084875284020606)
(bsReplace "0.2017.02.18" "0.2017.2.18")
, mk "cabal-version:\n 2.0\nname:\n fast-downward\nversion:\n 0.1.0.0\nbuild-type:\n Simple\nsynopsis:\n Solve classical planning problems (STRIPS/SAS+) using Haskell & Fast Downward.\ndescription:\n @fast-downward@ is a library for modelling classical planning probl"
(Fingerprint 11256076039027887363 6867903407496243216)
(Fingerprint 12159816716813155434 5278015399212299853)
(bsReplace "1.2.03.0" "1.2.3.0")
, mk "cabal-version:\r\n 2.0\r\nname:\r\n fast-downward\r\nversion:\r\n 0.1.0.0\r\nx-revision: \r\n 1\r\nbuild-type:\r\n Simple\r\nsynopsis:\r\n Solve classical planning problems (STRIPS/SAS+) using Haskell & Fast Downward.\r\ndescription:\r\n @fast-downward@ is a library for mode"
(Fingerprint 9216193973149680231 893446343655828508)
(Fingerprint 10020169545407746427 1828336750379510675)
(bsReplace "1.2.03.0" "1.2.3.0")
, mk "cabal-version:\n 2.0\nname:\n fast-downward\nversion:\n 0.1.0.1\nbuild-type:\n Simple\nsynopsis:\n Solve classical planning problems (STRIPS/SAS+) using Haskell & Fast Downward.\ndescription:\n @fast-downward@ is a library for modelling classical planning probl"
(Fingerprint 9899886602574848632 5980433644983783334)
(Fingerprint 12007469255857289958 8321466548645225439)
(bsReplace "1.2.03.0" "1.2.3.0")
, mk "cabal-version:\n 2.0\nname:\n fast-downward\nversion:\n 0.1.1.0\nbuild-type:\n Simple\nsynopsis:\n Solve classical planning problems (STRIPS/SAS+) using Haskell & Fast Downward.\ndescription:\n @fast-downward@ is a library for modelling classical planning probl"
(Fingerprint 12694656661460787751 1902242956706735615)
(Fingerprint 15433152131513403849 2284712791516353264)
(bsReplace "1.2.03.0" "1.2.3.0")
, mk "Name: SGplus\nVersion: 1.1\nSynopsis: (updated) Small geometry library for dealing with vectors and collision detection\nLicense: BSD3\nLicense-file: LICENSE\nAuthor: Neil Brown\nMaintainer: "
(Fingerprint 17735649550442248029 11493772714725351354)
(Fingerprint 9565458801063261772 15955773698774721052)
(bsReplace "1000000000" "100000000")
, mk "-- Initial control-dotdotdot.cabal generated by cabal init. For further \n-- documentation, see http://haskell.org/cabal/users-guide/\n\nname: control-dotdotdot\nversion: 0.1.0.1\nsynopsis: Haskell operator\n "
(Fingerprint 1514257173776509942 7756050823377346485)
(Fingerprint 14082092642045505999 18415918653404121035)
(bsReplace "9223372036854775807" "5")
, mk "name: data-foldapp\r\nversion: 0.1.1.0\r\nsynopsis: Fold function applications. Framework for variadic functions.\r\ndescription: Fold function applications. Framework for variadic functions.\r\nhomepage: ht"
(Fingerprint 4511234156311243251 11701153011544112556)
(Fingerprint 11820542702491924189 4902231447612406724)
(bsReplace "9223372036854775807" "999" . bsReplace "9223372036854775807" "999")
, mk "-- Initial data-list-zigzag.cabal generated by cabal init. For further \r\n-- documentation, see http://haskell.org/cabal/users-guide/\r\n\r\nname: data-list-zigzag\r\nversion: 0.1.1.1\r\nsynopsis: A list but with a balanced en"
(Fingerprint 12475837388692175691 18053834261188158945)
(Fingerprint 16279938253437334942 15753349540193002309)
(bsReplace "9223372036854775807" "999")
]
where
mk a b c d = ((a, b), (c, d))
_makePatchKey :: FilePath -> (BS.ByteString -> BS.ByteString) -> NoCallStackIO ()
_makePatchKey fp transform = do
contents <- BS.readFile fp
let output = transform contents
let Fingerprint hi lo = md5 contents
let Fingerprint hi' lo' = md5 output
putStrLn
$ showString " , mk "
. shows (BS.take 256 contents)
. showString "\n (Fingerprint "
. shows hi
. showString " "
. shows lo
. showString ")\n (Fingerprint "
. shows hi'
. showString " "
. shows lo'
. showString ")"
$ ""
bsRemove
:: BS.ByteString
-> BS.ByteString -> BS.ByteString
bsRemove needle haystack = case BS.breakSubstring needle haystack of
(h, t) -> BS.append h (BS.drop (BS.length needle) t)
bsReplace
:: BS.ByteString
-> BS.ByteString
-> BS.ByteString -> BS.ByteString
bsReplace needle repl haystack = case BS.breakSubstring needle haystack of
(h, t)
| not (BS.null t) -> BS.append h (BS.append repl (BS.drop (BS.length needle) t))
| otherwise -> haystack
bsRemoveStarting
:: BS.ByteString
-> BS.ByteString -> BS.ByteString
bsRemoveStarting needle haystack = case BS.breakSubstring needle haystack of
(h, _) -> h