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

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

    <bug>
          <bug_id>61275</bug_id>
          
          <creation_ts>2026-10-31 04:16:27 +0300</creation_ts>
          <short_desc>fixup-pkgconfig не вычищает -Wl,-rpath,/usr/lib64 из pkg-config Libs</short_desc>
          <delta_ts>2026-11-02 23:54:09 +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>rpm-build</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc>https://packages.altlinux.org/tasks/439573/</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61268</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Evgeny Sinelnikov">sin</reporter>
          <assigned_to name="Arseny Maslennikov">arseny</assigned_to>
          <cc>arseny</cc>
    
    <cc>glebfm</cc>
    
    <cc>imz</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>303697</commentid>
    <comment_count>0</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2026-10-31 04:16:27 +0300</bug_when>
    <thetext>После обновления rpm-build до 4.0.4.213-alt1 (коммит 1766d5f79213,
&quot;feat(fixup): add RPM_PREFIX to pkgconfig script&quot;) brp-скрипт
/usr/lib/rpm/fixup-pkgconfig перестал вычищать стандартный библиотечный
путь из pkg-config-файлов:

  Libs: -Wl,-rpath,/usr/lib64 -L${libdir} -l...

вместо

  Libs: -L${libdir} -l...

Причина - ошибка в кавычках. В sed-выражении переменная $PREFIX_ESCAPED
оказалась внутри одинарных кавычек:

  sed -e &apos;s#\(^\| \+\)\(-Wl,-rpath,\)&quot;$PREFIX_ESCAPED&quot;\(/local\)\?/...&apos;

Последствия

Пакеты, которые линкуются через pkg-config, получают RPATH на стандартный
путь /usr/lib64. Проверка verify-elf это запрещает:

  verify-elf: ERROR: ./usr/lib64/samba/pdb/ipasam.so:
  RPATH contains standard library path &quot;/usr/lib64&quot;: /usr/lib64:/usr/lib64/samba

