Сборка пакетов расширения Python для Launchpad
У меня есть проект autotools (C++), для которого я собираю пакеты на панели запуска ppa
Недавно я попытался добавить пакет Python в этот архив. Я проверил это локально с bzr dh-make
а также используя pbuilder
, Оба работают фантастически. На панели запуска правда радости нет.
Один из журналов сборки находится здесь
Вы увидите, что проблема заключается в автоматически сгенерированной цели установки. Когда дело доходит до установки модуля python, он выдает предупреждение, а затем повторно связывает модуль. Я сделал небольшое исследование, и оно показалось мне совершенно нормальным.
Вот Makefile.am
с добавленной целью модуля python: ошибка в журнале сборки на панели запуска в итоге говорит:
/usr/bin/ld: cannot find -lvalhalla
collect2: error: ld returned 1 exit status
libtool: error: error: relink 'valhalla.la' with the above command before installing it
Makefile:2265: recipe for target 'install-pyexecLTLIBRARIES' failed
make[3]: *** [install-pyexecLTLIBRARIES] Error 1
Странно, что не все из них потерпели неудачу. Может быть, это как-то связано с параллелизмом.
Я заметил, что команда запускается make -j4 install
а то при переподключении вроде как сказать не могу найти -lvalhalla
это имя основной библиотеки, создаваемой проектом. Кажется, что установка нескольких вещей одновременно, возможно, это проблема. Может быть, я могу переопределить только dh_auto_install
цель в debian/rules
файл?
Похоже, кто-то другой может подтвердить то же, что я вижу в этом списке.
1 ответ
Так что, действительно, оказалось, что проблема заключалась в параллельных сборках и, в частности, в конце, когда модуль python повторно связывался, другие вещи еще не были включены. Исправление также было не столько исправлением, сколько обходным путем, и именно это я и предложил.
А именно я просто добавил эту цель в свой debian/rules
файл:
#because python module depends on main library and somehow dependency is not known we must limit parallelism
override_dh_auto_install:
dh_auto_install --max-parallel=1
--max-parallel=1
немного ограничит его бегом make -j1 install
что позволит избежать условия гонки, когда libtool ищет библиотеку, которой еще нет (описано в ссылке выше) при перекомпоновке модуля python.