build.run: factor out extract method
This commit is contained in:
		
							parent
							
								
									cc9fe89049
								
							
						
					
					
						commit
						3200a3961d
					
				|  | @ -64,15 +64,10 @@ class BuildPlan: | ||||||
|             for filename in sorted(self.files): |             for filename in sorted(self.files): | ||||||
|                 archive.writestr(zipfile.ZipInfo(filename), self.files[filename]) |                 archive.writestr(zipfile.ZipInfo(filename), self.files[filename]) | ||||||
| 
 | 
 | ||||||
|     def execute_local(self, root="build", *, run_script=True, env=None): |     def extract(self, root="build"): | ||||||
|         """ |         """Extracts the files from the build plan into the local build directory ``root``. | ||||||
|         Execute build plan using the local strategy. Files from the build plan are placed in |  | ||||||
|         the build root directory ``root``, and, if ``run_script`` is ``True``, the script |  | ||||||
|         appropriate for the platform (``{script}.bat`` on Windows, ``{script}.sh`` elsewhere) |  | ||||||
|         is executed in the build root. If ``env`` is not ``None``, the environment is replaced |  | ||||||
|         with ``env``. |  | ||||||
| 
 | 
 | ||||||
|         Returns :class:`LocalBuildProducts`. |         Returns :class:`pathlib.Path` | ||||||
|         """ |         """ | ||||||
|         os.makedirs(root, exist_ok=True) |         os.makedirs(root, exist_ok=True) | ||||||
|         cwd = os.getcwd() |         cwd = os.getcwd() | ||||||
|  | @ -92,23 +87,34 @@ class BuildPlan: | ||||||
|                     content = content.encode("utf-8") |                     content = content.encode("utf-8") | ||||||
|                 with open(filename, "wb") as f: |                 with open(filename, "wb") as f: | ||||||
|                     f.write(content) |                     f.write(content) | ||||||
| 
 |             return pathlib.Path(os.getcwd()) | ||||||
|             if run_script: |  | ||||||
|                 if sys.platform.startswith("win32"): |  | ||||||
|                     # Without "call", "cmd /c {}.bat" will return 0. |  | ||||||
|                     # See https://stackoverflow.com/a/30736987 for a detailed explanation of why. |  | ||||||
|                     # Running the script manually from a command prompt is unaffected. |  | ||||||
|                     subprocess.check_call(["cmd", "/c", f"call {self.script}.bat"], |  | ||||||
|                                           env=os.environ if env is None else env) |  | ||||||
|                 else: |  | ||||||
|                     subprocess.check_call(["sh", f"{self.script}.sh"], |  | ||||||
|                                           env=os.environ if env is None else env) |  | ||||||
| 
 |  | ||||||
|             return LocalBuildProducts(os.getcwd()) |  | ||||||
| 
 |  | ||||||
|         finally: |         finally: | ||||||
|             os.chdir(cwd) |             os.chdir(cwd) | ||||||
| 
 | 
 | ||||||
|  |     def execute_local(self, root="build", *, run_script=True, env=None): | ||||||
|  |         """ | ||||||
|  |         Execute build plan using the local strategy. Files from the build plan are placed in | ||||||
|  |         the build root directory ``root``, and, if ``run_script`` is ``True``, the script | ||||||
|  |         appropriate for the platform (``{script}.bat`` on Windows, ``{script}.sh`` elsewhere) | ||||||
|  |         is executed in the build root. If ``env`` is not ``None``, the environment is replaced | ||||||
|  |         with ``env``. | ||||||
|  | 
 | ||||||
|  |         Returns :class:`LocalBuildProducts`. | ||||||
|  |         """ | ||||||
|  |         build_dir = self.extract(root) | ||||||
|  |         if run_script: | ||||||
|  |             if sys.platform.startswith("win32"): | ||||||
|  |                 # Without "call", "cmd /c {}.bat" will return 0. | ||||||
|  |                 # See https://stackoverflow.com/a/30736987 for a detailed explanation of why. | ||||||
|  |                 # Running the script manually from a command prompt is unaffected. | ||||||
|  |                 subprocess.check_call(["cmd", "/c", f"call {self.script}.bat"], | ||||||
|  |                                         env=os.environ if env is None else env) | ||||||
|  |             else: | ||||||
|  |                 subprocess.check_call(["sh", f"{self.script}.sh"], | ||||||
|  |                                         env=os.environ if env is None else env) | ||||||
|  | 
 | ||||||
|  |         return LocalBuildProducts(build_dir) | ||||||
|  | 
 | ||||||
|     def execute_remote_ssh(self, *, connect_to={}, root, run_script=True): |     def execute_remote_ssh(self, *, connect_to={}, root, run_script=True): | ||||||
|         """ |         """ | ||||||
|         Execute build plan using the remote SSH strategy. Files from the build |         Execute build plan using the remote SSH strategy. Files from the build | ||||||
|  |  | ||||||
|  | @ -35,6 +35,7 @@ Platform integration changes | ||||||
| 
 | 
 | ||||||
| .. currentmodule:: amaranth.vendor | .. currentmodule:: amaranth.vendor | ||||||
| 
 | 
 | ||||||
|  | * Added: :meth:`BuildPlan.extract`. | ||||||
| * Added: ``build.sh``  begins with ``#!/bin/sh``. | * Added: ``build.sh``  begins with ``#!/bin/sh``. | ||||||
| * Removed: (deprecated in 0.4) :mod:`vendor.intel`, :mod:`vendor.lattice_ecp5`, :mod:`vendor.lattice_ice40`, :mod:`vendor.lattice_machxo2_3l`, :mod:`vendor.quicklogic`, :mod:`vendor.xilinx`. (`RFC 18`_) | * Removed: (deprecated in 0.4) :mod:`vendor.intel`, :mod:`vendor.lattice_ecp5`, :mod:`vendor.lattice_ice40`, :mod:`vendor.lattice_machxo2_3l`, :mod:`vendor.quicklogic`, :mod:`vendor.xilinx`. (`RFC 18`_) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Jaro Habiger
						Jaro Habiger