Bug 14578

Summary: Insufficient error reporting in mono.req
Product: Sisyphus Reporter: Vladimir V. Kamarzin <vvk>
Component: rpm-build-monoAssignee: at <at>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: darktemplar, lav, nbr, sbolshakov, shaba, sin
Version: unstable   
Hardware: all   
OS: Linux   

Description Vladimir V. Kamarzin 2008-02-19 13:26:11 MSK
Отваливается сборка некоего mono-приложения без какой-либо внятной диагностики:

Finding Requires (using /usr/lib/rpm/find-requires)
Executing(Requires): /bin/sh -e /usr/src/tmp/rpm-tmp.25404
+ umask 022
+ /bin/mkdir -p /usr/src/RPM/BUILD
+ cd /usr/src/RPM/BUILD
+ /usr/lib/rpm/find-requires
find-requires: running scripts
(files,lib,mono,monolib,pam,perl,pkgconfig,pkgconfiglib,python,shebang,shell,static,symlinks)
error: /bin/sh failed
error: Failed to find Requires


RPM build errors:
    /bin/sh failed
    Failed to find Requires
Command exited with non-zero status 1


Выяснить, в чём проблема, удалось только с помощью rpm -ba -vvv:

++ monodis --assemblyref
/usr/src/tmp/ide-buildroot/var/www/ido/ide/Bin/ISIDEControls.dll
+ out='The assembly mscorlib.dll was not found or could not be loaded.
It should have been installed in the `/usr/lib/mono/2.0/mscorlib.dll'\'' directory.'
+ exit_handler
+ local rc=1

$out должен выводиться даже если сборка идёт без -v|-vv|-vvv
Comment 1 at@altlinux.org 2008-02-20 17:10:09 MSK
Проблема в том что monodis выводит сообщение об ошибке не на stderr а на stdout.
Поэтому я не знаю стоит ли добавлять костыль в скрипт mono.req или же лучше
исправить вывод диагностики в monodis.
Comment 2 Vladimir V. Kamarzin 2008-02-21 08:55:20 MSK
Мне больше нравится второй вариант.
Comment 3 at@altlinux.org 2008-03-09 16:01:42 MSK
В glib2 нету простой функции вместо g_print(), которая могла бы печатать на
stderr вместо с stdout.  Короче, я решил не трогать код monodis(1), а добавил
специальную обрабтку ошибок monodis в mono.req.  Fixed in rpm-build-mono
1.3.2-alt1.
Comment 4 at@altlinux.org 2008-03-09 17:25:40 MSK
А вообще у вас следующая проблема (с вашим пакетом): вы пытаетесь запаковать
какой-то левый байткод, созданный не с помощью mono-mcs, а скомпилированный
заранее кем-то ещё.  Если бы код был скомпилирован с помощью mono-mcs, то по
зависимостям всё должно было бы срастись (т.к. mono-mcs требует mscorlib.dll,
которого у вас не найдено при запуске monodis).

Пожалуйста, не пакуйте левый байткод.  Это похоже на запаковку "левых" (ранее
скомпилированных) бинариков без компиляции исходников.
Comment 5 at@altlinux.org 2008-03-09 17:28:59 MSK
Я также собираюсь перепилить пакет mono, чтобы monodis всегда работал (по
зависимостям сразу после установки).  По сути monodis требует mscorlib.dll. 
Точнее, обязательная инициализация mscorlib.dll содержится в коде libmono. 
Значит, скорее всего, придётся отпилить пакет mono-mscorlib и добавить на него
зависимость в libmono.