[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Fedora-packaging] Mono Packaging Issues



Here's a recap of the blocker issues as I see them presently standing:

On Mon, 2006-06-12 at 18:23 -0500, Tom 'spot' Callaway wrote:
> 1. Redefining libdir for mono packages:

> If mono and its tools cannot find a library on a 64bit architecture when
> it lives in %{_libdir} (/usr/lib64), then mono is fundamentally broken
> on that architecture, and needs to be fixed.

I think we're in agreement about this.  But Paul Johnson (Nodoid) has
run into some issues with this and making the packages noarch.  A look
at the lat approval:
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=177580

and the package in cvs shows that this is likely an overzealous
configure.ac.  Paul Howarth should ask upstream why they are using
AC_CANONICAL_TARGET in their configure.ac.  AFAICT there is no reason
for it.  Removing it from the spec and regenerating configure means that
we do not have to play tricks with either %{_libdir} or
%{_target_platform}.

(Diff to lat.spec as attachment #1)

> 
> 2. Putting DLLs in %{_datadir} vs %{_libdir}:
> 
A) DLLs are mostly architecture independent.  Testing of DLLImport
appears to show that code that is not architecture independent has to be
rewritten or it will fail at runtime on unsupported architectures.  A
simple recompile won't fix things.  The simple test case that I used was
a C library with a structure that contained an unsigned long type.  In
C, this can be a 32 bit or 64 bit value depending on the platform it is
compiled on.  In mono this structure is defined as either ulong or uint
for 64bit or 32bit respectively.  The mono code will fail to work
correctly on the platform it is not coded for.  Either the C library has
to be coded to explicitly use a 32bit or a 64bit integer or the mono
library will have to detect the number of bits at runtime and translate
its values correctly before passing to C (I don't know how this is done
but I've read that Mono's POSIX library does this.)

I have no objection to DLLs being noarch due to this.

Attachment #2 is a tarball of the code for my test case.  Run make on an
x86_64.  The resulting files will run fine.  Run make on an ix86.  The
resulting files will generate incorrect answers.

B) Using Ahead-of-time compilation currently has to place the .so files
in the same directory as the DLLs.  Putting those into /usr/share is
plainly wrong.  We have two options: i) Explicitly do not support ahead
of time compilation until mono can be enhanced to recognize an aot .so
in a different directory [Is this in upstream's roadmap?] ii) Put DLLs
in arch specific directories (somewhere under %{_libdir}).

To test I used nant as my test program.  This could probably be done
with tomboy/banshee/etc as  well.
1) cp -pr /usr/share/nant ~/nant
2) export MONO_PATH=$MONO_PATH:~/nant:~/nant/lib:~/nant/lib/mono:\
~/nant/lib/mono/1.0:~nant/lib/mono/2.0:~/nant/lib/net/1.0:\
~/nant/lib/net/1.1:~/nant/lib/net/2.0
3) cd ~/nant
4) sed 's^/usr/share/NAnt/bin^$HOME/nant^' < /usr/bin/nant > nant
5) mono --aot ./nant
6) strace ./nant &> aot-in-same-dir.log
7) strace /usr/bin/nant &> aot-in-monpath.log
8) Compare the two logs and notice that running our copy of nant that
uses dlls from ~/nant finds the .dll.so files there.  The system nant
does not even though the .dll.so's are in MONO_PATH.

> 3. Forcing local copies of DLL libraries instead of using system
> installed DLLs.

Everyone is against this.  So far, we've only discovered one possible
instance of this in banshee.  We have a list of possible ways to check
for this but it isn't foolproof.  We would like the monoproject to
rethink their position.

-Toshio
? lat-1.0.5
? lat-1.0.5-5.noarch.rpm
? lat-1.0.5-5.src.rpm
? lat.spec.diff
Index: lat.spec
===================================================================
RCS file: /cvs/extras/rpms/lat/devel/lat.spec,v
retrieving revision 1.1
diff -u -r1.1 lat.spec
--- lat.spec	17 Jun 2006 12:36:44 -0000	1.1
+++ lat.spec	19 Jun 2006 06:05:56 -0000
@@ -9,16 +9,13 @@
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 BuildRequires:  mono-devel, gtk-sharp2, gnome-keyring-devel
 BuildRequires:  scrollkeeper, gettext
+BuildRequires: autoconf
 BuildArch:      noarch
 Requires:       mono-data, gtk-sharp2
 
 Requires(post):   scrollkeeper
 Requires(postun): scrollkeeper
 
-# Horrible, horrible, mono hacks
-%define _target_platform sparc86x-%{_vendor}-%{_target_os}%{?_gnu}
-%define _libdir %{_prefix}/lib
-
 %description
 LAT stands for LDAP Administration Tool. The tool allows you to browse
 LDAP-based directories and add/edit/delete entries contained within. It can
@@ -28,8 +25,10 @@
 
 %prep
 %setup -q
+sed -i 's/AC_CANONICAL_TARGET//' configure.ac
 
 %build
+autoconf
 %configure --disable-dependency-tracking
 
 %install
@@ -71,7 +70,7 @@
 %defattr(-,root,root,-)
 %doc AUTHORS ChangeLog COPYING* README TODO
 %{_bindir}/lat
-%{_libdir}/lat/
+%{_prefix}/lib/lat/
 %{_datadir}/application-registry/lat.applications
 %{_datadir}/applications/fedora-lat.desktop
 %dir %{_datadir}/gnome/

Attachment: test-mono.tar.gz
Description: application/compressed-tar

Attachment: signature.asc
Description: This is a digitally signed message part


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]