Форум » RusXMMS Project » Помогите собрать unzip с патчем. » Ответить

Помогите собрать unzip с патчем.

Gankov: Решил собрать для openSUSE unzip c вашим патчем. Сами библиотеки собрались без проблем, но вот unzip собрать не получается. Во первых скрипт update_shared выдает следующее [pre]./update_shared: line 3: tc-getCC: команда не найдена ./update_shared: line 3: tc-getCC: команда не найдена [/pre] Что ему не хватает? ну и дальше не собирается. Подозреваю что с этим связано. Так как далее везде "команда не найдена"

Ответов - 46, стр: 1 2 3 All

darksoft: Извиняюсь, я, кажется, "update_*" скрипты в тяжелом бреду выкладывал... Попробуйте использовать update скрипт вот отсюда (старый скрипт уже испортил дерево исходников, поэтому все надо заново накладывать): http://dside.dyndns.org/files/rusxmms/patches/unzip-csa4.tar.bz2

Gankov: Спасибо попробую. Есть вопрос по работе данного патча, в первую очередь интересует, сможет ли пропатченный unzip правильно определить кодировку, если архив был создан в линуксе в кодировке UTF-8, и одновременно без каких либо изменений настроек открывать виндовые архивы? То есть есть ли внем автоопределение кодировки? По коду патча я толком не понял.

darksoft: Я с Unicodом не пробовал, но авто-определение есть и в теории должно работать, - если не будет, - пишите, исправим ;)


Gankov: И все таки не получается собрать, может подкините идею в какую сторону копать. I have the following modifications for unzip.spec: ----------------------------------------------------------------- ----- building unzip.spec (user abuild) ----------------------------------------------------------------- ----------------------------------------------------------------- + exec rpmbuild -ba --define '_srcdefattr (-,root,root)' /usr/src/packages/SOURCES/unzip.spec Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.AG418X + umask 022 + cd /usr/src/packages/BUILD + cd /usr/src/packages/BUILD + rm -rf unzip-5.52 + /usr/bin/bzip2 -dc /usr/src/packages/SOURCES/unzip552.tar.bz2 + /bin/tar -xf - + STATUS=0 + '[' 0 -ne 0 ']' + cd unzip-5.52 + /bin/chmod -Rf a+rX,u+w,g-w,o-w . + echo 'Patch (unzip.dif):' Patch (unzip.dif): + /bin/cat /usr/src/packages/SOURCES/unzip.dif + /usr/bin/patch -s -p1 --fuzz=2 + echo 'Patch #10 (unzip-5.52-ds-rusxmms.patch):' Patch #10 (unzip-5.52-ds-rusxmms.patch): + /bin/cat /usr/src/packages/SOURCES/unzip-5.52-ds-rusxmms.patch + /usr/bin/patch -s -p1 --fuzz=2 + echo 'Patch #11 (unzip-ds-unixenc.patch):' Patch #11 (unzip-ds-unixenc.patch): + /bin/cat /usr/src/packages/SOURCES/unzip-ds-unixenc.patch + /usr/bin/patch -s -p1 --fuzz=2 + /bin/cp /usr/src/packages/SOURCES/update_shared update_shared + sh update_shared + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.KhIFJ4 + umask 022 + cd /usr/src/packages/BUILD + /bin/rm -rf /usr/src/packages/BUILDROOT/unzip-5.52-143.x86_64 ++ dirname /usr/src/packages/BUILDROOT/unzip-5.52-143.x86_64 + /bin/mkdir -p /usr/src/packages/BUILDROOT + /bin/mkdir /usr/src/packages/BUILDROOT/unzip-5.52-143.x86_64 + cd unzip-5.52 + export 'RPM_OPT_FLAGS=-fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -DLARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fstack-protector' + RPM_OPT_FLAGS='-fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -DLARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fstack-protector' + make -f unix/Makefile LF2= linux_noasm make unzips CC=gcc LD="gcc -lrcc" CF=" -Wall -I. " make[1]: Entering directory `/usr/src/packages/BUILD/unzip-5.52' gcc -c -Wall -I. unzip.c gcc -c -Wall -I. crc32.c gcc -c -Wall -I. crctab.c gcc -c -Wall -I. crypt.c gcc -c -Wall -I. envargs.c gcc -c -Wall -I. explode.c gcc -c -Wall -I. extract.c gcc -c -Wall -I. fileio.c gcc -c -Wall -I. globals.c gcc -c -Wall -I. inflate.c gcc -c -Wall -I. list.c gcc -c -Wall -I. match.c gcc -c -Wall -I. process.c gcc -c -Wall -I. ttyio.c gcc -c -Wall -I. unreduce.c gcc -c -Wall -I. unshrink.c gcc -c -Wall -I. zipinfo.c gcc -c -Wall -I. unix/unix.c gcc -lrcc -o unzip unzip.o crc32.o crctab.o crypt.o envargs.o explode.o extract.o fileio.o globals.o inflate.o list.o match.o process.o ttyio.o unreduce.o unshrink.o zipinfo.o unix.o fileio.o: In function `rccUnzipFree': fileio.c:(.text+0x14): undefined reference to `rccFree' fileio.o: In function `rccUnzipInit': fileio.c:(.text+0x3f): undefined reference to `rccInit' fileio.c:(.text+0x5e): undefined reference to `rccInitDefaultContext' fileio.c:(.text+0x6d): undefined reference to `rccLoad' fileio.c:(.text+0x81): undefined reference to `rccInitDb4' fileio.o: In function `_DS_OEM_INTERN': fileio.c:(.text+0xe6): undefined reference to `rccSizedRecode' fileio.o: In function `_DS_ISO_INTERN': fileio.c:(.text+0x15e): undefined reference to `rccSizedRecode' collect2: ld returned 1 exit status make[1]: *** [unzip] Error 1 make[1]: Leaving directory `/usr/src/packages/BUILD/unzip-5.52' make: *** [linux_noasm] Error 2 error: Bad exit status from /var/tmp/rpm-tmp.KhIFJ4 (%build) RPM build errors: Bad exit status from /var/tmp/rpm-tmp.KhIFJ4 (%build)

