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

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

    <bug>
          <bug_id>13863</bug_id>
          
          <creation_ts>2008-01-03 23:50:22 +0300</creation_ts>
          <short_desc>Неправильно, что mono требует devel-пакет</short_desc>
          <delta_ts>2009-07-01 08:48:49 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>mono</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>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vitaly Lipatov">lav</reporter>
          <assigned_to name="Andrey Cherepanov">cas</assigned_to>
          <cc>cas</cc>
    
    <cc>ktirf</cc>
    
    <cc>serjigva</cc>
    
    <cc>wrar</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>60323</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-01-03 23:50:38 +0300</bug_when>
    <thetext>Надо бы избавиться от такой зависимости.
$ sudo rpm -e glib2-devel
error: removing these packages would break dependencies:
        pkgconfig(glib-2.0)   is needed by mono-1.2.6-alt1
        pkgconfig(gthread-2.0)   is needed by mono-1.2.6-alt1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60331</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Shabalin">shaba</who>
    <bug_when>2008-01-04 05:19:35 +0300</bug_when>
    <thetext>*** Bug 13864 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60333</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Shabalin">shaba</who>
    <bug_when>2008-01-04 05:20:24 +0300</bug_when>
    <thetext>*** Bug 13865 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60342</commentid>
    <comment_count>3</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-04 16:00:02 +0300</bug_when>
    <thetext>От этой зависимости нельзя избавиться, она происходит через файл mono.pc,
который одновременно находится сразу в двух пакетах (mono и libmono-devel).

Вот подробное письмо в devel@ по этому поводу.
http://lists.altlinux.org/pipermail/devel/2007-November/066468.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60524</commentid>
    <comment_count>4</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-01-07 16:10:01 +0300</bug_when>
    <thetext>Нет ничего невозможного.
Использовать mono без установки кучи devel-пакетов должно быть возможно.
Давайте просто определимся, что для этого надо поменять.
Очевидно, что использовать mono.pc для &quot;обнаружения mono&quot; является 
некорректным, и это поведение пакетов, если оно столь повсеместно,
необходимо исправить единым рецептом.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60526</commentid>
    <comment_count>5</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-01-07 16:13:20 +0300</bug_when>
    <thetext>Главное, что пока непонятно, у каких пакетов вызывает проблему наличие
mono.pc только в libmono-devel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60734</commentid>
    <comment_count>6</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-01-09 18:28:06 +0300</bug_when>
    <thetext>А кто может уделить время обсуждению и созданию решения по данной проблеме?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60738</commentid>
    <comment_count>7</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-09 19:03:55 +0300</bug_when>
    <thetext>Большая часть моновских пакетов использует mono.pc для определения присутствия
mono рантайм.  При этом использование mono.pc автоматически требует glib2-devel
-- если насильно игнорировать эту зависимость, то pkg-config будет считать, что
mono.pc &quot;битый&quot;.

Главное, что не &quot;непонятно&quot;, а, напротив, понятно, у каких пакетов отсутствие
mono.pc вызовет проблемы при сборке.  Таких пакетов не меньше десяти, читайте
рассылку devel@. 
http://lists.altlinux.ru/pipermail/devel/2007-November/066467.html

Виталий, то, что кажется вам &quot;данной проблемой&quot;, на самом деле является
компромиссными решением.  Насчёт &quot;кучи devel-пакетов&quot; Вы явно преувеличиваете --
glib2 занимает 0.5M, а mono -- 30M.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60739</commentid>
    <comment_count>8</comment_count>
    <who name="Mikhail Gusarov">dottedmag</who>
    <bug_when>2008-01-09 19:07:22 +0300</bug_when>
    <thetext>Дело не в занимаемом месте, а в семантике.

&gt; напротив, понятно, у каких пакетов отсутствие mono.pc вызовет проблемы при 
сборке.

Запатчить их, и всего дел.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60742</commentid>
    <comment_count>9</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-09 19:15:22 +0300</bug_when>
    <thetext>На самом деле есть УЖАСНЫЙ ХАК который может разрулить эту проблему
в пакете mono положить /usr/share/pkgconfig/mono.pc без зависимостей
а в пакете libmono-devel положить %_libdir/pkgconfig/mono.pc c зависимостями

При этом mono.pc из libdir будет когда надо перекрывать mono.pc из /usr/share.
Но этот хак столь ужасен что я охотнее запаковал одинаковый mono.pc в два пакета.

Короче, мне опять приходится объяснять, что я хорошо подумал, прежде чем...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60743</commentid>
    <comment_count>10</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-09 19:19:58 +0300</bug_when>
    <thetext>Там проблема, которую мы здесь обуждаем, является в таком случае следствием.
