[Mono-dev] dependency conflicts on rpm based distros

Andrew Jorgensen ajorgensen at novell.com
Wed Jul 22 22:58:15 EDT 2009

Hi Martin,

If mono-find-requires says that is required that's really what is required and will not work.

There are certainly problems with the mono-find-* scripts but that is not one of them.  You could verify what I'm saying by manually installing banshee using the --nodeps option passed to rpm.  You will find that banshee will not run properly without the correct version of taglib-sharp.


>>> Martin Vogt <vogt at itwm.fraunhofer.de> 07/22/09 9:39 AM >>>

I think the current way of defining dependencies in rpm files for
mono is broken. The scripts, which actually do it is part of the
mono distribution and affects every rpm based distro.
(This is for mono 2.0 but the script is the same for 2.4)

I don't find any good resources about library versioning and
compatibility only these:


But in Section 3.2.1:
>Each of the libraries in the GAC has an assembly version number that
>consists of 4 parts (major, minor, build and revision number)
>It is general practice and recommended by Microsoft that a library is
>ABI compatible when only the build and revision number change and
>the major and minor number stay the same.

The automatic generated provides/requires during rpmbuild
do _not_ follow this "general practice" an this leads to
ugly dependency problems. (On rpm updates)

(See the example)


Its not easy to describe, but it has to do with the scripts:

* mono-find-provides
* mono-find-requires

which are called during rpmbuild time.
I think these scripts work too strict.

read on.

For example:

The interaction on the package banshee-1 and taglib-sharp.
In OpenSuSE 11.1 is an update from taglib-sharp from to
If I start rpm "update" I get:

Processing Dependency:
mono(taglib-sharp) = for package:

Missing Dependency:
mono(taglib-sharp) = is needed by package

The requirements for banshee-1 are computed during an rpm build with the


The script outputs for "requires" mono(taglib-sharp) =
(During the rpmbuild process)
This binds rpm to _this_ _exact_ version, but according to "guidline" should be compatible. (rpm does not know about this
guideline, it simply compares the strings)

Normal libs in LINUX

For example: under unix you have libfoo-.. versions
and every change in a mini version is expected to be binary
compatible. Everything else is an error.

I dont know if taglib is binary compatible to
but according to the "general practice" it should be.
But rpm think they are incompatible.


I dont know if this is a solution and any change to the scripts
(mono-find-provide/requieres) should be considered carefully,
because it affects everey rpm based distro.
But what about this:

- mono-find-provides

could be left as it is but the

- mono-find-requires

should return different values.

mono-find-provides returns mono(taglib-share) =


mono-find-requires returns
mono(taglib-share) >=
mono(taglib-share) <=

I don't have tested this but it may work.



Mono-devel-list mailing list
Mono-devel-list at lists.ximian.com

More information about the Mono-devel-list mailing list