Debian build system improvement
Author |
Message |
Written on: 30. 03. 2012 [14:17]
|
aleax
Alexey Bondarchuk
Topic creator
registered since: 27.01.2010
Posts: 73
|
Уже давненько собираю скаду под дебиан в минимальном chroot’е с использованием pbuildr’а.
Что б он автоматически устанавливал необходимые зависимости, они должны быть записаны в debian/control файле, потому предлагаю первый патч:
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 окружении, автоматически при сборке:
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
|
Written on: 31. 03. 2012 [19:48]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"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.
|
Written on: 01. 04. 2012 [00:39]
|
aleax
Alexey Bondarchuk
Topic creator
registered since: 27.01.2010
Posts: 73
|
"roman" wrote:
Опять-же dh_autoreconf может отсутствовать, а часто переконфигурация вообще не нужна. Хотя если его применять в связке с dh_autoreconf_clean, то патч формируется "чистым", поэтому тоже включил ибо закоментировать проще чем добавлять.
Так. что-то я перемудрил, и недопроверил (Revision: 1776)
Вариант1. Изначальный.
config.status: configure
dh_testdir
./configure $(CROSS) --prefix=/usr
Сборка проходит нормально если в директории есть сгненерированные "autoreconf -ivf" файлы.
Если их нету, то ругается на отсутствие цели "configure".
если сделать так:
Вариант2
config.status: configure
dh_testdir
dh_autoreconf
./configure $(CROSS) --prefix=/usr
то снова таки, при отсутствии configure скрипта (и сопутсвующих) ругается на отсутствие цели "configure" и до самого dh_autoreconf не доходит.
Но нормально собирает если убрать вызов цели configure:
config.status:
dh_testdir
dh_autoreconf
./configure $(CROSS) --prefix=/usr
либо определив её явно, как в первом сообщении.
[This article was edited 1 times, at last 01.04.2012 at 00:42.]
|
Written on: 01. 04. 2012 [20:11]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"aleax" wrote:
Но нормально собирает если убрать вызов цели configure:
config.status:
dh_testdir
dh_autoreconf
./configure $(CROSS) --prefix=/usr
Этот вариант наиболее корректный, поскольку переконфигурация может потребоваться и при наличии "configure", а не только при его отсутствии.
Поправил.
Learn, learn and learn better than work, work and work.
|
Written on: 02. 04. 2012 [15:38]
|
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
|
Собираю deb-пакеты openscada 0.7.2 под ARM и выскакивает ошибка, что модуль ICP_DAS не может быть собран.
Это понятно, но раньше сборка проходила нормально (0.7.1) и несобираемые для ARM модули автоматически отключались.
Это поломка сборочной системы или неправильно делаю что-то? Хотя делаю по инструкции.
Если автоматом модули не отключаются, то где нужно прописать их отключение вручную?
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Written on: 02. 04. 2012 [16:04]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"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.
|
Written on: 02. 04. 2012 [17:09]
|
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 516
|
Понятно, что модули ICPDAS и DIAMOND не соберутся. Хотелось бы узнать, где в 0.8.0 они отключены и в 0.7.2 включены для ARM. Чтобы корректно отключить в 0.7.2.
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Written on: 02. 04. 2012 [17:42]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"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.
|
Written on: 02. 04. 2012 [20:36]
|
almaz
Almaz Karimov
Contributor
registered since: 25.09.2008
Posts: 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).
[This article was edited 1 times, at last 02.04.2012 at 20:48.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Written on: 02. 04. 2012 [20:56]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"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.
|
|
|