[MacPorts] PortfileRecipes modified

MacPorts noreply at macports.org
Tue Mar 5 16:42:36 PST 2013


Page "PortfileRecipes" was changed by cal at macports.org
Diff URL: <https://trac.macports.org/wiki/PortfileRecipes?action=diff&version=51>
Revision 51
Comment: Finish documentation of the deactivate hack
Changes:
-------8<------8<------8<------8<------8<------8<------8<------8<--------
Index: PortfileRecipes
=========================================================================
--- PortfileRecipes (version: 50)
+++ PortfileRecipes (version: 51)
@@ -472,3 +472,14 @@
     lappend rlist [list [$port name] [$port version] [$port revision] [$port variants] [string equal [$port state] "installed"] [$port epoch]]
 }
 }}}
+This snippet tells us which values can be found at which offsets in the (second level) list returned by `registry_active` to the Portfile:
+   - Index 0: name of the port
+   - Index 1: port version
+   - Index 2: port revision
+   - Index 3: port variants (this is what the active_variants PortGroup uses!)
+   - Index 4: 1, if the port is installed, 0 otherwise
+   - Index 5: port epoch
+ - From this journey into MacPorts internals, we know that `registry_active` will return a list, but in our case it will always only contain one element. We can strip the outer list using `[lindex $returnval_of_registry_active 0]`.
+ - Because `registry_active` will raise an error if the port requested is not active, we need to wrap it in a catch statement. If catch returns 0 (i.e., no error occured), we know the port in question is active.
+ - In the example above, we retrieve the version of `kerberos5` (from index 1) and check using `vercmp` whether it is lower than 1.11. If it is, we need to deactivate the `kerberos5` port.
+ - To do that, we can use `registry_deactivate_composite` (and you can probably guess that this is an alias, too, and where you can find it). `registry_deactivate_composite $name "" $options` is a shorthand for `registry_deactivate $name "" "" 0 $options` and will deactivate the port indicated by `$name`. The second argument is a version number, which we can leave empty in this case. If we would normally try to deactivate `kerberos5` it might fail, because other ports might still depend on `kerberos5` being present. Since we know that it will be reinstalled soon anyway, we can just force deactivation without paying respect to the dependent ports (which we do by passing `[list ports_nodepcheck 1]` as `$options` argument.
-------8<------8<------8<------8<------8<------8<------8<------8<--------

--
Page URL: <https://trac.macports.org/wiki/PortfileRecipes>
MacPorts <http://www.macports.org/>
Ports system for OS X

This is an automated message. Someone added your email address to be
notified of changes on 'PortfileRecipes' page.
If it was not you, please report to .


More information about the macports-changes mailing list