А проблема тогда в семантике mono.pc файла -- он используется для двух разных
вещей: 1) для линковки с libmono, для чего нужно glib2-devel, потому что в
хедерах libmono есть инклюды из glib2 и значит в cflags НУЖНО добавить
-I/usr/include/glib-2.0; то есть никак нельзя убить glib2 из mono.pc; 2) для
обнаружения присутствия mono-рантайма.

Следствием такой семантики mono.pc является проблема в зависимостях -- в рантайм
&quot;пробливается&quot; devel-пакет.

Запатчить все эти пакеты -- во первых, нужен желающий.  Во-вторых, это мартышкин
труд.  Все используют mono.pc как для обнаружения рантайма, так и для линковки с
libmono.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60751</commentid>
    <comment_count>11</comment_count>
    <who name="Mikhail Gusarov">dottedmag</who>
    <bug_when>2008-01-09 19:37:56 +0300</bug_when>
    <thetext>Мда, похоже, что и правда лечение было бы хуже болезни. Надо деИказе голову 
вправлять сначала :(
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60755</commentid>
    <comment_count>12</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-09 20:44:58 +0300</bug_when>
    <thetext>Есть общая проблема с семантикой зависимостей в *.pc файлах, я об этом несколько
раз писал.  Например здесь:
http://lists.altlinux.org/pipermail/devel/2007-September/063330.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60756</commentid>
    <comment_count>13</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-09 20:58:41 +0300</bug_when>
    <thetext>Похожая известная мне проблема -- пакет gnome-doc-utils требует
pkgconfig(libxml-2.0) -&gt; libxml2-devel.  Пакет gnome-doc-utils является noarch
пакетом и по смыслу никак не должен требовать libxml2-devel!  На самом деле он
требует /usr/bin/xmllint, который отпилен от libxml2 в пакет xml-utils.  Но на
уровне зависимостей в *.pc файлах эту тонкость никак передать нельзя.

В gnome-doc-utils из *.pc файла можно просто удалить зависиомсть на libxml-2.0
(и добавить в spec &quot;правильную&quot; зависимость на /usr/bin/xmllint).  А вот mono.pc
просто так &quot;подчистить&quot; уже нельзя.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60773</commentid>
    <comment_count>14</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-01-09 23:01:34 +0300</bug_when>
    <thetext>(In reply to comment #7)
&gt; отсутствие mono.pc вызовет проблемы при сборке.  Таких пакетов не меньше 
десяти, читайте рассылку devel@. 
&gt; http://lists.altlinux.ru/pipermail/devel/2007-November/066467.html
Я уже читал это письмо не раз. И в упор не понимаю что вы хотите сообщить.
Пишете &quot;вызовет проблемы при сборке&quot;. А кто против - есть mono-devel, в нём 
есть mono.pc

Взять тот же cdcollect из списка. Да, без mono.pc он не соберётся. Но ведь без 
mono.pc он отлично работает.
Повторю вопрос ещё раз: есть ли информация, какие пакеты  используют 
mono.pc &quot;для обнаружения присутствия mono-рантайма.&quot;, и у них вызовет проблему 
то, что mono.pc будет лежать в mono-devel (то есть отсутствовать в системе) ?

&gt; Виталий, то, что кажется вам &quot;данной проблемой&quot;, на самом деле является
&gt; компромиссными решением.  Насчёт &quot;кучи devel-пакетов&quot; Вы явно
Согласен, решение компромиссное. Осталось понять суть проблемы.

&gt; преувеличиваете -- glib2 занимает 0.5M, а mono -- 30M.
Да, я ошибся, мне показалось, что glib2-devel тянет обязательно glibc-devel.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60774</commentid>
    <comment_count>15</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-09 23:44:10 +0300</bug_when>
    <thetext>Виталий, этим пакетам для сборки не нужен mono-devel.  Им нужен mono-рантайм.
В пакете mono-devel лежит что-то ещё, что для сборки не нужно.

Общее правило состоит в том, что файл mono.pc должен находиться в том пакете, в
котором лежат файлы, совместно с которыми он используется.  Можно считать, что
семантика runtime probe означает, что mono.pc должен находиться в том же пакете,
что и /usr/bin/mono и /usr/lib/.../mscorlib.dll.  Я думаю, что не нужно его
искусственно перекладывать в mono-devel.

Вот типичный кусок кода из configure.in моновских пакетов

MONO_REQUIRED_VERSION=1.0
PKG_CHECK_MODULES(MONO_DEPENDENCY, mono &gt;= $MONO_REQUIRED_VERSION,
has_mono=true, has_mono=false)

Здесь определяется, есть в системе mono или нет.  Это базовая проверка.  Если
mono-рантайм установлен у мы можем запускать mono-программы, то она должна
выполняться.

$ grep Description /usr/lib/pkgconfig/mono.pc
Description: Mono Runtime
$

Для сборки mono пакетов, как правило, нужны только 1) базовый mono-рантайм; 2)
компилятор mono-mcs; и 3) дополнительные *.dll библиотеки, если они требуются
для сборки.  Отдельного *-devel компонента для сборки у mono в принципе особо не
существует, т.к. все *.dll библиотеки содержат полную метаинформацию о себе (то
есть типа хедеры и прототипы зашиты внутри самих *.dll файлов, и их можно
посмотреть с помощью /usr/bin/monodis).

