User:Chkr/MonoMultiarchChanges

From FedoraProject

Jump to: navigation, search


Contents

Mono Default Paths / Multiarch Changes

Summary

Change the default path for mono assemblies (and mono's global assembly cache) from %{_libdir} to /usr/lib. This will remove the multiarch support for mono on x86-64 systems.

Owner

Current status


Detailed Description

The way how mono is packaged in Fedora is uncommon with respect to mono's default search path. For various reasons the default path for mono assembles and the mono "Global Assembly Cache" ( /usr/lib and /usr/lib/mono) was changed to %{_libdir} in Fedora. This causes lots of unnecessary work by the maintainers and quite a couple of bug reports due to uncaught uses of these default paths within the mono packages. Reverting this decision and using again mono's standard search path /usr/lib would result in conflicts between i686 and x86_64 packages because both would contain the same files. Although the assemblies are the same, the files may differ due to strings referring to the build architecture).

That means, that we would have to prevent that any mono i686 package would be drawn into the x86_64 repos and so we would loose the ability to use 32bit parts of the mono stack in x86-64 - a feature which never worked correctly and is not available for other run-time environments like perl or python either.

Benefit to Fedora

Much easier maintenance of all mono-based packages since all patches and hacks to change /usr/lib to %{_libdir} are not necessary anymore.

Scope

  1. the Fedora-specific %{_libdir} patches have to be removed from all mono-based packages and they have to be re-compiled
  2. repoquery reports 114 packages which may be 50 separate source packages
  3. rel-eng must change the mash scripts to prevent that any 32-bit mono-based packages are drawn into the x86_64 repository

How To Test

  1. install any mono-based package you like to use (preferably on x86 and on x86-64 systems)
  2. try whether it still works correctly

User Experience

  1. Most user won't recognize it.
  2. It may solve some unreported issues caused by the change default paths.
  3. There may be some users who used the 32-bit mono core packages in x86-64. These packages will not be available anymore.

Dependencies

Contingency Plan

  1. do the recompilation of all packages using a special build-target to check whether it works correctly
  2. in case it turns out that the migration can't be done, the git commits of the modified mono-based packages must be reverted
  3. since no builds were done for dist-rawhide, no rebuilds are necessary in that case

Documentation

Rationale

There are two main questions:


Examples for the currently necessary patches


sed -i -e 's!$(prefix)/lib/!%{_libdir}/!' \
    -e 's!${exec_prefix}/lib!%{_libdir}!' configure
sed -i -e 's!/lib/monodevelop!/%{_lib}/monodevelop!' monodevelop
sed -i -e 's!$PREFIX/lib/!%{_libdir}/!' mdtool.in
sed -i -e 's!monodevelop}/lib/!monodevelop}/%{_lib}/!' monodevelop.in

find . -name '*.cs' -and \
     ! \( -name 'GNUCompiler.cs' -or -name 'CProjectConfiguration.cs' \) \
      | while read f ;
        do
        sed -i -e 's!"lib"!"%{_lib}"!' "$f" 1>/dev/null
        done

find . -name Makefile.in -or -name \*.pc.in \
       -or -name \*.in -or -name \*.xml \
       | while read f ;
         do
           sed -i -e 's!$(prefix)/lib/!%{_libdir}/!' \
               -e 's!@prefix@/lib/!%{_libdir}/!' \
               -e 's!/usr/lib/!%{_libdir}/!' \
               -e 's!${exec_prefix}/lib/!%{_libdir}/!' "$f" 1>/dev/null
         done
%prep
%setup -q
sed -i -e 's!@libdir@!%{_libdir}!' %{PATCH0}
%patch0 -p1 -b .original
sed -i -e 's!%{_libdir}!@libdir@!' %{PATCH0}
sed -i -e 's!$(prefix)/lib/!%{_libdir}/!' build/config-default.make
sed -i -e 's!${exec_prefix}/lib!%{_libdir}!' configure


Necessary Changes

