| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- # -----------------------------------------------------------------------------
- # This file is part of the xPack distribution.
- # (https://xpack.github.io)
- # Copyright (c) 2020 Liviu Ionescu.
- #
- # Permission to use, copy, modify, and/or distribute this software
- # for any purpose is hereby granted, under the terms of the MIT license.
- # -----------------------------------------------------------------------------
- # Helper script used in the second edition of the xPack build
- # scripts. As the name implies, it should contain only functions and
- # should be included with 'source' by the container build scripts.
- # -----------------------------------------------------------------------------
- function start_timer()
- {
- CONTAINER_BEGIN_SECOND=$(date +%s)
- echo
- echo "Container script \"$0\" started at $(date)."
- }
- function stop_timer()
- {
- local end_second=$(date +%s)
- echo
- echo "Container script \"$0\" completed at $(date)."
- local delta_seconds=$((end_second-CONTAINER_BEGIN_SECOND))
- if [ ${delta_seconds} -lt 100 ]
- then
- echo "Duration: ${delta_seconds} seconds."
- else
- local delta_minutes=$(((delta_seconds+30)/60))
- echo "Duration: ${delta_minutes} minutes."
- fi
- }
- # -----------------------------------------------------------------------------
- function detect_container()
- {
- echo
- uname -a
- CONTAINER_DISTRO_NAME=""
- CONTAINER_UNAME="$(uname)"
- CONTAINER_NODE_PLATFORM=""
- CONTAINER_NODE_ARCH=""
- if [ "${CONTAINER_UNAME}" == "Darwin" ]
- then
- CONTAINER_BITS="64"
- CONTAINER_MACHINE="x86_64"
- CONTAINER_NODE_PLATFORM="darwin"
- CONTAINER_NODE_ARCH="x64"
- CONTAINER_DISTRO_NAME=Darwin
- CONTAINER_DISTRO_LC_NAME=darwin
- elif [ "${CONTAINER_UNAME}" == "Linux" ]
- then
- # ----- Determine distribution name and word size -----
- set +e
- CONTAINER_DISTRO_NAME=$(lsb_release -si)
- set -e
- CONTAINER_NODE_PLATFORM="linux"
- if [ -z "${CONTAINER_DISTRO_NAME}" ]
- then
- echo "Please install the lsb core package and rerun."
- CONTAINER_DISTRO_NAME="Linux"
- fi
- CONTAINER_MACHINE="$(uname -m)"
- if [ "${CONTAINER_MACHINE}" == "x86_64" ]
- then
- CONTAINER_BITS="64"
- CONTAINER_NODE_ARCH="x64"
- elif [ "${CONTAINER_MACHINE}" == "i686" ]
- then
- CONTAINER_BITS="32"
- CONTAINER_NODE_ARCH="x32"
- elif [ "${CONTAINER_MACHINE}" == "aarch64" ]
- then
- CONTAINER_BITS="64"
- CONTAINER_NODE_ARCH="arm64"
- elif [ "${CONTAINER_MACHINE}" == "armv7l" \
- -o "${CONTAINER_MACHINE}" == "armv8l" ]
- then
- CONTAINER_BITS="32"
- CONTAINER_NODE_ARCH="arm"
- else
- echo "Unknown uname -m ${CONTAINER_MACHINE}"
- exit 1
- fi
- CONTAINER_DISTRO_LC_NAME=$(echo ${CONTAINER_DISTRO_NAME} | tr "[:upper:]" "[:lower:]")
- else
- echo "Unknown uname ${CONTAINER_UNAME}"
- exit 1
- fi
- echo
- echo "Container script running on ${CONTAINER_DISTRO_NAME} ${CONTAINER_NODE_ARCH} (${CONTAINER_BITS}-bit)."
- echo "User $(whoami), in '${HOME}'"
- HAS_WINPTHREAD=${HAS_WINPTHREAD:-""}
- CONTAINER_ROOT_UMASK=${CONTAINER_ROOT_UMASK:-"000"}
- if [ -f "/.dockerenv" -a "$(whoami)" == "root" ]
- then
- umask ${CONTAINER_ROOT_UMASK}
- fi
- }
- # -----------------------------------------------------------------------------
- function fix_ownership()
- {
- if [ -f "/.dockerenv" -a "${CONTAINER_RUN_AS_ROOT}" == "y" ]
- then
- (
- xbb_activate
-
- # Set the owner of the folder and files created by the docker CentOS
- # container to match the user running the build script on the host.
- # When running on linux host, these folders and their content remain
- # owned by root if this is not done. However, on macOS
- # the owner used by Docker is the same as the macOS user, so an
- # ownership change is not realy necessary.
- echo
- echo "Changing ownership to non-root GNU/Linux user..."
- if [ -d "${BUILD_FOLDER_PATH}" ]
- then
- chown -R ${USER_ID}:${GROUP_ID} "${BUILD_FOLDER_PATH}"
- fi
- if [ -d "${INSTALL_FOLDER_PATH}" ]
- then
- chown -R ${USER_ID}:${GROUP_ID} "${INSTALL_FOLDER_PATH}"
- fi
- chown -R ${USER_ID}:${GROUP_ID} "${DEPLOY_FOLDER_PATH}"
- )
- fi
- }
- # -----------------------------------------------------------------------------
- # Hack to make pdftex ignore errors.
- # Used for newlib manuals, which issue some errors, but the
- # pdf file is generated anyway.
- function hack_pdfetex()
- {
- local bin=$(which pdfetex)
- local hacked_pdfetex="hack/pdfetex"
- mkdir -pv "$(dirname "${hacked_pdfetex}")"
- rm -rf "${hacked_pdfetex}"
- echo '#!/usr/bin/env bash' >"${hacked_pdfetex}"
- echo 'set -x' >>"${hacked_pdfetex}"
- echo 'set +e' >>"${hacked_pdfetex}"
- echo "${bin}" '$@' >>"${hacked_pdfetex}"
- echo 'set -e' >>"${hacked_pdfetex}"
- echo 'true' >>"${hacked_pdfetex}"
- chmod +x "${hacked_pdfetex}"
- export PATH="$(pwd)/$(dirname "${hacked_pdfetex}"):${PATH}"
- }
|