From 892d10764791de0073ae59de62264d460fee4c7e Mon Sep 17 00:00:00 2001 From: John Ericson Date: Wed, 4 Jan 2023 17:19:13 -0500 Subject: Get newer Cabal for Hadrian, use for `findPtr` There are many more things we would use this for, this is just a first simple example to ensure the Cabal bump is working as intended. The support for multiple package in `bootstrap.py` matches Cabal's `bootstrap.py`, its inspiration, in order to keep it easy to sync changes back and forth. --- hadrian/bootstrap/bootstrap.py | 6 ++++-- hadrian/bootstrap/plan-bootstrap-9_2_1.json | 22 ++++++++++++++++++---- hadrian/bootstrap/plan-bootstrap-9_2_2.json | 22 ++++++++++++++++++---- hadrian/bootstrap/plan-bootstrap-9_2_3.json | 22 ++++++++++++++++++---- hadrian/bootstrap/plan-bootstrap-9_2_4.json | 22 ++++++++++++++++++---- hadrian/bootstrap/plan-bootstrap-9_2_5.json | 22 ++++++++++++++++++---- hadrian/bootstrap/plan-bootstrap-9_4_1.json | 26 ++++++++++++++++++-------- hadrian/bootstrap/plan-bootstrap-9_4_2.json | 26 ++++++++++++++++++-------- hadrian/bootstrap/plan-bootstrap-9_4_3.json | 26 ++++++++++++++++++-------- hadrian/cabal.project | 2 ++ hadrian/hadrian.cabal | 2 +- hadrian/stack.yaml | 2 ++ rts/configure.ac | 11 ++++++++++- rts/external-symbols.list.in | 4 ++++ rts/rts.cabal.in | 17 ----------------- 15 files changed, 167 insertions(+), 65 deletions(-) diff --git a/hadrian/bootstrap/bootstrap.py b/hadrian/bootstrap/bootstrap.py index b997cbc916..4fd6e147a5 100755 --- a/hadrian/bootstrap/bootstrap.py +++ b/hadrian/bootstrap/bootstrap.py @@ -78,6 +78,8 @@ FetchInfo = NamedTuple('FetchInfo', [ FetchPlan = Dict[Path, FetchInfo] +local_packages: List[PackageName] = ["hadrian", "Cabal-syntax", "Cabal"] + class Compiler: def __init__(self, ghc_path: Path): if not ghc_path.is_file(): @@ -173,7 +175,7 @@ def resolve_dep(dep : BootstrapDep) -> Path: shutil.copyfile(cabal_file, sdist_dir / f'{dep.package}.cabal') elif dep.source == PackageSource.LOCAL: - if dep.package == 'hadrian': + if dep.package in local_packages: sdist_dir = Path(sys.path[0]).parent.resolve() else: raise ValueError(f'Unknown local package {dep.package}') @@ -341,7 +343,7 @@ def fetch_from_plan(plan : FetchPlan, output_dir : Path): def gen_fetch_plan(info : BootstrapInfo) -> FetchPlan : sources_dict = {} for dep in info.dependencies: - if dep.package != 'hadrian': + if not(dep.package in local_packages): sources_dict[f"{dep.package}-{dep.version}.tar.gz"] = FetchInfo(package_url(dep.package, dep.version), dep.src_sha256) if dep.revision is not None: sources_dict[f"{dep.package}.cabal"] = FetchInfo(package_cabal_url(dep.package, dep.version, dep.revision), dep.cabal_sha256) diff --git a/hadrian/bootstrap/plan-bootstrap-9_2_1.json b/hadrian/bootstrap/plan-bootstrap-9_2_1.json index 7d7d496249..5a40d0e41b 100644 --- a/hadrian/bootstrap/plan-bootstrap-9_2_1.json +++ b/hadrian/bootstrap/plan-bootstrap-9_2_1.json @@ -83,10 +83,6 @@ { "package": "process", "version": "1.6.13.2" - }, - { - "package": "Cabal", - "version": "3.6.0.0" } ], "dependencies": [ @@ -242,6 +238,24 @@ "src_sha256": "7d9db837bfd67acaaabdb3cea29acc15559ede82dd9f75d438589268031cd542", "version": "0.19.6" }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, { "cabal_sha256": null, "flags": [ diff --git a/hadrian/bootstrap/plan-bootstrap-9_2_2.json b/hadrian/bootstrap/plan-bootstrap-9_2_2.json index 23a5757faf..00fa1b854d 100644 --- a/hadrian/bootstrap/plan-bootstrap-9_2_2.json +++ b/hadrian/bootstrap/plan-bootstrap-9_2_2.json @@ -83,10 +83,6 @@ { "package": "process", "version": "1.6.13.2" - }, - { - "package": "Cabal", - "version": "3.6.3.0" } ], "dependencies": [ @@ -242,6 +238,24 @@ "src_sha256": "7d9db837bfd67acaaabdb3cea29acc15559ede82dd9f75d438589268031cd542", "version": "0.19.6" }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, { "cabal_sha256": null, "flags": [ diff --git a/hadrian/bootstrap/plan-bootstrap-9_2_3.json b/hadrian/bootstrap/plan-bootstrap-9_2_3.json index cdc55fdc5c..77c7eae062 100644 --- a/hadrian/bootstrap/plan-bootstrap-9_2_3.json +++ b/hadrian/bootstrap/plan-bootstrap-9_2_3.json @@ -83,10 +83,6 @@ { "package": "process", "version": "1.6.13.2" - }, - { - "package": "Cabal", - "version": "3.6.3.0" } ], "dependencies": [ @@ -242,6 +238,24 @@ "src_sha256": "7d9db837bfd67acaaabdb3cea29acc15559ede82dd9f75d438589268031cd542", "version": "0.19.6" }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, { "cabal_sha256": null, "flags": [ diff --git a/hadrian/bootstrap/plan-bootstrap-9_2_4.json b/hadrian/bootstrap/plan-bootstrap-9_2_4.json index e5916c0685..4af325b441 100644 --- a/hadrian/bootstrap/plan-bootstrap-9_2_4.json +++ b/hadrian/bootstrap/plan-bootstrap-9_2_4.json @@ -83,10 +83,6 @@ { "package": "process", "version": "1.6.13.2" - }, - { - "package": "Cabal", - "version": "3.6.3.0" } ], "dependencies": [ @@ -242,6 +238,24 @@ "src_sha256": "7d9db837bfd67acaaabdb3cea29acc15559ede82dd9f75d438589268031cd542", "version": "0.19.6" }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, { "cabal_sha256": null, "flags": [ diff --git a/hadrian/bootstrap/plan-bootstrap-9_2_5.json b/hadrian/bootstrap/plan-bootstrap-9_2_5.json index d1901ebb57..685ef61fa7 100644 --- a/hadrian/bootstrap/plan-bootstrap-9_2_5.json +++ b/hadrian/bootstrap/plan-bootstrap-9_2_5.json @@ -83,10 +83,6 @@ { "package": "process", "version": "1.6.16.0" - }, - { - "package": "Cabal", - "version": "3.6.3.0" } ], "dependencies": [ @@ -242,6 +238,24 @@ "src_sha256": "7d9db837bfd67acaaabdb3cea29acc15559ede82dd9f75d438589268031cd542", "version": "0.19.6" }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, { "cabal_sha256": null, "flags": [ diff --git a/hadrian/bootstrap/plan-bootstrap-9_4_1.json b/hadrian/bootstrap/plan-bootstrap-9_4_1.json index 4d42eaf876..8c3adf907e 100644 --- a/hadrian/bootstrap/plan-bootstrap-9_4_1.json +++ b/hadrian/bootstrap/plan-bootstrap-9_4_1.json @@ -80,17 +80,9 @@ "package": "parsec", "version": "3.1.15.0" }, - { - "package": "Cabal-syntax", - "version": "3.8.1.0" - }, { "package": "process", "version": "1.6.15.0" - }, - { - "package": "Cabal", - "version": "3.8.1.0" } ], "dependencies": [ @@ -246,6 +238,24 @@ "src_sha256": "7d9db837bfd67acaaabdb3cea29acc15559ede82dd9f75d438589268031cd542", "version": "0.19.6" }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, { "cabal_sha256": null, "flags": [ diff --git a/hadrian/bootstrap/plan-bootstrap-9_4_2.json b/hadrian/bootstrap/plan-bootstrap-9_4_2.json index 412cda97d2..fa3d512867 100644 --- a/hadrian/bootstrap/plan-bootstrap-9_4_2.json +++ b/hadrian/bootstrap/plan-bootstrap-9_4_2.json @@ -80,17 +80,9 @@ "package": "parsec", "version": "3.1.15.0" }, - { - "package": "Cabal-syntax", - "version": "3.8.1.0" - }, { "package": "process", "version": "1.6.15.0" - }, - { - "package": "Cabal", - "version": "3.8.1.0" } ], "dependencies": [ @@ -246,6 +238,24 @@ "src_sha256": "7d9db837bfd67acaaabdb3cea29acc15559ede82dd9f75d438589268031cd542", "version": "0.19.6" }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, { "cabal_sha256": null, "flags": [ diff --git a/hadrian/bootstrap/plan-bootstrap-9_4_3.json b/hadrian/bootstrap/plan-bootstrap-9_4_3.json index c435814d9b..56898b0339 100644 --- a/hadrian/bootstrap/plan-bootstrap-9_4_3.json +++ b/hadrian/bootstrap/plan-bootstrap-9_4_3.json @@ -80,17 +80,9 @@ "package": "parsec", "version": "3.1.15.0" }, - { - "package": "Cabal-syntax", - "version": "3.8.1.0" - }, { "package": "process", "version": "1.6.16.0" - }, - { - "package": "Cabal", - "version": "3.8.1.0" } ], "dependencies": [ @@ -246,6 +238,24 @@ "src_sha256": "7d9db837bfd67acaaabdb3cea29acc15559ede82dd9f75d438589268031cd542", "version": "0.19.6" }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, + { + "cabal_sha256": null, + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.9.0.0" + }, { "cabal_sha256": null, "flags": [ diff --git a/hadrian/cabal.project b/hadrian/cabal.project index 769b1f0558..b8991ad09e 100644 --- a/hadrian/cabal.project +++ b/hadrian/cabal.project @@ -1,4 +1,6 @@ packages: ./ +-- N.B. This could be removed once Cabal 3.9 is released. +packages: ../libraries/Cabal/Cabal, ../libraries/Cabal/Cabal-syntax -- This essentially freezes the build plan for hadrian index-state: 2022-11-19T22:13:06Z diff --git a/hadrian/hadrian.cabal b/hadrian/hadrian.cabal index b0c4533b36..b3dce99dcc 100644 --- a/hadrian/hadrian.cabal +++ b/hadrian/hadrian.cabal @@ -149,7 +149,7 @@ executable hadrian , TypeOperators other-extensions: MultiParamTypeClasses , TypeFamilies - build-depends: Cabal >= 3.2 && < 3.9 + build-depends: Cabal >= 3.9 && < 3.10 , base >= 4.11 && < 5 , bytestring >= 0.10 && < 0.12 , containers >= 0.5 && < 0.7 diff --git a/hadrian/stack.yaml b/hadrian/stack.yaml index 9114485dd8..44a65c46c6 100644 --- a/hadrian/stack.yaml +++ b/hadrian/stack.yaml @@ -2,6 +2,8 @@ resolver: lts-19.8 packages: - '.' +- '../libraries/Cabal/Cabal' +- '../libraries/Cabal/Cabal-syntax' nix: enable: false diff --git a/rts/configure.ac b/rts/configure.ac index 0bab911e8b..1585906bf9 100644 --- a/rts/configure.ac +++ b/rts/configure.ac @@ -62,8 +62,14 @@ dnl ###################################################################### dnl See Note [Undefined symbols in the RTS] +[ +symbolExtraDefs='' +if [[ $CABAL_FLAG_find_ptr = 1 ]]; then + symbolExtraDefs+=' -DFIND_PTR' +fi + cat $srcdir/external-symbols.list.in \ - | "$CC" -E -P -traditional -Iinclude - -o - \ + | "$CC" $symbolExtraDefs -E -P -traditional -Iinclude - -o - \ | sed '/^$/d' \ > external-symbols.list \ || exit 1 @@ -75,14 +81,17 @@ else sed 's/^/ -Wl,-u,/' external-symbols.tmp > external-symbols.list fi rm -f external-symbols.tmp +] dnl ###################################################################### dnl Generate build-info dnl ###################################################################### +[ cat $srcdir/rts.buildinfo.in | \ sed -e 's/^ *//' | \ "$CC" -E -P -traditional - -o - \ > rts.buildinfo echo "" >> rts.buildinfo rm -f external-symbols.list +] diff --git a/rts/external-symbols.list.in b/rts/external-symbols.list.in index a431fb6114..ed2ad09a2a 100644 --- a/rts/external-symbols.list.in +++ b/rts/external-symbols.list.in @@ -19,6 +19,10 @@ hs_atomicwrite64 base_GHCziEventziWindows_processRemoteCompletion_closure #endif +#if FIND_PTR +findPtr +#endif + base_GHCziTopHandler_runIO_closure base_GHCziTopHandler_runNonIO_closure ghczmprim_GHCziTupleziPrim_Z0T_closure diff --git a/rts/rts.cabal.in b/rts/rts.cabal.in index c93023f2d3..a0d2b6e5c4 100644 --- a/rts/rts.cabal.in +++ b/rts/rts.cabal.in @@ -295,23 +295,6 @@ library stg/Ticky.h stg/Types.h - -- See Note [Undefined symbols in the RTS] - -- - -- We should handle this symbol with the others in the configure script - -- once we are using Cabal containing - -- https://github.com/haskell/cabal/pull/8565 / - -- 30f8a46008d164b5c4c6ce0b4453eb93eb5ef46c. - if flag(leading-underscore) - if flag(find-ptr) - -- This symbol is useful in gdb, but not referred to anywhere, - -- so we need to force it to be included in the binary. - ld-options: "-Wl,-u,_findPtr" - else - if flag(find-ptr) - -- This symbol is useful in gdb, but not referred to anywhere, - -- so we need to force it to be included in the binary. - ld-options: "-Wl,-u,findPtr" - if os(osx) ld-options: "-Wl,-search_paths_first" -- See Note [fd_set_overflow] -- cgit v1.2.1