[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