darksoft: Хм. странно, все эти символы имеются в -lrcc. Ладно, может быть вы мне пришлете SPEC файл или даже лучше не собирающийся SRPM, а я попробую разобраться в чем дело.

Lazy_Kent: Я залил SRPM сюда: http://www.sendspace.com/file/celwn4 Пакет собирается и работает в openSUSE 11.1, но не компилируется в openSUSE 11.2. Есть подозрение, что это связано с версией GCC. В oS 11.1 версия 4.3, а в oS 11.2 -- 4.4. Посмотрите, пожалуйста.

darksoft: Поправил и собрал на build service: http://download.opensuse.org/repositories/home:/csa7fff:/rusxmms/openSUSE_11.2/

Lazy_Kent: Спасибо. Я смотрю, вы отключили некоторые флаги оптимизации. Но в таком виде пакет не пройдёт. Нельзя ли внести радикальные исправления? Дело в том, что русскоязычное сообщество openSUSE хочет продвинуть исправленный пакет unzip вместе с библиотеками rusxmms в официальный дистрибутив. А требования для собираемых пакетов довольно строгие. И ещё вопрос: перекодируются только русские имена или другие тоже?

darksoft: Для OpenSuSe можно вернуть дефолтовые флаги. Я их убрал, чтобы из одного SPECа собиралось и в Mandriva2010, где в числе флагов есть -Werror=format_security. А исходники unzip довольно не акуратны в этом плане. Т.е. если собирать только для OpenSuSe можно вернуть в SPEC flags="%optflags -DLARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" и все будет работать. LibRCC работает с кучей языков. Мануально выставляя кодировки можно вообще с чем угодно работать. Авто-определение есть для России - Украины - ISO8859-1 через LibRCD, большинства восточно-европейских языков через Enca, и китайско-японско-корейского через LibGUESS.

