Bug 15640 - FTBFS: переопределяет слово deprecated
Summary: FTBFS: переопределяет слово deprecated
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: icewm (show other bugs)
Version: unstable
Hardware: all Linux
: P2 blocker
Assignee: Dmitriy Khanzhin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-05-13 20:10 MSD by Evgenii Terechkov
Modified: 2008-05-14 20:21 MSD (History)
4 users (show)

See Also:


Attachments
Часть диффа между pcm.h в 1.0.15 и 1.0.16, иллюстрирующая проблему. (3.83 KB, patch)
2008-05-13 20:12 MSD, Evgenii Terechkov
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Evgenii Terechkov 2008-05-13 20:10:23 MSD
После обновления libalsa-devel 1.0.15-alt1 -> 1.0.16-alt1 перестал собираться
icewm (использущий alsa для вывода звука). Откат пакета проблему решает.

ИМХО, дело в неграмотном коде.Я так понимаю, некоторым компиляторам надо давать
пустое определение __attribure__, чего в данном случае не происходит (и не видно
проверок на данный вариант).
Steps to Reproduce:
1.rpm -bc icewm.spec
Actual Results:  
/usr/include/alsa/pcm.h:1097: error: 'deprecated' was not declared in this scope
/usr/include/alsa/pcm.h:1098: error: 'deprecated' was not declared in this scope
/usr/include/alsa/pcm.h:1099: error: 'deprecated' was not declared in this scope
/usr/include/alsa/pcm.h:1100: error: 'deprecated' was not declared in this scope


Expected Results:  
print $?
0
Comment 1 Evgenii Terechkov 2008-05-13 20:12:34 MSD
Created attachment 2615 [details]
Часть диффа между pcm.h в 1.0.15 и 1.0.16, иллюстрирующая проблему.

ИМХО, надо где-то ДО использования давать пустое определение __attribute__
Comment 2 Evgenii Terechkov 2008-05-13 20:15:29 MSD
~$ R -qp --lastchange
~/.inst/Sisyphus/RPMS.classic/libalsa-devel_1.0.16-alt1_i586.rpm 
* Чтв Май 01 2008 Valery Inozemtsev <shrek@altlinux.ru> 1.0.16-alt1

- 1.0.16
Comment 3 Valery Inozemtsev 2008-05-13 20:24:38 MSD
const char *snd_pcm_start_mode_name(snd_pcm_start_t mode) 
__attribute__((deprecated));

и что здесь не понятного?
Comment 4 Andrey Rahmatullin 2008-05-13 20:37:01 MSD
Зачем вы используете gcc2.96?
Comment 5 Evgenii Terechkov 2008-05-14 03:08:24 MSD
(In reply to comment #4)
> Зачем вы используете gcc2.96?

Ну, это же компонент "ALT Linux Sisyphus"?

~$ rpm -qa |egrep ^gcc
gcc4.1-4.1.2-alt2
gcc-common-1.4.10-alt3
gcc-color-1.0.1-alt5
gcc4.1-c++-4.1.2-alt2
gcc-c++-common-1.4.10-alt3
gccmakedep-1.0.1-alt1

На сборочной машине ООО для Сизифа проблема та же (я, собственно, и разбираться
то начал потому что beehave написал, что icewm перестал собираться. Проверил у
себя, на свежем Сизифе - и правда не собирается. Откатываю libalsa-devel -
собирается), а там никак не 2.96.
Comment 6 Evgenii Terechkov 2008-05-14 03:11:21 MSD
(In reply to comment #3)
> const char *snd_pcm_start_mode_name(snd_pcm_start_t mode) 
> __attribute__((deprecated));
> и что здесь не понятного?

Непонятно либо почему gcc4 не отрабатывает __attribute__, либо почему нигде не
определен пустой макрос __attribute__.

Я думаю, что могу его определить и сам, но ИМХО нехорошо так запатчивать каждое
приложение, собирающееся с alsa-ой.
Comment 7 Slava Semushin 2008-05-14 09:05:03 MSD
Странно, то что:
- ругается на объявление ф-ции в хедере, а не на строчку, где используется ф-ция
- выдаёт ошибку, а не warning
- ругается "'deprecated' was not declared in this scope" в то время как должен
"warning: 'foo' is deprecated"

Именно по этим причинам и похоже, что баг именно в libalsa-devel, а не в icewm.
Впрочем, icewm, в любом случае, лучше запатчить, чтобы он не использовал
устаревшие ф-ции.
Comment 8 Evgenii Terechkov 2008-05-14 10:31:27 MSD
(In reply to comment #7)
> Странно, то что:
> - ругается на объявление ф-ции в хедере, а не на строчку, где используется ф-ция

Это и навело на альсу.

> - выдаёт ошибку, а не warning
> - ругается "'deprecated' was not declared in this scope" в то время как должен
> "warning: 'foo' is deprecated"

Это штатное поведение (расширение?) gcc начиная с какой-то версий (3.хх вроде).
А тут ситуация нештатная какая-то.
 
> Именно по этим причинам и похоже, что баг именно в libalsa-devel, а не в icewm.

Может быть и так, что для сборки с новой альсой надо писать код не так, как для
старой (объявлять какие-то #defun-ы и т.п...). Я же ничего в сборке и коде не
менял. Почитав доки из пакетов 1.0.16 и сам pcm.h, я ничего такого не уловил.
Может, кто-то знает?

> Впрочем, icewm, в любом случае, лучше запатчить, чтобы он не использовал
> устаревшие ф-ции.

Это в процессе.
Comment 9 Andrey Rahmatullin 2008-05-14 11:23:10 MSD
(In reply to comment #6)
> Непонятно либо почему gcc4 не отрабатывает __attribute__
Именно. Это вряд ли проблема libalsa.

> либо почему нигде не определен пустой макрос __attribute__.
Это не макрос.


(In reply to comment #7)
> Странно, то что:
> - ругается на объявление ф-ции в хедере, а не на строчку, где используется ф-
ция
> - выдаёт ошибку, а не warning
> - ругается "'deprecated' was not declared in this scope" в то время как должен
> "warning: 'foo' is deprecated"
Это формулируется одной фразой: "странно, что gcc не узнал __attribute__
((deprecated))".
Comment 10 Andrey Rahmatullin 2008-05-14 11:48:43 MSD
src/base.h:

#if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3
#define deprecated __attribute__((deprecated))
#else
#define deprecated
#endif

Они идиоты. Ибо в итоге получается __attribute__((__attribute__((deprecated))))

Ну и да, чудес не бывает. Привыкайте.
Comment 11 Michael Shigorin 2008-05-14 11:53:02 MSD
(In reply to comment #10)
> Ну и да, чудес не бывает. Привыкайте.
Бывают -- например, чудесным образом это оказалась не моя бага :)
Comment 12 Evgenii Terechkov 2008-05-14 20:20:32 MSD
Fixed in icewm-1.2.35-alt3, thanks to wrar@

Пойду патч повешу в апстрим...