Так что проблема тут вовсе не в том, что mono.pc лежит пакете mono а не
mono-devel.
Проблема в том, что mono.pc используется в двух разных случайх, и поэтому из
него нельзя убрать зависимость на glib2-devel.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60775</commentid>
    <comment_count>16</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-10 00:04:09 +0300</bug_when>
    <thetext>Проблема слишком плохая.  В новом релизе rpm-build, которого пока нет в сизифе,
я ужесточил правила генерации внутренних зависимостей между подпакетами.
Если собрать mono новым rpm-build, то через клаузу &apos;Libs: -lmono&apos; в mono.pc 
у пакета mono появтся зависимость на %_libdir/libmono.so -&gt; libmono-devel.

Шульмовать становится всё труднее.
Хорошего решения я пока не вижу.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60776</commentid>
    <comment_count>17</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2008-01-10 00:27:31 +0300</bug_when>
    <thetext>(In reply to comment #14)
Я просмотрел зависимости libgtk-sharp2 и тоже не нашёл явных зависимотей на
mono.pc. Я так понимаю, что для сборки достаточно поставить сборочную
зависимость на libmono-devel.

Вероятно способ избавления от этих зависимостей может оказаться даже несколько
проще, чем может показаться на первый взгляд.

(In reply to comment #15)
То есть получается, что вместо указания зависимости на mono-devel или
libmono-devel, при сборке соотвествующих пакетов, где используется вот таким вот
образом реализованный вариант поиска Mono Runtime с помощью autotools, мы
организуем зависимость этого самого рантайма от devel-пакетов...?!

Весьма неровный компромис. Вообще не вижу проблемы для всех пакетов, которые
используют во время сборки аутотулзовый поиск моно рантайма, прибить зависимость
на соотвествующий девел-пакет. Насколько я понимаю все текущие девел-зависимости
именно так и работают. И не важно при этом зависимость это присутсвующего в
системе объекта или нет.

ИМХО, сборочная зависимость на десяток файлов из libmono-devel, который ни от
чего не зависит кроме pkg-config, rpm и того, от чего зависит mono.pc, для
пакетов использующих autotools, более разумный компромис, чем дублирование
mono.pc и создавание зависимости рантайма от совершенно ненужных сторонних
devel-пакетов.

Без необходимости же зависеть Mono Runtime от devel-пакетов Glib никаким
перенесом mono.pc в дополнительные пакеты не добиться. В этом плане текущее
решение совершенно избыточно.

Есть тут конечно особенность, что для самостоятельной сборки сторонних проектов
потребуется неявно ставить libmono-devel. Но точно также совершенно неявно
требуется для сборки с использованием libGL пакет libmesa-devel. Да, в
libmesa-devel есть нужные файлы, а в libmono-devel казалось бы нет. Но так ли
это? Ведь для сборки требуются те же пакеты, которые ставятся сейчас зачем-то
пользователю. Вероятно разработчику они всё же нужнее. Давайте не будет
переносить проблемы разработчиков пользователям. В конце концом если ./configure
обламывается на этапе поиска -lGL, и нужно поставить libmesa-devel, то чем mono
лучше, если он пока так сделан?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60778</commentid>
    <comment_count>18</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-01-10 00:48:34 +0300</bug_when>
    <thetext>(In reply to comment #15)
&gt; Виталий, этим пакетам для сборки не нужен mono-devel.  Им нужен 
mono-рантайм.
и mono.pc, который есть в mono-devel.
&gt; В пакете mono-devel лежит что-то ещё, что для сборки не нужно.
Мне всё равно что ещё есть в этом пакете :)

&gt; Общее правило состоит в том, что файл mono.pc должен находиться в том 
пакете, в
&gt; котором лежат файлы, совместно с которыми он используется.  Можно считать,
Как писал Алексей Турбин, &quot;Файлы *.pc, как правило, должны входить в -devel 
пакеты.&quot;. Я с ним согласен.


&gt; семантика runtime probe означает, что mono.pc должен находиться в том же 
пакете,
&gt; что и /usr/bin/mono и /usr/lib/.../mscorlib.dll.  Я думаю, что не нужно его
&gt; искусственно перекладывать в mono-devel.
Искусственно ваше правило, по которому вы предлагаете pc-файл, который 
_всегда_ должен быть в -devel пакете, запихнуть к runtime.

&gt; для сборки.  Отдельного *-devel компонента для сборки у mono в принципе 
особо не существует,
Но пакет mono-devel есть :)

&gt; Так что проблема тут вовсе не в том, что mono.pc лежит пакете mono а не
&gt; mono-devel.
&gt; Проблема в том, что mono.pc используется в двух разных случайх, и поэтому из
&gt; него нельзя убрать зависимость на glib2-devel.
Проблема в том, что вы пока не сообщили как mono.pc используется в случаях, не 
относящихся к сборке пакета. А если он используется только при сборке, его 
место - в mono-devel.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60781</commentid>
    <comment_count>19</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-10 01:10:09 +0300</bug_when>
    <thetext>sin: mono.pc _означает_ две разные вещи: 1) что в системе имеется базовый mono
