- #!/usr/bin/env bash
- set -e
-
- . $(dirname "${BASH_SOURCE[0]}")/common.sh
-
- cat << EOF | $DUB - || die $LINENO "Did not pass without toolchainRequirements"
- /+ dub.sdl:
- +/
- void main() {}
- EOF
-
- # pass test dub requirement given as $1
- function test_dub_req_pass {
- cat << EOF | $DUB - || die $LINENO "Did not pass requirement dub=\"$1\""
- /+ dub.sdl:
- toolchainRequirements dub="$1"
- +/
- void main() {}
- EOF
- }
-
- # fail test dub requirement given as $1
- function test_dub_req_fail {
- ! cat << EOF | $DUB - || die $LINENO "Did not pass requirement dub=\"$1\""
- /+ dub.sdl:
- toolchainRequirements dub="$1"
- +/
- void main() {}
- EOF
- }
-
- test_dub_req_pass ">=1.7.0"
- test_dub_req_fail "~>0.9"
- test_dub_req_fail "~>999.0"
-
- # extract compiler version
- if [[ $DC == *ldc* ]] || [[ $DC == *ldmd* ]]; then
- VER_REG='\((([[:digit:]]+)(\.[[:digit:]]+\.[[:digit:]]+[A-Za-z0-9.+-]*))\)'
- DC_NAME=ldc
- elif [[ $DC == *dmd* ]]; then
- VER_REG='v(([[:digit:]]+)(\.[[:digit:]]+\.[[:digit:]]+[A-Za-z0-9.+-]*))'
- DC_NAME=dmd
- elif [[ $DC == *gdc* ]]; then
- VER_REG='\) (([[:digit:]]+)(\.[[:digit:]]+\.[[:digit:]]+[A-Za-z0-9.+-]*))'
- DC_NAME=gdc
- else
- die $LINENO "Did not recognize compiler"
- fi
- if [[ $($DC --version) =~ $VER_REG ]]; then
- DC_VER=${BASH_REMATCH[1]}
- DC_VER_MAJ=${BASH_REMATCH[2]}
- DC_VER_REM=${BASH_REMATCH[3]}
- $DC --version
- echo $DC version is $DC_VER
- else
- $DC --version
- die $LINENO "Could not extract compiler version"
- fi
-
- # create test app directory
- TMPDIR=$(mktemp -d /tmp/dubtest1531_XXXXXX)
- mkdir -p $TMPDIR/source
- cat << EOF > $TMPDIR/source/app.d
- module dubtest1531;
- void main() {}
- EOF
-
- # write dub.sdl with compiler requirement given as $1
- function write_cl_req {
- cat << EOF > $TMPDIR/dub.sdl
- name "dubtest1531"
- toolchainRequirements ${DC_NAME}="$1"
- EOF
- }
-
- # pass test compiler requirement given as $1
- function test_cl_req_pass {
- echo "Expecting success on '$DC $1'" 2>&1
- write_cl_req $1
- $DUB build -q --compiler=$DC --root=$TMPDIR || die $LINENO "Did not pass with $DC_NAME=\"$1\""
- }
-
- # fail test compiler requirement given as $1
- function test_cl_req_fail {
- echo "Expecting failure on '$DC $1'" 2>&1
- write_cl_req $1
- ! $DUB --compiler=$DC --root=$TMPDIR || die $LINENO "Did not fail with $DC_NAME=\"$1\""
- }
-
-
- test_cl_req_pass "==$DC_VER"
- test_cl_req_pass ">=$DC_VER"
- test_cl_req_fail ">$DC_VER"
- test_cl_req_pass "<=$DC_VER"
- test_cl_req_fail "<$DC_VER"
- test_cl_req_pass ">=$DC_VER <$(($DC_VER_MAJ + 1))$DC_VER_REM"
- test_cl_req_pass "~>$DC_VER"
- test_cl_req_fail "~>$(($DC_VER_MAJ + 1))$DC_VER_REM"
- test_cl_req_fail no
-
- rm -rf $TMPDIR