annotate Tools/ssl/make_ssl_data.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents ad9f6e294d09
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
77579
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1 #! /usr/bin/env python3
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
2
77584
ad9f6e294d09 Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents: 77579
diff changeset
3 """
ad9f6e294d09 Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents: 77579
diff changeset
4 This script should be called *manually* when we want to upgrade SSLError
ad9f6e294d09 Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents: 77579
diff changeset
5 `library` and `reason` mnemnonics to a more recent OpenSSL version.
ad9f6e294d09 Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents: 77579
diff changeset
6
ad9f6e294d09 Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents: 77579
diff changeset
7 It takes two arguments:
ad9f6e294d09 Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents: 77579
diff changeset
8 - the path to the OpenSSL include files' directory
ad9f6e294d09 Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents: 77579
diff changeset
9 (e.g. openssl-1.0.1-beta3/include/openssl/)
ad9f6e294d09 Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents: 77579
diff changeset
10 - the path to the C file to be generated
ad9f6e294d09 Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents: 77579
diff changeset
11 (probably Modules/_ssl_data.h)
ad9f6e294d09 Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents: 77579
diff changeset
12 """
ad9f6e294d09 Add a docstring at the top of Tools/ssl/make_ssl_data.py
Antoine Pitrou <solipsis@pitrou.net>
parents: 77579
diff changeset
13
77579
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
14 import datetime
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
15 import os
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
16 import re
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
17 import sys
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
18
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
19
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
20 def parse_error_codes(h_file, prefix):
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
21 pat = re.compile(r"#define\W+(%s([\w]+))\W+(\d+)\b" % re.escape(prefix))
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
22 codes = []
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
23 with open(h_file, "r", encoding="latin1") as f:
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
24 for line in f:
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
25 match = pat.search(line)
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
26 if match:
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
27 code, name, num = match.groups()
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
28 num = int(num)
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
29 codes.append((code, name, num))
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
30 return codes
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
31
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
32 if __name__ == "__main__":
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
33 openssl_inc = sys.argv[1]
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
34 outfile = sys.argv[2]
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
35 use_stdout = outfile == '-'
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
36 f = sys.stdout if use_stdout else open(outfile, "w")
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
37 error_libraries = (
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
38 # (library code, mnemonic, error prefix, header file)
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
39 ('ERR_LIB_PEM', 'PEM', 'PEM_R_', 'pem.h'),
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
40 ('ERR_LIB_SSL', 'SSL', 'SSL_R_', 'ssl.h'),
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
41 ('ERR_LIB_X509', 'X509', 'X509_R_', 'x509.h'),
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
42 )
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
43 def w(l):
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
44 f.write(l + "\n")
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
45 w("/* File generated by Tools/ssl/make_ssl_data.py */")
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
46 w("/* Generated on %s */" % datetime.datetime.now().isoformat())
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
47 w("")
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
48
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
49 w("static struct py_ssl_library_code library_codes[] = {")
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
50 for libcode, mnemo, _, _ in error_libraries:
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
51 w(' {"%s", %s},' % (mnemo, libcode))
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
52 w(' { NULL }')
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
53 w('};')
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
54 w("")
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
55
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
56 w("static struct py_ssl_error_code error_codes[] = {")
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
57 for libcode, _, prefix, h_file in error_libraries:
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
58 codes = parse_error_codes(os.path.join(openssl_inc, h_file), prefix)
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
59 for code, name, num in sorted(codes):
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
60 w(' #ifdef %s' % (code))
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
61 w(' {"%s", %s, %s},' % (name, libcode, code))
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
62 w(' #else')
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
63 w(' {"%s", %s, %d},' % (name, libcode, num))
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
64 w(' #endif')
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
65 w(' { NULL }')
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
66 w('};')
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
67 if not use_stdout:
e193fe3d017e Add forgotten files for #14837.
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
68 f.close()