рантайм; 2) как слинковаться с библиотекой libmono.  Больше он ничего не
означает.  Линковаться с библиотекой libmono-devel приходится относительно
редко, чаще приходится проверять наличие mono-рантайма.  Вообще, лучше считать,
что libmono-devel не имеет никакого отношения к mono, это два _разных_ смысла,
которые означает mono.pc.

Поэтому не надо ничего никуда прибивать гвоздями.  mono.pc должен лежать в том
же пакете, с файлами из которого он одновременно используется.  Поскольку у
mono.pc есть два разных смысла, то он должен лежать в двух пакетах.  Правда, это
червато левыми зависимостям, потому что имеет место пересечение (или
объединение) смыслов.  Но это пересечение смыслов является общепринятой
практикой в моновских пакетов.  Решение проблемы в идеале должно состоять в том,
чтобы создать отдельные *.pc файлы для проверки mono-рантайма и для линковки с
libmono.  Но это идеальное решение идёт вразрез с общепринятой практикой, то
есть это в некотором смысле будет мартышкин труд.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60783</commentid>
    <comment_count>20</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-10 01:33:10 +0300</bug_when>
    <thetext>Виталий, mono.pc может самостоятельно и не использоваться в рантайме, но это не
повод переместить его в mono-devel.  Мое правило состоит не только в том, что
*.pc файлы должны, как правило, находиться в *-devel пакетах.  Другое мое
правило -- *.pc файл должен лежать в том же пакете, с файлами из которого он
одновременно используется (по назначению).  Это придаёт *.pc файлу правильную
семантическую нагрузку -- если *.pc файл используется для обнаружения
mono-рантайма, то он должен лежать в пакете с моно-рантаймом.  Это не
противоречит первому правилу: как правило, *.pc файлы используются для линковки
с библиотеками и поэтому в таких случаях лежат в lib%name-devel пакетах.

Виталий, суть проблемы на самом деле в том, что ПО ОПРЕДЕЛЁННОЙ ПРИЧИНЕ из
mono.pc нельзя удалить зависимость на glib2-devel.  В остальном mono.pc в пакете
mono находится на своём месте.

Если переместить mono.pc из пакета mono в пакет mono-devel, то придётся в
большую часть моновских пакетов вручную вписывать BuildRequires: mono-devel. 
Эту зависимость не обнаружит /usr/bin/buildreq, потому НА САМОМ ДЕЛЕ пакет
mono-devel (кроме *.pc файла) никак не используется при сборке этих пакетов.  То
 есть сломается большая половина моновских пакетов, что мы уже наблюдали.  Это