Так сломалась сборка freeipa (ALT #60003), также пострадали vlc и ffmpeg.
Пока пакет не пересобран после исправления rpm-build, его .pc-файлы
остаются с rpath.

Примеры:

Сборка samba-4.22.10-alt1 (task 427214, rpm-build 4.0.4.212-alt1):

  /usr/lib64/pkgconfig/ndr_krb5pac.pc:
  Libs: &apos;-Wl,-rpath,/usr/lib64 -L${libdir} -lndr-krb5pac&apos; --&gt; &apos;-L${libdir} -lndr-krb5pac&apos;

Сборка samba-4.22.11-alt1 (task 427373, rpm-build 4.0.4.213-alt1):

  строк Libs: в логе нет, .pc остался с -Wl,-rpath,/usr/lib64.

Как воспроизвести?

  cat &gt; x.pc &lt;&lt;&apos;EOF&apos;
  prefix=/usr
  libdir=${prefix}/lib64
  Name: x
  Description: x
  Version: 1
  Libs: -Wl,-rpath,/usr/lib64 -L${libdir} -lx
  Cflags: -I${includedir}
  EOF

  mkdir -p root/usr/lib64/pkgconfig
  cp x.pc root/usr/lib64/pkgconfig/
  RPM_BUILD_ROOT=$PWD/root RPM_BUILD_DIR=/usr/src/RPM/BUILD \
    RPM_LIB=lib64 RPM_LIBDIR=/usr/lib64 RPM_PREFIX=/usr \
    /usr/lib/rpm/fixup-pkgconfig root/usr/lib64/pkgconfig/x.pc

  grep Libs root/usr/lib64/pkgconfig/x.pc

Ожидаемый результат:

  Libs: -L${libdir} -lx

Фактический результат:

  Libs: -Wl,-rpath,/usr/lib64 -L${libdir} -lx

__________

Дополнительно

В том же скрипте есть вторая, латентная проблема: alternation

  \($RPM_BUILD_ROOT\|$RPM_BUILD_DIR\|/usr/lib[^/]*/gcc-lib\)

при пустом RPM_BUILD_DIR содержит пустую ветку и вырезает любой rpath,
включая /usr/lib64/samba. В реальной сборке переменная выставлена, поэтому
не проявляется.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303699</commentid>
    <comment_count>1</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2026-10-31 06:20:10 +0300</bug_when>
    <thetext>Подготовил сборку с исправлениями:
#439179 EPERM #1 sisyphus rpm-build.git=4.0.4.217-alt1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303703</commentid>
    <comment_count>2</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2026-10-31 11:05:44 +0300</bug_when>
    <thetext>(In reply to Evgeny Sinelnikov from comment #1)
&gt; Подготовил сборку с исправлениями:
&gt; #439179 EPERM #1 sisyphus rpm-build.git=4.0.4.217-alt1
спасибо, посмотрю!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303705</commentid>
    <comment_count>3</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2026-10-31 13:03:16 +0300</bug_when>
    <thetext>(In reply to Evgeny Sinelnikov from comment #0)
&gt; Дополнительно
&gt; 
&gt; В том же скрипте есть вторая, латентная проблема: alternation
&gt; 
&gt;   \($RPM_BUILD_ROOT\|$RPM_BUILD_DIR\|/usr/lib[^/]*/gcc-lib\)
&gt; 
&gt; при пустом RPM_BUILD_DIR содержит пустую ветку и вырезает любой rpath,
&gt; включая /usr/lib64/samba. В реальной сборке переменная выставлена, поэтому
&gt; не проявляется.
Этот RPM_BUILD_DIR вообще стоило бы проверять на непустоту в начале.
Более того, не хватает &quot;лаунчера&quot; для тестирования всех этих brp-* и fixup-*, отдельного от rpmbuild -b$mode.

Но в fixup-pkgconfig он встречается один раз, в качестве не обращения, а упоминания; я думаю сделать там &quot;${RPM_BUILD_DIR-.}&quot;, всё равно ld -rpath . то ли линкер отказывается делать, то ли просто лишь мы должны вырезать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303706</commentid>
    <comment_count>4</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2026-10-31 13:07:03 +0300</bug_when>
    <thetext>(In reply to Evgeny Sinelnikov from comment #0)
&gt; Последствия
&gt; 
&gt; Пакеты, которые линкуются через pkg-config, получают RPATH на стандартный
&gt; путь /usr/lib64. Проверка verify-elf это запрещает:
&gt; 
&gt;   verify-elf: ERROR: ./usr/lib64/samba/pdb/ipasam.so:
&gt;   RPATH contains standard library path &quot;/usr/lib64&quot;:
&gt; /usr/lib64:/usr/lib64/samba
&gt; 
&gt; Так сломалась сборка freeipa (ALT #60003), также пострадали vlc и ffmpeg.
&gt; Пока пакет не пересобран после исправления rpm-build, его .pc-файлы
&gt; остаются с rpath.
&gt; 
&gt; Как воспроизвести?
&gt; 
&gt;   cat &gt; x.pc &lt;&lt;&apos;EOF&apos;
&gt;   prefix=/usr
&gt;   libdir=${prefix}/lib64
&gt;   Name: x
&gt;   Description: x
&gt;   Version: 1
&gt;   Libs: -Wl,-rpath,/usr/lib64 -L${libdir} -lx
&gt;   Cflags: -I${includedir}
&gt;   EOF
&gt; 
&gt;   mkdir -p root/usr/lib64/pkgconfig
&gt;   cp x.pc root/usr/lib64/pkgconfig/
&gt;   RPM_BUILD_ROOT=$PWD/root RPM_BUILD_DIR=/usr/src/RPM/BUILD \
&gt;     RPM_LIB=lib64 RPM_LIBDIR=/usr/lib64 RPM_PREFIX=/usr \
&gt;     /usr/lib/rpm/fixup-pkgconfig root/usr/lib64/pkgconfig/x.pc
&gt; 
&gt;   grep Libs root/usr/lib64/pkgconfig/x.pc
Спасибо за пример!
Напишу про это тест.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303802</commentid>
    <comment_count>5</comment_count>
    <who name="Arseny Maslennikov">arseny</who>
    <bug_when>2026-11-02 23:54:09 +0300</bug_when>
    <thetext>Женя, прошу меня извинить. Я в день появления 4.0.4.213 в сизифе, когда была обновлена ещё и samba, и возникли багрепорты вокруг libsmbclient, стал валить на неё; мол, апстрим что-то поменял. А зря...
Хорошо, что теперь разобрались, в чём дело было.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>