[devel] glibc-kernheaders TCGETS2
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Ср Мар 19 02:38:01 MSK 2008
On Wed, Mar 19, 2008 at 02:12:37AM +0300, Dmitry V. Levin wrote:
> On Wed, Mar 19, 2008 at 01:58:50AM +0300, Alexey Tourbin wrote:
> > У меня перестал собираться перл, не может вычислить некоторые константы
> > для ioctl в сгенерированном сишном коде.
> Это багрепорт на свежий glibc-kernheaders.
По привычке пишу в список, хотя в данном случае, наверное, следовало
бы в багзиллу.
> > $ cat /tmp/.private/at/bhap6ejYVA.c
> > #include <stdio.h>
> > #include <sys/ioctl.h>
> > int main() {
> > printf("TCGETS %ld\n", (long)(TCGETS));
> > printf("TCGETS2 %ld\n", (long)(TCGETS2));
> > return 0;
> > }
>
> TCGETS2 раньше не было.
Это я сделал генерат сишного кода для целочисленных констант, который
заменяет старый генератор перлового кода h2ph, который вообще ужас что
генерировал.
На высоком уровне это выглядит очень просто:
gen_h2ph(
include => "sys/ioctl.h",
regexp => qr/^FIO|^TC|^TIO|^SIO/,
output => "ioctl.ph",
);
Он работает в два прохода: сначала выгребает константы через 'cpp -dD',
а потом генерирует сишную программу, которая печатает эти константы.
Примерно вот такая идея:
$ cpp -dD - <<<'#include <sys/ioctl.h>' |sed -n '/^#define TC/p'
#define TCGETS 0x5401
#define TCSETS 0x5402
#define TCSETSW 0x5403
#define TCSETSF 0x5404
#define TCGETA 0x5405
#define TCSETA 0x5406
#define TCSETAW 0x5407
#define TCSETAF 0x5408
#define TCSBRK 0x5409
#define TCXONC 0x540A
#define TCFLSH 0x540B
#define TCSBRKP 0x5425
#define TCGETS2 _IOR('T',0x2A, struct termios2)
#define TCSETS2 _IOW('T',0x2B, struct termios2)
#define TCSETSW2 _IOW('T',0x2C, struct termios2)
#define TCSETSF2 _IOW('T',0x2D, struct termios2)
$
Соответственно мы считаем что все ^TC константы должны раскрываться
в целочисленное значение на стадии компиляции сишного генерата.
Это позволяет создать абсолютно корректный файл
/usr/lib/perl5/*/ioctl.ph
без крамольной конвертации сишных хедеров в перловый код.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20080319/7aafdf15/attachment-0002.bin>
Подробная информация о списке рассылки Devel