<html> <head>  <title>asdf system dependency use cases</title> </head> <body>  <hr />  <p>simple dependency intends this behaviour:  <table>  <tr><th><th colspan="2">component status</th><th rowspan="2" valign="top">effect</th></tr>  <tr><th>expression</th><th>component a</th><th>component/feature b</th></tr>  <tr><td>a (:depends-on (:b))</td><td style="text-align:center">present</td><td style="text-align:center">present</td><td>(operate b), (operate a)</td>  <tr><td>a (:depends-on (:b))</td><td style="text-align:center">present</td><td style="text-align:center">absent</td><td>error</td>  <tr><td>a (:depends-on (:b))</td><td style="text-align:center">absent</td><td style="text-align:center">present</td><td>  error</td>  <tr><td>a (:depends-on (:b))</td><td style="text-align:center">absent</td><td style="text-align:center">absent</td><td>   error</td></tr>  </table>  </p>  <hr />  <p>given the code in parse-component-form, :weakly-depends-on would appear to effect this behaviour:  <table>  <tr><th><th colspan="2">component status</th><th rowspan="2" valign="top">effect</th></tr>  <tr><th>expression</th><th>component a</th><th>component/feature b</th></tr>  <tr><td>a (:weakly-depends-on (:b))</td><td style="text-align:center">present</td><td style="text-align:center">present</td><td>  (operate b), (operate a)</td>  <tr><td>a (:weakly-depends-on (:b))</td><td style="text-align:center">present</td><td style="text-align:center">absent</td><td>   (operate a)</td>  <tr><td>a (:weakly-depends-on (:b))</td><td style="text-align:center">absent</td><td style="text-align:center">present</td><td>  error</td>  <tr><td>a (:weakly-depends-on (:b))</td><td style="text-align:center">absent</td><td style="text-align:center">absent</td><td>   error</td></tr>  </table>  </p>  <hr />  <p>there are cases, where it is useful to cause a third behaviour:  <table>  <tr><th><th colspan="2">component status</th><th rowspan="2" valign="top">effect</th></tr>  <tr><th>expression</th><th>component a</th><th>component/feature b</th></tr>  <tr><td>a (:contingent-on (:b))</td><td style="text-align:center">present</td><td style="text-align:center">present</td><td>  (operate b), (operate a)</td>  <tr><td>a (:contingent-on (:b))</td><td style="text-align:center">present</td><td style="text-align:center">absent</td>  <tr><td>a (:contingent-on (:b))</td><td style="text-align:center">absent</td><td style="text-align:center">present</td><td>  error</td>  <tr><td>a (:contingent-on (:b))</td><td style="text-align:center">absent</td><td style="text-align:center">absent</td><td>   error</td></tr>  </table>  </p>  <hr />  <p> perhaps there are others. this one is useful when building a system where the components are contingent on the runtime and/or o/s.  </p>  </body> </html>