forked from mirrors/gecko-dev
On OSX, depending on the node used to build python, lzma support was available or not (depending on local setup). Then it could fail at runtime if another node was used. Build xz from source and use it as a build dependency to always provide lzma on OSX, as we already do on Linux and Windows. As a side effect, provide more verbose output during the post link process. Differential Revision: https://phabricator.services.mozilla.com/D191044
108 lines
4.6 KiB
Bash
Executable file
108 lines
4.6 KiB
Bash
Executable file
#!/bin/sh
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
#
|
|
# This script builds the official interpreter for the python language,
|
|
# while also packing in a few default extra packages.
|
|
|
|
set -e
|
|
set -x
|
|
|
|
# Required fetch artifact
|
|
clang_bindir=${MOZ_FETCHES_DIR}/clang/bin
|
|
clang_libdir=${MOZ_FETCHES_DIR}/clang/lib
|
|
python_src=${MOZ_FETCHES_DIR}/cpython-source
|
|
xz_prefix=${MOZ_FETCHES_DIR}/xz
|
|
|
|
# Make the compiler-rt available to clang.
|
|
env UPLOAD_DIR= $GECKO_PATH/taskcluster/scripts/misc/repack-clang.sh
|
|
|
|
# Extra setup per platform
|
|
case `uname -s` in
|
|
Darwin)
|
|
# Use taskcluster clang instead of host compiler on OSX
|
|
export PATH=${clang_bindir}:${PATH}
|
|
export CC=clang
|
|
export CXX=clang++
|
|
export LDFLAGS=-fuse-ld=lld
|
|
|
|
case `uname -m` in
|
|
aarch64)
|
|
macosx_version_min=11.0
|
|
;;
|
|
*)
|
|
macosx_version_min=10.12
|
|
;;
|
|
esac
|
|
macosx_sdk=14.0
|
|
# NOTE: both CFLAGS and CPPFLAGS need to be set here, otherwise
|
|
# configure step fails.
|
|
sysroot_flags="-isysroot ${MOZ_FETCHES_DIR}/MacOSX${macosx_sdk}.sdk -mmacosx-version-min=${macosx_version_min}"
|
|
export CPPFLAGS="${sysroot_flags} -I${xz_prefix}/include"
|
|
export CFLAGS=${sysroot_flags}
|
|
export LDFLAGS="${LDFLAGS} ${sysroot_flags} -L${xz_prefix}/lib"
|
|
configure_flags_extra=--with-openssl=/usr/local/opt/openssl
|
|
|
|
# see https://bugs.python.org/issue44065
|
|
sed -i -e 's,$CC --print-multiarch,:,' ${python_src}/configure
|
|
export LDFLAGS="${LDFLAGS} -Wl,-rpath -Wl,@loader_path/../.."
|
|
;;
|
|
Linux)
|
|
# Use host gcc on Linux
|
|
export LDFLAGS="${LDFLAGS} -Wl,-rpath,\\\$ORIGIN/../.."
|
|
;;
|
|
esac
|
|
|
|
# Patch Python to honor MOZPYTHONHOME instead of PYTHONHOME. That way we have a
|
|
# relocatable python for free, while not interfering with the system Python that
|
|
# already honors PYTHONHOME.
|
|
find ${python_src} -type f -print0 | xargs -0 perl -i -pe "s,PYTHONHOME,MOZPYTHONHOME,g"
|
|
|
|
# Actual build
|
|
work_dir=`pwd`
|
|
tardir=python
|
|
|
|
cd `mktemp -d`
|
|
${python_src}/configure --prefix=/${tardir} --enable-optimizations ${configure_flags_extra} || { exit_status=$? && cat config.log && exit $exit_status ; }
|
|
export MAKEFLAGS=-j`nproc`
|
|
make
|
|
make DESTDIR=${work_dir} install
|
|
cd ${work_dir}
|
|
|
|
${work_dir}/python/bin/python3 -m pip install --upgrade pip==23.0
|
|
${work_dir}/python/bin/python3 -m pip install -r ${GECKO_PATH}/build/psutil_requirements.txt -r ${GECKO_PATH}/build/zstandard_requirements.txt
|
|
|
|
case `uname -s` in
|
|
Darwin)
|
|
cp /usr/local/opt/openssl/lib/libssl*.dylib ${work_dir}/python/lib/
|
|
cp /usr/local/opt/openssl/lib/libcrypto*.dylib ${work_dir}/python/lib/
|
|
cp ${xz_prefix}/lib/liblzma.dylib ${work_dir}/python/lib/
|
|
|
|
# Instruct the loader to search for the lib in rpath instead of the one used during linking
|
|
install_name_tool -change /usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib @rpath/libssl.1.1.dylib ${work_dir}/python/lib/python3.8/lib-dynload/_ssl.cpython-38-darwin.so
|
|
install_name_tool -change /usr/local/opt/openssl@1.1/lib/libcrypto.1.1.dylib @rpath/libcrypto.1.1.dylib ${work_dir}/python/lib/python3.8/lib-dynload/_ssl.cpython-38-darwin.so
|
|
otool -L ${work_dir}/python/lib/python3.8/lib-dynload/_ssl.cpython-38-darwin.so | grep @rpath/libssl.1.1.dylib
|
|
|
|
|
|
install_name_tool -change /xz/lib/liblzma.5.dylib @rpath/liblzma.5.dylib ${work_dir}/python/lib/python3.8/lib-dynload/_lzma.cpython-38-darwin.so
|
|
otool -L ${work_dir}/python/lib/python3.8/lib-dynload/_lzma.cpython-38-darwin.so | grep @rpath/liblzma.5.dylib
|
|
|
|
# Also modify the shipped libssl to use the shipped libcrypto
|
|
install_name_tool -change /usr/local/Cellar/openssl@1.1/1.1.1h/lib/libcrypto.1.1.dylib @rpath/libcrypto.1.1.dylib ${work_dir}/python/lib/libssl.1.1.dylib
|
|
otool -L ${work_dir}/python/lib/libssl.1.1.dylib | grep @rpath/libcrypto.1.1.dylib
|
|
|
|
# sanity check
|
|
${work_dir}/python/bin/python3 -c "import ssl"
|
|
${work_dir}/python/bin/python3 -c "import lzma"
|
|
;;
|
|
Linux)
|
|
cp /usr/lib/x86_64-linux-gnu/libffi.so.* ${work_dir}/python/lib/
|
|
cp /usr/lib/x86_64-linux-gnu/libssl.so.* ${work_dir}/python/lib/
|
|
cp /usr/lib/x86_64-linux-gnu/libcrypto.so.* ${work_dir}/python/lib/
|
|
cp /lib/x86_64-linux-gnu/libncursesw.so.* ${work_dir}/python/lib/
|
|
cp /lib/x86_64-linux-gnu/libtinfo.so.* ${work_dir}/python/lib/
|
|
;;
|
|
esac
|
|
|
|
$(dirname $0)/pack.sh ${tardir}
|