diff --git a/Manual.md b/Manual.md index c8a891ee0ea..699ec9e9127 100644 --- a/Manual.md +++ b/Manual.md @@ -1138,6 +1138,10 @@ for compiling cargo -sys crates. It also adds a `cargo` wrapper that detects and passes builds through `cargo-auditable`. This helper is added by default for packages that use the `cargo` build style. +- `haskell` specifies environment variables for cabal. +This helper is added by default for packages that use the `haskell-stack` or +`cabal` build style. + ### Functions @@ -1698,21 +1702,45 @@ The path to the package's source inside `$GOPATH` is available as #### Haskell packages -We build Haskell package using `stack` from -[Stackage](http://www.stackage.org/), generally the LTS versions. -Haskell templates need to have host dependencies on `ghc` and `stack`, -and set build style to `haskell-stack`. +Haskell packages can be built either with the `cabal` or `haskell-stack` +build style, use whichever is more convenient or better supported by upstream, +sometimes only one of the two is possible. For packages that have haskell +parts but use a different build style like `gnu-makefile`, make sure to use +the `haskell` build helper. -The following variables influence how Haskell packages are built: +The following variables influence how packages are built with cabal: + +- `cabal_index_state`: The state of the hackage cabal index to use for + fetching dependencies. The source package of a haskell project should + come with a freeze file that sets the index state, some also set it in + their cabal project file. If it does not, then this has to be set to an ISO + timestamp in the package template. For example `2025-07-05T14:01:16Z`. +- `configure_args`: Arguments passed to `cabal configure`. The configure step + generates the `cabal.project.local` file. +- `make_build_args`: Arguments passed to `cabal build`. +- `make_build_target`: Target passed to `cabal build`. +- `make_check_args`: Arguments passed to `cabal test`. +- `make_check_target`: Test target passed to cabal instead of "test". +- `make_install_target`: Target passed to `cabal install`. + +And these variables influence how packages are built with stack: - `stackage`: The Stackage version used to build the package, e.g. `lts-3.5`. Alternatively: - You can prepare a `stack.yaml` configuration for the project and put it into `files/stack.yaml`. - - If a `stack.yaml` file is present in the source files, it will be used + - If a `stack.yaml` file is present in the source files, it will be used. - `make_build_args`: This is passed as-is to `stack build ...`, so you can add your `--flag ...` parameters there. +To patch dependencies of haskell packages they have to be fetched explicitly +from hackage by adding them to `distfiles` instead of letting cabal or stack +download them. Once extracted and patched, the path to the patched version +can be added to `packages` in `cabal.project` or `stack.yaml`. +Stack will find them automatically if no `stack.yaml` file exists by scanning +the directory. The build tool will then use the patched version of the +depencency instead of downloading it from hackage. + #### Font packages diff --git a/common/build-helper/haskell.sh b/common/build-helper/haskell.sh new file mode 100644 index 00000000000..9cc5fff8788 --- /dev/null +++ b/common/build-helper/haskell.sh @@ -0,0 +1 @@ +export CABAL_DIR=/home/cabal diff --git a/common/build-style/cabal.sh b/common/build-style/cabal.sh new file mode 100644 index 00000000000..83e5d0d1511 --- /dev/null +++ b/common/build-style/cabal.sh @@ -0,0 +1,66 @@ +# +# This helper is for building haskell projects using Cabal. +# + +do_configure() { + : ${cabal_cmd:=cabal} + + local _cabal_project_file="cabal.project" + + if [ -e "${FILESDIR}/${_cabal_project_file}.freeze" ]; then + cp "${FILESDIR}/${_cabal_project_file}.freeze" . + fi + + if [ -n "${cabal_index_state}" ]; then + # index-state alone is enough to fully fix a cabal build + configure_args+=" --index-state=${cabal_index_state}" + elif [ -e "${_cabal_project_file}.freeze" ]; then + # With a freeze file we have to make sure that it fixes + # the index also + if ! grep -q '^index-state:' "${_cabal_project_file}.freeze"; then + msg_error "${_cabal_project_file}.freeze is missing index-state\n" + fi + elif [ -e "${_cabal_project_file}" ]; then + if ! grep -q '^index-state:' "${_cabal_project_file}"; then + msg_error "${_cabal_project_file} is missing index-state\n" + fi + else + msg_error "cabal build not fixed, set cabal_index_state or add a freeze file to FILESDIR\n" + fi + + ${cabal_cmd} update + ${cabal_cmd} configure --prefix=/usr ${configure_args} +} + +do_build() { + : ${make_cmd:=cabal} + + if [ "$XBPS_TARGET_NO_ATOMIC8" ]; then + make_build_args+=" --ghc-option=-latomic" + fi + + ${make_cmd} build ${make_build_target} ${makejobs} ${make_build_args} +} + +do_check() { + : ${make_cmd:=cabal} + : ${make_check_target:=test} + + ${make_check_pre} ${make_cmd} ${make_check_target} ${make_check_args} +} + +do_install() { + : ${make_cmd:=cabal} + : ${make_install_target:=all} + + if ${make_cmd} list-bin ${make_install_target} >/dev/null 2>&1; then + vbin $(${make_cmd} list-bin ${make_install_target}) + else + for name in $(${make_cmd} list-bin ${make_install_target} 2>&1 | tr -d '\n ' | grep -Eo "theexecutable'[^']+'" | tr "'" ' ' | awk '{ print $2 }'); do + local _bin=$(${make_cmd} list-bin exe:$name) + if [ -s "$_bin" ]; then + vbin "$_bin" + fi + done + fi +} diff --git a/common/environment/build-style/cabal.sh b/common/environment/build-style/cabal.sh new file mode 100644 index 00000000000..1bb7e789a2c --- /dev/null +++ b/common/environment/build-style/cabal.sh @@ -0,0 +1,2 @@ +hostmakedepends+=" cabal-install git" +build_helper+=" haskell" diff --git a/common/environment/build-style/haskell-stack.sh b/common/environment/build-style/haskell-stack.sh index 6b47c121512..af5e96e9159 100644 --- a/common/environment/build-style/haskell-stack.sh +++ b/common/environment/build-style/haskell-stack.sh @@ -1 +1,2 @@ hostmakedepends+=" ghc stack" +build_helper+=" haskell" diff --git a/srcpkgs/cabal-install/files/linux-9.0.2.json b/srcpkgs/cabal-install/files/linux-9.0.2.json deleted file mode 100644 index f3cb6b4aeeb..00000000000 --- a/srcpkgs/cabal-install/files/linux-9.0.2.json +++ /dev/null @@ -1 +0,0 @@ -{"builtin":[{"package":"rts","version":"1.0.2"},{"package":"ghc-prim","version":"0.7.0"},{"package":"ghc-bignum","version":"1.1"},{"package":"base","version":"4.15.1.0"},{"package":"array","version":"0.5.4.0"},{"package":"deepseq","version":"1.4.5.0"},{"package":"bytestring","version":"0.10.12.1"},{"package":"containers","version":"0.6.4.1"},{"package":"binary","version":"0.8.8.0"},{"package":"filepath","version":"1.4.2.1"},{"package":"time","version":"1.9.3"},{"package":"unix","version":"2.7.2.2"},{"package":"directory","version":"1.3.6.2"},{"package":"transformers","version":"0.5.6.2"},{"package":"mtl","version":"2.2.2"},{"package":"ghc-boot-th","version":"9.0.2"},{"package":"pretty","version":"1.1.3.6"},{"package":"template-haskell","version":"2.17.0.0"},{"package":"text","version":"1.2.5.0"},{"package":"parsec","version":"3.1.14.0"},{"package":"process","version":"1.6.13.2"},{"package":"stm","version":"2.5.0.0"}],"dependencies":[{"cabal_sha256":null,"flags":["-bundled-binary-generic"],"package":"Cabal","revision":null,"source":"local","src_sha256":null,"version":"3.6.3.0"},{"cabal_sha256":"714a55fd28d3e2533bd5b49e74f604ef8e5d7b06f249c8816f6c54aed431dcf1","flags":["-optimised-mixer"],"package":"splitmix","revision":0,"source":"hackage","src_sha256":"6d065402394e7a9117093dbb4530a21342c9b1e2ec509516c8a8d0ffed98ecaa","version":"0.1.0.4"},{"cabal_sha256":"8bee24dc0c985a90ee78d94c61f8aed21c49633686f0f1c14c5078d818ee43a2","flags":[],"package":"random","revision":0,"source":"hackage","src_sha256":"265c768fc5f2ca53cde6a87e706b4448cad474c3deece933c103f24453661457","version":"1.2.1"},{"cabal_sha256":"3a2beeafb220f9de706568a7e4a5b3c762cc4c9f25c94d7ef795b8c2d6a691d7","flags":["+integer-gmp","-random-initial-seed"],"package":"hashable","revision":1,"source":"hackage","src_sha256":"baaad82cd4271b197016bdbe76f22d5c3d3913fe38534cec7d817db9bae19886","version":"1.3.5.0"},{"cabal_sha256":"b83dec34a53520de84c6dd3dc7aae45d22409b46eb471c478b98108215a370f0","flags":["-bench"],"package":"async","revision":1,"source":"hackage","src_sha256":"484df85be0e76c4fed9376451e48e1d0c6e97952ce79735b72d54297e7e0a725","version":"2.2.4"},{"cabal_sha256":"037d70bb091c49f68726dde920f6a003b646835a86cdcb5b5ad58ad9af3207d9","flags":[],"package":"Cabal-syntax","revision":0,"source":"hackage","src_sha256":"ca25e5fc601397565fa857f1aa477740fac7f43d659e77c4d9b1485dca239251","version":"3.6.0.0"},{"cabal_sha256":"d8699f46b485f105eea9c7158f3d432ca578e6bbe5d68751184e9899a41d430d","flags":["-old-bytestring","-old-time"],"package":"tar","revision":4,"source":"hackage","src_sha256":"b384449f62b2b0aa3e6d2cb1004b8060b01f21ec93e7b63e7af6d8fad8a9f1de","version":"0.5.1.1"},{"cabal_sha256":"e3d78b13db9512aeb106e44a334ab42b7aa48d26c097299084084cb8be5c5568","flags":["-devel"],"package":"network","revision":0,"source":"hackage","src_sha256":"7f7620fef1a1af3d3d6747f510e73223a5c600e7d7fd9ace073d1222bdc63d85","version":"3.1.2.7"},{"cabal_sha256":"a16dd922947a6877defe52c4c38d1ab48ed3f85a826930f5d1a568741d619993","flags":[],"package":"th-compat","revision":0,"source":"hackage","src_sha256":"6b5059caf6714f47da92953badf2f556119877e09708c14e206b3ae98b8681c6","version":"0.1.3"},{"cabal_sha256":"a4765164ed0a2d1668446eb2e03460ce98645fbf083598c690846af79b7de10d","flags":[],"package":"network-uri","revision":0,"source":"hackage","src_sha256":"57856db93608a4d419f681b881c9b8d4448800d5a687587dc37e8a9e0b223584","version":"2.6.4.1"},{"cabal_sha256":"6042643c15a0b43e522a6693f1e322f05000d519543a84149cb80aeffee34f71","flags":["-conduit10","-mtl1","+network-uri","-warn-as-error","-warp-tests"],"package":"HTTP","revision":1,"source":"hackage","src_sha256":"d6091c037871ac3d08d021c906206174567499d5a26a6cb804cf530cd590fe2d","version":"4000.3.16"},{"cabal_sha256":"64abad7816ab8cabed8489e29f807b3a6f828e0b2cec0eae404323d69d36df9a","flags":[],"package":"base16-bytestring","revision":0,"source":"hackage","src_sha256":"1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784","version":"1.0.2.0"},{"cabal_sha256":"50ec0e229255d4c45cbdd568da011311b8887f304b931564886016f4984334d8","flags":[],"package":"base64-bytestring","revision":0,"source":"hackage","src_sha256":"fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9","version":"1.2.1.0"},{"cabal_sha256":"188d0b5a0491e8b686b32d9b144c9287760ba333d2509bf3f17e3d846fbc2332","flags":["-exe","+use-cbits"],"package":"cryptohash-sha256","revision":0,"source":"hackage","src_sha256":"73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6","version":"0.11.102.1"},{"cabal_sha256":"ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42","flags":["-example"],"package":"echo","revision":0,"source":"hackage","src_sha256":"c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43","version":"0.1.4"},{"cabal_sha256":"4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee","flags":[],"package":"edit-distance","revision":1,"source":"hackage","src_sha256":"3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a","version":"0.2.2.1"},{"cabal_sha256":"24ac7b5f3d9fa3c2f70262b329f2a75f24e7fd829f88c189b388efa1bcd67eb2","flags":["+no-donna","+test-doctests","+test-hlint","+test-properties"],"package":"ed25519","revision":5,"source":"hackage","src_sha256":"d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d","version":"0.0.5.0"},{"cabal_sha256":"c084c043a40632d3cafcac50fb5eeff84d91edb070a54baa94945f1c976f97c0","flags":["+ofd-locking"],"package":"lukko","revision":2,"source":"hackage","src_sha256":"a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f","version":"0.1.1.3"},{"cabal_sha256":"262a93dbf370be59f4ee57f3b1a51b338bc2c309797daa37c14f2262ae61dae4","flags":["-bundled-c-zlib","-non-blocking-ffi","-pkg-config"],"package":"zlib","revision":1,"source":"hackage","src_sha256":"807f6bddf9cb3c517ce5757d991dde3c7e319953a22c86ee03d74534bd5abc88","version":"0.6.2.3"},{"cabal_sha256":"eb34c3e2fa39f9819293045c03e56148a7125573c1de265cdfe5d967f1d71c6e","flags":["+base48","-cabal-syntax","+lukko","-mtl21","-old-directory","+use-network-uri"],"package":"hackage-security","revision":1,"source":"hackage","src_sha256":"bf22cd16dde7d6b7130463f4d7324b64a2964d9ef3f523df97d7cb98544d64a8","version":"0.6.2.1"},{"cabal_sha256":"2561adac8ce373910948066debe090a22b336b129ba5af18c0332524d16e72ce","flags":[],"package":"regex-base","revision":0,"source":"hackage","src_sha256":"7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1","version":"0.94.0.2"},{"cabal_sha256":"b6421e5356766b0c0a78b6094ae2e3a6259b42c147b717283c03c1cb09163dca","flags":["-_regex-posix-clib"],"package":"regex-posix","revision":0,"source":"hackage","src_sha256":"c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c","version":"0.96.0.1"},{"cabal_sha256":"2088eb9368b920f80bbe4e3b03c3b8484090208f5c3b31645bd67a9ef7d26db4","flags":[],"package":"resolv","revision":4,"source":"hackage","src_sha256":"81a2bafad484db123cf8d17a02d98bb388a127fd0f822fa022589468a0e64671","version":"0.1.2.0"},{"cabal_sha256":null,"flags":["-debug-conflict-sets","-debug-expensive-assertions","-debug-tracetree","+lukko","+native-dns"],"package":"cabal-install","revision":null,"source":"local","src_sha256":null,"version":"3.6.2.0"}]} \ No newline at end of file diff --git a/srcpkgs/cabal-install/files/linux-9.8.4.json b/srcpkgs/cabal-install/files/linux-9.8.4.json new file mode 100644 index 00000000000..fb4f814b1b6 --- /dev/null +++ b/srcpkgs/cabal-install/files/linux-9.8.4.json @@ -0,0 +1,427 @@ +{ + "builtin": [ + { + "package": "rts", + "version": "1.0.2" + }, + { + "package": "ghc-prim", + "version": "0.11.0" + }, + { + "package": "ghc-bignum", + "version": "1.3" + }, + { + "package": "base", + "version": "4.19.2.0" + }, + { + "package": "array", + "version": "0.5.8.0" + }, + { + "package": "deepseq", + "version": "1.5.1.0" + }, + { + "package": "ghc-boot-th", + "version": "9.8.4" + }, + { + "package": "pretty", + "version": "1.1.3.6" + }, + { + "package": "template-haskell", + "version": "2.21.0.0" + }, + { + "package": "bytestring", + "version": "0.12.1.0" + }, + { + "package": "containers", + "version": "0.6.8" + }, + { + "package": "binary", + "version": "0.8.9.1" + }, + { + "package": "transformers", + "version": "0.6.1.0" + }, + { + "package": "mtl", + "version": "2.3.1" + }, + { + "package": "stm", + "version": "2.5.3.1" + }, + { + "package": "exceptions", + "version": "0.10.7" + }, + { + "package": "filepath", + "version": "1.4.301.0" + }, + { + "package": "time", + "version": "1.12.2" + }, + { + "package": "unix", + "version": "2.8.6.0" + }, + { + "package": "directory", + "version": "1.3.8.5" + }, + { + "package": "text", + "version": "2.1.1" + }, + { + "package": "parsec", + "version": "3.1.17.0" + }, + { + "package": "process", + "version": "1.6.25.0" + } + ], + "dependencies": [ + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.10.3.0" + }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.10.3.0" + }, + { + "cabal_sha256": "e3a1ec8b8dd32f1d5a541679a67de60d6626487a95f20c6bc245268ae7142ab7", + "flags": [ + "-devel" + ], + "package": "network", + "revision": 0, + "source": "hackage", + "src_sha256": "68548e660632a3c09b230c33fe08cc880273372b485e65cbe7a717936de9728b", + "version": "3.2.7.0" + }, + { + "cabal_sha256": "e83d97946f84fe492762ceb3b4753b4770c78b0b70e594078700baa91a5106c2", + "flags": [], + "package": "th-compat", + "revision": 0, + "source": "hackage", + "src_sha256": "b781a0c059872bc95406d00e98f6fa7d9e81e744730f75186583cb4dcea0a4eb", + "version": "0.1.6" + }, + { + "cabal_sha256": "6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588", + "flags": [], + "package": "network-uri", + "revision": 1, + "source": "hackage", + "src_sha256": "9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228", + "version": "2.6.4.2" + }, + { + "cabal_sha256": "75ada03bd2d2b747319e38877a55bf8be529db4520a07d4e5ffbd24c5e850dcb", + "flags": [ + "-conduit10", + "+network-uri", + "-warn-as-error", + "-warp-tests" + ], + "package": "HTTP", + "revision": 5, + "source": "hackage", + "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453", + "version": "4000.4.1" + }, + { + "cabal_sha256": "2efc549644dd418bad537d1601fdd437c440d807265016bd993b6996c679ad2f", + "flags": [], + "package": "os-string", + "revision": 0, + "source": "hackage", + "src_sha256": "339c35fd3a290522f23de4e33528423cfd0b0a8f22946b0b9816a817b926cba0", + "version": "2.0.7" + }, + { + "cabal_sha256": "573f3ab242f75465a0d67ce9d84202650a1606575e6dbd6d31ffcf4767a9a379", + "flags": [ + "-arch-native", + "+integer-gmp", + "-random-initial-seed" + ], + "package": "hashable", + "revision": 0, + "source": "hackage", + "src_sha256": "3baee4c9027a08830d148ec524cbc0471de645e1e8426d46780ef2758df0e8da", + "version": "1.4.7.0" + }, + { + "cabal_sha256": "b7648c6165729a973d95cb328f9fd874813a81c727707e8b2552b4f03399763b", + "flags": [ + "-bench" + ], + "package": "async", + "revision": 3, + "source": "hackage", + "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", + "version": "2.2.5" + }, + { + "cabal_sha256": "81a105aed2ee2f5e479448e44252b24cdfacf81a5a2106aabdd217bad94b6f40", + "flags": [ + "-dev", + "-no-cmm" + ], + "package": "atomic-counter", + "revision": 0, + "source": "hackage", + "src_sha256": "ce4b63391b3c0d426cbe32af89f483222602a5b43aa5379aa720bf6f45f4cf04", + "version": "0.1.2.3" + }, + { + "cabal_sha256": "a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd", + "flags": [], + "package": "base16-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784", + "version": "1.0.2.0" + }, + { + "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803", + "flags": [], + "package": "base64-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9", + "version": "1.2.1.0" + }, + { + "cabal_sha256": "8f92088f1c51c8d4569279a07565f8aa6b534a6735615b2295d2961dec8f1783", + "flags": [ + "-optimised-mixer" + ], + "package": "splitmix", + "revision": 0, + "source": "hackage", + "src_sha256": "d678c41a603a62032cf7e5f8336bb8222c93990e4b59c8b291b7ca26c7eb12c7", + "version": "0.1.1" + }, + { + "cabal_sha256": "117541ba0a177397a3333f94870f789ef050dca31b0688a19824b2bc401b8823", + "flags": [], + "package": "random", + "revision": 0, + "source": "hackage", + "src_sha256": "e9c81926a7d1e40328f645f73592b31efc9c631589669a7f130687b9cc3051dc", + "version": "1.2.1.3" + }, + { + "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee", + "flags": [], + "package": "edit-distance", + "revision": 1, + "source": "hackage", + "src_sha256": "3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a", + "version": "0.2.2.1" + }, + { + "cabal_sha256": null, + "flags": [ + "-debug-conflict-sets", + "-debug-expensive-assertions", + "-debug-tracetree" + ], + "package": "cabal-install-solver", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.10.3.0" + }, + { + "cabal_sha256": "0e9de2ccce261e7a5b027e842f6f47f50eb0e6059a0de98a5479f75aa8164107", + "flags": [ + "-exe", + "+use-cbits" + ], + "package": "cryptohash-sha256", + "revision": 6, + "source": "hackage", + "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", + "version": "0.11.102.1" + }, + { + "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42", + "flags": [ + "-example" + ], + "package": "echo", + "revision": 0, + "source": "hackage", + "src_sha256": "c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43", + "version": "0.1.4" + }, + { + "cabal_sha256": "f1550ddbe3b53f1087a035667364011460896cc2b1ff328b521c05ed5973bb78", + "flags": [ + "+no-donna", + "+test-doctests", + "+test-hlint", + "+test-properties" + ], + "package": "ed25519", + "revision": 9, + "source": "hackage", + "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d", + "version": "0.0.5.0" + }, + { + "cabal_sha256": "8334a8d810e385e1dc1423dc02945daaa1f1a9ba058e5227f1a3211e4882ca28", + "flags": [ + "+ofd-locking" + ], + "package": "lukko", + "revision": 1, + "source": "hackage", + "src_sha256": "72d86f8aa625b461f4397f737346f78a1700a7ffbff55cf6375c5e18916e986d", + "version": "0.1.2" + }, + { + "cabal_sha256": "8931b9ce6e63bf6202dc0c992ae3e6f2ad8e7f4b6eb69994ac6d512c6c9c0f77", + "flags": [ + "-os-string" + ], + "package": "directory-ospath-streaming", + "revision": 0, + "source": "hackage", + "src_sha256": "1ade8fbee13db15e8d22a1ecdca54794617cabc69911b51d46a65e12f4554ef7", + "version": "0.2.2" + }, + { + "cabal_sha256": "1d68a81fa684d006b1ec73836cebe3de9a54688836915fe3e56a20389846bb4e", + "flags": [ + "-os-string" + ], + "package": "file-io", + "revision": 0, + "source": "hackage", + "src_sha256": "310a19e4c792de4d30c912bc71ff3becb40818d7c796b9999bcd0979dab87d5b", + "version": "0.1.5" + }, + { + "cabal_sha256": "a72549370449fe99e3008744ad2e43685e96bf86aa0db15898189fcbaafcd815", + "flags": [], + "package": "tar", + "revision": 1, + "source": "hackage", + "src_sha256": "7949a50004a80993000512079bc03ebcad4872414fc181f45b3883d743c0f3aa", + "version": "0.6.4.0" + }, + { + "cabal_sha256": "a72549370449fe99e3008744ad2e43685e96bf86aa0db15898189fcbaafcd815", + "flags": [], + "package": "tar", + "revision": 1, + "source": "hackage", + "src_sha256": "7949a50004a80993000512079bc03ebcad4872414fc181f45b3883d743c0f3aa", + "version": "0.6.4.0" + }, + { + "cabal_sha256": "85e64a75c0b490506a7edaa2d54950c668e66b65758bb08bb14cd31faf53a206", + "flags": [ + "-bundled-c-zlib", + "+non-blocking-ffi", + "-pkg-config" + ], + "package": "zlib", + "revision": 2, + "source": "hackage", + "src_sha256": "6edd38b6b81df8d274952aa85affa6968ae86b2231e1d429ce8bc9083e6a55bc", + "version": "0.7.1.0" + }, + { + "cabal_sha256": "f85f6f1ef55d1f91795f2c7c476db36fd7aedb55c877d47f2a4411f0151040a9", + "flags": [ + "+cabal-syntax", + "+lukko" + ], + "package": "hackage-security", + "revision": 5, + "source": "hackage", + "src_sha256": "2e4261576b3e11b9f5175392947f56a638cc1a3584b8acbb962b809d7c69db69", + "version": "0.6.2.6" + }, + { + "cabal_sha256": "d6c0c6d1136f5046207a331114ff4130e70640452096de7719bf03e3fceb7c7b", + "flags": [], + "package": "regex-base", + "revision": 0, + "source": "hackage", + "src_sha256": "e8ca2dee598c790dd1c1c4359bdd1e495d9b881f5aa1f539c22f0dd5563747bf", + "version": "0.94.0.3" + }, + { + "cabal_sha256": "faf170ca5073e8d538a7a18f727a02a96f2a36c5fd53a1696263a70ab81bc6fe", + "flags": [ + "-_regex-posix-clib" + ], + "package": "regex-posix", + "revision": 0, + "source": "hackage", + "src_sha256": "7e570460c35c5deec54d1ba46305ddb4679c7d4aae84f631dd0c61daaeaa8150", + "version": "0.96.0.2" + }, + { + "cabal_sha256": "58a8c6f17dece62891e7534c6f033e1fb1d0685e68dbe5d4fbb71256d45c6132", + "flags": [], + "package": "resolv", + "revision": 5, + "source": "hackage", + "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", + "version": "0.2.0.2" + }, + { + "cabal_sha256": "8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1", + "flags": [], + "package": "safe-exceptions", + "revision": 1, + "source": "hackage", + "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6", + "version": "0.1.7.4" + }, + { + "cabal_sha256": null, + "flags": [ + "+lukko", + "+native-dns" + ], + "package": "cabal-install", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.10.3.0" + } + ] +} diff --git a/srcpkgs/cabal-install/template b/srcpkgs/cabal-install/template index 0499f5c4c5c..52159f23444 100644 --- a/srcpkgs/cabal-install/template +++ b/srcpkgs/cabal-install/template @@ -1,34 +1,50 @@ # Template file for 'cabal-install' pkgname=cabal-install -version=3.6.3.0 -revision=2 -hostmakedepends="ghc curl tar which" -makedepends="gmp-devel libffi-devel zlib-devel python3" +version=3.10.3.0 +revision=1 +build_helper="haskell" +hostmakedepends="python3 ghc curl tar" +makedepends="zlib-devel" depends="ghc" short_desc="Command-line interface for Cabal and Hackage" maintainer="Orphaned " license="BSD-3-Clause" -homepage="https://hackage.haskell.org/package/cabal-install" -distfiles="https://github.com/haskell/cabal/archive/Cabal-v${version}.tar.gz" -checksum=dea086acad6d9fe5fe22d838b95b4e988022e8519f38d41609119ea32bfb7466 +homepage="https://www.haskell.org/cabal/" +distfiles="https://github.com/haskell/cabal/archive/refs/tags/cabal-install-v${version}.tar.gz" +checksum=075fba81fca61f6957dae3a542a3213415682dd9767f6ccdf3f9059f2cd0f156 nopie_files="/usr/bin/cabal" nocross=yes +# Keep in sync with ghc +_ghc_ver=9.8.4 + post_extract() { - cp "${FILESDIR}/linux-9.0.2.json" bootstrap/ + if [ -e ${FILESDIR}/linux-${_ghc_ver}.json ]; then + cp "${FILESDIR}/linux-${_ghc_ver}.json" bootstrap/ + fi } -post_patch() { - case "${XBPS_TARGET_MACHINE}" in - i686*) - # https://github.com/haskell/cabal/issues/7313 - vsed -i -e 's/+ofd-locking/-ofd-locking/' bootstrap/linux-9.0.2.json ;; - esac +pre_build() { + if [ -e bootstrap/linux-${_ghc_ver}.json ]; then + if [ "$XBPS_TARGET_WORDSIZE" = 32 ]; then + # https://github.com/haskell/cabal/issues/7313 + sed -i 's/+ofd-locking/-ofd-locking/g' bootstrap/linux-${_ghc_ver}.json + fi + else + # To generate a bootstrap plan for a new ghc version ensure a + # cabal binary is available, run this, then move the plan to + # FILESDIR + cabal update + make bootstrap-json-${_ghc_ver} + msg_normal "Please install bootstrap/linux-${_ghc_ver}.json in ${FILESDIR}\n" + exit 1 + fi } do_build() { - PREFIX=$PWD bootstrap/bootstrap.py -d bootstrap/linux-9.0.2.json + PREFIX=$PWD bootstrap/bootstrap.py -d bootstrap/linux-${_ghc_ver}.json } + do_install() { vbin _build/bin/cabal PREFIX=$PWD _build/bin/cabal man --raw > cabal.1 diff --git a/srcpkgs/cgrep/template b/srcpkgs/cgrep/template index 4de92544d62..ef3481de6a3 100644 --- a/srcpkgs/cgrep/template +++ b/srcpkgs/cgrep/template @@ -1,15 +1,16 @@ # Template file for 'cgrep' pkgname=cgrep -version=7.0.0 +version=8.1.2 revision=1 build_style=haskell-stack +stackage="lts-23.26" makedepends="pcre-devel pkg-config" short_desc="Context-aware grep for source codes" maintainer="Orphaned " license="GPL-2.0-or-later" homepage="https://awgn.github.io/cgrep/" distfiles="https://github.com/awgn/cgrep/archive/v${version}.tar.gz" -checksum=87c596447882b3acf0a754ac52ac1b5314961e652708a25ffc49ec5977b1f11a +checksum=1b705013a432e6ea90247f03e4cfeceb5a37f795d879178e4bf0085ce6191316 nocross=yes nopie_files="/usr/bin/cgrep" conflicts="codesearch" diff --git a/srcpkgs/darcs/files/stack.yaml b/srcpkgs/darcs/files/stack.yaml deleted file mode 100644 index 6e459703764..00000000000 --- a/srcpkgs/darcs/files/stack.yaml +++ /dev/null @@ -1,4 +0,0 @@ -resolver: lts-19.0 -packages: -- . -allow-newer: true diff --git a/srcpkgs/darcs/patches/basement.patch b/srcpkgs/darcs/patches/basement.patch new file mode 100644 index 00000000000..e934f8e67b2 --- /dev/null +++ b/srcpkgs/darcs/patches/basement.patch @@ -0,0 +1,242 @@ +From 38be2c93acb6f459d24ed6c626981c35ccf44095 Mon Sep 17 00:00:00 2001 +From: Sylvain Henry +Date: Thu, 16 Feb 2023 15:40:45 +0100 +Subject: [PATCH] Fix build on 32-bit architectures + +--- + basement/Basement/Bits.hs | 4 ++++ + basement/Basement/From.hs | 24 ----------------------- + basement/Basement/Numerical/Additive.hs | 4 ++++ + basement/Basement/Numerical/Conversion.hs | 20 +++++++++++++++++++ + basement/Basement/PrimType.hs | 6 +++++- + basement/Basement/Types/OffsetSize.hs | 22 +++++++++++++++++++-- + 6 files changed, 53 insertions(+), 27 deletions(-) + +diff --git a/basement/Basement/Bits.hs b/basement/Basement/Bits.hs +index 7eeea0f5..24520ed7 100644 +--- a/basement/Basement/Bits.hs ++++ b/basement/Basement/Bits.hs +@@ -54,8 +54,12 @@ import GHC.Int + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | operation over finite bits + class FiniteBitsOps bits where +diff --git a/basement/Basement/From.hs b/basement/Basement/From.hs +index 7bbe141c..80014b3e 100644 +--- a/basement/Basement/From.hs ++++ b/basement/Basement/From.hs +@@ -272,23 +272,11 @@ instance (NatWithinBound (CountOf ty) n, KnownNat n, PrimType ty) + tryFrom = BlockN.toBlockN . UArray.toBlock . BoxArray.mapToUnboxed id + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn64 n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn64 n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn64 n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance From (Zn64 n) Word64 where + from = unZn64 + instance From (Zn64 n) Word128 where +@@ -297,23 +285,11 @@ instance From (Zn64 n) Word256 where + from = from . unZn64 + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word64 n) => From (Zn n) Word64 where + from = naturalToWord64 . unZn + instance (KnownNat n, NatWithinBound Word128 n) => From (Zn n) Word128 where +diff --git a/basement/Basement/Numerical/Additive.hs b/basement/Basement/Numerical/Additive.hs +index d0dfb973..8ab65aa0 100644 +--- a/basement/Basement/Numerical/Additive.hs ++++ b/basement/Basement/Numerical/Additive.hs +@@ -30,8 +30,12 @@ import qualified Basement.Types.Word128 as Word128 + import qualified Basement.Types.Word256 as Word256 + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | Represent class of things that can be added together, + -- contains a neutral element and is commutative. +diff --git a/basement/Basement/Numerical/Conversion.hs b/basement/Basement/Numerical/Conversion.hs +index db502c07..fddc8232 100644 +--- a/basement/Basement/Numerical/Conversion.hs ++++ b/basement/Basement/Numerical/Conversion.hs +@@ -26,8 +26,12 @@ import GHC.Word + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + intToInt64 :: Int -> Int64 + #if WORD_SIZE_IN_BITS == 64 +@@ -96,11 +100,22 @@ int64ToWord64 (I64# i) = W64# (int64ToWord64# i) + #endif + + #if WORD_SIZE_IN_BITS == 64 ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord# :: Word64# -> Word# ++word64ToWord# i = word64ToWord# i ++#else + word64ToWord# :: Word# -> Word# + word64ToWord# i = i ++#endif + {-# INLINE word64ToWord# #-} + #endif + ++#if WORD_SIZE_IN_BITS < 64 ++word64ToWord32# :: Word64# -> Word32# ++word64ToWord32# i = wordToWord32# (word64ToWord# i) ++{-# INLINE word64ToWord32# #-} ++#endif ++ + -- | 2 Word32s + data Word32x2 = Word32x2 {-# UNPACK #-} !Word32 + {-# UNPACK #-} !Word32 +@@ -113,9 +128,14 @@ word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# (G + word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# w64 32#))) (W32# (wordToWord32# w64)) + #endif + #else ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord32s :: Word64 -> Word32x2 ++word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord32# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord32# w64)) ++#else + word64ToWord32s :: Word64 -> Word32x2 + word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord# w64)) + #endif ++#endif + + wordToChar :: Word -> Char + wordToChar (W# word) = C# (chr# (word2Int# word)) +diff --git a/basement/Basement/PrimType.hs b/basement/Basement/PrimType.hs +index f8ca2926..a888ec91 100644 +--- a/basement/Basement/PrimType.hs ++++ b/basement/Basement/PrimType.hs +@@ -54,7 +54,11 @@ import Basement.Nat + import qualified Prelude (quot) + + #if WORD_SIZE_IN_BITS < 64 +-import GHC.IntWord64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else ++import GHC.IntWord64 ++#endif + #endif + + #ifdef FOUNDATION_BOUNDS_CHECK +diff --git a/basement/Basement/Types/OffsetSize.hs b/basement/Basement/Types/OffsetSize.hs +index cd944927..1ea80dad 100644 +--- a/basement/Basement/Types/OffsetSize.hs ++++ b/basement/Basement/Types/OffsetSize.hs +@@ -70,8 +70,12 @@ import Data.List (foldl') + import qualified Prelude + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | File size in bytes + newtype FileSize = FileSize Word64 +@@ -225,20 +229,26 @@ countOfRoundUp alignment (CountOf n) = CountOf ((n + (alignment-1)) .&. compleme + + csizeOfSize :: CountOf Word8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfSize (CountOf (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfSize (CountOf (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfSize (CountOf (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +- + #else + csizeOfSize (CountOf (I# sz)) = CSize (W64# (int2Word# sz)) +- + #endif + #endif + + csizeOfOffset :: Offset8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfOffset (Offset (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfOffset (Offset (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfOffset (Offset (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +@@ -250,7 +260,11 @@ csizeOfOffset (Offset (I# sz)) = CSize (W64# (int2Word# sz)) + sizeOfCSSize :: CSsize -> CountOf Word8 + sizeOfCSSize (CSsize (-1)) = error "invalid size: CSSize is -1" + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# (int32ToInt# sz)) ++#else + sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# sz) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# (int64ToInt# sz)) +@@ -261,7 +275,11 @@ sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# sz) + + sizeOfCSize :: CSize -> CountOf Word8 + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# (word32ToWord# sz))) ++#else + sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSize (CSize (W64# sz)) = CountOf (I# (word2Int# (word64ToWord# sz))) diff --git a/srcpkgs/darcs/patches/cborg-bounds.patch b/srcpkgs/darcs/patches/cborg-bounds.patch new file mode 100644 index 00000000000..9f13fa50253 --- /dev/null +++ b/srcpkgs/darcs/patches/cborg-bounds.patch @@ -0,0 +1,11 @@ +--- a/cborg/cborg.cabal 2025-07-06 20:31:00.307574779 +0100 ++++ b/cborg/cborg.cabal 2025-07-06 20:31:05.085962403 +0100 +@@ -164,7 +164,7 @@ + scientific >= 0.3 && < 0.4, + tasty >= 0.11 && < 1.6, + tasty-hunit >= 0.9 && < 0.11, +- tasty-quickcheck >= 0.8 && < 0.11, ++ tasty-quickcheck >= 0.8 && < 0.12, + vector >= 0.10 && < 0.14 + if !impl(ghc >= 8.0) + build-depends: diff --git a/srcpkgs/darcs/patches/cborg.patch b/srcpkgs/darcs/patches/cborg.patch new file mode 100644 index 00000000000..b44ba514458 --- /dev/null +++ b/srcpkgs/darcs/patches/cborg.patch @@ -0,0 +1,212 @@ +commit 9d1418bb8b38cb9a438d7f18835b1ef7ef12b234 +Author: amesgen +Date: Sun Sep 10 20:03:40 2023 +0200 + + Fix compilation and support GHC >=9.2 on 32bit + +diff --git a/cborg/src/Codec/CBOR/Decoding.hs b/cborg/src/Codec/CBOR/Decoding.hs +index a7d774c..bf68e68 100644 +--- a/cborg/src/Codec/CBOR/Decoding.hs ++++ b/cborg/src/Codec/CBOR/Decoding.hs +@@ -315,11 +315,16 @@ getDecodeAction (Decoder k) = k (\x -> return (Done x)) + toInt8 :: Int# -> Int8 + toInt16 :: Int# -> Int16 + toInt32 :: Int# -> Int32 +-toInt64 :: Int# -> Int64 + toWord8 :: Word# -> Word8 + toWord16 :: Word# -> Word16 + toWord32 :: Word# -> Word32 ++#if defined(ARCH_64bit) ++toInt64 :: Int# -> Int64 + toWord64 :: Word# -> Word64 ++#else ++toInt64 :: Int64# -> Int64 ++toWord64 :: Word64# -> Word64 ++#endif + #if MIN_VERSION_ghc_prim(0,8,0) + toInt8 n = I8# (intToInt8# n) + toInt16 n = I16# (intToInt16# n) +@@ -327,8 +332,7 @@ toInt32 n = I32# (intToInt32# n) + toWord8 n = W8# (wordToWord8# n) + toWord16 n = W16# (wordToWord16# n) + toWord32 n = W32# (wordToWord32# n) +-#if WORD_SIZE_IN_BITS == 64 +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && defined(ARCH_64bit) + toInt64 n = I64# (intToInt64# n) + toWord64 n = W64# (wordToWord64# n) + #else +@@ -336,10 +340,6 @@ toInt64 n = I64# n + toWord64 n = W64# n + #endif + #else +-toInt64 n = I64# (intToInt64# n) +-toWord64 n = W64# (wordToWord64# n) +-#endif +-#else + toInt8 n = I8# n + toInt16 n = I16# n + toInt32 n = I32# n +@@ -986,7 +986,7 @@ type ByteOffset = Int64 + -- @since 0.2.2.0 + peekByteOffset :: Decoder s ByteOffset + peekByteOffset = Decoder (\k -> return (PeekByteOffset (\off# -> k (I64# +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (intToInt64# off#) + #else + off# +diff --git a/cborg/src/Codec/CBOR/Magic.hs b/cborg/src/Codec/CBOR/Magic.hs +index cdeb455..bfae638 100644 +--- a/cborg/src/Codec/CBOR/Magic.hs ++++ b/cborg/src/Codec/CBOR/Magic.hs +@@ -120,7 +120,7 @@ import qualified Numeric.Half as Half + import Data.Bits ((.|.), unsafeShiftL) + #endif + +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 (wordToWord64#, word64ToWord#, + intToInt64#, int64ToInt#, + leWord64#, ltWord64#, word64ToInt64#) +@@ -173,7 +173,7 @@ grabWord64 (Ptr ip#) = W64# (wordToWord64# (byteSwap# (word64ToWord# (indexWord6 + grabWord64 (Ptr ip#) = W64# (byteSwap# (indexWord64OffAddr# ip# 0#)) + #endif + #else +-grabWord64 (Ptr ip#) = W64# (byteSwap64# (word64ToWord# (indexWord64OffAddr# ip# 0#))) ++grabWord64 (Ptr ip#) = W64# (byteSwap64# (indexWord64OffAddr# ip# 0#)) + #endif + + #elif defined(MEM_UNALIGNED_OPS) && \ +@@ -484,7 +484,7 @@ word16ToInt (W16# w#) = I# (word2Int# (word16ToWord# w#)) + word32ToInt (W32# w#) = I# (word2Int# (word32ToWord# w#)) + #else + word32ToInt (W32# w#) = +- case isTrue# (w# `ltWord#` 0x80000000##) of ++ case isTrue# (word32ToWord# w# `ltWord#` 0x80000000##) of + True -> Just (I# (word2Int# (word32ToWord# w#))) + False -> Nothing + #endif +@@ -530,6 +530,19 @@ word64ToInt (W64# w#) = + {-# INLINE word64ToInt #-} + + #if defined(ARCH_32bit) ++#if MIN_VERSION_ghc_prim(0,8,0) ++word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# (word8ToWord# w#))) ++word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# (word16ToWord# w#))) ++word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# (word32ToWord# w#))) ++word64ToInt64 (W64# w#) = ++ case isTrue# (w# `ltWord64#` uncheckedShiftL64# (wordToWord64# 1##) 63#) of ++ True -> Just (I64# (word64ToInt64# w#)) ++ False -> Nothing ++ ++word8ToWord64 (W8# w#) = W64# (wordToWord64# (word8ToWord# w#)) ++word16ToWord64 (W16# w#) = W64# (wordToWord64# (word16ToWord# w#)) ++word32ToWord64 (W32# w#) = W64# (wordToWord64# (word32ToWord# w#)) ++#else + word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# w#)) + word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# w#)) + word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# w#)) +@@ -541,6 +554,7 @@ word64ToInt64 (W64# w#) = + word8ToWord64 (W8# w#) = W64# (wordToWord64# w#) + word16ToWord64 (W16# w#) = W64# (wordToWord64# w#) + word32ToWord64 (W32# w#) = W64# (wordToWord64# w#) ++#endif + + {-# INLINE word8ToInt64 #-} + {-# INLINE word16ToInt64 #-} +diff --git a/cborg/src/Codec/CBOR/Read.hs b/cborg/src/Codec/CBOR/Read.hs +index 6546575..c4dc761 100644 +--- a/cborg/src/Codec/CBOR/Read.hs ++++ b/cborg/src/Codec/CBOR/Read.hs +@@ -63,7 +63,7 @@ import qualified Data.Text as T + import qualified Data.Text.Encoding as T + import Data.Word + import GHC.Word +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 + #endif + import GHC.Exts +@@ -510,8 +510,8 @@ go_fast !bs da@(ConsumeNegWord64Canonical k) = + go_fast !bs da@(ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> go_fast_end bs da +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast (BS.unsafeDrop sz bs) + | otherwise -> go_fast_end bs da + + go_fast !bs da@(ConsumeListLen64Canonical k) = +@@ -994,8 +994,8 @@ go_fast_end !bs (ConsumeNegWord64Canonical k) = + go_fast_end !bs (ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> return $! SlowFail bs "expected int64" +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) + | otherwise -> return $! SlowFail bs "non-canonical int64" + + go_fast_end !bs (ConsumeListLen64Canonical k) = +@@ -1271,7 +1271,7 @@ go_slow da bs !offset = do + + SlowPeekByteOffset bs' k -> + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1381,7 +1381,7 @@ go_slow_overlapped da sz bs_cur bs_next !offset = + SlowPeekByteOffset bs_empty k -> + assert (BS.null bs_empty) $ do + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1565,17 +1565,17 @@ isIntCanonical sz i + {-# INLINE isWord64Canonical #-} + isWord64Canonical :: Int -> Word64 -> Bool + isWord64Canonical sz w +- | sz == 2 = w > 0x17) +- | sz == 3 = w > 0xff) +- | sz == 5 = w > 0xffff) +- | sz == 9 = w > 0xffffffff) ++ | sz == 2 = w > 0x17 ++ | sz == 3 = w > 0xff ++ | sz == 5 = w > 0xffff ++ | sz == 9 = w > 0xffffffff + | otherwise = True + + {-# INLINE isInt64Canonical #-} + isInt64Canonical :: Int -> Int64# -> Bool + isInt64Canonical sz i# +- | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (not64# w#) +- | otherwise = isWord64Canonical sz w# ++ | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (W64# (not64# w#)) ++ | otherwise = isWord64Canonical sz (W64# w#) + where + w# = int64ToWord64# i# + #endif +@@ -1796,7 +1796,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x1b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! toInteger w) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! toInteger w) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! toInteger w) + #endif +@@ -1838,7 +1838,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x3b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! (-1 - toInteger w)) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! (-1 - toInteger w)) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! (-1 - toInteger w)) + #endif diff --git a/srcpkgs/darcs/patches/memory.patch b/srcpkgs/darcs/patches/memory.patch new file mode 100644 index 00000000000..2a6d85b720d --- /dev/null +++ b/srcpkgs/darcs/patches/memory.patch @@ -0,0 +1,36 @@ +From 2738929ce15b4c8704bbbac24a08539b5d4bf30e Mon Sep 17 00:00:00 2001 +From: sternenseemann +Date: Mon, 14 Aug 2023 10:51:30 +0200 +Subject: [PATCH] Data.Memory.Internal.CompatPrim64: fix 32 bit with GHC >= 9.4 + +Since 9.4, GHC.Prim exports Word64# operations like timesWord64# even on +i686 whereas GHC.IntWord64 no longer exists. Therefore, we can just use +the ready made solution. + +Closes #98, as it should be the better solution. +--- + Data/Memory/Internal/CompatPrim64.hs | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Data/Memory/Internal/CompatPrim64.hs b/Data/Memory/Internal/CompatPrim64.hs +index b9eef8a..a134c88 100644 +--- a/memory/Data/Memory/Internal/CompatPrim64.hs ++++ b/memory/Data/Memory/Internal/CompatPrim64.hs +@@ -150,6 +150,7 @@ w64# :: Word# -> Word# -> Word# -> Word64# + w64# w _ _ = w + + #elif WORD_SIZE_IN_BITS == 32 ++#if __GLASGOW_HASKELL__ < 904 + import GHC.IntWord64 + import GHC.Prim (Word#) + +@@ -158,6 +159,9 @@ timesWord64# a b = + let !ai = word64ToInt64# a + !bi = word64ToInt64# b + in int64ToWord64# (timesInt64# ai bi) ++#else ++import GHC.Prim ++#endif + + w64# :: Word# -> Word# -> Word# -> Word64# + w64# _ hw lw = diff --git a/srcpkgs/darcs/template b/srcpkgs/darcs/template index f84af52e9ac..820ca7e332d 100644 --- a/srcpkgs/darcs/template +++ b/srcpkgs/darcs/template @@ -1,18 +1,32 @@ # Template file for 'darcs' pkgname=darcs -version=2.16.5 -revision=3 +version=2.18.5 +revision=1 build_style=haskell-stack -hostmakedepends="unzip" +stackage="lts-23.26" +hostmakedepends="pkg-config unzip" makedepends="zlib-devel libcurl-devel ncurses-devel" short_desc="Change-focused cross-platform version control system" maintainer="Orphaned " license="GPL-2.0-or-later" homepage="http://darcs.net/" -distfiles="http://hackage.haskell.org/package/${pkgname}-${version}/${pkgname}-${version}.tar.gz" -checksum=d63c6cd236e31e812e8ad84433d27059387606269fbd953f4c349c3cb3aa242b +distfiles="http://hackage.haskell.org/package/${pkgname}-${version}/${pkgname}-${version}.tar.gz + https://hackage.haskell.org/package/basement-0.0.16/basement-0.0.16.tar.gz + https://hackage.haskell.org/package/memory-0.18.0/memory-0.18.0.tar.gz + https://hackage.haskell.org/package/cborg-0.2.10.0/cborg-0.2.10.0.tar.gz" +checksum="e310692989e313191824f532a26c5eae712217444214266503d5eb5867f951ab + 7fb77e249aef76ba5aed3059d556800ce02b614597c488ba01f0a16449146300 + fd4eb6f638e24b81b4e6cdd68772a531726f2f67686c8969d3407d82f7862e3e + 17fe070c38fc498cab49bcb9d6215b7747d53bedf96502e9bcce9cad73b9c797" nopie_files="/usr/bin/darcs" nocross=yes +skip_extraction="basement-0.0.16.tar.gz memory-0.18.0.tar.gz cborg-0.2.10.0.tar.gz" + +post_extract() { + vsrcextract -C basement basement-0.0.16.tar.gz + vsrcextract -C memory memory-0.18.0.tar.gz + vsrcextract -C cborg cborg-0.2.10.0.tar.gz +} post_install() { vinstall contrib/darcs_completion 644 usr/share/bash-completion/completions diff --git a/srcpkgs/debug-me/files/stack.yaml b/srcpkgs/debug-me/files/stack.yaml deleted file mode 100644 index f2b1a79d70c..00000000000 --- a/srcpkgs/debug-me/files/stack.yaml +++ /dev/null @@ -1,6 +0,0 @@ -packages: -- '.' -resolver: lts-19.0 -extra-deps: - - posix-pty-0.2.1.1 - - sandi-0.5@sha256:b278d072ca717706ea38f9bd646e023f7f2576a778fb43565b434f93638849aa,3010 diff --git a/srcpkgs/debug-me/patches/basement.patch b/srcpkgs/debug-me/patches/basement.patch new file mode 100644 index 00000000000..e934f8e67b2 --- /dev/null +++ b/srcpkgs/debug-me/patches/basement.patch @@ -0,0 +1,242 @@ +From 38be2c93acb6f459d24ed6c626981c35ccf44095 Mon Sep 17 00:00:00 2001 +From: Sylvain Henry +Date: Thu, 16 Feb 2023 15:40:45 +0100 +Subject: [PATCH] Fix build on 32-bit architectures + +--- + basement/Basement/Bits.hs | 4 ++++ + basement/Basement/From.hs | 24 ----------------------- + basement/Basement/Numerical/Additive.hs | 4 ++++ + basement/Basement/Numerical/Conversion.hs | 20 +++++++++++++++++++ + basement/Basement/PrimType.hs | 6 +++++- + basement/Basement/Types/OffsetSize.hs | 22 +++++++++++++++++++-- + 6 files changed, 53 insertions(+), 27 deletions(-) + +diff --git a/basement/Basement/Bits.hs b/basement/Basement/Bits.hs +index 7eeea0f5..24520ed7 100644 +--- a/basement/Basement/Bits.hs ++++ b/basement/Basement/Bits.hs +@@ -54,8 +54,12 @@ import GHC.Int + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | operation over finite bits + class FiniteBitsOps bits where +diff --git a/basement/Basement/From.hs b/basement/Basement/From.hs +index 7bbe141c..80014b3e 100644 +--- a/basement/Basement/From.hs ++++ b/basement/Basement/From.hs +@@ -272,23 +272,11 @@ instance (NatWithinBound (CountOf ty) n, KnownNat n, PrimType ty) + tryFrom = BlockN.toBlockN . UArray.toBlock . BoxArray.mapToUnboxed id + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn64 n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn64 n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn64 n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance From (Zn64 n) Word64 where + from = unZn64 + instance From (Zn64 n) Word128 where +@@ -297,23 +285,11 @@ instance From (Zn64 n) Word256 where + from = from . unZn64 + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word64 n) => From (Zn n) Word64 where + from = naturalToWord64 . unZn + instance (KnownNat n, NatWithinBound Word128 n) => From (Zn n) Word128 where +diff --git a/basement/Basement/Numerical/Additive.hs b/basement/Basement/Numerical/Additive.hs +index d0dfb973..8ab65aa0 100644 +--- a/basement/Basement/Numerical/Additive.hs ++++ b/basement/Basement/Numerical/Additive.hs +@@ -30,8 +30,12 @@ import qualified Basement.Types.Word128 as Word128 + import qualified Basement.Types.Word256 as Word256 + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | Represent class of things that can be added together, + -- contains a neutral element and is commutative. +diff --git a/basement/Basement/Numerical/Conversion.hs b/basement/Basement/Numerical/Conversion.hs +index db502c07..fddc8232 100644 +--- a/basement/Basement/Numerical/Conversion.hs ++++ b/basement/Basement/Numerical/Conversion.hs +@@ -26,8 +26,12 @@ import GHC.Word + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + intToInt64 :: Int -> Int64 + #if WORD_SIZE_IN_BITS == 64 +@@ -96,11 +100,22 @@ int64ToWord64 (I64# i) = W64# (int64ToWord64# i) + #endif + + #if WORD_SIZE_IN_BITS == 64 ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord# :: Word64# -> Word# ++word64ToWord# i = word64ToWord# i ++#else + word64ToWord# :: Word# -> Word# + word64ToWord# i = i ++#endif + {-# INLINE word64ToWord# #-} + #endif + ++#if WORD_SIZE_IN_BITS < 64 ++word64ToWord32# :: Word64# -> Word32# ++word64ToWord32# i = wordToWord32# (word64ToWord# i) ++{-# INLINE word64ToWord32# #-} ++#endif ++ + -- | 2 Word32s + data Word32x2 = Word32x2 {-# UNPACK #-} !Word32 + {-# UNPACK #-} !Word32 +@@ -113,9 +128,14 @@ word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# (G + word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# w64 32#))) (W32# (wordToWord32# w64)) + #endif + #else ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord32s :: Word64 -> Word32x2 ++word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord32# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord32# w64)) ++#else + word64ToWord32s :: Word64 -> Word32x2 + word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord# w64)) + #endif ++#endif + + wordToChar :: Word -> Char + wordToChar (W# word) = C# (chr# (word2Int# word)) +diff --git a/basement/Basement/PrimType.hs b/basement/Basement/PrimType.hs +index f8ca2926..a888ec91 100644 +--- a/basement/Basement/PrimType.hs ++++ b/basement/Basement/PrimType.hs +@@ -54,7 +54,11 @@ import Basement.Nat + import qualified Prelude (quot) + + #if WORD_SIZE_IN_BITS < 64 +-import GHC.IntWord64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else ++import GHC.IntWord64 ++#endif + #endif + + #ifdef FOUNDATION_BOUNDS_CHECK +diff --git a/basement/Basement/Types/OffsetSize.hs b/basement/Basement/Types/OffsetSize.hs +index cd944927..1ea80dad 100644 +--- a/basement/Basement/Types/OffsetSize.hs ++++ b/basement/Basement/Types/OffsetSize.hs +@@ -70,8 +70,12 @@ import Data.List (foldl') + import qualified Prelude + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | File size in bytes + newtype FileSize = FileSize Word64 +@@ -225,20 +229,26 @@ countOfRoundUp alignment (CountOf n) = CountOf ((n + (alignment-1)) .&. compleme + + csizeOfSize :: CountOf Word8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfSize (CountOf (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfSize (CountOf (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfSize (CountOf (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +- + #else + csizeOfSize (CountOf (I# sz)) = CSize (W64# (int2Word# sz)) +- + #endif + #endif + + csizeOfOffset :: Offset8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfOffset (Offset (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfOffset (Offset (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfOffset (Offset (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +@@ -250,7 +260,11 @@ csizeOfOffset (Offset (I# sz)) = CSize (W64# (int2Word# sz)) + sizeOfCSSize :: CSsize -> CountOf Word8 + sizeOfCSSize (CSsize (-1)) = error "invalid size: CSSize is -1" + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# (int32ToInt# sz)) ++#else + sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# sz) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# (int64ToInt# sz)) +@@ -261,7 +275,11 @@ sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# sz) + + sizeOfCSize :: CSize -> CountOf Word8 + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# (word32ToWord# sz))) ++#else + sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSize (CSize (W64# sz)) = CountOf (I# (word2Int# (word64ToWord# sz))) diff --git a/srcpkgs/debug-me/patches/cborg.patch b/srcpkgs/debug-me/patches/cborg.patch new file mode 100644 index 00000000000..b44ba514458 --- /dev/null +++ b/srcpkgs/debug-me/patches/cborg.patch @@ -0,0 +1,212 @@ +commit 9d1418bb8b38cb9a438d7f18835b1ef7ef12b234 +Author: amesgen +Date: Sun Sep 10 20:03:40 2023 +0200 + + Fix compilation and support GHC >=9.2 on 32bit + +diff --git a/cborg/src/Codec/CBOR/Decoding.hs b/cborg/src/Codec/CBOR/Decoding.hs +index a7d774c..bf68e68 100644 +--- a/cborg/src/Codec/CBOR/Decoding.hs ++++ b/cborg/src/Codec/CBOR/Decoding.hs +@@ -315,11 +315,16 @@ getDecodeAction (Decoder k) = k (\x -> return (Done x)) + toInt8 :: Int# -> Int8 + toInt16 :: Int# -> Int16 + toInt32 :: Int# -> Int32 +-toInt64 :: Int# -> Int64 + toWord8 :: Word# -> Word8 + toWord16 :: Word# -> Word16 + toWord32 :: Word# -> Word32 ++#if defined(ARCH_64bit) ++toInt64 :: Int# -> Int64 + toWord64 :: Word# -> Word64 ++#else ++toInt64 :: Int64# -> Int64 ++toWord64 :: Word64# -> Word64 ++#endif + #if MIN_VERSION_ghc_prim(0,8,0) + toInt8 n = I8# (intToInt8# n) + toInt16 n = I16# (intToInt16# n) +@@ -327,8 +332,7 @@ toInt32 n = I32# (intToInt32# n) + toWord8 n = W8# (wordToWord8# n) + toWord16 n = W16# (wordToWord16# n) + toWord32 n = W32# (wordToWord32# n) +-#if WORD_SIZE_IN_BITS == 64 +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && defined(ARCH_64bit) + toInt64 n = I64# (intToInt64# n) + toWord64 n = W64# (wordToWord64# n) + #else +@@ -336,10 +340,6 @@ toInt64 n = I64# n + toWord64 n = W64# n + #endif + #else +-toInt64 n = I64# (intToInt64# n) +-toWord64 n = W64# (wordToWord64# n) +-#endif +-#else + toInt8 n = I8# n + toInt16 n = I16# n + toInt32 n = I32# n +@@ -986,7 +986,7 @@ type ByteOffset = Int64 + -- @since 0.2.2.0 + peekByteOffset :: Decoder s ByteOffset + peekByteOffset = Decoder (\k -> return (PeekByteOffset (\off# -> k (I64# +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (intToInt64# off#) + #else + off# +diff --git a/cborg/src/Codec/CBOR/Magic.hs b/cborg/src/Codec/CBOR/Magic.hs +index cdeb455..bfae638 100644 +--- a/cborg/src/Codec/CBOR/Magic.hs ++++ b/cborg/src/Codec/CBOR/Magic.hs +@@ -120,7 +120,7 @@ import qualified Numeric.Half as Half + import Data.Bits ((.|.), unsafeShiftL) + #endif + +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 (wordToWord64#, word64ToWord#, + intToInt64#, int64ToInt#, + leWord64#, ltWord64#, word64ToInt64#) +@@ -173,7 +173,7 @@ grabWord64 (Ptr ip#) = W64# (wordToWord64# (byteSwap# (word64ToWord# (indexWord6 + grabWord64 (Ptr ip#) = W64# (byteSwap# (indexWord64OffAddr# ip# 0#)) + #endif + #else +-grabWord64 (Ptr ip#) = W64# (byteSwap64# (word64ToWord# (indexWord64OffAddr# ip# 0#))) ++grabWord64 (Ptr ip#) = W64# (byteSwap64# (indexWord64OffAddr# ip# 0#)) + #endif + + #elif defined(MEM_UNALIGNED_OPS) && \ +@@ -484,7 +484,7 @@ word16ToInt (W16# w#) = I# (word2Int# (word16ToWord# w#)) + word32ToInt (W32# w#) = I# (word2Int# (word32ToWord# w#)) + #else + word32ToInt (W32# w#) = +- case isTrue# (w# `ltWord#` 0x80000000##) of ++ case isTrue# (word32ToWord# w# `ltWord#` 0x80000000##) of + True -> Just (I# (word2Int# (word32ToWord# w#))) + False -> Nothing + #endif +@@ -530,6 +530,19 @@ word64ToInt (W64# w#) = + {-# INLINE word64ToInt #-} + + #if defined(ARCH_32bit) ++#if MIN_VERSION_ghc_prim(0,8,0) ++word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# (word8ToWord# w#))) ++word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# (word16ToWord# w#))) ++word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# (word32ToWord# w#))) ++word64ToInt64 (W64# w#) = ++ case isTrue# (w# `ltWord64#` uncheckedShiftL64# (wordToWord64# 1##) 63#) of ++ True -> Just (I64# (word64ToInt64# w#)) ++ False -> Nothing ++ ++word8ToWord64 (W8# w#) = W64# (wordToWord64# (word8ToWord# w#)) ++word16ToWord64 (W16# w#) = W64# (wordToWord64# (word16ToWord# w#)) ++word32ToWord64 (W32# w#) = W64# (wordToWord64# (word32ToWord# w#)) ++#else + word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# w#)) + word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# w#)) + word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# w#)) +@@ -541,6 +554,7 @@ word64ToInt64 (W64# w#) = + word8ToWord64 (W8# w#) = W64# (wordToWord64# w#) + word16ToWord64 (W16# w#) = W64# (wordToWord64# w#) + word32ToWord64 (W32# w#) = W64# (wordToWord64# w#) ++#endif + + {-# INLINE word8ToInt64 #-} + {-# INLINE word16ToInt64 #-} +diff --git a/cborg/src/Codec/CBOR/Read.hs b/cborg/src/Codec/CBOR/Read.hs +index 6546575..c4dc761 100644 +--- a/cborg/src/Codec/CBOR/Read.hs ++++ b/cborg/src/Codec/CBOR/Read.hs +@@ -63,7 +63,7 @@ import qualified Data.Text as T + import qualified Data.Text.Encoding as T + import Data.Word + import GHC.Word +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 + #endif + import GHC.Exts +@@ -510,8 +510,8 @@ go_fast !bs da@(ConsumeNegWord64Canonical k) = + go_fast !bs da@(ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> go_fast_end bs da +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast (BS.unsafeDrop sz bs) + | otherwise -> go_fast_end bs da + + go_fast !bs da@(ConsumeListLen64Canonical k) = +@@ -994,8 +994,8 @@ go_fast_end !bs (ConsumeNegWord64Canonical k) = + go_fast_end !bs (ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> return $! SlowFail bs "expected int64" +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) + | otherwise -> return $! SlowFail bs "non-canonical int64" + + go_fast_end !bs (ConsumeListLen64Canonical k) = +@@ -1271,7 +1271,7 @@ go_slow da bs !offset = do + + SlowPeekByteOffset bs' k -> + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1381,7 +1381,7 @@ go_slow_overlapped da sz bs_cur bs_next !offset = + SlowPeekByteOffset bs_empty k -> + assert (BS.null bs_empty) $ do + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1565,17 +1565,17 @@ isIntCanonical sz i + {-# INLINE isWord64Canonical #-} + isWord64Canonical :: Int -> Word64 -> Bool + isWord64Canonical sz w +- | sz == 2 = w > 0x17) +- | sz == 3 = w > 0xff) +- | sz == 5 = w > 0xffff) +- | sz == 9 = w > 0xffffffff) ++ | sz == 2 = w > 0x17 ++ | sz == 3 = w > 0xff ++ | sz == 5 = w > 0xffff ++ | sz == 9 = w > 0xffffffff + | otherwise = True + + {-# INLINE isInt64Canonical #-} + isInt64Canonical :: Int -> Int64# -> Bool + isInt64Canonical sz i# +- | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (not64# w#) +- | otherwise = isWord64Canonical sz w# ++ | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (W64# (not64# w#)) ++ | otherwise = isWord64Canonical sz (W64# w#) + where + w# = int64ToWord64# i# + #endif +@@ -1796,7 +1796,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x1b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! toInteger w) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! toInteger w) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! toInteger w) + #endif +@@ -1838,7 +1838,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x3b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! (-1 - toInteger w)) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! (-1 - toInteger w)) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! (-1 - toInteger w)) + #endif diff --git a/srcpkgs/debug-me/patches/deps.patch b/srcpkgs/debug-me/patches/deps.patch new file mode 100644 index 00000000000..121f8e70d26 --- /dev/null +++ b/srcpkgs/debug-me/patches/deps.patch @@ -0,0 +1,20 @@ +--- a/debug-me.cabal 2025-07-05 13:11:54.095974453 +0100 ++++ b/debug-me.cabal 2025-07-05 13:11:59.253974699 +0100 +@@ -55,7 +55,7 @@ + Build-Depends: + base (>= 4.9 && < 5.0) + , network (>= 2.6) +- , bytestring < 0.12 ++ , bytestring < 0.13 + , cryptonite (>= 0.20) + , unix (>= 2.7) + , process (>= 1.4) +@@ -64,7 +64,7 @@ + , stm-chans (>= 3.0) + , posix-pty (>= 0.2.1) + , terminal-size (>= 0.3) +- , aeson (>= 0.11 && < 2.1) ++ , aeson (>= 0.11 && < 2.3) + , sandi (>= 0.4) + , text (>= 1.2.2) + , optparse-applicative (>= 0.12) diff --git a/srcpkgs/debug-me/patches/memory.patch b/srcpkgs/debug-me/patches/memory.patch new file mode 100644 index 00000000000..2a6d85b720d --- /dev/null +++ b/srcpkgs/debug-me/patches/memory.patch @@ -0,0 +1,36 @@ +From 2738929ce15b4c8704bbbac24a08539b5d4bf30e Mon Sep 17 00:00:00 2001 +From: sternenseemann +Date: Mon, 14 Aug 2023 10:51:30 +0200 +Subject: [PATCH] Data.Memory.Internal.CompatPrim64: fix 32 bit with GHC >= 9.4 + +Since 9.4, GHC.Prim exports Word64# operations like timesWord64# even on +i686 whereas GHC.IntWord64 no longer exists. Therefore, we can just use +the ready made solution. + +Closes #98, as it should be the better solution. +--- + Data/Memory/Internal/CompatPrim64.hs | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Data/Memory/Internal/CompatPrim64.hs b/Data/Memory/Internal/CompatPrim64.hs +index b9eef8a..a134c88 100644 +--- a/memory/Data/Memory/Internal/CompatPrim64.hs ++++ b/memory/Data/Memory/Internal/CompatPrim64.hs +@@ -150,6 +150,7 @@ w64# :: Word# -> Word# -> Word# -> Word64# + w64# w _ _ = w + + #elif WORD_SIZE_IN_BITS == 32 ++#if __GLASGOW_HASKELL__ < 904 + import GHC.IntWord64 + import GHC.Prim (Word#) + +@@ -158,6 +159,9 @@ timesWord64# a b = + let !ai = word64ToInt64# a + !bi = word64ToInt64# b + in int64ToWord64# (timesInt64# ai bi) ++#else ++import GHC.Prim ++#endif + + w64# :: Word# -> Word# -> Word# -> Word64# + w64# _ hw lw = diff --git a/srcpkgs/debug-me/template b/srcpkgs/debug-me/template index c886d07b175..a7a5ad71e00 100644 --- a/srcpkgs/debug-me/template +++ b/srcpkgs/debug-me/template @@ -1,19 +1,43 @@ # Template file for 'debug-me' pkgname=debug-me -version=1.20220324 +version=1.20221231 revision=1 -build_style=haskell-stack -stackage="lts-19.0" +build_style=cabal +cabal_index_state=2025-07-05T11:40:57Z makedepends="zlib-devel" short_desc="Secure remote debugging" maintainer="Orphaned " license="AGPL-3.0-or-later" homepage="https://debug-me.branchable.com/" -distfiles="https://git.joeyh.name/index.cgi/${pkgname}.git/snapshot/${pkgname}-${version}.tar.gz" -checksum=9fd6256aa34408106ff095e0560850aca3558a774be4ce19de6ab6e81fbfdb9f +distfiles="https://git.joeyh.name/index.cgi/${pkgname}.git/snapshot/${pkgname}-${version}.tar.gz + https://hackage.haskell.org/package/basement-0.0.16/basement-0.0.16.tar.gz + https://hackage.haskell.org/package/memory-0.18.0/memory-0.18.0.tar.gz + https://hackage.haskell.org/package/cborg-0.2.10.0/cborg-0.2.10.0.tar.gz" +checksum="c16b63a99d9cb177f28318e4598debaf974eda791da37fc66e13780959356373 + 7fb77e249aef76ba5aed3059d556800ce02b614597c488ba01f0a16449146300 + fd4eb6f638e24b81b4e6cdd68772a531726f2f67686c8969d3407d82f7862e3e + 17fe070c38fc498cab49bcb9d6215b7747d53bedf96502e9bcce9cad73b9c797" nocross=yes # Can't yet cross compile Haskell nopie_files="/usr/bin/debug-me" +skip_extraction="basement-0.0.16.tar.gz memory-0.18.0.tar.gz cborg-0.2.10.0.tar.gz" + +post_extract() { + vsrcextract -C basement basement-0.0.16.tar.gz + vsrcextract -C memory memory-0.18.0.tar.gz + vsrcextract -C cborg cborg-0.2.10.0.tar.gz +} + +post_configure() { + # Fix build on i686 by using patched basement, memory and cborg packages + echo 'packages: ./basement ./memory ./cborg' >> cabal.project.local + + # Fix build on musl by pretending to be glibc, + # otherwise it thinks we're freebsd + echo 'package posix-pty' >> cabal.project.local + echo ' ghc-options: -optc=-D__GLIBC__' >> cabal.project.local +} post_install() { + vman debug-me.1 vlicense AGPL } diff --git a/srcpkgs/ghc-bin/template b/srcpkgs/ghc-bin/template index 786a57b73d8..73f196f3d80 100644 --- a/srcpkgs/ghc-bin/template +++ b/srcpkgs/ghc-bin/template @@ -1,53 +1,35 @@ # Template file for 'ghc-bin' pkgname=ghc-bin -version=9.0.2 +version=9.8.4 revision=1 -archs="i686 x86_64* ppc64le* ppc64 aarch64*" -hostmakedepends="perl libffi libnuma" -depends="ncurses perl gcc libffi-devel gmp-devel" -short_desc="Glorious Haskell Compiler - precompiled binaries" +archs="i686 x86_64* aarch64*" +hostmakedepends="patchelf" +depends="gcc libffi-devel gmp-devel" +short_desc="Glasgow Haskell Compiler - precompiled binaries" maintainer="Orphaned " license="BSD-3-Clause" homepage="http://www.haskell.org/ghc/" nocross=yes nostrip=yes noshlibprovides=yes -conflicts="ghc>=0 ghc-doc>=0" +conflicts="ghc>=0 ghc-doc>=0 ghc-devel>=0" + case "$XBPS_TARGET_MACHINE" in -x86_64) - distfiles="https://downloads.haskell.org/ghc/${version%[!0-9]}/ghc-${version}-x86_64-deb9-linux.tar.xz" - checksum=805f5628ce6cec678ba77ff48c924831ebdf75ec2c66368e8935a618913a150e - ;; -x86_64-musl) - # create with "make binary-dist" - distfiles="https://repo-default.voidlinux.org/distfiles/ghc-${version}-x86_64-void-linux-musl.tar.xz" - checksum=e21eaddeffcd5de7abe43b1f3982a3bc2c5b5f408d2574857cb2b0368106e12c +x86_64*) + distfiles="https://downloads.haskell.org/ghc/${version}/ghc-${version}-x86_64-alpine3_12-linux-static.tar.xz" + checksum=02535eaef4f57aef8b7b272ef6f48d386d186ebd07fa47e227b46b93fa7eb0ab ;; i686) - distfiles="https://downloads.haskell.org/ghc/${version%[!0-9]}/ghc-${version}-i386-deb9-linux.tar.xz" - checksum=fdeb9f8928fbe994064778a8e1e85bb1a58a6cd3dd7b724fcc2a1dcfda6cad47 - ;; -ppc64le) - distfiles="https://repo-default.voidlinux.org/distfiles/ghc-${version}-powerpc64le-void-linux.tar.xz" - checksum=7de8114c991f9a2a3b0f5e472da76e3956be6447efec4b1157f14e707049f22d - ;; -ppc64le-musl) - distfiles="https://repo-default.voidlinux.org/distfiles/ghc-${version}-powerpc64le-void-linux-musl.tar.xz" - checksum=37de8e069712307c9b2039e92f56e540e80ca1390dd27aa247ebe18c40e0c629 - ;; -ppc64) - distfiles="https://repo-default.voidlinux.org/distfiles/ghc-${version}-powerpc64-void-linux.tar.xz" - checksum=6eb8684fdbede0cded7e3f7b93574b968f5f66dd2fcd4ec30ac5f0c402af6602 + distfiles="https://downloads.haskell.org/ghc/${version}/ghc-${version}-i386-deb10-linux.tar.xz" + checksum=e5efce16c654d5e702986258a87dd9531e1722b8051823c8ce1150ce3c5899ae ;; aarch64) - distfiles="https://repo-default.voidlinux.org/distfiles/ghc-${version}-aarch64-void-linux.tar.xz" - checksum=44a20a896246dce64392b7d0feedd0a28a9d733245a803e95dbe4b4b7e15b4fd - depends+=" llvm" + distfiles="https://downloads.haskell.org/ghc/${version}/ghc-${version}-aarch64-deb11-linux.tar.xz" + checksum=310204daf2df6ad16087be94b3498ca414a0953b29e94e8ec8eb4a5c9bf603d3 ;; aarch64-musl) - distfiles="https://repo-default.voidlinux.org/distfiles/ghc-${version}-aarch64-void-linux-musl.tar.xz" - checksum=de98e2ff33a25cb32a28c738066fecacb736a33cac12688876eec4eb96d88607 - depends+=" llvm" + distfiles="https://downloads.haskell.org/ghc/${version}/ghc-${version}-aarch64-alpine3_18-linux.tar.xz" + checksum=b5c86a0cda0bd62d5eeeb52b1937c3bd00c70cd67dd74226ce787d5c429a4e62 ;; *) broken="No distfiles available for this target" @@ -59,13 +41,15 @@ do_configure() { } do_install() { - ln -sf /usr/lib/libncursesw.so.6 libtinfo.so.5 - export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH - make install DESTDIR="$DESTDIR" - # Fake libtinfo into rpath of ghc: - ln -sf /usr/lib/libncursesw.so.6 \ - $DESTDIR/usr/lib/ghc-${version%[!0-9]}/rts/libtinfo.so.5 - vlicense LICENSE + # quiet lint: vlicense not needed, installed by make +} + +post_install() { + if [ "$XBPS_TARGET_MACHINE" = "aarch64-musl" ]; then + for _cur_binary in $(find ${DESTDIR} -type f -exec file {} \; |grep ELF |grep -v static |cut -d ':' -f 1); do + patchelf --replace-needed libc.musl-aarch64.so.1 libc.so $_cur_binary + done + fi } diff --git a/srcpkgs/ghc-devel b/srcpkgs/ghc-devel new file mode 120000 index 00000000000..a064d2670ec --- /dev/null +++ b/srcpkgs/ghc-devel @@ -0,0 +1 @@ +ghc \ No newline at end of file diff --git a/srcpkgs/ghc/files/plan-bootstrap-9_8_4.json b/srcpkgs/ghc/files/plan-bootstrap-9_8_4.json new file mode 100644 index 00000000000..adf66a184ef --- /dev/null +++ b/srcpkgs/ghc/files/plan-bootstrap-9_8_4.json @@ -0,0 +1,288 @@ +{ + "builtin": [ + { + "package": "rts", + "version": "1.0.2" + }, + { + "package": "ghc-prim", + "version": "0.11.0" + }, + { + "package": "ghc-bignum", + "version": "1.3" + }, + { + "package": "base", + "version": "4.19.2.0" + }, + { + "package": "array", + "version": "0.5.8.0" + }, + { + "package": "deepseq", + "version": "1.5.1.0" + }, + { + "package": "ghc-boot-th", + "version": "9.8.4" + }, + { + "package": "pretty", + "version": "1.1.3.6" + }, + { + "package": "template-haskell", + "version": "2.21.0.0" + }, + { + "package": "bytestring", + "version": "0.12.1.0" + }, + { + "package": "containers", + "version": "0.6.8" + }, + { + "package": "binary", + "version": "0.8.9.1" + }, + { + "package": "transformers", + "version": "0.6.1.0" + }, + { + "package": "mtl", + "version": "2.3.1" + }, + { + "package": "stm", + "version": "2.5.3.1" + }, + { + "package": "exceptions", + "version": "0.10.7" + }, + { + "package": "filepath", + "version": "1.4.301.0" + }, + { + "package": "time", + "version": "1.12.2" + }, + { + "package": "unix", + "version": "2.8.6.0" + }, + { + "package": "directory", + "version": "1.3.8.5" + }, + { + "package": "text", + "version": "2.1.1" + }, + { + "package": "parsec", + "version": "3.1.17.0" + }, + { + "package": "Cabal-syntax", + "version": "3.10.3.0" + }, + { + "package": "process", + "version": "1.6.25.0" + }, + { + "package": "Cabal", + "version": "3.10.3.0" + } + ], + "dependencies": [ + { + "cabal_sha256": "a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd", + "flags": [], + "package": "base16-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784", + "version": "1.0.2.0" + }, + { + "cabal_sha256": "b938655b00cf204ce69abfff946021bed111d2609a9f7a9c22e28a1a202e9115", + "flags": [ + "-llvm" + ], + "package": "clock", + "revision": 0, + "source": "hackage", + "src_sha256": "6ae9898afe788a5e334cd5fad5d18a3c2e8e59fa09aaf7b957dbb38a4767df2e", + "version": "0.8.4" + }, + { + "cabal_sha256": "0e9de2ccce261e7a5b027e842f6f47f50eb0e6059a0de98a5479f75aa8164107", + "flags": [ + "-exe", + "+use-cbits" + ], + "package": "cryptohash-sha256", + "revision": 6, + "source": "hackage", + "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", + "version": "0.11.102.1" + }, + { + "cabal_sha256": "57d9200fbea2e88e05e0be35925511764827b1c86d3214106b0b610f331fc40c", + "flags": [], + "package": "extra", + "revision": 0, + "source": "hackage", + "src_sha256": "2fa4ce5eae50560bba80f1883913cf2ed52b3d87fd290dae27d838c94f5389a1", + "version": "1.8" + }, + { + "cabal_sha256": "372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2", + "flags": [], + "package": "filepattern", + "revision": 0, + "source": "hackage", + "src_sha256": "cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636", + "version": "0.1.3" + }, + { + "cabal_sha256": "2efc549644dd418bad537d1601fdd437c440d807265016bd993b6996c679ad2f", + "flags": [], + "package": "os-string", + "revision": 0, + "source": "hackage", + "src_sha256": "339c35fd3a290522f23de4e33528423cfd0b0a8f22946b0b9816a817b926cba0", + "version": "2.0.7" + }, + { + "cabal_sha256": "2f23146cbe0325029927b221647695a4c7d6e97548ff731110979e34361f58ef", + "flags": [ + "-arch-native", + "-random-initial-seed" + ], + "package": "hashable", + "revision": 1, + "source": "hackage", + "src_sha256": "e58b3a8e18da5f6cd7e937e5fd683e500bb1f8276b3768269759119ca0cddb6a", + "version": "1.5.0.0" + }, + { + "cabal_sha256": "74ce60a23b8ef247b8bca71eeb38289e82b3b5e83b2383600b2c838a68218068", + "flags": [], + "package": "heaps", + "revision": 0, + "source": "hackage", + "src_sha256": "8763a4663a2d0b3c912400a547d66ae11b46a954403b6747272148e950aa0382", + "version": "0.4.1" + }, + { + "cabal_sha256": "f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4", + "flags": [], + "package": "js-dgtable", + "revision": 0, + "source": "hackage", + "src_sha256": "e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac", + "version": "0.5.2" + }, + { + "cabal_sha256": "4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d", + "flags": [], + "package": "js-flot", + "revision": 0, + "source": "hackage", + "src_sha256": "1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a", + "version": "0.8.3" + }, + { + "cabal_sha256": "fdbdfd4d413848c678a3737f2b985a5db66b796c6847b1ae08246ea3795c0ba2", + "flags": [], + "package": "js-jquery", + "revision": 0, + "source": "hackage", + "src_sha256": "a087fa01a1c52f5386d43f5355f64841c5a4b56b53720090d66b5aa00bfeb106", + "version": "3.7.1" + }, + { + "cabal_sha256": "dfdd6572944c11e69208237dd32a2eb9d975b4f4e9064a7b8dc952cb0e256846", + "flags": [], + "package": "primitive", + "revision": 0, + "source": "hackage", + "src_sha256": "44b4de41813c7bc5db8a57f87c3612a069b65086946268ba165097252ebd3d76", + "version": "0.9.1.0" + }, + { + "cabal_sha256": "8f92088f1c51c8d4569279a07565f8aa6b534a6735615b2295d2961dec8f1783", + "flags": [ + "-optimised-mixer" + ], + "package": "splitmix", + "revision": 0, + "source": "hackage", + "src_sha256": "d678c41a603a62032cf7e5f8336bb8222c93990e4b59c8b291b7ca26c7eb12c7", + "version": "0.1.1" + }, + { + "cabal_sha256": "0b4f649c3e78713b2ccad1535251ee34b148237fb2229d7058c2b1d9ccc324b8", + "flags": [], + "package": "random", + "revision": 0, + "source": "hackage", + "src_sha256": "d840ac83f265b0cfa2a678f8ec78627eb50cf9be2f067c52c8a4239c29b71a35", + "version": "1.3.1" + }, + { + "cabal_sha256": "233cbcdda6c2698932bb391ce0935fb44f80c115621ee815a21ed33ac8ede422", + "flags": [ + "-debug" + ], + "package": "unordered-containers", + "revision": 4, + "source": "hackage", + "src_sha256": "d9cfb287cf00592d39dc9c3cac8b99627ea08f2c01798e70130fc39f7c90f11d", + "version": "0.2.20" + }, + { + "cabal_sha256": "79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f", + "flags": [], + "package": "utf8-string", + "revision": 0, + "source": "hackage", + "src_sha256": "ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a", + "version": "1.0.2" + }, + { + "cabal_sha256": "03c8f06de478e07ad6fde95984c9206920106d0d8432ecb7ab825ef108d45382", + "flags": [ + "-cloud", + "-embed-files", + "-portable", + "+threaded" + ], + "package": "shake", + "revision": 0, + "source": "hackage", + "src_sha256": "6384e33a26a2590bf33719e88881076b899ac4b5340c1c9271e4caa37e9d6535", + "version": "0.19.8" + }, + { + "cabal_sha256": null, + "flags": [ + "-selftest", + "+threaded" + ], + "package": "hadrian", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "0.1.0.0" + } + ] +} diff --git a/srcpkgs/ghc/patches/Disable-unboxed-arrays.patch b/srcpkgs/ghc/patches/Disable-unboxed-arrays.patch deleted file mode 100644 index 46c2cf1091d..00000000000 --- a/srcpkgs/ghc/patches/Disable-unboxed-arrays.patch +++ /dev/null @@ -1,33 +0,0 @@ -From c74cdea9e6804d10660035700136975cfd39da8d Mon Sep 17 00:00:00 2001 -From: Peter Trommler -Date: Fri, 31 Dec 2021 18:20:45 +0100 -Subject: [PATCH] Disable unboxed arrays on big-endian - -Unboxed arrays are broken on big-endian architectures, see -https://gitlab.haskell.org/ghc/ghc/-/issues/16998 for details. -This patch makes the use of unboxed arrays conditional on -little-endian architecture. - -Fixes #673 - -diff --git a/libraries/containers/containers/include/containers.h b/libraries/containers/containers/include/containers.h -index cd201ca..fc2a0e8 100644 ---- a/libraries/containers/containers/include/containers.h -+++ b/libraries/containers/containers/include/containers.h -@@ -35,7 +35,13 @@ - - #ifdef __GLASGOW_HASKELL__ - # define USE_ST_MONAD 1 -+#ifndef WORDS_BIGENDIAN -+/* -+ * Unboxed arrays are broken on big-endian architectures. -+ * See https://gitlab.haskell.org/ghc/ghc/-/issues/16998 -+ */ - # define USE_UNBOXED_ARRAYS 1 - #endif -+#endif - - #endif --- -2.31.1 - diff --git a/srcpkgs/ghc/patches/fix-build-sphinx7.patch b/srcpkgs/ghc/patches/fix-build-sphinx7.patch deleted file mode 100644 index 8d256945ad0..00000000000 --- a/srcpkgs/ghc/patches/fix-build-sphinx7.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 00dc51060881df81258ba3b3bdf447294618a4de Mon Sep 17 00:00:00 2001 -From: Matthew Pickering -Date: Tue, 3 Jan 2023 15:56:37 +0000 -Subject: [PATCH] sphinx: Use modern syntax for extlinks - -This fixes the following build error: - -``` - Command line: /opt/homebrew/opt/sphinx-doc/bin/sphinx-build -b man -d /private/tmp/extra-dir-55768274273/.doctrees-man -n -w /private/tmp/extra-dir-55768274273/.log docs/users_guide /private/tmp/extra-dir-55768274273 - ===> Command failed with error code: 2 - - Exception occurred: - File "/opt/homebrew/Cellar/sphinx-doc/6.0.0/libexec/lib/python3.11/site-packages/sphinx/ext/extlinks.py", line 101, in role - title = caption % part - ~~~~~~~~^~~~~~ - TypeError: not all arguments converted during string formatting -``` - -I tested on Sphinx-5.1.1 and Sphinx-6.0.0 - -Thanks for sterni for providing instructions about how to test using -sphinx-6.0.0. - -Fixes #22690 ---- - docs/users_guide/ghc_config.py.in | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/docs/users_guide/ghc_config.py.in b/docs/users_guide/ghc_config.py.in -index dcc7fbaef624..c9888a13adc5 100644 ---- a/docs/users_guide/ghc_config.py.in -+++ b/docs/users_guide/ghc_config.py.in -@@ -1,6 +1,6 @@ - extlinks = { -- 'ghc-ticket': ('https://gitlab.haskell.org/ghc/ghc/issues/%s', '#'), -- 'ghc-wiki': ('https://gitlab.haskell.org/ghc/ghc/wikis/%s', '#'), -+ 'ghc-ticket': ('https://gitlab.haskell.org/ghc/ghc/issues/%s', '%s'), -+ 'ghc-wiki': ('https://gitlab.haskell.org/ghc/ghc/wikis/%s', '#%s'), - } - - libs_base_uri = '../libraries' -From 52d701b31dc4427b7e321a04be3f5f13a5fc271e Mon Sep 17 00:00:00 2001 -From: "mimi.vx" -Date: Wed, 24 May 2023 12:42:15 +0000 -Subject: [PATCH] Fix for Sphinx 7 removed style key - -Fixes https://gitlab.haskell.org/ghc/ghc/-/issues/23444 ---- - docs/users_guide/rtd-theme/layout.html | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/docs/users_guide/rtd-theme/layout.html b/docs/users_guide/rtd-theme/layout.html -index 2a61142514a..7ffeff7befc 100644 ---- a/docs/users_guide/rtd-theme/layout.html -+++ b/docs/users_guide/rtd-theme/layout.html -@@ -64,7 +64,7 @@ - {%- endif %} - - {# CSS #} -- -+ - - {%- for css in css_files %} - {%- if css|attr("rel") %} --- -GitLab diff --git a/srcpkgs/ghc/patches/libffi-autogen.patch b/srcpkgs/ghc/patches/libffi-autogen.patch deleted file mode 100644 index 7b08c65a39b..00000000000 --- a/srcpkgs/ghc/patches/libffi-autogen.patch +++ /dev/null @@ -1,25 +0,0 @@ -Since we replace bundled tarball with our own and it's a git -snapshot, it is necessary to generate the build system ourselves - -Source: @q66 - ---- a/libffi/ghc.mk -+++ b/libffi/ghc.mk -@@ -58,16 +58,7 @@ $(libffi_STAMP_CONFIGURE): $(TOUCH_DEP) - $(CP) "$(TOP)/config.guess" libffi/build/config.guess - $(CP) "$(TOP)/config.sub" libffi/build/config.sub - --# We have to fake a non-working ln for configure, so that the fallback --# option (cp -p) gets used instead. Otherwise the libffi build system --# will use cygwin symbolic links which cannot be read by mingw gcc. -- chmod +x libffi/ln -- -- # We need to use -MMD rather than -MD, as otherwise we get paths -- # like c:/... in the dependency files on Windows, and the extra -- # colons break make -- mv libffi/build/Makefile.in libffi/build/Makefile.in.orig -- sed "s/-MD/-MMD/" < libffi/build/Makefile.in.orig > libffi/build/Makefile.in -+ cd libffi && cd build && "$(SHELL)" ./autogen.sh - - # We attempt to specify the installation directory below with --libdir, - # but libffi installs into 'toolexeclibdir' instead, which may differ diff --git a/srcpkgs/ghc/patches/ppc64-be-elfv2.patch b/srcpkgs/ghc/patches/ppc64-be-elfv2.patch deleted file mode 100644 index df1a0bfe15b..00000000000 --- a/srcpkgs/ghc/patches/ppc64-be-elfv2.patch +++ /dev/null @@ -1,168 +0,0 @@ -From 587edc0d9786aff3c7a4728ba941f6a993e59bdc Mon Sep 17 00:00:00 2001 -From: q66 -Date: Thu, 28 Apr 2022 00:48:04 +0200 -Subject: [PATCH] fix up runtime for ppc64 BE ELFv2 + ensure it's used - ---- - configure | 2 +- - libraries/ghci/GHCi/InfoTable.hsc | 36 ++++++++++++------------------- - m4/fptools.m4 | 2 +- - rts/AdjustorAsm.S | 2 +- - rts/StgCRun.c | 4 ++-- - rts/StgCRunAsm.S | 2 +- - rts/adjustor/NativeIA64.c | 2 +- - rts/adjustor/NativePowerPC.c | 2 +- - 8 files changed, 22 insertions(+), 30 deletions(-) - -diff --git a/configure b/configure -index 8310e6f..eac1124 100755 ---- a/configure -+++ b/configure -@@ -10508,7 +10508,7 @@ printf "%s\n" "no" >&6; } - test -z "$2" || eval "$2=ArchPPC" - ;; - powerpc64) -- test -z "$2" || eval "$2=\"ArchPPC_64 {ppc_64ABI = ELF_V1}\"" -+ test -z "$2" || eval "$2=\"ArchPPC_64 {ppc_64ABI = ELF_V2}\"" - ;; - powerpc64le) - test -z "$2" || eval "$2=\"ArchPPC_64 {ppc_64ABI = ELF_V2}\"" -diff --git a/libraries/ghci/GHCi/InfoTable.hsc b/libraries/ghci/GHCi/InfoTable.hsc -index ad4eb4d..e4f1c0c 100644 ---- a/libraries/ghci/GHCi/InfoTable.hsc -+++ b/libraries/ghci/GHCi/InfoTable.hsc -@@ -231,30 +231,22 @@ mkJumpToAddr' platform a = case platform of - , fromIntegral w64 - , fromIntegral (w64 `shiftR` 32) ] - ArchPPC64 -> -- -- We use the compiler's register r12 to read the function -- -- descriptor and the linker's register r11 as a temporary -- -- register to hold the function entry point. -- -- In the medium code model the function descriptor -- -- is located in the first two gigabytes, i.e. the address -- -- of the function pointer is a non-negative 32 bit number. -- -- 0x0EADBEEF stands for the address of the function pointer: -- -- 0: 3d 80 0e ad lis r12,0x0EAD -- -- 4: 61 8c be ef ori r12,r12,0xBEEF -- -- 8: e9 6c 00 00 ld r11,0(r12) -- -- c: e8 4c 00 08 ld r2,8(r12) -- -- 10: 7d 69 03 a6 mtctr r11 -- -- 14: e9 6c 00 10 ld r11,16(r12) -- -- 18: 4e 80 04 20 bctr -- let w32 = fromIntegral (funPtrToInt a) -+ -- The ABI requires r12 to point to the function's entry point. -+ -- We use the medium code model where code resides in the first -+ -- two gigabytes, so loading a non-negative32 bit address -+ -- with lis followed by ori is fine. -+ -- 0x0EADBEEF stands for the address: -+ -- 3D800EAD lis r12,0x0EAD -+ -- 618CBEEF ori r12,r12,0xBEEF -+ -- 7D8903A6 mtctr r12 -+ -- 4E800420 bctr -+ -+ let w32 = fromIntegral (funPtrToInt a) - hi16 x = (x `shiftR` 16) .&. 0xFFFF - lo16 x = x .&. 0xFFFF -- in Right [ 0x3D800000 .|. hi16 w32, -- 0x618C0000 .|. lo16 w32, -- 0xE96C0000, -- 0xE84C0008, -- 0x7D6903A6, -- 0xE96C0010, -- 0x4E800420] -+ in Right [ 0x3D800000 .|. hi16 w32, -+ 0x618C0000 .|. lo16 w32, -+ 0x7D8903A6, 0x4E800420 ] - - ArchPPC64LE -> - -- The ABI requires r12 to point to the function's entry point. -diff --git a/m4/fptools.m4 b/m4/fptools.m4 -index 8c6c9b7..eb25c37 100644 ---- a/m4/fptools.m4 -+++ b/m4/fptools.m4 -@@ -201,7 +201,7 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS], - test -z "[$]2" || eval "[$]2=ArchPPC" - ;; - powerpc64) -- test -z "[$]2" || eval "[$]2=\"ArchPPC_64 {ppc_64ABI = ELF_V1}\"" -+ test -z "[$]2" || eval "[$]2=\"ArchPPC_64 {ppc_64ABI = ELF_V2}\"" - ;; - powerpc64le) - test -z "[$]2" || eval "[$]2=\"ArchPPC_64 {ppc_64ABI = ELF_V2}\"" -diff --git a/rts/AdjustorAsm.S b/rts/AdjustorAsm.S -index 2795b83..63cfe91 100644 ---- a/rts/AdjustorAsm.S -+++ b/rts/AdjustorAsm.S -@@ -2,7 +2,7 @@ - - /* ******************************** PowerPC ******************************** */ - --#if defined(powerpc_HOST_ARCH) || defined(powerpc64_HOST_ARCH) -+#if defined(powerpc_HOST_ARCH) || (defined(powerpc64_HOST_ARCH) && (_CALL_ELF != 2)) - #if !(defined(powerpc_HOST_ARCH) && defined(linux_HOST_OS)) - /* The following code applies, with some differences, - to all powerpc platforms except for powerpc32-linux, -diff --git a/rts/StgCRun.c b/rts/StgCRun.c -index f43227a..927d44a 100644 ---- a/rts/StgCRun.c -+++ b/rts/StgCRun.c -@@ -724,7 +724,7 @@ StgRunIsImplementedInAssembler(void) - Everything is in assembler, so we don't have to deal with GCC... - -------------------------------------------------------------------------- */ - --#if defined(powerpc64_HOST_ARCH) -+#if defined(powerpc64_HOST_ARCH) && (_CALL_ELF != 2) - /* 64-bit PowerPC ELF ABI 1.9 - * - * Stack frame organization (see Figure 3-17, ELF ABI 1.9, p 14) -@@ -792,7 +792,7 @@ StgRunIsImplementedInAssembler(void) - - #endif - --#if defined(powerpc64le_HOST_ARCH) -+#if defined(powerpc64le_HOST_ARCH) || (defined(powerpc64_HOST_ARCH) && (_CALL_ELF == 2)) - /* ----------------------------------------------------------------------------- - PowerPC 64 little endian architecture - -diff --git a/rts/StgCRunAsm.S b/rts/StgCRunAsm.S -index 60f1bf9..c6794d7 100644 ---- a/rts/StgCRunAsm.S -+++ b/rts/StgCRunAsm.S -@@ -5,7 +5,7 @@ - * then functions StgRun/StgReturn are implemented in file StgCRun.c */ - #if !defined(USE_MINIINTERPRETER) - --#if defined(powerpc64le_HOST_ARCH) -+#if defined(powerpc64le_HOST_ARCH) || (defined(powerpc64_HOST_ARCH) && (_CALL_ELF == 2)) - # if defined(linux_HOST_OS) - /* 64-bit PowerPC ELF V2 ABI Revision 1.4 - * -diff --git a/rts/adjustor/NativeIA64.c b/rts/adjustor/NativeIA64.c -index 9fd1991..816b3ef 100644 ---- a/rts/adjustor/NativeIA64.c -+++ b/rts/adjustor/NativeIA64.c -@@ -39,7 +39,7 @@ void* - createAdjustor(int cconv, StgStablePtr hptr, - StgFunPtr wptr, - char *typeString --#if !defined(powerpc_HOST_ARCH) && !defined(powerpc64_HOST_ARCH) && !defined(x86_64_HOST_ARCH) -+#if !defined(powerpc_HOST_ARCH) && (!defined(powerpc64_HOST_ARCH) || (_CALL_ELF == 2)) && !defined(x86_64_HOST_ARCH) - STG_UNUSED - #endif - ) -diff --git a/rts/adjustor/NativePowerPC.c b/rts/adjustor/NativePowerPC.c -index 2e5d605..caef5d3 100644 ---- a/rts/adjustor/NativePowerPC.c -+++ b/rts/adjustor/NativePowerPC.c -@@ -29,7 +29,7 @@ __asm__("obscure_ccall_ret_code:\n\t" - extern void obscure_ccall_ret_code(void); - #endif /* defined(linux_HOST_OS) */ - --#if defined(powerpc_HOST_ARCH) || defined(powerpc64_HOST_ARCH) -+#if defined(powerpc_HOST_ARCH) || (defined(powerpc64_HOST_ARCH) && (_CALL_ELF != 2)) - #if !(defined(powerpc_HOST_ARCH) && defined(linux_HOST_OS)) - - /* !!! !!! WARNING: !!! !!! --- -2.35.1 - diff --git a/srcpkgs/ghc/template b/srcpkgs/ghc/template index 1f52ca7b438..99142cd088d 100644 --- a/srcpkgs/ghc/template +++ b/srcpkgs/ghc/template @@ -1,38 +1,28 @@ # Template file for 'ghc' pkgname=ghc # Keep this synchronized with http://www.stackage.org/lts -version=9.0.2 -revision=2 -build_style=gnu-configure -hostmakedepends="automake docbook-xsl ghc-bin libxslt libnuma-devel - ncurses-devel python3-Sphinx python3-setuptools" -makedepends="libnuma-devel" -depends="perl gcc libffi-devel gmp-devel libnuma-devel" -short_desc="Glorious Haskell Compiler" +version=9.8.4 +revision=1 +build_helper="haskell" +_configure_args="--prefix=/usr" +_hadrian_args="--prefix=/usr" +hostmakedepends="ghc-bin python3 tar xz automake" +makedepends="libffi-devel" +depends="gcc libffi-devel gmp-devel libnuma-devel" +short_desc="Glasgow Haskell Compiler" maintainer="Orphaned " license="BSD-3-Clause" homepage="http://www.haskell.org/ghc/" -distfiles="http://www.haskell.org/ghc/dist/${version%[!0-9]}/${pkgname}-${version%[!0-9]}-src.tar.xz" -checksum=140e42b96346322d1a39eb17602bcdc76e292028ad4a69286b230bab188a9197 +distfiles="http://www.haskell.org/ghc/dist/${version}/${pkgname}-${version}-src.tar.xz" +checksum=17e8188f3c8a5c2f73fb4e35d01032e8dc258835ec876d52c8ad8ee3d24b2fc5 +_hadrian_cmd="hadrian/bootstrap/_build/bin/hadrian" nocross=yes # this is conditionally unset for cross bindist -nodebug=yes # work around assembler error "Fatal error: duplicate .debug_line sections" -_bindir="/usr/lib/${pkgname}-${version}/bin" -nopie_files=" - ${_bindir}/ghc - ${_bindir}/ghc-iserv - ${_bindir}/ghc-iserv-dyn - ${_bindir}/ghc-iserv-prof - ${_bindir}/ghc-pkg - ${_bindir}/haddock - ${_bindir}/hp2ps - ${_bindir}/hpc - ${_bindir}/hsc2hs - ${_bindir}/runghc - ${_bindir}/unlit -" +nopie=yes +_ghc_ver="${version//./_}" -build_options="bindist" +build_options="bindist stage3" desc_option_bindist="Create a binary distribution" +desc_option_stage3="Build a stage3 compiler" # it is not possible to cross-compile an entire ghc distribution as # some components rely on stage2 binaries being runnable on the host @@ -40,114 +30,113 @@ desc_option_bindist="Create a binary distribution" # use them to compile proper bindists on newly bootstrapped targets if [ -z "$build_option_bindist" ]; then # final package builds use system libffi as well as gmp and ncurses - configure_args=" --with-system-libffi" - makedepends+=" libffi-devel ncurses-devel gmp-devel" + _configure_args+=" --with-system-libffi" + + # --hash-unit-ids is needed because it only became part of the + # release flavour in later GHC versions. + _hadrian_args+=" --flavour=release --hash-unit-ids --docs=no-sphinx-pdfs" + + hostmakedepends+=" python3-Sphinx docbook-xsl" + makedepends+=" ncurses-devel gmp-devel libnuma-devel" elif [ -z "$CROSS_BUILD" ]; then - # native bindist builds use gmp and ncurses, but builtin libffi + # native bindist builds use system libffi as well as gmp and ncurses + _configure_args+=" --with-system-libffi --disable-numa" + _hadrian_args+=" --flavour=quick --docs=none" + makedepends+=" ncurses-devel gmp-devel" elif [ "${XBPS_MACHINE%-*}" != "${XBPS_TARGET_MACHINE%-*}" ]; then # ghc's cross mode only works when the actual target arch differs # i.e. cross-compiling to same arch but different libc does not work unset nocross - # host must equal build and target must be set when cross-compiling - configure_args+=" --host=${XBPS_TRIPLET} --target=${XBPS_CROSS_TRIPLET}" -fi - -case "$XBPS_TARGET_MACHINE" in -aarch64*) - # GHC uses LLVM to generate code on aarch64 - hostmakedepends+=" llvm17-devel" - depends+=" llvm17-devel" - ;; -esac - -# Recent safe to use tarball -# GHC's bundled tarball is from 2017, buggy on some archs -_ffi_rev=4d6d2866ae43e55325e8ee96561221804602cd7a - -if [ "$build_option_bindist" ]; then - # Required to make the binary distribution tarball - hostmakedepends+=" tar xz libtool libltdl-devel" - # Fetch a safe libffi tarball - distfiles+=" https://github.com/libffi/libffi/archive/${_ffi_rev}.tar.gz>libffi-${_ffi_rev}.tar.gz" - checksum+=" f7a17fa61261942e93450ec52272b5f09d8f42cfffd147867587f969ee01b739" - skip_extraction+=" libffi-${_ffi_rev}.tar.gz" + _configure_args+=" --with-system-libffi --disable-numa" + _configure_args+=" --target=${XBPS_CROSS_TRIPLET} --enable-unregistered" + _hadrian_args+=" --flavour=quick --docs=none --bignum=native" fi post_extract() { - [ "$build_option_bindist" ] || return 0 + if [ -e ${FILESDIR}/plan-bootstrap-${_ghc_ver}.json ]; then + cp "${FILESDIR}/plan-bootstrap-${_ghc_ver}.json" hadrian/bootstrap/ + fi +} - # update libffi for all bindists - rm -f libffi-tarballs/libffi-*.tar.gz - cp ${XBPS_SRCDISTDIR}/${pkgname}-${version}/libffi-${_ffi_rev}.tar.gz \ - libffi-tarballs - - [ "$CROSS_BUILD" ] || return 0 - - # create build config for cross bindists - local flav="quick" - - echo "BuildFlavour = ${flav}" >> mk/build.mk - cat mk/flavours/${flav}.mk >> mk/build.mk - - # gmp segfaults when cross-built - echo "INTEGER_LIBRARY = integer-simple" >> mk/build.mk - # otherwise needs ncurses for target - echo "WITH_TERMINFO = NO" >> mk/build.mk - # cannot be cross-compiled - echo "HADDOCK_DOCS = NO" >> mk/build.mk - # just wastes time - echo "BUILD_SPHINX_HTML = NO" >> mk/build.mk - echo "BUILD_SPHINX_PDF = NO" >> mk/build.mk - echo "BUILD_MAN = NO" >> mk/build.mk +do_patch() { + if [ "$build_option_stage3" ]; then + sed -i 's/finalStage = Stage2/finalStage = Stage3/' hadrian/src/UserSettings.hs + fi } pre_configure() { - # stage0 and stage1 are built for build/host (which are the - # same in ghc) and stage2 is built for target (when cross) - export CONF_CC_OPTS_STAGE0=$CFLAGS_FOR_BUILD - export CONF_CC_OPTS_STAGE1=$CFLAGS_FOR_BUILD - export CONF_CC_OPTS_STAGE2=$CFLAGS - export CONF_GCC_LINKER_OPTS_STAGE0=$LDFLAGS_FOR_BUILD - export CONF_GCC_LINKER_OPTS_STAGE1=$LDFLAGS_FOR_BUILD - export CONF_GCC_LINKER_OPTS_STAGE2=$LDFLAGS - export CONF_CPP_OPTS_STAGE0=$CPPFLAGS_FOR_BUILD - export CONF_CPP_OPTS_STAGE1=$CPPFLAGS_FOR_BUILD - export CONF_CPP_OPTS_STAGE2=$CPPFLAGS + if [ ! -e hadrian/bootstrap/plan-bootstrap-${_ghc_ver}.json ]; then + # To generate a bootstrap plan for a new ghc version ensure a + # cabal binary is available, run this, then move the plan to + # ${FILESDIR} + cabal update + cd hadrian + cabal build --flags=-selftest --dry-run hadrian + cp dist-newstyle/cache/plan.json bootstrap/plan-${_ghc_ver}.json + cd bootstrap + cabal build hadrian-bootstrap-gen --allow-newer + cabal run -v0 hadrian-bootstrap-gen -- "plan-${_ghc_ver}.json" \ + | python3 -m json.tool > "plan-bootstrap-${_ghc_ver}.json" + msg_normal "Please install hadrian/bootstrap/plan-bootstrap-${_ghc_ver}.json in ${FILESDIR}\n" + exit 1 + else + cd hadrian/bootstrap + fi - autoreconf -fi + ./bootstrap.py -d plan-bootstrap-${_ghc_ver}.json } -post_install() { - sed -i 's#/usr/lib/ccache/bin/##g' ${DESTDIR}/usr/lib/ghc-${version%[!0-9]}/settings - vlicense LICENSE +do_configure() { + # GNU binutils ld does not work on ARM with haskell, see + # https://sourceware.org/bugzilla/show_bug.cgi?id=16177 + # ld.gold works but was removed from binutils in 2.44 + # So we set LD to CC and the configure script will set -fuse-ld to lld + export LD="$CC" + ./configure ${_configure_args} +} - local arch dest +do_build() { + ${_hadrian_cmd} ${makejobs} ${_hadrian_args} +} + +do_install() { + local arch targ if [ "$CROSS_BUILD" ]; then arch=${XBPS_CROSS_TRIPLET%%-*} + targ=ghc-${version}-${XBPS_CROSS_TRIPLET} else arch=${XBPS_TRIPLET%%-*} - fi - if [ "$XBPS_TARGET_LIBC" = "musl" ]; then - dest=ghc-${version}-${arch}-void-linux-musl.tar.xz - else - dest=ghc-${version}-${arch}-void-linux.tar.xz + targ=ghc-${version}-${arch}-unknown-linux fi if [ "$build_option_bindist" ]; then msg_normal "Creating binary distribution for ${XBPS_TARGET_MACHINE}...\n" - make ${makejobs} binary-dist + ${_hadrian_cmd} ${_hadrian_args} binary-dist mkdir -p ${XBPS_SRCDISTDIR}/distfiles - mv ghc-${version}-${arch}-unknown-linux.tar.xz ${dest} - install -m 0644 ${dest} ${XBPS_SRCDISTDIR}/distfiles + install -m 0644 _build/bindist/${targ}.tar.xz ${XBPS_SRCDISTDIR}/distfiles msg_normal "Installed in ${XBPS_SRCDISTDIR}/distfiles\n" exit 1 + else + DESTDIR=${DESTDIR} ${_hadrian_cmd} ${_hadrian_args} install fi } +post_install() { + vlicense LICENSE +} + ghc-doc_package() { - short_desc+=" -- documentation" + short_desc+=" - documentation" pkg_install() { vmove usr/share/doc } } + +ghc-devel_package() { + short_desc+=" - development files" + pkg_install() { + cd ${DESTDIR} + find usr/lib \( -type f -o -type l \) \( -name "*.p_*" -o -name "lib*_p.a" \) | while read f; do vmove "$f"; done + } +} diff --git a/srcpkgs/git-annex/files/stack.yaml b/srcpkgs/git-annex/files/stack.yaml deleted file mode 100644 index acc592054f7..00000000000 --- a/srcpkgs/git-annex/files/stack.yaml +++ /dev/null @@ -1,30 +0,0 @@ -flags: - git-annex: - production: true - assistant: true - pairing: true - torrentparser: true - magicmime: false - dbus: false - debuglocks: false - benchmark: true - gitlfs: true -packages: - - '.' -resolver: lts-19.0 -extra-deps: - - IfElse-0.85 - - aws-0.22 - - bloomfilter-2.0.1.0 - - git-lfs-1.2.0 - - http-client-restricted-0.0.4 - - network-multicast-0.3.2 - - sandi-0.5 - - torrent-10000.1.1 - - base16-bytestring-0.1.1.7 - - base64-bytestring-1.0.0.3 - - bencode-0.6.1.1 - - aeson-1.5.6.0@sha256:5003bb6fd260d2e2d5a51dee2bf5c8e8f29e4e0e0288fef805c22dcc80ecab06,6788 - - http-client-0.7.11@sha256:3f59ac8ffe2a3768846cdda040a0d1df2a413960529ba61c839861c948871967,5756 -explicit-setup-deps: - git-annex: true diff --git a/srcpkgs/git-annex/patches/basement.patch b/srcpkgs/git-annex/patches/basement.patch new file mode 100644 index 00000000000..e934f8e67b2 --- /dev/null +++ b/srcpkgs/git-annex/patches/basement.patch @@ -0,0 +1,242 @@ +From 38be2c93acb6f459d24ed6c626981c35ccf44095 Mon Sep 17 00:00:00 2001 +From: Sylvain Henry +Date: Thu, 16 Feb 2023 15:40:45 +0100 +Subject: [PATCH] Fix build on 32-bit architectures + +--- + basement/Basement/Bits.hs | 4 ++++ + basement/Basement/From.hs | 24 ----------------------- + basement/Basement/Numerical/Additive.hs | 4 ++++ + basement/Basement/Numerical/Conversion.hs | 20 +++++++++++++++++++ + basement/Basement/PrimType.hs | 6 +++++- + basement/Basement/Types/OffsetSize.hs | 22 +++++++++++++++++++-- + 6 files changed, 53 insertions(+), 27 deletions(-) + +diff --git a/basement/Basement/Bits.hs b/basement/Basement/Bits.hs +index 7eeea0f5..24520ed7 100644 +--- a/basement/Basement/Bits.hs ++++ b/basement/Basement/Bits.hs +@@ -54,8 +54,12 @@ import GHC.Int + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | operation over finite bits + class FiniteBitsOps bits where +diff --git a/basement/Basement/From.hs b/basement/Basement/From.hs +index 7bbe141c..80014b3e 100644 +--- a/basement/Basement/From.hs ++++ b/basement/Basement/From.hs +@@ -272,23 +272,11 @@ instance (NatWithinBound (CountOf ty) n, KnownNat n, PrimType ty) + tryFrom = BlockN.toBlockN . UArray.toBlock . BoxArray.mapToUnboxed id + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn64 n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn64 n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn64 n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance From (Zn64 n) Word64 where + from = unZn64 + instance From (Zn64 n) Word128 where +@@ -297,23 +285,11 @@ instance From (Zn64 n) Word256 where + from = from . unZn64 + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word64 n) => From (Zn n) Word64 where + from = naturalToWord64 . unZn + instance (KnownNat n, NatWithinBound Word128 n) => From (Zn n) Word128 where +diff --git a/basement/Basement/Numerical/Additive.hs b/basement/Basement/Numerical/Additive.hs +index d0dfb973..8ab65aa0 100644 +--- a/basement/Basement/Numerical/Additive.hs ++++ b/basement/Basement/Numerical/Additive.hs +@@ -30,8 +30,12 @@ import qualified Basement.Types.Word128 as Word128 + import qualified Basement.Types.Word256 as Word256 + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | Represent class of things that can be added together, + -- contains a neutral element and is commutative. +diff --git a/basement/Basement/Numerical/Conversion.hs b/basement/Basement/Numerical/Conversion.hs +index db502c07..fddc8232 100644 +--- a/basement/Basement/Numerical/Conversion.hs ++++ b/basement/Basement/Numerical/Conversion.hs +@@ -26,8 +26,12 @@ import GHC.Word + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + intToInt64 :: Int -> Int64 + #if WORD_SIZE_IN_BITS == 64 +@@ -96,11 +100,22 @@ int64ToWord64 (I64# i) = W64# (int64ToWord64# i) + #endif + + #if WORD_SIZE_IN_BITS == 64 ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord# :: Word64# -> Word# ++word64ToWord# i = word64ToWord# i ++#else + word64ToWord# :: Word# -> Word# + word64ToWord# i = i ++#endif + {-# INLINE word64ToWord# #-} + #endif + ++#if WORD_SIZE_IN_BITS < 64 ++word64ToWord32# :: Word64# -> Word32# ++word64ToWord32# i = wordToWord32# (word64ToWord# i) ++{-# INLINE word64ToWord32# #-} ++#endif ++ + -- | 2 Word32s + data Word32x2 = Word32x2 {-# UNPACK #-} !Word32 + {-# UNPACK #-} !Word32 +@@ -113,9 +128,14 @@ word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# (G + word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# w64 32#))) (W32# (wordToWord32# w64)) + #endif + #else ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord32s :: Word64 -> Word32x2 ++word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord32# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord32# w64)) ++#else + word64ToWord32s :: Word64 -> Word32x2 + word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord# w64)) + #endif ++#endif + + wordToChar :: Word -> Char + wordToChar (W# word) = C# (chr# (word2Int# word)) +diff --git a/basement/Basement/PrimType.hs b/basement/Basement/PrimType.hs +index f8ca2926..a888ec91 100644 +--- a/basement/Basement/PrimType.hs ++++ b/basement/Basement/PrimType.hs +@@ -54,7 +54,11 @@ import Basement.Nat + import qualified Prelude (quot) + + #if WORD_SIZE_IN_BITS < 64 +-import GHC.IntWord64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else ++import GHC.IntWord64 ++#endif + #endif + + #ifdef FOUNDATION_BOUNDS_CHECK +diff --git a/basement/Basement/Types/OffsetSize.hs b/basement/Basement/Types/OffsetSize.hs +index cd944927..1ea80dad 100644 +--- a/basement/Basement/Types/OffsetSize.hs ++++ b/basement/Basement/Types/OffsetSize.hs +@@ -70,8 +70,12 @@ import Data.List (foldl') + import qualified Prelude + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | File size in bytes + newtype FileSize = FileSize Word64 +@@ -225,20 +229,26 @@ countOfRoundUp alignment (CountOf n) = CountOf ((n + (alignment-1)) .&. compleme + + csizeOfSize :: CountOf Word8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfSize (CountOf (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfSize (CountOf (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfSize (CountOf (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +- + #else + csizeOfSize (CountOf (I# sz)) = CSize (W64# (int2Word# sz)) +- + #endif + #endif + + csizeOfOffset :: Offset8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfOffset (Offset (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfOffset (Offset (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfOffset (Offset (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +@@ -250,7 +260,11 @@ csizeOfOffset (Offset (I# sz)) = CSize (W64# (int2Word# sz)) + sizeOfCSSize :: CSsize -> CountOf Word8 + sizeOfCSSize (CSsize (-1)) = error "invalid size: CSSize is -1" + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# (int32ToInt# sz)) ++#else + sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# sz) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# (int64ToInt# sz)) +@@ -261,7 +275,11 @@ sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# sz) + + sizeOfCSize :: CSize -> CountOf Word8 + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# (word32ToWord# sz))) ++#else + sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSize (CSize (W64# sz)) = CountOf (I# (word2Int# (word64ToWord# sz))) diff --git a/srcpkgs/git-annex/patches/cborg.patch b/srcpkgs/git-annex/patches/cborg.patch new file mode 100644 index 00000000000..b44ba514458 --- /dev/null +++ b/srcpkgs/git-annex/patches/cborg.patch @@ -0,0 +1,212 @@ +commit 9d1418bb8b38cb9a438d7f18835b1ef7ef12b234 +Author: amesgen +Date: Sun Sep 10 20:03:40 2023 +0200 + + Fix compilation and support GHC >=9.2 on 32bit + +diff --git a/cborg/src/Codec/CBOR/Decoding.hs b/cborg/src/Codec/CBOR/Decoding.hs +index a7d774c..bf68e68 100644 +--- a/cborg/src/Codec/CBOR/Decoding.hs ++++ b/cborg/src/Codec/CBOR/Decoding.hs +@@ -315,11 +315,16 @@ getDecodeAction (Decoder k) = k (\x -> return (Done x)) + toInt8 :: Int# -> Int8 + toInt16 :: Int# -> Int16 + toInt32 :: Int# -> Int32 +-toInt64 :: Int# -> Int64 + toWord8 :: Word# -> Word8 + toWord16 :: Word# -> Word16 + toWord32 :: Word# -> Word32 ++#if defined(ARCH_64bit) ++toInt64 :: Int# -> Int64 + toWord64 :: Word# -> Word64 ++#else ++toInt64 :: Int64# -> Int64 ++toWord64 :: Word64# -> Word64 ++#endif + #if MIN_VERSION_ghc_prim(0,8,0) + toInt8 n = I8# (intToInt8# n) + toInt16 n = I16# (intToInt16# n) +@@ -327,8 +332,7 @@ toInt32 n = I32# (intToInt32# n) + toWord8 n = W8# (wordToWord8# n) + toWord16 n = W16# (wordToWord16# n) + toWord32 n = W32# (wordToWord32# n) +-#if WORD_SIZE_IN_BITS == 64 +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && defined(ARCH_64bit) + toInt64 n = I64# (intToInt64# n) + toWord64 n = W64# (wordToWord64# n) + #else +@@ -336,10 +340,6 @@ toInt64 n = I64# n + toWord64 n = W64# n + #endif + #else +-toInt64 n = I64# (intToInt64# n) +-toWord64 n = W64# (wordToWord64# n) +-#endif +-#else + toInt8 n = I8# n + toInt16 n = I16# n + toInt32 n = I32# n +@@ -986,7 +986,7 @@ type ByteOffset = Int64 + -- @since 0.2.2.0 + peekByteOffset :: Decoder s ByteOffset + peekByteOffset = Decoder (\k -> return (PeekByteOffset (\off# -> k (I64# +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (intToInt64# off#) + #else + off# +diff --git a/cborg/src/Codec/CBOR/Magic.hs b/cborg/src/Codec/CBOR/Magic.hs +index cdeb455..bfae638 100644 +--- a/cborg/src/Codec/CBOR/Magic.hs ++++ b/cborg/src/Codec/CBOR/Magic.hs +@@ -120,7 +120,7 @@ import qualified Numeric.Half as Half + import Data.Bits ((.|.), unsafeShiftL) + #endif + +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 (wordToWord64#, word64ToWord#, + intToInt64#, int64ToInt#, + leWord64#, ltWord64#, word64ToInt64#) +@@ -173,7 +173,7 @@ grabWord64 (Ptr ip#) = W64# (wordToWord64# (byteSwap# (word64ToWord# (indexWord6 + grabWord64 (Ptr ip#) = W64# (byteSwap# (indexWord64OffAddr# ip# 0#)) + #endif + #else +-grabWord64 (Ptr ip#) = W64# (byteSwap64# (word64ToWord# (indexWord64OffAddr# ip# 0#))) ++grabWord64 (Ptr ip#) = W64# (byteSwap64# (indexWord64OffAddr# ip# 0#)) + #endif + + #elif defined(MEM_UNALIGNED_OPS) && \ +@@ -484,7 +484,7 @@ word16ToInt (W16# w#) = I# (word2Int# (word16ToWord# w#)) + word32ToInt (W32# w#) = I# (word2Int# (word32ToWord# w#)) + #else + word32ToInt (W32# w#) = +- case isTrue# (w# `ltWord#` 0x80000000##) of ++ case isTrue# (word32ToWord# w# `ltWord#` 0x80000000##) of + True -> Just (I# (word2Int# (word32ToWord# w#))) + False -> Nothing + #endif +@@ -530,6 +530,19 @@ word64ToInt (W64# w#) = + {-# INLINE word64ToInt #-} + + #if defined(ARCH_32bit) ++#if MIN_VERSION_ghc_prim(0,8,0) ++word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# (word8ToWord# w#))) ++word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# (word16ToWord# w#))) ++word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# (word32ToWord# w#))) ++word64ToInt64 (W64# w#) = ++ case isTrue# (w# `ltWord64#` uncheckedShiftL64# (wordToWord64# 1##) 63#) of ++ True -> Just (I64# (word64ToInt64# w#)) ++ False -> Nothing ++ ++word8ToWord64 (W8# w#) = W64# (wordToWord64# (word8ToWord# w#)) ++word16ToWord64 (W16# w#) = W64# (wordToWord64# (word16ToWord# w#)) ++word32ToWord64 (W32# w#) = W64# (wordToWord64# (word32ToWord# w#)) ++#else + word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# w#)) + word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# w#)) + word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# w#)) +@@ -541,6 +554,7 @@ word64ToInt64 (W64# w#) = + word8ToWord64 (W8# w#) = W64# (wordToWord64# w#) + word16ToWord64 (W16# w#) = W64# (wordToWord64# w#) + word32ToWord64 (W32# w#) = W64# (wordToWord64# w#) ++#endif + + {-# INLINE word8ToInt64 #-} + {-# INLINE word16ToInt64 #-} +diff --git a/cborg/src/Codec/CBOR/Read.hs b/cborg/src/Codec/CBOR/Read.hs +index 6546575..c4dc761 100644 +--- a/cborg/src/Codec/CBOR/Read.hs ++++ b/cborg/src/Codec/CBOR/Read.hs +@@ -63,7 +63,7 @@ import qualified Data.Text as T + import qualified Data.Text.Encoding as T + import Data.Word + import GHC.Word +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 + #endif + import GHC.Exts +@@ -510,8 +510,8 @@ go_fast !bs da@(ConsumeNegWord64Canonical k) = + go_fast !bs da@(ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> go_fast_end bs da +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast (BS.unsafeDrop sz bs) + | otherwise -> go_fast_end bs da + + go_fast !bs da@(ConsumeListLen64Canonical k) = +@@ -994,8 +994,8 @@ go_fast_end !bs (ConsumeNegWord64Canonical k) = + go_fast_end !bs (ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> return $! SlowFail bs "expected int64" +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) + | otherwise -> return $! SlowFail bs "non-canonical int64" + + go_fast_end !bs (ConsumeListLen64Canonical k) = +@@ -1271,7 +1271,7 @@ go_slow da bs !offset = do + + SlowPeekByteOffset bs' k -> + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1381,7 +1381,7 @@ go_slow_overlapped da sz bs_cur bs_next !offset = + SlowPeekByteOffset bs_empty k -> + assert (BS.null bs_empty) $ do + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1565,17 +1565,17 @@ isIntCanonical sz i + {-# INLINE isWord64Canonical #-} + isWord64Canonical :: Int -> Word64 -> Bool + isWord64Canonical sz w +- | sz == 2 = w > 0x17) +- | sz == 3 = w > 0xff) +- | sz == 5 = w > 0xffff) +- | sz == 9 = w > 0xffffffff) ++ | sz == 2 = w > 0x17 ++ | sz == 3 = w > 0xff ++ | sz == 5 = w > 0xffff ++ | sz == 9 = w > 0xffffffff + | otherwise = True + + {-# INLINE isInt64Canonical #-} + isInt64Canonical :: Int -> Int64# -> Bool + isInt64Canonical sz i# +- | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (not64# w#) +- | otherwise = isWord64Canonical sz w# ++ | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (W64# (not64# w#)) ++ | otherwise = isWord64Canonical sz (W64# w#) + where + w# = int64ToWord64# i# + #endif +@@ -1796,7 +1796,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x1b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! toInteger w) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! toInteger w) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! toInteger w) + #endif +@@ -1838,7 +1838,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x3b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! (-1 - toInteger w)) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! (-1 - toInteger w)) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! (-1 - toInteger w)) + #endif diff --git a/srcpkgs/git-annex/patches/memory.patch b/srcpkgs/git-annex/patches/memory.patch new file mode 100644 index 00000000000..2a6d85b720d --- /dev/null +++ b/srcpkgs/git-annex/patches/memory.patch @@ -0,0 +1,36 @@ +From 2738929ce15b4c8704bbbac24a08539b5d4bf30e Mon Sep 17 00:00:00 2001 +From: sternenseemann +Date: Mon, 14 Aug 2023 10:51:30 +0200 +Subject: [PATCH] Data.Memory.Internal.CompatPrim64: fix 32 bit with GHC >= 9.4 + +Since 9.4, GHC.Prim exports Word64# operations like timesWord64# even on +i686 whereas GHC.IntWord64 no longer exists. Therefore, we can just use +the ready made solution. + +Closes #98, as it should be the better solution. +--- + Data/Memory/Internal/CompatPrim64.hs | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Data/Memory/Internal/CompatPrim64.hs b/Data/Memory/Internal/CompatPrim64.hs +index b9eef8a..a134c88 100644 +--- a/memory/Data/Memory/Internal/CompatPrim64.hs ++++ b/memory/Data/Memory/Internal/CompatPrim64.hs +@@ -150,6 +150,7 @@ w64# :: Word# -> Word# -> Word# -> Word64# + w64# w _ _ = w + + #elif WORD_SIZE_IN_BITS == 32 ++#if __GLASGOW_HASKELL__ < 904 + import GHC.IntWord64 + import GHC.Prim (Word#) + +@@ -158,6 +159,9 @@ timesWord64# a b = + let !ai = word64ToInt64# a + !bi = word64ToInt64# b + in int64ToWord64# (timesInt64# ai bi) ++#else ++import GHC.Prim ++#endif + + w64# :: Word# -> Word# -> Word# -> Word64# + w64# _ hw lw = diff --git a/srcpkgs/git-annex/template b/srcpkgs/git-annex/template index 91d714a327a..221d55c4a6a 100644 --- a/srcpkgs/git-annex/template +++ b/srcpkgs/git-annex/template @@ -1,32 +1,48 @@ # Template file for 'git-annex' pkgname=git-annex -version=10.20221103 +version=10.20250630 revision=1 -build_style=haskell-stack +build_style=gnu-makefile +build_helper=haskell +make_check_target=test +make_use_env=yes +hostmakedepends="cabal-install" makedepends="curl file-devel gnupg gnutls-devel gsasl-devel libxml2-devel lsof rsync git ncurses-devel bup borg nocache git-remote-gcrypt" -# depends are utilities required by git-annex depends="git rsync curl lsof gnupg>=2" short_desc="Git addon for managing large files" maintainer="Evan Deaubl " license="AGPL-3.0-or-later, MIT, BSD-2-Clause, GPL-3.0-or-later, custom:Expat, custom:MIT-twitter, GPL-2.0-only, custom:icon-license" homepage="https://git-annex.branchable.com" changelog="https://git.joeyh.name/index.cgi/git-annex.git/plain/CHANGELOG" -distfiles="https://hackage.haskell.org/package/${pkgname}-${version}/${pkgname}-${version}.tar.gz" -checksum=f549c31264d6da3bb544755795e7fc29882ebec45014905bc2ea0ade28398f3b +# The hackage distribution is missing the makefile and build tools +distfiles="https://git.joeyh.name/index.cgi/git-annex.git/snapshot/git-annex-${version}.tar.gz + https://hackage.haskell.org/package/basement-0.0.16/basement-0.0.16.tar.gz + https://hackage.haskell.org/package/memory-0.18.0/memory-0.18.0.tar.gz + https://hackage.haskell.org/package/cborg-0.2.10.0/cborg-0.2.10.0.tar.gz" +checksum="f798e07707ab2eb7c8fe76b9821ba6b2878d4bae2a03ae5a8cac69eb315bcd98 + 7fb77e249aef76ba5aed3059d556800ce02b614597c488ba01f0a16449146300 + fd4eb6f638e24b81b4e6cdd68772a531726f2f67686c8969d3407d82f7862e3e + 17fe070c38fc498cab49bcb9d6215b7747d53bedf96502e9bcce9cad73b9c797" nopie_files="/usr/bin/git-annex" nocross=yes +skip_extraction="basement-0.0.16.tar.gz memory-0.18.0.tar.gz cborg-0.2.10.0.tar.gz" +disable_parallel_build=yes + +post_extract() { + vsrcextract -C basement basement-0.0.16.tar.gz + vsrcextract -C memory memory-0.18.0.tar.gz + vsrcextract -C cborg cborg-0.2.10.0.tar.gz +} + +export BUILDERCOMMONOPTIONS="-f servant --index-state=2025-07-04T05:45:32Z" +export GHC="cabal exec -- ghc" + +pre_configure() { + echo 'packages: ./basement ./memory ./cborg .' > cabal.project + cabal update +} -# These install steps are pulled from the install target in the -# git-annex Makefile. The target can't be called directly because it is -# comingled with the Cabal build, and we're using Stackage instead -# Make sure they are in sync with each version upgrade post_install() { - ln -sf git-annex ${DESTDIR}/usr/bin/git-annex-shell - ln -sf git-annex ${DESTDIR}/usr/bin/git-remote-tor-annex - - vmkdir usr/share/man/man1 - vcopy man/*.1 usr/share/man/man1 - vlicense doc/license/AGPL } diff --git a/srcpkgs/git-mediate/template b/srcpkgs/git-mediate/template index 705df7843b8..a14e2419135 100644 --- a/srcpkgs/git-mediate/template +++ b/srcpkgs/git-mediate/template @@ -1,15 +1,15 @@ # Template file for 'git-mediate' pkgname=git-mediate -version=1.0.8.1 -revision=3 +version=1.1.0 +revision=1 build_style=haskell-stack -stackage="lts-19.0" +stackage="lts-23.26" depends="git" short_desc="Tool to help resolving git conflicts" maintainer="Peter Wang " license="GPL-2.0-only" homepage="https://github.com/Peaker/git-mediate" distfiles="https://hackage.haskell.org/package/${pkgname}-${version}/${pkgname}-${version}.tar.gz" -checksum=ee44841d37ded70cbcd8edd1e233a344d0118295e0bd2f0c6983ed00f619c467 +checksum=7826a1cdbbd20696059c9a2b927916c6e3593be24ac10bd647b6c2d8e13b1124 nocross=yes nopie_files="/usr/bin/git-mediate" diff --git a/srcpkgs/glirc/template b/srcpkgs/glirc/template index 9692ce09058..da5fce7b5db 100644 --- a/srcpkgs/glirc/template +++ b/srcpkgs/glirc/template @@ -1,8 +1,9 @@ # Template file for 'glirc' pkgname=glirc version=2.41 -revision=1 -hostmakedepends="cabal-install" +revision=2 +build_style=cabal +cabal_index_state=2025-07-04T14:10:45Z makedepends="ncurses-devel openssl-devel" short_desc="Console IRC client written in Haskell" maintainer="Orphaned " @@ -13,24 +14,15 @@ checksum=fbb5bd030ddce70158c4d5654c8fda93093e68b9fb85df4d6cb91ab72a67a6a6 nocross="cabal does not support cross compilation" nopie=yes # ghc is currently built without PIE support -_cabal_opts="-g" - -if [ "$XBPS_TARGET_NO_ATOMIC8" ]; then - _cabal_opts+=" --ghc-option -latomic" -fi - -if [ "$XBPS_MAKEJOBS" ]; then - _cabal_opts+=" --jobs=$XBPS_MAKEJOBS" -fi - -do_build() { - cabal update $_cabal_opts - cabal build $_cabal_opts - mv dist-newstyle/build/*/*/glirc-${version}/build/glirc/glirc glirc +post_configure() { + echo 'package HsOpenSSL' >> cabal.project.local + echo ' ghc-options:' >> cabal.project.local + echo ' -optc=-Wno-discarded-qualifiers' >> cabal.project.local + echo ' -optc=-Wno-deprecated-declarations' >> cabal.project.local + echo ' -optc=-Wno-incompatible-pointer-types' >> cabal.project.local } -do_install() { - vbin glirc +post_install() { vman glirc.1 vlicense LICENSE } diff --git a/srcpkgs/haskell-language-server/template b/srcpkgs/haskell-language-server/template index 709fb30791a..b352ab34610 100644 --- a/srcpkgs/haskell-language-server/template +++ b/srcpkgs/haskell-language-server/template @@ -1,9 +1,10 @@ # Template file for 'haskell-language-server' pkgname=haskell-language-server -version=1.8.0.0 +version=2.11.0.0 revision=1 -build_style="haskell-stack" -make_build_args="--stack-yaml stack-lts19.yaml --flag=haskell-language-server:-dynamic" +build_style=cabal +configure_args="--flags=-dynamic --disable-benchmarks --disable-tests" +make_build_target=all:exes makedepends="ncurses-devel ncurses-libtinfo-devel icu-devel zlib-devel" short_desc="Integration of ghcide and haskell-ide-engine" maintainer="Wayne Van Son " @@ -11,7 +12,7 @@ license="Apache-2.0" homepage="https://github.com/haskell/haskell-language-server" changelog="https://raw.githubusercontent.com/haskell/haskell-language-server/master/ChangeLog.md" distfiles="https://github.com/haskell/haskell-language-server/archive/${version}.tar.gz" -checksum=e1081ac581d21547d835beb8561e815573944aa0babe752a971479da3a207235 +checksum=a03b00e37b3a5326adaaa688145160959e78f0fa7a3160eb99babea437fc60f4 nopie_files=" /usr/bin/haskell-language-server /usr/bin/haskell-language-server-wrapper @@ -21,3 +22,4 @@ nopie_files=" /usr/bin/test-server " nocross="Cannot yet cross compile with Haskell" +make_check=no # Tests require dynamic linking of haskell libs which doesn't work on musl diff --git a/srcpkgs/hedgewars/patches/importmonad.patch b/srcpkgs/hedgewars/patches/importmonad.patch new file mode 100644 index 00000000000..f8c1451f53c --- /dev/null +++ b/srcpkgs/hedgewars/patches/importmonad.patch @@ -0,0 +1,10 @@ +--- a/tools/pas2c/Pas2C.hs 2025-07-07 21:51:17.117166690 +0100 ++++ b/tools/pas2c/Pas2C.hs 2025-07-07 21:47:34.842095704 +0100 +@@ -6,6 +6,7 @@ + import Data.Maybe + import Data.Char + import Text.Parsec.Prim hiding (State) ++import Control.Monad (void, unless, guard, liftM, liftM2) + import Control.Monad.State + import System.IO + import PascalPreprocessor diff --git a/srcpkgs/hedgewars/patches/string.patch b/srcpkgs/hedgewars/patches/string.patch new file mode 100644 index 00000000000..18e1ea8128d --- /dev/null +++ b/srcpkgs/hedgewars/patches/string.patch @@ -0,0 +1,81 @@ +--- a/tools/pas2c/PascalPreprocessor.hs 2025-07-07 21:31:06.082177207 +0100 ++++ b/tools/pas2c/PascalPreprocessor.hs 2025-07-07 21:32:06.163172477 +0100 +@@ -11,8 +11,8 @@ + char' :: Char -> ParsecT String u IO () + char' = void . char + +-string' :: String -> ParsecT String u IO () +-string' = void . string ++stringlmao :: String -> ParsecT String u IO () ++stringlmao = void . string + + -- comments are removed + comment :: ParsecT String u IO String +@@ -59,7 +59,7 @@ + return $ c:s + + switch = do +- try $ string' "{$" ++ try $ stringlmao "{$" + s <- choice [ + include + , ifdef +@@ -72,7 +72,7 @@ + return s + + include = do +- try $ string' "INCLUDE" ++ try $ stringlmao "INCLUDE" + spaces + (char' '"') + ifn <- many1 $ noneOf "\"\n" +@@ -102,7 +102,7 @@ + return "" + + if' = do +- try (string' "IF" >> notFollowedBy alphaNum) ++ try (stringlmao "IF" >> notFollowedBy alphaNum) + + void $ manyTill anyChar (char' '}') + --char '}' +@@ -113,15 +113,15 @@ + return "" + + elseSwitch = do +- try $ string' "ELSE}" ++ try $ stringlmao "ELSE}" + updateState $ \(m, b:bs) -> (m, (not b):bs) + return "" + endIf = do +- try $ string' "ENDIF}" ++ try $ stringlmao "ENDIF}" + updateState $ \(m, _:bs) -> (m, bs) + return "" + define = do +- try $ string' "DEFINE" ++ try $ stringlmao "DEFINE" + spaces + i <- identifier + d <- ((string ":=" >> return ()) <|> spaces) >> many (noneOf "}") +--- a/tools/pas2c/PascalBasics.hs 2025-07-07 21:34:14.466383776 +0100 ++++ b/tools/pas2c/PascalBasics.hs 2025-07-07 21:34:44.872576888 +0100 +@@ -13,8 +13,8 @@ + char' :: Char -> Parsec String u () + char' = void . char + +-string' :: String -> Parsec String u () +-string' = void . string ++stringggggggg :: String -> Parsec String u () ++stringggggggg = void . string + + builtin :: [String] + builtin = ["succ", "pred", "low", "high", "ord", "inc", "dec", "exit", "break", "continue", "length", "copy"] +@@ -43,7 +43,7 @@ + + preprocessorSwitch :: Stream String Identity Char => Parsec String u String + preprocessorSwitch = do +- try $ string' "{$" ++ try $ stringggggggg "{$" + s <- manyTill (noneOf "\n") $ char '}' + return s + diff --git a/srcpkgs/hledger/files/stack.yaml b/srcpkgs/hledger/files/stack.yaml deleted file mode 100644 index b5f41932e27..00000000000 --- a/srcpkgs/hledger/files/stack.yaml +++ /dev/null @@ -1,22 +0,0 @@ -resolver: lts-19.0 - -packages: -- hledger-lib -- hledger -- hledger-ui -- hledger-web - -extra-deps: -# for hledger-lib: -- breakpoint-0.1.0.0 -# for hledger: -# for hledger-ui: -- brick-1.0 -- bimap-0.5.0 -- text-zipper-0.12 -- vty-5.36 -# for hledger-web: -# for Shake.hs: - -ghc-options: - "$locals": -fplugin Debug.Breakpoint diff --git a/srcpkgs/hledger/patches/basement.patch b/srcpkgs/hledger/patches/basement.patch new file mode 100644 index 00000000000..e934f8e67b2 --- /dev/null +++ b/srcpkgs/hledger/patches/basement.patch @@ -0,0 +1,242 @@ +From 38be2c93acb6f459d24ed6c626981c35ccf44095 Mon Sep 17 00:00:00 2001 +From: Sylvain Henry +Date: Thu, 16 Feb 2023 15:40:45 +0100 +Subject: [PATCH] Fix build on 32-bit architectures + +--- + basement/Basement/Bits.hs | 4 ++++ + basement/Basement/From.hs | 24 ----------------------- + basement/Basement/Numerical/Additive.hs | 4 ++++ + basement/Basement/Numerical/Conversion.hs | 20 +++++++++++++++++++ + basement/Basement/PrimType.hs | 6 +++++- + basement/Basement/Types/OffsetSize.hs | 22 +++++++++++++++++++-- + 6 files changed, 53 insertions(+), 27 deletions(-) + +diff --git a/basement/Basement/Bits.hs b/basement/Basement/Bits.hs +index 7eeea0f5..24520ed7 100644 +--- a/basement/Basement/Bits.hs ++++ b/basement/Basement/Bits.hs +@@ -54,8 +54,12 @@ import GHC.Int + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | operation over finite bits + class FiniteBitsOps bits where +diff --git a/basement/Basement/From.hs b/basement/Basement/From.hs +index 7bbe141c..80014b3e 100644 +--- a/basement/Basement/From.hs ++++ b/basement/Basement/From.hs +@@ -272,23 +272,11 @@ instance (NatWithinBound (CountOf ty) n, KnownNat n, PrimType ty) + tryFrom = BlockN.toBlockN . UArray.toBlock . BoxArray.mapToUnboxed id + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn64 n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn64 n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn64 n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance From (Zn64 n) Word64 where + from = unZn64 + instance From (Zn64 n) Word128 where +@@ -297,23 +285,11 @@ instance From (Zn64 n) Word256 where + from = from . unZn64 + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word64 n) => From (Zn n) Word64 where + from = naturalToWord64 . unZn + instance (KnownNat n, NatWithinBound Word128 n) => From (Zn n) Word128 where +diff --git a/basement/Basement/Numerical/Additive.hs b/basement/Basement/Numerical/Additive.hs +index d0dfb973..8ab65aa0 100644 +--- a/basement/Basement/Numerical/Additive.hs ++++ b/basement/Basement/Numerical/Additive.hs +@@ -30,8 +30,12 @@ import qualified Basement.Types.Word128 as Word128 + import qualified Basement.Types.Word256 as Word256 + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | Represent class of things that can be added together, + -- contains a neutral element and is commutative. +diff --git a/basement/Basement/Numerical/Conversion.hs b/basement/Basement/Numerical/Conversion.hs +index db502c07..fddc8232 100644 +--- a/basement/Basement/Numerical/Conversion.hs ++++ b/basement/Basement/Numerical/Conversion.hs +@@ -26,8 +26,12 @@ import GHC.Word + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + intToInt64 :: Int -> Int64 + #if WORD_SIZE_IN_BITS == 64 +@@ -96,11 +100,22 @@ int64ToWord64 (I64# i) = W64# (int64ToWord64# i) + #endif + + #if WORD_SIZE_IN_BITS == 64 ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord# :: Word64# -> Word# ++word64ToWord# i = word64ToWord# i ++#else + word64ToWord# :: Word# -> Word# + word64ToWord# i = i ++#endif + {-# INLINE word64ToWord# #-} + #endif + ++#if WORD_SIZE_IN_BITS < 64 ++word64ToWord32# :: Word64# -> Word32# ++word64ToWord32# i = wordToWord32# (word64ToWord# i) ++{-# INLINE word64ToWord32# #-} ++#endif ++ + -- | 2 Word32s + data Word32x2 = Word32x2 {-# UNPACK #-} !Word32 + {-# UNPACK #-} !Word32 +@@ -113,9 +128,14 @@ word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# (G + word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# w64 32#))) (W32# (wordToWord32# w64)) + #endif + #else ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord32s :: Word64 -> Word32x2 ++word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord32# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord32# w64)) ++#else + word64ToWord32s :: Word64 -> Word32x2 + word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord# w64)) + #endif ++#endif + + wordToChar :: Word -> Char + wordToChar (W# word) = C# (chr# (word2Int# word)) +diff --git a/basement/Basement/PrimType.hs b/basement/Basement/PrimType.hs +index f8ca2926..a888ec91 100644 +--- a/basement/Basement/PrimType.hs ++++ b/basement/Basement/PrimType.hs +@@ -54,7 +54,11 @@ import Basement.Nat + import qualified Prelude (quot) + + #if WORD_SIZE_IN_BITS < 64 +-import GHC.IntWord64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else ++import GHC.IntWord64 ++#endif + #endif + + #ifdef FOUNDATION_BOUNDS_CHECK +diff --git a/basement/Basement/Types/OffsetSize.hs b/basement/Basement/Types/OffsetSize.hs +index cd944927..1ea80dad 100644 +--- a/basement/Basement/Types/OffsetSize.hs ++++ b/basement/Basement/Types/OffsetSize.hs +@@ -70,8 +70,12 @@ import Data.List (foldl') + import qualified Prelude + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | File size in bytes + newtype FileSize = FileSize Word64 +@@ -225,20 +229,26 @@ countOfRoundUp alignment (CountOf n) = CountOf ((n + (alignment-1)) .&. compleme + + csizeOfSize :: CountOf Word8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfSize (CountOf (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfSize (CountOf (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfSize (CountOf (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +- + #else + csizeOfSize (CountOf (I# sz)) = CSize (W64# (int2Word# sz)) +- + #endif + #endif + + csizeOfOffset :: Offset8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfOffset (Offset (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfOffset (Offset (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfOffset (Offset (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +@@ -250,7 +260,11 @@ csizeOfOffset (Offset (I# sz)) = CSize (W64# (int2Word# sz)) + sizeOfCSSize :: CSsize -> CountOf Word8 + sizeOfCSSize (CSsize (-1)) = error "invalid size: CSSize is -1" + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# (int32ToInt# sz)) ++#else + sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# sz) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# (int64ToInt# sz)) +@@ -261,7 +275,11 @@ sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# sz) + + sizeOfCSize :: CSize -> CountOf Word8 + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# (word32ToWord# sz))) ++#else + sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSize (CSize (W64# sz)) = CountOf (I# (word2Int# (word64ToWord# sz))) diff --git a/srcpkgs/hledger/patches/cborg.patch b/srcpkgs/hledger/patches/cborg.patch new file mode 100644 index 00000000000..b44ba514458 --- /dev/null +++ b/srcpkgs/hledger/patches/cborg.patch @@ -0,0 +1,212 @@ +commit 9d1418bb8b38cb9a438d7f18835b1ef7ef12b234 +Author: amesgen +Date: Sun Sep 10 20:03:40 2023 +0200 + + Fix compilation and support GHC >=9.2 on 32bit + +diff --git a/cborg/src/Codec/CBOR/Decoding.hs b/cborg/src/Codec/CBOR/Decoding.hs +index a7d774c..bf68e68 100644 +--- a/cborg/src/Codec/CBOR/Decoding.hs ++++ b/cborg/src/Codec/CBOR/Decoding.hs +@@ -315,11 +315,16 @@ getDecodeAction (Decoder k) = k (\x -> return (Done x)) + toInt8 :: Int# -> Int8 + toInt16 :: Int# -> Int16 + toInt32 :: Int# -> Int32 +-toInt64 :: Int# -> Int64 + toWord8 :: Word# -> Word8 + toWord16 :: Word# -> Word16 + toWord32 :: Word# -> Word32 ++#if defined(ARCH_64bit) ++toInt64 :: Int# -> Int64 + toWord64 :: Word# -> Word64 ++#else ++toInt64 :: Int64# -> Int64 ++toWord64 :: Word64# -> Word64 ++#endif + #if MIN_VERSION_ghc_prim(0,8,0) + toInt8 n = I8# (intToInt8# n) + toInt16 n = I16# (intToInt16# n) +@@ -327,8 +332,7 @@ toInt32 n = I32# (intToInt32# n) + toWord8 n = W8# (wordToWord8# n) + toWord16 n = W16# (wordToWord16# n) + toWord32 n = W32# (wordToWord32# n) +-#if WORD_SIZE_IN_BITS == 64 +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && defined(ARCH_64bit) + toInt64 n = I64# (intToInt64# n) + toWord64 n = W64# (wordToWord64# n) + #else +@@ -336,10 +340,6 @@ toInt64 n = I64# n + toWord64 n = W64# n + #endif + #else +-toInt64 n = I64# (intToInt64# n) +-toWord64 n = W64# (wordToWord64# n) +-#endif +-#else + toInt8 n = I8# n + toInt16 n = I16# n + toInt32 n = I32# n +@@ -986,7 +986,7 @@ type ByteOffset = Int64 + -- @since 0.2.2.0 + peekByteOffset :: Decoder s ByteOffset + peekByteOffset = Decoder (\k -> return (PeekByteOffset (\off# -> k (I64# +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (intToInt64# off#) + #else + off# +diff --git a/cborg/src/Codec/CBOR/Magic.hs b/cborg/src/Codec/CBOR/Magic.hs +index cdeb455..bfae638 100644 +--- a/cborg/src/Codec/CBOR/Magic.hs ++++ b/cborg/src/Codec/CBOR/Magic.hs +@@ -120,7 +120,7 @@ import qualified Numeric.Half as Half + import Data.Bits ((.|.), unsafeShiftL) + #endif + +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 (wordToWord64#, word64ToWord#, + intToInt64#, int64ToInt#, + leWord64#, ltWord64#, word64ToInt64#) +@@ -173,7 +173,7 @@ grabWord64 (Ptr ip#) = W64# (wordToWord64# (byteSwap# (word64ToWord# (indexWord6 + grabWord64 (Ptr ip#) = W64# (byteSwap# (indexWord64OffAddr# ip# 0#)) + #endif + #else +-grabWord64 (Ptr ip#) = W64# (byteSwap64# (word64ToWord# (indexWord64OffAddr# ip# 0#))) ++grabWord64 (Ptr ip#) = W64# (byteSwap64# (indexWord64OffAddr# ip# 0#)) + #endif + + #elif defined(MEM_UNALIGNED_OPS) && \ +@@ -484,7 +484,7 @@ word16ToInt (W16# w#) = I# (word2Int# (word16ToWord# w#)) + word32ToInt (W32# w#) = I# (word2Int# (word32ToWord# w#)) + #else + word32ToInt (W32# w#) = +- case isTrue# (w# `ltWord#` 0x80000000##) of ++ case isTrue# (word32ToWord# w# `ltWord#` 0x80000000##) of + True -> Just (I# (word2Int# (word32ToWord# w#))) + False -> Nothing + #endif +@@ -530,6 +530,19 @@ word64ToInt (W64# w#) = + {-# INLINE word64ToInt #-} + + #if defined(ARCH_32bit) ++#if MIN_VERSION_ghc_prim(0,8,0) ++word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# (word8ToWord# w#))) ++word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# (word16ToWord# w#))) ++word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# (word32ToWord# w#))) ++word64ToInt64 (W64# w#) = ++ case isTrue# (w# `ltWord64#` uncheckedShiftL64# (wordToWord64# 1##) 63#) of ++ True -> Just (I64# (word64ToInt64# w#)) ++ False -> Nothing ++ ++word8ToWord64 (W8# w#) = W64# (wordToWord64# (word8ToWord# w#)) ++word16ToWord64 (W16# w#) = W64# (wordToWord64# (word16ToWord# w#)) ++word32ToWord64 (W32# w#) = W64# (wordToWord64# (word32ToWord# w#)) ++#else + word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# w#)) + word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# w#)) + word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# w#)) +@@ -541,6 +554,7 @@ word64ToInt64 (W64# w#) = + word8ToWord64 (W8# w#) = W64# (wordToWord64# w#) + word16ToWord64 (W16# w#) = W64# (wordToWord64# w#) + word32ToWord64 (W32# w#) = W64# (wordToWord64# w#) ++#endif + + {-# INLINE word8ToInt64 #-} + {-# INLINE word16ToInt64 #-} +diff --git a/cborg/src/Codec/CBOR/Read.hs b/cborg/src/Codec/CBOR/Read.hs +index 6546575..c4dc761 100644 +--- a/cborg/src/Codec/CBOR/Read.hs ++++ b/cborg/src/Codec/CBOR/Read.hs +@@ -63,7 +63,7 @@ import qualified Data.Text as T + import qualified Data.Text.Encoding as T + import Data.Word + import GHC.Word +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 + #endif + import GHC.Exts +@@ -510,8 +510,8 @@ go_fast !bs da@(ConsumeNegWord64Canonical k) = + go_fast !bs da@(ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> go_fast_end bs da +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast (BS.unsafeDrop sz bs) + | otherwise -> go_fast_end bs da + + go_fast !bs da@(ConsumeListLen64Canonical k) = +@@ -994,8 +994,8 @@ go_fast_end !bs (ConsumeNegWord64Canonical k) = + go_fast_end !bs (ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> return $! SlowFail bs "expected int64" +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) + | otherwise -> return $! SlowFail bs "non-canonical int64" + + go_fast_end !bs (ConsumeListLen64Canonical k) = +@@ -1271,7 +1271,7 @@ go_slow da bs !offset = do + + SlowPeekByteOffset bs' k -> + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1381,7 +1381,7 @@ go_slow_overlapped da sz bs_cur bs_next !offset = + SlowPeekByteOffset bs_empty k -> + assert (BS.null bs_empty) $ do + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1565,17 +1565,17 @@ isIntCanonical sz i + {-# INLINE isWord64Canonical #-} + isWord64Canonical :: Int -> Word64 -> Bool + isWord64Canonical sz w +- | sz == 2 = w > 0x17) +- | sz == 3 = w > 0xff) +- | sz == 5 = w > 0xffff) +- | sz == 9 = w > 0xffffffff) ++ | sz == 2 = w > 0x17 ++ | sz == 3 = w > 0xff ++ | sz == 5 = w > 0xffff ++ | sz == 9 = w > 0xffffffff + | otherwise = True + + {-# INLINE isInt64Canonical #-} + isInt64Canonical :: Int -> Int64# -> Bool + isInt64Canonical sz i# +- | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (not64# w#) +- | otherwise = isWord64Canonical sz w# ++ | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (W64# (not64# w#)) ++ | otherwise = isWord64Canonical sz (W64# w#) + where + w# = int64ToWord64# i# + #endif +@@ -1796,7 +1796,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x1b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! toInteger w) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! toInteger w) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! toInteger w) + #endif +@@ -1838,7 +1838,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x3b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! (-1 - toInteger w)) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! (-1 - toInteger w)) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! (-1 - toInteger w)) + #endif diff --git a/srcpkgs/hledger/patches/memory.patch b/srcpkgs/hledger/patches/memory.patch new file mode 100644 index 00000000000..2a6d85b720d --- /dev/null +++ b/srcpkgs/hledger/patches/memory.patch @@ -0,0 +1,36 @@ +From 2738929ce15b4c8704bbbac24a08539b5d4bf30e Mon Sep 17 00:00:00 2001 +From: sternenseemann +Date: Mon, 14 Aug 2023 10:51:30 +0200 +Subject: [PATCH] Data.Memory.Internal.CompatPrim64: fix 32 bit with GHC >= 9.4 + +Since 9.4, GHC.Prim exports Word64# operations like timesWord64# even on +i686 whereas GHC.IntWord64 no longer exists. Therefore, we can just use +the ready made solution. + +Closes #98, as it should be the better solution. +--- + Data/Memory/Internal/CompatPrim64.hs | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Data/Memory/Internal/CompatPrim64.hs b/Data/Memory/Internal/CompatPrim64.hs +index b9eef8a..a134c88 100644 +--- a/memory/Data/Memory/Internal/CompatPrim64.hs ++++ b/memory/Data/Memory/Internal/CompatPrim64.hs +@@ -150,6 +150,7 @@ w64# :: Word# -> Word# -> Word# -> Word64# + w64# w _ _ = w + + #elif WORD_SIZE_IN_BITS == 32 ++#if __GLASGOW_HASKELL__ < 904 + import GHC.IntWord64 + import GHC.Prim (Word#) + +@@ -158,6 +159,9 @@ timesWord64# a b = + let !ai = word64ToInt64# a + !bi = word64ToInt64# b + in int64ToWord64# (timesInt64# ai bi) ++#else ++import GHC.Prim ++#endif + + w64# :: Word# -> Word# -> Word# -> Word64# + w64# _ hw lw = diff --git a/srcpkgs/hledger/patches/stack.patch b/srcpkgs/hledger/patches/stack.patch new file mode 100644 index 00000000000..e892dbad841 --- /dev/null +++ b/srcpkgs/hledger/patches/stack.patch @@ -0,0 +1,12 @@ +--- a/stack98.yaml 2025-07-08 09:29:33.086073888 +0100 ++++ b/stack98.yaml 2025-07-08 09:29:49.199125121 +0100 +@@ -3,6 +3,9 @@ + resolver: lts-23.11 + + packages: ++- basement ++- memory ++- cborg + - hledger-lib + - hledger + - hledger-ui diff --git a/srcpkgs/hledger/template b/srcpkgs/hledger/template index 5750484fc5b..6a29bc37df0 100644 --- a/srcpkgs/hledger/template +++ b/srcpkgs/hledger/template @@ -1,6 +1,6 @@ # Template file for 'hledger' pkgname=hledger -version=1.27.1 +version=1.43.2 revision=1 build_style=haskell-stack makedepends="zlib-devel ncurses-devel" @@ -9,10 +9,25 @@ maintainer="Inokentiy Babushkin " license="GPL-3.0-or-later" homepage="https://hledger.org/" changelog="https://hackage.haskell.org/package/hledger-${version}/changelog" -distfiles="https://github.com/simonmichael/hledger/archive/${version}.tar.gz" -checksum=218f6005b7b30308cc43523dc7b61c818bb649abc217a6c8803e8f82b408d239 +distfiles="https://github.com/simonmichael/hledger/archive/${version}.tar.gz + https://hackage.haskell.org/package/basement-0.0.16/basement-0.0.16.tar.gz + https://hackage.haskell.org/package/memory-0.18.0/memory-0.18.0.tar.gz + https://hackage.haskell.org/package/cborg-0.2.10.0/cborg-0.2.10.0.tar.gz" +checksum="60b74c70ddfc6b84ca87debd2ac302aac754da3c0d9089821182e56796cb841e + 7fb77e249aef76ba5aed3059d556800ce02b614597c488ba01f0a16449146300 + fd4eb6f638e24b81b4e6cdd68772a531726f2f67686c8969d3407d82f7862e3e + 17fe070c38fc498cab49bcb9d6215b7747d53bedf96502e9bcce9cad73b9c797" nopie_files="/usr/bin/hledger" nocross=yes # Can't yet cross compile Haskell +skip_extraction="basement-0.0.16.tar.gz memory-0.18.0.tar.gz cborg-0.2.10.0.tar.gz" + +export STACK_YAML=stack98.yaml + +post_extract() { + vsrcextract -C basement basement-0.0.16.tar.gz + vsrcextract -C memory memory-0.18.0.tar.gz + vsrcextract -C cborg cborg-0.2.10.0.tar.gz +} post_install() { vman hledger/hledger.1 diff --git a/srcpkgs/hlint/template b/srcpkgs/hlint/template index 0109be25805..33529ee498a 100644 --- a/srcpkgs/hlint/template +++ b/srcpkgs/hlint/template @@ -1,16 +1,16 @@ # Template file for 'hlint' pkgname=hlint -version=3.3.6 +version=3.10 revision=1 -build_style=haskell-stack -stackage="lts-19.0" +build_style=cabal +cabal_index_state="2025-02-02T20:29:37Z" makedepends="ncurses-devel" short_desc="Haskell source code suggestions" maintainer="Inokentiy Babushkin " license="BSD-3-Clause" homepage="https://github.com/ndmitchell/hlint" distfiles="https://github.com/ndmitchell/${pkgname}/archive/v${version}.tar.gz" -checksum=7d536c03f77a0c259efb2b00b525ef34578ca8a4a95ccb412708e8c7172e2e6a +checksum=e2a43c6e3981a182fcf4abcb83e2aad948bf8475c570011fb31a902b64bcec4a nocross=yes # Can't yet cross compile Haskell nopie_files="/usr/bin/hlint" diff --git a/srcpkgs/hoogle/patches/basement.patch b/srcpkgs/hoogle/patches/basement.patch new file mode 100644 index 00000000000..e934f8e67b2 --- /dev/null +++ b/srcpkgs/hoogle/patches/basement.patch @@ -0,0 +1,242 @@ +From 38be2c93acb6f459d24ed6c626981c35ccf44095 Mon Sep 17 00:00:00 2001 +From: Sylvain Henry +Date: Thu, 16 Feb 2023 15:40:45 +0100 +Subject: [PATCH] Fix build on 32-bit architectures + +--- + basement/Basement/Bits.hs | 4 ++++ + basement/Basement/From.hs | 24 ----------------------- + basement/Basement/Numerical/Additive.hs | 4 ++++ + basement/Basement/Numerical/Conversion.hs | 20 +++++++++++++++++++ + basement/Basement/PrimType.hs | 6 +++++- + basement/Basement/Types/OffsetSize.hs | 22 +++++++++++++++++++-- + 6 files changed, 53 insertions(+), 27 deletions(-) + +diff --git a/basement/Basement/Bits.hs b/basement/Basement/Bits.hs +index 7eeea0f5..24520ed7 100644 +--- a/basement/Basement/Bits.hs ++++ b/basement/Basement/Bits.hs +@@ -54,8 +54,12 @@ import GHC.Int + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | operation over finite bits + class FiniteBitsOps bits where +diff --git a/basement/Basement/From.hs b/basement/Basement/From.hs +index 7bbe141c..80014b3e 100644 +--- a/basement/Basement/From.hs ++++ b/basement/Basement/From.hs +@@ -272,23 +272,11 @@ instance (NatWithinBound (CountOf ty) n, KnownNat n, PrimType ty) + tryFrom = BlockN.toBlockN . UArray.toBlock . BoxArray.mapToUnboxed id + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn64 n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn64 n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn64 n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance From (Zn64 n) Word64 where + from = unZn64 + instance From (Zn64 n) Word128 where +@@ -297,23 +285,11 @@ instance From (Zn64 n) Word256 where + from = from . unZn64 + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word64 n) => From (Zn n) Word64 where + from = naturalToWord64 . unZn + instance (KnownNat n, NatWithinBound Word128 n) => From (Zn n) Word128 where +diff --git a/basement/Basement/Numerical/Additive.hs b/basement/Basement/Numerical/Additive.hs +index d0dfb973..8ab65aa0 100644 +--- a/basement/Basement/Numerical/Additive.hs ++++ b/basement/Basement/Numerical/Additive.hs +@@ -30,8 +30,12 @@ import qualified Basement.Types.Word128 as Word128 + import qualified Basement.Types.Word256 as Word256 + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | Represent class of things that can be added together, + -- contains a neutral element and is commutative. +diff --git a/basement/Basement/Numerical/Conversion.hs b/basement/Basement/Numerical/Conversion.hs +index db502c07..fddc8232 100644 +--- a/basement/Basement/Numerical/Conversion.hs ++++ b/basement/Basement/Numerical/Conversion.hs +@@ -26,8 +26,12 @@ import GHC.Word + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + intToInt64 :: Int -> Int64 + #if WORD_SIZE_IN_BITS == 64 +@@ -96,11 +100,22 @@ int64ToWord64 (I64# i) = W64# (int64ToWord64# i) + #endif + + #if WORD_SIZE_IN_BITS == 64 ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord# :: Word64# -> Word# ++word64ToWord# i = word64ToWord# i ++#else + word64ToWord# :: Word# -> Word# + word64ToWord# i = i ++#endif + {-# INLINE word64ToWord# #-} + #endif + ++#if WORD_SIZE_IN_BITS < 64 ++word64ToWord32# :: Word64# -> Word32# ++word64ToWord32# i = wordToWord32# (word64ToWord# i) ++{-# INLINE word64ToWord32# #-} ++#endif ++ + -- | 2 Word32s + data Word32x2 = Word32x2 {-# UNPACK #-} !Word32 + {-# UNPACK #-} !Word32 +@@ -113,9 +128,14 @@ word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# (G + word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# w64 32#))) (W32# (wordToWord32# w64)) + #endif + #else ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord32s :: Word64 -> Word32x2 ++word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord32# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord32# w64)) ++#else + word64ToWord32s :: Word64 -> Word32x2 + word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord# w64)) + #endif ++#endif + + wordToChar :: Word -> Char + wordToChar (W# word) = C# (chr# (word2Int# word)) +diff --git a/basement/Basement/PrimType.hs b/basement/Basement/PrimType.hs +index f8ca2926..a888ec91 100644 +--- a/basement/Basement/PrimType.hs ++++ b/basement/Basement/PrimType.hs +@@ -54,7 +54,11 @@ import Basement.Nat + import qualified Prelude (quot) + + #if WORD_SIZE_IN_BITS < 64 +-import GHC.IntWord64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else ++import GHC.IntWord64 ++#endif + #endif + + #ifdef FOUNDATION_BOUNDS_CHECK +diff --git a/basement/Basement/Types/OffsetSize.hs b/basement/Basement/Types/OffsetSize.hs +index cd944927..1ea80dad 100644 +--- a/basement/Basement/Types/OffsetSize.hs ++++ b/basement/Basement/Types/OffsetSize.hs +@@ -70,8 +70,12 @@ import Data.List (foldl') + import qualified Prelude + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | File size in bytes + newtype FileSize = FileSize Word64 +@@ -225,20 +229,26 @@ countOfRoundUp alignment (CountOf n) = CountOf ((n + (alignment-1)) .&. compleme + + csizeOfSize :: CountOf Word8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfSize (CountOf (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfSize (CountOf (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfSize (CountOf (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +- + #else + csizeOfSize (CountOf (I# sz)) = CSize (W64# (int2Word# sz)) +- + #endif + #endif + + csizeOfOffset :: Offset8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfOffset (Offset (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfOffset (Offset (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfOffset (Offset (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +@@ -250,7 +260,11 @@ csizeOfOffset (Offset (I# sz)) = CSize (W64# (int2Word# sz)) + sizeOfCSSize :: CSsize -> CountOf Word8 + sizeOfCSSize (CSsize (-1)) = error "invalid size: CSSize is -1" + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# (int32ToInt# sz)) ++#else + sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# sz) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# (int64ToInt# sz)) +@@ -261,7 +275,11 @@ sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# sz) + + sizeOfCSize :: CSize -> CountOf Word8 + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# (word32ToWord# sz))) ++#else + sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSize (CSize (W64# sz)) = CountOf (I# (word2Int# (word64ToWord# sz))) diff --git a/srcpkgs/hoogle/patches/cborg-bounds.patch b/srcpkgs/hoogle/patches/cborg-bounds.patch new file mode 100644 index 00000000000..9f13fa50253 --- /dev/null +++ b/srcpkgs/hoogle/patches/cborg-bounds.patch @@ -0,0 +1,11 @@ +--- a/cborg/cborg.cabal 2025-07-06 20:31:00.307574779 +0100 ++++ b/cborg/cborg.cabal 2025-07-06 20:31:05.085962403 +0100 +@@ -164,7 +164,7 @@ + scientific >= 0.3 && < 0.4, + tasty >= 0.11 && < 1.6, + tasty-hunit >= 0.9 && < 0.11, +- tasty-quickcheck >= 0.8 && < 0.11, ++ tasty-quickcheck >= 0.8 && < 0.12, + vector >= 0.10 && < 0.14 + if !impl(ghc >= 8.0) + build-depends: diff --git a/srcpkgs/hoogle/patches/cborg.patch b/srcpkgs/hoogle/patches/cborg.patch new file mode 100644 index 00000000000..b44ba514458 --- /dev/null +++ b/srcpkgs/hoogle/patches/cborg.patch @@ -0,0 +1,212 @@ +commit 9d1418bb8b38cb9a438d7f18835b1ef7ef12b234 +Author: amesgen +Date: Sun Sep 10 20:03:40 2023 +0200 + + Fix compilation and support GHC >=9.2 on 32bit + +diff --git a/cborg/src/Codec/CBOR/Decoding.hs b/cborg/src/Codec/CBOR/Decoding.hs +index a7d774c..bf68e68 100644 +--- a/cborg/src/Codec/CBOR/Decoding.hs ++++ b/cborg/src/Codec/CBOR/Decoding.hs +@@ -315,11 +315,16 @@ getDecodeAction (Decoder k) = k (\x -> return (Done x)) + toInt8 :: Int# -> Int8 + toInt16 :: Int# -> Int16 + toInt32 :: Int# -> Int32 +-toInt64 :: Int# -> Int64 + toWord8 :: Word# -> Word8 + toWord16 :: Word# -> Word16 + toWord32 :: Word# -> Word32 ++#if defined(ARCH_64bit) ++toInt64 :: Int# -> Int64 + toWord64 :: Word# -> Word64 ++#else ++toInt64 :: Int64# -> Int64 ++toWord64 :: Word64# -> Word64 ++#endif + #if MIN_VERSION_ghc_prim(0,8,0) + toInt8 n = I8# (intToInt8# n) + toInt16 n = I16# (intToInt16# n) +@@ -327,8 +332,7 @@ toInt32 n = I32# (intToInt32# n) + toWord8 n = W8# (wordToWord8# n) + toWord16 n = W16# (wordToWord16# n) + toWord32 n = W32# (wordToWord32# n) +-#if WORD_SIZE_IN_BITS == 64 +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && defined(ARCH_64bit) + toInt64 n = I64# (intToInt64# n) + toWord64 n = W64# (wordToWord64# n) + #else +@@ -336,10 +340,6 @@ toInt64 n = I64# n + toWord64 n = W64# n + #endif + #else +-toInt64 n = I64# (intToInt64# n) +-toWord64 n = W64# (wordToWord64# n) +-#endif +-#else + toInt8 n = I8# n + toInt16 n = I16# n + toInt32 n = I32# n +@@ -986,7 +986,7 @@ type ByteOffset = Int64 + -- @since 0.2.2.0 + peekByteOffset :: Decoder s ByteOffset + peekByteOffset = Decoder (\k -> return (PeekByteOffset (\off# -> k (I64# +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (intToInt64# off#) + #else + off# +diff --git a/cborg/src/Codec/CBOR/Magic.hs b/cborg/src/Codec/CBOR/Magic.hs +index cdeb455..bfae638 100644 +--- a/cborg/src/Codec/CBOR/Magic.hs ++++ b/cborg/src/Codec/CBOR/Magic.hs +@@ -120,7 +120,7 @@ import qualified Numeric.Half as Half + import Data.Bits ((.|.), unsafeShiftL) + #endif + +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 (wordToWord64#, word64ToWord#, + intToInt64#, int64ToInt#, + leWord64#, ltWord64#, word64ToInt64#) +@@ -173,7 +173,7 @@ grabWord64 (Ptr ip#) = W64# (wordToWord64# (byteSwap# (word64ToWord# (indexWord6 + grabWord64 (Ptr ip#) = W64# (byteSwap# (indexWord64OffAddr# ip# 0#)) + #endif + #else +-grabWord64 (Ptr ip#) = W64# (byteSwap64# (word64ToWord# (indexWord64OffAddr# ip# 0#))) ++grabWord64 (Ptr ip#) = W64# (byteSwap64# (indexWord64OffAddr# ip# 0#)) + #endif + + #elif defined(MEM_UNALIGNED_OPS) && \ +@@ -484,7 +484,7 @@ word16ToInt (W16# w#) = I# (word2Int# (word16ToWord# w#)) + word32ToInt (W32# w#) = I# (word2Int# (word32ToWord# w#)) + #else + word32ToInt (W32# w#) = +- case isTrue# (w# `ltWord#` 0x80000000##) of ++ case isTrue# (word32ToWord# w# `ltWord#` 0x80000000##) of + True -> Just (I# (word2Int# (word32ToWord# w#))) + False -> Nothing + #endif +@@ -530,6 +530,19 @@ word64ToInt (W64# w#) = + {-# INLINE word64ToInt #-} + + #if defined(ARCH_32bit) ++#if MIN_VERSION_ghc_prim(0,8,0) ++word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# (word8ToWord# w#))) ++word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# (word16ToWord# w#))) ++word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# (word32ToWord# w#))) ++word64ToInt64 (W64# w#) = ++ case isTrue# (w# `ltWord64#` uncheckedShiftL64# (wordToWord64# 1##) 63#) of ++ True -> Just (I64# (word64ToInt64# w#)) ++ False -> Nothing ++ ++word8ToWord64 (W8# w#) = W64# (wordToWord64# (word8ToWord# w#)) ++word16ToWord64 (W16# w#) = W64# (wordToWord64# (word16ToWord# w#)) ++word32ToWord64 (W32# w#) = W64# (wordToWord64# (word32ToWord# w#)) ++#else + word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# w#)) + word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# w#)) + word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# w#)) +@@ -541,6 +554,7 @@ word64ToInt64 (W64# w#) = + word8ToWord64 (W8# w#) = W64# (wordToWord64# w#) + word16ToWord64 (W16# w#) = W64# (wordToWord64# w#) + word32ToWord64 (W32# w#) = W64# (wordToWord64# w#) ++#endif + + {-# INLINE word8ToInt64 #-} + {-# INLINE word16ToInt64 #-} +diff --git a/cborg/src/Codec/CBOR/Read.hs b/cborg/src/Codec/CBOR/Read.hs +index 6546575..c4dc761 100644 +--- a/cborg/src/Codec/CBOR/Read.hs ++++ b/cborg/src/Codec/CBOR/Read.hs +@@ -63,7 +63,7 @@ import qualified Data.Text as T + import qualified Data.Text.Encoding as T + import Data.Word + import GHC.Word +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 + #endif + import GHC.Exts +@@ -510,8 +510,8 @@ go_fast !bs da@(ConsumeNegWord64Canonical k) = + go_fast !bs da@(ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> go_fast_end bs da +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast (BS.unsafeDrop sz bs) + | otherwise -> go_fast_end bs da + + go_fast !bs da@(ConsumeListLen64Canonical k) = +@@ -994,8 +994,8 @@ go_fast_end !bs (ConsumeNegWord64Canonical k) = + go_fast_end !bs (ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> return $! SlowFail bs "expected int64" +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) + | otherwise -> return $! SlowFail bs "non-canonical int64" + + go_fast_end !bs (ConsumeListLen64Canonical k) = +@@ -1271,7 +1271,7 @@ go_slow da bs !offset = do + + SlowPeekByteOffset bs' k -> + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1381,7 +1381,7 @@ go_slow_overlapped da sz bs_cur bs_next !offset = + SlowPeekByteOffset bs_empty k -> + assert (BS.null bs_empty) $ do + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1565,17 +1565,17 @@ isIntCanonical sz i + {-# INLINE isWord64Canonical #-} + isWord64Canonical :: Int -> Word64 -> Bool + isWord64Canonical sz w +- | sz == 2 = w > 0x17) +- | sz == 3 = w > 0xff) +- | sz == 5 = w > 0xffff) +- | sz == 9 = w > 0xffffffff) ++ | sz == 2 = w > 0x17 ++ | sz == 3 = w > 0xff ++ | sz == 5 = w > 0xffff ++ | sz == 9 = w > 0xffffffff + | otherwise = True + + {-# INLINE isInt64Canonical #-} + isInt64Canonical :: Int -> Int64# -> Bool + isInt64Canonical sz i# +- | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (not64# w#) +- | otherwise = isWord64Canonical sz w# ++ | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (W64# (not64# w#)) ++ | otherwise = isWord64Canonical sz (W64# w#) + where + w# = int64ToWord64# i# + #endif +@@ -1796,7 +1796,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x1b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! toInteger w) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! toInteger w) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! toInteger w) + #endif +@@ -1838,7 +1838,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x3b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! (-1 - toInteger w)) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! (-1 - toInteger w)) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! (-1 - toInteger w)) + #endif diff --git a/srcpkgs/hoogle/patches/memory.patch b/srcpkgs/hoogle/patches/memory.patch new file mode 100644 index 00000000000..2a6d85b720d --- /dev/null +++ b/srcpkgs/hoogle/patches/memory.patch @@ -0,0 +1,36 @@ +From 2738929ce15b4c8704bbbac24a08539b5d4bf30e Mon Sep 17 00:00:00 2001 +From: sternenseemann +Date: Mon, 14 Aug 2023 10:51:30 +0200 +Subject: [PATCH] Data.Memory.Internal.CompatPrim64: fix 32 bit with GHC >= 9.4 + +Since 9.4, GHC.Prim exports Word64# operations like timesWord64# even on +i686 whereas GHC.IntWord64 no longer exists. Therefore, we can just use +the ready made solution. + +Closes #98, as it should be the better solution. +--- + Data/Memory/Internal/CompatPrim64.hs | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Data/Memory/Internal/CompatPrim64.hs b/Data/Memory/Internal/CompatPrim64.hs +index b9eef8a..a134c88 100644 +--- a/memory/Data/Memory/Internal/CompatPrim64.hs ++++ b/memory/Data/Memory/Internal/CompatPrim64.hs +@@ -150,6 +150,7 @@ w64# :: Word# -> Word# -> Word# -> Word64# + w64# w _ _ = w + + #elif WORD_SIZE_IN_BITS == 32 ++#if __GLASGOW_HASKELL__ < 904 + import GHC.IntWord64 + import GHC.Prim (Word#) + +@@ -158,6 +159,9 @@ timesWord64# a b = + let !ai = word64ToInt64# a + !bi = word64ToInt64# b + in int64ToWord64# (timesInt64# ai bi) ++#else ++import GHC.Prim ++#endif + + w64# :: Word# -> Word# -> Word# -> Word64# + w64# _ hw lw = diff --git a/srcpkgs/hoogle/template b/srcpkgs/hoogle/template index dc487cab401..18dba130f83 100644 --- a/srcpkgs/hoogle/template +++ b/srcpkgs/hoogle/template @@ -1,18 +1,31 @@ # Template file for 'hoogle' pkgname=hoogle -version=5.0.18.3 +version=5.0.18.4 revision=1 build_style=haskell-stack -stackage="lts-19.0" +stackage="lts-23.26" makedepends="zlib-devel" short_desc="Haskell API search engine" maintainer="Inokentiy Babushkin " license="BSD-3-Clause" homepage="https://hoogle.haskell.org/" -distfiles="https://github.com/ndmitchell/${pkgname}/archive/v${version}.tar.gz" -checksum=a2765fcbaf99fe67a64ef29fe50e69fb380cce07807cddeb0836c148b1ae472b +distfiles="https://github.com/ndmitchell/${pkgname}/archive/v${version}.tar.gz + https://hackage.haskell.org/package/basement-0.0.16/basement-0.0.16.tar.gz + https://hackage.haskell.org/package/memory-0.18.0/memory-0.18.0.tar.gz + https://hackage.haskell.org/package/cborg-0.2.10.0/cborg-0.2.10.0.tar.gz" +checksum="f42e1da527d3217e1adbb82c9611b945341b76b1fc85f47f9c04d711c73baf95 + 7fb77e249aef76ba5aed3059d556800ce02b614597c488ba01f0a16449146300 + fd4eb6f638e24b81b4e6cdd68772a531726f2f67686c8969d3407d82f7862e3e + 17fe070c38fc498cab49bcb9d6215b7747d53bedf96502e9bcce9cad73b9c797" nopie_files="/usr/bin/hoogle" nocross=yes # Can't yet cross compile Haskell +skip_extraction="basement-0.0.16.tar.gz memory-0.18.0.tar.gz cborg-0.2.10.0.tar.gz" + +post_extract() { + vsrcextract -C basement basement-0.0.16.tar.gz + vsrcextract -C memory memory-0.18.0.tar.gz + vsrcextract -C cborg cborg-0.2.10.0.tar.gz +} post_install() { vlicense LICENSE diff --git a/srcpkgs/kmonad/template b/srcpkgs/kmonad/template index 66542cf540e..27ea6be50c0 100644 --- a/srcpkgs/kmonad/template +++ b/srcpkgs/kmonad/template @@ -1,17 +1,15 @@ # Template file for 'kmonad' pkgname=kmonad -reverts="65b501defdd0049563752f8af8c8c57f5a1ae38b_1" -_githash=65b501defdd0049563752f8af8c8c57f5a1ae38b -version=0.4.1.20220321 +version=0.4.4 revision=1 build_style=haskell-stack -stackage=lts-19.0 +stackage=lts-23.26 short_desc="Keyboard remapping utility providing qmk-like functionality" maintainer="Orphaned " license="MIT" -homepage="https://github.com/david-janssen/kmonad" -distfiles="${homepage}/archive/${_githash}.tar.gz" -checksum=2b0cb0c5d1575bf61b1c442476ad24103028c309d103fedb56214a3bb30f8c0f +homepage="https://github.com/kmonad/kmonad" +distfiles="https://github.com/kmonad/kmonad/archive/refs/tags/${version}.tar.gz" +checksum=ce8d0a713f26b5ab6a216ea20ef9ec39e317dfa4ec70a51ca2b7df0c13a64786 nopie_files="/usr/bin/kmonad" nocross=yes diff --git a/srcpkgs/pandoc/files/pandoc-crossref.cabal b/srcpkgs/pandoc/files/pandoc-crossref.cabal deleted file mode 100644 index 7aacc47278f..00000000000 --- a/srcpkgs/pandoc/files/pandoc-crossref.cabal +++ /dev/null @@ -1,154 +0,0 @@ -cabal-version: 2.0 - --- This file has been generated from package.yaml by hpack version 0.34.6. --- --- see: https://github.com/sol/hpack --- --- hash: 20655cd6263e9fe7e5737ee81b093c8c6f5eae67e260ddd3a821ac6ef5e35e69 - -name: pandoc-crossref -version: 0.3.13.0 -synopsis: Pandoc filter for cross-references -description: pandoc-crossref is a pandoc filter for numbering figures, equations, tables and cross-references to them. -category: Text -homepage: https://github.com/lierdakil/pandoc-crossref#readme -bug-reports: https://github.com/lierdakil/pandoc-crossref/issues -author: Nikolay Yakimov -maintainer: root@livid.pp.ru -license: GPL-2 -license-file: LICENSE -build-type: Simple - -source-repository head - type: git - location: https://github.com/lierdakil/pandoc-crossref - -flag enable_flaky_tests - description: Some tests rely on specific behaviour of pandoc, which may change between minor versions. These are still useful indicators for the developer, but not necessarily indicating there's a problem with the package itself. Enable if you know what you are doing. - manual: True - default: False - -library - exposed-modules: - Text.Pandoc.CrossRef - other-modules: - Text.Pandoc.CrossRef.References - Text.Pandoc.CrossRef.References.Blocks - Text.Pandoc.CrossRef.References.List - Text.Pandoc.CrossRef.References.Refs - Text.Pandoc.CrossRef.References.Types - Text.Pandoc.CrossRef.Util.CodeBlockCaptions - Text.Pandoc.CrossRef.Util.CustomLabels - Text.Pandoc.CrossRef.Util.Meta - Text.Pandoc.CrossRef.Util.ModifyMeta - Text.Pandoc.CrossRef.Util.Options - Text.Pandoc.CrossRef.Util.Settings - Text.Pandoc.CrossRef.Util.Settings.Gen - Text.Pandoc.CrossRef.Util.Settings.Template - Text.Pandoc.CrossRef.Util.Template - Text.Pandoc.CrossRef.Util.Util - hs-source-dirs: - lib - lib-internal - ghc-options: -Wall - build-depends: - base >=4.11 && <5 - , containers >=0.1 && <0.7 - , data-default >=0.4 && <0.8 - , directory >=1 && <1.4 - , filepath >=1.1 && <1.5 - , microlens >=0.4.12.0 && <0.5.0.0 - , microlens-mtl >=0.2.0.1 && <0.3.0.0 - , microlens-th >=0.4.3.10 && <0.5.0.0 - , mtl >=1.1 && <2.3 - , pandoc >=2.10 && <2.18 - , pandoc-types >=1.21 && <1.23 - , roman-numerals ==0.5.* - , syb >=0.4 && <0.8 - , template-haskell >=2.7.0.0 && <3.0.0.0 - , text >=1.2.2 && <1.3 - , utility-ht >=0.0.11 && <0.1.0 - default-language: Haskell2010 - -executable pandoc-crossref - main-is: pandoc-crossref.hs - other-modules: - ManData - hs-source-dirs: - src - ghc-options: -Wall -threaded - build-depends: - base >=4.11 && <5 - , deepseq ==1.4.* - , gitrev >=1.3.1 && <1.4 - , open-browser ==0.2.* - , optparse-applicative >=0.13 && <0.17 - , pandoc >=2.10 && <2.18 - , pandoc-crossref - , pandoc-types >=1.21 && <1.23 - , template-haskell >=2.7.0.0 && <3.0.0.0 - , temporary >=1.2 && <1.4 - , text >=1.2.2 && <1.3 - default-language: Haskell2010 - -test-suite test-integrative - type: exitcode-stdio-1.0 - main-is: test-integrative.hs - hs-source-dirs: - test - ghc-options: -Wall -fno-warn-unused-do-bind -threaded - build-depends: - base >=4.11 && <5 - , directory >=1 && <1.4 - , filepath >=1.1 && <1.5 - , hspec >=2.4.4 && <3 - , pandoc >=2.10 && <2.18 - , pandoc-crossref - , pandoc-types >=1.21 && <1.23 - , text >=1.2.2 && <1.3 - if flag(enable_flaky_tests) - cpp-options: -DFLAKY - default-language: Haskell2010 - -test-suite test-pandoc-crossref - type: exitcode-stdio-1.0 - main-is: test-pandoc-crossref.hs - other-modules: - Native - Paths_pandoc_crossref - autogen-modules: - Paths_pandoc_crossref - hs-source-dirs: - test - ghc-options: -Wall -fno-warn-unused-do-bind -threaded - build-depends: - base >=4.11 && <5 - , containers >=0.1 && <0.7 - , data-default >=0.4 && <0.8 - , hspec >=2.4.4 && <3 - , microlens >=0.4.12.0 && <0.5.0.0 - , mtl >=1.1 && <2.3 - , pandoc >=2.10 && <2.18 - , pandoc-crossref - , pandoc-types >=1.21 && <1.23 - , text >=1.2.2 && <1.3 - if flag(enable_flaky_tests) - cpp-options: -DFLAKY - default-language: Haskell2010 - -benchmark simple - type: exitcode-stdio-1.0 - main-is: bench-simple.hs - other-modules: - Native - hs-source-dirs: - test - ghc-options: -Wall -fno-warn-unused-do-bind -threaded - build-depends: - base >=4.11 && <5 - , criterion >=1.5.9.0 && <1.6 - , pandoc >=2.10 && <2.18 - , pandoc-crossref - , pandoc-types >=1.21 && <1.23 - , text >=1.2.2 && <1.3 - default-language: Haskell2010 diff --git a/srcpkgs/pandoc/patches/basement.patch b/srcpkgs/pandoc/patches/basement.patch new file mode 100644 index 00000000000..e934f8e67b2 --- /dev/null +++ b/srcpkgs/pandoc/patches/basement.patch @@ -0,0 +1,242 @@ +From 38be2c93acb6f459d24ed6c626981c35ccf44095 Mon Sep 17 00:00:00 2001 +From: Sylvain Henry +Date: Thu, 16 Feb 2023 15:40:45 +0100 +Subject: [PATCH] Fix build on 32-bit architectures + +--- + basement/Basement/Bits.hs | 4 ++++ + basement/Basement/From.hs | 24 ----------------------- + basement/Basement/Numerical/Additive.hs | 4 ++++ + basement/Basement/Numerical/Conversion.hs | 20 +++++++++++++++++++ + basement/Basement/PrimType.hs | 6 +++++- + basement/Basement/Types/OffsetSize.hs | 22 +++++++++++++++++++-- + 6 files changed, 53 insertions(+), 27 deletions(-) + +diff --git a/basement/Basement/Bits.hs b/basement/Basement/Bits.hs +index 7eeea0f5..24520ed7 100644 +--- a/basement/Basement/Bits.hs ++++ b/basement/Basement/Bits.hs +@@ -54,8 +54,12 @@ import GHC.Int + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | operation over finite bits + class FiniteBitsOps bits where +diff --git a/basement/Basement/From.hs b/basement/Basement/From.hs +index 7bbe141c..80014b3e 100644 +--- a/basement/Basement/From.hs ++++ b/basement/Basement/From.hs +@@ -272,23 +272,11 @@ instance (NatWithinBound (CountOf ty) n, KnownNat n, PrimType ty) + tryFrom = BlockN.toBlockN . UArray.toBlock . BoxArray.mapToUnboxed id + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn64 n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn64 n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn64 n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance From (Zn64 n) Word64 where + from = unZn64 + instance From (Zn64 n) Word128 where +@@ -297,23 +285,11 @@ instance From (Zn64 n) Word256 where + from = from . unZn64 + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word64 n) => From (Zn n) Word64 where + from = naturalToWord64 . unZn + instance (KnownNat n, NatWithinBound Word128 n) => From (Zn n) Word128 where +diff --git a/basement/Basement/Numerical/Additive.hs b/basement/Basement/Numerical/Additive.hs +index d0dfb973..8ab65aa0 100644 +--- a/basement/Basement/Numerical/Additive.hs ++++ b/basement/Basement/Numerical/Additive.hs +@@ -30,8 +30,12 @@ import qualified Basement.Types.Word128 as Word128 + import qualified Basement.Types.Word256 as Word256 + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | Represent class of things that can be added together, + -- contains a neutral element and is commutative. +diff --git a/basement/Basement/Numerical/Conversion.hs b/basement/Basement/Numerical/Conversion.hs +index db502c07..fddc8232 100644 +--- a/basement/Basement/Numerical/Conversion.hs ++++ b/basement/Basement/Numerical/Conversion.hs +@@ -26,8 +26,12 @@ import GHC.Word + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + intToInt64 :: Int -> Int64 + #if WORD_SIZE_IN_BITS == 64 +@@ -96,11 +100,22 @@ int64ToWord64 (I64# i) = W64# (int64ToWord64# i) + #endif + + #if WORD_SIZE_IN_BITS == 64 ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord# :: Word64# -> Word# ++word64ToWord# i = word64ToWord# i ++#else + word64ToWord# :: Word# -> Word# + word64ToWord# i = i ++#endif + {-# INLINE word64ToWord# #-} + #endif + ++#if WORD_SIZE_IN_BITS < 64 ++word64ToWord32# :: Word64# -> Word32# ++word64ToWord32# i = wordToWord32# (word64ToWord# i) ++{-# INLINE word64ToWord32# #-} ++#endif ++ + -- | 2 Word32s + data Word32x2 = Word32x2 {-# UNPACK #-} !Word32 + {-# UNPACK #-} !Word32 +@@ -113,9 +128,14 @@ word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# (G + word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# w64 32#))) (W32# (wordToWord32# w64)) + #endif + #else ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord32s :: Word64 -> Word32x2 ++word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord32# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord32# w64)) ++#else + word64ToWord32s :: Word64 -> Word32x2 + word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord# w64)) + #endif ++#endif + + wordToChar :: Word -> Char + wordToChar (W# word) = C# (chr# (word2Int# word)) +diff --git a/basement/Basement/PrimType.hs b/basement/Basement/PrimType.hs +index f8ca2926..a888ec91 100644 +--- a/basement/Basement/PrimType.hs ++++ b/basement/Basement/PrimType.hs +@@ -54,7 +54,11 @@ import Basement.Nat + import qualified Prelude (quot) + + #if WORD_SIZE_IN_BITS < 64 +-import GHC.IntWord64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else ++import GHC.IntWord64 ++#endif + #endif + + #ifdef FOUNDATION_BOUNDS_CHECK +diff --git a/basement/Basement/Types/OffsetSize.hs b/basement/Basement/Types/OffsetSize.hs +index cd944927..1ea80dad 100644 +--- a/basement/Basement/Types/OffsetSize.hs ++++ b/basement/Basement/Types/OffsetSize.hs +@@ -70,8 +70,12 @@ import Data.List (foldl') + import qualified Prelude + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | File size in bytes + newtype FileSize = FileSize Word64 +@@ -225,20 +229,26 @@ countOfRoundUp alignment (CountOf n) = CountOf ((n + (alignment-1)) .&. compleme + + csizeOfSize :: CountOf Word8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfSize (CountOf (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfSize (CountOf (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfSize (CountOf (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +- + #else + csizeOfSize (CountOf (I# sz)) = CSize (W64# (int2Word# sz)) +- + #endif + #endif + + csizeOfOffset :: Offset8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfOffset (Offset (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfOffset (Offset (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfOffset (Offset (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +@@ -250,7 +260,11 @@ csizeOfOffset (Offset (I# sz)) = CSize (W64# (int2Word# sz)) + sizeOfCSSize :: CSsize -> CountOf Word8 + sizeOfCSSize (CSsize (-1)) = error "invalid size: CSSize is -1" + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# (int32ToInt# sz)) ++#else + sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# sz) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# (int64ToInt# sz)) +@@ -261,7 +275,11 @@ sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# sz) + + sizeOfCSize :: CSize -> CountOf Word8 + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# (word32ToWord# sz))) ++#else + sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSize (CSize (W64# sz)) = CountOf (I# (word2Int# (word64ToWord# sz))) diff --git a/srcpkgs/pandoc/patches/cborg-bounds.patch b/srcpkgs/pandoc/patches/cborg-bounds.patch new file mode 100644 index 00000000000..9f13fa50253 --- /dev/null +++ b/srcpkgs/pandoc/patches/cborg-bounds.patch @@ -0,0 +1,11 @@ +--- a/cborg/cborg.cabal 2025-07-06 20:31:00.307574779 +0100 ++++ b/cborg/cborg.cabal 2025-07-06 20:31:05.085962403 +0100 +@@ -164,7 +164,7 @@ + scientific >= 0.3 && < 0.4, + tasty >= 0.11 && < 1.6, + tasty-hunit >= 0.9 && < 0.11, +- tasty-quickcheck >= 0.8 && < 0.11, ++ tasty-quickcheck >= 0.8 && < 0.12, + vector >= 0.10 && < 0.14 + if !impl(ghc >= 8.0) + build-depends: diff --git a/srcpkgs/pandoc/patches/cborg.patch b/srcpkgs/pandoc/patches/cborg.patch new file mode 100644 index 00000000000..b44ba514458 --- /dev/null +++ b/srcpkgs/pandoc/patches/cborg.patch @@ -0,0 +1,212 @@ +commit 9d1418bb8b38cb9a438d7f18835b1ef7ef12b234 +Author: amesgen +Date: Sun Sep 10 20:03:40 2023 +0200 + + Fix compilation and support GHC >=9.2 on 32bit + +diff --git a/cborg/src/Codec/CBOR/Decoding.hs b/cborg/src/Codec/CBOR/Decoding.hs +index a7d774c..bf68e68 100644 +--- a/cborg/src/Codec/CBOR/Decoding.hs ++++ b/cborg/src/Codec/CBOR/Decoding.hs +@@ -315,11 +315,16 @@ getDecodeAction (Decoder k) = k (\x -> return (Done x)) + toInt8 :: Int# -> Int8 + toInt16 :: Int# -> Int16 + toInt32 :: Int# -> Int32 +-toInt64 :: Int# -> Int64 + toWord8 :: Word# -> Word8 + toWord16 :: Word# -> Word16 + toWord32 :: Word# -> Word32 ++#if defined(ARCH_64bit) ++toInt64 :: Int# -> Int64 + toWord64 :: Word# -> Word64 ++#else ++toInt64 :: Int64# -> Int64 ++toWord64 :: Word64# -> Word64 ++#endif + #if MIN_VERSION_ghc_prim(0,8,0) + toInt8 n = I8# (intToInt8# n) + toInt16 n = I16# (intToInt16# n) +@@ -327,8 +332,7 @@ toInt32 n = I32# (intToInt32# n) + toWord8 n = W8# (wordToWord8# n) + toWord16 n = W16# (wordToWord16# n) + toWord32 n = W32# (wordToWord32# n) +-#if WORD_SIZE_IN_BITS == 64 +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && defined(ARCH_64bit) + toInt64 n = I64# (intToInt64# n) + toWord64 n = W64# (wordToWord64# n) + #else +@@ -336,10 +340,6 @@ toInt64 n = I64# n + toWord64 n = W64# n + #endif + #else +-toInt64 n = I64# (intToInt64# n) +-toWord64 n = W64# (wordToWord64# n) +-#endif +-#else + toInt8 n = I8# n + toInt16 n = I16# n + toInt32 n = I32# n +@@ -986,7 +986,7 @@ type ByteOffset = Int64 + -- @since 0.2.2.0 + peekByteOffset :: Decoder s ByteOffset + peekByteOffset = Decoder (\k -> return (PeekByteOffset (\off# -> k (I64# +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (intToInt64# off#) + #else + off# +diff --git a/cborg/src/Codec/CBOR/Magic.hs b/cborg/src/Codec/CBOR/Magic.hs +index cdeb455..bfae638 100644 +--- a/cborg/src/Codec/CBOR/Magic.hs ++++ b/cborg/src/Codec/CBOR/Magic.hs +@@ -120,7 +120,7 @@ import qualified Numeric.Half as Half + import Data.Bits ((.|.), unsafeShiftL) + #endif + +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 (wordToWord64#, word64ToWord#, + intToInt64#, int64ToInt#, + leWord64#, ltWord64#, word64ToInt64#) +@@ -173,7 +173,7 @@ grabWord64 (Ptr ip#) = W64# (wordToWord64# (byteSwap# (word64ToWord# (indexWord6 + grabWord64 (Ptr ip#) = W64# (byteSwap# (indexWord64OffAddr# ip# 0#)) + #endif + #else +-grabWord64 (Ptr ip#) = W64# (byteSwap64# (word64ToWord# (indexWord64OffAddr# ip# 0#))) ++grabWord64 (Ptr ip#) = W64# (byteSwap64# (indexWord64OffAddr# ip# 0#)) + #endif + + #elif defined(MEM_UNALIGNED_OPS) && \ +@@ -484,7 +484,7 @@ word16ToInt (W16# w#) = I# (word2Int# (word16ToWord# w#)) + word32ToInt (W32# w#) = I# (word2Int# (word32ToWord# w#)) + #else + word32ToInt (W32# w#) = +- case isTrue# (w# `ltWord#` 0x80000000##) of ++ case isTrue# (word32ToWord# w# `ltWord#` 0x80000000##) of + True -> Just (I# (word2Int# (word32ToWord# w#))) + False -> Nothing + #endif +@@ -530,6 +530,19 @@ word64ToInt (W64# w#) = + {-# INLINE word64ToInt #-} + + #if defined(ARCH_32bit) ++#if MIN_VERSION_ghc_prim(0,8,0) ++word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# (word8ToWord# w#))) ++word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# (word16ToWord# w#))) ++word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# (word32ToWord# w#))) ++word64ToInt64 (W64# w#) = ++ case isTrue# (w# `ltWord64#` uncheckedShiftL64# (wordToWord64# 1##) 63#) of ++ True -> Just (I64# (word64ToInt64# w#)) ++ False -> Nothing ++ ++word8ToWord64 (W8# w#) = W64# (wordToWord64# (word8ToWord# w#)) ++word16ToWord64 (W16# w#) = W64# (wordToWord64# (word16ToWord# w#)) ++word32ToWord64 (W32# w#) = W64# (wordToWord64# (word32ToWord# w#)) ++#else + word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# w#)) + word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# w#)) + word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# w#)) +@@ -541,6 +554,7 @@ word64ToInt64 (W64# w#) = + word8ToWord64 (W8# w#) = W64# (wordToWord64# w#) + word16ToWord64 (W16# w#) = W64# (wordToWord64# w#) + word32ToWord64 (W32# w#) = W64# (wordToWord64# w#) ++#endif + + {-# INLINE word8ToInt64 #-} + {-# INLINE word16ToInt64 #-} +diff --git a/cborg/src/Codec/CBOR/Read.hs b/cborg/src/Codec/CBOR/Read.hs +index 6546575..c4dc761 100644 +--- a/cborg/src/Codec/CBOR/Read.hs ++++ b/cborg/src/Codec/CBOR/Read.hs +@@ -63,7 +63,7 @@ import qualified Data.Text as T + import qualified Data.Text.Encoding as T + import Data.Word + import GHC.Word +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 + #endif + import GHC.Exts +@@ -510,8 +510,8 @@ go_fast !bs da@(ConsumeNegWord64Canonical k) = + go_fast !bs da@(ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> go_fast_end bs da +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast (BS.unsafeDrop sz bs) + | otherwise -> go_fast_end bs da + + go_fast !bs da@(ConsumeListLen64Canonical k) = +@@ -994,8 +994,8 @@ go_fast_end !bs (ConsumeNegWord64Canonical k) = + go_fast_end !bs (ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> return $! SlowFail bs "expected int64" +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) + | otherwise -> return $! SlowFail bs "non-canonical int64" + + go_fast_end !bs (ConsumeListLen64Canonical k) = +@@ -1271,7 +1271,7 @@ go_slow da bs !offset = do + + SlowPeekByteOffset bs' k -> + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1381,7 +1381,7 @@ go_slow_overlapped da sz bs_cur bs_next !offset = + SlowPeekByteOffset bs_empty k -> + assert (BS.null bs_empty) $ do + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1565,17 +1565,17 @@ isIntCanonical sz i + {-# INLINE isWord64Canonical #-} + isWord64Canonical :: Int -> Word64 -> Bool + isWord64Canonical sz w +- | sz == 2 = w > 0x17) +- | sz == 3 = w > 0xff) +- | sz == 5 = w > 0xffff) +- | sz == 9 = w > 0xffffffff) ++ | sz == 2 = w > 0x17 ++ | sz == 3 = w > 0xff ++ | sz == 5 = w > 0xffff ++ | sz == 9 = w > 0xffffffff + | otherwise = True + + {-# INLINE isInt64Canonical #-} + isInt64Canonical :: Int -> Int64# -> Bool + isInt64Canonical sz i# +- | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (not64# w#) +- | otherwise = isWord64Canonical sz w# ++ | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (W64# (not64# w#)) ++ | otherwise = isWord64Canonical sz (W64# w#) + where + w# = int64ToWord64# i# + #endif +@@ -1796,7 +1796,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x1b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! toInteger w) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! toInteger w) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! toInteger w) + #endif +@@ -1838,7 +1838,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x3b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! (-1 - toInteger w)) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! (-1 - toInteger w)) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! (-1 - toInteger w)) + #endif diff --git a/srcpkgs/pandoc/patches/fix-musl-build.patch b/srcpkgs/pandoc/patches/fix-musl-build.patch index 79e439f0f65..dc454713605 100644 --- a/srcpkgs/pandoc/patches/fix-musl-build.patch +++ b/srcpkgs/pandoc/patches/fix-musl-build.patch @@ -1,8 +1,8 @@ # See https://github.com/lierdakil/pandoc-crossref/issues/342#issuecomment-1073256586 ---- a/pandoc-crossref-0.3.17.0/pandoc-crossref.cabal 2001-09-08 22:46:40.000000000 -0300 -+++ b/pandoc-crossref-0.3.17.0/pandoc-crossref.cabal 2024-03-26 17:16:02.918173738 -0300 -@@ -127,20 +127,6 @@ +--- a/pandoc-crossref-0.3.18.1/pandoc-crossref.cabal 2001-09-09 02:46:40.000000000 +0100 ++++ a/pandoc-crossref-0.3.18.1/pandoc-crossref.cabal 2025-07-03 17:23:13.941135615 +0100 +@@ -133,20 +133,6 @@ library exposed-modules: Text.Pandoc.CrossRef @@ -12,10 +12,10 @@ - build-depends: - base >=4.11 && <5 - , mtl >=1.1 && <2.4 -- , pandoc >=3.1.8 && <3.2 +- , pandoc >=3.1.8 && <3.7 - , pandoc-crossref-internal - , pandoc-types ==1.23.* -- , text >=1.2.2 && <2.1 +- , text >=1.2.2 && <2.2 - default-language: Haskell2010 - -library pandoc-crossref-internal @@ -23,21 +23,19 @@ Text.Numeral.Roman Text.Pandoc.CrossRef.References Text.Pandoc.CrossRef.References.Blocks -@@ -165,7 +151,9 @@ +@@ -171,6 +157,7 @@ Text.Pandoc.CrossRef.Util.Template Text.Pandoc.CrossRef.Util.Util hs-source-dirs: + lib lib-internal -+ ghc-options: -Wall build-depends: base >=4.11 && <5 - , containers >=0.1 && <0.7 -@@ -247,7 +235,6 @@ +@@ -253,7 +240,6 @@ , mtl >=1.1 && <2.4 - , pandoc >=3.1.8 && <3.2 + , pandoc >=3.1.8 && <3.7 , pandoc-crossref - , pandoc-crossref-internal , pandoc-types ==1.23.* - , text >=1.2.2 && <2.1 - if flag(enable_flaky_tests) + , text >=1.2.2 && <2.2 + default-language: Haskell2010 diff --git a/srcpkgs/pandoc/patches/memory.patch b/srcpkgs/pandoc/patches/memory.patch new file mode 100644 index 00000000000..2a6d85b720d --- /dev/null +++ b/srcpkgs/pandoc/patches/memory.patch @@ -0,0 +1,36 @@ +From 2738929ce15b4c8704bbbac24a08539b5d4bf30e Mon Sep 17 00:00:00 2001 +From: sternenseemann +Date: Mon, 14 Aug 2023 10:51:30 +0200 +Subject: [PATCH] Data.Memory.Internal.CompatPrim64: fix 32 bit with GHC >= 9.4 + +Since 9.4, GHC.Prim exports Word64# operations like timesWord64# even on +i686 whereas GHC.IntWord64 no longer exists. Therefore, we can just use +the ready made solution. + +Closes #98, as it should be the better solution. +--- + Data/Memory/Internal/CompatPrim64.hs | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Data/Memory/Internal/CompatPrim64.hs b/Data/Memory/Internal/CompatPrim64.hs +index b9eef8a..a134c88 100644 +--- a/memory/Data/Memory/Internal/CompatPrim64.hs ++++ b/memory/Data/Memory/Internal/CompatPrim64.hs +@@ -150,6 +150,7 @@ w64# :: Word# -> Word# -> Word# -> Word64# + w64# w _ _ = w + + #elif WORD_SIZE_IN_BITS == 32 ++#if __GLASGOW_HASKELL__ < 904 + import GHC.IntWord64 + import GHC.Prim (Word#) + +@@ -158,6 +159,9 @@ timesWord64# a b = + let !ai = word64ToInt64# a + !bi = word64ToInt64# b + in int64ToWord64# (timesInt64# ai bi) ++#else ++import GHC.Prim ++#endif + + w64# :: Word# -> Word# -> Word# -> Word64# + w64# _ hw lw = diff --git a/srcpkgs/pandoc/patches/tasty-bench.patch b/srcpkgs/pandoc/patches/tasty-bench.patch new file mode 100644 index 00000000000..3e0ba24aa08 --- /dev/null +++ b/srcpkgs/pandoc/patches/tasty-bench.patch @@ -0,0 +1,11 @@ +--- a/pandoc-3.6/pandoc.cabal ++++ b/pandoc-3.6/pandoc.cabal +@@ -866,7 +866,7 @@ + main-is: benchmark-pandoc.hs + hs-source-dirs: benchmark + build-depends: bytestring, +- tasty-bench >= 0.2 && <= 0.4, ++ tasty-bench >= 0.2 && <= 0.4.1, + mtl >= 2.2 && < 2.4, + text >= 1.1.1.0 && < 2.2, + deepseq diff --git a/srcpkgs/pandoc/template b/srcpkgs/pandoc/template index cbc10d274e1..8f6945228ea 100644 --- a/srcpkgs/pandoc/template +++ b/srcpkgs/pandoc/template @@ -1,16 +1,16 @@ # Template file for 'pandoc' pkgname=pandoc # Keep in sync with http://www.stackage.org/lts -version=3.1.11.1 +version=3.6 revision=1 _sidenote_version=0.23.0.0 -_crossref_version=0.3.17.0 +_crossref_version=0.3.18.1 create_wrksrc=yes build_style=haskell-stack -stackage="lts-22.13" +stackage="lts-23.26" make_build_args=" --flag pandoc:embed_data_files - --flag=lua:pkg-config" + --flag lua:pkg-config" hostmakedepends="pkg-config unzip wget" makedepends="zlib-devel lua54-devel tar" short_desc="Universal converter between markup formats" @@ -20,16 +20,29 @@ homepage="http://johnmacfarlane.net/pandoc/" distfiles="https://hackage.haskell.org/package/pandoc-${version}/pandoc-${version}.tar.gz https://hackage.haskell.org/package/pandoc-cli-${version}/pandoc-cli-${version}.tar.gz https://hackage.haskell.org/package/pandoc-sidenote-${_sidenote_version}/pandoc-sidenote-${_sidenote_version}.tar.gz - https://hackage.haskell.org/package/pandoc-crossref-${_crossref_version}/pandoc-crossref-${_crossref_version}.tar.gz" -checksum="ef968d654000e5b21943573039fee92b132b547790fb1471f363abeb09dbcf79 - b7c8200012e22059410c70c1dab522eed151ca276c0a0d50c825c06df8d0c249 + https://hackage.haskell.org/package/pandoc-crossref-${_crossref_version}/pandoc-crossref-${_crossref_version}.tar.gz + https://hackage.haskell.org/package/basement-0.0.16/basement-0.0.16.tar.gz + https://hackage.haskell.org/package/memory-0.18.0/memory-0.18.0.tar.gz + https://hackage.haskell.org/package/cborg-0.2.10.0/cborg-0.2.10.0.tar.gz" +checksum="da963bfd49852fd1364604f616f71168fd4558606f265159bf1f42da1f97f9b8 + 07dccd028aff2e5d8c4e4a970a9d0ec33ee941d574e3b84e29af249a81a83833 2722ca9cf7bed62658f669a3ec2026de0e0e80941b499a25e660adcf977eec2d - 8eb1fab686654cbbb7d2aa651d08b194a9634c3645df1d8d081a7e463db76f9a" + e4353c29af9db8c2b898254c5146aa922c221d9b2ec2becbbc9e58294fbbfaaf + 7fb77e249aef76ba5aed3059d556800ce02b614597c488ba01f0a16449146300 + fd4eb6f638e24b81b4e6cdd68772a531726f2f67686c8969d3407d82f7862e3e + 17fe070c38fc498cab49bcb9d6215b7747d53bedf96502e9bcce9cad73b9c797" nocross=yes nopie_files=" /usr/bin/pandoc /usr/bin/pandoc-sidenote /usr/bin/pandoc-crossref" +skip_extraction="basement-0.0.16.tar.gz memory-0.18.0.tar.gz cborg-0.2.10.0.tar.gz" + +post_extract() { + vsrcextract -C basement basement-0.0.16.tar.gz + vsrcextract -C memory memory-0.18.0.tar.gz + vsrcextract -C cborg cborg-0.2.10.0.tar.gz +} post_install() { vman pandoc-cli-${version}/man/pandoc.1 diff --git a/srcpkgs/postgrest/patches/basement.patch b/srcpkgs/postgrest/patches/basement.patch new file mode 100644 index 00000000000..e934f8e67b2 --- /dev/null +++ b/srcpkgs/postgrest/patches/basement.patch @@ -0,0 +1,242 @@ +From 38be2c93acb6f459d24ed6c626981c35ccf44095 Mon Sep 17 00:00:00 2001 +From: Sylvain Henry +Date: Thu, 16 Feb 2023 15:40:45 +0100 +Subject: [PATCH] Fix build on 32-bit architectures + +--- + basement/Basement/Bits.hs | 4 ++++ + basement/Basement/From.hs | 24 ----------------------- + basement/Basement/Numerical/Additive.hs | 4 ++++ + basement/Basement/Numerical/Conversion.hs | 20 +++++++++++++++++++ + basement/Basement/PrimType.hs | 6 +++++- + basement/Basement/Types/OffsetSize.hs | 22 +++++++++++++++++++-- + 6 files changed, 53 insertions(+), 27 deletions(-) + +diff --git a/basement/Basement/Bits.hs b/basement/Basement/Bits.hs +index 7eeea0f5..24520ed7 100644 +--- a/basement/Basement/Bits.hs ++++ b/basement/Basement/Bits.hs +@@ -54,8 +54,12 @@ import GHC.Int + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | operation over finite bits + class FiniteBitsOps bits where +diff --git a/basement/Basement/From.hs b/basement/Basement/From.hs +index 7bbe141c..80014b3e 100644 +--- a/basement/Basement/From.hs ++++ b/basement/Basement/From.hs +@@ -272,23 +272,11 @@ instance (NatWithinBound (CountOf ty) n, KnownNat n, PrimType ty) + tryFrom = BlockN.toBlockN . UArray.toBlock . BoxArray.mapToUnboxed id + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn64 n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn64 n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn64 n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance From (Zn64 n) Word64 where + from = unZn64 + instance From (Zn64 n) Word128 where +@@ -297,23 +285,11 @@ instance From (Zn64 n) Word256 where + from = from . unZn64 + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word64 n) => From (Zn n) Word64 where + from = naturalToWord64 . unZn + instance (KnownNat n, NatWithinBound Word128 n) => From (Zn n) Word128 where +diff --git a/basement/Basement/Numerical/Additive.hs b/basement/Basement/Numerical/Additive.hs +index d0dfb973..8ab65aa0 100644 +--- a/basement/Basement/Numerical/Additive.hs ++++ b/basement/Basement/Numerical/Additive.hs +@@ -30,8 +30,12 @@ import qualified Basement.Types.Word128 as Word128 + import qualified Basement.Types.Word256 as Word256 + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | Represent class of things that can be added together, + -- contains a neutral element and is commutative. +diff --git a/basement/Basement/Numerical/Conversion.hs b/basement/Basement/Numerical/Conversion.hs +index db502c07..fddc8232 100644 +--- a/basement/Basement/Numerical/Conversion.hs ++++ b/basement/Basement/Numerical/Conversion.hs +@@ -26,8 +26,12 @@ import GHC.Word + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + intToInt64 :: Int -> Int64 + #if WORD_SIZE_IN_BITS == 64 +@@ -96,11 +100,22 @@ int64ToWord64 (I64# i) = W64# (int64ToWord64# i) + #endif + + #if WORD_SIZE_IN_BITS == 64 ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord# :: Word64# -> Word# ++word64ToWord# i = word64ToWord# i ++#else + word64ToWord# :: Word# -> Word# + word64ToWord# i = i ++#endif + {-# INLINE word64ToWord# #-} + #endif + ++#if WORD_SIZE_IN_BITS < 64 ++word64ToWord32# :: Word64# -> Word32# ++word64ToWord32# i = wordToWord32# (word64ToWord# i) ++{-# INLINE word64ToWord32# #-} ++#endif ++ + -- | 2 Word32s + data Word32x2 = Word32x2 {-# UNPACK #-} !Word32 + {-# UNPACK #-} !Word32 +@@ -113,9 +128,14 @@ word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# (G + word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# w64 32#))) (W32# (wordToWord32# w64)) + #endif + #else ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord32s :: Word64 -> Word32x2 ++word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord32# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord32# w64)) ++#else + word64ToWord32s :: Word64 -> Word32x2 + word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord# w64)) + #endif ++#endif + + wordToChar :: Word -> Char + wordToChar (W# word) = C# (chr# (word2Int# word)) +diff --git a/basement/Basement/PrimType.hs b/basement/Basement/PrimType.hs +index f8ca2926..a888ec91 100644 +--- a/basement/Basement/PrimType.hs ++++ b/basement/Basement/PrimType.hs +@@ -54,7 +54,11 @@ import Basement.Nat + import qualified Prelude (quot) + + #if WORD_SIZE_IN_BITS < 64 +-import GHC.IntWord64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else ++import GHC.IntWord64 ++#endif + #endif + + #ifdef FOUNDATION_BOUNDS_CHECK +diff --git a/basement/Basement/Types/OffsetSize.hs b/basement/Basement/Types/OffsetSize.hs +index cd944927..1ea80dad 100644 +--- a/basement/Basement/Types/OffsetSize.hs ++++ b/basement/Basement/Types/OffsetSize.hs +@@ -70,8 +70,12 @@ import Data.List (foldl') + import qualified Prelude + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | File size in bytes + newtype FileSize = FileSize Word64 +@@ -225,20 +229,26 @@ countOfRoundUp alignment (CountOf n) = CountOf ((n + (alignment-1)) .&. compleme + + csizeOfSize :: CountOf Word8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfSize (CountOf (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfSize (CountOf (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfSize (CountOf (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +- + #else + csizeOfSize (CountOf (I# sz)) = CSize (W64# (int2Word# sz)) +- + #endif + #endif + + csizeOfOffset :: Offset8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfOffset (Offset (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfOffset (Offset (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfOffset (Offset (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +@@ -250,7 +260,11 @@ csizeOfOffset (Offset (I# sz)) = CSize (W64# (int2Word# sz)) + sizeOfCSSize :: CSsize -> CountOf Word8 + sizeOfCSSize (CSsize (-1)) = error "invalid size: CSSize is -1" + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# (int32ToInt# sz)) ++#else + sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# sz) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# (int64ToInt# sz)) +@@ -261,7 +275,11 @@ sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# sz) + + sizeOfCSize :: CSize -> CountOf Word8 + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# (word32ToWord# sz))) ++#else + sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSize (CSize (W64# sz)) = CountOf (I# (word2Int# (word64ToWord# sz))) diff --git a/srcpkgs/postgrest/patches/data-bword.patch b/srcpkgs/postgrest/patches/data-bword.patch new file mode 100644 index 00000000000..af2951d4bbd --- /dev/null +++ b/srcpkgs/postgrest/patches/data-bword.patch @@ -0,0 +1,38 @@ +diff -ru data-bword-old/src/Data/BinaryWord.hs data-bword/src/Data/BinaryWord.hs +--- a/data-bword/src/Data/BinaryWord.hs 2001-09-09 02:46:40.000000000 +0100 ++++ b/data-bword/src/Data/BinaryWord.hs 2025-07-09 15:54:46.655592632 +0100 +@@ -26,7 +26,7 @@ + #if __GLASGOW_HASKELL__ >= 705 + import GHC.Prim (plusWord2#, timesWord2#) + # if __GLASGOW_HASKELL__ >= 904 +-import GHC.Prim (word64ToWord#, wordToWord64#) ++import GHC.Prim (word32ToWord#, wordToWord32#, word64ToWord#, wordToWord64#) + # endif + # if WORD_SIZE_IN_BITS == 32 + import GHC.Word (Word32(..)) +@@ -217,9 +217,9 @@ + {-# INLINE signedWord #-} + #if __GLASGOW_HASKELL__ >= 705 && WORD_SIZE_IN_BITS == 32 + unwrappedAdd (W32# x) (W32# y) = hi `seq` lo `seq` (hi, lo) +- where !(# hi', lo' #) = plusWord2# x y +- lo = W32# lo' +- hi = W32# hi' ++ where !(# hi', lo' #) = plusWord2# (word32ToWord# x) (word32ToWord# y) ++ lo = W32# (wordToWord32# lo') ++ hi = W32# (wordToWord32# hi') + #else + unwrappedAdd x y = hi `seq` lo `seq` (hi, lo) + where s = fromIntegral x + fromIntegral y ∷ Word64 +@@ -229,9 +229,9 @@ + {-# INLINE unwrappedAdd #-} + #if __GLASGOW_HASKELL__ >= 705 && WORD_SIZE_IN_BITS == 32 + unwrappedMul (W32# x) (W32# y) = hi `seq` lo `seq` (hi, lo) +- where !(# hi', lo' #) = timesWord2# x y +- lo = W32# lo' +- hi = W32# hi' ++ where !(# hi', lo' #) = timesWord2# (word32ToWord# x) (word32ToWord# y) ++ lo = W32# (wordToWord32# lo') ++ hi = W32# (wordToWord32# hi') + #else + unwrappedMul x y = hi `seq` lo `seq` (hi, lo) + where p = fromIntegral x * fromIntegral y ∷ Word64 diff --git a/srcpkgs/postgrest/patches/memory.patch b/srcpkgs/postgrest/patches/memory.patch new file mode 100644 index 00000000000..2a6d85b720d --- /dev/null +++ b/srcpkgs/postgrest/patches/memory.patch @@ -0,0 +1,36 @@ +From 2738929ce15b4c8704bbbac24a08539b5d4bf30e Mon Sep 17 00:00:00 2001 +From: sternenseemann +Date: Mon, 14 Aug 2023 10:51:30 +0200 +Subject: [PATCH] Data.Memory.Internal.CompatPrim64: fix 32 bit with GHC >= 9.4 + +Since 9.4, GHC.Prim exports Word64# operations like timesWord64# even on +i686 whereas GHC.IntWord64 no longer exists. Therefore, we can just use +the ready made solution. + +Closes #98, as it should be the better solution. +--- + Data/Memory/Internal/CompatPrim64.hs | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Data/Memory/Internal/CompatPrim64.hs b/Data/Memory/Internal/CompatPrim64.hs +index b9eef8a..a134c88 100644 +--- a/memory/Data/Memory/Internal/CompatPrim64.hs ++++ b/memory/Data/Memory/Internal/CompatPrim64.hs +@@ -150,6 +150,7 @@ w64# :: Word# -> Word# -> Word# -> Word64# + w64# w _ _ = w + + #elif WORD_SIZE_IN_BITS == 32 ++#if __GLASGOW_HASKELL__ < 904 + import GHC.IntWord64 + import GHC.Prim (Word#) + +@@ -158,6 +159,9 @@ timesWord64# a b = + let !ai = word64ToInt64# a + !bi = word64ToInt64# b + in int64ToWord64# (timesInt64# ai bi) ++#else ++import GHC.Prim ++#endif + + w64# :: Word# -> Word# -> Word# -> Word64# + w64# _ hw lw = diff --git a/srcpkgs/postgrest/patches/project.patch b/srcpkgs/postgrest/patches/project.patch new file mode 100644 index 00000000000..cbaf996dd83 --- /dev/null +++ b/srcpkgs/postgrest/patches/project.patch @@ -0,0 +1,8 @@ +--- a/cabal.project 2025-07-07 17:29:28.447471490 +0100 ++++ b/cabal.project 2025-07-07 17:29:48.730469893 +0100 +@@ -1,4 +1,4 @@ +-packages: postgrest.cabal ++packages: ./basement ./memory ./data-bword postgrest.cabal + tests: true + package * + ghc-options: -split-sections diff --git a/srcpkgs/postgrest/template b/srcpkgs/postgrest/template index 9c7af3039fe..157af3bc65d 100644 --- a/srcpkgs/postgrest/template +++ b/srcpkgs/postgrest/template @@ -1,35 +1,32 @@ # Template file for 'postgrest' pkgname=postgrest -version=10.2.0 +version=13.0.4 revision=1 -hostmakedepends="cabal-install postgresql-libs-devel" +build_style=cabal makedepends="zlib-devel postgresql-libs-devel" short_desc="REST API for any Postgres database" maintainer="Piotr Wójcik " license="MIT" homepage="https://postgrest.org/" -distfiles="https://github.com/PostgREST/postgrest/archive/v${version}.tar.gz" -checksum=23d63292d50d303bf61154061704f642dd3d699367e2ccb159ec7604f2848487 +distfiles="https://github.com/PostgREST/postgrest/archive/v${version}.tar.gz + https://hackage.haskell.org/package/basement-0.0.16/basement-0.0.16.tar.gz + https://hackage.haskell.org/package/memory-0.18.0/memory-0.18.0.tar.gz + https://hackage.haskell.org/package/data-bword-0.1.0.2/data-bword-0.1.0.2.tar.gz" +checksum="515ea77c049ef69f4553940ef0f13018dc2b72792195ec11a2020fe8914ceab9 + 7fb77e249aef76ba5aed3059d556800ce02b614597c488ba01f0a16449146300 + fd4eb6f638e24b81b4e6cdd68772a531726f2f67686c8969d3407d82f7862e3e + d64880e7d6c7a2d635d7e79552888f415a417379ee637a29321abf08187e9635" nocross="cabal does not support cross compilation" nopie=yes # ghc is currently built without PIE support +skip_extraction="basement-0.0.16.tar.gz memory-0.18.0.tar.gz data-bword-0.1.0.2.tar.gz" +make_check=no # tests require running postgres instance -_cabal_opts="-g" - -if [ "$XBPS_TARGET_NO_ATOMIC8" ]; then - _cabal_opts+=" --ghc-option -latomic" -fi - -if [ "$XBPS_MAKEJOBS" ]; then - _cabal_opts+=" --jobs=$XBPS_MAKEJOBS" -fi - -do_build() { - cabal update $_cabal_opts - cabal build $_cabal_opts - mv dist-newstyle/build/*/*/postgrest-${version}/x/postgrest/build/postgrest/postgrest postgrest +post_extract() { + vsrcextract -C basement basement-0.0.16.tar.gz + vsrcextract -C memory memory-0.18.0.tar.gz + vsrcextract -C data-bword data-bword-0.1.0.2.tar.gz } -do_install() { - vbin postgrest +post_install() { vlicense LICENSE } diff --git a/srcpkgs/shellcheck/template b/srcpkgs/shellcheck/template index b863f3024dd..b99fe5b5c77 100644 --- a/srcpkgs/shellcheck/template +++ b/srcpkgs/shellcheck/template @@ -1,9 +1,9 @@ # Template file for 'shellcheck' pkgname=shellcheck version=0.10.0 -revision=1 +revision=2 build_style=haskell-stack -stackage="lts-19.0" +stackage="lts-23.26" hostmakedepends="pandoc" short_desc="Static analysis tool for shell scripts" maintainer="Orphaned " diff --git a/srcpkgs/stack/patches/2738929ce15b4c8704bbbac24a08539b5d4bf30e.patch b/srcpkgs/stack/patches/2738929ce15b4c8704bbbac24a08539b5d4bf30e.patch new file mode 100644 index 00000000000..2a6d85b720d --- /dev/null +++ b/srcpkgs/stack/patches/2738929ce15b4c8704bbbac24a08539b5d4bf30e.patch @@ -0,0 +1,36 @@ +From 2738929ce15b4c8704bbbac24a08539b5d4bf30e Mon Sep 17 00:00:00 2001 +From: sternenseemann +Date: Mon, 14 Aug 2023 10:51:30 +0200 +Subject: [PATCH] Data.Memory.Internal.CompatPrim64: fix 32 bit with GHC >= 9.4 + +Since 9.4, GHC.Prim exports Word64# operations like timesWord64# even on +i686 whereas GHC.IntWord64 no longer exists. Therefore, we can just use +the ready made solution. + +Closes #98, as it should be the better solution. +--- + Data/Memory/Internal/CompatPrim64.hs | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Data/Memory/Internal/CompatPrim64.hs b/Data/Memory/Internal/CompatPrim64.hs +index b9eef8a..a134c88 100644 +--- a/memory/Data/Memory/Internal/CompatPrim64.hs ++++ b/memory/Data/Memory/Internal/CompatPrim64.hs +@@ -150,6 +150,7 @@ w64# :: Word# -> Word# -> Word# -> Word64# + w64# w _ _ = w + + #elif WORD_SIZE_IN_BITS == 32 ++#if __GLASGOW_HASKELL__ < 904 + import GHC.IntWord64 + import GHC.Prim (Word#) + +@@ -158,6 +159,9 @@ timesWord64# a b = + let !ai = word64ToInt64# a + !bi = word64ToInt64# b + in int64ToWord64# (timesInt64# ai bi) ++#else ++import GHC.Prim ++#endif + + w64# :: Word# -> Word# -> Word# -> Word64# + w64# _ hw lw = diff --git a/srcpkgs/stack/patches/38be2c93acb6f459d24ed6c626981c35ccf44095.patch b/srcpkgs/stack/patches/38be2c93acb6f459d24ed6c626981c35ccf44095.patch new file mode 100644 index 00000000000..e934f8e67b2 --- /dev/null +++ b/srcpkgs/stack/patches/38be2c93acb6f459d24ed6c626981c35ccf44095.patch @@ -0,0 +1,242 @@ +From 38be2c93acb6f459d24ed6c626981c35ccf44095 Mon Sep 17 00:00:00 2001 +From: Sylvain Henry +Date: Thu, 16 Feb 2023 15:40:45 +0100 +Subject: [PATCH] Fix build on 32-bit architectures + +--- + basement/Basement/Bits.hs | 4 ++++ + basement/Basement/From.hs | 24 ----------------------- + basement/Basement/Numerical/Additive.hs | 4 ++++ + basement/Basement/Numerical/Conversion.hs | 20 +++++++++++++++++++ + basement/Basement/PrimType.hs | 6 +++++- + basement/Basement/Types/OffsetSize.hs | 22 +++++++++++++++++++-- + 6 files changed, 53 insertions(+), 27 deletions(-) + +diff --git a/basement/Basement/Bits.hs b/basement/Basement/Bits.hs +index 7eeea0f5..24520ed7 100644 +--- a/basement/Basement/Bits.hs ++++ b/basement/Basement/Bits.hs +@@ -54,8 +54,12 @@ import GHC.Int + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | operation over finite bits + class FiniteBitsOps bits where +diff --git a/basement/Basement/From.hs b/basement/Basement/From.hs +index 7bbe141c..80014b3e 100644 +--- a/basement/Basement/From.hs ++++ b/basement/Basement/From.hs +@@ -272,23 +272,11 @@ instance (NatWithinBound (CountOf ty) n, KnownNat n, PrimType ty) + tryFrom = BlockN.toBlockN . UArray.toBlock . BoxArray.mapToUnboxed id + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn64 n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn64 n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn64 n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance From (Zn64 n) Word64 where + from = unZn64 + instance From (Zn64 n) Word128 where +@@ -297,23 +285,11 @@ instance From (Zn64 n) Word256 where + from = from . unZn64 + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word64 n) => From (Zn n) Word64 where + from = naturalToWord64 . unZn + instance (KnownNat n, NatWithinBound Word128 n) => From (Zn n) Word128 where +diff --git a/basement/Basement/Numerical/Additive.hs b/basement/Basement/Numerical/Additive.hs +index d0dfb973..8ab65aa0 100644 +--- a/basement/Basement/Numerical/Additive.hs ++++ b/basement/Basement/Numerical/Additive.hs +@@ -30,8 +30,12 @@ import qualified Basement.Types.Word128 as Word128 + import qualified Basement.Types.Word256 as Word256 + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | Represent class of things that can be added together, + -- contains a neutral element and is commutative. +diff --git a/basement/Basement/Numerical/Conversion.hs b/basement/Basement/Numerical/Conversion.hs +index db502c07..fddc8232 100644 +--- a/basement/Basement/Numerical/Conversion.hs ++++ b/basement/Basement/Numerical/Conversion.hs +@@ -26,8 +26,12 @@ import GHC.Word + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + intToInt64 :: Int -> Int64 + #if WORD_SIZE_IN_BITS == 64 +@@ -96,11 +100,22 @@ int64ToWord64 (I64# i) = W64# (int64ToWord64# i) + #endif + + #if WORD_SIZE_IN_BITS == 64 ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord# :: Word64# -> Word# ++word64ToWord# i = word64ToWord# i ++#else + word64ToWord# :: Word# -> Word# + word64ToWord# i = i ++#endif + {-# INLINE word64ToWord# #-} + #endif + ++#if WORD_SIZE_IN_BITS < 64 ++word64ToWord32# :: Word64# -> Word32# ++word64ToWord32# i = wordToWord32# (word64ToWord# i) ++{-# INLINE word64ToWord32# #-} ++#endif ++ + -- | 2 Word32s + data Word32x2 = Word32x2 {-# UNPACK #-} !Word32 + {-# UNPACK #-} !Word32 +@@ -113,9 +128,14 @@ word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# (G + word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# w64 32#))) (W32# (wordToWord32# w64)) + #endif + #else ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord32s :: Word64 -> Word32x2 ++word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord32# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord32# w64)) ++#else + word64ToWord32s :: Word64 -> Word32x2 + word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord# w64)) + #endif ++#endif + + wordToChar :: Word -> Char + wordToChar (W# word) = C# (chr# (word2Int# word)) +diff --git a/basement/Basement/PrimType.hs b/basement/Basement/PrimType.hs +index f8ca2926..a888ec91 100644 +--- a/basement/Basement/PrimType.hs ++++ b/basement/Basement/PrimType.hs +@@ -54,7 +54,11 @@ import Basement.Nat + import qualified Prelude (quot) + + #if WORD_SIZE_IN_BITS < 64 +-import GHC.IntWord64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else ++import GHC.IntWord64 ++#endif + #endif + + #ifdef FOUNDATION_BOUNDS_CHECK +diff --git a/basement/Basement/Types/OffsetSize.hs b/basement/Basement/Types/OffsetSize.hs +index cd944927..1ea80dad 100644 +--- a/basement/Basement/Types/OffsetSize.hs ++++ b/basement/Basement/Types/OffsetSize.hs +@@ -70,8 +70,12 @@ import Data.List (foldl') + import qualified Prelude + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | File size in bytes + newtype FileSize = FileSize Word64 +@@ -225,20 +229,26 @@ countOfRoundUp alignment (CountOf n) = CountOf ((n + (alignment-1)) .&. compleme + + csizeOfSize :: CountOf Word8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfSize (CountOf (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfSize (CountOf (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfSize (CountOf (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +- + #else + csizeOfSize (CountOf (I# sz)) = CSize (W64# (int2Word# sz)) +- + #endif + #endif + + csizeOfOffset :: Offset8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfOffset (Offset (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfOffset (Offset (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfOffset (Offset (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +@@ -250,7 +260,11 @@ csizeOfOffset (Offset (I# sz)) = CSize (W64# (int2Word# sz)) + sizeOfCSSize :: CSsize -> CountOf Word8 + sizeOfCSSize (CSsize (-1)) = error "invalid size: CSSize is -1" + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# (int32ToInt# sz)) ++#else + sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# sz) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# (int64ToInt# sz)) +@@ -261,7 +275,11 @@ sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# sz) + + sizeOfCSize :: CSize -> CountOf Word8 + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# (word32ToWord# sz))) ++#else + sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSize (CSize (W64# sz)) = CountOf (I# (word2Int# (word64ToWord# sz))) diff --git a/srcpkgs/stack/patches/aeson.patch b/srcpkgs/stack/patches/aeson.patch deleted file mode 100644 index 68f267c30cc..00000000000 --- a/srcpkgs/stack/patches/aeson.patch +++ /dev/null @@ -1,46 +0,0 @@ -commit 09e233ed73aa3335642f97c080ef27e42047c527 -Author: q66 -Date: Fri Mar 11 04:37:15 2022 +0100 - - constrain aeson to prevent build failures - -diff --git a/stack.cabal b/stack.cabal -index dba5bf0..0195f2c 100644 ---- a/stack.cabal -+++ b/stack.cabal -@@ -231,7 +231,7 @@ library - - build-depends: - Cabal >=3.2.1.0, -- aeson >=1.5.6.0, -+ aeson >=1.5.6.0 && <1.6, - annotated-wl-pprint >=0.7.0, - ansi-terminal >=0.10.3, - array >=0.5.4.0, -@@ -357,7 +357,7 @@ executable stack - - build-depends: - Cabal >=3.2.1.0, -- aeson >=1.5.6.0, -+ aeson >=1.5.6.0 && <1.6, - annotated-wl-pprint >=0.7.0, - ansi-terminal >=0.10.3, - array >=0.5.4.0, -@@ -485,7 +485,7 @@ executable stack-integration-test - - build-depends: - Cabal >=3.2.1.0, -- aeson >=1.5.6.0, -+ aeson >=1.5.6.0 && <1.6, - annotated-wl-pprint >=0.7.0, - ansi-terminal >=0.10.3, - array >=0.5.4.0, -@@ -621,7 +621,7 @@ test-suite stack-test - build-depends: - Cabal >=3.2.1.0, - QuickCheck >=2.14.2, -- aeson >=1.5.6.0, -+ aeson >=1.5.6.0 && <1.6, - annotated-wl-pprint >=0.7.0, - ansi-terminal >=0.10.3, - array >=0.5.4.0, diff --git a/srcpkgs/stack/patches/cborg.patch b/srcpkgs/stack/patches/cborg.patch new file mode 100644 index 00000000000..b44ba514458 --- /dev/null +++ b/srcpkgs/stack/patches/cborg.patch @@ -0,0 +1,212 @@ +commit 9d1418bb8b38cb9a438d7f18835b1ef7ef12b234 +Author: amesgen +Date: Sun Sep 10 20:03:40 2023 +0200 + + Fix compilation and support GHC >=9.2 on 32bit + +diff --git a/cborg/src/Codec/CBOR/Decoding.hs b/cborg/src/Codec/CBOR/Decoding.hs +index a7d774c..bf68e68 100644 +--- a/cborg/src/Codec/CBOR/Decoding.hs ++++ b/cborg/src/Codec/CBOR/Decoding.hs +@@ -315,11 +315,16 @@ getDecodeAction (Decoder k) = k (\x -> return (Done x)) + toInt8 :: Int# -> Int8 + toInt16 :: Int# -> Int16 + toInt32 :: Int# -> Int32 +-toInt64 :: Int# -> Int64 + toWord8 :: Word# -> Word8 + toWord16 :: Word# -> Word16 + toWord32 :: Word# -> Word32 ++#if defined(ARCH_64bit) ++toInt64 :: Int# -> Int64 + toWord64 :: Word# -> Word64 ++#else ++toInt64 :: Int64# -> Int64 ++toWord64 :: Word64# -> Word64 ++#endif + #if MIN_VERSION_ghc_prim(0,8,0) + toInt8 n = I8# (intToInt8# n) + toInt16 n = I16# (intToInt16# n) +@@ -327,8 +332,7 @@ toInt32 n = I32# (intToInt32# n) + toWord8 n = W8# (wordToWord8# n) + toWord16 n = W16# (wordToWord16# n) + toWord32 n = W32# (wordToWord32# n) +-#if WORD_SIZE_IN_BITS == 64 +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && defined(ARCH_64bit) + toInt64 n = I64# (intToInt64# n) + toWord64 n = W64# (wordToWord64# n) + #else +@@ -336,10 +340,6 @@ toInt64 n = I64# n + toWord64 n = W64# n + #endif + #else +-toInt64 n = I64# (intToInt64# n) +-toWord64 n = W64# (wordToWord64# n) +-#endif +-#else + toInt8 n = I8# n + toInt16 n = I16# n + toInt32 n = I32# n +@@ -986,7 +986,7 @@ type ByteOffset = Int64 + -- @since 0.2.2.0 + peekByteOffset :: Decoder s ByteOffset + peekByteOffset = Decoder (\k -> return (PeekByteOffset (\off# -> k (I64# +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (intToInt64# off#) + #else + off# +diff --git a/cborg/src/Codec/CBOR/Magic.hs b/cborg/src/Codec/CBOR/Magic.hs +index cdeb455..bfae638 100644 +--- a/cborg/src/Codec/CBOR/Magic.hs ++++ b/cborg/src/Codec/CBOR/Magic.hs +@@ -120,7 +120,7 @@ import qualified Numeric.Half as Half + import Data.Bits ((.|.), unsafeShiftL) + #endif + +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 (wordToWord64#, word64ToWord#, + intToInt64#, int64ToInt#, + leWord64#, ltWord64#, word64ToInt64#) +@@ -173,7 +173,7 @@ grabWord64 (Ptr ip#) = W64# (wordToWord64# (byteSwap# (word64ToWord# (indexWord6 + grabWord64 (Ptr ip#) = W64# (byteSwap# (indexWord64OffAddr# ip# 0#)) + #endif + #else +-grabWord64 (Ptr ip#) = W64# (byteSwap64# (word64ToWord# (indexWord64OffAddr# ip# 0#))) ++grabWord64 (Ptr ip#) = W64# (byteSwap64# (indexWord64OffAddr# ip# 0#)) + #endif + + #elif defined(MEM_UNALIGNED_OPS) && \ +@@ -484,7 +484,7 @@ word16ToInt (W16# w#) = I# (word2Int# (word16ToWord# w#)) + word32ToInt (W32# w#) = I# (word2Int# (word32ToWord# w#)) + #else + word32ToInt (W32# w#) = +- case isTrue# (w# `ltWord#` 0x80000000##) of ++ case isTrue# (word32ToWord# w# `ltWord#` 0x80000000##) of + True -> Just (I# (word2Int# (word32ToWord# w#))) + False -> Nothing + #endif +@@ -530,6 +530,19 @@ word64ToInt (W64# w#) = + {-# INLINE word64ToInt #-} + + #if defined(ARCH_32bit) ++#if MIN_VERSION_ghc_prim(0,8,0) ++word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# (word8ToWord# w#))) ++word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# (word16ToWord# w#))) ++word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# (word32ToWord# w#))) ++word64ToInt64 (W64# w#) = ++ case isTrue# (w# `ltWord64#` uncheckedShiftL64# (wordToWord64# 1##) 63#) of ++ True -> Just (I64# (word64ToInt64# w#)) ++ False -> Nothing ++ ++word8ToWord64 (W8# w#) = W64# (wordToWord64# (word8ToWord# w#)) ++word16ToWord64 (W16# w#) = W64# (wordToWord64# (word16ToWord# w#)) ++word32ToWord64 (W32# w#) = W64# (wordToWord64# (word32ToWord# w#)) ++#else + word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# w#)) + word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# w#)) + word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# w#)) +@@ -541,6 +554,7 @@ word64ToInt64 (W64# w#) = + word8ToWord64 (W8# w#) = W64# (wordToWord64# w#) + word16ToWord64 (W16# w#) = W64# (wordToWord64# w#) + word32ToWord64 (W32# w#) = W64# (wordToWord64# w#) ++#endif + + {-# INLINE word8ToInt64 #-} + {-# INLINE word16ToInt64 #-} +diff --git a/cborg/src/Codec/CBOR/Read.hs b/cborg/src/Codec/CBOR/Read.hs +index 6546575..c4dc761 100644 +--- a/cborg/src/Codec/CBOR/Read.hs ++++ b/cborg/src/Codec/CBOR/Read.hs +@@ -63,7 +63,7 @@ import qualified Data.Text as T + import qualified Data.Text.Encoding as T + import Data.Word + import GHC.Word +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 + #endif + import GHC.Exts +@@ -510,8 +510,8 @@ go_fast !bs da@(ConsumeNegWord64Canonical k) = + go_fast !bs da@(ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> go_fast_end bs da +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast (BS.unsafeDrop sz bs) + | otherwise -> go_fast_end bs da + + go_fast !bs da@(ConsumeListLen64Canonical k) = +@@ -994,8 +994,8 @@ go_fast_end !bs (ConsumeNegWord64Canonical k) = + go_fast_end !bs (ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> return $! SlowFail bs "expected int64" +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) + | otherwise -> return $! SlowFail bs "non-canonical int64" + + go_fast_end !bs (ConsumeListLen64Canonical k) = +@@ -1271,7 +1271,7 @@ go_slow da bs !offset = do + + SlowPeekByteOffset bs' k -> + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1381,7 +1381,7 @@ go_slow_overlapped da sz bs_cur bs_next !offset = + SlowPeekByteOffset bs_empty k -> + assert (BS.null bs_empty) $ do + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1565,17 +1565,17 @@ isIntCanonical sz i + {-# INLINE isWord64Canonical #-} + isWord64Canonical :: Int -> Word64 -> Bool + isWord64Canonical sz w +- | sz == 2 = w > 0x17) +- | sz == 3 = w > 0xff) +- | sz == 5 = w > 0xffff) +- | sz == 9 = w > 0xffffffff) ++ | sz == 2 = w > 0x17 ++ | sz == 3 = w > 0xff ++ | sz == 5 = w > 0xffff ++ | sz == 9 = w > 0xffffffff + | otherwise = True + + {-# INLINE isInt64Canonical #-} + isInt64Canonical :: Int -> Int64# -> Bool + isInt64Canonical sz i# +- | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (not64# w#) +- | otherwise = isWord64Canonical sz w# ++ | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (W64# (not64# w#)) ++ | otherwise = isWord64Canonical sz (W64# w#) + where + w# = int64ToWord64# i# + #endif +@@ -1796,7 +1796,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x1b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! toInteger w) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! toInteger w) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! toInteger w) + #endif +@@ -1838,7 +1838,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x3b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! (-1 - toInteger w)) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! (-1 - toInteger w)) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! (-1 - toInteger w)) + #endif diff --git a/srcpkgs/stack/patches/fix-build-text.patch b/srcpkgs/stack/patches/fix-build-text.patch deleted file mode 100644 index bc3483640b7..00000000000 --- a/srcpkgs/stack/patches/fix-build-text.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/src/Stack/Build/Execute.hs -+++ b/src/Stack/Build/Execute.hs -@@ -26,7 +26,7 @@ import Control.Concurrent.Exec - import Control.Concurrent.STM (check) - import Stack.Prelude hiding (Display (..)) - import Crypto.Hash --import Data.Attoparsec.Text hiding (try) -+import Data.Attoparsec.Text as P hiding (try) - import qualified Data.ByteArray as Mem (convert) - import qualified Data.ByteString as S - import qualified Data.ByteString.Builder -@@ -2160,7 +2160,7 @@ mungeBuildOutput excludeTHLoading makeAb - lineCol = char ':' - >> choice - [ num >> char ':' >> num >> optional (char '-' >> num) >> return () -- , char '(' >> num >> char ',' >> num >> string ")-(" >> num >> char ',' >> num >> char ')' >> return () -+ , char '(' >> num >> char ',' >> num >> P.string ")-(" >> num >> char ',' >> num >> char ')' >> return () - ] - >> char ':' - >> return () diff --git a/srcpkgs/stack/patches/fsnotify.patch b/srcpkgs/stack/patches/fsnotify.patch deleted file mode 100644 index f82fd8f7300..00000000000 --- a/srcpkgs/stack/patches/fsnotify.patch +++ /dev/null @@ -1,16 +0,0 @@ -src/Stack/FileWatch.hs:29:49: error: Not in scope: ‘confUsePolling’ - | -29 | fileWatchPoll = fileWatchConf $ defaultConfig { confUsePolling = True } - | ^^^^^^^^^^^^^^ - ---- a/stack.cabal -+++ b/stack.cabal -@@ -256,7 +256,7 @@ library - file-embed >=0.0.14.0, - filelock >=0.1.1.5, - filepath >=1.4.2.1, -- fsnotify >=0.3.0.1, -+ fsnotify >=0.3.0.1 && <0.4.0.0, - generic-deriving >=1.13.1, - hackage-security >=0.6.0.1, - hashable >=1.3.0.0, diff --git a/srcpkgs/stack/patches/ghc9.0.2.patch b/srcpkgs/stack/patches/ghc9.0.2.patch deleted file mode 100644 index bdd77de58c6..00000000000 --- a/srcpkgs/stack/patches/ghc9.0.2.patch +++ /dev/null @@ -1,212 +0,0 @@ -From cb7e56842a25f93142545fad21306a7c1750fbbf Mon Sep 17 00:00:00 2001 -From: Brandon Chinn -Date: Fri, 4 Jun 2021 16:26:22 -0700 -Subject: [PATCH 1/6] Use Cabal 3.4.0.0 - ---- - stack.yaml | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/stack.yaml b/stack.yaml -index 005bd19f4..9472509be 100644 ---- a/stack.yaml -+++ b/stack.yaml -@@ -20,6 +20,9 @@ flags: - ghc-options: - "$locals": -fhide-source-paths - -+extra-deps: -+- Cabal-3.4.0.0 -+ - drop-packages: - # See https://github.com/commercialhaskell/stack/pull/4712 - - cabal-install - -From 11e11ab0edeba033b40a7fc62434be58dea82ce2 Mon Sep 17 00:00:00 2001 -From: Brandon Chinn -Date: Fri, 4 Jun 2021 16:40:56 -0700 -Subject: [PATCH 2/6] Fix Flag => PackageFlag - ---- - src/Stack/BuildPlan.hs | 2 +- - src/Stack/Package.hs | 8 ++++---- - 2 files changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/Stack/BuildPlan.hs b/src/Stack/BuildPlan.hs -index 36f82236e..c5c80efc6 100644 ---- a/src/Stack/BuildPlan.hs -+++ b/src/Stack/BuildPlan.hs -@@ -224,7 +224,7 @@ selectPackageBuildPlan platform compiler pool gpd = - flagCombinations :: NonEmpty [(FlagName, Bool)] - flagCombinations = mapM getOptions (genPackageFlags gpd) - where -- getOptions :: C.Flag -> NonEmpty (FlagName, Bool) -+ getOptions :: C.PackageFlag -> NonEmpty (FlagName, Bool) - getOptions f - | flagManual f = (fname, flagDefault f) :| [] - | flagDefault f = (fname, True) :| [(fname, False)] -diff --git a/src/Stack/Package.hs b/src/Stack/Package.hs -index 4db50d2a4..d9bca7af5 100644 ---- a/src/Stack/Package.hs -+++ b/src/Stack/Package.hs -@@ -128,7 +128,7 @@ resolvePackage packageConfig gpkg = - (resolvePackageDescription packageConfig gpkg) - - packageFromPackageDescription :: PackageConfig -- -> [D.Flag] -+ -> [PackageFlag] - -> PackageDescriptionPair - -> Package - packageFromPackageDescription packageConfig pkgFlags (PackageDescriptionPair pkgNoMod pkg) = -@@ -935,9 +935,9 @@ resolvePackageDescription packageConfig (GenericPackageDescription desc defaultF - -- | Make a map from a list of flag specifications. - -- - -- What is @flagManual@ for? --flagMap :: [Flag] -> Map FlagName Bool -+flagMap :: [PackageFlag] -> Map FlagName Bool - flagMap = M.fromList . map pair -- where pair :: Flag -> (FlagName, Bool) -+ where pair :: PackageFlag -> (FlagName, Bool) - pair = flagName &&& flagDefault - - data ResolveConditions = ResolveConditions -@@ -986,7 +986,7 @@ resolveConditions rc addDeps (CondNode lib deps cs) = basic <> children - case v of - OS os -> os == rcOS rc - Arch arch -> arch == rcArch rc -- Flag flag -> -+ PackageFlag flag -> - fromMaybe False $ M.lookup flag (rcFlags rc) - -- NOTE: ^^^^^ This should never happen, as all flags - -- which are used must be declared. Defaulting to - -From 8facd731ec3f2bbc15a083750740929167b33bb2 Mon Sep 17 00:00:00 2001 -From: Brandon Chinn -Date: Fri, 4 Jun 2021 16:55:30 -0700 -Subject: [PATCH 3/6] Fix CabalSpecVersion - ---- - src/Stack/Package.hs | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/src/Stack/Package.hs b/src/Stack/Package.hs -index d9bca7af5..fca039140 100644 ---- a/src/Stack/Package.hs -+++ b/src/Stack/Package.hs -@@ -32,6 +32,7 @@ import Data.List (find, isPrefixOf, unzip) - import qualified Data.Map.Strict as M - import qualified Data.Set as S - import qualified Data.Text as T -+import Distribution.CabalSpecVersion (CabalSpecVersion, cabalSpecMinimumLibraryVersion) - import Distribution.Compiler - import Distribution.ModuleName (ModuleName) - import qualified Distribution.ModuleName as Cabal -@@ -190,7 +191,7 @@ packageFromPackageDescription packageConfig pkgFlags (PackageDescriptionPair pkg - (library pkg) - , packageBuildType = buildType pkg - , packageSetupDeps = msetupDeps -- , packageCabalSpec = either orLaterVersion id $ specVersionRaw pkg -+ , packageCabalSpec = orLaterVersion $ mkVersion $ cabalSpecMinimumLibraryVersion $ specVersion pkg - } - where - extraLibNames = S.union subLibNames foreignLibNames -@@ -696,7 +697,7 @@ packageDescModulesAndFiles pkg = do - - -- | Resolve globbing of files (e.g. data files) to absolute paths. - resolveGlobFiles -- :: Version -- ^ cabal file version -+ :: CabalSpecVersion -- ^ cabal file version - -> [String] - -> RIO Ctx (Set (Path Abs File)) - resolveGlobFiles cabalFileVersion = - -From 004f14652409b7d0645215d354b2e599eb7f76bc Mon Sep 17 00:00:00 2001 -From: Brandon Chinn -Date: Fri, 4 Jun 2021 16:55:40 -0700 -Subject: [PATCH 4/6] Fix GenericPackageDescription - ---- - src/Stack/Build.hs | 2 +- - src/Stack/Package.hs | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/Stack/Build.hs b/src/Stack/Build.hs -index 23b9a9719..856903bed 100644 ---- a/src/Stack/Build.hs -+++ b/src/Stack/Build.hs -@@ -358,7 +358,7 @@ checkComponentsBuildable lps = - checkSubLibraryDependencies :: HasLogFunc env => [ProjectPackage] -> RIO env () - checkSubLibraryDependencies proj = do - forM_ proj $ \p -> do -- C.GenericPackageDescription _ _ lib subLibs foreignLibs exes tests benches <- liftIO $ cpGPD . ppCommon $ p -+ C.GenericPackageDescription _ _ _ lib subLibs foreignLibs exes tests benches <- liftIO $ cpGPD . ppCommon $ p - - let dependencies = concatMap getDeps subLibs <> - concatMap getDeps foreignLibs <> -diff --git a/src/Stack/Package.hs b/src/Stack/Package.hs -index fca039140..39aad4d2f 100644 ---- a/src/Stack/Package.hs -+++ b/src/Stack/Package.hs -@@ -863,7 +863,7 @@ data PackageDescriptionPair = PackageDescriptionPair - resolvePackageDescription :: PackageConfig - -> GenericPackageDescription - -> PackageDescriptionPair --resolvePackageDescription packageConfig (GenericPackageDescription desc defaultFlags mlib subLibs foreignLibs' exes tests benches) = -+resolvePackageDescription packageConfig (GenericPackageDescription desc _ defaultFlags mlib subLibs foreignLibs' exes tests benches) = - PackageDescriptionPair - { pdpOrigBuildable = go False - , pdpModifiedBuildable = go True - -From 820797b566ef981936907f4d19658259d4a635a8 Mon Sep 17 00:00:00 2001 -From: Brandon Chinn -Date: Fri, 4 Jun 2021 17:01:01 -0700 -Subject: [PATCH 5/6] Fix generatePackageVersionMacros - ---- - src/Stack/Build/Execute.hs | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/Stack/Build/Execute.hs b/src/Stack/Build/Execute.hs -index 1e381dd21..aedd7fee5 100644 ---- a/src/Stack/Build/Execute.hs -+++ b/src/Stack/Build/Execute.hs -@@ -1214,7 +1214,7 @@ withSingleContext ActionContext {..} ee@ExecuteEnv {..} task@Task {..} allDeps m - let macroDeps = mapMaybe snd matchedDeps - cppMacrosFile = setupDir relFileSetupMacrosH - cppArgs = ["-optP-include", "-optP" ++ toFilePath cppMacrosFile] -- writeBinaryFileAtomic cppMacrosFile (encodeUtf8Builder (T.pack (C.generatePackageVersionMacros macroDeps))) -+ writeBinaryFileAtomic cppMacrosFile (encodeUtf8Builder (T.pack (C.generatePackageVersionMacros (packageVersion package) macroDeps))) - return (packageDBArgs ++ depsArgs ++ cppArgs) - - -- This branch is usually taken for builds, and - -From 336ab515e30f03c274f89ebe1cbc6aa1e597c2a4 Mon Sep 17 00:00:00 2001 -From: Brandon Chinn -Date: Fri, 4 Jun 2021 17:04:16 -0700 -Subject: [PATCH 6/6] Fix ModuleReexport - ---- - src/Stack/Script.hs | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/Stack/Script.hs b/src/Stack/Script.hs -index 6bb67c049..9ebd2173d 100644 ---- a/src/Stack/Script.hs -+++ b/src/Stack/Script.hs -@@ -18,6 +18,7 @@ import Distribution.Compiler (CompilerFlavor (..)) - import Distribution.ModuleName (ModuleName) - import qualified Distribution.PackageDescription as PD - import qualified Distribution.Types.CondTree as C -+import qualified Distribution.Types.ModuleReexport as ModuleReexport - import Distribution.Types.PackageName (mkPackageName) - import Distribution.Types.VersionRange (withinRange) - import Distribution.System (Platform (..)) -@@ -280,7 +281,7 @@ allExposedModules gpd = do - mlibrary = snd . C.simplifyCondTree checkCond <$> PD.condLibrary gpd - pure $ case mlibrary of - Just lib -> PD.exposedModules lib ++ -- map PD.moduleReexportName (PD.reexportedModules lib) -+ map ModuleReexport.moduleReexportName (PD.reexportedModules lib) - Nothing -> mempty - - -- | The Stackage project introduced the concept of hidden packages, diff --git a/srcpkgs/stack/patches/hsubparser.patch b/srcpkgs/stack/patches/hsubparser.patch deleted file mode 100644 index 3a4a389324a..00000000000 --- a/srcpkgs/stack/patches/hsubparser.patch +++ /dev/null @@ -1,26 +0,0 @@ -Adapted from: https://github.com/commercialhaskell/stack/commit/4afcf774d2a821e69b6a1afca67bf34341c84e85 - ---- a/src/Options/Applicative/Complicated.hs -+++ b/src/Options/Applicative/Complicated.hs -@@ -136,20 +136,9 @@ complicatedParser commandMetavar commonP - (,) <$> - commonParser <*> - case runWriter (runExceptT commandParser) of -- (Right (),d) -> hsubparser' commandMetavar d -+ (Right (), m) -> hsubparser (m <> metavar commandMetavar) - (Left b,_) -> pure (b,mempty) - ---- | Subparser with @--help@ argument. Borrowed with slight modification ---- from Options.Applicative.Extra. --hsubparser' :: String -> Mod CommandFields a -> Parser a --hsubparser' commandMetavar m = mkParser d g rdr -- where -- Mod _ d g = metavar commandMetavar `mappend` m -- (groupName, cmds, subs) = mkCommand m -- rdr = CmdReader groupName cmds (fmap add_helper . subs) -- add_helper pinfo = pinfo -- { infoParser = infoParser pinfo <**> helpOption } -- - -- | Non-hidden help option. - helpOption :: Parser (a -> a) - helpOption = diff --git a/srcpkgs/stack/patches/http-download.patch b/srcpkgs/stack/patches/http-download.patch deleted file mode 100644 index 07061bc7fba..00000000000 --- a/srcpkgs/stack/patches/http-download.patch +++ /dev/null @@ -1,40 +0,0 @@ -constrain http-download to prevent build failures - ---- a/stack.cabal -+++ b/stack.cabal -@@ -267,7 +267,7 @@ library - http-client >=0.6.4.1, - http-client-tls >=0.3.5.3, - http-conduit >=2.3.8, -- http-download >=0.2.0.0, -+ http-download >=0.2.0.0 && <0.2.1, - http-types >=0.12.3, - memory >=0.15.0, - microlens >=0.4.11.2, -@@ -393,7 +393,7 @@ executable stack - http-client >=0.6.4.1, - http-client-tls >=0.3.5.3, - http-conduit >=2.3.8, -- http-download >=0.2.0.0, -+ http-download >=0.2.0.0 && <0.2.1, - http-types >=0.12.3, - memory >=0.15.0, - microlens >=0.4.11.2, -@@ -522,7 +522,7 @@ executable stack-integration-test - http-client >=0.6.4.1, - http-client-tls >=0.3.5.3, - http-conduit >=2.3.8, -- http-download >=0.2.0.0, -+ http-download >=0.2.0.0 && <0.2.1, - http-types >=0.12.3, - memory >=0.15.0, - microlens >=0.4.11.2, -@@ -658,7 +658,7 @@ test-suite stack-test - http-client >=0.6.4.1, - http-client-tls >=0.3.5.3, - http-conduit >=2.3.8, -- http-download >=0.2.0.0, -+ http-download >=0.2.0.0 && <0.2.1, - http-types >=0.12.3, - memory >=0.15.0, - microlens >=0.4.11.2, diff --git a/srcpkgs/stack/patches/pantry.patch b/srcpkgs/stack/patches/pantry.patch deleted file mode 100644 index ab967914ea0..00000000000 --- a/srcpkgs/stack/patches/pantry.patch +++ /dev/null @@ -1,40 +0,0 @@ -constrain pantry to prevent build failures - ---- a/stack.cabal -+++ b/stack.cabal -@@ -279,7 +279,7 @@ library - network-uri >=2.6.4.1, - open-browser >=0.2.1.0, - optparse-applicative >=0.14.3.0, -- pantry >=0.5.3, -+ pantry >=0.5.3 && <0.6.0, - path >=0.7.0, - path-io >=1.6.3, - persistent >=2.11.0.4 && <2.14.0.0, -@@ -405,7 +405,7 @@ executable stack - network-uri >=2.6.4.1, - open-browser >=0.2.1.0, - optparse-applicative >=0.14.3.0, -- pantry >=0.5.3, -+ pantry >=0.5.3 && <0.6.0, - path >=0.7.0, - path-io >=1.6.3, - persistent >=2.11.0.4 && <2.14.0.0, -@@ -535,7 +535,7 @@ executable stack-integration-test - open-browser >=0.2.1.0, - optparse-applicative >=0.14.3.0, - optparse-generic >=1.3.1, -- pantry >=0.5.3, -+ pantry >=0.5.3 && <0.6.0, - path >=0.7.0, - path-io >=1.6.3, - persistent >=2.11.0.4 && <2.14.0.0, -@@ -670,7 +670,7 @@ test-suite stack-test - network-uri >=2.6.4.1, - open-browser >=0.2.1.0, - optparse-applicative >=0.14.3.0, -- pantry >=0.5.3, -+ pantry >=0.5.3 && <0.6.0, - path >=0.7.0, - path-io >=1.6.3, - persistent >=2.11.0.4 && <2.14.0.0, diff --git a/srcpkgs/stack/patches/persistent.patch b/srcpkgs/stack/patches/persistent.patch deleted file mode 100644 index cf462d7b80c..00000000000 --- a/srcpkgs/stack/patches/persistent.patch +++ /dev/null @@ -1,46 +0,0 @@ -commit 188d7ece06ee06ed6ccaf0df0c46285bd43898f4 -Author: q66 -Date: Thu Apr 28 05:02:09 2022 +0200 - - constrain persistent to fix build - -diff --git a/stack.cabal b/stack.cabal -index dba5bf0..e221321 100644 ---- a/stack.cabal -+++ b/stack.cabal -@@ -281,7 +281,7 @@ library - pantry >=0.5.3, - path >=0.7.0, - path-io >=1.6.3, -- persistent >=2.11.0.4, -+ persistent >=2.11.0.4 && <2.14.0.0, - persistent-sqlite >=2.11.1.0, - persistent-template >=2.9.1.0, - pretty >=1.1.3.6, -@@ -407,7 +407,7 @@ executable stack - pantry >=0.5.3, - path >=0.7.0, - path-io >=1.6.3, -- persistent >=2.11.0.4, -+ persistent >=2.11.0.4 && <2.14.0.0, - persistent-sqlite >=2.11.1.0, - persistent-template >=2.9.1.0, - pretty >=1.1.3.6, -@@ -537,7 +537,7 @@ executable stack-integration-test - pantry >=0.5.3, - path >=0.7.0, - path-io >=1.6.3, -- persistent >=2.11.0.4, -+ persistent >=2.11.0.4 && <2.14.0.0, - persistent-sqlite >=2.11.1.0, - persistent-template >=2.9.1.0, - pretty >=1.1.3.6, -@@ -672,7 +672,7 @@ test-suite stack-test - pantry >=0.5.3, - path >=0.7.0, - path-io >=1.6.3, -- persistent >=2.11.0.4, -+ persistent >=2.11.0.4 && <2.14.0.0, - persistent-sqlite >=2.11.1.0, - persistent-template >=2.9.1.0, - pretty >=1.1.3.6, diff --git a/srcpkgs/stack/patches/ppc.patch b/srcpkgs/stack/patches/ppc.patch deleted file mode 100644 index fc4c540f0f9..00000000000 --- a/srcpkgs/stack/patches/ppc.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- a/src/Stack/Setup.hs -+++ b/src/Stack/Setup.hs -@@ -91,6 +91,7 @@ - import System.FilePath (searchPathSeparator) - import qualified System.FilePath as FP - import System.Permissions (setFileExecutable) -+import System.Endian (getSystemEndianness, Endianness (..)) - import System.Uname (getRelease) - import Data.List.Split (splitOn) - -@@ -1241,6 +1242,11 @@ - Platform X86_64 Cabal.Windows -> return "windows64" - Platform Arm Cabal.Linux -> return "linux-armv7" - Platform AArch64 Cabal.Linux -> return "linux-aarch64" -+ Platform PPC Cabal.Linux -> return "linux-powerpc" -+ Platform PPC64 Cabal.Linux -> -+ case getSystemEndianness of -+ LittleEndian -> return "linux-powerpc64le" -+ BigEndian -> return "linux-powerpc64" - Platform Sparc Cabal.Linux -> return "linux-sparc" - Platform arch os -> throwM $ UnsupportedSetupCombo os arch - ---- a/stack.cabal -+++ b/stack.cabal -@@ -246,6 +246,7 @@ - conduit >=1.3.4.1, - conduit-extra >=1.3.5, - containers >=0.6.2.1, -+ cpu >=0.1.2, - cryptonite >=0.27, - cryptonite-conduit >=0.2.2, - deepseq >=1.4.4.0, diff --git a/srcpkgs/stack/patches/project.patch b/srcpkgs/stack/patches/project.patch new file mode 100644 index 00000000000..db1a7668eef --- /dev/null +++ b/srcpkgs/stack/patches/project.patch @@ -0,0 +1,8 @@ +--- a/cabal.project 2025-07-05 18:24:05.053213076 +0100 ++++ b/cabal.project 2025-07-05 18:12:23.016337449 +0100 +@@ -37,4 +37,4 @@ + -- + with-compiler: ghc-9.8.4 + import: cabal.config +-packages: . ++packages: ./basement ./memory ./cborg . diff --git a/srcpkgs/stack/patches/unix-compat.patch b/srcpkgs/stack/patches/unix-compat.patch deleted file mode 100644 index 031a20a5e08..00000000000 --- a/srcpkgs/stack/patches/unix-compat.patch +++ /dev/null @@ -1,40 +0,0 @@ -constrain unix-compat version to prevent build failures - ---- a/stack.cabal -+++ b/stack.cabal -@@ -307,7 +308,7 @@ library - transformers >=0.5.6.2, - typed-process >=0.2.6.0, - unicode-transforms >=0.3.7.1, -- unix-compat >=0.5.3, -+ unix-compat >=0.5.3 && < 0.7, - unliftio >=0.2.18, - unordered-containers >=0.2.14.0, - vector >=0.12.1.2, -@@ -434,7 +435,7 @@ executable stack - transformers >=0.5.6.2, - typed-process >=0.2.6.0, - unicode-transforms >=0.3.7.1, -- unix-compat >=0.5.3, -+ unix-compat >=0.5.3 && < 0.7, - unliftio >=0.2.18, - unordered-containers >=0.2.14.0, - vector >=0.12.1.2, -@@ -563,7 +564,7 @@ executable stack-integration-test - transformers >=0.5.6.2, - typed-process >=0.2.6.0, - unicode-transforms >=0.3.7.1, -- unix-compat >=0.5.3, -+ unix-compat >=0.5.3 && < 0.7, - unliftio >=0.2.18, - unordered-containers >=0.2.14.0, - vector >=0.12.1.2, -@@ -701,7 +702,7 @@ test-suite stack-test - transformers >=0.5.6.2, - typed-process >=0.2.6.0, - unicode-transforms >=0.3.7.1, -- unix-compat >=0.5.3, -+ unix-compat >=0.5.3 && < 0.7, - unliftio >=0.2.18, - unordered-containers >=0.2.14.0, - vector >=0.12.1.2, diff --git a/srcpkgs/stack/template b/srcpkgs/stack/template index b77ebf0deae..cf204c3d6f6 100644 --- a/srcpkgs/stack/template +++ b/srcpkgs/stack/template @@ -1,31 +1,38 @@ # Template file for 'stack' pkgname=stack -version=2.7.5 -revision=2 -_stackage="lts-19.0" -hostmakedepends="cabal-install pkg-config unzip" -makedepends="zlib-devel pcre-devel" +version=3.7.1 +revision=1 +build_style=cabal +cabal_index_state="2025-06-29T20:30:08Z" +make_build_args="-f disable-git-info" +makedepends="zlib-devel" depends="git gmp-devel iana-etc" short_desc="Cross-platform program for developing Haskell projects" maintainer="Leah Neukirchen " license="BSD-3-Clause" homepage="https://haskellstack.org" +# cborg will likely be fixed in the next release and can then be removed here. +# https://github.com/well-typed/cborg/pull/322 +# The other two are unmaintained and archived, the only way they get fixed +# is if the dependency is removed from stack. distfiles="https://hackage.haskell.org/package/${pkgname}-${version}/${pkgname}-${version}.tar.gz - https://www.stackage.org/${_stackage}/cabal.config>cabal.config-${_stackage}" -checksum="9ddd44c2a62e9404194d69e7dc1c94e707910620316b66d6ac0b3201a8f37e80 - 2e836f769693cde2592963f200c97a3e8a87eb58777fa4289d7c3c671f971186" -skip_extraction="cabal.config-${_stackage}" + https://hackage.haskell.org/package/basement-0.0.16/basement-0.0.16.tar.gz + https://hackage.haskell.org/package/memory-0.18.0/memory-0.18.0.tar.gz + https://hackage.haskell.org/package/cborg-0.2.10.0/cborg-0.2.10.0.tar.gz" +checksum="412a7a8d654ba38b29ea88f473c771d612c1836af80c0293fe092faa430ac80e + 7fb77e249aef76ba5aed3059d556800ce02b614597c488ba01f0a16449146300 + fd4eb6f638e24b81b4e6cdd68772a531726f2f67686c8969d3407d82f7862e3e + 17fe070c38fc498cab49bcb9d6215b7747d53bedf96502e9bcce9cad73b9c797" nocross=yes nopie_files="/usr/bin/stack" +skip_extraction="basement-0.0.16.tar.gz memory-0.18.0.tar.gz cborg-0.2.10.0.tar.gz" -do_build() { - cp ${XBPS_SRCDISTDIR}/${pkgname}-${version}/cabal.config-${_stackage} cabal.config - HOME=$PWD cabal update - HOME=$PWD cabal new-build ${makejobs} --flag disable-git-info \ - --constraint 'lukko -ofd-locking' # https://github.com/haskell/cabal/issues/7313 +post_extract() { + vsrcextract -C basement basement-0.0.16.tar.gz + vsrcextract -C memory memory-0.18.0.tar.gz + vsrcextract -C cborg cborg-0.2.10.0.tar.gz } -do_install() { - eval vbin dist-newstyle/build/*/*/*/build/stack/stack +post_install() { vlicense LICENSE } diff --git a/srcpkgs/xmobar/files/stack.yaml b/srcpkgs/xmobar/files/stack.yaml deleted file mode 100644 index 7e095637414..00000000000 --- a/srcpkgs/xmobar/files/stack.yaml +++ /dev/null @@ -1,6 +0,0 @@ -resolver: lts-19.0 -packages: -- . -extra-deps: -- iwlib-0.1.0 -- netlink-1.1.1.0 diff --git a/srcpkgs/xmobar/patches/basement.patch b/srcpkgs/xmobar/patches/basement.patch new file mode 100644 index 00000000000..e934f8e67b2 --- /dev/null +++ b/srcpkgs/xmobar/patches/basement.patch @@ -0,0 +1,242 @@ +From 38be2c93acb6f459d24ed6c626981c35ccf44095 Mon Sep 17 00:00:00 2001 +From: Sylvain Henry +Date: Thu, 16 Feb 2023 15:40:45 +0100 +Subject: [PATCH] Fix build on 32-bit architectures + +--- + basement/Basement/Bits.hs | 4 ++++ + basement/Basement/From.hs | 24 ----------------------- + basement/Basement/Numerical/Additive.hs | 4 ++++ + basement/Basement/Numerical/Conversion.hs | 20 +++++++++++++++++++ + basement/Basement/PrimType.hs | 6 +++++- + basement/Basement/Types/OffsetSize.hs | 22 +++++++++++++++++++-- + 6 files changed, 53 insertions(+), 27 deletions(-) + +diff --git a/basement/Basement/Bits.hs b/basement/Basement/Bits.hs +index 7eeea0f5..24520ed7 100644 +--- a/basement/Basement/Bits.hs ++++ b/basement/Basement/Bits.hs +@@ -54,8 +54,12 @@ import GHC.Int + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | operation over finite bits + class FiniteBitsOps bits where +diff --git a/basement/Basement/From.hs b/basement/Basement/From.hs +index 7bbe141c..80014b3e 100644 +--- a/basement/Basement/From.hs ++++ b/basement/Basement/From.hs +@@ -272,23 +272,11 @@ instance (NatWithinBound (CountOf ty) n, KnownNat n, PrimType ty) + tryFrom = BlockN.toBlockN . UArray.toBlock . BoxArray.mapToUnboxed id + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn64 n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn64 n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn64 n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . unZn64 where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance From (Zn64 n) Word64 where + from = unZn64 + instance From (Zn64 n) Word128 where +@@ -297,23 +285,11 @@ instance From (Zn64 n) Word256 where + from = from . unZn64 + + instance (KnownNat n, NatWithinBound Word8 n) => From (Zn n) Word8 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W8# (wordToWord8# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word16 n) => From (Zn n) Word16 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W16# (wordToWord16# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word32 n) => From (Zn n) Word32 where +-#if __GLASGOW_HASKELL__ >= 904 +- from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# (GHC.Prim.word64ToWord# w))) +-#else + from = narrow . naturalToWord64 . unZn where narrow (W64# w) = W32# (wordToWord32# (word64ToWord# w)) +-#endif + instance (KnownNat n, NatWithinBound Word64 n) => From (Zn n) Word64 where + from = naturalToWord64 . unZn + instance (KnownNat n, NatWithinBound Word128 n) => From (Zn n) Word128 where +diff --git a/basement/Basement/Numerical/Additive.hs b/basement/Basement/Numerical/Additive.hs +index d0dfb973..8ab65aa0 100644 +--- a/basement/Basement/Numerical/Additive.hs ++++ b/basement/Basement/Numerical/Additive.hs +@@ -30,8 +30,12 @@ import qualified Basement.Types.Word128 as Word128 + import qualified Basement.Types.Word256 as Word256 + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | Represent class of things that can be added together, + -- contains a neutral element and is commutative. +diff --git a/basement/Basement/Numerical/Conversion.hs b/basement/Basement/Numerical/Conversion.hs +index db502c07..fddc8232 100644 +--- a/basement/Basement/Numerical/Conversion.hs ++++ b/basement/Basement/Numerical/Conversion.hs +@@ -26,8 +26,12 @@ import GHC.Word + import Basement.Compat.Primitive + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + intToInt64 :: Int -> Int64 + #if WORD_SIZE_IN_BITS == 64 +@@ -96,11 +100,22 @@ int64ToWord64 (I64# i) = W64# (int64ToWord64# i) + #endif + + #if WORD_SIZE_IN_BITS == 64 ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord# :: Word64# -> Word# ++word64ToWord# i = word64ToWord# i ++#else + word64ToWord# :: Word# -> Word# + word64ToWord# i = i ++#endif + {-# INLINE word64ToWord# #-} + #endif + ++#if WORD_SIZE_IN_BITS < 64 ++word64ToWord32# :: Word64# -> Word32# ++word64ToWord32# i = wordToWord32# (word64ToWord# i) ++{-# INLINE word64ToWord32# #-} ++#endif ++ + -- | 2 Word32s + data Word32x2 = Word32x2 {-# UNPACK #-} !Word32 + {-# UNPACK #-} !Word32 +@@ -113,9 +128,14 @@ word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# (G + word64ToWord32s (W64# w64) = Word32x2 (W32# (wordToWord32# (uncheckedShiftRL# w64 32#))) (W32# (wordToWord32# w64)) + #endif + #else ++#if __GLASGOW_HASKELL__ >= 904 ++word64ToWord32s :: Word64 -> Word32x2 ++word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord32# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord32# w64)) ++#else + word64ToWord32s :: Word64 -> Word32x2 + word64ToWord32s (W64# w64) = Word32x2 (W32# (word64ToWord# (uncheckedShiftRL64# w64 32#))) (W32# (word64ToWord# w64)) + #endif ++#endif + + wordToChar :: Word -> Char + wordToChar (W# word) = C# (chr# (word2Int# word)) +diff --git a/basement/Basement/PrimType.hs b/basement/Basement/PrimType.hs +index f8ca2926..a888ec91 100644 +--- a/basement/Basement/PrimType.hs ++++ b/basement/Basement/PrimType.hs +@@ -54,7 +54,11 @@ import Basement.Nat + import qualified Prelude (quot) + + #if WORD_SIZE_IN_BITS < 64 +-import GHC.IntWord64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else ++import GHC.IntWord64 ++#endif + #endif + + #ifdef FOUNDATION_BOUNDS_CHECK +diff --git a/basement/Basement/Types/OffsetSize.hs b/basement/Basement/Types/OffsetSize.hs +index cd944927..1ea80dad 100644 +--- a/basement/Basement/Types/OffsetSize.hs ++++ b/basement/Basement/Types/OffsetSize.hs +@@ -70,8 +70,12 @@ import Data.List (foldl') + import qualified Prelude + + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++import GHC.Exts ++#else + import GHC.IntWord64 + #endif ++#endif + + -- | File size in bytes + newtype FileSize = FileSize Word64 +@@ -225,20 +229,26 @@ countOfRoundUp alignment (CountOf n) = CountOf ((n + (alignment-1)) .&. compleme + + csizeOfSize :: CountOf Word8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfSize (CountOf (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfSize (CountOf (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfSize (CountOf (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +- + #else + csizeOfSize (CountOf (I# sz)) = CSize (W64# (int2Word# sz)) +- + #endif + #endif + + csizeOfOffset :: Offset8 -> CSize + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++csizeOfOffset (Offset (I# sz)) = CSize (W32# (wordToWord32# (int2Word# sz))) ++#else + csizeOfOffset (Offset (I# sz)) = CSize (W32# (int2Word# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + csizeOfOffset (Offset (I# sz)) = CSize (W64# (wordToWord64# (int2Word# sz))) +@@ -250,7 +260,11 @@ csizeOfOffset (Offset (I# sz)) = CSize (W64# (int2Word# sz)) + sizeOfCSSize :: CSsize -> CountOf Word8 + sizeOfCSSize (CSsize (-1)) = error "invalid size: CSSize is -1" + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# (int32ToInt# sz)) ++#else + sizeOfCSSize (CSsize (I32# sz)) = CountOf (I# sz) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# (int64ToInt# sz)) +@@ -261,7 +275,11 @@ sizeOfCSSize (CSsize (I64# sz)) = CountOf (I# sz) + + sizeOfCSize :: CSize -> CountOf Word8 + #if WORD_SIZE_IN_BITS < 64 ++#if __GLASGOW_HASKELL__ >= 904 ++sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# (word32ToWord# sz))) ++#else + sizeOfCSize (CSize (W32# sz)) = CountOf (I# (word2Int# sz)) ++#endif + #else + #if __GLASGOW_HASKELL__ >= 904 + sizeOfCSize (CSize (W64# sz)) = CountOf (I# (word2Int# (word64ToWord# sz))) diff --git a/srcpkgs/xmobar/patches/cborg.patch b/srcpkgs/xmobar/patches/cborg.patch new file mode 100644 index 00000000000..b44ba514458 --- /dev/null +++ b/srcpkgs/xmobar/patches/cborg.patch @@ -0,0 +1,212 @@ +commit 9d1418bb8b38cb9a438d7f18835b1ef7ef12b234 +Author: amesgen +Date: Sun Sep 10 20:03:40 2023 +0200 + + Fix compilation and support GHC >=9.2 on 32bit + +diff --git a/cborg/src/Codec/CBOR/Decoding.hs b/cborg/src/Codec/CBOR/Decoding.hs +index a7d774c..bf68e68 100644 +--- a/cborg/src/Codec/CBOR/Decoding.hs ++++ b/cborg/src/Codec/CBOR/Decoding.hs +@@ -315,11 +315,16 @@ getDecodeAction (Decoder k) = k (\x -> return (Done x)) + toInt8 :: Int# -> Int8 + toInt16 :: Int# -> Int16 + toInt32 :: Int# -> Int32 +-toInt64 :: Int# -> Int64 + toWord8 :: Word# -> Word8 + toWord16 :: Word# -> Word16 + toWord32 :: Word# -> Word32 ++#if defined(ARCH_64bit) ++toInt64 :: Int# -> Int64 + toWord64 :: Word# -> Word64 ++#else ++toInt64 :: Int64# -> Int64 ++toWord64 :: Word64# -> Word64 ++#endif + #if MIN_VERSION_ghc_prim(0,8,0) + toInt8 n = I8# (intToInt8# n) + toInt16 n = I16# (intToInt16# n) +@@ -327,8 +332,7 @@ toInt32 n = I32# (intToInt32# n) + toWord8 n = W8# (wordToWord8# n) + toWord16 n = W16# (wordToWord16# n) + toWord32 n = W32# (wordToWord32# n) +-#if WORD_SIZE_IN_BITS == 64 +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && defined(ARCH_64bit) + toInt64 n = I64# (intToInt64# n) + toWord64 n = W64# (wordToWord64# n) + #else +@@ -336,10 +340,6 @@ toInt64 n = I64# n + toWord64 n = W64# n + #endif + #else +-toInt64 n = I64# (intToInt64# n) +-toWord64 n = W64# (wordToWord64# n) +-#endif +-#else + toInt8 n = I8# n + toInt16 n = I16# n + toInt32 n = I32# n +@@ -986,7 +986,7 @@ type ByteOffset = Int64 + -- @since 0.2.2.0 + peekByteOffset :: Decoder s ByteOffset + peekByteOffset = Decoder (\k -> return (PeekByteOffset (\off# -> k (I64# +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (intToInt64# off#) + #else + off# +diff --git a/cborg/src/Codec/CBOR/Magic.hs b/cborg/src/Codec/CBOR/Magic.hs +index cdeb455..bfae638 100644 +--- a/cborg/src/Codec/CBOR/Magic.hs ++++ b/cborg/src/Codec/CBOR/Magic.hs +@@ -120,7 +120,7 @@ import qualified Numeric.Half as Half + import Data.Bits ((.|.), unsafeShiftL) + #endif + +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 (wordToWord64#, word64ToWord#, + intToInt64#, int64ToInt#, + leWord64#, ltWord64#, word64ToInt64#) +@@ -173,7 +173,7 @@ grabWord64 (Ptr ip#) = W64# (wordToWord64# (byteSwap# (word64ToWord# (indexWord6 + grabWord64 (Ptr ip#) = W64# (byteSwap# (indexWord64OffAddr# ip# 0#)) + #endif + #else +-grabWord64 (Ptr ip#) = W64# (byteSwap64# (word64ToWord# (indexWord64OffAddr# ip# 0#))) ++grabWord64 (Ptr ip#) = W64# (byteSwap64# (indexWord64OffAddr# ip# 0#)) + #endif + + #elif defined(MEM_UNALIGNED_OPS) && \ +@@ -484,7 +484,7 @@ word16ToInt (W16# w#) = I# (word2Int# (word16ToWord# w#)) + word32ToInt (W32# w#) = I# (word2Int# (word32ToWord# w#)) + #else + word32ToInt (W32# w#) = +- case isTrue# (w# `ltWord#` 0x80000000##) of ++ case isTrue# (word32ToWord# w# `ltWord#` 0x80000000##) of + True -> Just (I# (word2Int# (word32ToWord# w#))) + False -> Nothing + #endif +@@ -530,6 +530,19 @@ word64ToInt (W64# w#) = + {-# INLINE word64ToInt #-} + + #if defined(ARCH_32bit) ++#if MIN_VERSION_ghc_prim(0,8,0) ++word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# (word8ToWord# w#))) ++word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# (word16ToWord# w#))) ++word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# (word32ToWord# w#))) ++word64ToInt64 (W64# w#) = ++ case isTrue# (w# `ltWord64#` uncheckedShiftL64# (wordToWord64# 1##) 63#) of ++ True -> Just (I64# (word64ToInt64# w#)) ++ False -> Nothing ++ ++word8ToWord64 (W8# w#) = W64# (wordToWord64# (word8ToWord# w#)) ++word16ToWord64 (W16# w#) = W64# (wordToWord64# (word16ToWord# w#)) ++word32ToWord64 (W32# w#) = W64# (wordToWord64# (word32ToWord# w#)) ++#else + word8ToInt64 (W8# w#) = I64# (intToInt64# (word2Int# w#)) + word16ToInt64 (W16# w#) = I64# (intToInt64# (word2Int# w#)) + word32ToInt64 (W32# w#) = I64# (word64ToInt64# (wordToWord64# w#)) +@@ -541,6 +554,7 @@ word64ToInt64 (W64# w#) = + word8ToWord64 (W8# w#) = W64# (wordToWord64# w#) + word16ToWord64 (W16# w#) = W64# (wordToWord64# w#) + word32ToWord64 (W32# w#) = W64# (wordToWord64# w#) ++#endif + + {-# INLINE word8ToInt64 #-} + {-# INLINE word16ToInt64 #-} +diff --git a/cborg/src/Codec/CBOR/Read.hs b/cborg/src/Codec/CBOR/Read.hs +index 6546575..c4dc761 100644 +--- a/cborg/src/Codec/CBOR/Read.hs ++++ b/cborg/src/Codec/CBOR/Read.hs +@@ -63,7 +63,7 @@ import qualified Data.Text as T + import qualified Data.Text.Encoding as T + import Data.Word + import GHC.Word +-#if defined(ARCH_32bit) ++#if defined(ARCH_32bit) && !MIN_VERSION_ghc_prim(0,8,0) + import GHC.IntWord64 + #endif + import GHC.Exts +@@ -510,8 +510,8 @@ go_fast !bs da@(ConsumeNegWord64Canonical k) = + go_fast !bs da@(ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> go_fast_end bs da +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast (BS.unsafeDrop sz bs) + | otherwise -> go_fast_end bs da + + go_fast !bs da@(ConsumeListLen64Canonical k) = +@@ -994,8 +994,8 @@ go_fast_end !bs (ConsumeNegWord64Canonical k) = + go_fast_end !bs (ConsumeInt64Canonical k) = + case tryConsumeInt64 (BS.unsafeHead bs) bs of + DecodeFailure -> return $! SlowFail bs "expected int64" +- DecodedToken sz i@(I64# i#) +- | isInt64Canonical sz i -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) ++ DecodedToken sz (I64# i#) ++ | isInt64Canonical sz i# -> k i# >>= go_fast_end (BS.unsafeDrop sz bs) + | otherwise -> return $! SlowFail bs "non-canonical int64" + + go_fast_end !bs (ConsumeListLen64Canonical k) = +@@ -1271,7 +1271,7 @@ go_slow da bs !offset = do + + SlowPeekByteOffset bs' k -> + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1381,7 +1381,7 @@ go_slow_overlapped da sz bs_cur bs_next !offset = + SlowPeekByteOffset bs_empty k -> + assert (BS.null bs_empty) $ do + lift +-#if MIN_VERSION_base(4,17,0) ++#if MIN_VERSION_base(4,17,0) && !defined(ARCH_32bit) + (k (int64ToInt# off#)) + #else + (k off#) +@@ -1565,17 +1565,17 @@ isIntCanonical sz i + {-# INLINE isWord64Canonical #-} + isWord64Canonical :: Int -> Word64 -> Bool + isWord64Canonical sz w +- | sz == 2 = w > 0x17) +- | sz == 3 = w > 0xff) +- | sz == 5 = w > 0xffff) +- | sz == 9 = w > 0xffffffff) ++ | sz == 2 = w > 0x17 ++ | sz == 3 = w > 0xff ++ | sz == 5 = w > 0xffff ++ | sz == 9 = w > 0xffffffff + | otherwise = True + + {-# INLINE isInt64Canonical #-} + isInt64Canonical :: Int -> Int64# -> Bool + isInt64Canonical sz i# +- | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (not64# w#) +- | otherwise = isWord64Canonical sz w# ++ | isTrue# (i# `ltInt64#` intToInt64# 0#) = isWord64Canonical sz (W64# (not64# w#)) ++ | otherwise = isWord64Canonical sz (W64# w#) + where + w# = int64ToWord64# i# + #endif +@@ -1796,7 +1796,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x1b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! toInteger w) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! toInteger w) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! toInteger w) + #endif +@@ -1838,7 +1838,7 @@ tryConsumeInteger hdr !bs = case word8ToWord hdr of + 0x3b -> let !w = eatTailWord64 bs + sz = 9 + #if defined(ARCH_32bit) +- in DecodedToken sz (BigIntToken (isWord64Canonical sz (word64ToWord w)) $! (-1 - toInteger w)) ++ in DecodedToken sz (BigIntToken (isWord64Canonical sz w) $! (-1 - toInteger w)) + #else + in DecodedToken sz (BigIntToken (isWordCanonical sz (word64ToWord w)) $! (-1 - toInteger w)) + #endif diff --git a/srcpkgs/xmobar/patches/gtk2hs-buildtools.patch b/srcpkgs/xmobar/patches/gtk2hs-buildtools.patch new file mode 100644 index 00000000000..a5ce1961130 --- /dev/null +++ b/srcpkgs/xmobar/patches/gtk2hs-buildtools.patch @@ -0,0 +1,14 @@ +diff -ru gtk2hs-buildtools-old/c2hs/toplevel/C2HSConfig.hs gtk2hs-buildtools/c2hs/toplevel/C2HSConfig.hs +--- a/gtk2hs-buildtools/c2hs/toplevel/C2HSConfig.hs 2025-07-06 12:48:16.827097351 +0100 ++++ b/gtk2hs-buildtools/c2hs/toplevel/C2HSConfig.hs 2025-07-06 12:50:54.803997950 +0100 +@@ -70,8 +70,8 @@ + cppopts :: [String] + cppopts = case (os,cpp) of + ("openbsd","cpp") -> ["-xc", "-w"] +- (_,"cpp") -> ["-x", "c", "-w"] +- (_,"gcc") -> ["-E", "-x", "c", "-w"] ++ (_,"cpp") -> ["-x", "c", "-w", "-std=c99", "-D_Noreturn=", "-D_Nullable=", "-D_Nonnull="] ++ (_,"gcc") -> ["-E", "-x", "c", "-w", "-std=c99", "-D_Noreturn=", "-D_Nullable=", "-D_Nonnull="] + _ -> [] + + -- C preprocessor option for including only definitions (EXPORTED) diff --git a/srcpkgs/xmobar/patches/memory.patch b/srcpkgs/xmobar/patches/memory.patch new file mode 100644 index 00000000000..2a6d85b720d --- /dev/null +++ b/srcpkgs/xmobar/patches/memory.patch @@ -0,0 +1,36 @@ +From 2738929ce15b4c8704bbbac24a08539b5d4bf30e Mon Sep 17 00:00:00 2001 +From: sternenseemann +Date: Mon, 14 Aug 2023 10:51:30 +0200 +Subject: [PATCH] Data.Memory.Internal.CompatPrim64: fix 32 bit with GHC >= 9.4 + +Since 9.4, GHC.Prim exports Word64# operations like timesWord64# even on +i686 whereas GHC.IntWord64 no longer exists. Therefore, we can just use +the ready made solution. + +Closes #98, as it should be the better solution. +--- + Data/Memory/Internal/CompatPrim64.hs | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Data/Memory/Internal/CompatPrim64.hs b/Data/Memory/Internal/CompatPrim64.hs +index b9eef8a..a134c88 100644 +--- a/memory/Data/Memory/Internal/CompatPrim64.hs ++++ b/memory/Data/Memory/Internal/CompatPrim64.hs +@@ -150,6 +150,7 @@ w64# :: Word# -> Word# -> Word# -> Word64# + w64# w _ _ = w + + #elif WORD_SIZE_IN_BITS == 32 ++#if __GLASGOW_HASKELL__ < 904 + import GHC.IntWord64 + import GHC.Prim (Word#) + +@@ -158,6 +159,9 @@ timesWord64# a b = + let !ai = word64ToInt64# a + !bi = word64ToInt64# b + in int64ToWord64# (timesInt64# ai bi) ++#else ++import GHC.Prim ++#endif + + w64# :: Word# -> Word# -> Word# -> Word64# + w64# _ hw lw = diff --git a/srcpkgs/xmobar/template b/srcpkgs/xmobar/template index da243bc7f78..9e325c6f1dc 100644 --- a/srcpkgs/xmobar/template +++ b/srcpkgs/xmobar/template @@ -1,11 +1,12 @@ # Template file for 'xmobar' pkgname=xmobar -version=0.42 +version=0.50 revision=1 -build_style=haskell-stack +build_style=cabal +cabal_index_state=2025-07-05T14:01:16Z hostmakedepends="pkg-config" makedepends="libX11-devel libXinerama-devel libXrandr-devel libXScrnSaver-devel - $(vopt_if xft libXft-devel) + glib-devel cairo-devel pango-devel $(vopt_if iwlib wireless_tools-devel) $(vopt_if xpm libXpm-devel) $(vopt_if dbus libxml2-devel $(vopt_if mpris libxml2-devel)) @@ -14,15 +15,29 @@ short_desc="Minimalistic Text Based Status Bar" maintainer="Orphaned " license="BSD-3-Clause" homepage="https://xmobar.org" -distfiles="https://hackage.haskell.org/package/${pkgname}-${version}/${pkgname}-${version}.tar.gz" -checksum=53f4a06d79c3db32ef1a498ec7b764b17d03ebf9bca3126c6b8259595492769b -build_options="dbus threaded utf8 xft mpd mpris inotify iwlib alsa datezone +distfiles="https://hackage.haskell.org/package/${pkgname}-${version}/${pkgname}-${version}.tar.gz + https://hackage.haskell.org/package/gtk2hs-buildtools-0.13.12.0/gtk2hs-buildtools-0.13.12.0.tar.gz + https://hackage.haskell.org/package/basement-0.0.16/basement-0.0.16.tar.gz + https://hackage.haskell.org/package/memory-0.18.0/memory-0.18.0.tar.gz + https://hackage.haskell.org/package/cborg-0.2.10.0/cborg-0.2.10.0.tar.gz" +checksum="09249e50546f1eb93888bf1e134d0034d486cadb29a8fde4df097d140e06da08 + 2308f302b1a55376c715778b89b15d0d7e0cc20c8589b803b5f9010ea2f1e495 + 7fb77e249aef76ba5aed3059d556800ce02b614597c488ba01f0a16449146300 + fd4eb6f638e24b81b4e6cdd68772a531726f2f67686c8969d3407d82f7862e3e + 17fe070c38fc498cab49bcb9d6215b7747d53bedf96502e9bcce9cad73b9c797" +build_options="dbus threaded mpd mpris inotify iwlib alsa datezone xpm uvmeter weather nl80211" -build_options_default="threaded utf8 xft inotify nl80211 datezone weather xpm alsa mpris mpd dbus" +build_options_default="threaded inotify nl80211 datezone weather xpm alsa mpris mpd dbus" nopie_files="/usr/bin/xmobar" nocross=yes +skip_extraction=" + gtk2hs-buildtools-0.13.12.0.tar.gz + basement-0.0.16.tar.gz + memory-0.18.0.tar.gz + cborg-0.2.10.0.tar.gz" +make_check=no # TODO figure out how hspec works vopt_hflag() { - echo $(vopt_if $1 "--flag ${pkgname}:with_$1" "--flag ${pkgname}:-with_$1") + echo $(vopt_if $1 "--flags=with_$1" "--flags=-with_$1") } mk_string_build_args() { for optn in $1 @@ -31,6 +46,18 @@ mk_string_build_args() { done } make_build_args=$(mk_string_build_args "$build_options") + +post_extract() { + vsrcextract -C gtk2hs-buildtools gtk2hs-buildtools-0.13.12.0.tar.gz + vsrcextract -C basement basement-0.0.16.tar.gz + vsrcextract -C memory memory-0.18.0.tar.gz + vsrcextract -C cborg cborg-0.2.10.0.tar.gz +} + +pre_configure() { + echo 'packages: ./gtk2hs-buildtools ./basement ./memory ./cborg .' > cabal.project +} + post_install() { vlicense license }