LINUX.ORG.RU

Помогите исправить SPEC-файл для openSUSE

 , srpm


0

1

Решил обновить 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 файлы, и ещё не заметил этой ошибки. Подскажите, куда копать, чтобы исправить две этих ошибки?

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.

Добавь вызов RPM-макроса «debug_info», соответсвенно бинарники будут пострипаны, а отладочные символы попадут в отдельный пакет с постфиксом «debuginfo».
Пример spec-файла можно тут посмотреть: nfdump.spec.

anonymous
()

Для чистки отладочных символов скорее всего достаточно перед вызовом make добавить

export CXXFLAGS = '-s' CXXFLAGS
export CFLAGS = '-s' CFLAGS

Решения проблемы 1 не вижу - обычно зависимость от любого из двух пакетов решается созданием мета-объекта, после чего оба базовых пакета указывают его в списке Provides:. Например, gcc и clang оба указывают «Provides: c++_compiler ...», а пакеты уже могут зависеть от c++_compiler вместо gcc. На уровне amule этого уже походу не решить - остаётся только wxwidgets-devel хардкодить.

а) Зачем в SPEC-файле aMule описан openSUSE 11.3, в котором старый wxWidgets?

Можно также добавить проверку на версию aMule по %{version}. Для 11.4 хотя бы, раз он ещё в списке поддерживаемых.

%if %{version} < 2.3.1
BuildRequires:  wxWidgets-wxcontainer-devel
%else
BuildRequires:  wxWidgets-devel
%endif
Возможно, %{version} без фигурных скобок.

quiet_readonly ★★★★
()
Ответ на: комментарий от anonymous

Ага, главная проблема решена. А я оказался прав, что wxWidgets-wxcontainer-devel - deprecated, и с ним компилировать не надо?

А может, скомпилируешь с deprecated библиотекой, и программа будет работать и со старой, и с новой? А если компилировать с новой, то только с новой?

Думаю что нет. Просто поменяется список зависимостей с libwx_baseu-2_8-0-stl на libwx_base-2_8-0-wxcontainer, хорошо что их можно установить одновременно. Кстати, у второго пакета нет буквы u, значит не Unicode и тем более «не нужен».

Всё понял, делим пакет на обычный и debuginfo, и меняем

-BuildRequires:  wxWidgets-wxcontainer-devel
+BuildRequires:  wxWidgets-devel
ZenitharChampion ★★★★★
() автор топика
Последнее исправление: ZenitharChampion (всего исправлений: 1)

> Почему же он хочет именно wxWidgets-wxcontainer-devel, а не wxWidgets-devel? Какая ему разница? Понятное дело, что можно временно снести wxWidgets-devel и установить wxWidgets-wxcontainer-devel, а потом вернуть как было. Но не лучше ли сделать так, чтобы SPEC-файл проверял наличие либо wxWidgets-wxcontainer-devel, либо wxWidgets-devel?

Теперь я понимаю - так точно задано чтобы была зависимость именно от библиотек пакета libwx_base-2_8-0-wxcontainer, а не libwx_baseu-2_8-0-stl. Отправил письмо мейнтейнеру пакета с вашими советами. Всем спасибо!

ZenitharChampion ★★★★★
() автор топика
Ответ на: комментарий от xtraeft

Я трогал исходники вручную, чтобы установить пакет wxWidgets не из своей версии дистрибутива? Нет. Ну и в чём сложности? Письмо с описанием бага в SPEC-файле отправлено.

ZenitharChampion ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion

Пришёл ответ:

b).

%if %{version} < 2.3.1
BuildRequires: wxWidgets-wxcontainer-devel
%else
BuildRequires: wxWidgets-devel
%endif

A «the latest aMule is able to build with the STL wxWidgets» would have been enough ;-)

2). «%if %suse_version <= 1130» in spec file. But openSUSE 11.3 has an old version of wxWidgets. Is it time to remove the outdated condition, which is probably used to compile aMule 2.2.6? Or if not, change the condition to compile in openSUSE 11.3, add a condition for 11.4, which makes checking for wxWingets 2.8.12 and later.

Done.

3). Forgotten RPM-macros debug_info which leads to 248.5 Mb of builded RPM.

openSUSE has not used %debug_info at least since we started to use the OBS.

ZenitharChampion ★★★★★
() автор топика

Опубликован обновлённый пакет. Различия:

--- aMule1.spec 2012-08-03 18:21:23.283000004 +0700
+++ aMule2.spec 2012-08-03 18:21:33.713000005 +0700
@@ -1,21 +1,16 @@
 Name:          aMule
 Summary:       another eMule file-sharing program
 Version:       2.3.1
-Release:       1.4
+Release:       3.1
 License:       GPL
 Group:         Productivity/Networking/Other
 URL:           http://www.amule.org
 Source0:       http://downloads.sourceforge.net/project/amule/aMule/%{version}/aMule-%{version}.tar.bz2
-BuildRoot:     %{_tmppath}/%{name}-%{version}-build
 BuildRequires: gcc-c++ gd-devel libpng-devel fdupes
 BuildRequires:  libupnp-devel libcryptopp-devel libGeoIP-devel update-desktop-files
-%if %suse_version <= 1130
-BuildRequires:  wxGTK-devel wxGTK-gl
-%else
-BuildRequires:  wxWidgets-wxcontainer-devel
+BuildRequires:  wxWidgets-devel >= 2.8.12
 %define _use_internal_dependency_generator 0
 %define __find_requires %wx_requires
-%endif
 Requires:      GeoIP

 %description
@@ -34,11 +29,10 @@
 %setup -q

 %build
+export CXXFLAGS='%{optflags} -fpermissive'
 %configure \
-%if 0%{?suse_version} >= 1140
   --enable-optimize \
   --disable-debug \
-%endif
   --enable-amulecmd \
   --enable-amule-gui \
   --enable-amule-daemon \
@@ -56,7 +50,7 @@
 make %{?_smp_mflags}

 %install
-%makeinstall docdir=%{_defaultdocdir}/aMule
+%make_install docdir=%{_defaultdocdir}/aMule

 %suse_update_desktop_file -G "P2P Client" -i amule Network P2P
 %suse_update_desktop_file  %buildroot/%_datadir/applications/alc.desktop
@@ -70,10 +64,6 @@

 %fdupes -s %buildroot

-%clean
-rm -rf %{buildroot}
-
-
 %files -f amule.lang
 %defattr(-,root,root)
 %doc docs/AUTHORS docs/Changelog docs/README docs/license.txt
@@ -89,14 +79,9 @@
 %dir %{_libdir}/xchat/plugins
 %dir %{_datadir}/amule
 %dir %{_datadir}/cas
-%if 0%{?suse_version} == 1120
-%dir %{_datadir}/locale/ko_KR
-%dir %{_datadir}/locale/ko_KR/LC_MESSAGES
-%endif
 %dir %{_mandir}/tr
 %dir %{_mandir}/hu

-
 %changelog
 * Thu Dec 29 2011 reddwarf@opensuse.org
 - new upstream version 2.3.1
ZenitharChampion ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.