как раз и означает, что файл mono.pc имеет определённую семантическую нагрузку,
на которую мы едва ли в силах повлиять.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60788</commentid>
    <comment_count>21</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-01-10 02:07:24 +0300</bug_when>
    <thetext>(In reply to comment #20)
...
&gt; Если переместить mono.pc из пакета mono в пакет mono-devel, то придётся в
&gt; большую часть моновских пакетов вручную вписывать BuildRequires: mono-devel. 
...
&gt; Это как раз и означает, что файл mono.pc имеет определённую семантическую 
нагрузку, на которую мы едва ли в силах повлиять.

Алексей, спасибо за терпеливое объяснение, я осознал проблему.
Нельзя ли всё же подойти к ней с другой стороны:
Я посмотрел, что libmono используется только в monodis, mono-debugger и в 
beagle.
Быть может мы сделаем libmono.pc ?
Конечно, это потребует небольшого изменения в этих пакетах...
Но если вспомнить, как массово заменялся поиск .la-файлов в KDE-программах 
когда-то...
Но изменения не во всех пакетах. monodis сам из пакета mono собирается,
в mono-debugger проверка такая:
mono &gt;= $MONO_REQUIRED_VERSION glib-2.0 &gt;= $GLIB_REQUIRED_VERSION 
то есть нужные библиотеки и так будут найдены.
Ну а beagle вообще не использует флаги из mono.pc, как я увидел (версию 
проверяет, конечно).
Таким образом, реально зависимость на библиотеки в mono.pc не используется в 
Сизифе.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60789</commentid>
    <comment_count>22</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-10 02:12:25 +0300</bug_when>
    <thetext>В моем последнем рассуждении есть фактическая неточность.  Если преместить
mono.pc в mono-devel, то сломается несколько меньше (когда всё сломалось,
mono.pc был перемещён в новый пакет libmono-devel).

Но это не менят сути дела -- *.pc файл должен лежать в том же пакете, с файлами
из которого он одновременно используется (по назначению).  Если *.pc файл
используется для компиляции/линковки с библиотекой, то он должен лежать в том же
пакете, в котором лежат хедеры и симлинк на сонейм.  Если он используется для
обнаружения рантайма, то он должен лежать в пакете с рантаймом.  Правильная
группировка файлов даёт правильную семантическую нагрузку подпакетам.

То есть имеются определённые семантические констрейнты, которые неявно
налагаются на дизайн непозитария.  Файлы в подпакетах должны быть сгруппированы
&quot;по назначению&quot;, или же просто &quot;по смыслу&quot;.

Если переложить mono.pc из mono в mono-devel, то buildreq перестанет
обнаруживать сборочную зависимость на mono-devel.  А это очень плохо, это
технологический прокол.  Но он связан с семантическим проколом, с неправильной
группировкой файлов.

Правда, выполняя сематнические констрейнты, мы в данном случае нарушаем
топологические констрейнты -- упорядоченность самих пакетов.  Нарушается
условие, что любой не-*-devel пакет должен быть &quot;меньше&quot; любого *-devel пакета
(то есть установка не-*-devel пакета не должна вытягивать *-devel пакетов). 
Правда, у *-devel пакетов есть своя топология, и glib2-devel в этой топологии
один из самых маленьких.

В общем, спокойной ночи.  &quot;Всем вам спокойной ночи!&quot;  Ну а дальше вы знаете...
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60792</commentid>
    <comment_count>23</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-10 02:35:50 +0300</bug_when>
    <thetext>Возможен ещё один хак:
1) Убрать из mono.pc зависимость на glib-2.0
2) Вместо этого добавить в mono.pc фактические флаги из glib-2.0
Cflags: ... -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
Libs: ... -lglib-2.0
3) В пакете mono игнорировать зависимости, которые проставляются через Libs
4) В пакете libmono-devel на всякий случай добавить зависимость на glib2-devel
(она также должна проставиться автоматически через Libs: -lglib-2.0).

Как красиво сделать подстановку флагов вместо зависимости я вообще-то не знаю. 
Но конструкция кажется жизнеспособной.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60794</commentid>
    <comment_count>24</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-01-10 03:47:15 +0300</bug_when>
    <thetext>Всё же вы немного умничаете, с этими &quot;сематнические констрейнты&quot; 
и &quot;непозитории&quot;. Я понимаю что хочется стройности, но пока что всё началось с 
того, что mono требовал -devel-пакет :)

Что насчёт моего предложения _просто_ убрать зависимость на glib2 из mono.pc?
И для мифических пакетов, которым это понадобиться, сделать libmono.pc в 
mono-devel?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60797</commentid>
    <comment_count>25</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-01-10 04:46:43 +0300</bug_when>
    <thetext>Я умничаю не немного, а по полной программе, практически с размахом, наверное
из-за своего непомерного самомнения.

Результаты 1 - 50 из примерно 234 000 для semantic constraints.

