forked from denji/homebrew-nginx
-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathupdate-ssl3
executable file
·127 lines (102 loc) · 3.22 KB
/
update-ssl3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/usr/bin/env perl
use v5.10.1;
use strict;
use warnings;
sub update_formula ($);
sub expand_var ($$);
sub get_sha256sum ($$);
my $version = shift or die "No version number specified.\n";
for my $formula_file (reverse sort glob 'openresty-openssl3*.rb') {
if ($formula_file =~ /^openresty-openssl3(?:-(?:valgrind|asan|debug))?\.rb$/)
{
update_formula $formula_file;
}
}
sub update_formula ($) {
my $file = shift;
open my $in, "<", $file
or die "Cannot open $file for reading: $!\n";
my $src = do { local $/; <$in>; };
close $in;
my $formula_var = {};
my $changes = 0;
if ($src =~ s/^(\s+) VERSION (\s* = \s*) "( \d+ \.\d+ \.\d+\w+ )" \.freeze$/${1}VERSION = "$version".freeze/xsm) {
my $old_ver = $3;
$formula_var->{VERSION} = $version;
if ($old_ver ne $version) {
say "INFO: $file: version got changed from $old_ver to $version";
$changes++;
} else {
say "INFO: $file is already up to date: $version";
return;
}
} else {
die "$file: Version line not found";
}
if ($src =~ s/^(\s+) revision (\s+) (\d+)$/${1}revision${2}1/xsm) {
my $old_rel = $3;
if ($old_rel ne '1') {
say "INFO: $file: release number got changed from $old_rel to 1";
$changes++;
}
} else {
die "$file: Release line not found";
}
#etc/"openssl@3.0.15"
if ($src =~ s/etc\/"openssl\@(\d+\.\d+\.\d+)"/etc\/"openssl@($version)"/xsm) {
my $old_ver = $1;
if ($old_ver ne $version) {
say "INFO: $file: version got changed from $old_ver to $version";
$changes++;
}
}
my $sha256sum;
if ($src =~ /^(\s+) url \s+ "(\S+?)"$/xsm) {
my $src_line = $2;
$src_line = expand_var $src_line, $formula_var;
$sha256sum .= get_sha256sum $src_line, $file;
} else {
die "$file: Source line not found";
}
if ($src =~ /^(\s+) sha256 (\s+) " (.+?) "$/xsm) {
if ($1 ne $sha256sum) {
$src =~ s/^(\s+) sha256 (\s+) " (.+?) "$/${1}sha256${2}"$sha256sum"/xsm;
say "INFO: $file: sha256sum got changed";
$changes++;
}
} else {
die "$file: sha256sum line not found";
}
if ($changes > 0) {
open my $out, ">", "$file"
or die "Cannot open $file for writing: $!\n";
print $out $src;
close $out;
say "$file updated with $changes change(s).";
}
}
sub expand_var ($$) {
my ($str, $var) = @_;
$str =~ s/\#\{(\w+)\}/$var->{$1}/g;
return $str;
}
sub get_sha256sum ($$) {
my ($src_line, $file) = @_;
my $sha256_txt;
if ($src_line =~ m{^https?://}) {
$sha256_txt = `set -o pipefail; curl -sfL $src_line | sha256sum`;
if ($? != 0) {
my $exit_code = $? >> 8;
die "Error: failed to download $src_line, exit code $exit_code\n";
}
} else {
$sha256_txt = `sha256sum $src_line`;
if ($? != 0) {
my $exit_code = $? >> 8;
die "Error: failed to download $src_line, exit code $exit_code\n";
}
}
$sha256_txt =~ s/\s+\S+$//;
chomp $sha256_txt;
return $sha256_txt;
}