diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-14 19:22:08 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-14 19:22:08 +0000 |
commit | 55fffa809312f6c0ae40528fd1ee66b7559c4650 (patch) | |
tree | bb6b3e63b35220d36bdc654f784a985e88ba1cd2 /ci-legacy/lib/cacheable_install_functions.inc.sh | |
parent | Releasing progress-linux version 0.17.0-3~progress7.99u1. (diff) | |
download | rnp-55fffa809312f6c0ae40528fd1ee66b7559c4650.tar.xz rnp-55fffa809312f6c0ae40528fd1ee66b7559c4650.zip |
Merging upstream version 0.17.1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ci-legacy/lib/cacheable_install_functions.inc.sh')
-rw-r--r-- | ci-legacy/lib/cacheable_install_functions.inc.sh | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/ci-legacy/lib/cacheable_install_functions.inc.sh b/ci-legacy/lib/cacheable_install_functions.inc.sh new file mode 100644 index 0000000..b58d8d9 --- /dev/null +++ b/ci-legacy/lib/cacheable_install_functions.inc.sh @@ -0,0 +1,248 @@ +#!/usr/bin/env bash +# shellcheck disable=SC1090 +# shellcheck disable=SC1091 +# shellcheck disable=SC2164 +# +# All of the following functions install things into the +# CACHE_DIR, so they could be safely skipped in case of a +# cache hit. Conversely, these should not attempt to export +# environment variables (unless for self consumption), nor +# modify other system parts (again, unless for self +# consumption), as these will not be available in case of +# cache hits. + +install_botan() { + # botan + local botan_build=${LOCAL_BUILDS}/botan + local botan_v=${BOTAN_VERSION::1} + if [[ ! -e "${BOTAN_INSTALL}/lib/libbotan-${botan_v}.so" ]] && \ + [[ ! -e "${BOTAN_INSTALL}/lib/libbotan-${botan_v}.dylib" ]] && \ + [[ ! -e "${BOTAN_INSTALL}/lib/libbotan-${botan_v}.a" ]]; then + + if [[ -d "${botan_build}" ]]; then + rm -rf "${botan_build}" + fi + + git clone --depth 1 --branch "${BOTAN_VERSION}" https://github.com/randombit/botan "${botan_build}" + + local osparam=() + local cpuparam=() + local run=run + local osslparam=() + local modules="" + [[ "${botan_v}" == "2" ]] && osslparam+=("--without-openssl") && modules=$(<ci/botan-modules tr '\n' ',') + [[ "${botan_v}" == "3" ]] && modules=$(<ci/botan3-modules tr '\n' ',') + + pushd "${botan_build}" + # Position independent code is a default for shared libraries at any xNIX platform + # but it makes no sense and is not supported for Windows + local extra_cflags="-fPIC" + case "${OS}" in + linux) + case "${DIST_VERSION}" in + centos-8|centos-9|fedora-*|debian-*) + run=run_in_python_venv + ;; + esac + ;; + esac + + [[ -z "$CPU" ]] || cpuparam=(--cpu="$CPU" --disable-cc-tests) + + local build_target="shared,cli" + is_use_static_dependencies && build_target="static,cli" + + "${run}" ./configure.py --prefix="${BOTAN_INSTALL}" --with-debug-info --extra-cxxflags="-fno-omit-frame-pointer ${extra_cflags}" \ + ${osparam+"${osparam[@]}"} ${cpuparam+"${cpuparam[@]}"} --without-documentation ${osslparam+"${osslparam[@]}"} --build-targets="${build_target}" \ + --minimized-build --enable-modules="$modules" + ${MAKE} -j"${MAKE_PARALLEL}" install + popd + fi +} + +# TODO: +# /tmp/rnp-local-installs/jsonc-install/lib +# | If you ever happen to want to link against installed libraries +# | in a given directory, LIBDIR, you must either use libtool, and +# | specify the full pathname of the library, or use the '-LLIBDIR' +# | flag during linking and do at least one of the following: +# | - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable +# | during execution +# | - add LIBDIR to the 'LD_RUN_PATH' environment variable +# | during linking +# | - use the '-Wl,-rpath -Wl,LIBDIR' linker flag +# | - have your system administrator add LIBDIR to '/etc/ld.so.conf' +install_jsonc() { + local jsonc_build=${LOCAL_BUILDS}/json-c + if [[ ! -e "${JSONC_INSTALL}/lib/libjson-c.so" ]] && \ + [[ ! -e "${JSONC_INSTALL}/lib/libjson-c.dylib" ]] && \ + [[ ! -e "${JSONC_INSTALL}/lib/libjson-c.a" ]]; then + + if [ -d "${jsonc_build}" ]; then + rm -rf "${jsonc_build}" + fi + + mkdir -p "${jsonc_build}" + pushd "${jsonc_build}" + wget https://s3.amazonaws.com/json-c_releases/releases/json-c-"${JSONC_VERSION}".tar.gz -O json-c.tar.gz + tar xzf json-c.tar.gz --strip 1 + + autoreconf -ivf + local cpuparam=() + [[ -z "$CPU" ]] || cpuparam=(--build="$CPU") + local build_type_args=( + "--enable-$(is_use_static_dependencies && echo 'static' || echo 'shared')" + "--disable-$(is_use_static_dependencies && echo 'shared' || echo 'static')" + ) + env CFLAGS="-fPIC -fno-omit-frame-pointer -Wno-implicit-fallthrough -g" ./configure ${cpuparam+"${cpuparam[@]}"} "${build_type_args[@]}" --prefix="${JSONC_INSTALL}" + ${MAKE} -j"${MAKE_PARALLEL}" install + popd + fi +} + +_install_gpg() { + local VERSION_SWITCH=$1 + local NPTH_VERSION=$2 + local LIBGPG_ERROR_VERSION=$3 + local LIBGCRYPT_VERSION=$4 + local LIBASSUAN_VERSION=$5 + local LIBKSBA_VERSION=$6 + local PINENTRY_VERSION=$7 + local GNUPG_VERSION=$8 + + local gpg_build="$PWD" + # shellcheck disable=SC2153 + local gpg_install="${GPG_INSTALL}" + mkdir -p "${gpg_build}" "${gpg_install}" + git clone --depth 1 https://github.com/rnpgp/gpg-build-scripts + pushd gpg-build-scripts + + local cpuparam=() + [[ -z "$CPU" ]] || cpuparam=(--build="$CPU") + + # configure_opts="\ + # --prefix=${gpg_install} \ + # --with-libgpg-error-prefix=${gpg_install} \ + # --with-libassuan-prefix=${gpg_install} \ + # --with-libgcrypt-prefix=${gpg_install} \ + # --with-ksba-prefix=${gpg_install} \ + # --with-npth-prefix=${gpg_install} \ + # --disable-doc \ + # --extra-cflags=\"-O3 -fomit-frame-pointer\" \ + # --enable-pinentry-curses \ + # --disable-pinentry-emacs \ + # --disable-pinentry-gtk2 \ + # --disable-pinentry-gnome3 \ + # --disable-pinentry-qt \ + # --disable-pinentry-qt4 \ + # --disable-pinentry-qt5 \ + # --disable-pinentry-tqt \ + # --disable-pinentry-fltk \ + # --enable-maintainer-mode \ + # ${cpuparam+"${cpuparam[@]}"}" + + local configure_opts=( + "--prefix=${gpg_install}" + "--with-libgpg-error-prefix=${gpg_install}" + "--with-libassuan-prefix=${gpg_install}" + "--with-libgcrypt-prefix=${gpg_install}" + "--with-ksba-prefix=${gpg_install}" + "--with-npth-prefix=${gpg_install}" + "--disable-doc" + "--enable-pinentry-curses" + "--disable-pinentry-emacs" + "--disable-pinentry-gtk2" + "--disable-pinentry-gnome3" + "--disable-pinentry-qt" + "--disable-pinentry-qt4" + "--disable-pinentry-qt5" + "--disable-pinentry-tqt" + "--disable-pinentry-fltk" + "--enable-maintainer-mode" + "--enable-install-gpg-error-config" + ${cpuparam+"${cpuparam[@]}"} + ) + + local common_args=( + --force-autogen +# --verbose commented out to speed up recurring CI builds +# --trace uncomment if you are debugging CI + --build-dir "${gpg_build}" + --configure-opts "${configure_opts[*]}" + ) + + case "${OS}" in + linux) + if [[ "${DIST}" != "ubuntu" ]]; then + common_args+=(--ldconfig) + fi + ;; + esac + + # For "tee"-ing to /etc/ld.so.conf.d/gpg-from_build_scripts.conf from option `--ldconfig` + if [[ "${SUDO}" = "sudo" && "${DIST}" != "ubuntu" ]]; then + common_args+=(--sudo) + fi + + # Workaround to correctly build pinentry on the latest GHA on macOS. Most likely there is a better solution. + export CFLAGS="-D_XOPEN_SOURCE_EXTENDED" + export CXXFLAGS="-D_XOPEN_SOURCE_EXTENDED" + + # Always build GnuPG with gcc, even if we are testing clang + # ref https://github.com/rnpgp/rnp/issues/1669 + export CC="gcc" + export CXX="g++" + + for component in libgpg-error:$LIBGPG_ERROR_VERSION \ + libgcrypt:$LIBGCRYPT_VERSION \ + libassuan:$LIBASSUAN_VERSION \ + libksba:$LIBKSBA_VERSION \ + npth:$NPTH_VERSION \ + pinentry:$PINENTRY_VERSION \ + gnupg:$GNUPG_VERSION; do + local name="${component%:*}" + local version="${component#*:}" + + ./install_gpg_component.sh \ + --component-name "$name" \ + --"$VERSION_SWITCH" "$version" \ + "${common_args[@]}" + done + popd +} + + +install_gpg() { + local gpg_build=${LOCAL_BUILDS}/gpg + + # shellcheck disable=SC2153 + if [[ ! -e "${GPG_INSTALL}/bin/gpg" ]]; then + mkdir -p "${gpg_build}" + pushd "${gpg_build}" + + # shellcheck disable=SC2153 + case "${GPG_VERSION}" in + stable) + # npth libgpg-error libgcrypt libassuan libksba pinentry gnupg + _install_gpg component-version 1.6 1.46 1.10.1 2.5.5 1.6.3 1.2.1 2.4.0 + ;; + lts) + # npth libgpg-error libgcrypt libassuan libksba pinentry gnupg + _install_gpg component-version 1.6 1.46 1.8.10 2.5.5 1.6.3 1.2.1 2.2.41 + ;; + # beta) + # npth libgpg-error libgcrypt libassuan libksba pinentry gnupg + # _install_gpg component-git-ref 2501a48 f73605e d9c4183 909133b 3df0cd3 0e2e53c c6702d7 + # _install_gpg component-git-ref 7e45b50 c66594d cf88dca 57cf9d6 4243085 6e8ad31 d4e5979 + # ;; + "2.3.1") + # npth libgpg-error libgcrypt libassuan libksba pinentry gnupg + _install_gpg component-version 1.6 1.42 1.9.3 2.5.5 1.6.0 1.1.1 2.3.1 + ;; + *) + >&2 echo "\$GPG_VERSION is set to invalid value: ${GPG_VERSION}" + exit 1 + esac + popd + fi +} |