Merge pull request #553 from bensuperpc/Update_scripts

Update script and CI
This commit is contained in:
Bensuperpc 2021-08-09 08:39:05 +02:00 committed by GitHub
commit 0a5eeacfdb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 95 additions and 78 deletions

View File

@ -9,8 +9,8 @@ jobs:
- uses: actions/stale@v4
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
exempt-issue-milestones: 'future,alpha,beta,release'
exempt-pr-milestones: 'bugfix,improvement'
exempt-issue-milestones: 'future,alpha,beta,release,bugfix,improvement,enhancement,help wanted'
exempt-pr-milestones: 'bugfix,improvement,enhancement,help wanted'
exempt-all-pr-assignees: true
stale-issue-message: 'This issue is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 30 days.'
stale-pr-message: 'This PR is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 30 days.'

View File

@ -226,7 +226,7 @@ purge: clean
# Check bash syntax
bash-check:
find . -type f \( -name "*.sh" -o -name "*.bash" \) -print0 | xargs -0 -P"$(shell nproc)" -I{} \
$(SHELLCHECK) --check-sourced --color=auto --format=gcc --severity=error --shell=bash --enable=all "{}"
$(SHELLCHECK) --check-sourced --color=auto --format=gcc --severity=warning --shell=bash --enable=all "{}"
#
# testing implicit rule

View File

