The findlib User's Guide
Prev | Chapter 7. FAQs |

# How do I express conflicts?

A conflict means that a certain combination of packages and package features will not work. A number of conflict conditions can be expressed:

- To state that a package will not work if a certain predicate is set, use the `error` variable. For example, when package p does not work for multi-threaded programs:

      error(mt) = "Package p is incompatible with multi-threaded programs"

  This works for other standard predicates, too.

- To state that a package will not work together with another package, it is possible to make `error` dependent on package predicates. For example, when package p does not work together with q:

      error(pkg_q) = "Package p is incompatible with package q"

  This also works with subpackages (e.g. `pkg_q.q_sub`).

- If an error is too much, it might be a good idea to just inform the user about possible problems. In this case you can emit a warning instead:

      warning(pkg_q) = "Using package p and q together is a really bad idea"

Note that such error conditions should only be added if there is absolutely no chance to get the combination of packages and features running. For example, in the case of multi-threaded programs it is often possible to add wrappers around unsafe libraries to fix the incompatibility.

It is not possible to express incompatibilities between package versions. Such incompatibilities should be detected when software is installed, not when it is used.

Prev | Home |
Why do some people install the .cmx files? | Up |