avahi-0:0.6.30-4.fc17.src
banshee-0:2.0.1-2.fc16.src
banshee-community-extensions-0:2.0.1-2.fc16.src
bareftp-0:0.3.9-1.fc17.src
blam-0:1.8.7-3.fc14.src
bless-0:0.6.0-7.fc16.src
boo-0:0.9.4.9-2.fc16.src
cdcollect-0:0.6.0-12.fc15.src
chronojump-0:0.8.14-1.fc12.src
clutter-sharp-0:0-0.14.20090828.fc17.src
dbus-sharp-0:0.63-17.fc15.src
docky-0:2.0.12-1.fc17.src
f-spot-0:0.8.2-3.fc16.src
flickrnet-0:2.2-8.fc15.src
gdata-sharp-0:1.4.0.2-5.fc15.src
gecko-sharp2-0:0.13-20.fc16.src
gio-sharp-0:0.3-2.fc16.src
gkeyfile-sharp-0:0.1-7.fc16.src
gmime-0:2.5.8-1.fc16.src
gnome-desktop-sharp-0:2.26.0-13.fc15.src
gnome-do-0:0.8.5-7.fc17.src
gnome-do-docklets-0:0.8.2-4.fc15.src
gnome-do-plugins-0:0.8.4-2.fc16.src
gnome-guitar-0:0.8.1-10.fc16.src
gnome-keyring-sharp-0:1.0.1-0.8.133722svn.fc15.src
gnome-rdp-0:0.2.3-9.fc16.src
gnome-sharp-0:2.24.1-6.fc16.src
gnome-subtitles-0:1.2-1.fc17.src
gsf-sharp-0:0.8.1-15.fc15.src
gtk-sharp2-0:2.12.11-1.fc17.src
gtksourceview-sharp-0:2.0.12-14.fc16.src
gtksourceview2-sharp-0:1.0-10.svn89788.fc16.src
ice-0:3.4.2-3.fc17.src
libgpod-0:0.8.2-1.fc16.src
log4net-0:1.2.10-16.fc16.src
mod_mono-0:2.10-1.fc16.src
mono-addins-0:0.6.2-2.fc17.src
mono-basic-0:2.10-2.fc17.src
mono-bouncycastle-0:1.7-1.fc16.src
mono-cecil-flowanalysis-0:0.1-0.15.20110512svn100264.fc16.src
mono-debugger-0:2.10-1.fc16.src
mono-nat-0:1.1.0-1.fc16.src
mono-reflection-0:0.1-0.2.20110613git304d1d.fc16.src
mono-tools-0:2.10-3.fc16.src
mono-zeroconf-0:0.9.0-5.fc15.src
monodevelop-0:2.6-2.fc17.src
monodevelop-debugger-gdb-0:2.6-1.fc17.src
monodevelop-vala-0:2.6-1.fc17.src
monsoon-0:0.21-4.fc13.src
nant-1:0.90-6.fc16.src
ndesk-dbus-0:0.6.1b-1.fc13.src
ndesk-dbus-glib-0:0.4.1-10.fc15.src
notify-sharp-0:0.4.0-0.14.20100411svn.fc15.src
pinta-0:1.0-1.fc16.src
taglib-sharp-0:2.0.3.7-3.fc16.src
taoframework-0:2.1.0-3.fc17.src
themonospot-base-0:0.8.2-7.fc16.src
themonospot-console-0:0.1.1-6.fc16.src
themonospot-gui-gtk-0:0.2.2-7.fc16.src
themonospot-gui-qt-0:0.1.3-10.fc16.src
themonospot-plugin-avi-0:0.1.1-6.fc16.src
themonospot-plugin-mkv-0:0.1.1-6.fc16.src
webkit-sharp-0:0.3-6.fc16.src
xsp-0:2.10.2-1.fc16.src
    • if everything works as expected, ask rel-eng to block the mono-devel packages from mash'ing into multi-arch x86_64

Release Notes

Comments and Discussion