<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>37433</bug_id>
          
          <creation_ts>2019-11-06 15:02:30 +0300</creation_ts>
          <short_desc>Не находит загружаемые библиотеки</short_desc>
          <delta_ts>2019-11-10 12:40:30 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>ruby-sassc</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ivan A. Melnikov">iv</reporter>
          <assigned_to name="majioa@altlinux.org">majioa</assigned_to>
          <cc>cas</cc>
    
    <cc>imz</cc>
    
    <cc>led</cc>
    
    <cc>m</cc>
    
    <cc>majioa</cc>
    
    <cc>mike</cc>
    
    <cc>nbr</cc>
    
    <cc>rider</cc>
    
    <cc>stalker</cc>
    
    <cc>stanv</cc>
    
    <cc>timonbl4</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>185363</commentid>
    <comment_count>0</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2019-11-06 15:02:30 +0300</bug_when>
    <thetext>ruby-sassc из Сизифа не работает вообще потому что не может найти нужные динамические библиотеки. Минималистичный пример:

$ cat test.rb
require &quot;sassc&quot;
$ ruby test.rb
Traceback (most recent call last):
        12: from test.rb:1:in `&lt;main&gt;&apos;
        11: from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:39:in `require&apos;
        10: from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:135:in `rescue in require&apos;
         9: from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:135:in `require&apos;
         8: from /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/lib/sassc.rb:31:in `&lt;top (required)&gt;&apos;
         7: from /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/lib/sassc.rb:31:in `require_relative&apos;
         6: from /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:5:in `&lt;top (required)&gt;&apos;
         5: from /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:6:in `&lt;module:SassC&gt;&apos;
         4: from /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:10:in `&lt;module:Native&gt;&apos;
         3: from /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:13:in `rescue in &lt;module:Native&gt;&apos;
         2: from /usr/lib/ruby/gems/2.5.0/gems/ffi-1.11.1/lib/ffi/library.rb:99:in `ffi_lib&apos;
         1: from /usr/lib/ruby/gems/2.5.0/gems/ffi-1.11.1/lib/ffi/library.rb:99:in `map&apos;
/usr/lib/ruby/gems/2.5.0/gems/ffi-1.11.1/lib/ffi/library.rb:145:in `block in ffi_lib&apos;: Could not open library &apos;/usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/ext/libsass.so&apos;: /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/ext/libsass.so: cannot open
shared object file: No such file or directory (LoadError)

При этом libsass.so в Сизифе есть только в %_libdir, а libsassc (который тоже необходим этому гему) вообще, похоже, отсутствует.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185460</commentid>
    <comment_count>1</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2019-11-08 18:16:26 +0300</bug_when>
    <thetext>ruby-sassc-2.2.1-alt2 -&gt; sisyphus:

Fri Nov 08 2019 Pavel Skrylev &lt;majioa@altlinux&gt; 2.2.1-alt2
- changed (*) spec to use build requires
- fixed (!) lost link to system&apos;s .so lib (closes #37433)
- fixed (!) requires</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185468</commentid>
    <comment_count>2</comment_count>
    <who name="mikhailnov">m</who>
    <bug_when>2019-11-09 09:48:30 +0300</bug_when>
    <thetext>Разрешите немного придраться к http://git.altlinux.org/gears/r/ruby-sassc.git?p=ruby-sassc.git;a=commitdiff;h=46abb8e801831e202077176615ab1f8fa854caaf ...

&gt; ln -s $(find /usr -name libsass.so.1 2&gt;/dev/null) %ruby_gemlibdir/ext/libsass.so

А если libsass сменить so name, например, на 2? Т.к. уже есть &quot;BuildRequires: libsass-devel&quot;, то есть и симлинк libsass.so -&gt; libsass.so.1, а значит можно узнавать значение N в libass.so.N динамически, либо через realpath, либо через readelf -a &lt;...&gt; | grep name. Его также часто можно узнать, грепнув /usr/inlude от нужной библиотеки.

&quot;+BuildRequires: libsass&quot; в таком случае тоже лишнее, т.к. -devel пакет обязан гарантированно подтянуть не devel пакет, а вот если упаковка libsass будет приведена в соответствие с Shared Libs Policy, чего сейчас нет, зависимость от &quot;libass&quot; может сломаться.

В целом не критично.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185470</commentid>
    <comment_count>3</comment_count>
    <who name="mikhailnov">m</who>
    <bug_when>2019-11-10 12:40:30 +0300</bug_when>
    <thetext>Т.е. я бы сделал примерно так:

Сначала узнаем путь к целевому файлу для симлинка:
%define libsass_file_path %(find %_libdir -maxdepth 1 -name &apos;libsass.so.*&apos; | head -n 1 | grep . || echo 0)

&quot;grep .&quot; ничего не делает, но делает ненулевой код возврата, если find ничего не нашел, а если код возврата ненулевой, то делаем echo 0, чтобы в первом проходе парсера спека, когда еще не установлены сборочные зависимости, не получилось пустой переменной.

Далее узнаем имя пакета, которому принадлежит файл библиотеки:

%define libassess_pkg_name %(rpm -qf --queryformat=&apos;%{NAME}&apos; %libsass_file_path || echo libsass)

&quot;|| echo libsass&quot; аналогично на случай ненулевого кода возврата rpm -qf, чтобы не получилось пустой переменной (не присвоенного макроса), которая приведет к ошибке.

&lt;...&gt;
Requires: %libassess_pkg_name
&lt;...&gt;
ln -s %libsass_file_pathlibsass_file_path %ruby_gemlibdir/ext/libsass.so</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>