diff --git a/build/fbcode_builder/getdeps/builder.py b/build/fbcode_builder/getdeps/builder.py index c4bd80705..691bd0716 100644 --- a/build/fbcode_builder/getdeps/builder.py +++ b/build/fbcode_builder/getdeps/builder.py @@ -238,3 +238,50 @@ class NinjaBootstrap(BuilderBase): os.makedirs(bin_dir) shutil.copyfile(src_ninja, dest_ninja) shutil.copymode(src_ninja, dest_ninja) + + +class OpenSSLBuilder(BuilderBase): + def __init__(self, build_opts, ctx, manifest, build_dir, src_dir, inst_dir): + super(OpenSSLBuilder, self).__init__( + build_opts, ctx, manifest, src_dir, build_dir, inst_dir + ) + + def _build(self, install_dirs, reconfigure): + configure = os.path.join(self.src_dir, "Configure") + + # prefer to resolve the perl that we installed from + # our manifest on windows, but fall back to the system + # path on eg: darwin + env = self.env.copy() + for d in install_dirs: + bindir = os.path.join(d, "bin") + add_path_entry(env, "PATH", bindir, append=False) + + perl = path_search(env, "perl", "perl") + + if self.build_opts.is_windows(): + make = "nmake.exe" + args = ["VC-WIN64A-masm", "-utf-8"] + elif self.build_opts.is_darwin(): + make = "make" + args = ["darwin64-x86_64-cc"] + else: + raise Exception("don't know how to build openssl for %r" % self.ctx) + + self._run_cmd( + [ + perl, + configure, + "--prefix=%s" % self.inst_dir, + "--openssldir=%s" % self.inst_dir, + ] + + args + + [ + "enable-static-engine", + "enable-capieng", + "no-makedepend", + "no-unit-test", + "no-tests", + ] + ) + self._run_cmd([make, "install_sw", "install_ssldirs"]) diff --git a/build/fbcode_builder/getdeps/manifest.py b/build/fbcode_builder/getdeps/manifest.py index 9b7f82373..89898eda7 100644 --- a/build/fbcode_builder/getdeps/manifest.py +++ b/build/fbcode_builder/getdeps/manifest.py @@ -10,7 +10,13 @@ from __future__ import absolute_import, division, print_function, unicode_litera import io -from .builder import AutoconfBuilder, CMakeBuilder, MakeBuilder, NinjaBootstrap +from .builder import ( + AutoconfBuilder, + CMakeBuilder, + MakeBuilder, + NinjaBootstrap, + OpenSSLBuilder, +) from .expr import parse_expr from .fetcher import ( ArchiveFetcher, @@ -323,4 +329,9 @@ class ManifestParser(object): build_options, ctx, self, build_dir, src_dir, inst_dir ) + if builder == "openssl": + return OpenSSLBuilder( + build_options, ctx, self, build_dir, src_dir, inst_dir + ) + raise KeyError("project %s has no known builder" % (self.name))