diff --git a/.github/workflows/bare.yaml b/.github/workflows/bare.yaml index c4bc7207..25843066 100644 --- a/.github/workflows/bare.yaml +++ b/.github/workflows/bare.yaml @@ -14,19 +14,11 @@ concurrency: group: bare-${{ github.ref }} cancel-in-progress: true -# Set to 'yes' to open a tunnel to GitHub's VMs through ngrok/tmate on failures. -# Also increase timeout-minutes for the relevant OS when debugging remotely. -# Version 3 of mxschmitt/action-tmate should also work on Windows. -env: - TMATE_DEBUG: 'no' - NGROK_DEBUG: 'no' - - jobs: windows: # The type of runner that the job will run on runs-on: windows-latest - timeout-minutes: 15 + timeout-minutes: 45 # Steps represent a sequence of tasks that will be executed as part of the job steps: @@ -37,9 +29,11 @@ jobs: # Explicitly run our scripts with Bash, not PowerShell (GitHub's default). - name: Build Pythia + timeout-minutes: 10 run: bash ./build.sh build - name: Test Pythia + timeout-minutes: 5 run: bash ./build.sh test # To use an RSA key with SFTPPlus, install upstream OpenSSH package, @@ -58,11 +52,11 @@ jobs: # Upload using a (per-OS selected) sftp command, then show final links. # Remove key in same step to avoid leaving it on disk if publishing fails. - name: Upload testing package + timeout-minutes: 5 run: bash -c './publish_dist.sh ; rm priv_key' - # Command line debugging through Tmate. v3 works on Windows too. - name: Tmate debug on failure - if: failure() && env.TMATE_DEBUG == 'yes' + if: ${{ !cancelled() && runner.debug }} uses: chevah/action-tmate@v3 with: limit-access-to-actor: true @@ -72,7 +66,7 @@ jobs: # but using the ngrok token as password for the runnneradmin user. # Basically use the ngrok token and the ngrok URL (from ngrok's dashboard). - name: Ngrok debugging on failure - if: failure() && env.NGROK_DEBUG == 'yes' + if: ${{ failure() && !cancelled() && runner.debug }} env: NGROK_TOKEN: ${{ secrets.NGROK_AUTH_TOKEN }} run: | @@ -86,8 +80,9 @@ jobs: macos: - runs-on: macos-latest - timeout-minutes: 30 + # For macOS on Intel at GitHub. + runs-on: macos-13 + timeout-minutes: 90 steps: - uses: actions/checkout@v2 with: @@ -102,6 +97,7 @@ jobs: sudo chmod -v a-r /usr/local/opt/gettext/lib/libintl.* - name: Build Pythia + timeout-minutes: 30 run: ./build.sh build # Fix back Homebrew, for working Shellcheck tests and tmate debugging. @@ -112,9 +108,11 @@ jobs: sudo mv -v /usr/local/bin/git{.saved,} - name: Test Pythia + timeout-minutes: 5 run: ./build.sh test - name: Upload testing package + timeout-minutes: 5 run: | mkdir -pv ~/.ssh/ touch priv_key @@ -124,27 +122,31 @@ jobs: ./publish_dist.sh ; rm priv_key - name: Tmate debug on failure - if: ${{ failure() && !cancelled() && runner.debug }} + if: ${{ !cancelled() && runner.debug }} uses: chevah/action-tmate@v3 with: limit-access-to-actor: true macos-m1: - runs-on: m1 - timeout-minutes: ${{ matrix.tests.debug == 'yes' && 90 || 30 }} + # For macOS on Apple Silicon at GitHub. + runs-on: macos-latest + timeout-minutes: 60 steps: - uses: actions/checkout@v2 with: fetch-depth: 2 - name: Build Pythia + timeout-minutes: 20 run: ./build.sh build - name: Test Pythia + timeout-minutes: 5 run: ./build.sh test - name: Upload testing package + timeout-minutes: 5 run: | mkdir -pv ~/.ssh/ touch priv_key @@ -152,3 +154,9 @@ jobs: echo "${{ secrets.SFTPPLUS_BIN_PRIV_KEY }}" > priv_key echo "${{ secrets.SFTPPLUS_BIN_HOST_KEY }}" > ~/.ssh/known_hosts ./publish_dist.sh ; rm priv_key + + - name: Tmate debug on failure + if: ${{ !cancelled() && runner.debug }} + uses: chevah/action-tmate@v3 + with: + limit-access-to-actor: true diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index f4fb41ff..22fc7bef 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -15,11 +15,6 @@ concurrency: group: docker-${{ github.ref }} cancel-in-progress: true -# Set to 'yes' to open a tunnel to GitHub's VMs through tmate on failures. -# Also increase timeout-minutes for the relevant OS when debugging remotely. -# Not all platforms are supported by tmate (currently no support for Amazon 2). -env: - TMATE_DEBUG: 'no' # Using a job name that doesn't contain the OS name, to minimize the risk of # confusion with the OS names of the containers, which are the relevant ones. @@ -32,7 +27,7 @@ jobs: matrix: # Alpine 3.12 has musl 1.1.24, Amazon 2 has glibc 2.26. container: [ 'alpine:3.12', 'amazonlinux:2' ] - timeout-minutes: 45 + timeout-minutes: 60 steps: # OpenSSL gets updated by apk, but that is the Alpine way, so it's fine. @@ -65,11 +60,13 @@ jobs: git checkout ${GITHUB_HEAD_REF} - name: Build Pythia + timeout-minutes: 30 run: | cd pythia ./build.sh build - name: Test Pythia + timeout-minutes: 5 run: | cd pythia ./build.sh test @@ -77,6 +74,7 @@ jobs: # Using `~/` is problematic under Docker, use `/root/`. # Remove key in same step to avoid leaving it on disk if publishing fails. - name: Upload testing package + timeout-minutes: 5 run: | mkdir -pv /root/.ssh/ cd pythia @@ -87,9 +85,10 @@ jobs: ./publish_dist.sh ; rm priv_key # If one of the above steps fails, fire up tmate for remote debugging. - # Not working on Alpine (not supported) and CentOS 5 (glibc too old). + # Not all platforms are supported by tmate. + # Currently not supported: Alpine, Amazon 2, CentOS 5 (no glibc or too old). - name: Tmate debug on failure - if: failure() && env.TMATE_DEBUG == 'yes' + if: ${{ !cancelled() && runner.debug }} uses: chevah/action-tmate@v3 with: sudo: false diff --git a/build.conf b/build.conf index 2026643b..966da428 100644 --- a/build.conf +++ b/build.conf @@ -6,14 +6,17 @@ BUILD_DIR="build" # This is also defined independently in "publish_dist.sh". DIST_DIR="dist" +# Setting this as 0 disables tests during building (skips chevahbs_test phase). +PYTHIA_BUILD_TESTS="${PYTHIA_BUILD_TESTS:-1}" + # Python and lib versions. -PYTHON_BUILD_VERSION="3.11.7" -LIBFFI_VERSION="3.4.4" -ZLIB_VERSION="1.3" +PYTHON_BUILD_VERSION="3.11.9" +LIBFFI_VERSION="3.4.6" +ZLIB_VERSION="1.3.1" BZIP2_VERSION="1.0.8" # To check the signature of the XZ download: # "gpg --keyserver-options auto-key-retrieve --verify xz-*.sig xz-*.gz". -XZ_VERSION="5.4.5" +XZ_VERSION="5.6.2" # Statically build the BSD libedit on selected platforms to get the # readline module available without linking to the GPL-only readline libs. # If there's a need to reenable this, our libedit patch for Python 3.9 was @@ -21,35 +24,29 @@ XZ_VERSION="5.4.5" # A newer patch is available at https://github.com/python/cpython/issues/57710. LIBEDIT_VERSION="20170329-3.1" # Our OpenSSL libs are only used for Python's "ssl" module lately. -OPENSSL_VERSION="3.1.4" +OPENSSL_VERSION="3.0.14" # Use the version of the "sqlite-autoconf-VERSION.tar.gz" upstream download. # To get its SHA3-256 signature: "openssl dgst -sha3-256 sqlite-autoconf-*". # When updating this, also update the year in src/sqlite/chevahbs, if needed. -SQLITE_VERSION="3440200" +SQLITE_VERSION="3460000" +# Where ensurepip is not avaiable, this is used to bootstrap pip. # If latest get-pip.py stops working on older platforms, use something like: -# https://web.archive.org/web/20220122185015/https://bootstrap.pypa.io/. +# https://web.archive.org/web/20220122185015/https://bootstrap.pypa.io/ BOOTSTRAP_GET_PIP="https://bootstrap.pypa.io/get-pip.py" -# These are used by get-pip.py. -PIP_VERSION="23.3.1" -SETUPTOOLS_VERSION="69.0.2" +# Python modules installed after bootstraping pip. +PIP_VERSION="24.0" +SETUPTOOLS_VERSION="70.0.0" +# pycparser is explicitly installed to work around setuptools auto dependencies. +PYCPARSER_VERSION="2.22" -# Python modules versions to be used everywhere possible. -# Latest cryptography/bcrypt require Rust, use only wheels for them. -CFFI_VERSION="1.16.0" -BCRYPT_VERSION="4.1.1" -PSUTIL_VERSION="5.9.6" -SETPROCTITLE_VERSION="1.3.3" -MARKUPSAFE_VERSION="2.1.3" -CHARSETNORMALIZER_VERSION="3.3.2" +# Python modules that have to be built and/or installed in Pythia. +PSUTIL_VERSION="5.9.8" PYWIN32_VERSION="306" -# pycparser is explicitly installed to work around setuptools auto dependencies. -PYCPARSER_VERSION="2.21" - -# safety version is pinned to avoid picking older ones from our PyPI server. -SAFETY_VERSION="2.3.5" +# Pin safety to keep the deps of the test environment under control. +SAFETY_VERSION="3.2.0" # Global flags for building required libs. BUILD_LIBFFI="no" @@ -62,17 +59,20 @@ BUILD_SQLITE="yes" # Our custom PyPI server overwrites the default pypi.org option from "build.sh". PIP_INDEX_URL="https://bin.chevah.com:20443/pypi/simple" -# Array of default Python modules installed using pip. + +# Array of *default* Python modules installed using pip. +# This can be extended for some OS'es (check "os_quirks.sh" for details). +# Binary-only wheels should be installed when needed, not through Pythia. +# Still building psutil on musl Linux, that's why it's present here. PIP_LIBRARIES=(\ - cffi=="$CFFI_VERSION" \ - bcrypt=="$BCRYPT_VERSION" \ psutil=="$PSUTIL_VERSION" \ - setproctitle=="$SETPROCTITLE_VERSION" - MarkupSafe=="$MARKUPSAFE_VERSION" \ - charset-normalizer=="$CHARSETNORMALIZER_VERSION" \ ) # Array of default pip options. PIP_ARGS=(\ --index-url="$PIP_INDEX_URL" \ --no-warn-script-location \ ) +# Array of safety IDs to ignore. +# 67599: pip 24.0, https://data.safetycli.com/v/67599/f17/ (disputed). +# 70612: jinja2 3.1.4, https://data.safetycli.com/v/70612/97c (disputed). +SAFETY_IGNORED_IDS=(67599 70612) diff --git a/build.sh b/build.sh index 34b920a8..69646515 100755 --- a/build.sh +++ b/build.sh @@ -25,7 +25,7 @@ PYTHIA_VERSION="$(git log -n 1 --no-merges --pretty=format:%h)" exit_on_error $? 250 # Export the variables needed by the chevahbs scripts and the test phase. -export PYTHON_BUILD_VERSION PYTHIA_VERSION +export PYTHON_BUILD_VERSION PYTHIA_VERSION PYTHIA_BUILD_TESTS export BUILD_ZLIB BUILD_BZIP2 BUILD_XZ BUILD_LIBEDIT BUILD_LIBFFI BUILD_OPENSSL # OS detection is done by the common pythia.sh. The values are saved in a file. @@ -48,9 +48,9 @@ PYTHON_BIN="$INSTALL_DIR/bin/$PYTHON_VERSION" # Explicitly choose the C compiler in order to make it possible to switch # between native compilers and GCC on platforms such as the BSDs and Solaris. -export CC="gcc" +export CC="${CC:-gcc}" # Used for testing Python C++ extensions (test_cppext). -export CXX="g++" +export CXX="${CXX:-g++}" # Other needed tools (GNU flavours preferred). # For proper quoting, _CMD vars are Bash arrays of commands and optional flags. MAKE_CMD=(make) @@ -161,33 +161,38 @@ build_python() { fi } -# This gets get-pip.py -download_get_pip() { - echo "## Downloading get-pip.py... ##" - if [ ! -e "$BUILD_DIR"/get-pip.py ]; then - execute "${GET_CMD[@]}" \ - "$BUILD_DIR"/get-pip.py "$BOOTSTRAP_GET_PIP" +bootstrap_pip(){ + echo "### Bootstrapping pip... ###" + if [ "$OS" = "windows" ]; then + # The embeddable Windows package doesn't include "ensurepip". + echo "## Downloading get-pip.py... ##" + if [ ! -e "$BUILD_DIR"/get-pip.py ]; then + execute "${GET_CMD[@]}" "$BUILD_DIR"/get-pip.py "$BOOTSTRAP_GET_PIP" + fi + execute "$PYTHON_BIN" "$BUILD_DIR"/get-pip.py "${PIP_ARGS[@]}" \ + pip=="$PIP_VERSION" --no-setuptools \ + setuptools=="$SETUPTOOLS_VERSION" + else + echo "## Installing pip from included ensurepip module... ##" + execute "$PYTHON_BIN" -m ensurepip --upgrade fi } - - # Compile and install all Python extra libraries. command_install_python_modules() { echo "::group::Install Python modules with pip $PIP_VERSION" echo "#### Installing Python modules... ####" - # Install latest PIP, then instruct it to get exact versions of setuptools. - # Otherwise, get-pip.py always tries to get latest versions. - download_get_pip + # Install latest PIP, then instruct it to get exact version of setuptools. + bootstrap_pip echo "# Installing latest pip with preferred setuptools version... #" - execute "$PYTHON_BIN" "$BUILD_DIR"/get-pip.py "${PIP_ARGS[@]}" \ - pip=="$PIP_VERSION" --no-setuptools setuptools=="$SETUPTOOLS_VERSION" + execute "$PYTHON_BIN" -m pip install "${PIP_ARGS[@]}" \ + pip=="$PIP_VERSION" setuptools=="$SETUPTOOLS_VERSION" # pycparser is installed first as setup_requires is ugly. # https://pip.pypa.io/en/stable/reference/pip_install/#controlling-setup-requires echo "# Installing pycparser with preferred setuptools version... #" - execute "$PYTHON_BIN" -m pip \ - install "${PIP_ARGS[@]}" -U pycparser=="$PYCPARSER_VERSION" + execute "$PYTHON_BIN" -m pip install "${PIP_ARGS[@]}" \ + -U pycparser=="$PYCPARSER_VERSION" if [ "$OS" = "windows" ]; then echo -e "\tSkip makefile updating on Windows" @@ -217,6 +222,8 @@ help_text_test="Run own tests for the newly-build Python distribution." command_test() { local test_file="test_python_binary_dist.py" local python_binary="$PYTHON_BIN" + local safety_id_to_ignore + declare -a safety_ignore_opts echo "::group::Chevah tests" if [ ! -d "$BUILD_DIR" ]; then @@ -240,7 +247,17 @@ command_test() { execute "$python_binary" -m pip list --outdated --format=columns execute "$python_binary" -m pip install "${PIP_ARGS[@]}" \ safety=="$SAFETY_VERSION" - execute "$python_binary" -m safety check --full-report + + if (( ${#SAFETY_IGNORED_IDS[@]} != 0 )); then + (>&2 echo "Following Safety DB IDs are excepted from checks:") + (>&2 echo -e "\t${SAFETY_IGNORED_IDS[*]}") + for safety_id_to_ignore in "${SAFETY_IGNORED_IDS[@]}"; do + safety_ignore_opts+=("-i $safety_id_to_ignore") + done + fi + + execute "$python_binary" -m safety check --full-report \ + "${safety_ignore_opts[@]}" execute popd echo "::endgroup::" diff --git a/functions_build.sh b/functions_build.sh index 8b61d632..091e40ef 100644 --- a/functions_build.sh +++ b/functions_build.sh @@ -91,7 +91,11 @@ chevahbs_build() { } chevahbs_test() { - chevahbs_try "$@" + if [ "${PYTHIA_BUILD_TESTS:-1}" -ne 0 ]; then + chevahbs_try "$@" + else + (>&2 echo "PYTHIA_BUILD_TESTS is set to 0. Skipping build tests!") + fi } chevahbs_install() { diff --git a/os_quirks.sh b/os_quirks.sh index f38749be..bba19557 100644 --- a/os_quirks.sh +++ b/os_quirks.sh @@ -10,27 +10,33 @@ case $OS in BUILD_BZIP2="no" BUILD_SQLITE="no" BUILD_OPENSSL="no" - PIP_LIBRARIES=("${PIP_LIBRARIES[@]}" \ - pywin32=="$PYWIN32_VERSION" \ - ) + PIP_LIBRARIES+=(pywin32=="$PYWIN32_VERSION") ;; linux*) - if [ -f /etc/alpine-release ]; then - # The busybox ersatz binary on Alpine Linux is different. - SHA_CMD=(sha512sum -csw) - fi # Build as portable as possible, only glibc/musl should be needed. + export CFLAGS="${CFLAGS:-} -mtune=generic" BUILD_LIBFFI="yes" BUILD_ZLIB="yes" BUILD_XZ="yes" + if [ -f /etc/alpine-release ]; then + # The busybox ersatz binary on Alpine Linux is different. + SHA_CMD=(sha512sum -csw) + fi ;; macos) export CC="clang" export CXX="clang++" - export CFLAGS="${CFLAGS:-} -mmacosx-version-min=10.13" - # setup.py skips building readline by default, as it sets this to - # "10.4", and then tries to avoid the broken readline in OS X 10.4. - export MACOSX_DEPLOYMENT_TARGET=10.13 + if [ "$ARCH" = "x64" ]; then + export CFLAGS="${CFLAGS:-} -mmacosx-version-min=10.13" + # setup.py skips building readline by default, as it sets this to + # "10.4", and then tries to avoid the broken readline in OS X 10.4. + export MACOSX_DEPLOYMENT_TARGET=10.13 + else + export CFLAGS="${CFLAGS:-} -mmacosx-version-min=11.0" + # setup.py skips building readline by default, as it sets this to + # "10.4", and then tries to avoid the broken readline in OS X 10.4. + export MACOSX_DEPLOYMENT_TARGET=11.0 + fi # System includes bzip2 libs by default. BUILD_BZIP2="no" BUILD_XZ="yes" diff --git a/pythia.sh b/pythia.sh index efe880cd..c833a9ba 100755 --- a/pythia.sh +++ b/pythia.sh @@ -689,10 +689,13 @@ check_musl_version(){ echo "No specific runtime for the current distribution / version / arch." echo "Minimum musl version for this arch: 1.1.$supported_musl11_version." - # Tested with musl 1.1.24/1.2.2. + # Tested with musl 1.1.24/1.2.2/1.2.5/1.2.5_git20240512. musl_version="$(grep -E ^"Version" "$ldd_output_file" | cut -d" " -f2)" rm "$ldd_output_file" + # Bleeding edge distributions might use git versions. + musl_version="${musl_version//_git/.}" + if [[ "$musl_version" =~ [^[:digit:]\.] ]]; then (>&2 echo "Musl version should only have digits and dots, but:") (>&2 echo " \$musl_version=$musl_version") diff --git a/src/Python-Windows/sha512.sum b/src/Python-Windows/sha512.sum index adadea08..387f8a07 100644 --- a/src/Python-Windows/sha512.sum +++ b/src/Python-Windows/sha512.sum @@ -1 +1 @@ -6a00f06411edb5eb08ae7f740ccb8337fbe94d94ac86b266758591c5a7496e2e99a5ff0a19eeb074ad5b8d9e2ed7d16ce3c73fb5760300600e0806ae191e5876 python-3.11.7.amd64.zip +24106fc0e2a798c34840222083f2643c95a0e14c1eb8bb5489dfbcc3eb56d631cc0649c406d75eae173e2d03cd1cf88d246e5903abf62d414fab88e94afa176e python-3.11.9.amd64.zip diff --git a/src/Python/chevahbs b/src/Python/chevahbs index 696c2d23..4c1e7dd8 100755 --- a/src/Python/chevahbs +++ b/src/Python/chevahbs @@ -57,6 +57,10 @@ chevahbs_configure() { # Note that this is not needed on Alpine. LDFLAGS="$LDFLAGS -lm" ;; + linux_musl) + # Needed for Alpine Linux 3.20. + LDFLAGS="$LDFLAGS -lffi" + ;; fbsd*|sol11*) LDFLAGS="$LDFLAGS -lncurses" ;; @@ -90,11 +94,6 @@ chevahbs_try() { # Locales not supported on Alpine 3.12, failing locale-related tests. (>&2 echo -e "\tNot running Python upstream tests on musl-based Linux.") else - if [ "$PYTHON_BUILD_VERSION" = "3.11.7" ]; then - # test.test_asyncio.test_streams fails, no upstream fix found. - echo -e "\tSkipping asyncio streams tests for version 3.11.7..." - execute rm Lib/test/test_asyncio/test_streams.py - fi execute "${MAKE_CMD[@]}" test fi } diff --git a/src/Python/sha512.sum b/src/Python/sha512.sum index 03abe6f2..398fd287 100644 --- a/src/Python/sha512.sum +++ b/src/Python/sha512.sum @@ -1 +1 @@ -77e5d75fdd5c3f34bb843c9e55381e35f0e6cd18c2c04b59a73c5be6906610db28c697a90602560470d11839c3b352cbd1cd138b41120a69790e8e6469e17025 Python-3.11.7.tgz +33651f373fcc6da9aac895da25300de0f807e3643daff99e8c81e6205d75c67a060d7fd7bbee5ce8b5e142aa2f407284d90b182b5fffd9befc54e6b55b7c08f7 Python-3.11.9.tgz diff --git a/src/chevah-python-tests/test_python_binary_dist.py b/src/chevah-python-tests/test_python_binary_dist.py index f1ae4f6a..f72e82ec 100644 --- a/src/chevah-python-tests/test_python_binary_dist.py +++ b/src/chevah-python-tests/test_python_binary_dist.py @@ -341,10 +341,10 @@ def main(): import _hashlib exit_code = egg_check(_hashlib) | exit_code # Check OpenSSL version to prevent linking to OS libs. - expecting_openssl_version = u'OpenSSL 3.1.4 24 Oct 2023' + expecting_openssl_version = u'OpenSSL 3.0.14 4 Jun 2024' if CHEVAH_OS == "windows": # The upstream Windows packages embed their own OpenSSL libs. - expecting_openssl_version = u'OpenSSL 3.0.11 19 Sep 2023' + expecting_openssl_version = u'OpenSSL 3.0.13 30 Jan 2024' if current_openssl_version != expecting_openssl_version: sys.stderr.write('Expecting %s, got %s.\n' % ( expecting_openssl_version, current_openssl_version)) @@ -379,30 +379,6 @@ def main(): sys.stderr.write('"multiprocessing" is missing or broken.\n') exit_code = 140 - try: - import cffi - ffibuilder = cffi.FFI() - except: - sys.stderr.write('"cffi" is missing or broken.\n') - exit_code = 141 - else: - print ('cffi %s' % (cffi.__version__,)) - - try: - import bcrypt - password = b"super secret password" - # Hash the password with a randomly-generated salt. - hashed = bcrypt.hashpw(password, bcrypt.gensalt()) - # Check that an unhashed password matches hashed one. - if bcrypt.checkpw(password, hashed): - print('bcrypt %s' % (bcrypt.__version__,)) - else: - sys.stderr.write('"bcrypt" is present, but broken.\n') - exit_code = 146 - except: - sys.stderr.write('"bcrypt" is missing.\n') - exit_code = 147 - try: import bz2 test_string = b"just a random string to quickly test bz2" @@ -429,15 +405,6 @@ def main(): sys.stderr.write('"lzma" is missing.\n') exit_code = 151 - try: - import setproctitle - current_process_title = setproctitle.getproctitle() - except: - sys.stderr.write('"setproctitle" is missing or broken.\n') - exit_code = 150 - else: - print('setproctitle %s' % (setproctitle.__version__,)) - try: from sqlite3 import dbapi2 as sqlite except: @@ -465,24 +432,6 @@ def main(): else: print('"uuid" module is present.') - try: - from charset_normalizer import from_path - tmp_results = from_path('../README.rst') - except: - sys.stderr.write('"charset-normalizer" is missing or broken.\n') - exit_code = 164 - else: - print('"charset-normalizer" module is present.') - - try: - from markupsafe import escape - tmp_text = escape('') - except: - sys.stderr.write('"markupsafe" is missing or broken.\n') - exit_code = 165 - else: - print('"markupsafe" module is present.') - if os.name == 'nt': # Windows specific modules. try: @@ -500,6 +449,15 @@ def main(): except Exception as error: sys.stderr.write('"pywin32" missing or broken.\n {}'.format(error)) exit_code = 172 + else: + for path in sys.path: + if os.path.isdir(path): + filename = os.path.join(path, 'pywin32.version.txt') + if os.path.isfile(filename): + with open(filename) as f: + pywin32_version = f.read() + pywin32_version = pywin32_version.strip() + print('pywin32 %s' % (pywin32_version)) else: # Linux / Unix stuff. diff --git a/src/libffi/sha512.sum b/src/libffi/sha512.sum index 20393528..7a3f08cf 100644 --- a/src/libffi/sha512.sum +++ b/src/libffi/sha512.sum @@ -1 +1 @@ -88680aeb0fa0dc0319e5cd2ba45b4b5a340bc9b4bcf20b1e0613b39cd898f177a3863aa94034d8e23a7f6f44d858a53dcd36d1bb8dee13b751ef814224061889 libffi-3.4.4.tar.gz +033d2600e879b83c6bce0eb80f69c5f32aa775bf2e962c9d39fbd21226fa19d1e79173d8eaa0d0157014d54509ea73315ad86842356fc3a303c0831c94c6ab39 libffi-3.4.6.tar.gz diff --git a/src/openssl/sha512.sum b/src/openssl/sha512.sum index 33ecfc79..6334693b 100644 --- a/src/openssl/sha512.sum +++ b/src/openssl/sha512.sum @@ -1 +1 @@ -a69df4a018f57dee7d8a57c8003a6869eba11f1eaa394518976642a993780d0de3326019e92dea4c679c6c581fef568ea616ec541afc0792800359c606dffcd2 openssl-3.1.4.tar.gz +1c59c01e60da902a20780d71f1fa5055d4037f38c4bc3fb27ed5b91f211b36a6018055409441ad4df58b5e9232b2528240d02067272c3c9ccb8c221449ca9ac0 openssl-3.0.14.tar.gz diff --git a/src/sqlite-autoconf/chevahbs b/src/sqlite-autoconf/chevahbs index 7bacbd98..aae540ac 100755 --- a/src/sqlite-autoconf/chevahbs +++ b/src/sqlite-autoconf/chevahbs @@ -15,7 +15,7 @@ chevahbs_getsources() { local name="$1" local ver="$2" local ext="tar.gz" - local link=https://sqlite.org/2023/"$name"-"$ver"."$ext" + local link=https://sqlite.org/2024/"$name"-"$ver"."$ext" download_sources "$name" "$ver" "$link" "$ext" } diff --git a/src/sqlite-autoconf/sha512.sum b/src/sqlite-autoconf/sha512.sum index 6a76ec3d..592bfd12 100644 --- a/src/sqlite-autoconf/sha512.sum +++ b/src/sqlite-autoconf/sha512.sum @@ -1 +1 @@ -59ad55df15eb84430f5286db2e5ceddd6ca1fc207a6343546a365c0c1baf20258e96c53d2ad48b50385608d03de09a692ae834cb78a39d1a48cb36a05722e402 sqlite-autoconf-3440200.tar.gz +631ffe4b39dffbafdcb8ac09a6a84cd7959505ecc588d8ad9278d0ff0c3ea467f87c11167e1b1a3f56d62178e679780e2be313ae3badae8ea056709d71bd4817 sqlite-autoconf-3460000.tar.gz diff --git a/src/xz/sha512.sum b/src/xz/sha512.sum index 36a41937..d151b777 100644 --- a/src/xz/sha512.sum +++ b/src/xz/sha512.sum @@ -1 +1 @@ -91f8f548c915de0ed79cee13ce0336b51c1cebf2eb142fa1efecfd07771c662c99cad3730540fcb712057ab274130e13b87960f6b4c62f0bd9477f27a303fb2b xz-5.4.5.tar.gz +c32c32c95e3541b906e0284e66a953ace677e0ce6af2084e7b122600047bf7542c1b0fabb5909b19ff79fba6def530be674df1c675b22a47a8d57f3f0b736a82 xz-5.6.2.tar.gz diff --git a/src/zlib/sha512.sum b/src/zlib/sha512.sum index 3bd6220f..f383544f 100644 --- a/src/zlib/sha512.sum +++ b/src/zlib/sha512.sum @@ -1 +1 @@ -185795044461cd78a5545250e06f6efdb0556e8d1bfe44e657b509dd6f00ba8892c8eb3febe65f79ee0b192d6af857f0e0055326d33a881449f3833f92e5f8fb zlib-1.3.tar.gz +580677aad97093829090d4b605ac81c50327e74a6c2de0b85dd2e8525553f3ddde17556ea46f8f007f89e435493c9a20bc997d1ef1c1c2c23274528e3c46b94f zlib-1.3.1.tar.gz