Summary: | Не находит загружаемые библиотеки | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Ivan A. Melnikov <iv> |
Component: | ruby-sassc | Assignee: | majioa <majioa> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | major | ||
Priority: | P3 | CC: | cas, imz, led, m, majioa, mike, nbr, rider, stalker, stanv, timonbl4 |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Ivan A. Melnikov
2019-11-06 15:02:30 MSK
ruby-sassc-2.2.1-alt2 -> sisyphus: Fri Nov 08 2019 Pavel Skrylev <majioa@altlinux> 2.2.1-alt2 - changed (*) spec to use build requires - fixed (!) lost link to system's .so lib (closes #37433) - fixed (!) requires Разрешите немного придраться к http://git.altlinux.org/gears/r/ruby-sassc.git?p=ruby-sassc.git;a=commitdiff;h=46abb8e801831e202077176615ab1f8fa854caaf ... > ln -s $(find /usr -name libsass.so.1 2>/dev/null) %ruby_gemlibdir/ext/libsass.so А если libsass сменить so name, например, на 2? Т.к. уже есть "BuildRequires: libsass-devel", то есть и симлинк libsass.so -> libsass.so.1, а значит можно узнавать значение N в libass.so.N динамически, либо через realpath, либо через readelf -a <...> | grep name. Его также часто можно узнать, грепнув /usr/inlude от нужной библиотеки. "+BuildRequires: libsass" в таком случае тоже лишнее, т.к. -devel пакет обязан гарантированно подтянуть не devel пакет, а вот если упаковка libsass будет приведена в соответствие с Shared Libs Policy, чего сейчас нет, зависимость от "libass" может сломаться. В целом не критично. Т.е. я бы сделал примерно так: Сначала узнаем путь к целевому файлу для симлинка: %define libsass_file_path %(find %_libdir -maxdepth 1 -name 'libsass.so.*' | head -n 1 | grep . || echo 0) "grep ." ничего не делает, но делает ненулевой код возврата, если find ничего не нашел, а если код возврата ненулевой, то делаем echo 0, чтобы в первом проходе парсера спека, когда еще не установлены сборочные зависимости, не получилось пустой переменной. Далее узнаем имя пакета, которому принадлежит файл библиотеки: %define libassess_pkg_name %(rpm -qf --queryformat='%{NAME}' %libsass_file_path || echo libsass) "|| echo libsass" аналогично на случай ненулевого кода возврата rpm -qf, чтобы не получилось пустой переменной (не присвоенного макроса), которая приведет к ошибке. <...> Requires: %libassess_pkg_name <...> ln -s %libsass_file_pathlibsass_file_path %ruby_gemlibdir/ext/libsass.so |