Решил обновить aMule 2.2.6 до 2.3.1. В packman'е для openSUSE 11.4 только 2.2.6, а 2.3.1 - только для openSUSE 12.1 и Factory. Оказалось, не всё так просто: aMule 2.3.1 хочет wxWidgets версии 2.8.12 и никак не младше, а в дистрибутиве системы - только 2.8.11. Ладно, обновил с помощью пакетов из Factory:
http://download.opensuse.org/factory/repo/src-oss/suse/src/wxWidgets-2.8.12-1...
http://download.opensuse.org/factory/repo/src-oss/suse/src/python-wxWidgets-2...
Готово! Теперь - сама сборка RPM-пакета.
http://packman.links2linux.org/downloadsource/293330/aMule-2.3.1-1.4.src.rpm
Перечисляю то, что я бы хотел исправить в SPEC-файле.
0). Вот spec-файл: http://paste.org.ru/?g97hg6. Вот руководство по созданию SPEC-файла для программ, использующих wxWidgets: http://en.opensuse.org/openSUSE:Packaging_wxWidgets
1). Почему-то не компилировалось:
zenitur@linux-athlon64x2:~/amule> rpmbuild --rebuild aMule-2.3.1-1.4.src.rpm
Устанавливается aMule-2.3.1-1.4.src.rpm
ошибка: Неудовлетворенные зависимости сборки:
wxWidgets-wxcontainer-devel нужен для aMule-2.3.1-1.4.x86_64
zenitur@linux-athlon64x2:~/amule>
А установлен обычный wxWidgets-devel. YaST заявляет, что wxWidgets-devel и wxWidgets-wxcontainer-devel взаимозаменяемые, установлен может быть только один. Я поправил эту часть файла, и всё скомпилировалось с wxWidgets-devel. Это явно баг: в руководстве в разделе «wxWidgets variants» сказано, что wxWidgets-wxcontainer - deprecated, и с ним ничего не нужно собирать.
%if %suse_version <= 1130
BuildRequires: wxGTK-devel wxGTK-gl
%else
BuildRequires: wxWidgets-wxcontainer-devel
%define _use_internal_dependency_generator 0
%define __find_requires %wx_requires
%endif
М-да? «Если openSUSE номер 11.3 и меньше, то зависимость от wxGTK-devel. Иначе wxWidgets-wxcontainer-devel».
Расскажу ещё раз, подробнее для тех, кто не понял. В SuSE как минимум два варианта одного и того же wxWidgets, о назначении каждой описано в руководстве. При этом могут быть установлены одновременно, например, и libwx_baseu-2_8-0-stl, и libwx_base-2_8-0-wxcontainer - но не заголовочные файлы, необходимые для компилирования, и находящиеся в пакете, оканчивающимся на -devel. Почему же он хочет именно wxWidgets-wxcontainer-devel, а не wxWidgets-devel? Какая ему разница? Понятное дело, что можно временно снести wxWidgets-devel и установить wxWidgets-wxcontainer-devel, а потом вернуть как было. Но не лучше ли сделать так, чтобы SPEC-файл проверял наличие либо wxWidgets-wxcontainer-devel, либо wxWidgets-devel?
а). Зачем в SPEC-файле aMule описан openSUSE 11.3, в котором старый wxWidgets? Может пора стереть эту устаревшую часть кода?
б). А если не стереть, то добавить условие для 11.4? «Но там же старый wxWidgets» - но ведь 11.3 зачем-то описан!
2). PRM-пакет получился 248,5 Мб. /usr/bin/amule занимает 79,2 Мб, amulecmd, amuled, amulegui и amuleweb тоже большие. Проверяю:
linux-athlon64x2:/usr/bin # file amule
amule: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped
linux-athlon64x2:/usr/bin #
not stripped. А нужно сделать stripped.
Скорее всего, пакеты packman скомпилированы верно, просто почт иникто не загружает себе src.rpm файлы, и ещё не заметил этой ошибки. Подскажите, куда копать, чтобы исправить две этих ошибки?