diff options
author | sheaf <sam.derbyshire@gmail.com> | 2022-06-16 10:58:29 +0200 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2022-06-16 16:30:39 -0400 |
commit | 9c575f24d41fed616e6f96fcbb4fa9a9687497a6 (patch) | |
tree | 215a12d5845e7ce30f268ff7c234da6d69b67052 /hadrian | |
parent | 99ff3818ad016dc30a044043fff682660dc56dfa (diff) | |
download | haskell-9c575f24d41fed616e6f96fcbb4fa9a9687497a6.tar.gz |
Hadrian bootstrap: look up hsc2hs
Hadrian bootstrapping looks up where to find ghc_pkg, but the same
logic was not in place for hsc2hs which meant we could fail to
find the appropriate hsc2hs executabe when bootstrapping Hadrian.
This patch adds that missing logic.
Diffstat (limited to 'hadrian')
-rwxr-xr-x | hadrian/bootstrap/bootstrap.py | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/hadrian/bootstrap/bootstrap.py b/hadrian/bootstrap/bootstrap.py index d5580ab484..d7c2c4d617 100755 --- a/hadrian/bootstrap/bootstrap.py +++ b/hadrian/bootstrap/bootstrap.py @@ -94,6 +94,9 @@ class Compiler: self.ghc_pkg_path = (self.ghc_path.parent / 'ghc-pkg').resolve() if not self.ghc_pkg_path.is_file(): raise TypeError(f'ghc-pkg {self.ghc_pkg_path} is not a file') + self.hsc2hs_path = (self.ghc_path.parent / 'hsc2hs').resolve() + if not self.hsc2hs_path.is_file(): + raise TypeError(f'hsc2hs {self.hsc2hs_path} is not a file') def _get_ghc_info(self) -> Dict[str,str]: from ast import literal_eval @@ -198,6 +201,7 @@ def install_sdist(dist_dir: Path, sdist_dir: Path, ghc: Compiler, flags: List[st f'--bindir={BINDIR.resolve()}', f'--with-compiler={ghc.ghc_path}', f'--with-hc-pkg={ghc.ghc_pkg_path}', + f'--with-hsc2hs={ghc.hsc2hs_path}', f'--flags={flags_option}', ] @@ -384,7 +388,7 @@ def main() -> None: ghc = find_ghc(args.with_compiler) args.deps = Path(sys.path[0]) / f"plan-bootstrap-{ghc.version.replace('.','_')}.json" print(f"defaulting bootstrap plan to {args.deps}") - # We have a tarball with all the required information, unpack it and use for further + # We have a tarball with all the required information, unpack it and use for further elif args.bootstrap_sources is not None and args.command != 'list-sources': print(f'Unpacking {args.bootstrap_sources} to {TARBALLS}') shutil.unpack_archive(args.bootstrap_sources.resolve(), TARBALLS, 'gztar') @@ -415,16 +419,16 @@ def main() -> None: # In temporary directory, create a directory which we will archive tmpdir = TMPDIR.resolve() tmpdir.mkdir(parents=True, exist_ok=True) - + rootdir = Path(tempfile.mkdtemp(dir=tmpdir)) - + fetch_from_plan(plan, rootdir) shutil.copyfile(args.deps, rootdir / 'plan-bootstrap.json') fmt = 'gztar' if platform.system() == 'Windows': fmt = 'zip' - + archivename = shutil.make_archive(args.output, fmt, root_dir=rootdir) print(f'Bootstrap sources saved to {archivename}') |