mirror of
https://github.com/facebook/proxygen.git
synced 2025-08-07 07:02:53 +03:00
update python to 3.8
Summary: Update to a newer python that builds on macOS Big Sur, make eden_scm depend on it and use it from PATH python 3.8 requires libffi which is reference via its pkg-config setup, however python's pkg-config libffi detection is broken (https://bugs.python.org/issue34823) with the documented workaround requiring an environment variable to be passed into its ./configure step, which is why this change also adds a feature to AutoconfBuilder With the updated python in place I was able to remove disable_env_override_pkgconfig = 1 disable_env_override_path = 1 from the eden_scm config so that it actually uses the pkg-configs, PATHs and other settings from its dependencies. This should make future python and other dependency upgrades much simpler. Reviewed By: HarveyHunt Differential Revision: D32231261 fbshipit-source-id: a2b6addbe22f38e3d71618c802d2c6f836fdd86c
This commit is contained in:
committed by
Facebook GitHub Bot
parent
487d4abb0f
commit
e357474839
@@ -198,11 +198,22 @@ class CMakeBootStrapBuilder(MakeBuilder):
|
|||||||
|
|
||||||
|
|
||||||
class AutoconfBuilder(BuilderBase):
|
class AutoconfBuilder(BuilderBase):
|
||||||
def __init__(self, build_opts, ctx, manifest, src_dir, build_dir, inst_dir, args):
|
def __init__(
|
||||||
|
self,
|
||||||
|
build_opts,
|
||||||
|
ctx,
|
||||||
|
manifest,
|
||||||
|
src_dir,
|
||||||
|
build_dir,
|
||||||
|
inst_dir,
|
||||||
|
args,
|
||||||
|
conf_env_args,
|
||||||
|
):
|
||||||
super(AutoconfBuilder, self).__init__(
|
super(AutoconfBuilder, self).__init__(
|
||||||
build_opts, ctx, manifest, src_dir, build_dir, inst_dir
|
build_opts, ctx, manifest, src_dir, build_dir, inst_dir
|
||||||
)
|
)
|
||||||
self.args = args or []
|
self.args = args or []
|
||||||
|
self.conf_env_args = conf_env_args or {}
|
||||||
|
|
||||||
def _build(self, install_dirs, reconfigure):
|
def _build(self, install_dirs, reconfigure):
|
||||||
configure_path = os.path.join(self.src_dir, "configure")
|
configure_path = os.path.join(self.src_dir, "configure")
|
||||||
@@ -210,6 +221,16 @@ class AutoconfBuilder(BuilderBase):
|
|||||||
|
|
||||||
env = self._compute_env(install_dirs)
|
env = self._compute_env(install_dirs)
|
||||||
|
|
||||||
|
# Some configure scripts need additional env values passed derived from cmds
|
||||||
|
for (k, cmd_args) in self.conf_env_args.items():
|
||||||
|
out = (
|
||||||
|
subprocess.check_output(cmd_args, env=dict(env.items()))
|
||||||
|
.decode("utf-8")
|
||||||
|
.strip()
|
||||||
|
)
|
||||||
|
if out:
|
||||||
|
env.set(k, out)
|
||||||
|
|
||||||
if not os.path.exists(configure_path):
|
if not os.path.exists(configure_path):
|
||||||
print("%s doesn't exist, so reconfiguring" % configure_path)
|
print("%s doesn't exist, so reconfiguring" % configure_path)
|
||||||
# This libtoolize call is a bit gross; the issue is that
|
# This libtoolize call is a bit gross; the issue is that
|
||||||
|
@@ -233,33 +233,29 @@ class BuildOptions(object):
|
|||||||
for d in install_dirs:
|
for d in install_dirs:
|
||||||
bindir = os.path.join(d, "bin")
|
bindir = os.path.join(d, "bin")
|
||||||
|
|
||||||
if not (
|
pkgconfig = os.path.join(d, "lib/pkgconfig")
|
||||||
manifest and manifest.get("build", "disable_env_override_pkgconfig")
|
if os.path.exists(pkgconfig):
|
||||||
):
|
add_path_entry(env, "PKG_CONFIG_PATH", pkgconfig)
|
||||||
pkgconfig = os.path.join(d, "lib/pkgconfig")
|
|
||||||
if os.path.exists(pkgconfig):
|
|
||||||
add_path_entry(env, "PKG_CONFIG_PATH", pkgconfig)
|
|
||||||
|
|
||||||
pkgconfig = os.path.join(d, "lib64/pkgconfig")
|
pkgconfig = os.path.join(d, "lib64/pkgconfig")
|
||||||
if os.path.exists(pkgconfig):
|
if os.path.exists(pkgconfig):
|
||||||
add_path_entry(env, "PKG_CONFIG_PATH", pkgconfig)
|
add_path_entry(env, "PKG_CONFIG_PATH", pkgconfig)
|
||||||
|
|
||||||
if not (manifest and manifest.get("build", "disable_env_override_path")):
|
add_path_entry(env, "CMAKE_PREFIX_PATH", d)
|
||||||
add_path_entry(env, "CMAKE_PREFIX_PATH", d)
|
|
||||||
|
|
||||||
# Allow resolving shared objects built earlier (eg: zstd
|
# Allow resolving shared objects built earlier (eg: zstd
|
||||||
# doesn't include the full path to the dylib in its linkage
|
# doesn't include the full path to the dylib in its linkage
|
||||||
# so we need to give it an assist)
|
# so we need to give it an assist)
|
||||||
if lib_path:
|
if lib_path:
|
||||||
for lib in ["lib", "lib64"]:
|
for lib in ["lib", "lib64"]:
|
||||||
libdir = os.path.join(d, lib)
|
libdir = os.path.join(d, lib)
|
||||||
if os.path.exists(libdir):
|
if os.path.exists(libdir):
|
||||||
add_path_entry(env, lib_path, libdir)
|
add_path_entry(env, lib_path, libdir)
|
||||||
|
|
||||||
# Allow resolving binaries (eg: cmake, ninja) and dlls
|
# Allow resolving binaries (eg: cmake, ninja) and dlls
|
||||||
# built by earlier steps
|
# built by earlier steps
|
||||||
if os.path.exists(bindir):
|
if os.path.exists(bindir):
|
||||||
add_path_entry(env, "PATH", bindir, append=False)
|
add_path_entry(env, "PATH", bindir, append=False)
|
||||||
|
|
||||||
# If rustc is present in the `bin` directory, set RUSTC to prevent
|
# If rustc is present in the `bin` directory, set RUSTC to prevent
|
||||||
# cargo uses the rustc installed in the system.
|
# cargo uses the rustc installed in the system.
|
||||||
|
@@ -69,8 +69,6 @@ SCHEMA = {
|
|||||||
"builder": REQUIRED,
|
"builder": REQUIRED,
|
||||||
"subdir": OPTIONAL,
|
"subdir": OPTIONAL,
|
||||||
"build_in_src_dir": OPTIONAL,
|
"build_in_src_dir": OPTIONAL,
|
||||||
"disable_env_override_pkgconfig": OPTIONAL,
|
|
||||||
"disable_env_override_path": OPTIONAL,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"msbuild": {"optional_section": True, "fields": {"project": REQUIRED}},
|
"msbuild": {"optional_section": True, "fields": {"project": REQUIRED}},
|
||||||
@@ -84,6 +82,7 @@ SCHEMA = {
|
|||||||
},
|
},
|
||||||
"cmake.defines": {"optional_section": True},
|
"cmake.defines": {"optional_section": True},
|
||||||
"autoconf.args": {"optional_section": True},
|
"autoconf.args": {"optional_section": True},
|
||||||
|
"autoconf.envcmd.LDFLAGS": {"optional_section": True},
|
||||||
"rpms": {"optional_section": True},
|
"rpms": {"optional_section": True},
|
||||||
"debs": {"optional_section": True},
|
"debs": {"optional_section": True},
|
||||||
"preinstalled.env": {"optional_section": True},
|
"preinstalled.env": {"optional_section": True},
|
||||||
@@ -101,6 +100,7 @@ SCHEMA = {
|
|||||||
# using the expression syntax to enable/disable sections
|
# using the expression syntax to enable/disable sections
|
||||||
ALLOWED_EXPR_SECTIONS = [
|
ALLOWED_EXPR_SECTIONS = [
|
||||||
"autoconf.args",
|
"autoconf.args",
|
||||||
|
"autoconf.envcmd.LDFLAGS",
|
||||||
"build",
|
"build",
|
||||||
"cmake.defines",
|
"cmake.defines",
|
||||||
"dependencies",
|
"dependencies",
|
||||||
@@ -469,8 +469,19 @@ class ManifestParser(object):
|
|||||||
|
|
||||||
if builder == "autoconf":
|
if builder == "autoconf":
|
||||||
args = self.get_section_as_args("autoconf.args", ctx)
|
args = self.get_section_as_args("autoconf.args", ctx)
|
||||||
|
conf_env_args = {}
|
||||||
|
ldflags_cmd = self.get_section_as_args("autoconf.envcmd.LDFLAGS", ctx)
|
||||||
|
if ldflags_cmd:
|
||||||
|
conf_env_args["LDFLAGS"] = ldflags_cmd
|
||||||
return AutoconfBuilder(
|
return AutoconfBuilder(
|
||||||
build_options, ctx, self, src_dir, build_dir, inst_dir, args
|
build_options,
|
||||||
|
ctx,
|
||||||
|
self,
|
||||||
|
src_dir,
|
||||||
|
build_dir,
|
||||||
|
inst_dir,
|
||||||
|
args,
|
||||||
|
conf_env_args,
|
||||||
)
|
)
|
||||||
|
|
||||||
if builder == "boost":
|
if builder == "boost":
|
||||||
|
@@ -10,8 +10,6 @@ repo_url = https://github.com/facebookexperimental/eden.git
|
|||||||
[build.os=linux]
|
[build.os=linux]
|
||||||
builder = make
|
builder = make
|
||||||
subdir = eden/scm
|
subdir = eden/scm
|
||||||
disable_env_override_pkgconfig = 1
|
|
||||||
disable_env_override_path = 1
|
|
||||||
|
|
||||||
[build.os=windows]
|
[build.os=windows]
|
||||||
# For now the biggest blocker is missing "make" on windows, but there are bound
|
# For now the biggest blocker is missing "make" on windows, but there are bound
|
||||||
@@ -53,6 +51,7 @@ fbcode/fboss/common = common
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
fb303-source
|
fb303-source
|
||||||
fbthrift-source
|
fbthrift-source
|
||||||
|
python
|
||||||
rust-shed
|
rust-shed
|
||||||
|
|
||||||
# We use the system openssl on linux
|
# We use the system openssl on linux
|
||||||
|
@@ -31,7 +31,7 @@ libnl
|
|||||||
libsai
|
libsai
|
||||||
OpenNSA
|
OpenNSA
|
||||||
re2
|
re2
|
||||||
python
|
python_3_7
|
||||||
yaml-cpp
|
yaml-cpp
|
||||||
libyaml
|
libyaml
|
||||||
CLI11
|
CLI11
|
||||||
|
@@ -8,10 +8,27 @@ python3-devel
|
|||||||
[debs]
|
[debs]
|
||||||
python3-all-dev
|
python3-all-dev
|
||||||
|
|
||||||
[download.os=linux]
|
[download]
|
||||||
url = https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tgz
|
url = https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tgz
|
||||||
sha256 = aeee681c235ad336af116f08ab6563361a0c81c537072c1b309d6e4050aa2114
|
sha256 = 316aa33f3b7707d041e73f246efedb297a70898c4b91f127f66dc8d80c596f1a
|
||||||
|
|
||||||
[build.os=linux]
|
[build]
|
||||||
builder = autoconf
|
builder = autoconf
|
||||||
subdir = Python-3.7.6
|
subdir = Python-3.8.12
|
||||||
|
|
||||||
|
[autoconf.args]
|
||||||
|
--enable-shared
|
||||||
|
--with-ensurepip=install
|
||||||
|
|
||||||
|
# python's pkg-config libffi detection is broken
|
||||||
|
# See https://bugs.python.org/issue34823 for clearest description
|
||||||
|
# and pending PR https://github.com/python/cpython/pull/20451
|
||||||
|
# The documented workaround requires an environment variable derived from
|
||||||
|
# pkg-config to be passed into its configure step
|
||||||
|
[autoconf.envcmd.LDFLAGS]
|
||||||
|
pkg-config
|
||||||
|
--libs-only-L
|
||||||
|
libffi
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
libffi
|
||||||
|
17
build/fbcode_builder/manifests/python_3_7
Normal file
17
build/fbcode_builder/manifests/python_3_7
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[manifest]
|
||||||
|
name = python_3_7
|
||||||
|
|
||||||
|
[rpms]
|
||||||
|
python3
|
||||||
|
python3-devel
|
||||||
|
|
||||||
|
[debs]
|
||||||
|
python3-all-dev
|
||||||
|
|
||||||
|
[download.os=linux]
|
||||||
|
url = https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tgz
|
||||||
|
sha256 = aeee681c235ad336af116f08ab6563361a0c81c537072c1b309d6e4050aa2114
|
||||||
|
|
||||||
|
[build.os=linux]
|
||||||
|
builder = autoconf
|
||||||
|
subdir = Python-3.7.6
|
Reference in New Issue
Block a user