darksoft: btw. Чем могу помогу в плане продвижения. Если есть необходимость можете связаться со мной через Jabber: csa@dside.dyndns.org или ICQ: 79214249

Lazy_Kent: Собираю пакет в openSUSE Factory (11.3), на перспективу. Собираю с флагами: RPM_OPT_FLAGS="%optflags -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" Нужна ли опция -D_LARGEFILE_SOURCE при наличии -D_LARGEFILE64_SOURCE? Вот параметры, которые передаются компилятору: gcc -c -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -I. -DRCC_LAZY=1 В процессе компиляции вижу вывод: ... dsrecode.h: In function 'rccRecode2': dsrecode.h:38:1: warning: no return statement in function returning non-void ... и в итоге: I: Program returns random data in a function E: unzip no-return-in-nonvoid-function dsrecode.h:38 Сборка пакета завершена с ошибкой, и он отбрасывается как непригодный. Собирается без ошибки в openSUSE 11.2. Но та же ошибка при сборке в 11.1. Видимо, rpmlint по-разному заточен. Про языки понятно. К сожалению, LibGUESS тоже нет в официальном репозитории. Большое спасибо за помощь.

darksoft: Ок, dsrecode.h я сейчас поправлю, это не проблема. Что касается LibGUESS, то она 1) опциональна и можно пока забить 2) если надо будет я исходники в librcc положу и буду статически компилировать вместе с librcc так что не проблема.

Lazy_Kent: Отлично! исходники в librcc положу и буду статически компилировать вместе с librccЭто был бы наилучший вариант. Чем больше языков будет охвачено, тем больше шансов на включение в дистрибутив.

darksoft: Поправил патч. Теперь собирается. Что касается LibGUESS, - я думаю мы вполне можем говорить, что дальне-восточные языки поддерживаются (по крайне мере на мануальном уровне), но, до появления первого заинтересованого лица, я не хочу включать libguess внутрь, т.к. не могу полноценно проверить ;)

Lazy_Kent: Да. Теперь компилируется без ошибок. Но есть проблема. Версия под x86_64 не работает. В dsrecode.h жёстко прописан путь: rcc_handle = dlopen("/usr/lib/" RCC_LIBRARY, RTLD_NOW); А библиотека в lib64. А shared-версию никак не получится реанимировать? Это было бы предпочтительнее.

darksoft: На самом деле shared версия создает проблемы в некоторых случаях. Например, при сборке openoffice. Они там в своих скриптах запускают unzip в каком-то хитром chroot environmentе где unzip не имеет доступа к librcc.so.0 Я лучше добавлю определение правильного пути.

darksoft: 1. Выложил исправленный патч. 2. Я тут подумал, что этот эффект возможно имеет место быть только в Gentoo и в SuSe можно и просто слинковать (я бы таки не стал для надежности). Тогда надо просто не definить RCC_LAZY и линковать с -lrcc. Т.е. строчку make в spec файле поменять на: make %{?jobs:-j%jobs} -f unix/Makefile LF2="-ldl -lrcc" LOCAL_UNZIP="" linux_noasm

Lazy_Kent: Спасибо. Пожалуй, для надёжности не будем линковать.

darksoft: Кстати, уже есть unzip-6 и патч от 5.52 подходит

Lazy_Kent: Наши мейнтейнеры пока не обновляют. Уж не знаю, почему. Зато патчами обвешали как новогоднюю ёлку. :) Сейчас всё собирается нормально. unzip, mc и графический Ark отображают русские имена правильно. Но файловые менеджеры Dolphin и Krusader открывают архив как директорию, и там имена не перекодированы. Буду ещё разбираться.



полная версия страницы