mirror of
https://github.com/facebook/proxygen.git
synced 2025-08-07 07:02:53 +03:00
getdeps: Add support for brew packages and define package dependencies
Summary: In order to speed up build times on a mac, add homebrew support to getdeps. Homebrew packages can be declared in a manifest using the `homebrew` header. Futher, ahornby has added manifest entries for homebrew packages which are included in this diff and also included a change to use the correct version of openssl. Without this openssl change, homebrew cmake configure finds an old openssl 1.0.2 install. This diff provides a 2x speed up for building folly: Timings for clean getdeps folly build on mid-2018 2.9Ghz i9 6 core intel macbook pro with 32GB RAM: With new homebrew system deps: ``` rm -rf /Users/ahornby/.scratch/UsersZahornbyZfbsource/fbcode_builder_getdeps/ time ./opensource/fbcode_builder/getdeps.py build --allow-system-packages folly real 17m39.329s user 76m10.317s sys 5m50.163s ``` Without: ``` rm -rf /Users/ahornby/.scratch/UsersZahornbyZfbsource/fbcode_builder_getdeps/ time ./opensource/fbcode_builder/getdeps.py build folly real 32m10.344s user 105m53.448s sys 15m57.858s ``` Reviewed By: ahornby Differential Revision: D33842632 fbshipit-source-id: ac785d4a8dcfa31b77292bddd9e747022ac36e3b
This commit is contained in:
committed by
Facebook GitHub Bot
parent
1cd8738897
commit
a75c04f38c
@@ -158,6 +158,7 @@ class SystemPackageFetcher(object):
|
||||
def __init__(self, build_options, packages):
|
||||
self.manager = build_options.host_type.get_package_manager()
|
||||
self.packages = packages.get(self.manager)
|
||||
self.host_type = build_options.host_type
|
||||
if self.packages:
|
||||
self.installed = None
|
||||
else:
|
||||
@@ -172,6 +173,8 @@ class SystemPackageFetcher(object):
|
||||
cmd = ["rpm", "-q"] + sorted(self.packages)
|
||||
elif self.manager == "deb":
|
||||
cmd = ["dpkg", "-s"] + sorted(self.packages)
|
||||
elif self.manager == "homebrew":
|
||||
cmd = ["brew", "ls", "--versions"] + sorted(self.packages)
|
||||
|
||||
if cmd:
|
||||
proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
@@ -181,9 +184,23 @@ class SystemPackageFetcher(object):
|
||||
else:
|
||||
# Need all packages to be present to consider us installed
|
||||
self.installed = False
|
||||
|
||||
else:
|
||||
self.installed = False
|
||||
|
||||
# Hack to make openssl discovery with homebrew work. If openssl was
|
||||
# built with autoconf we could use autoconf.envcmd.OPENSSL_ROOT_DIR
|
||||
# from the manifest, but it isn't, so handle the special case here.
|
||||
if (
|
||||
self.installed
|
||||
and self.host_type.is_darwin()
|
||||
and self.manager == "homebrew"
|
||||
and "openssl@1.1" in self.packages
|
||||
):
|
||||
candidate = homebrew_package_prefix("openssl@1.1")
|
||||
if os.path.exists(candidate):
|
||||
os.environ["OPENSSL_ROOT_DIR"] = candidate
|
||||
|
||||
return bool(self.installed)
|
||||
|
||||
def update(self):
|
||||
@@ -789,3 +806,14 @@ class ArchiveFetcher(Fetcher):
|
||||
|
||||
def get_src_dir(self):
|
||||
return self.src_dir
|
||||
|
||||
|
||||
def homebrew_package_prefix(package):
|
||||
cmd = ["brew", "--prefix", package]
|
||||
try:
|
||||
proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
except FileNotFoundError:
|
||||
return
|
||||
|
||||
if proc.returncode == 0:
|
||||
return proc.stdout.decode("utf-8").rstrip()
|
||||
|
Reference in New Issue
Block a user