После обновления 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
Created attachment 2615 [details] Часть диффа между pcm.h в 1.0.15 и 1.0.16, иллюстрирующая проблему. ИМХО, надо где-то ДО использования давать пустое определение __attribute__
~$ 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
const char *snd_pcm_start_mode_name(snd_pcm_start_t mode) __attribute__((deprecated)); и что здесь не понятного?
Зачем вы используете gcc2.96?
(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.
(In reply to comment #3) > const char *snd_pcm_start_mode_name(snd_pcm_start_t mode) > __attribute__((deprecated)); > и что здесь не понятного? Непонятно либо почему gcc4 не отрабатывает __attribute__, либо почему нигде не определен пустой макрос __attribute__. Я думаю, что могу его определить и сам, но ИМХО нехорошо так запатчивать каждое приложение, собирающееся с alsa-ой.
Странно, то что: - ругается на объявление ф-ции в хедере, а не на строчку, где используется ф-ция - выдаёт ошибку, а не warning - ругается "'deprecated' was not declared in this scope" в то время как должен "warning: 'foo' is deprecated" Именно по этим причинам и похоже, что баг именно в libalsa-devel, а не в icewm. Впрочем, icewm, в любом случае, лучше запатчить, чтобы он не использовал устаревшие ф-ции.
(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, в любом случае, лучше запатчить, чтобы он не использовал > устаревшие ф-ции. Это в процессе.
(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))".
src/base.h: #if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3 #define deprecated __attribute__((deprecated)) #else #define deprecated #endif Они идиоты. Ибо в итоге получается __attribute__((__attribute__((deprecated)))) Ну и да, чудес не бывает. Привыкайте.
(In reply to comment #10) > Ну и да, чудес не бывает. Привыкайте. Бывают -- например, чудесным образом это оказалась не моя бага :)
Fixed in icewm-1.2.35-alt3, thanks to wrar@ Пойду патч повешу в апстрим...