LINUX.ORG.RU

Регулярная сборка приложения с различными версиями библиотек


0

0

Добрый день.

Возникла необходимость перед выпуском каждой новой версии приложения проверять его на совместимость с различными версиями библиотек. API в разных версиях немного отличается, и легко при добавлении новых возможностей не учесть, что в более старой версии какого-то метода у класса нету, а в самой поздней версии класс имеет уже совсем другой интерфейс.

Подскажите, пожалуйста, как вообще это принято делать и с помощью чего? Если знаете какой-нибудь хороший man, ткните носом, пожалуйста.

Даже не знаю, как, например, решить следующую задачу:
gtkmm зависит от glibmm. Я хочу собрать приложение с новой версией gtkmm. Для этого мне сначала необходимо собрать новую версию glibmm и установить (куда? текущую версию, которая стоит в дистрибутиве я заменять не хочу, эта версия мне нужна только для тестов). Далее, как скомпилировать gtkmm с только что скомпиленной glibmm и заставить их работать вместе, а не брать системные библиотеки? Ну и так далее. Очень хотелось бы почитать какую-нибудь документацию по этому поводу.

anonymous

Сделать себе много chroot-ов, где собрать (или, лучше, установить из пакета, возможно, самосборного) интересующие тебя библиотеки.

При помощи mount --bind можно одно дерево исходников подключить во все chroot-ы (при условии что компиляция производится в отдельный каталог вне дерева исходников).

Через sudo можно раздать право выполнять chroot /build/rootX su username и/или chroot /build/rootX su username -c 'cd ~/src; make'

anonymous
()

> как скомпилировать gtkmm с только что скомпиленной glibmm

Я бы собирал либы в отдельные папочки и потом выбирал нужную версию при сборке:
./configure --with-gtkmm=/usr/local/gtkmm-xx

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

В этом случае нужно внимательно следить, откуда будет загружена библиотека динамическим линковщиком (см. LD_LIBRARY_PATH, -rpath).

anonymous
()

наверное в генте такое делается легко, распаковываешь установочный пакет stage3 в папочку, 
по мануалу делаешь туда chroot,создаешь ebuild для своей аппликации и
 может для экзотических библиотек и дальше примерно так:

emerge --sync
emerge =libs/your_dep_lib1-1.1.2 <your_dep_lib2-3.1.1-RC5
emerge your_app

где =libs/your_dep_lib1-1.1.2

это установить библиотеку libs/your_dep_lib1 с версией 1.1.2

и <your_dep_lib2-3
 
установить библиотеку your_dep_lib2 в любой доступной версии ниже третьей

Автоматизировать легко

Или вот у сюзи есть такой build сервис, там можно пакеты собирать для любых, я думаю, комбинаций библиотек.  

http://ru.opensuse.org/Build_Service


Типа того

the_moon
()

собираешь либу с другим prefix'ом ( ./configure --prefix=/opt/gtkmm_X ), и свою прогу собираешь с тем же префиксом. Перед запуском надо сделать export LD_LIBRARY_PATH=/opt/gtkmm_X , либо можно линковать прогу с флагом -rpath: gcc ... -Wl,-rpath,'/opt/gtkmm_X'

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

> наверное в генте такое делается легко

А в дебиане есть debootstrap.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.