@ -14,33 +14,25 @@ Cross compiling toolchains in Docker images.
- Clean separation of build tools, source code, and build artifacts.
- Commands in the container are run as the calling user, so that any
created files have the expected ownership, (i.e. not root).
- Make variables ([CC]{.title-ref}, [LD]{.title-ref} etc) are set to
- Make variables **CC**, **CXX**, **LD** etc) are set to
point to the appropriate tools in the container.
- Recent [CMake](https://cmake.org) and ninja are precompiled.
- [Conan.io](https://www.conan.io) can be used as a package manager.
- Toolchain files configured for CMake.
- Current directory is mounted as the container\'s workdir, `/work`.
- Works with the [Docker for
Mac](https://docs.docker.com/docker-for-mac/) and [Docker for
Windows](https://docs.docker.com/docker-for-windows/).
- Support using alternative container executor by setting
[OCI_EXE]{.title-ref} environment variable. By default, it searches
- Works with the [Docker for Mac](https://docs.docker.com/docker-for-mac/) and [Docker for Windows](https://docs.docker.com/docker-for-windows/).
- Support using alternative container executor by setting **OCI_EXE** environment variable. By default, it searches
for [docker]{.title-ref} and [podman](https://podman.io) executable.
## Examples
1. `dockcross make`: Build the *Makefile* in the current directory.
2. `dockcross cmake -Bbuild -H. -GNinja`: Run CMake with a build
directory `./build` for a *CMakeLists.txt* file in the current
directory and generate `ninja` build configuration files.
2. `dockcross cmake -Bbuild -H. -GNinja`: Run CMake with a build directory `./build` for a *CMakeLists.txt* file in the current directory and generate `ninja` build configuration files.
3. `dockcross ninja -Cbuild`: Run ninja in the `./build` directory.
4. `dockcross bash -c '$CC test/C/hello.c -o hello'`: Build the
*hello.c* file with the compiler identified with the `CC`
environmental variable in the build environment.
4. `dockcross bash -c '$CC test/C/hello.c -o hello'`: Build the *hello.c* file with the compiler identified with the `CC` environmental variable in the build environment.
5. `dockcross bash`: Run an interactive shell in the build environment.
Note that commands are executed verbatim. If any shell processing for
environment variable expansion or redirection is required, please use
Note that commands are executed verbatim. If any shell processing for environment variable expansion or redirection is required, please use
```bash
bash -c "<command args>"
```

View File

@ -25,7 +25,7 @@ if ! command -v git &> /dev/null; then
exit 1
fi
if [[ "${CMAKE_VERSION}" == "" ]]; then
if [[ -z "${CMAKE_VERSION}" ]]; then
echo >&2 'error: CMAKE_VERSION env. variable must be set to a non-empty value'
exit 1
fi
@ -33,16 +33,16 @@ fi
cd /usr/src
# If the first link doesn't work, it will use the mirror on github
git clone "$CMAKE_URL" CMake -b v$CMAKE_VERSION --depth 1 \
|| git clone "$CMAKE_MIRROR_URL" CMake -b v$CMAKE_VERSION --depth 1
git clone "$CMAKE_URL" CMake -b "v$CMAKE_VERSION" --depth 1 \
|| git clone "$CMAKE_MIRROR_URL" CMake -b "v$CMAKE_VERSION" --depth 1
mkdir /usr/src/CMake-build
cd /usr/src/CMake-build
${WRAPPER} /usr/src/CMake/bootstrap \
--parallel=$(nproc) \
--parallel="$(nproc)" \
-- -DCMAKE_USE_OPENSSL=OFF
${WRAPPER} make -j$(nproc)
${WRAPPER} make -j"$(nproc)"
mkdir /usr/src/CMake-ssl-build
@ -55,7 +55,7 @@ ${WRAPPER} /usr/src/CMake-build/bin/cmake \
-DCMAKE_USE_OPENSSL:BOOL=ON \
-DOPENSSL_ROOT_DIR:PATH=/usr/local/ssl \
../CMake
${WRAPPER} make -j$(nproc) install
${WRAPPER} make -j"$(nproc)" install
# Cleanup install tree
cd /usr/src/cmake-$CMAKE_VERSION

View File

@ -18,7 +18,7 @@ function do_curl_build {
# We do this shared to avoid obnoxious linker issues where git couldn't
# link properly. If anyone wants to make this build statically go for it.
LIBS=-ldl CFLAGS=-Wl,--exclude-libs,ALL ./configure --with-ssl --disable-static > /dev/null
make -j$(nproc) > /dev/null
make -j"$(nproc)" > /dev/null
make install > /dev/null
}

View File

@ -12,7 +12,7 @@ if ! command -v tar &> /dev/null; then
exit 1
fi
if [[ "${GIT_VERSION}" == "" ]]; then
if [[ -z "${GIT_VERSION}" ]]; then
echo >&2 'error: GIT_VERSION env. variable must be set to a non-empty value'
exit 1
fi
@ -32,18 +32,18 @@ curl --connect-timeout 20 \
--retry-max-time 40 \
-# -LO $url
tar xvzf git-${GIT_VERSION}.tar.gz --no-same-owner
rm -f git-${GIT_VERSION}.tar.gz
tar xvzf "git-${GIT_VERSION}.tar.gz" --no-same-owner
rm -f "git-${GIT_VERSION}.tar.gz"
pushd git-${GIT_VERSION}
pushd "git-${GIT_VERSION}"
./configure --prefix=/usr/local --with-curl
make -j$(nproc)
make -j"$(nproc)"
make install
popd
ldconfig
rm -rf git-${GIT_VERSION}
rm -rf "git-${GIT_VERSION}"
# turn the detached message off
git config --global advice.detachedHead false

View File

@ -59,7 +59,7 @@ PERL_DOWNLOAD_URL=https://www.cpan.org/src/5.0
function do_perl_build {
${WRAPPER} sh Configure -des -Dprefix=/opt/perl > /dev/null
${WRAPPER} make -j$(nproc) > /dev/null
${WRAPPER} make -j"$(nproc)" > /dev/null
${WRAPPER} make install > /dev/null
}
@ -84,7 +84,7 @@ function build_perl {
function do_openssl_build {
${WRAPPER} ./config no-shared -fPIC $CONFIG_FLAG --prefix=/usr/local/ssl --openssldir=/usr/local/ssl > /dev/null
${WRAPPER} make -j$(nproc) > /dev/null
${WRAPPER} make -j"$(nproc)" > /dev/null
${WRAPPER} make install_sw > /dev/null
}

View File

@ -25,13 +25,13 @@ while [ $# -gt 0 ]; do
done
# Download
wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz
tar xvf Python-${PYTHON_VERSION}.tgz
wget "https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz"
tar xvf "Python-${PYTHON_VERSION}.tgz"
# Configure, build and install
cd Python-${PYTHON_VERSION}
cd "Python-${PYTHON_VERSION}" || exit 1
# Disable --enable-shared --enable-optimizations --prefix=/usr/local/python-${PYTHON_VERSION}
./configure --with-ensurepip=install
make -j$(nproc)
make -j"$(nproc) "
make install #altinstall
ln -s /usr/local/bin/python3 /usr/local/bin/python
@ -39,4 +39,4 @@ ln -s /usr/local/bin/pip3 /usr/local/bin/pip
# Clean
cd ..
rm -rf Python-${PYTHON_VERSION}
rm -rf "Python-${PYTHON_VERSION}"

View File

@ -41,20 +41,20 @@ command:update-image() {
}
help:update-image() {
echo Pull the latest $FINAL_IMAGE .
echo "Pull the latest $FINAL_IMAGE ."
}
command:update-script() {
if cmp -s <( $OCI_EXE run --rm $FINAL_IMAGE ) $0; then
echo $0 is up to date
echo "$0 is up to date"
else
echo -n Updating $0 '... '
echo -n "Updating $0 ... "
$OCI_EXE run --rm $FINAL_IMAGE > $0 && echo ok
fi
}
help:update-image() {
echo Update $0 from $FINAL_IMAGE .
echo "Update $0 from $FINAL_IMAGE ."
}
command:update() {
@ -63,7 +63,7 @@ command:update() {
}
help:update() {
echo Pull the latest $FINAL_IMAGE, and then update $0 from that.
echo "Pull the latest $FINAL_IMAGE, and then update $0 from that."
}
command:help() {

View File

@ -24,8 +24,8 @@ fi
# The dockcross script sets the BUILDER_UID and BUILDER_GID vars.
if [[ -n $BUILDER_UID ]] && [[ -n $BUILDER_GID ]]; then
groupadd -o -g $BUILDER_GID $BUILDER_GROUP 2> /dev/null
useradd -o -m -g $BUILDER_GID -u $BUILDER_UID $BUILDER_USER 2> /dev/null
groupadd -o -g "$BUILDER_GID" "$BUILDER_GROUP" 2> /dev/null
useradd -o -m -g "$BUILDER_GID" -u "$BUILDER_UID" "$BUILDER_USER" 2> /dev/null
export HOME=/home/${BUILDER_USER}
shopt -s dotglob
cp -r /root/* $HOME/
@ -37,8 +37,8 @@ if [[ -n $BUILDER_UID ]] && [[ -n $BUILDER_GID ]]; then
fi
# Enable passwordless sudo capabilities for the user
chown root:$BUILDER_GID $(which gosu)
chmod +s $(which gosu); sync
chown root:$BUILDER_GID "$(which gosu)"
chmod +s "$(which gosu)"; sync
# Execute project specific pre execution hook
if [[ -e /work/.dockcross ]]; then

View File

@ -28,7 +28,7 @@ if ! command -v tar &> /dev/null; then
exit 1
fi
if [[ "${CMAKE_VERSION}" == "" ]]; then
if [[ -z "${CMAKE_VERSION}" ]]; then
echo >&2 'error: CMAKE_VERSION env. variable must be set to a non-empty value'
exit 1
fi
@ -45,10 +45,10 @@ curl --connect-timeout 30 \
--retry-max-time 30 \
-# -LO $url
tar -xzvf ${CMAKE_ROOT}.tar.gz
rm -f ${CMAKE_ROOT}.tar.gz
tar -xzvf "${CMAKE_ROOT}.tar.gz"
rm -f "${CMAKE_ROOT}.tar.gz"
cd ${CMAKE_ROOT}
cd "${CMAKE_ROOT}"
rm -rf doc man
rm -rf bin/cmake-gui

View File

@ -89,7 +89,7 @@ BOOTSTRAP_PREFIX="${CTNG}/prefix"
./bootstrap
./configure \
--prefix "${BOOTSTRAP_PREFIX}"
make -j$(nproc)
make -j"$(nproc)"
make install
##

View File

@ -14,7 +14,7 @@ if ! command -v gpg &> /dev/null; then
fi
GOSU_VERSION=1.12
dpkgArch=$(if test $(uname -m) = "x86_64"; then echo amd64; else echo i386; fi)
dpkgArch=$(if test "$(uname -m)" = "x86_64"; then echo amd64; else echo i386; fi)
url="https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${dpkgArch}"
url_key="https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${dpkgArch}.asc"

View File

@ -1,26 +0,0 @@
#!/bin/bash
set -euo pipefail
# More info: https://github.com/GoogleContainerTools/container-diff
if (( $# < 1 || $# > 2 )); then
echo "Need 1 or 2 arguments: <img1> <img2>"
exit 1
fi
if (( $# == 1 )); then
container-diff analyze $1 --type=history 2>&1 | tee -a analyze-history.txt
container-diff analyze $1 --type=file 2>&1 | tee -a analyze-file.txt
container-diff analyze $1 --type=size 2>&1 | tee -a analyze-size.txt
container-diff analyze $1 --type=apt 2>&1 | tee -a analyze-apt.txt
container-diff analyze $1 --type=pip 2>&1 | tee -a analyze-pip.txt
fi
if (( $# == 2 )); then
container-diff diff $1 $2 --type=history 2>&1 | tee -a diff-history.txt
container-diff diff $1 $2 --type=file 2>&1 | tee -a diff-file.txt
container-diff diff $1 $2 --type=size 2>&1 | tee -a diff-size.txt
container-diff diff $1 $2 --type=apt 2>&1 | tee -a diff-apt.txt
container-diff diff $1 $2 --type=pip 2>&1 | tee -a diff-pip.txt
fi

24
tools/dockcross-builder.sh Executable file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env bash
if (( $# >= 1 )); then
image=$1
build_file=build-${image%:*}
shift 1
cmake_arg=$*
echo "cmake arg: $cmake_arg"
#echo "Pulling dockcross/$image"
#docker pull dockcross/"$image"
echo "Make script dockcross-$image"
docker run --rm dockcross/"$image" > ./dockcross-"$image"
chmod +x ./dockcross-"$image"
echo "Build $build_file"
./dockcross-"$image" cmake -B "$build_file" -S . -G Ninja "$cmake_arg"
./dockcross-"$image" ninja -C "$build_file"
else
echo "Usage: ${0##*/} <docker imag (ex: linux-x64/linux-x64-clang/linux-arm64/windows-shared-x64/windows-static-x64...)> <cmake arg.>"
exit 1
fi

View File

@ -0,0 +1,27 @@
#!/usr/bin/env bash
# More info: https://github.com/GoogleContainerTools/container-diff
if (( $# < 1 || $# > 2 )); then
echo "Need 1 or 2 arguments: <img1> <img2>"
echo "For local image: daemon://<img>"
echo "For remote image: remote://<img>"
exit 1
fi
if (( $# == 1 )); then
container-diff analyze "$1" --type=history 2>&1 | tee -a analyze-history.txt
container-diff analyze "$1" --type=file 2>&1 | tee -a analyze-file.txt
container-diff analyze "$1" --type=size 2>&1 | tee -a analyze-size.txt
container-diff analyze "$1" --type=apt 2>&1 | tee -a analyze-apt.txt
container-diff analyze "$1" --type=pip 2>&1 | tee -a analyze-pip.txt
fi
if (( $# == 2 )); then
container-diff diff "$1" "$2" --type=history 2>&1 | tee -a diff-history.txt
container-diff diff "$1" "$2" --type=file 2>&1 | tee -a diff-file.txt
container-diff diff "$1" "$2" --type=size 2>&1 | tee -a diff-size.txt
container-diff diff "$1" "$2" --type=apt 2>&1 | tee -a diff-apt.txt
container-diff diff "$1" "$2" --type=pip 2>&1 | tee -a diff-pip.txt
fi