УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

Debian build system improvement


Автор Сообщение
Сообщение создано: 30. 03. 2012 [14:17]
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
Уже давненько собираю скаду под дебиан в минимальном chroot’е с использованием pbuildr’а.
Что б он автоматически устанавливал необходимые зависимости, они должны быть записаны в debian/control файле, потому предлагаю первый патч:
JAVASCRIPT
Index: debian/control
===================================================================
--- debian/control	(revision 1775)
+++ debian/control	(working copy)
@@ -2,7 +2,7 @@
 Section: graphics
 Priority: optional
 Maintainer: Roman Savochenko <rom_as@oscada.org>
-Build-Depends: debhelper (>= 7), autotools-dev
+Build-Depends: debhelper (>= 7), autotools-dev, dh-autoreconf, pkg-config, gettext, gawk, lsb-build-base3,  libgd2-xpm-dev | libgd2-noxpm-dev , libmysqlclient-dev, libsqlite3-dev, libsensors4-dev, portaudio19-dev, byacc, bison, libsnmp-dev, libfftw3-dev, libqt4-dev, make, libpcre3-dev, firebird2.5-dev, libpq-dev, libssl-dev, libphonon-dev
 Standards-Version: 3.7.3
 Homepage: <http://oscada.org>


И поскольку собираю из транка, удобно делать autoreconf уже в chroot окружении, автоматически при сборке:
JAVASCRIPT
Index: debian/rules
===================================================================
--- debian/rules	(revision 1775)
+++ debian/rules	(working copy)
@@ -26,6 +26,10 @@
 CROSS= --build $(DEB_BUILD_GNU_TYPE)
 endif
 
+configure:
+	dh_testdir
+	dh_autoreconf
+
 config.status: configure
 	dh_testdir
 	./configure $(CROSS) --prefix=/usr
@@ -53,6 +57,7 @@
 
 	[ ! -f Makefile ] || $(MAKE) distclean
 
+	dh_autoreconf_clean
 	dh_clean
 
 install: install-indep install-arch
Сообщение создано: 31. 03. 2012 [19:48]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"aleax" wrote:

Уже давненько собираю скаду под дебиан в минимальном chroot’е с использованием pbuildr’а.
Что б он автоматически устанавливал необходимые зависимости, они должны быть записаны в debian/control файле, потому предлагаю первый патч:

Зависимости это хорошо, только не всегда они доступны, впрочем если учесть что они в значительной степени типичны то я их включаю.

"aleax" wrote:

И поскольку собираю из транка, удобно делать autoreconf уже в chroot окружении, автоматически при сборке:

Опять-же dh_autoreconf может отсутствовать, а часто переконфигурация вообще не нужна. Хотя если его применять в связке с dh_autoreconf_clean, то патч формируется "чистым", поэтому тоже включил ибо закоментировать проще чем добавлять.

Learn, learn and learn better than work, work and work.
Сообщение создано: 01. 04. 2012 [00:39]
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
"roman" wrote:

Опять-же dh_autoreconf может отсутствовать, а часто переконфигурация вообще не нужна. Хотя если его применять в связке с dh_autoreconf_clean, то патч формируется "чистым", поэтому тоже включил ибо закоментировать проще чем добавлять.


Так. что-то я перемудрил, и недопроверил (Revision: 1776)

Вариант1. Изначальный.
JAVASCRIPT
config.status: configure
 	dh_testdir
 	./configure $(CROSS) --prefix=/usr


Сборка проходит нормально если в директории есть сгненерированные "autoreconf -ivf" файлы.
Если их нету, то ругается на отсутствие цели "configure".

если сделать так:

Вариант2
JAVASCRIPT
config.status: configure
 	dh_testdir
 	dh_autoreconf
 	./configure $(CROSS) --prefix=/usr


то снова таки, при отсутствии configure скрипта (и сопутсвующих) ругается на отсутствие цели "configure" и до самого dh_autoreconf не доходит.

Но нормально собирает если убрать вызов цели configure:
JAVASCRIPT
config.status:
 	dh_testdir
 	dh_autoreconf
 	./configure $(CROSS) --prefix=/usr

либо определив её явно, как в первом сообщении.


[Сообщение редактировалось 1 раз(а), в последний раз 01.04.2012 в 00:42.]
Сообщение создано: 01. 04. 2012 [20:11]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"aleax" wrote:

Но нормально собирает если убрать вызов цели configure:
JAVASCRIPT
config.status:
 	dh_testdir
 	dh_autoreconf
 	./configure $(CROSS) --prefix=/usr


Этот вариант наиболее корректный, поскольку переконфигурация может потребоваться и при наличии "configure", а не только при его отсутствии.

Поправил.

Learn, learn and learn better than work, work and work.
Сообщение создано: 02. 04. 2012 [15:38]
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
Собираю deb-пакеты openscada 0.7.2 под ARM и выскакивает ошибка, что модуль ICP_DAS не может быть собран.
Это понятно, но раньше сборка проходила нормально (0.7.1) и несобираемые для ARM модули автоматически отключались.
Это поломка сборочной системы или неправильно делаю что-то? Хотя делаю по инструкции.
Если автоматом модули не отключаются, то где нужно прописать их отключение вручную?

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 02. 04. 2012 [16:04]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"almaz" wrote:

