mpd

Сборка под OpenWRT + libpcap + зависимость от pcap / pcap-config + cross-comilation

Dec 07, 2016 11:27

Долго не мог понять, почему кросс-компиляция пакета, который зависит от libpcap приводит к тому, что включаются заголовочные файлы из хоста (/usr/include вместо локальных для кросс-компиляции).

Нашёл, что откуда-то появляется "-I/usr/include" в CXXFLAGS.
Методом проб и ошибок дошёл до виновника: оказалось, что чтобы определить зависимость от pcap в моём скрипте CMake вызывается pcap-config (у libpcap нет описания для pkgconfig, но есть вот этот конфигурационный скрипт: вообще, логично, что он написан на shell, для кросс-компиляции - самое оно), но в нём нет никакой пользы для кросс-компиляции, к сожалению. Например: http://trac.aircrack-ng.org/ticket/1528

Действительно, даже собранный для кросс-компиляции этот скрипт выводит следующее:
> ./build_dir/target-mips_34kc_musl-1.1.15/libpcap-1.7.4/pcap-config --cflags
-I/usr/includeНет слов.

В результате, люди чего только не делают. Вот, как в OpenWRT адаптируют pppd/Makefile.linux для сборки с libpcap:
https://github.com/openwrt/openwrt/blob/master/package/network/services/ppp/patches/300-filter-pcap-includes-lib.patch

Ещё, бродя по исходникам, наткнулся на феерический отступ, напоминающий закладку в коде, когда далеко-далеко за пределами 80-ой колонки что-нибудь вставляют (проскроллируйте вправо до конца):
https://github.com/openwrt/openwrt/blob/master/package/network/utils/tcpdump/patches/002-remove_static_libpcap_check.patch
UPD: А, ну, это строки удаляются из автоконфигурного скрипта, он автоматически генерируется. Но, всё-равно, "сюрприз".

P.S.: Кстати, нашёл другие пакеты, у которых те же проблемы:
http://www.yoctoproject.org/docs/2.2/mega-manual/mega-manual.html23.6.4. Binary Configuration Scripts Disabled
Some of the core recipes that package binary configuration scripts now disable the scripts due to the scripts previously requiring error-prone path substitution. Software that links against these libraries using these scriptsshould use the much more robust pkg-config instead. The list of recipes changed in this version (and their configuration scripts) is as follows:

directfb (directfb-config)
freetype (freetype-config)
gpgme (gpgme-config)
libassuan (libassuan-config)
libcroco (croco-6.0-config)
libgcrypt (libgcrypt-config)
libgpg-error (gpg-error-config)
libksba (ksba-config)
libpcap (pcap-config)
libpcre (pcre-config)
libpng (libpng-config, libpng16-config)
libsdl (sdl-config)
libusb-compat (libusb-config)
libxml2 (xml2-config)
libxslt (xslt-config)
ncurses (ncurses-config)
neon (neon-config)
npth (npth-config)
pth (pth-config)
taglib (taglib-config)Additionally, support for pkg-config has been added to some recipes in the previous list in the rare cases where the upstream software package does not already provide it.

plain c, freesoftware, openwrt, library, баян

Previous post Next post
Up