* [devel] pkg-config Requires.private - полчища саранчи и враги народа
@ 2011-02-27 14:38 Alexey Tourbin
2011-02-27 16:45 ` Damir Shayhutdinov
2011-03-02 5:50 ` Yuri N. Sedunov
0 siblings, 2 replies; 21+ messages in thread
From: Alexey Tourbin @ 2011-02-27 14:38 UTC (permalink / raw)
To: devel
Некоторые пакеты из freedesktop.org испортили враги народа -
они переместили pkgconfig зависимости из Requires в Requires.private.
По их логике, если программа не линкуется напрямую с дополнительными
библиотеками, то в Requires их указывать не надо. Но в то же время
при компиляции могут включаться хедеры дополнительных библиотек.
Так что сборка пакетов стала ломаться из-за отсутствия нужных хедеров,
и в rpm 4.0.4-alt100.2 пришлось приравнять Requires.private к Requires.
В результате многие пакеты обросли лишними pkgconfig зависимостями на
*-devel пакеты.
Новый план выхода из кризиса (реализован в 4.0.4-alt100.22):
1) Оставлять в зависимостях только Requires, а Requires.private убрать.
2) Продувать хедеры через /usr/bin/cpp и смотреть, какие ещё хедеры
включаются, чтобы появились дополнительные зависимости на *-devel
пакеты с хедерами. Скрипт cpp.req был написан почти три года назад,
но в нём не было необходимости, т.к. pkgconfig.req давал неплохой
результат. Никогда не знаешь, чего придётся доставать из штанин.
Вот примеры того, как изменятся зависимости.
$ compare_packages -i -a -R libXft-devel-2.2.0-alt3.x86_64.rpm
--- /tmp/.private/at/compare_packages.GHMfrhdqbY/1 2011-02-27 17:20:58.018880241 +0300
+++ /tmp/.private/at/compare_packages.GHMfrhdqbY/2 2011-02-27 17:20:58.006881010 +0300
@@ -1,7 +1,8 @@
/usr/lib64/pkgconfig
+fontconfig-devel
libXft = 2.2.0-alt3
-pkgconfig(fontconfig)
-pkgconfig(freetype2)
+libXrender-devel
+libfreetype-devel
pkgconfig(xproto)
-pkgconfig(xrender)
rpmlib(PayloadIsLzma)
+xorg-xproto-devel
$
Здесь зависимости, по сути, не изменились: убрались pkgconfig зависимости
из Requires.private, но добавились сходные зависимости, полученные через
cpp.req. Мы просто отыграли то, что испортили враги народа.
$ compare_packages -i -a -R libcairo-devel-1.10.2-alt2.x86_64.rpm
--- /tmp/.private/at/compare_packages.yWch2sMnSM/1 2011-02-27 17:24:39.507763649 +0300
+++ /tmp/.private/at/compare_packages.yWch2sMnSM/2 2011-02-27 17:24:39.491765038 +0300
@@ -1,14 +1,16 @@
/usr/lib64/pkgconfig
+fontconfig-devel
libGL-devel
+libX11-devel
+libXrender-devel
libcairo = 1:1.10.2-alt2
+libfreetype-devel
+libxcb-devel
pkgconfig(fontconfig) >= 2.2.95
pkgconfig(freetype2) >= 9.7.3
pkgconfig(gl)
-pkgconfig(glib-2.0)
-pkgconfig(gobject-2.0)
pkgconfig(libpng)
pkgconfig(libudev) >= 136
-pkgconfig(pixman-1) >= 0.18.4
pkgconfig(x11)
pkgconfig(xcb) >= 1.1.92
pkgconfig(xcb-render) >= 0.9.92
$
Тут более интересная картина. Зависимость на pkgconfig(pixman-1)
удалилась, а сходной зависимости на libpixman-devel не появилось - т.е.
pixman указан только в Requires.private, а в хедерах нигде не включается.
Т.е. pixman является настоящей private зависимостью, которой и не должно
быть в libcairo-devel. Обращает на себя зависимость pkgconfig(libpng) -
сходной зависимости на libpng-devel не появилось. Это, скорее всего,
означает, что pkgconfig зависимость ошибочно указана в Requires, тогда как
должна быть указана в Requires.private.
В связи с этими изменениями я пересоберу некоторые пакеты.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] pkg-config Requires.private - полчища саранчи и враги народа
2011-02-27 14:38 [devel] pkg-config Requires.private - полчища саранчи и враги народа Alexey Tourbin
@ 2011-02-27 16:45 ` Damir Shayhutdinov
2011-02-27 17:01 ` Dmitry V. Levin
2011-02-27 17:17 ` [devel] pkg-config Requires.private - полчища саранчи и враги народа Alexey Tourbin
2011-03-02 5:50 ` Yuri N. Sedunov
1 sibling, 2 replies; 21+ messages in thread
From: Damir Shayhutdinov @ 2011-02-27 16:45 UTC (permalink / raw)
To: ALT Linux Team development discussions
> Новый план выхода из кризиса (реализован в 4.0.4-alt100.22):
> 1) Оставлять в зависимостях только Requires, а Requires.private убрать.
> 2) Продувать хедеры через /usr/bin/cpp и смотреть, какие ещё хедеры
> включаются, чтобы появились дополнительные зависимости на *-devel
> пакеты с хедерами. Скрипт cpp.req был написан почти три года назад,
> но в нём не было необходимости, т.к. pkgconfig.req давал неплохой
> результат. Никогда не знаешь, чего придётся доставать из штанин.
Дядя Лёша, вопрос из зала - а как же быть с условными зависимостями?
#ifdef USE_FOO_H
#include <foo.h>
#endif
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] pkg-config Requires.private - полчища саранчи и враги народа
2011-02-27 16:45 ` Damir Shayhutdinov
@ 2011-02-27 17:01 ` Dmitry V. Levin
2011-02-28 9:35 ` Damir Shayhutdinov
2011-02-27 17:17 ` [devel] pkg-config Requires.private - полчища саранчи и враги народа Alexey Tourbin
1 sibling, 1 reply; 21+ messages in thread
From: Dmitry V. Levin @ 2011-02-27 17:01 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 1040 bytes --]
On Sun, Feb 27, 2011 at 07:45:50PM +0300, Damir Shayhutdinov wrote:
> > Новый план выхода из кризиса (реализован в 4.0.4-alt100.22):
> > 1) Оставлять в зависимостях только Requires, а Requires.private убрать.
> > 2) Продувать хедеры через /usr/bin/cpp и смотреть, какие ещё хедеры
> > включаются, чтобы появились дополнительные зависимости на *-devel
> > пакеты с хедерами. Скрипт cpp.req был написан почти три года назад,
> > но в нём не было необходимости, т.к. pkgconfig.req давал неплохой
> > результат. Никогда не знаешь, чего придётся доставать из штанин.
>
> Дядя Лёша, вопрос из зала - а как же быть с условными зависимостями?
>
> #ifdef USE_FOO_H
>
> #include <foo.h>
>
> #endif
Просьба уточнить, каким образом включается -DUSE_FOO_H.
Если автоматически, например, из другого заголовка в этом пакете,
или из pkg-config --cflags согласно .pc-файлу в этом пакете, то и
зависимость, с высокой вероятностью, подцепится автоматически.
А если вручную, то и зависимость можно прописать вручную.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] pkg-config Requires.private - полчища саранчи и враги народа
2011-02-27 16:45 ` Damir Shayhutdinov
2011-02-27 17:01 ` Dmitry V. Levin
@ 2011-02-27 17:17 ` Alexey Tourbin
2011-03-02 23:29 ` Alexey Tourbin
1 sibling, 1 reply; 21+ messages in thread
From: Alexey Tourbin @ 2011-02-27 17:17 UTC (permalink / raw)
To: ALT Linux Team development discussions
On Sun, Feb 27, 2011 at 07:45:50PM +0300, Damir Shayhutdinov wrote:
> > Новый план выхода из кризиса (реализован в 4.0.4-alt100.22):
> > 1) Оставлять в зависимостях только Requires, а Requires.private убрать.
> > 2) Продувать хедеры через /usr/bin/cpp и смотреть, какие ещё хедеры
> > включаются, чтобы появились дополнительные зависимости на *-devel
> > пакеты с хедерами. Скрипт cpp.req был написан почти три года назад,
> > но в нём не было необходимости, т.к. pkgconfig.req давал неплохой
> > результат. Никогда не знаешь, чего придётся доставать из штанин.
>
> Дядя Лёша, вопрос из зала - а как же быть с условными зависимостями?
Учитываются только те файлы, которые реально включаются.
Именно поэтому используется реальный /usr/bin/cpp.
Идея реализации примерно такая:
$ cpp `pkg-config --cflags xft` /usr/include/X11/Xft/Xft.h |grep ^# |head
# 1 "/usr/include/X11/Xft/Xft.h"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/X11/Xft/Xft.h"
# 38 "/usr/include/X11/Xft/Xft.h"
# 1 "/usr/lib64/gcc/x86_64-alt-linux/4.5.1/include/stdarg.h" 1 3 4
# 40 "/usr/lib64/gcc/x86_64-alt-linux/4.5.1/include/stdarg.h" 3 4
# 102 "/usr/lib64/gcc/x86_64-alt-linux/4.5.1/include/stdarg.h" 3 4
# 39 "/usr/include/X11/Xft/Xft.h" 2
# 1 "/usr/include/ft2build.h" 1 3 4
Здесь показан стек включаемых файлов (см. info cpp "Preprocessor Output").
Соответственно, нам надо взять взять файлы на первом фрейме стека - это
и будут реально включаемые файлы.
> #ifdef USE_FOO_H
>
> #include <foo.h>
>
> #endif
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] pkg-config Requires.private - полчища саранчи и враги народа
2011-02-27 17:01 ` Dmitry V. Levin
@ 2011-02-28 9:35 ` Damir Shayhutdinov
2011-02-28 12:30 ` Dmitry V. Levin
0 siblings, 1 reply; 21+ messages in thread
From: Damir Shayhutdinov @ 2011-02-28 9:35 UTC (permalink / raw)
To: ALT Linux Team development discussions
>> Дядя Лёша, вопрос из зала - а как же быть с условными зависимостями?
>>
>> #ifdef USE_FOO_H
>>
>> #include <foo.h>
>>
>> #endif
>
> Просьба уточнить, каким образом включается -DUSE_FOO_H.
> Если автоматически, например, из другого заголовка в этом пакете,
> или из pkg-config --cflags согласно .pc-файлу в этом пакете, то и
> зависимость, с высокой вероятностью, подцепится автоматически.
> А если вручную, то и зависимость можно прописать вручную.
Ага, вот про использование pkg-config --cflags в исходном письме было
не понятно. А вообще это изменение применимо только к пакетам,
заточенным под pkgconfig?
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] pkg-config Requires.private - полчища саранчи и враги народа
2011-02-28 9:35 ` Damir Shayhutdinov
@ 2011-02-28 12:30 ` Dmitry V. Levin
2011-03-08 16:47 ` [devel] cpp.req Dmitry V. Levin
0 siblings, 1 reply; 21+ messages in thread
From: Dmitry V. Levin @ 2011-02-28 12:30 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 923 bytes --]
On Mon, Feb 28, 2011 at 12:35:56PM +0300, Damir Shayhutdinov wrote:
> >> Дядя Лёша, вопрос из зала - а как же быть с условными зависимостями?
> >>
> >> #ifdef USE_FOO_H
> >>
> >> #include <foo.h>
> >>
> >> #endif
> >
> > Просьба уточнить, каким образом включается -DUSE_FOO_H.
> > Если автоматически, например, из другого заголовка в этом пакете,
> > или из pkg-config --cflags согласно .pc-файлу в этом пакете, то и
> > зависимость, с высокой вероятностью, подцепится автоматически.
> > А если вручную, то и зависимость можно прописать вручную.
>
> Ага, вот про использование pkg-config --cflags в исходном письме было
> не понятно. А вообще это изменение применимо только к пакетам,
> заточенным под pkgconfig?
Нет, отчего же. К сожалению, если у библиотеки CFLAGS формируются с
помощью %_bindir/*-config, то они в cpp.req не подхватятся. Правда, таких
библиотек осталось немного.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] pkg-config Requires.private - полчища саранчи и враги народа
2011-02-27 14:38 [devel] pkg-config Requires.private - полчища саранчи и враги народа Alexey Tourbin
2011-02-27 16:45 ` Damir Shayhutdinov
@ 2011-03-02 5:50 ` Yuri N. Sedunov
2011-03-02 9:10 ` Dmitry V. Levin
2011-03-02 13:43 ` Alexey Tourbin
1 sibling, 2 replies; 21+ messages in thread
From: Yuri N. Sedunov @ 2011-03-02 5:50 UTC (permalink / raw)
To: devel; +Cc: Alexey M. Tourbin
В Вск, 27/02/2011 в 17:38 +0300, Alexey Tourbin пишет:
> Новый план выхода из кризиса (реализован в 4.0.4-alt100.22):
> 1) Оставлять в зависимостях только Requires, а Requires.private убрать.
> 2) Продувать хедеры через /usr/bin/cpp и смотреть, какие ещё хедеры
Надуло:
$ rpmq -R libgtk3vnc-devel
libgtk3vnc = 0.4.3-alt2
libgvnc-devel = 0.4.3-alt2
/usr/include/gtk-vnc-1.0/vncgrabsequence.h
libgtk+2-devel
pkgconfig(gtk+-3.0) >= 3.0.0
--
Yuri N. Sedunov
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] pkg-config Requires.private - полчища саранчи и враги народа
2011-03-02 5:50 ` Yuri N. Sedunov
@ 2011-03-02 9:10 ` Dmitry V. Levin
2011-03-02 14:02 ` Alexey Tourbin
2011-03-02 13:43 ` Alexey Tourbin
1 sibling, 1 reply; 21+ messages in thread
From: Dmitry V. Levin @ 2011-03-02 9:10 UTC (permalink / raw)
To: ALT Devel discussion list; +Cc: Alexey M. Tourbin
[-- Attachment #1: Type: text/plain, Size: 552 bytes --]
On Wed, Mar 02, 2011 at 08:50:34AM +0300, Yuri N. Sedunov wrote:
> В Вск, 27/02/2011 в 17:38 +0300, Alexey Tourbin пишет:
> > Новый план выхода из кризиса (реализован в 4.0.4-alt100.22):
> > 1) Оставлять в зависимостях только Requires, а Requires.private убрать.
> > 2) Продувать хедеры через /usr/bin/cpp и смотреть, какие ещё хедеры
>
> Надуло:
> $ rpmq -R libgtk3vnc-devel
> libgtk3vnc = 0.4.3-alt2
> libgvnc-devel = 0.4.3-alt2
> /usr/include/gtk-vnc-1.0/vncgrabsequence.h
А почему этот .h не соптимизировался совсем?
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] pkg-config Requires.private - полчища саранчи и враги народа
2011-03-02 5:50 ` Yuri N. Sedunov
2011-03-02 9:10 ` Dmitry V. Levin
@ 2011-03-02 13:43 ` Alexey Tourbin
2011-03-02 13:50 ` Yuri N. Sedunov
1 sibling, 1 reply; 21+ messages in thread
From: Alexey Tourbin @ 2011-03-02 13:43 UTC (permalink / raw)
To: devel
On Wed, Mar 02, 2011 at 08:50:34AM +0300, Yuri N. Sedunov wrote:
> В Вск, 27/02/2011 в 17:38 +0300, Alexey Tourbin пишет:
> > Новый план выхода из кризиса (реализован в 4.0.4-alt100.22):
> > 1) Оставлять в зависимостях только Requires, а Requires.private убрать.
> > 2) Продувать хедеры через /usr/bin/cpp и смотреть, какие ещё хедеры
>
> Надуло:
> $ rpmq -R libgtk3vnc-devel
> libgtk3vnc = 0.4.3-alt2
> libgvnc-devel = 0.4.3-alt2
> /usr/include/gtk-vnc-1.0/vncgrabsequence.h
> libgtk+2-devel
> pkgconfig(gtk+-3.0) >= 3.0.0
Появилась неправильная зависимость на libgtk+2-devel?
Тут непросто автоматически выбрать между libgtk+2-devel и libgtk+3-devel.
Для получения cflags выполняется pkg-config %buildroot%_pkgconfigdir/*.pc,
шелл сортирует глоб, и по-видимому в cflags сначала идут флаги для gtk2,
а потом уже для gtk3. Этот случай можно исправить, если сначала
обрабатывать запакованные .pc, а потом уже все остальные .pc в билруде
по глобу (чтобы сначала шли "запакованные" cflags). Попробую сделать.
Заметил ещё что зависимость на libgtk+3-devel появится в
libavahi-ui-common-devel, не знаю правильно это или нет.
http://git.altlinux.org/beehive/logs/Sisyphus-x86_64/latest/success/avahi-0.6.28-alt6
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] pkg-config Requires.private - полчища саранчи и враги народа
2011-03-02 13:43 ` Alexey Tourbin
@ 2011-03-02 13:50 ` Yuri N. Sedunov
0 siblings, 0 replies; 21+ messages in thread
From: Yuri N. Sedunov @ 2011-03-02 13:50 UTC (permalink / raw)
To: devel
В Срд, 02/03/2011 в 16:43 +0300, Alexey Tourbin пишет:
> On Wed, Mar 02, 2011 at 08:50:34AM +0300, Yuri N. Sedunov wrote:
> > В Вск, 27/02/2011 в 17:38 +0300, Alexey Tourbin пишет:
> > > Новый план выхода из кризиса (реализован в 4.0.4-alt100.22):
> > > 1) Оставлять в зависимостях только Requires, а Requires.private убрать.
> > > 2) Продувать хедеры через /usr/bin/cpp и смотреть, какие ещё хедеры
> >
> > Надуло:
> > $ rpmq -R libgtk3vnc-devel
> > libgtk3vnc = 0.4.3-alt2
> > libgvnc-devel = 0.4.3-alt2
> > /usr/include/gtk-vnc-1.0/vncgrabsequence.h
> > libgtk+2-devel
> > pkgconfig(gtk+-3.0) >= 3.0.0
>
> Появилась неправильная зависимость на libgtk+2-devel?
Да.
> Тут непросто автоматически выбрать между libgtk+2-devel и libgtk+3-devel.
> Для получения cflags выполняется pkg-config %buildroot%_pkgconfigdir/*.pc,
> шелл сортирует глоб, и по-видимому в cflags сначала идут флаги для gtk2,
> а потом уже для gtk3. Этот случай можно исправить, если сначала
> обрабатывать запакованные .pc, а потом уже все остальные .pc в билруде
> по глобу (чтобы сначала шли "запакованные" cflags). Попробую сделать.
>
> Заметил ещё что зависимость на libgtk+3-devel появится в
> libavahi-ui-common-devel, не знаю правильно это или нет.
Нет, не правильно.
--
Yuri N. Sedunov
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] pkg-config Requires.private - полчища саранчи и враги народа
2011-03-02 9:10 ` Dmitry V. Levin
@ 2011-03-02 14:02 ` Alexey Tourbin
0 siblings, 0 replies; 21+ messages in thread
From: Alexey Tourbin @ 2011-03-02 14:02 UTC (permalink / raw)
To: ALT Devel discussion list
On Wed, Mar 02, 2011 at 12:10:58PM +0300, Dmitry V. Levin wrote:
> On Wed, Mar 02, 2011 at 08:50:34AM +0300, Yuri N. Sedunov wrote:
> > В Вск, 27/02/2011 в 17:38 +0300, Alexey Tourbin пишет:
> > > Новый план выхода из кризиса (реализован в 4.0.4-alt100.22):
> > > 1) Оставлять в зависимостях только Requires, а Requires.private убрать.
> > > 2) Продувать хедеры через /usr/bin/cpp и смотреть, какие ещё хедеры
> >
> > Надуло:
> > $ rpmq -R libgtk3vnc-devel
> > libgtk3vnc = 0.4.3-alt2
> > libgvnc-devel = 0.4.3-alt2
> > /usr/include/gtk-vnc-1.0/vncgrabsequence.h
>
> А почему этот .h не соптимизировался совсем?
При сборке rpm говорит:
warning: libgtk3vnc-devel: non-strict dependency on libgtkvnc-devel
Этот хедер и даёт non-strict dependency on libgtkvnc-devel,
которая не может быть соптимизирована.
Видимо, это продолжение обсуждаемой ошибки: при более правильных
cflags должен был подцепиться хедер
/usr/include/gtk-vnc-2.0/vncgrabsequence.h
который запакован в самом пакете.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] pkg-config Requires.private - полчища саранчи и враги народа
2011-02-27 17:17 ` [devel] pkg-config Requires.private - полчища саранчи и враги народа Alexey Tourbin
@ 2011-03-02 23:29 ` Alexey Tourbin
2011-03-02 23:49 ` Dmitry V. Levin
0 siblings, 1 reply; 21+ messages in thread
From: Alexey Tourbin @ 2011-03-02 23:29 UTC (permalink / raw)
To: ALT Linux Team development discussions
On Sun, Feb 27, 2011 at 08:17:27PM +0300, Alexey Tourbin wrote:
> $ cpp `pkg-config --cflags xft` /usr/include/X11/Xft/Xft.h |grep ^# |head
> # 1 "/usr/include/X11/Xft/Xft.h"
> # 1 "<built-in>"
> # 1 "<command-line>"
> # 1 "/usr/include/X11/Xft/Xft.h"
> # 38 "/usr/include/X11/Xft/Xft.h"
> # 1 "/usr/lib64/gcc/x86_64-alt-linux/4.5.1/include/stdarg.h" 1 3 4
> # 40 "/usr/lib64/gcc/x86_64-alt-linux/4.5.1/include/stdarg.h" 3 4
> # 102 "/usr/lib64/gcc/x86_64-alt-linux/4.5.1/include/stdarg.h" 3 4
> # 39 "/usr/include/X11/Xft/Xft.h" 2
> # 1 "/usr/include/ft2build.h" 1 3 4
>
> Здесь показан стек включаемых файлов (см. info cpp "Preprocessor Output").
> Соответственно, нам надо взять взять файлы на первом фрейме стека - это
> и будут реально включаемые файлы.
Обнаружил интересную особенность: если файл уже включен, то он может
не появиться на первом фрейме стека (в выводе cpp). Напр.
/usr/lib64/R/library/Matrix/include/Matrix.h
3 #include <Rdefines.h>
4 #include <Rconfig.h>
5 #include "cholmod.h"
cpp.req обнаружит только зависимость на Rdefines.h, т.к. Rdefines.h
в свою очередь включает Rconfig.h. При повторном включении Rconfig.h
даёт пустой вывод, и препроцессор его не аннотирует.
Что в принципе не очень хорошо. Но я не знаю другого способа вклиниться
в cpp, и судя по cpp(1) такого способа скорее всего просто нет. Проверил
cpp -H, он обладает таким же дефектом.
$ cpp -I/usr/include/R -H /usr/lib64/R/library/Matrix/include/Matrix.h 2>&1 >/dev/null |grep /R/
. /usr/include/R/Rdefines.h
.. /usr/include/R/R_ext/Memory.h
.. /usr/include/R/R_ext/RS.h
... /usr/include/R/Rconfig.h
... /usr/include/R/R_ext/Error.h
.. /usr/include/R/Rinternals.h
... /usr/include/R/R_ext/Arith.h
.... /usr/include/R/R_ext/libextern.h
... /usr/include/R/R_ext/Boolean.h
... /usr/include/R/R_ext/Complex.h
... /usr/include/R/R_ext/PrtUtil.h
.... /usr/include/R/R_ext/Print.h
... /usr/include/R/R_ext/Utils.h
... /usr/include/R/R_ext/libextern.h
. /usr/lib64/R/library/Matrix/include/cholmod.h
$
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] pkg-config Requires.private - полчища саранчи и враги народа
2011-03-02 23:29 ` Alexey Tourbin
@ 2011-03-02 23:49 ` Dmitry V. Levin
0 siblings, 0 replies; 21+ messages in thread
From: Dmitry V. Levin @ 2011-03-02 23:49 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 1162 bytes --]
On Thu, Mar 03, 2011 at 02:29:38AM +0300, Alexey Tourbin wrote:
[...]
> Обнаружил интересную особенность: если файл уже включен, то он может
> не появиться на первом фрейме стека (в выводе cpp). Напр.
>
> /usr/lib64/R/library/Matrix/include/Matrix.h
> 3 #include <Rdefines.h>
> 4 #include <Rconfig.h>
> 5 #include "cholmod.h"
>
> cpp.req обнаружит только зависимость на Rdefines.h, т.к. Rdefines.h
> в свою очередь включает Rconfig.h. При повторном включении Rconfig.h
> даёт пустой вывод, и препроцессор его не аннотирует.
>
> Что в принципе не очень хорошо. Но я не знаю другого способа вклиниться
> в cpp, и судя по cpp(1) такого способа скорее всего просто нет. Проверил
> cpp -H, он обладает таким же дефектом.
>
> $ cpp -I/usr/include/R -H /usr/lib64/R/library/Matrix/include/Matrix.h 2>&1 >/dev/null |grep /R/
> . /usr/include/R/Rdefines.h
> .. /usr/include/R/R_ext/Memory.h
> .. /usr/include/R/R_ext/RS.h
> ... /usr/include/R/Rconfig.h
Можно сделать вывод, что ограничиваться первым фреймом недостаточно.
Видимо, надежнее будет останавливаться на первых файлах за пределами
%buildroot.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] cpp.req
2011-02-28 12:30 ` Dmitry V. Levin
@ 2011-03-08 16:47 ` Dmitry V. Levin
2011-03-08 22:57 ` Alexey Tourbin
2011-03-09 11:42 ` Sergey V Turchin
0 siblings, 2 replies; 21+ messages in thread
From: Dmitry V. Levin @ 2011-03-08 16:47 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 1101 bytes --]
On Mon, Feb 28, 2011 at 03:30:59PM +0300, Dmitry V. Levin wrote:
> Нет, отчего же. К сожалению, если у библиотеки CFLAGS формируются с
> помощью %_bindir/*-config, то они в cpp.req не подхватятся. Правда, таких
> библиотек осталось немного.
Вот реальный пример: правильный gpgme.pc отсутствует, и cpp.req не справляется:
http://git.altlinux.org/tasks/39999/build/100/i586/log
/usr/src/tmp/gpgme-buildroot/usr/include/gpgme.h:89:2: error: #error GPGME was compiled with _FILE_OFFSET_BITS = 64, please see the section "Largefile support (LFS)" in the GPGME manual.
cpp.req: /usr/src/tmp/gpgme-buildroot/usr/include/gpgme.h: cpp failed, trying c++ mode
/usr/src/tmp/gpgme-buildroot/usr/include/gpgme.h:89:2: error: #error GPGME was compiled with _FILE_OFFSET_BITS = 64, please see the section "Largefile support (LFS)" in the GPGME manual.
cpp.req: WARNING: /usr/src/tmp/gpgme-buildroot/usr/include/gpgme.h: cpp failed
Впрочем, gpgme-config --cflags тоже не помог бы.
P.S. Зависимости у libgpgme-devel-1.3.0-alt5.i586.rpm и все равно
получились одинаковые. Повезло.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] cpp.req
2011-03-08 16:47 ` [devel] cpp.req Dmitry V. Levin
@ 2011-03-08 22:57 ` Alexey Tourbin
2011-03-09 11:42 ` Sergey V Turchin
1 sibling, 0 replies; 21+ messages in thread
From: Alexey Tourbin @ 2011-03-08 22:57 UTC (permalink / raw)
To: ALT Devel discussion list
On Tue, Mar 08, 2011 at 07:47:43PM +0300, Dmitry V. Levin wrote:
> On Mon, Feb 28, 2011 at 03:30:59PM +0300, Dmitry V. Levin wrote:
> > Нет, отчего же. К сожалению, если у библиотеки CFLAGS формируются с
> > помощью %_bindir/*-config, то они в cpp.req не подхватятся. Правда, таких
> > библиотек осталось немного.
>
> Вот реальный пример: правильный gpgme.pc отсутствует, и cpp.req не справляется:
> http://git.altlinux.org/tasks/39999/build/100/i586/log
>
> /usr/src/tmp/gpgme-buildroot/usr/include/gpgme.h:89:2: error: #error GPGME was compiled with _FILE_OFFSET_BITS = 64, please see the section "Largefile support (LFS)" in the GPGME manual.
> cpp.req: /usr/src/tmp/gpgme-buildroot/usr/include/gpgme.h: cpp failed, trying c++ mode
> /usr/src/tmp/gpgme-buildroot/usr/include/gpgme.h:89:2: error: #error GPGME was compiled with _FILE_OFFSET_BITS = 64, please see the section "Largefile support (LFS)" in the GPGME manual.
> cpp.req: WARNING: /usr/src/tmp/gpgme-buildroot/usr/include/gpgme.h: cpp failed
>
> Впрочем, gpgme-config --cflags тоже не помог бы.
>
> P.S. Зависимости у libgpgme-devel-1.3.0-alt5.i586.rpm и все равно
> получились одинаковые. Повезло.
Зависимости получились одинаковые, потому что в пакете libgpgme-devel
вручную уже добавлена зависимость на libgpg-error-devel. Если бы cpp.req
отрабтал правильно, то зависимость можно было бы не добавлять/ удалить уже
добавленную зависимость.
Есть пакеты, в которых неправильно указаны такого рода *-devel
зависимости. Например, в пакете libqt4-devel есть зависимость на xorg-devel,
тогда как cpp.req генерирует "нормальную" зависимость только на libGL-devel,
да и то это требуется только для поддержки OpenGL. То есть зависимость на
xorg-devel ничем не обоснована, кроме фантазии мейнтейнера.
Я исправил некоторые пакеты с такими зависимостями, но не все. Во-первых,
не все мейнтейнеры довольны, когда я пересобираю их пакеты, и не хотелось
бы создавать лишних конфликтов по такой простой причине. Во-вторых,
воротилы от бизнеса форсируют создание нового "стабильного" бранча для
Национальной ОС. Если убрать в libqt4-devel зависимость на xorg-devel,
то сборка каких-то пакетов может сломаться из-за недостаточных зависимостей,
что вызовет неудовольствие воротил от бизнеса, и они не подпустят к распилу
государственных средств. Что конечно тоже нежелательно, тем более по
такой простой причине. Получается, лучше всего самоустраниться из этого
процесса.-(
Случай с gpgme.h показывает, что не только cpp.req не справляется
(например, по причине отсуствия нужных флагов -I/dir, как в некоторых
других случаях), но и сам этот хедер не поддается включению в дефолтной
конфигурации. Можно было бы попытаться каким-нибудь хитрым способом
заменить #error на #warning. С другой стороны, существуют "частные"
конфугации, не предназначенные для включения (например, файлы с winsock2.h
исправлять не нужно, т.к. они предназначены для ненациональной ОС).
Так что я думаю, что логику cpp.req нужно оставить прежней - анализировать
завсимости только тех хедеров, которые удается "полностью" включить.
С *-config файлами есть принципиальная проблема, которая препятствует их
использованию в cpp.req: они предполагают, что всё ихнее добро уже
установлено в хост-систему. Я помню (ещё три года назад это было),
что в пакете wxGTK выполнялись какие-то файлтесты для libs, типа
[ -f ${libdir}/... ]. Всё это не слишком тривиально адаптируется
к RPM_BUILD_ROOT. Так что нежелание использовать *-config тоже
сознательное.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] cpp.req
2011-03-08 16:47 ` [devel] cpp.req Dmitry V. Levin
2011-03-08 22:57 ` Alexey Tourbin
@ 2011-03-09 11:42 ` Sergey V Turchin
2011-03-09 12:46 ` Dmitry V. Levin
1 sibling, 1 reply; 21+ messages in thread
From: Sergey V Turchin @ 2011-03-09 11:42 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: Text/Plain, Size: 797 bytes --]
On Tuesday 08 March 2011 19:47, Dmitry V. Levin wrote:
> On Mon, Feb 28, 2011 at 03:30:59PM +0300, Dmitry V. Levin wrote:
> > Нет, отчего же. К сожалению, если у библиотеки CFLAGS формируются с
> > помощью %_bindir/*-config, то они в cpp.req не подхватятся. Правда,
> > таких библиотек осталось немного.
>
> Вот реальный пример: правильный gpgme.pc отсутствует, и cpp.req не
> справляется: http://git.altlinux.org/tasks/39999/build/100/i586/log
>
> /usr/src/tmp/gpgme-buildroot/usr/include/gpgme.h:89:2: error: #error GPGME
> was compiled with _FILE_OFFSET_BITS = 64, please see the section
> "Largefile support (LFS)" in the GPGME manual
Я по руководству так понял, что пользователь файла gpgme.h должен что-либо
делать.
[...]
--
Regards, Sergey. ALT Linux, http://www.altlinux.ru/
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] cpp.req
2011-03-09 11:42 ` Sergey V Turchin
@ 2011-03-09 12:46 ` Dmitry V. Levin
2011-03-09 13:13 ` Sergey V Turchin
0 siblings, 1 reply; 21+ messages in thread
From: Dmitry V. Levin @ 2011-03-09 12:46 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 1015 bytes --]
On Wed, Mar 09, 2011 at 02:42:28PM +0300, Sergey V Turchin wrote:
> On Tuesday 08 March 2011 19:47, Dmitry V. Levin wrote:
> > On Mon, Feb 28, 2011 at 03:30:59PM +0300, Dmitry V. Levin wrote:
> > > Нет, отчего же. К сожалению, если у библиотеки CFLAGS формируются с
> > > помощью %_bindir/*-config, то они в cpp.req не подхватятся. Правда,
> > > таких библиотек осталось немного.
> >
> > Вот реальный пример: правильный gpgme.pc отсутствует, и cpp.req не
> > справляется: http://git.altlinux.org/tasks/39999/build/100/i586/log
> >
> > /usr/src/tmp/gpgme-buildroot/usr/include/gpgme.h:89:2: error: #error GPGME
> > was compiled with _FILE_OFFSET_BITS = 64, please see the section
> > "Largefile support (LFS)" in the GPGME manual
> Я по руководству так понял, что пользователь файла gpgme.h должен что-либо
> делать.
Только обычно такие действия сразу закладывают в pkg-config --cflags, а
здесь авторы библиотеки решили отличиться и отправили пользователя читать
документацию.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] cpp.req
2011-03-09 12:46 ` Dmitry V. Levin
@ 2011-03-09 13:13 ` Sergey V Turchin
2011-03-09 13:16 ` Dmitry V. Levin
0 siblings, 1 reply; 21+ messages in thread
From: Sergey V Turchin @ 2011-03-09 13:13 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: Text/Plain, Size: 768 bytes --]
On Wednesday 09 March 2011 15:46, Dmitry V. Levin wrote:
[...]
> > > /usr/src/tmp/gpgme-buildroot/usr/include/gpgme.h:89:2: error: #error
> > > GPGME was compiled with _FILE_OFFSET_BITS = 64, please see the section
> > > "Largefile support (LFS)" in the GPGME manual
> >
> > Я по руководству так понял, что пользователь файла gpgme.h должен
> > что-либо делать.
>
> Только обычно такие действия сразу закладывают в pkg-config --cflags, а
> здесь авторы библиотеки решили отличиться и отправили пользователя читать
> документацию.
Ну да. Я хоть и прочел, толку мало :-)
Что мне делать? Заменить в gpgme.h это место на
#ifndef _FILE_OFFSET_BITS
#define _FILE_OFFSET_BITS 64
#endif
или вообще убрать его?
--
Regards, Sergey. ALT Linux, http://www.altlinux.ru/
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] cpp.req
2011-03-09 13:13 ` Sergey V Turchin
@ 2011-03-09 13:16 ` Dmitry V. Levin
2011-03-10 8:47 ` Michael Shigorin
0 siblings, 1 reply; 21+ messages in thread
From: Dmitry V. Levin @ 2011-03-09 13:16 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 929 bytes --]
On Wed, Mar 09, 2011 at 04:13:07PM +0300, Sergey V Turchin wrote:
> On Wednesday 09 March 2011 15:46, Dmitry V. Levin wrote:
>
> [...]
> > > > /usr/src/tmp/gpgme-buildroot/usr/include/gpgme.h:89:2: error: #error
> > > > GPGME was compiled with _FILE_OFFSET_BITS = 64, please see the section
> > > > "Largefile support (LFS)" in the GPGME manual
> > >
> > > Я по руководству так понял, что пользователь файла gpgme.h должен
> > > что-либо делать.
> >
> > Только обычно такие действия сразу закладывают в pkg-config --cflags, а
> > здесь авторы библиотеки решили отличиться и отправили пользователя читать
> > документацию.
> Ну да. Я хоть и прочел, толку мало :-)
> Что мне делать? Заменить в gpgme.h это место на
> #ifndef _FILE_OFFSET_BITS
> #define _FILE_OFFSET_BITS 64
> #endif
> или вообще убрать его?
Ничего тебе с gpgme.h делать не надо, все пользователи gpgme.h уже все сделали. :)
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] cpp.req
2011-03-09 13:16 ` Dmitry V. Levin
@ 2011-03-10 8:47 ` Michael Shigorin
2011-03-10 13:10 ` Dmitry V. Levin
0 siblings, 1 reply; 21+ messages in thread
From: Michael Shigorin @ 2011-03-10 8:47 UTC (permalink / raw)
To: ALT Devel discussion list
On Wed, Mar 09, 2011 at 04:16:58PM +0300, Dmitry V. Levin wrote:
> Ничего тебе с gpgme.h делать не надо, все пользователи gpgme.h
> уже все сделали. :)
А мне с SimGear что-то надо делать?
find-requires: running scripts (cpp,debuginfo,files,lib,pam,perl,pkgconfig,pkgconfiglib,python,rpmlib,shebang,shell,static,symlinks)
/usr/src/tmp/SimGear-buildroot/usr/include/simgear/constants.h:34:17: fatal error: cmath: No such file or directory
compilation terminated.
cpp.req: /usr/src/tmp/SimGear-buildroot/usr/include/simgear/constants.h: cpp failed, trying c++ mode
Provides: SimGear = 2.0.0, SimGear-devel = 2.0.0
Requires: libOpenSceneGraph-devel, glibc-devel-static, libGL-devel, libX11-devel, plib-devel
[...]
(пакет собрался, он действительно boost'овый)
--
---- WBR, Michael Shigorin <mike@altlinux.ru>
------ Linux.Kiev http://www.linux.kiev.ua/
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [devel] cpp.req
2011-03-10 8:47 ` Michael Shigorin
@ 2011-03-10 13:10 ` Dmitry V. Levin
0 siblings, 0 replies; 21+ messages in thread
From: Dmitry V. Levin @ 2011-03-10 13:10 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 937 bytes --]
On Thu, Mar 10, 2011 at 10:47:46AM +0200, Michael Shigorin wrote:
> On Wed, Mar 09, 2011 at 04:16:58PM +0300, Dmitry V. Levin wrote:
> > Ничего тебе с gpgme.h делать не надо, все пользователи gpgme.h
> > уже все сделали. :)
>
> А мне с SimGear что-то надо делать?
>
> find-requires: running scripts (cpp,debuginfo,files,lib,pam,perl,pkgconfig,pkgconfiglib,python,rpmlib,shebang,shell,static,symlinks)
> /usr/src/tmp/SimGear-buildroot/usr/include/simgear/constants.h:34:17: fatal error: cmath: No such file or directory
> compilation terminated.
> cpp.req: /usr/src/tmp/SimGear-buildroot/usr/include/simgear/constants.h: cpp failed, trying c++ mode
> Provides: SimGear = 2.0.0, SimGear-devel = 2.0.0
> Requires: libOpenSceneGraph-devel, glibc-devel-static, libGL-devel, libX11-devel, plib-devel
> [...]
>
> (пакет собрался, он действительно boost'овый)
Судя по вышепроцитированному, cpp.req справился.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2011-03-10 13:10 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-27 14:38 [devel] pkg-config Requires.private - полчища саранчи и враги народа Alexey Tourbin
2011-02-27 16:45 ` Damir Shayhutdinov
2011-02-27 17:01 ` Dmitry V. Levin
2011-02-28 9:35 ` Damir Shayhutdinov
2011-02-28 12:30 ` Dmitry V. Levin
2011-03-08 16:47 ` [devel] cpp.req Dmitry V. Levin
2011-03-08 22:57 ` Alexey Tourbin
2011-03-09 11:42 ` Sergey V Turchin
2011-03-09 12:46 ` Dmitry V. Levin
2011-03-09 13:13 ` Sergey V Turchin
2011-03-09 13:16 ` Dmitry V. Levin
2011-03-10 8:47 ` Michael Shigorin
2011-03-10 13:10 ` Dmitry V. Levin
2011-02-27 17:17 ` [devel] pkg-config Requires.private - полчища саранчи и враги народа Alexey Tourbin
2011-03-02 23:29 ` Alexey Tourbin
2011-03-02 23:49 ` Dmitry V. Levin
2011-03-02 5:50 ` Yuri N. Sedunov
2011-03-02 9:10 ` Dmitry V. Levin
2011-03-02 14:02 ` Alexey Tourbin
2011-03-02 13:43 ` Alexey Tourbin
2011-03-02 13:50 ` Yuri N. Sedunov
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git