b8fbd2a4a3db48361b67226c8b4fff7836d0f942
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / buildroot-2015.05 / package / heimdal / 0001-add-roken-h-process.patch
1 Add roken-h-process.pl from:
2 https://raw.github.com/heimdal/heimdal/master/cf/roken-h-process.pl
3 It's required for cross-compiling and missing from release tarballs:
4 http://kerberos.996246.n3.nabble.com/Missing-roken-h-process-pl-when-cross-compiling-v1-5-2-td38806.html
5
6 Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
7
8 diff -Nura heimdal-1.5.3.orig/cf/roken-h-process.pl heimdal-1.5.3/cf/roken-h-process.pl
9 --- heimdal-1.5.3.orig/cf/roken-h-process.pl    1969-12-31 21:00:00.000000000 -0300
10 +++ heimdal-1.5.3/cf/roken-h-process.pl 2013-12-18 11:32:38.157625167 -0300
11 @@ -0,0 +1,184 @@
12 +#!/usr/bin/perl
13 +
14 +require 'getopts.pl';
15 +
16 +my $debug = 0;
17 +
18 +Getopts('dc:p:o:') || die "foo";
19 +
20 +if ($opt_d) {
21 +    $debug = 1;
22 +}
23 +
24 +die "missing arg" if (!defined $opt_c || !defined $opt_p || !defined $opt_o);
25 +
26 +my %defines;
27 +my $IN;
28 +my $OUT;
29 +
30 +print "parse config.h\n" if ($debug);
31 +
32 +open IN, $opt_c || die "failed open ${opt_c}";
33 +
34 +my @nesting;
35 +
36 +push @nesting, 1;
37 +
38 +while (<IN>) {
39 +    if (m/\s*#ifdef\s+(.*)/) {
40 +       my $var = $1;
41 +       if (defined $defines{$var}) {
42 +           push @nesting, 1;
43 +       } else {
44 +           push @nesting, 0;
45 +       }
46 +       next;
47 +    } elsif (m/\s*#ifndef\s+(.*)/) {
48 +       my $var = $1;
49 +       if (defined $defines{$var}) {
50 +           push @nesting, 0;
51 +       } else {
52 +           push @nesting, 1;
53 +       }
54 +       next;
55 +    } elsif (m/\s*#else/) {
56 +       my $var = pop @nesting;
57 +       $var = !$var;
58 +       push @nesting, $var;
59 +       next;
60 +    } elsif ($nesting[$#nesting] and m/\s*#define\s+(\w+)\s+(\S+)/) {
61 +       my $res = $2;
62 +       $res = 1 if (!defined $res);
63 +       $defines{$1} = $res;
64 +    }
65 +}
66 +
67 +close IN;
68 +
69 +if ($debug) {
70 +    foreach my $i (keys %defines) {
71 +       print "k: $i v: $defines{$i}\n";
72 +    }
73 +}
74 +
75 +open IN, "$opt_p" || die "failed open ${opt_p}";
76 +open OUT, ">$opt_o" || die "failed open ${opt_o}";
77 +
78 +print "parse roken.h.in\n" if ($debug);
79 +
80 +print OUT "/* This is an OS dependent, generated file */\n";
81 +print OUT "\n";
82 +print OUT "\n";
83 +print OUT "#ifndef __ROKEN_H__\n";
84 +print OUT "#define __ROKEN_H__\n";
85 +print OUT "\n";
86 +
87 +@nesting = (1);
88 +
89 +while (<IN>) {
90 +    if (m/\s*#ifdef\s+(.*)/) {
91 +       my $var = $1;
92 +       if (defined $defines{$var}) {
93 +           push @nesting, 1;
94 +       } else {
95 +           push @nesting, 0;
96 +       }
97 +       next;
98 +    } elsif (m/\s*#ifndef\s+(.*)/) {
99 +       my $var = $1;
100 +       if (defined $defines{$var}) {
101 +           push @nesting, 0;
102 +       } else {
103 +           push @nesting, 1;
104 +       }
105 +       next;
106 +    } elsif (m/\s*#if\s+(.*)/) {
107 +       my $res = parse_if($1);
108 +       print "line = $res: $1\n" if ($debug);
109 +       push @nesting, $res;
110 +       next;
111 +    } elsif (m/\s*#elif\s+(.*)/) {
112 +       my $res = pop @nesting;
113 +       if ($res gt 0) {
114 +           $res = -1;
115 +       } else {
116 +           my $res = parse_if($1);
117 +       }
118 +       push @nesting, $res;
119 +       next;
120 +    } elsif (m/\s*#else/) {
121 +       my $var = pop @nesting;
122 +       $var = !$var;
123 +       push @nesting, $var;
124 +       next;
125 +    } elsif (m/\s*#endif/) {
126 +       pop @nesting;
127 +       next;
128 +    }
129 +    print "line: $_\n"  if ($debug);
130 +    print "nesting dep $#{nesting}\n"  if ($debug);
131 +    my $i = 0, $t = 1;
132 +    while ($i le $#nesting) {
133 +       $t = 0 if ($nesting[$i] le 0);
134 +       print "nesting $i val $nesting[$i] -> $t\n" if ($debug);
135 +       $i++;
136 +    }
137 +    if ($t) {
138 +       print OUT;
139 +    }
140 +}
141 +
142 +print OUT "\n";
143 +print OUT "#endif /* __ROKEN_H__ */\n";
144 +
145 +
146 +close IN;
147 +
148 +exit 0;
149 +
150 +sub parse_if
151 +{
152 +    my ($neg, $var);
153 +
154 +    $_ = shift;
155 +
156 +    if (m/^\s*$/) {
157 +       print "end $_\n" if ($debug);
158 +       return 1;
159 +    } elsif (m/^([^&]+)\&\&(.*)$/) {
160 +       print "$1 and $2\n" if ($debug);
161 +       return parse_if($1) and parse_if($2);
162 +    } elsif (m/^\(([^&]+)\&\&(.*)$/) {
163 +       print "$1 and $2\n" if ($debug);
164 +       return parse_if($1) and parse_if($2);
165 +    } elsif (m/^([^\|]+)\|\|(.*)$/) {
166 +       print "$1 or $2\n" if ($debug);
167 +       return parse_if($1) or parse_if($2);
168 +    } elsif (m/^\s*(\!)?\s*defined\((\w+)\)/) {
169 +       ($neg, $var) = ($1, $2);
170 +       print "def: ${neg}-defined(${var})\n" if ($debug);
171 +       my $res = defined $defines{$var};
172 +       if ($neg eq "!") {
173 +           if ($res) {
174 +               $res = 0;
175 +           } else {
176 +               $res = 1;
177 +           }
178 +       }
179 +       print "res: $res\n" if ($debug);
180 +       return $res;
181 +    } elsif (m/^\s*(\!)?(\w+)/) {
182 +       ($neg, $var) = ($1, $2);
183 +       print "var: $neg $var\n" if ($debug);
184 +       my $res;
185 +       if (defined $defines{$var}) {
186 +           $res = $defines{$var};
187 +       } else {
188 +           $res = 0;
189 +       }
190 +       $res = ! $res if ($neg =~ m/!/);
191 +       print "res: $res\n" if ($debug);
192 +       return $res;
193 +    }
194 +    die "failed parse: $_\n";
195 +}