[devel] Re: Q: split source files
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пт Мар 11 19:13:39 MSK 2005
On Fri, Mar 11, 2005 at 05:53:54PM +0300, Alexey Tourbin wrote:
> Как из файла вырезать все куски, ограниченные `#ifdef HAVE_SMPEG'
> и `#endif'? И записать их в другой файл, а в первом файле чтобы
> их осталось. Есть вложенные ifdef'ы. Файл называется
> SDL_Perl-2.1.2/src/SDL.xs.
А чо-то говорят UNIX для обработки текстов хорошо приспособлен...
Нарисовал grep_ifdef, кое-как работает, мне пока хватает.
Кому интересно -- нужно подумать, что делать с #else.
$ wc -l src/SDL.xs
4188 src/SDL.xs
$ grep_ifdef HAVE_SMPEG src/SDL.xs |wc -l
280
$ grep_ifdef -v HAVE_SMPEG src/SDL.xs |wc -l
3908
$
----------- следующая часть -----------
#!/usr/bin/perl
use 5.006;
use strict;
sub usage ($) {
require Pod::Usage;
my $rv = shift;
Pod::Usage::pod2usage(
-message => "extract #ifdef'ed chunks from C sources",
-output => $rv ? \*STDERR : \*STDOUT,
-exitval => $rv,
-verbose => 1,
);
}
use Getopt::Long qw(GetOptions);
GetOptions "help" => \my $opt_help, "v" => \my $opt_v
or usage 2;
usage 0 if $opt_help;
usage 1 unless @ARGV;
my $SYM = shift;
my $in;
while (<>) {
undef $in if eof;
/^#\s*ifdef\s+\Q$SYM/ and $in ||= 1
or $in and /^#\s*if/ and ++$in;
print if !!$in ^ !!$opt_v;
$in and /^#\s*end/ and --$in;
}
__END__
=head1 NAME
grep_ifdef
=head1 SYNOPSIS
B<grep_ifdef> [B<-v>] B<SYMBOL> [I<file>]...
=head1 DESCRIPTION
This script extracts chunks from C source files delimited
by #if/#ifdef and #endif CPP directives.
=head1 OPTIONS
=item B<-v>
Invert the sense of matching, to select non-matching chunks.
=head1 AUTHOR
Written by Alexey Tourbin <at на altlinux.org>.
=head1 COPYING
Copyright (c) 2005 Alexey Tourbin.
This is free software; you can redistribute it and/or modify it under
the terms of the GNU Library General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20050311/71066a67/attachment-0001.bin>
Подробная информация о списке рассылки Devel