|
44 | 44 |
|
45 | 45 | log = logging.getLogger("multissl") |
46 | 46 |
|
47 | | -OPENSSL_OLD_VERSIONS = [ |
48 | | - "1.1.1w", |
49 | | -] |
50 | | - |
51 | | -OPENSSL_RECENT_VERSIONS = [ |
52 | | - "3.0.16", |
53 | | - "3.1.8", |
54 | | - "3.2.4", |
55 | | - "3.3.3", |
56 | | - "3.4.1", |
57 | | - # See make_ssl_data.py for notes on adding a new version. |
58 | | -] |
59 | | - |
60 | | -LIBRESSL_OLD_VERSIONS = [ |
61 | | -] |
62 | | - |
63 | | -LIBRESSL_RECENT_VERSIONS = [ |
64 | | -] |
65 | | - |
66 | | -AWSLC_RECENT_VERSIONS = [ |
67 | | - "1.55.0", |
68 | | -] |
69 | | - |
70 | 47 | # store files in ../multissl |
71 | 48 | HERE = os.path.dirname(os.path.abspath(__file__)) |
72 | 49 | PYTHONROOT = os.path.abspath(os.path.join(HERE, '..', '..')) |
@@ -155,32 +132,40 @@ class AbstractBuilder(object, metaclass=ABCMeta): |
155 | 132 | jobs = os.process_cpu_count() |
156 | 133 | else: |
157 | 134 | jobs = os.cpu_count() |
| 135 | + module_files = ( |
| 136 | + os.path.join(PYTHONROOT, "Modules/_ssl.c"), |
| 137 | + os.path.join(PYTHONROOT, "Modules/_hashopenssl.c"), |
| 138 | + ) |
| 139 | + module_libs = ("_ssl", "_hashlib") |
158 | 140 |
|
159 | 141 | @property |
160 | 142 | @abstractmethod |
161 | | - def library(self): |
| 143 | + def library(self=None): |
162 | 144 | pass |
163 | 145 |
|
164 | 146 | @property |
165 | 147 | @abstractmethod |
166 | | - def url_templates(self): |
| 148 | + def url_templates(self=None): |
167 | 149 | pass |
168 | 150 |
|
169 | 151 | @property |
170 | 152 | @abstractmethod |
171 | | - def src_template(self): |
| 153 | + def src_template(self=None): |
172 | 154 | pass |
173 | 155 |
|
174 | 156 | @property |
175 | 157 | @abstractmethod |
176 | | - def build_template(self): |
| 158 | + def build_template(self=None): |
177 | 159 | pass |
178 | 160 |
|
179 | | - module_files = ( |
180 | | - os.path.join(PYTHONROOT, "Modules/_ssl.c"), |
181 | | - os.path.join(PYTHONROOT, "Modules/_hashopenssl.c"), |
182 | | - ) |
183 | | - module_libs = ("_ssl", "_hashlib") |
| 161 | + @property |
| 162 | + @abstractmethod |
| 163 | + def recent_versions(): |
| 164 | + pass |
| 165 | + |
| 166 | + @property |
| 167 | + def old_versions(): |
| 168 | + return [] |
184 | 169 |
|
185 | 170 | def __init__(self, version, args): |
186 | 171 | self.version = version |
@@ -420,25 +405,40 @@ class BuildOpenSSL(AbstractBuilder): |
420 | 405 | depend_target = 'depend' |
421 | 406 |
|
422 | 407 | @property |
423 | | - def library(self): |
| 408 | + def library(self=None): |
424 | 409 | return "OpenSSL" |
425 | 410 |
|
426 | 411 | @property |
427 | | - def url_templates(self): |
| 412 | + def url_templates(self=None): |
428 | 413 | return ( |
429 | 414 | "https://github.com/openssl/openssl/releases/download/openssl-{v}/openssl-{v}.tar.gz", |
430 | 415 | "https://www.openssl.org/source/openssl-{v}.tar.gz", |
431 | 416 | "https://www.openssl.org/source/old/{s}/openssl-{v}.tar.gz", |
432 | 417 | ) |
433 | 418 |
|
434 | 419 | @property |
435 | | - def src_template(self): |
| 420 | + def src_template(self=None): |
436 | 421 | return "openssl-{}.tar.gz" |
437 | 422 |
|
438 | 423 | @property |
439 | | - def build_template(self): |
| 424 | + def build_template(self=None): |
440 | 425 | return "openssl-{}" |
441 | 426 |
|
| 427 | + @property |
| 428 | + def recent_versions(): |
| 429 | + return [ |
| 430 | + "3.0.16", |
| 431 | + "3.1.8", |
| 432 | + "3.2.4", |
| 433 | + "3.3.3", |
| 434 | + "3.4.1", |
| 435 | + # See make_ssl_data.py for notes on adding a new version. |
| 436 | + ] |
| 437 | + |
| 438 | + @property |
| 439 | + def old_versions(): |
| 440 | + return [ "1.1.1w" ] |
| 441 | + |
442 | 442 | def _post_install(self): |
443 | 443 | if self.version.startswith("3."): |
444 | 444 | self._post_install_3xx() |
@@ -475,43 +475,53 @@ def short_version(self): |
475 | 475 |
|
476 | 476 | class BuildLibreSSL(AbstractBuilder): |
477 | 477 | @property |
478 | | - def library(self): |
| 478 | + def library(self=None): |
479 | 479 | return "LibreSSL" |
480 | 480 |
|
481 | 481 | @property |
482 | | - def url_templates(self): |
| 482 | + def url_templates(self=None): |
483 | 483 | return ( |
484 | 484 | "https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-{v}.tar.gz", |
485 | 485 | ) |
486 | 486 |
|
487 | 487 | @property |
488 | | - def src_template(self): |
| 488 | + def src_template(self=None): |
489 | 489 | return "libressl-{}.tar.gz" |
490 | 490 |
|
491 | 491 | @property |
492 | | - def build_template(self): |
| 492 | + def build_template(self=None): |
493 | 493 | "libressl-{}" |
494 | 494 |
|
| 495 | + @property |
| 496 | + def recent_versions(): |
| 497 | + return [] |
| 498 | + |
495 | 499 |
|
496 | 500 | class BuildAWSLC(AbstractBuilder): |
497 | 501 | @property |
498 | | - def library(self): |
| 502 | + def library(self=None): |
499 | 503 | return "AWS-LC" |
500 | 504 |
|
501 | 505 | @property |
502 | | - def url_templates(self): |
| 506 | + def url_templates(self=None): |
503 | 507 | return ( |
504 | 508 | "https://github.com/aws/aws-lc/archive/refs/tags/v{v}.tar.gz", |
505 | 509 | ) |
506 | 510 |
|
507 | 511 | @property |
508 | | - def src_template(self): |
| 512 | + def src_template(self=None): |
509 | 513 | return "aws-lc-{}.tar.gz" |
510 | 514 |
|
511 | 515 | @property |
512 | | - def build_template(self): |
| 516 | + def build_template(self=None): |
513 | 517 | return "aws-lc-{}" |
514 | 518 |
|
| 519 | + @property |
| 520 | + def recent_versions(): |
| 521 | + return [ |
| 522 | + "1.55.0", |
| 523 | + ] |
| 524 | + |
515 | 525 | def _build_src(self, config_args=()): |
516 | 526 | cwd = self.build_dir |
517 | 527 | log.info("Running build in {}".format(cwd)) |
@@ -566,33 +576,31 @@ def main(): |
566 | 576 | format="*** %(levelname)s %(message)s" |
567 | 577 | ) |
568 | 578 |
|
569 | | - ssl_libs = { |
570 | | - "openssl": [ |
571 | | - BuildOpenSSL, OPENSSL_OLD_VERSIONS, OPENSSL_RECENT_VERSIONS, [] |
572 | | - ], |
573 | | - "libressl": [ |
574 | | - BuildLibreSSL, LIBRESSL_OLD_VERSIONS, LIBRESSL_RECENT_VERSIONS, [] |
575 | | - ], |
576 | | - "awslc": [BuildAWSLC, [], AWSLC_RECENT_VERSIONS, []], |
577 | | - } |
578 | | - if args.ssl and args.ssl_versions: |
579 | | - ssl_libs[args.ssl][3] += args.ssl_versions |
580 | | - elif args.ssl: |
581 | | - ssl_libs[args.ssl][3] += ssl_libs[args.ssl][2] |
| 579 | + versions = [] |
| 580 | + ssl_libs = AbstractBuilder.__subclasses__() |
| 581 | + if args.ssl: |
| 582 | + lib_name = lambda x: x.library.fget().lower().replace("-", "") |
| 583 | + libs = [l for l in ssl_libs if lib_name(l) == args.ssl] |
| 584 | + assert len(libs) == 1 |
| 585 | + cls = libs.pop() |
| 586 | + if args.ssl_versions: |
| 587 | + versions += [(cls, v) for v in args.ssl_versions] |
| 588 | + else: |
| 589 | + versions += [(cls, v) for v in cls.recent_versions.fget()] |
582 | 590 | else: |
583 | | - ssl_libs["openssl"][3] += ssl_libs["openssl"][2] |
584 | | - ssl_libs["libressl"][3] += ssl_libs["libressl"][2] |
585 | | - ssl_libs["awslc"][3] += ssl_libs["awslc"][2] |
586 | | - if not args.disable_ancient: |
587 | | - ssl_libs["openssl"][3] += ssl_libs["openssl"][1] |
588 | | - ssl_libs["libressl"][3] += ssl_libs["libressl"][1] |
589 | | - # download and register builder |
| 591 | + if args.ssl_versions: |
| 592 | + print("ERROR: SSL versions specified without specifying library") |
| 593 | + exit(1) |
| 594 | + for cls in ssl_libs: |
| 595 | + versions += [(cls, v) for v in cls.recent_versions.fget()] |
| 596 | + if not args.disable_ancient: |
| 597 | + versions += [(cls, v) for v in cls.old_versions.fget()] |
| 598 | + |
590 | 599 | builds = [] |
591 | | - for build_class, _, _, versions in ssl_libs.values(): |
592 | | - for version in versions: |
593 | | - build = build_class(version, args) |
594 | | - build.install() |
595 | | - builds.append(build) |
| 600 | + for build_class, version in versions: |
| 601 | + build = build_class(version, args) |
| 602 | + build.install() |
| 603 | + builds.append(build) |
596 | 604 |
|
597 | 605 | if args.steps in {'modules', 'tests'}: |
598 | 606 | for build in builds: |
|
0 commit comments