ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Alexey Tourbin <at@altlinux.ru>
To: ALT Devel discussion list <devel@lists.altlinux.org>
Subject: Re: [devel] glibc-kernheaders TCGETS2
Date: Wed, 19 Mar 2008 02:38:01 +0300
Message-ID: <20080318233801.GG7777@solemn.turbinal> (raw)
In-Reply-To: <20080318231237.GA22222@wo.int.altlinux.org>

[-- Attachment #1: Type: text/plain, Size: 1961 bytes --]

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
без крамольной конвертации сишных хедеров в перловый код.

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

      reply	other threads:[~2008-03-18 23:38 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-18 22:58 Alexey Tourbin
2008-03-18 23:12 ` Dmitry V. Levin
2008-03-18 23:38   ` Alexey Tourbin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080318233801.GG7777@solemn.turbinal \
    --to=at@altlinux.ru \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

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