89 | | ==== Scan for broken dynamic libraries for rebuild ==== #rev-upgrade |
90 | | |
91 | | Upgrading any port can naturally break its dependents if using dynamic libraries. The only way to fix this is currently rebuilding all dependents, no matter if necessary or not. MacPorts should get a new command to scan installed dynamic libraries and binaries for linker errors and mark the corresponding port for rebuild. After checking all files, broken ones should get rebuild in the correct order. Probably it has to do the check again after each set of rebuilds. |
92 | | |
93 | | {{{ |
94 | | port rev-upgrade [portname] |
95 | | }}} |
96 | | |
97 | | If you are familiar with Gentoo, this would be the equivalent of the revdep-rebuild command. See #17473 for more information. |
98 | | |
99 | | Classification: easy to medium task[[BR]] |
100 | | Programming languages: Tcl[[BR]] |
101 | | Potential mentor: raimue |
102 | | |
110 | | |
111 | | ==== Check dependencies after destroot ==== #depcheck |
112 | | |
113 | | MacPorts currently has trace mode to check which files are accessed during build and if they are in the dependency chain. This requires injecting the tracelib in all code that is run and interception all open calls and make checks on the pathnames which slows down the procedure. This task is about creating another feature for verifying the dependencies of a build. |
114 | | |
115 | | A new phase would be created which is to be run after the destroot phase to verify files. |
116 | | * It would iterate over all binaries and dynamically linked libraries in the destroot which are going to be installed and check the recorded paths against the dependency chain. |
117 | | * It will report broken symlinks, e.g. those pointing to the destroot |
118 | | Any problems found should be reported. |
119 | | |
120 | | This would be great to do a quick check if the dependencies are met without the effort from trace mode. It could also help to identify unnecessary dependencies. If this actually runs fast enough it could as well be enabled by default, although it should only be necessary for maintainers. |
121 | | |
122 | | Classification: medium task[[BR]] |
123 | | Programming languages: Tcl and C[[BR]] |
124 | | Potential mentor: raimue |