Что до отдельного libmono.pc, то не знаю.  Подумаю ещё.  Пусть пока побудет как
есть.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60801</commentid>
    <comment_count>26</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2008-01-10 07:29:03 +0300</bug_when>
    <thetext>(In reply to comment #19)
Я готов несколько оспорить 1 пункт о том, что &quot;mono.pc означает, что в системе
имеется базовый mono рантайм&quot;. С таким же успехом glib.pc означает, что в
системе имеется библиотека Glib. ИМХО, и то, идругое означает для Autotools, что
в системе имеется сборочный пакет для поддержки рантайма или библиотеки во время
сборки. То, что важных файлов, кроме mono.pc, для Mono Runtime пока нет, ещё не
означает, что они не появятся в будущем. То, что стоит считать, что
libmono-devel не имеет отношение к mono. В этом вопросе я скорее склоняюсь к
мнению, что необходимость вынесения 80кб &quot;заголовочных вайлов&quot; в пакет
зависящий, в основном, только от того, от чего зависит mono.pc, вообще говоря
несколько сомнительна.

В качестве решения я предлагаю вернуть содержимое libmono-devel обратно в
mono-devel. На чём, как я сейчас понимаю, все проблемы решаться сами собой.

(In reply to comment #22)
&gt; В моем последнем рассуждении есть фактическая неточность.  Если преместить
&gt; mono.pc в mono-devel, то сломается несколько меньше (когда всё сломалось,
&gt; mono.pc был перемещён в новый пакет libmono-devel).

Хотелось понять, что действительно сломается. Я так понимаю, что этим &quot;что&quot;,
будут те, кто ожидает увидеть заголовочные файлы от Mono Runtime. И связи с этим
снова предлагаю вернуть содержимое libmono-devel обратно в mono-devel. На всякий
случай можно поставить в mono-devel Provides на libmono-devel.

Я думаю, что не стоит разрывать сущность не объекты, которые создают такие
сложные семантические ограничения, которые средствами rpm и build-req на текущий
момент не разрешимы. Тем более, что при этом пропадают расхождения между
семантическими и топологическими ограничениями.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60802</commentid>
    <comment_count>27</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2008-01-10 07:55:16 +0300</bug_when>
    <thetext>(In reply to comment #26)
На самом деле, конечно, говорить об Autotools в контексте использования mono.pc,
является с моей стороны некоторой небрежностью. Прошу прощения, конечно я имел в
виду pkg-config. Тем не менее, сути вопроса это не меняет - mono.pc, в моём
понимании, означает сборочную подпорку и его, вместе со всем содержимым текущего
libmono-devel, стоит вернуть в mono-devel. Как говорится, не стоит умножать
сущности без необходимости.

Замечу также, что, если решать проблему с переносом сборочных частей mono по
подпакетам, то вероятно стоит сначала локализвать все файлы этих сборочных
частей в mono-devel. Например, /usr/lib/pkgconfig/mono-cairo.pc у нас лежит в
пакете mono, хотя ему самое место в mono-devel. Для многих замкнутых пакетов
вроде monodevelop, такие файлы как monodevelop.pc либо вообще не стоит включать
в пакет, либо вероятно нужно выносить в devel-подпакеты. В общем, недочищенных
хвостов тут ещё очень много.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60805</commentid>
    <comment_count>28</comment_count>
    <who name="ildar">ildar</who>
    <bug_when>2008-01-10 09:28:19 +0300</bug_when>
    <thetext>Евгений,
Вы не обижайтесь, но с недавних пор Виталий &quot;в теме&quot;, а Вы - ещё нет.

(In reply to comment #26)
&gt; (In reply to comment #19)
&gt; Я готов несколько оспорить 1 пункт о том, что &quot;mono.pc означает, что в системе
&gt; имеется базовый mono рантайм&quot;. С таким же успехом glib.pc означает, что в
&gt; системе имеется библиотека Glib.

Нет. mono.pc означает, что в системе имеется базовый mono рантайм, _которого_
_достаточно_, _чтобы_ _собирать_ _mono-программы_. (При наличии соответствующего
компилятора). Это не так с glib2.

&gt; ИМХО, и то, идругое означает для Autotools, что
&gt; в системе имеется сборочный пакет для поддержки рантайма или библиотеки во время
&gt; сборки. То, что важных файлов, кроме mono.pc, для Mono Runtime пока нет, ещё не
&gt; означает, что они не появятся в будущем.

Не ожидайте *.h, *.so и т.п.

&gt; То, что стоит считать, что
&gt; libmono-devel не имеет отношение к mono.

ни libmono-devel, ни mono-devel к сборке mono-пакетов в общем случае отношения
не имеют. Последний по сути стоило бы назвать mono-develtools, чтобы не вызывать
лишних вопросов и обсуждений, как в этом #13863

&gt; В этом вопросе я скорее склоняюсь к
&gt; мнению, что необходимость вынесения 80кб &quot;заголовочных вайлов&quot; в пакет
&gt; зависящий, в основном, только от того, от чего зависит mono.pc, вообще говоря
&gt; несколько сомнительна.
&gt; 
&gt; В качестве решения я предлагаю вернуть содержимое libmono-devel обратно в
&gt; mono-devel. На чём, как я сейчас понимаю, все проблемы решаться сами собой.

1. не решатся
2. как я писал выше, в общем случае libmono* - вещи совершенно посторонние.

&gt; (In reply to comment #22)
&gt; &gt; В моем последнем рассуждении есть фактическая неточность.  Если преместить
&gt; &gt; mono.pc в mono-devel, то сломается несколько меньше (когда всё сломалось,
&gt; &gt; mono.pc был перемещён в новый пакет libmono-devel).
&gt; 
&gt; Хотелось понять, что действительно сломается. Я так понимаю, что этим &quot;что&quot;,
&gt; будут те, кто ожидает увидеть заголовочные файлы от Mono Runtime. И связи с этим
&gt; снова предлагаю вернуть содержимое libmono-devel обратно в mono-devel. На всякий
&gt; случай можно поставить в mono-devel Provides на libmono-devel.

Сломается buildreq %name.spec

&gt; Я думаю, что не стоит разрывать сущность не объекты, которые создают такие
&gt; сложные семантические ограничения, которые средствами rpm и build-req на текущий
&gt; момент не разрешимы. Тем более, что при этом пропадают расхождения между
&gt; семантическими и топологическими ограничениями.

СтОит отделять мухи от котлет. Даже если последние чем-то напоминают первые.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60806</commentid>
    <comment_count>29</comment_count>
    <who name="ildar">ildar</who>
    <bug_when>2008-01-10 09:47:26 +0300</bug_when>
    <thetext>(In reply to comment #24)
&gt; Что насчёт моего предложения _просто_ убрать зависимость на glib2 из mono.pc?
&gt; И для мифических пакетов, которым это понадобиться, сделать libmono.pc в 
&gt; mono-devel?

Я склоняюсь к здравому предложению Виталия и разделить libmono.pc и mono.pc . То
немногое, что нужно запатчить, не должно долго сопротивляться.

Тем не менее, как человеку, наиболее полно осознающему проблему, рекомендую
Алексею не спешить с решением.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60816</commentid>
    <comment_count>30</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-01-10 10:45:09 +0300</bug_when>
    <thetext>Мне всё больше кажется, что это такая ошибка апстрима, которую надо просто 
исправить, и самое ясное, когда по mono.pc ищется mono executable,
а по libmono.pc - то, что необходимо для сборки с libmono.so
Собственно, бага в апстриме-то висит? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60821</commentid>
    <comment_count>31</comment_count>
    <who name="ildar">ildar</who>
    <bug_when>2008-01-10 11:08:51 +0300</bug_when>
    <thetext>(In reply to comment #30)
&gt; Мне всё больше кажется, что это такая ошибка апстрима, которую надо просто 
&gt; исправить, и самое ясное, когда по mono.pc ищется mono executable,
&gt; а по libmono.pc - то, что необходимо для сборки с libmono.so
&gt; Собственно, бага в апстриме-то висит? 

Полагаю, мы её ещё недостаточно осознали, чтобы повесить.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60883</commentid>
    <comment_count>32</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2008-01-11 08:50:50 +0300</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #19)

Тут вынесен на обсуждение вопрос, ответ на который не является однозначным. И
вот почему.
1) Если исходить из варианта, когда вы рассматриваете строки вида:
MONO_REQUIRED_VERSION=1.0
PKG_CHECK_MODULES(MONO_DEPENDENCY, mono &gt;= $MONO_REQUIRED_VERSION,
has_mono=true, has_mono=false)
как проверку &quot;на базовый mono рантайм, _которого_ _достаточно_, _чтобы_
_собирать_ _mono-программы_. (При наличии соответствующего компилятора)&quot; и
распространяете эту проверку на все без исключения формы проверки наличия Mono
Runtime в системе. В этом случае вы дейсвительно правы.
2) Исходя же из варианта, что вышенаписанные строки из configure.in - это
простая форма проверки наличия Mono Runtime разработчиками, которые полагают что
mono.pc должен располагаться в пакете mono и только. Больше никто mono.pc для
проверки наличия Mono Runtime не использует. К сожалению, так сложилось, что
разработчики Mono не позаботились (хотя я в этом ещё не уверен) о средствах
обнаружения рантайма. Как впрочем не заботятся о средствах обнаружения gcc
разработчики gcc. И этому есть объяснения по крайней мере такое, что Mono - это
кроссплатформенный Framework. В Windows же он устанавливается по всем канонам
этой системые - всю кучу в один каталог, когда наличие и отсутствие mono.pc, как
впрочем как и любого другого файла из Mono, является критерием наличия рантайма
в системе и того самого отпиленного mcs. Исходя из этого варианта я представляю
себе сложившуюся картину несколько иначе. Выглядит она так: разработчики Mono
приложений, ипользующие Autotools, включая основные связки, придумали костыли,
которые им многие успешно подсовывают. В нашем же случае отделение мух от котлет
приводит к тому, что проблемы этих разработчиков начинают всплывать. В попытках
найти решение в текущих рамках, мы создаём свои костыли, которые ничего, кроме
сложностей сборки, пока не доставляют.
 
По поводу утилит разработчика, которые стоит вынести в mono-develtools, хочу
добавить, что это чревато проблемами позже, а может быть и сразу. В ряде случае,
элементы из набора утилит mono-devel могут потребоваться. И, при текущем подходе
разработчики будут по праву ожидать их наличия. Не вижу смысла препятствовать
им, если конечно не взяться за эту проблему в рамках развития самого Mono и его
базового окружения.

&gt; &gt; В качестве решения я предлагаю вернуть содержимое libmono-devel обратно в
&gt; &gt; mono-devel. На чём, как я сейчас понимаю, все проблемы решаться сами собой.
&gt; 
&gt; 1. не решатся

Почему? Я не про все проблемы, а про те, которые приводят к зависимости mono от
не нужных пакетов и ломают текущую сборку, когда mono.pc вынесен в libmono-devel.

&gt; 2. как я писал выше, в общем случае libmono* - вещи совершенно посторонние.

Для задачи сборки и линковки приложений с libmono без необходимости установки
всего фраймфорка, пакет libmono-devel можно оставить, а mono.pc держать
одновременно и в mono-devel, и в libmono-devel.

&gt; &gt; (In reply to comment #22)
&gt; &gt; &gt; В моем последнем рассуждении есть фактическая неточность.  Если преместить
&gt; &gt; &gt; mono.pc в mono-devel, то сломается несколько меньше (когда всё сломалось,
&gt; &gt; &gt; mono.pc был перемещён в новый пакет libmono-devel).
&gt; &gt; 
&gt; &gt; Хотелось понять, что действительно сломается. Я так понимаю, что этим &quot;что&quot;,
&gt; &gt; будут те, кто ожидает увидеть заголовочные файлы от Mono Runtime. И связи с этим
&gt; &gt; снова предлагаю вернуть содержимое libmono-devel обратно в mono-devel. На всякий
&gt; &gt; случай можно поставить в mono-devel Provides на libmono-devel.
&gt; 
&gt; Сломается buildreq %name.spec

А сейчас он работает? Тогда, полагаю он не сломается, если переместить mono.pc
из самого mono в mono-devel? Этот костыль для сборки mono-пакетов пока ещё никто
не отменял.

&gt; &gt; Я думаю, что не стоит разрывать сущность не объекты, которые создают такие
&gt; &gt; сложные семантические ограничения, которые средствами rpm и build-req на текущий
&gt; &gt; момент не разрешимы. Тем более, что при этом пропадают расхождения между
&gt; &gt; семантическими и топологическими ограничениями.
&gt; 
&gt; СтОит отделять мухи от котлет. Даже если последние чем-то напоминают первые.


(In reply to comment #29)
&gt; (In reply to comment #24)
&gt; &gt; Что насчёт моего предложения _просто_ убрать зависимость на glib2 из mono.pc?
&gt; &gt; И для мифических пакетов, которым это понадобиться, сделать libmono.pc в 
&gt; &gt; mono-devel?
&gt; 
&gt; Я склоняюсь к здравому предложению Виталия и разделить libmono.pc и mono.pc . То
&gt; немногое, что нужно запатчить, не должно долго сопротивляться.
&gt; 
&gt; Тем не менее, как человеку, наиболее полно осознающему проблему, рекомендую
&gt; Алексею не спешить с решением.

Проблема таким решением, строго говоря, будет может быть даже ухудшена, а не
решена. Исправлять каждый пакет, испольующий Mono Runtime, при таком решении
может превратить сборку в исследование на тему а что же хотели разработчики из
деталей от Mono. Это решение будет работать только если mono.pc будет
предоставлять всё тоже, что и раньше, но без зависимостей от glib-devel. Для
рядовых же пользователей ситуация будет осложнена. И вот чем:
1) пакеты из консоли престанут собираться;
2) как в большинстве дистрибутивов установка mono-devel может не помочь, а о
том, что нужно доставить libmono-devel, нужно или догадаться, и полазить по вики
и рассылкам.

(In reply to comment #30)
&gt; Мне всё больше кажется, что это такая ошибка апстрима, которую надо просто 
&gt; исправить, и самое ясное, когда по mono.pc ищется mono executable,
&gt; а по libmono.pc - то, что необходимо для сборки с libmono.so
&gt; Собственно, бага в апстриме-то висит? :)

Насколько я понял основную проблему, которую решают текущие решения - перенос
библиотеки libmono в отдельный пакет. К сожалению, в этом случае действительно
возникают проблемы. Проблемы эти связаны с тем, что такое отделение, в силу
кросплатформенности решения, приводит к сложностям, которые на текущем этапе
развития самого Mono не приоритетны. Им бы Winforms дописать... </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94000</commentid>
    <comment_count>33</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2009-07-01 08:48:49 +0400</bug_when>
    <thetext>mono-2.4.2-alt1 -&gt; sisyphus:

* Tue Jun 30 2009 Alexey Shabalin &lt;shaba@altlinux&gt; 2.4.2-alt1

- 2.4.2
- move all pkg-config files (*.pc) to devel packages (ALT#13863)</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>