annotate Tools/ssl/make_ssl_data.py @ 83447:678564fc0962 3.3

#17789: test_random now works with unittest test discovery. Patch by Zachary Ware.
author Ezio Melotti <ezio.melotti@gmail.com>
date Fri, 19 Apr 2013 05:45:27 +0300
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()