diff options
Diffstat (limited to 'winsup/cygwin/gendevices')
-rwxr-xr-x | winsup/cygwin/gendevices | 159 |
1 files changed, 0 insertions, 159 deletions
diff --git a/winsup/cygwin/gendevices b/winsup/cygwin/gendevices deleted file mode 100755 index df21796d0..000000000 --- a/winsup/cygwin/gendevices +++ /dev/null @@ -1,159 +0,0 @@ -#!/usr/bin/perl -# Copyright 2003, 2004, 2005 Red Hat, Inc. -# -# This file is part of Cygwin. -# -# This software is a copyrighted work licensed under the terms of the -# Cygwin license. Please consult the file "CYGWIN_LICENSE" for -# details. -# -use File::Basename; -use Cwd; -my $cwd = getcwd; - -use strict; -use integer; -sub devsort; - -my $input = shift; -my $output = shift; -my $base = "/tmp/" . basename($input, '.in') . '.' . $$; -my $c = $base . '.c'; -my $shilka = $base . '.shilka'; - -open(INPUT, $input) or die "$0: couldn't open '$input' - $!\n"; - -my @lines = (); -my $storage_ix = -1; -my @storage = (); -my %pointers = (); -my @patterns = (); -my $patterns_ix = -1; -while (<INPUT>) { - if (/%storage_here/) { - $storage_ix = @lines; - } elsif (/^"([^"]+)",\s*(.*)$/o) { - push(@patterns, [$1, $2]); - next; - } - if (@patterns) { - for my $f (sort devsort @patterns) { - my $x = $f->[0]; - my $rest = $f->[1]; - my ($dev, $devrest) = ($x =~ /([^%]+)(%.*)?$/o); - push(@lines, generate($dev, $devrest, $rest, [])); - } - @patterns = (); - } - push(@lines, $_); -} - -close INPUT; -# @storage = sort devsort @storage; -chop $storage[$#storage]; -chop $storage[$#storage]; -$storage[$#storage] .= "\n"; -splice(@lines, $storage_ix, 1, - "static const device dev_storage[] =\n", "{\n", - @storage, "};\n\n", - sort {$a cmp $b} values %pointers); -open(SHILKA, '>', $shilka); -print SHILKA @lines; -close SHILKA; - -chdir '/tmp'; -system qw'shilka -length -strip -no-definitions', $shilka; -if ($? == -1) { - die "$0: shilka command missing? - $!\n"; -} else { - exit $? if $?; -} -chdir $cwd; -unlink $shilka; -open(C, $c) or die "$0: couldn't open $c - $!\n"; -@lines = <C>; -close C; -unlink $c; -splice(@lines, 0, 3); -my $ign_until_brace = 0; -for (my $i = 0; $i < @lines; $i++) { - $_ = $lines[$i]; - $ign_until_brace = 1 if /(?:KR_reset|KR_output_statistics).*\)\s*$/o; - if ($ign_until_brace || /(?:#\s*line|(?:KR_reset|KR_output_statistics).*;)/) { - $ign_until_brace = 0 if $ign_until_brace && /}/o; - splice(@lines, $i, 1); - redo; - }; -} -open(OUTPUT, '>', $output) or do {{ - if (chmod(0664, $output)) { - open(OUTPUT, '>', $output); - last; - } - die "$0: couldn't open $output - $!\n"; -}}; -print OUTPUT @lines; -close OUTPUT; - -sub generate { - my $dev = shift; - my $devrest = shift; - my $rest = shift; - my $vars = shift; - my $res; - my @lines = (); - if ($devrest) { - my ($a, $low, $high, $fmt, $b) = ($devrest =~ /%([\({])([^-]+)-([^\)}]+)[\)}](.)(.*)/o); - my ($middle, $devrest0) = ($b =~ /^([^%]*)(%.*)?$/); - $fmt = "%$fmt"; - my $vars_ix = @{$vars}; - for my $f ($low .. $high) { - $vars->[$vars_ix] = $f; - $#{$vars} = $vars_ix; - my $dev0 = $dev . sprintf($fmt, $f) . $middle; - push(@lines, generate($dev0, $devrest0, $rest, $vars)); - } - } else { - my $fh = $dev; - $fh =~ s%/%_%og; - my $shilka_id = $fh; - my $storage_str = $fh . '_storage'; - $fh =~ s/^_dev_/FH_/o; - $fh = uc $fh; - $shilka_id =~ s/^_dev_//o; - $storage_str =~ s/^_dev/dev/o; - my $storage_loc = "dev_storage + " . @storage; - @lines = ('"' . $dev . '"' . " = $shilka_id {return $storage_loc;}\n"); - $rest = "$fh, $rest" if $rest =~ /^"/o; - $rest = fixup($rest, $vars); - if ($rest =~ /^(.*), ([a-z_]*_dev)/) { - $pointers{$2} ||= "const device *$2 = $storage_loc;\n"; - $rest = $1; - } - push(@storage, " {\"$dev\", " . $rest . "},\n"); - } - return @lines; -} - -sub fixup { - my $rest = shift; - my $vars = shift; - 0 while $rest =~ s/{([^}]*)}/evalit($1, $vars)/eg; - return $rest; -} - -sub evalit { - my $what = shift; - my $vars = shift; - $what =~ s/\$(\d+)/'$vars->[$1-1]'/g; - my $res = eval $what; - return $res; -} - -sub devsort { - my $a0 = $a->[0]; - my $b0 = $b->[0]; - $a0 =~ s/(\D)(\d+)/"$1" . sprintf "%05d", $2/e; - $b0 =~ s/(\D)(\d+)/"$1" . sprintf "%05d", $2/e; - return $a0 cmp $b0; -} |