From cca66b9ec4e494c1d919bff0f71a820d8afab1fa Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:24:48 +0200 Subject: Adding upstream version 1.2.2. Signed-off-by: Daniel Baumann --- packaging/macos/jhb/etc/jhb.conf/jhbuild.sh | 229 ++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 packaging/macos/jhb/etc/jhb.conf/jhbuild.sh (limited to 'packaging/macos/jhb/etc/jhb.conf/jhbuild.sh') diff --git a/packaging/macos/jhb/etc/jhb.conf/jhbuild.sh b/packaging/macos/jhb/etc/jhb.conf/jhbuild.sh new file mode 100644 index 0000000..31df78c --- /dev/null +++ b/packaging/macos/jhb/etc/jhb.conf/jhbuild.sh @@ -0,0 +1,229 @@ +# SPDX-FileCopyrightText: 2021 René de Hesselle +# +# SPDX-License-Identifier: GPL-2.0-or-later + +### description ################################################################ + +# This file contains functions to download, install and configure JHBuild. + +### shellcheck ################################################################# + +# shellcheck shell=bash # no shebang as this file is intended to be sourced + +### dependencies ############################################################### + +# Nothing here. + +### variables ################################################################## + +export JHBUILDRC=$ETC_DIR/jhbuildrc +export JHBUILDRC_CUSTOM=$JHBUILDRC-custom + +JHBUILD_REQUIREMENTS="\ + certifi==2022.9.24\ + meson==0.59.2\ + ninja==1.10.2.3\ +" + +# JHBuild build system >3.38.0 (current master as of 08.03.2022) +# The last stable release (3.38.0) is missing a critical fix (commit +# a896cbf404461cab979fa3cd1c83ddf158efe83b) so we have to stay on master branch +# for the time being. +# https://gitlab.gnome.org/GNOME/jhbuild +# https://wiki.gnome.org/Projects/Jhbuild/Introduction +JHBUILD_VER=d1c5316 +JHBUILD_URL=https://gitlab.gnome.org/GNOME/jhbuild/-/archive/$JHBUILD_VER/\ +jhbuild-$JHBUILD_VER.tar.bz2 + +# A dedicated Python runtime (only) for JHBuild. It is installed and kept +# separately from the rest of the system. It won't interfere with a Python +# that might get installed as part of building modules with JHBuild. +JHBUILD_PYTHON_VER_MAJOR=3 +JHBUILD_PYTHON_VER_MINOR=8 +JHBUILD_PYTHON_VER=$JHBUILD_PYTHON_VER_MAJOR.$JHBUILD_PYTHON_VER_MINOR +JHBUILD_PYTHON_URL="https://gitlab.com/api/v4/projects/26780227/packages/\ +generic/python_macos/15/python_${JHBUILD_PYTHON_VER/./}_$(uname -m).tar.xz" +JHBUILD_PYTHON_DIR=$OPT_DIR/Python.framework/Versions/$JHBUILD_PYTHON_VER +JHBUILD_PYTHON_BIN_DIR=$JHBUILD_PYTHON_DIR/bin + +export JHBUILD_PYTHON_BIN=$JHBUILD_PYTHON_BIN_DIR/python$JHBUILD_PYTHON_VER +export JHBUILD_PYTHON_PIP=$JHBUILD_PYTHON_BIN_DIR/pip$JHBUILD_PYTHON_VER + +### functions ################################################################## + +function jhbuild_install_python +{ + # Download and extract Python.framework to OPT_DIR. + curl -L "$JHBUILD_PYTHON_URL" | tar -C "$OPT_DIR" -x + + # Create a pkg-config configuration to match our installation location. + # Note: sed changes the prefix and exec_prefix lines! + find "$JHBUILD_PYTHON_DIR"/lib/pkgconfig/*.pc \ + -type f \ + -exec sed -i "" "s|prefix=.*|prefix=$JHBUILD_PYTHON_DIR|" {} \; + + jhbuild_set_python_interpreter + + # add to PYTHONPATH + echo "../../../../../../../usr/lib/python$JHBUILD_PYTHON_VER/site-packages"\ + > "$OPT_DIR"/Python.framework/Versions/$JHBUILD_PYTHON_VER/lib/\ +python$JHBUILD_PYTHON_VER/site-packages/jhb.pth +} + +function jhbuild_set_python_interpreter +{ + # Symlink binaries to USR_DIR/bin. + if command -v gln 1>/dev/null; then + local gnu=g # necessary for union mount + fi + ${gnu}ln -sf "$JHBUILD_PYTHON_BIN" "$USR_DIR"/bin + ${gnu}ln -sf "$JHBUILD_PYTHON_PIP" "$USR_DIR"/bin + + # Set interpreter to the one in USR_DIR/bin. + while IFS= read -r -d '' file; do + local file_type + file_type=$(file "$file") + if [[ $file_type = *"Python script"* ]]; then + sed -i "" "1 s|.*|#!$USR_DIR/bin/python$JHBUILD_PYTHON_VER|" "$file" + fi + done < <(find "$USR_DIR"/bin/ -maxdepth 1 -type f -print0) +} + +function jhbuild_install +{ + # We use our own custom Python. + jhbuild_install_python + + # Install dependencies. + # shellcheck disable=SC2086 # we need word splitting for requirements + $JHBUILD_PYTHON_PIP install --prefix=$USR_DIR $JHBUILD_REQUIREMENTS + + function pem_remove_expired + { + local pem_bundle=$1 + + # BSD's csplit does not support '{*}' (it's a GNU extension) + csplit -n 3 -k -f "$TMP_DIR"/pem- "$pem_bundle" \ + '/END CERTIFICATE/+1' '{999}' >/dev/null 2>&1 || true + + for pem in "$TMP_DIR"/pem-*; do + if [ "$(stat -f%z "$pem")" -eq 0 ]; then + rm "$pem" # the csplit command above created one superfluous empty file + elif ! openssl x509 -checkend 0 -noout -in "$pem"; then + echo_d "removing $pem: $(openssl x509 -enddate -noout -in "$pem")" + rm "$pem" + fi + done + + cat "$TMP_DIR"/pem-??? > "$pem_bundle" + } + + local cacert="$USR_DIR"/lib/python$JHBUILD_PYTHON_VER/site-packages/certifi/\ +cacert.pem + + pem_remove_expired "$cacert" + + # Download JHBuild. Setting CURL_CA_BUNDLE is required on older macOS, e.g. + # High Sierra. + local archive + archive=$PKG_DIR/$(basename $JHBUILD_URL) + CURL_CA_BUNDLE=$cacert curl -o "$archive" -L "$JHBUILD_URL" + tar -C "$SRC_DIR" -xf "$archive" + + ( # Install JHBuild. + cd "$SRC_DIR"/jhbuild-$JHBUILD_VER || exit 1 + ./autogen.sh \ + --prefix="$USR_DIR" \ + --with-python="$JHBUILD_PYTHON_BIN" + make + make install + ) +} + +function jhbuild_configure +{ + local moduleset=$1 + + moduleset=${moduleset:-jhb.modules} + local suffix + suffix=$(basename -s .modules "$moduleset") + + # install custom moduleset + if [ "$suffix" != "jhb" ]; then + local moduleset_dir + moduleset_dir=$(dirname "$(greadlink -f "$moduleset")") + rsync -a --delete "$moduleset_dir"/ "$ETC_DIR/modulesets/$suffix/" + fi + + local target + target=$(/usr/libexec/PlistBuddy -c "Print \ + :DefaultProperties:MACOSX_DEPLOYMENT_TARGET" "$SDKROOT"/SDKSettings.plist) + + # create custom jhbuildrc configuration + { + echo "# -*- mode: python -*-" + + # moduleset + echo "modulesets_dir = '$ETC_DIR/modulesets/$suffix'" + echo "moduleset = '$(basename "$moduleset")'" + echo "use_local_modulesets = True" + + # basic directory layout + echo "buildroot = '$BLD_DIR'" + echo "checkoutroot = '$SRC_DIR'" + echo "prefix = '$VER_DIR'" + echo "tarballdir = '$PKG_DIR'" + echo "top_builddir = '$VAR_DIR/jhbuild'" + + # setup macOS SDK + echo "setup_sdk(target=\"$target\")" + + # set release build + echo "setup_release()" + + # Use compiler binaries from our own USR_DIR/bin if present, the intention + # being that these are symlinks pointing to ccache if that has been + # installed (see ccache.sh for details). + if [ -x "$USR_DIR/bin/gcc" ]; then + echo "os.environ[\"CC\"] = \"$USR_DIR/bin/gcc\"" + echo "os.environ[\"OBJC\"] = \"$USR_DIR/bin/gcc\"" + fi + if [ -x "$USR_DIR/bin/g++" ]; then + echo "os.environ[\"CXX\"] = \"$USR_DIR/bin/g++\"" + fi + + # certificates for https + echo "os.environ[\"SSL_CERT_FILE\"] = \ + \"$USR_DIR/lib/python$JHBUILD_PYTHON_VER/site-packages/certifi/cacert.pem\"" + echo "os.environ[\"REQUESTS_CA_BUNDLE\"] = \ + \"$USR_DIR/lib/python$JHBUILD_PYTHON_VER/site-packages/certifi/cacert.pem\"" + + # user home directory + echo "os.environ[\"HOME\"] = \"$HOME\"" + + # less noise on the terminal if not CI + if ! $CI; then + echo "quiet_mode = True" + echo "progress_bar = True" + fi + + # add moduleset-specific settings if exist + local moduleset_rc=$ETC_DIR/modulesets/$suffix/jhbuildrc + if [ -f "$moduleset_rc" ]; then + cat "$moduleset_rc" + fi + + } > "$JHBUILDRC-$suffix" + + if command -v gln 1>/dev/null; then + local gnu=g # necessary for union mount + fi + ${gnu}ln -sf "$(basename "$JHBUILDRC-$suffix")" "$JHBUILDRC_CUSTOM" + + # Update the paths to Python. + jhbuild_set_python_interpreter +} + +### main ####################################################################### + +# Nothing here. \ No newline at end of file -- cgit v1.2.3