diff --git a/plugins/python-build/bin/python-build b/plugins/python-build/bin/python-build index 50c104b1..962ba401 100755 --- a/plugins/python-build/bin/python-build +++ b/plugins/python-build/bin/python-build @@ -323,42 +323,40 @@ http() { local file="$3" [ -n "$url" ] || return 1 - if type curl &>/dev/null; then + if type aria2c &>/dev/null; then + "http_${method}_aria2c" "$url" "$file" + elif type curl &>/dev/null; then "http_${method}_curl" "$url" "$file" elif type wget &>/dev/null; then "http_${method}_wget" "$url" "$file" else - echo "error: please install \`curl\` or \`wget\` and try again" >&2 + echo "error: please install \`aria2c\`, \`curl\` or \`wget\` and try again" >&2 exit 1 fi } +http_head_aria2c() { + aria2c --dry-run ${ARIA2_OPTS} "$1" >&4 2>&1 +} + +http_get_aria2c() { + aria2c -o "${2:--}" ${ARIA2_OPTS} "$1" +} + http_head_curl() { - options="" - [ -n "${IPV4}" ] && options="--ipv4" - [ -n "${IPV6}" ] && options="--ipv6" - curl -qsILf ${options} "$1" >&4 2>&1 + curl -qsILf ${CURL_OPTS} "$1" >&4 2>&1 } http_get_curl() { - options="" - [ -n "${IPV4}" ] && options="--ipv4" - [ -n "${IPV6}" ] && options="--ipv6" - curl -q -o "${2:--}" -sSLf ${options} "$1" + curl -q -o "${2:--}" -sSLf ${CURL_OPTS} "$1" } http_head_wget() { - options="" - [ -n "${IPV4}" ] && options="--inet4-only" - [ -n "${IPV6}" ] && options="--inet6-only" - wget -q --spider ${options} "$1" >&4 2>&1 + wget -q --spider ${WGET_OPTS} "$1" >&4 2>&1 } http_get_wget() { - options="" - [ -n "${IPV4}" ] && options="--inet4-only" - [ -n "${IPV6}" ] && options="--inet6-only" - wget -nv ${options} -O "${2:--}" "$1" + wget -nv ${WGET_OPTS} -O "${2:--}" "$1" } fetch_tarball() { @@ -1816,6 +1814,10 @@ if [ -n "$PYTHON_BUILD_SKIP_MIRROR" ] || ! has_checksum_support compute_sha2; th unset PYTHON_BUILD_MIRROR_URL fi +ARIA2_OPTS="${PYTHON_BUILD_ARIA2_OPTS} ${IPV4+--disable-ipv6=true} ${IPV6+--disable-ipv6=false}" +CURL_OPTS="${PYTHON_BUILD_CURL_OPTS} ${IPV4+--ipv4} ${IPV6+--ipv6}" +WGET_OPTS="${PYTHON_BUILD_WGET_OPTS} ${IPV4+--inet4-only} ${IPV6+--inet6-only}" + # Add an option to build a debug version of Python (#11) if [ -n "$DEBUG" ]; then package_option python configure --with-pydebug diff --git a/plugins/python-build/test/build.bats b/plugins/python-build/test/build.bats index c14ea61a..ce7ced95 100644 --- a/plugins/python-build/test/build.bats +++ b/plugins/python-build/test/build.bats @@ -10,7 +10,7 @@ export -n PYTHON_CONFIGURE_OPTS setup() { mkdir -p "$INSTALL_ROOT" stub md5 false - stub curl false + stub aria2c false } executable() { diff --git a/plugins/python-build/test/cache.bats b/plugins/python-build/test/cache.bats index d3ccc226..1dca44b0 100644 --- a/plugins/python-build/test/cache.bats +++ b/plugins/python-build/test/cache.bats @@ -3,6 +3,7 @@ load test_helper export PYTHON_BUILD_SKIP_MIRROR=1 export PYTHON_BUILD_CACHE_PATH="$TMP/cache" +export PYTHON_BUILD_ARIA2_OPTS= setup() { mkdir "$PYTHON_BUILD_CACHE_PATH" @@ -10,19 +11,19 @@ setup() { @test "packages are saved to download cache" { - stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" install_fixture definitions/without-checksum assert_success assert [ -e "${PYTHON_BUILD_CACHE_PATH}/package-1.0.0.tar.gz" ] - unstub curl + unstub aria2c } @test "cached package without checksum" { - stub curl + stub aria2c cp "${FIXTURE_ROOT}/package-1.0.0.tar.gz" "$PYTHON_BUILD_CACHE_PATH" @@ -31,13 +32,13 @@ setup() { assert_success assert [ -e "${PYTHON_BUILD_CACHE_PATH}/package-1.0.0.tar.gz" ] - unstub curl + unstub aria2c } @test "cached package with valid checksum" { stub shasum true "echo ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" - stub curl + stub aria2c cp "${FIXTURE_ROOT}/package-1.0.0.tar.gz" "$PYTHON_BUILD_CACHE_PATH" @@ -47,7 +48,7 @@ setup() { assert [ -x "${INSTALL_ROOT}/bin/package" ] assert [ -e "${PYTHON_BUILD_CACHE_PATH}/package-1.0.0.tar.gz" ] - unstub curl + unstub aria2c unstub shasum } @@ -57,8 +58,8 @@ setup() { local checksum="ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" stub shasum true "echo invalid" "echo $checksum" - stub curl "-*I* : true" \ - "-q -o * -*S* https://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3" + stub aria2c "--dry-run * : true" \ + "-o * https://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$2" touch "${PYTHON_BUILD_CACHE_PATH}/package-1.0.0.tar.gz" @@ -69,13 +70,13 @@ setup() { assert [ -e "${PYTHON_BUILD_CACHE_PATH}/package-1.0.0.tar.gz" ] assert diff -q "${PYTHON_BUILD_CACHE_PATH}/package-1.0.0.tar.gz" "${FIXTURE_ROOT}/package-1.0.0.tar.gz" - unstub curl + unstub aria2c unstub shasum } @test "nonexistent cache directory is ignored" { - stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" export PYTHON_BUILD_CACHE_PATH="${TMP}/nonexistent" @@ -85,5 +86,5 @@ setup() { assert [ -x "${INSTALL_ROOT}/bin/package" ] refute [ -d "$PYTHON_BUILD_CACHE_PATH" ] - unstub curl + unstub aria2c } diff --git a/plugins/python-build/test/checksum.bats b/plugins/python-build/test/checksum.bats index 62d46312..ffb7d32b 100644 --- a/plugins/python-build/test/checksum.bats +++ b/plugins/python-build/test/checksum.bats @@ -3,105 +3,107 @@ load test_helper export PYTHON_BUILD_SKIP_MIRROR=1 export PYTHON_BUILD_CACHE_PATH= +export PYTHON_BUILD_ARIA2_OPTS= @test "package URL without checksum" { - stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" install_fixture definitions/without-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c } @test "package URL with valid checksum" { stub shasum true "echo ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" - stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" install_fixture definitions/with-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c unstub shasum } @test "package URL with invalid checksum" { stub shasum true "echo ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" - stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" install_fixture definitions/with-invalid-checksum assert_failure refute [ -f "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c unstub shasum } @test "package URL with checksum but no shasum support" { stub shasum false - stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" install_fixture definitions/with-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c unstub shasum } @test "package URL with valid md5 checksum" { stub md5 true "echo 83e6d7725e20166024a1eb74cde80677" - stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" install_fixture definitions/with-md5-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c unstub md5 } @test "package URL with md5 checksum but no md5 support" { stub md5 false - stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" install_fixture definitions/with-md5-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c unstub md5 } @test "package with invalid checksum" { stub shasum true "echo invalid" - stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" install_fixture definitions/with-checksum assert_failure refute [ -f "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c unstub shasum } @test "existing tarball in build location is reused" { stub shasum true "echo ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" + stub aria2c false stub curl false stub wget false @@ -125,7 +127,7 @@ DEF stub shasum true \ "echo invalid" \ "echo ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" - stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" export -n PYTHON_BUILD_CACHE_PATH export PYTHON_BUILD_BUILD_PATH="${TMP}/build" @@ -144,7 +146,7 @@ DEF } @test "package URL with checksum of unexpected length" { - stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" run_inline_definition <&2 @@ -16,21 +17,21 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c unstub shasum } @test "package URL with checksum but no shasum support bypasses mirror" { stub shasum false - stub curl "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" install_fixture definitions/with-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c unstub shasum } @@ -40,15 +41,15 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com local mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum" stub shasum true "echo $checksum" - stub curl "-*I* $mirror_url : true" \ - "-q -o * -*S* $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3" + stub aria2c "--dry-run $mirror_url : true" \ + "-o * $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$2" install_fixture definitions/with-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c unstub shasum } @@ -58,15 +59,15 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com local mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum" stub shasum true "echo $checksum" - stub curl "-*I* $mirror_url : false" \ - "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "--dry-run $mirror_url : false" \ + "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" install_fixture definitions/with-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c unstub shasum } @@ -76,9 +77,9 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com local mirror_url="${PYTHON_BUILD_MIRROR_URL}/$checksum" stub shasum true "echo invalid" "echo $checksum" - stub curl "-*I* $mirror_url : true" \ - "-q -o * -*S* $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3" \ - "-q -o * -*S* http://example.com/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "--dry-run $mirror_url : true" \ + "-o * $mirror_url : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$2" \ + "-o * http://example.com/* : cp $FIXTURE_ROOT/\${3##*/} \$2" install_fixture definitions/with-checksum echo "$output" >&2 @@ -86,7 +87,7 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c unstub shasum } @@ -96,15 +97,15 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com local checksum="ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" stub shasum true "echo $checksum" - stub curl "-*I* : true" \ - "-q -o * -*S* https://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$3" \ + stub aria2c "--dry-run : true" \ + "-o * https://?*/$checksum : cp $FIXTURE_ROOT/package-1.0.0.tar.gz \$2" \ install_fixture definitions/with-checksum assert_success assert [ -x "${INSTALL_ROOT}/bin/package" ] - unstub curl + unstub aria2c unstub shasum } @@ -114,7 +115,7 @@ export PYTHON_BUILD_MIRROR_URL=http://mirror.example.com local checksum="ba988b1bb4250dee0b9dd3d4d722f9c64b2bacfc805d1b6eba7426bda72dd3c5" stub shasum true "echo $checksum" - stub curl "-q -o * -*S* https://www.python.org/* : cp $FIXTURE_ROOT/\${5##*/} \$3" + stub aria2c "-o * https://www.python.org/* : cp $FIXTURE_ROOT/\${3##*/} \$2" run_inline_definition <