Almost every Eiffel library has dependencies on other Eiffel libraries, at the moment those dependencies are specified by using a hard coded file location or expecting the library to be under $ISE_LIBRARY. This solution is not optimal for several reasons: It does not allow flexible installation of additional libraries if the user does not have write permissions in the $ISE_LIBRARY directory, it does not allow to have different, incompatible versions of a library installed at the same time.
A library gets a unique name and a version number.
Instead of specifying the configuration file of the library, the name of the library and (optionally) a min/max version are specified.
A repository would map the name, version numbers to actual configuration files. Initially this could be implemented by giving a list of directories to search for libraries, later a possibility to get libraries from an online repository could be added (similar to the Debian apt system).
As it should be possible for a library author to differentiate between bugfixes that don't change the library interface and interface changes, the version numbers should be used similar to the way it is done with shared libraries in the Unix world. The version number consists of four components: major.minor.release.build as long as major.minor version is equal, the library is expected to have the same interface and a newer version would replace an older version. If major.minor version would change this would lead to an additional available version.
library com.eiffel.base version 22.214.171.124
library com.eiffel.wel version 126.96.36.199
- com.eiffel.base min_version=5.7 max_version=5.7
library com.eiffel.vision2 version 188.8.131.52
- com.eiffel.base min_version=6.0 max_version=6.0
- com.eiffel.wel min_version=2.5 max_version=2.5
Installing com.eiffel.base version 184.108.40.206 would replace 220.127.116.11, installing 18.104.22.168 would just additionally install the new version.