diff --git a/.travis.yml b/.travis.yml index 825ac434..2e7f548a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,43 +2,30 @@ language: rust rust: stable sudo: required dist: trusty -services: - - docker -install: - - if [ -z "$NO_ADD" ]; then rustup target add $TARGET; fi -script: - - cargo build $OPT - - cargo build $OPT --no-default-features - - cargo generate-lockfile --manifest-path libc-test/Cargo.toml - - if [[ $TRAVIS_OS_NAME = "linux" ]]; then - sh ci/run-docker.sh $TARGET; - else - export CARGO_TARGET_DIR=`pwd`/target; - sh ci/run.sh $TARGET; - fi - - rustc ci/style.rs && ./style src -env: - global: - secure: "e2/3QjgRN9atOuSHp22TrYG7QVKcYUWY48Hi9b60w+r1+BhPkTseIJLte7WefRhdXtqpjjUJTooKDhnurFOeHaCT+nmBgiv+FPU893sBl4bhesY4m0vgUJVbNZcs6lTImYekWVb+aqjGdgV/XAgCw7c3kPmrZV0MzGDWL64Xaps=" +services: docker + matrix: include: # 1.13.0 compat - - env: TARGET=x86_64-unknown-linux-gnu NO_ADD=1 + - env: TARGET=x86_64-unknown-linux-gnu rust: 1.13.0 script: rm -f Cargo.lock && cargo build - install: + install: true # build documentation - - env: TARGET=x86_64-unknown-linux-gnu NO_ADD=1 + - env: TARGET=x86_64-unknown-linux-gnu rust: nightly script: sh ci/dox.sh + install: true # stable compat - - env: TARGET=x86_64-unknown-linux-gnu NO_ADD=1 + - env: TARGET=x86_64-unknown-linux-gnu + install: true - env: TARGET=i686-unknown-linux-gnu - os: osx - env: TARGET=x86_64-apple-darwin NO_ADD=1 + env: TARGET=x86_64-apple-darwin osx_image: xcode10 + install: true - os: osx env: TARGET=i686-apple-darwin osx_image: xcode10 @@ -67,20 +54,24 @@ matrix: - env: TARGET=wasm32-unknown-emscripten # beta - - env: TARGET=x86_64-unknown-linux-gnu NO_ADD=1 + - env: TARGET=x86_64-unknown-linux-gnu rust: beta + install: true - os: osx - env: TARGET=x86_64-apple-darwin NO_ADD=1 + env: TARGET=x86_64-apple-darwin osx_image: xcode10 rust: beta + install: true # nightly - - env: TARGET=x86_64-unknown-linux-gnu NO_ADD=1 + - env: TARGET=x86_64-unknown-linux-gnu rust: nightly + install: true - os: osx - env: TARGET=x86_64-apple-darwin NO_ADD=1 + env: TARGET=x86_64-apple-darwin osx_image: xcode10 rust: nightly + install: true # not available on stable # without --release the build fails # see https://github.com/rust-lang/rust/issues/45417 @@ -90,15 +81,26 @@ matrix: # QEMU based targets that compile in an emulator - env: TARGET=x86_64-unknown-freebsd - - name: "rustfmt" - install: rustup component add rustfmt-preview - script: cargo fmt --all -- --check - name: "Shellcheck" install: true script: - shellcheck --version - shellcheck ci/*.sh +install: rustup target add $TARGET +script: + - cargo generate-lockfile --manifest-path libc-test/Cargo.toml + - if [[ $TRAVIS_OS_NAME = "linux" ]]; then + sh ci/run-docker.sh $TARGET; + else + export CARGO_TARGET_DIR=`pwd`/target; + sh ci/run.sh $TARGET; + fi + - rustc ci/style.rs && ./style src +env: + global: + secure: "e2/3QjgRN9atOuSHp22TrYG7QVKcYUWY48Hi9b60w+r1+BhPkTseIJLte7WefRhdXtqpjjUJTooKDhnurFOeHaCT+nmBgiv+FPU893sBl4bhesY4m0vgUJVbNZcs6lTImYekWVb+aqjGdgV/XAgCw7c3kPmrZV0MzGDWL64Xaps=" + notifications: email: on_success: never diff --git a/ci/android-install-ndk.sh b/ci/android-install-ndk.sh index 873f6c52..4a5fbc0b 100644 --- a/ci/android-install-ndk.sh +++ b/ci/android-install-ndk.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env sh # Copyright 2016 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. @@ -30,8 +30,8 @@ esac; android-ndk-r15b/build/tools/make_standalone_toolchain.py \ --unified-headers \ - --install-dir /android/ndk-$1 \ - --arch $arch \ + --install-dir "/android/ndk-${1}" \ + --arch "${arch}" \ --api 24 rm -rf ./android-ndk-r15b-linux-x86_64.zip ./android-ndk-r15b diff --git a/ci/android-install-sdk.sh b/ci/android-install-sdk.sh index ab7e14d9..e43cbc3a 100644 --- a/ci/android-install-sdk.sh +++ b/ci/android-install-sdk.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env sh # Copyright 2016 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. @@ -56,5 +56,5 @@ echo "yes" | \ echo "no" | ./sdk/tools/bin/avdmanager create avd \ - --name $1 \ + --name "${1}" \ --package "system-images;android-24;default;$abi" diff --git a/ci/android-sysimage.sh b/ci/android-sysimage.sh index 9611dfeb..1a6c49d2 100644 --- a/ci/android-sysimage.sh +++ b/ci/android-sysimage.sh @@ -1,3 +1,5 @@ +#!/usr/bin/env bash + # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. @@ -13,32 +15,34 @@ set -ex URL=https://dl.google.com/android/repository/sys-img/android main() { - local arch=$1 - local name=$2 + local arch="${1}" + local name="${2}" local dest=/system - local td=$(mktemp -d) + local td + td="$(mktemp -d)" apt-get install --no-install-recommends e2tools - pushd $td - curl -O $URL/$name - unzip -q $name + pushd "${td}" + curl -O "${URL}/${name}" + unzip -q "${name}" - local system=$(find . -name system.img) - mkdir -p $dest/{bin,lib,lib64} + local system + system="$(find . -name system.img)" + mkdir -p ${dest}/{bin,lib,lib64} # Extract android linker and libraries to /system # This allows android executables to be run directly (or with qemu) - if [ $arch = "x86_64" -o $arch = "arm64" ]; then - e2cp -p $system:/bin/linker64 $dest/bin/ - e2cp -p $system:/lib64/libdl.so $dest/lib64/ - e2cp -p $system:/lib64/libc.so $dest/lib64/ - e2cp -p $system:/lib64/libm.so $dest/lib64/ + if [ "${arch}" = "x86_64" ] || [ "${arch}" = "arm64" ]; then + e2cp -p "${system}:/bin/linker64" "${dest}/bin/" + e2cp -p "${system}:/lib64/libdl.so" "${dest}/lib64/" + e2cp -p "${system}:/lib64/libc.so" "${dest}/lib64/" + e2cp -p "${system}:/lib64/libm.so" "${dest}/lib64/" else - e2cp -p $system:/bin/linker $dest/bin/ - e2cp -p $system:/lib/libdl.so $dest/lib/ - e2cp -p $system:/lib/libc.so $dest/lib/ - e2cp -p $system:/lib/libm.so $dest/lib/ + e2cp -p "${system}:/bin/linker" "${dest}/bin/" + e2cp -p "${system}:/lib/libdl.so" "${dest}/lib/" + e2cp -p "${system}:/lib/libc.so" "${dest}/lib/" + e2cp -p "${system}:/lib/libm.so" "${dest}/lib/" fi # clean up @@ -46,7 +50,7 @@ main() { popd - rm -rf $td + rm -rf "${td}" } main "${@}" diff --git a/ci/dox.sh b/ci/dox.sh index b8ffa7dd..521743e3 100644 --- a/ci/dox.sh +++ b/ci/dox.sh @@ -1,12 +1,12 @@ -#!/bin/sh +#!/usr/bin/env sh # Builds documentation for all target triples that we have a registered URL for # in liblibc. This scrapes the list of triples to document from `src/lib.rs` # which has a bunch of `html_root_url` directives we pick up. -set -e +set -ex -TARGETS=`grep html_root_url src/lib.rs | sed 's/.*".*\/\(.*\)"/\1/'` +TARGETS=$(grep html_root_url src/lib.rs | sed 's/.*".*\/\(.*\)"/\1/'| sed 's/)//') rm -rf target/doc mkdir -p target/doc @@ -14,12 +14,12 @@ mkdir -p target/doc cp ci/landing-page-head.html target/doc/index.html for target in $TARGETS; do - echo documenting $target + echo "documenting ${target}" - rustdoc -o target/doc/$target --target $target src/lib.rs --cfg cross_platform_docs \ + rustdoc -o "target/doc/${target}" --target "${target}" src/lib.rs --cfg cross_platform_docs \ --crate-name libc - echo "
  • $target
  • " \ + echo "
  • ${target}
  • " \ >> target/doc/index.html done @@ -28,6 +28,6 @@ cat ci/landing-page-footer.html >> target/doc/index.html # If we're on travis, not a PR, and on the right branch, publish! if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then pip install ghp_import --install-option="--prefix=$HOME/.local" - $HOME/.local/bin/ghp-import -n target/doc - git push -qf https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages + "${HOME}/.local/bin/ghp-import" -n target/doc + git push -qf "https://${GH_TOKEN}@github.com/${TRAVIS_REPO_SLUG}.git" gh-pages fi diff --git a/ci/emscripten-entry.sh b/ci/emscripten-entry.sh index 22ae8b08..e92c1cb1 100755 --- a/ci/emscripten-entry.sh +++ b/ci/emscripten-entry.sh @@ -11,6 +11,7 @@ set -ex +# shellcheck disable=SC1091 source /emsdk-portable/emsdk_env.sh &> /dev/null # emsdk-portable provides a node binary, but we need version 8 to run wasm diff --git a/ci/emscripten.sh b/ci/emscripten.sh index d8025858..ab69aa75 100644 --- a/ci/emscripten.sh +++ b/ci/emscripten.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # Copyright 2017 The Rust Project Developers. See the COPYRIGHT # file at the top-level directory of this distribution and at # http://rust-lang.org/COPYRIGHT. @@ -17,10 +18,10 @@ echo ERROR: An error was encountered with the build. cat /tmp/build.log exit 1 " - trap "$on_err" ERR + trap '$on_err' ERR bash -c "while true; do sleep 30; echo \$(date) - building ...; done" & PING_LOOP_PID=$! - $@ &> /tmp/build.log + "${@}" &> /tmp/build.log trap - ERR kill $PING_LOOP_PID rm -f /tmp/build.log @@ -37,6 +38,7 @@ hide_output ./emsdk install sdk-1.37.20-64bit ./emsdk activate sdk-1.37.20-64bit # Compile and cache libc +# shellcheck disable=SC1091 source ./emsdk_env.sh echo "main(){}" > a.c HOME=/emsdk-portable/ emcc a.c diff --git a/ci/linux-s390x.sh b/ci/linux-s390x.sh index 972abeec..95cb798a 100644 --- a/ci/linux-s390x.sh +++ b/ci/linux-s390x.sh @@ -1,3 +1,5 @@ +#!/usr/bin/env sh + set -ex mkdir -m 777 /qemu diff --git a/ci/linux-sparc64.sh b/ci/linux-sparc64.sh index 4452b120..69c405b8 100644 --- a/ci/linux-sparc64.sh +++ b/ci/linux-sparc64.sh @@ -1,3 +1,5 @@ +#!/usr/bin/env sh + set -ex mkdir -m 777 /qemu diff --git a/ci/run-docker.sh b/ci/run-docker.sh index 662a1d49..4247827f 100755 --- a/ci/run-docker.sh +++ b/ci/run-docker.sh @@ -1,36 +1,41 @@ +#!/usr/bin/env sh + # Small script to run tests for a target (or all targets) inside all the # respective docker images. set -ex run() { - echo $1 + echo "Building docker container for target ${1}" # use -f so we can use ci/ as build context - docker build -t libc -f ci/docker/$1/Dockerfile ci/ + docker build -t libc -f "ci/docker/${1}/Dockerfile" ci/ mkdir -p target if [ -w /dev/kvm ]; then - kvm="--volume /dev/kvm:/dev/kvm" + kvm="--volume /dev/kvm:/dev/kvm" + else + kvm="" fi + docker run \ - --user `id -u`:`id -g` \ + --user "$(id -u)":"$(id -g)" \ --rm \ --init \ - --volume $HOME/.cargo:/cargo \ + --volume "${HOME}/.cargo":/cargo \ $kvm \ --env CARGO_HOME=/cargo \ - --volume `rustc --print sysroot`:/rust:ro \ - --volume `pwd`:/checkout:ro \ - --volume `pwd`/target:/checkout/target \ + --volume "$(rustc --print sysroot)":/rust:ro \ + --volume "$(pwd)":/checkout:ro \ + --volume "$(pwd)"/target:/checkout/target \ --env CARGO_TARGET_DIR=/checkout/target \ --workdir /checkout \ libc \ - ci/run.sh $1 + ci/run.sh "${1}" } -if [ -z "$1" ]; then - for d in `ls ci/docker/`; do - run $d +if [ -z "${1}" ]; then + for d in ci/docker/*; do + run "${d}" done else - run $1 + run "${1}" fi diff --git a/ci/run-qemu.sh b/ci/run-qemu.sh index b2f457df..6fba6298 100644 --- a/ci/run-qemu.sh +++ b/ci/run-qemu.sh @@ -1,3 +1,5 @@ +#!/usr/bin/env sh + # Initial script which is run inside of all qemu images. The first argument to # this script (as arranged by the qemu image itself) is the path to where the # libc crate is mounted. @@ -10,11 +12,11 @@ set -ex -ROOT=$1 -cp -r $ROOT/libc /tmp/libc +ROOT="${1}" +cp -r "${ROOT}/libc" /tmp/libc cd /tmp/libc -TARGET=$(cat $ROOT/TARGET) +TARGET="$(cat "${ROOT}/TARGET")" export CARGO_TARGET_DIR=/tmp case $TARGET in @@ -24,9 +26,9 @@ case $TARGET in ;; *) - echo "Unknown target: $TARGET" + echo "Unknown target: ${TARGET}" exit 1 ;; esac -exec sh ci/run.sh $TARGET +exec sh ci/run.sh "${TARGET}" diff --git a/ci/run.sh b/ci/run.sh index 27ffc054..2140da68 100755 --- a/ci/run.sh +++ b/ci/run.sh @@ -1,11 +1,11 @@ -#!/bin/sh +#!/usr/bin/env sh # Builds and runs tests for a particular target passed as an argument to this # script. set -ex -TARGET=$1 +TARGET="${1}" # If we're going to run tests inside of a qemu image, then we don't need any of # the scripts below. Instead, download the image, prepare a filesystem which has @@ -15,52 +15,53 @@ TARGET=$1 # script from the second which we place inside. if [ "$QEMU" != "" ]; then tmpdir=/tmp/qemu-img-creation - mkdir -p $tmpdir + mkdir -p "${tmpdir}" if [ -z "${QEMU#*.gz}" ]; then # image is .gz : download and uncompress it - qemufile=$(echo ${QEMU%.gz} | sed 's/\//__/g') - if [ ! -f $tmpdir/$qemufile ]; then - curl https://s3-us-west-1.amazonaws.com/rust-lang-ci2/libc/$QEMU | \ - gunzip -d > $tmpdir/$qemufile + qemufile="$(echo "${QEMU%.gz}" | sed 's/\//__/g')" + if [ ! -f "${tmpdir}/${qemufile}" ]; then + curl "https://s3-us-west-1.amazonaws.com/rust-lang-ci2/libc/${QEMU}" | \ + gunzip -d > "${tmpdir}/${qemufile}" fi elif [ -z "${QEMU#*.xz}" ]; then # image is .xz : download and uncompress it - qemufile=$(echo ${QEMU%.xz} | sed 's/\//__/g') - if [ ! -f $tmpdir/$qemufile ]; then - curl https://s3-us-west-1.amazonaws.com/rust-lang-ci2/libc/$QEMU | \ - unxz > $tmpdir/$qemufile + qemufile="$(echo "${QEMU%.xz}" | sed 's/\//__/g')" + if [ ! -f "${tmpdir}/${qemufile}" ]; then + curl "https://s3-us-west-1.amazonaws.com/rust-lang-ci2/libc/${QEMU}" | \ + unxz > "${tmpdir}/${qemufile}" fi else # plain qcow2 image: just download it - qemufile=$(echo ${QEMU} | sed 's/\//__/g') - if [ ! -f $tmpdir/$qemufile ]; then - curl https://s3-us-west-1.amazonaws.com/rust-lang-ci2/libc/$QEMU \ - > $tmpdir/$qemufile + qemufile="$(echo "${QEMU}" | sed 's/\//__/g')" + if [ ! -f "${tmpdir}/${qemufile}" ]; then + curl "https://s3-us-west-1.amazonaws.com/rust-lang-ci2/libc/${QEMU}" \ + > "${tmpdir}/${qemufile}" fi fi # Create a mount a fresh new filesystem image that we'll later pass to QEMU. # This will have a `run.sh` script will which use the artifacts inside to run # on the host. - rm -f $tmpdir/libc-test.img - mkdir $tmpdir/mount + rm -f "${tmpdir}/libc-test.img" + mkdir "${tmpdir}/mount" # Do the standard rigamarole of cross-compiling an executable and then the # script to run just executes the binary. cargo build \ --manifest-path libc-test/Cargo.toml \ - --target $TARGET \ + --target "${TARGET}" \ --test main - rm $CARGO_TARGET_DIR/$TARGET/debug/main-*.d - cp $CARGO_TARGET_DIR/$TARGET/debug/main-* $tmpdir/mount/libc-test - echo 'exec $1/libc-test' > $tmpdir/mount/run.sh + rm "${CARGO_TARGET_DIR}/${TARGET}"/debug/main-*.d + cp "${CARGO_TARGET_DIR}/${TARGET}"/debug/main-* "${tmpdir}"/mount/libc-test + # shellcheck disable=SC2016 + echo 'exec $1/libc-test' > "${tmpdir}/mount/run.sh" - du -sh $tmpdir/mount + du -sh "${tmpdir}/mount" genext2fs \ - --root $tmpdir/mount \ + --root "${tmpdir}/mount" \ --size-in-blocks 100000 \ - $tmpdir/libc-test.img + "${tmpdir}/libc-test.img" # Pass -snapshot to prevent tampering with the disk images, this helps when # running this script in development. The two drives are then passed next, @@ -70,13 +71,13 @@ if [ "$QEMU" != "" ]; then qemu-system-x86_64 \ -m 1024 \ -snapshot \ - -drive if=virtio,file=$tmpdir/$qemufile \ - -drive if=virtio,file=$tmpdir/libc-test.img \ + -drive if=virtio,file="${tmpdir}/${qemufile}" \ + -drive if=virtio,file="${tmpdir}/libc-test.img" \ -net nic,model=virtio \ -net user \ -nographic \ - -vga none 2>&1 | tee $CARGO_TARGET_DIR/out.log - exec grep "^PASSED .* tests" $CARGO_TARGET_DIR/out.log + -vga none 2>&1 | tee "${CARGO_TARGET_DIR}/out.log" + exec grep "^PASSED .* tests" "${CARGO_TARGET_DIR}/out.log" fi # FIXME: x86_64-unknown-linux-gnux32 fail to compile without --release @@ -89,10 +90,10 @@ fi # Building with --no-default-features is currently broken on rumprun because we # need cfg(target_vendor), which is currently unstable. if [ "$TARGET" != "x86_64-rumprun-netbsd" ]; then - cargo test $opt --no-default-features --manifest-path libc-test/Cargo.toml --target $TARGET + cargo test $opt --no-default-features --manifest-path libc-test/Cargo.toml --target "${TARGET}" fi # Test the #[repr(align(x))] feature if this is building on Rust >= 1.25 -if [ $(rustc --version | sed -E 's/^rustc 1\.([0-9]*)\..*/\1/') -ge 25 ]; then - cargo test $opt --features align --manifest-path libc-test/Cargo.toml --target $TARGET +if [ "$(rustc --version | sed -E 's/^rustc 1\.([0-9]*)\..*/\1/')" -ge 25 ]; then + cargo test $opt --features align --manifest-path libc-test/Cargo.toml --target "${TARGET}" fi -exec cargo test $opt --manifest-path libc-test/Cargo.toml --target $TARGET +exec cargo test $opt --manifest-path libc-test/Cargo.toml --target "${TARGET}"