blob: 731d3ae22c2745928648f0602ba2732c292a9b7e [file] [log] [blame]
Alexandre Savard1b09e312012-08-07 20:33:29 -04001#!/usr/local/bin/perl
2
3use strict;
4
5my %xref_tbl;
6my %oid_tbl;
7
8my ($mac_file, $xref_file) = @ARGV;
9
10open(IN, $mac_file) || die "Can't open $mac_file";
11
12# Read in OID nid values for a lookup table.
13
14while (<IN>)
15 {
16 chomp;
17 my ($name, $num) = /^(\S+)\s+(\S+)$/;
18 $oid_tbl{$name} = $num;
19 }
20close IN;
21
22open(IN, $xref_file) || die "Can't open $xref_file";
23
24my $ln = 1;
25
26while (<IN>)
27 {
28 chomp;
29 s/#.*$//;
30 next if (/^\S*$/);
31 my ($xr, $p1, $p2) = /^(\S+)\s+(\S+)\s+(\S+)/;
32 check_oid($xr);
33 check_oid($p1);
34 check_oid($p2);
35 $xref_tbl{$xr} = [$p1, $p2, $ln];
36 }
37
38my @xrkeys = keys %xref_tbl;
39
40my @srt1 = sort { $oid_tbl{$a} <=> $oid_tbl{$b}} @xrkeys;
41
42for(my $i = 0; $i <= $#srt1; $i++)
43 {
44 $xref_tbl{$srt1[$i]}[2] = $i;
45 }
46
47my @srt2 = sort
48 {
49 my$ap1 = $oid_tbl{$xref_tbl{$a}[0]};
50 my$bp1 = $oid_tbl{$xref_tbl{$b}[0]};
51 return $ap1 - $bp1 if ($ap1 != $bp1);
52 my$ap2 = $oid_tbl{$xref_tbl{$a}[1]};
53 my$bp2 = $oid_tbl{$xref_tbl{$b}[1]};
54
55 return $ap2 - $bp2;
56 } @xrkeys;
57
58my $pname = $0;
59
60$pname =~ s|^.[^/]/||;
61
62print <<EOF;
63/* AUTOGENERATED BY $pname, DO NOT EDIT */
64
65typedef struct
66 {
67 int sign_id;
68 int hash_id;
69 int pkey_id;
70 } nid_triple;
71
72static const nid_triple sigoid_srt[] =
73 {
74EOF
75
76foreach (@srt1)
77 {
78 my $xr = $_;
79 my ($p1, $p2) = @{$xref_tbl{$_}};
80 print "\t{NID_$xr, NID_$p1, NID_$p2},\n";
81 }
82
83print "\t};";
84print <<EOF;
85
86
87static const nid_triple * const sigoid_srt_xref[] =
88 {
89EOF
90
91foreach (@srt2)
92 {
93 my $x = $xref_tbl{$_}[2];
94 print "\t\&sigoid_srt\[$x\],\n";
95 }
96
97print "\t};\n\n";
98
99sub check_oid
100 {
101 my ($chk) = @_;
102 if (!exists $oid_tbl{$chk})
103 {
104 die "Not Found \"$chk\"\n";
105 }
106 }
107