Собираю deb-пакеты openscada 0.7.2 под ARM и выскакивает ошибка, что модуль ICP_DAS не может быть собран.
Это понятно, но раньше сборка проходила нормально (0.7.1) и несобираемые для ARM модули автоматически отключались.

Что понятно?
Вообще тут речь о сборке на рабочей версии, почти 0.8.0, где ICP_DAS по умолчанию отключен. В 0.7.2 он включен,
и на ARM пытается собирать, но на многих у него это не получится, что связано с использованием статической библиотеки "libi8k_arm.a",
которая однако собрана для древнючего ARMv4 с FPA и не может линковаться на современном ARM (EABI, VFP).

"almaz" wrote:

Если автоматом модули не отключаются, то где нужно прописать их отключение вручную?

./configure --help
http://wiki.oscada.org/Doc/SborkaIzIsxodnikov#h573-7

Learn, learn and learn better than work, work and work.
Сообщение создано: 02. 04. 2012 [17:09]
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
Понятно, что модули ICPDAS и DIAMOND не соберутся. Хотелось бы узнать, где в 0.8.0 они отключены и в 0.7.2 включены для ARM. Чтобы корректно отключить в 0.7.2.

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 02. 04. 2012 [17:42]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"almaz" wrote:

Понятно, что модули ICPDAS и DIAMOND не соберутся. Хотелось бы узнать, где в 0.8.0 они отключены и в 0.7.2 включены для ARM. Чтобы корректно отключить в 0.7.2.

Чего Вам понятно? ICP_DAS соберётся на ARM, если это что-то типа ARMv4, ARMv5 + FPA!
Я дал Вам все ссылки, что где и как отключается - читаем внимательно!
./configure --help
http://wiki.oscada.org/Doc/SborkaIzIsxodnikov#h573-7

Learn, learn and learn better than work, work and work.
Сообщение создано: 02. 04. 2012 [20:36]
almaz
Almaz Karimov
Contributor
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
Процессор Marvell 88F6281 (ARMv5TE). Выдаёт ошибку при сборке:

/usr/bin/ld: error: Source object /root/openscada-0.7.2/src/moduls/daq/ICP_DAS/libi8k_arm.a(slot.o) has EABI version 0, but target .libs/daq_ICP_DAS.so has EABI version 5
/usr/bin/ld: failed to merge target specific data of file /root/openscada-0.7.2/src/moduls/daq/ICP_DAS/libi8k_arm.a(slot.o)
/usr/bin/ld: error: Source object /root/openscada-0.7.2/src/moduls/daq/ICP_DAS/libi8k_arm.a(msw.o) has EABI version 0, but target .libs/daq_ICP_DAS.so has EABI version 5
/usr/bin/ld: failed to merge target specific data of file /root/openscada-0.7.2/src/moduls/daq/ICP_DAS/libi8k_arm.a(msw.o)
/usr/bin/ld: error: Source object /root/openscada-0.7.2/src/moduls/daq/ICP_DAS/libi8k_arm.a(i7k.o) has EABI version 0, but target .libs/daq_ICP_DAS.so has EABI version 5
/usr/bin/ld: failed to merge target specific data of file /root/openscada-0.7.2/src/moduls/daq/ICP_DAS/libi8k_arm.a(i7k.o)
/usr/bin/ld: error: Source object /root/openscada-0.7.2/src/moduls/daq/ICP_DAS/libi8k_arm.a(timer.o) has EABI version 0, but target .libs/daq_ICP_DAS.so has EABI version 5
/usr/bin/ld: failed to merge target specific data of file /root/openscada-0.7.2/src/moduls/daq/ICP_DAS/libi8k_arm.a(timer.o)
/usr/bin/ld: error: Source object /root/openscada-0.7.2/src/moduls/daq/ICP_DAS/libi8k_arm.a(sio.o) has EABI version 0, but target .libs/daq_ICP_DAS.so has EABI version 5
/usr/bin/ld: failed to merge target specific data of file /root/openscada-0.7.2/src/moduls/daq/ICP_DAS/libi8k_arm.a(sio.o)
collect2: ld returned 1 exit status

В файле configure.in нашёл (и в 0.7.2, и в рабочей версии), что модуль ICP_DAS включается для всех arm с подменой скомпилированной ранее библиотеки, а собираться для всех arm не хочет.
Значит для некоторых arm-процессоров надо корректировать configure.in или отключить в debian/rules в строчке с ./configure (--disable-ICP_DAS).

[Сообщение редактировалось 1 раз(а), в последний раз 02.04.2012 в 20:48.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 02. 04. 2012 [20:56]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"almaz" wrote:

В файле configure.in нашёл (и в 0.7.2, и в рабочей версии), что модуль ICP_DAS включается для всех arm с подменой скомпилированной ранее библиотеки, а собираться для всех arm не хочет.

Правильно! Вы или ARM первый раз в глаза видите или я уже прямо не знаю!
Читаем тут: http://wiki.oscada.org/Using/LP5xxx

"almaz" wrote:

Значит для некоторых arm-процессоров надо корректировать configure.in или отключить в debian/rules в строчке с ./configure (--disable-ICP_DAS).

configure.in пользователям корректировать не нужно, для этого --disable-ICP_DAS есть, как и подобное для остальных модулей.
Зачем я пишу эти руководства если тут начинаются домыслы!?

Learn, learn and learn better than work, work and work.



1471