|
1 | 1 | __author__ = "desultory" |
2 | | -__version__ = "4.1.1" |
| 2 | +__version__ = "4.1.3" |
3 | 3 |
|
4 | 4 | from pathlib import Path |
5 | 5 | from shutil import rmtree, which |
@@ -112,22 +112,25 @@ def calculate_dependencies(self, binary: str) -> list[Path]: |
112 | 112 |
|
113 | 113 | @contains("merge_usr", "Skipping /usr merge", log_level=30) |
114 | 114 | def handle_usr_symlinks(self) -> None: |
115 | | - """Adds symlinks for /usr/bin and /usr/sbin to /bin and /sbin. |
| 115 | + """ |
| 116 | + Adds symlinks for /bin and /sbin to /usr/bin |
| 117 | + Adds a symlink for /usr/sbin to /usr/bin (-> bin) |
| 118 | + Adds smlinks for /lib to /usr/lib and /lib64 to /usr/lib64 |
116 | 119 | Warns if the symlink path is a directory on the host system. |
117 | 120 | """ |
118 | | - build_dir = self._get_build_path("/") |
119 | | - bin_dir = Path("bin") |
120 | | - sbin_dir = Path("sbin") |
121 | | - usr_sbin_dir = Path("usr/sbin") |
122 | | - |
123 | | - for d in [bin_dir, sbin_dir, usr_sbin_dir]: |
124 | | - if d.is_dir() and not d.is_symlink(): |
125 | | - self.logger.warning("Merged-usr symlink target is a directory: %s" % d) |
| 121 | + bin_symlink = ("bin", "usr/bin") |
| 122 | + sbin_symlink = ("sbin", "usr/bin") |
| 123 | + usr_sbin_symlink = ("usr/sbin", "bin") # Make it relative |
| 124 | + lib_symlink = ("lib", "usr/lib") |
| 125 | + lib64_symlink = ("lib64", "usr/lib64") |
| 126 | + symlinks = [bin_symlink, sbin_symlink, usr_sbin_symlink, lib_symlink, lib64_symlink] |
| 127 | + |
| 128 | + for target, source in symlinks: |
| 129 | + host_path = Path("/").joinpath(target) |
| 130 | + if host_path.is_dir() and not host_path.is_symlink(): |
| 131 | + self.logger.warning("Host path is a directory: %s" % host_path) |
126 | 132 | self.logger.warning("Set `merge_usr = false` to disable /usr merge.") |
127 | | - build_d = build_dir / d |
128 | | - if not build_d.is_dir() and not build_d.is_symlink(): |
129 | | - self.logger.log(5, "Creating merged-usr symlink to /usr/bin: %s" % build_d) |
130 | | - self._symlink("/usr/bin", d) |
| 133 | + self._symlink(source, target) |
131 | 134 |
|
132 | 135 |
|
133 | 136 | def deploy_dependencies(self) -> None: |
@@ -359,6 +362,10 @@ def _process_dependencies_multi(self, dependency: Union[Path, str]) -> None: |
359 | 362 | self["symlinks"][f"_auto_{dependency.name}"] = {"source": resolved_path, "target": dependency} |
360 | 363 | dependency = resolved_path |
361 | 364 |
|
| 365 | + if dependency.is_symlink(): |
| 366 | + dependency = dependency.resolve() |
| 367 | + self.logger.debug("Dependency target is a symlink, resolved to: %s" % dependency) |
| 368 | + |
362 | 369 | self.logger.debug("Added dependency: %s" % dependency) |
363 | 370 | self["dependencies"].append(dependency) |
364 | 371 |
|
|
0 commit comments