Re: git: a9d9d3a42723 - main - lang/python: Revert "add bytecode trigger"

From: Tobias C. Berner <tcberner_at_gmail.com>
Date: Tue, 28 Feb 2023 05:44:50 UTC
Moin moin

So you reverted the first major change to the python framework in ages
due to a leaf-port breakin non-fatally?
This looks a little bit like overstepping the bounds of good taste a bit to me.


mfg Tobias

On Mon, 27 Feb 2023 at 22:05, Matthias Andree <mandree@freebsd.org> wrote:
>
> The branch main has been updated by mandree:
>
> URL: https://cgit.FreeBSD.org/ports/commit/?id=a9d9d3a4272303bf226b9deb55c42303e4fcebdc
>
> commit a9d9d3a4272303bf226b9deb55c42303e4fcebdc
> Author:     Matthias Andree <mandree@FreeBSD.org>
> AuthorDate: 2023-02-27 21:01:32 +0000
> Commit:     Matthias Andree <mandree@FreeBSD.org>
> CommitDate: 2023-02-27 21:04:52 +0000
>
>     lang/python: Revert "add bytecode trigger"
>
>     This reverts commit c17ddfbf66e2801ec620d49979aca3d7077d7002.
>
>     This causes breakage on several ports, and the next iteration
>     requires a full exp-run. See:
>
>     Differential Revision: https://reviews.freebsd.org/D34739
> ---
>  CHANGES                                |  8 -------
>  Mk/Uses/python.mk                      | 25 ++++----------------
>  UPDATING                               | 17 --------------
>  lang/python310/Makefile                | 12 ++++++----
>  lang/python310/files/python3.10.ucl.in | 40 --------------------------------
>  lang/python311/Makefile                | 12 ++++++----
>  lang/python311/files/python3.11.ucl.in | 40 --------------------------------
>  lang/python37/Makefile                 | 11 +++++----
>  lang/python37/files/python3.7.ucl.in   | 42 ----------------------------------
>  lang/python38/Makefile                 | 11 +++++----
>  lang/python38/files/python3.8.ucl.in   | 42 ----------------------------------
>  lang/python39/Makefile                 | 12 ++++++----
>  lang/python39/files/python3.9.ucl.in   | 40 --------------------------------
>  13 files changed, 43 insertions(+), 269 deletions(-)
>
> diff --git a/CHANGES b/CHANGES
> index a8736d2217ea..2c65d5dbbe11 100644
> --- a/CHANGES
> +++ b/CHANGES
> @@ -10,14 +10,6 @@ in the release notes and/or placed into UPDATING.
>
>  All ports committers are allowed to commit to this file.
>
> -20230215:
> -AUTHOR: vishwin@FreeBSD.org
> -
> -  USES=python now includes SUB_LIST entries to facilitate common
> -  substitutions for python.mk variables other than in ${PLIST}.
> -  They are the same as PLIST_SUB, except PYTHON_INCLUDEDIR,
> -  PYTHON_LIBDIR and PYTHON_SITELIBDIR include ${PREFIX}.
> -
>  20230111:
>  AUTHOR: vishwin@FreeBSD.org
>
> diff --git a/Mk/Uses/python.mk b/Mk/Uses/python.mk
> index 2da705f42be1..e8b9d2b59343 100644
> --- a/Mk/Uses/python.mk
> +++ b/Mk/Uses/python.mk
> @@ -257,20 +257,17 @@
>  #                        packages for different Python versions.
>  #                        default: -py${PYTHON_SUFFIX}
>  #
> -# Using USES=python also will add some useful entries to SUB_LIST and PLIST_SUB:
> +# Using USES=python also will add some useful entries to PLIST_SUB:
>  #
> -#      PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR}
> -#      PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR}
> +#      PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR:S;${PREFIX}/;;}
> +#      PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;}
>  #      PYTHON_PLATFORM=${PYTHON_PLATFORM}
> -#      PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR}
> +#      PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;}
>  #      PYTHON_SUFFIX=${PYTHON_SUFFIX}
>  #      PYTHON_VER=${PYTHON_VER}
>  #      PYTHON_VERSION=${PYTHON_VERSION}
>  #
> -# where PYTHON_INCLUDEDIR, PYTHON_LIBDIR and PYTHON_SITELIBDIR have their PREFIX
> -# stripped for PLIST_SUB.
> -#
> -# PYTHON2 and PYTHON3 will also be set according to the Python version:
> +# and PYTHON2 and PYTHON3 will be set according to the Python version:
>  #
>  #      PYTHON2="" PYTHON3="@comment " for Python 2.x
>  #      PYTHON2="@comment " PYTHON3="" for Python 3.x
> @@ -788,16 +785,6 @@ ${_stage}_DEPENDS+=        ${PYTHON_CMD}:${PYTHON_PORTSDIR}
>  PREFIX=                ${PYTHONBASE}
>  .  endif
>
> -# Substitutions for SUB_FILES
> -SUB_LIST+=     PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR} \
> -               PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR} \
> -               PYTHON_PLATFORM=${PYTHON_PLATFORM} \
> -               PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR} \
> -               PYTHON_SUFFIX=${PYTHON_SUFFIX} \
> -               PYTHON_EXT_SUFFIX=${PYTHON_EXT_SUFFIX} \
> -               PYTHON_VER=${PYTHON_VER} \
> -               PYTHON_VERSION=${PYTHON_VERSION}
> -
>  # Substitutions for pkg-plist
>  # Use a short form of the PYTHONPREFIX_*DIR variables; we don't need the
>  # base directory in the plist file.
> @@ -810,10 +797,8 @@ PLIST_SUB+=        PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR:S;${PREFIX}/;;} \
>                 PYTHON_VER=${PYTHON_VER} \
>                 PYTHON_VERSION=${PYTHON_VERSION}
>  .  if ${PYTHON_REL} < 30000
> -SUB_LIST+=     PYTHON2="" PYTHON3="@comment "
>  PLIST_SUB+=    PYTHON2="" PYTHON3="@comment "
>  .  else
> -SUB_LIST+=     PYTHON2="@comment " PYTHON3=""
>  PLIST_SUB+=    PYTHON2="@comment " PYTHON3=""
>  .  endif
>
> diff --git a/UPDATING b/UPDATING
> index 3f599f6b93bf..8b85cb1b5efc 100644
> --- a/UPDATING
> +++ b/UPDATING
> @@ -48,23 +48,6 @@ you update your ports collection, before attempting any port upgrades.
>    # pkg set -o databases/mysql57-server:databases/mysql80-server
>    # pkg upgrade
>
> -20230215:
> -  AFFECTS: users of python
> -  AUTHOR: vishwin@FreeBSD.org
> -
> -  A trigger has been added to the lang/python3* ports to compile,
> -  write and remove bytecode files (.pyc) in site-packages after all
> -  pkg transactions have been completed. pkg will no longer manage
> -  such files directly, as they are meant to be generated after
> -  installation.
> -
> -  For those ports/packages that still package bytecode, some package
> -  checksum mismatches on those files may occur. This is harmless
> -  and will be rectified.
> -
> -  Technical details available at:
> -        https://wiki.freebsd.org/Python/CompiledPackages
> -
>  20230213:
>    Affects: users of sysutils/nut*
>    AUTHOR: cy@FreeBSD.org
> diff --git a/lang/python310/Makefile b/lang/python310/Makefile
> index 4b2aafa07a63..f3c13fc09ffd 100644
> --- a/lang/python310/Makefile
> +++ b/lang/python310/Makefile
> @@ -1,6 +1,6 @@
>  PORTNAME=      python
>  DISTVERSION=   ${PYTHON_DISTVERSION}
> -PORTREVISION=  1
> +PORTREVISION=  2
>  CATEGORIES=    lang python
>  MASTER_SITES=  PYTHON/ftp/python/${DISTVERSION:C/[a-z].*//}
>  PKGNAMESUFFIX= ${PYTHON_SUFFIX}
> @@ -15,8 +15,8 @@ LICENSE=      PSFL
>
>  LIB_DEPENDS=   libffi.so:devel/libffi
>
> -USES=          compiler:c11 cpe ncurses pathfix pkgconfig \
> -               python:${PYTHON_DISTVERSION:R},env readline shebangfix ssl tar:xz trigger
> +USES=          compiler:c11 cpe ncurses pathfix pkgconfig readline \
> +               shebangfix ssl tar:xz
>  PATHFIX_MAKEFILEIN=    Makefile.pre.in
>  USE_LDCONFIG=  yes
>  GNU_CONFIGURE= yes
> @@ -25,7 +25,11 @@ SHEBANG_FILES=       Lib/*.py Lib/*/*.py Lib/*/*/*.py Lib/*/*/*/*.py
>  SHEBANG_FILES+=        Lib/test/ziptestdata/exe_with_z64 \
>                 Lib/test/ziptestdata/exe_with_zip \
>                 Lib/test/ziptestdata/header.sh
> -TRIGGERS=      ${PYTHON_VERSION}
> +
> +# Duplicate python.mk variables. TODO: Let lang/python?? ports use python.mk bits.
> +PYTHON_VER=            ${PYTHON_DISTVERSION:R}
> +PYTHON_VERSION=                python${PYTHON_VER}
> +PYTHON_SUFFIX=         ${PYTHON_VER:S/.//g}
>
>  DISABLED_EXTENSIONS=   _sqlite3 _tkinter _gdbm
>  CONFIGURE_ARGS+=       --enable-shared --without-ensurepip \
> diff --git a/lang/python310/files/python3.10.ucl.in b/lang/python310/files/python3.10.ucl.in
> deleted file mode 100644
> index 63d455839549..000000000000
> --- a/lang/python310/files/python3.10.ucl.in
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -path_glob: "%%PYTHON_SITELIBDIR%%/*"
> -trigger: {
> -       type: lua
> -       sandbox: false
> -       script: <<EOS
> -function cleanup(directory)
> -  for _,d in ipairs(pkg.readdir(directory)) do
> -    local full_path = directory .. "/" .. d
> -    local stat = pkg.stat(full_path)
> -    if stat["type"] == "dir" then
> -      if (d ~= "__pycache__") then
> -        cleanup(full_path)
> -      else
> -        for _,bytecode_file in ipairs(pkg.readdir(full_path)) do
> -          local file_origin = string.gsub(bytecode_file, "[.]cpython[-]%%PYTHON_SUFFIX%%[.].*pyc", ".py")
> -          if file_origin  then
> -            local origin_path = directory .. "/" .. file_origin
> -            if (not pkg.stat(origin_path)) then
> -              --print("  >=> removed stale bytecode " .. bytecode_file)
> -              os.remove(full_path .. "/" .. bytecode_file)
> -            end
> -          end
> -        end
> -      end
> -      local res = pkg.readdir(full_path)
> -      if #res == 0 then
> -        --print("  >=> removed empty directory " .. full_path )
> -        os.remove(full_path)
> -      end
> -    end
> -  end
> -end
> -
> -print(">=> Cleaning stale bytecode files...")
> -cleanup("%%PYTHON_SITELIBDIR%%")
> -
> -print(">=> Byte-compiling Python source files...")
> -pkg.exec({"%%PYTHON_VERSION%%", "-m", "compileall", "-q", "-o", "0", "-o", "1", "-o", "2", "%%PYTHON_SITELIBDIR%%"})
> -EOS
> -}
> diff --git a/lang/python311/Makefile b/lang/python311/Makefile
> index c1bbfa79002e..96c4215f8b0e 100644
> --- a/lang/python311/Makefile
> +++ b/lang/python311/Makefile
> @@ -1,6 +1,6 @@
>  PORTNAME=      python
>  DISTVERSION=   ${PYTHON_DISTVERSION}
> -PORTREVISION=  1
> +PORTREVISION=  2
>  CATEGORIES=    lang python
>  MASTER_SITES=  PYTHON/ftp/python/${DISTVERSION:C/[a-z].*//}
>  PKGNAMESUFFIX= ${PYTHON_SUFFIX}
> @@ -15,8 +15,8 @@ LICENSE=      PSFL
>
>  LIB_DEPENDS=   libffi.so:devel/libffi
>
> -USES=          compiler:c11 cpe ncurses pathfix pkgconfig \
> -               python:${PYTHON_DISTVERSION:R},env readline shebangfix ssl tar:xz trigger
> +USES=          compiler:c11 cpe ncurses pathfix pkgconfig readline \
> +               shebangfix ssl tar:xz
>  PATHFIX_MAKEFILEIN=    Makefile.pre.in
>  USE_LDCONFIG=  yes
>  GNU_CONFIGURE= yes
> @@ -25,7 +25,11 @@ SHEBANG_FILES=       Lib/*.py Lib/*/*.py Lib/*/*/*.py Lib/*/*/*/*.py
>  SHEBANG_FILES+=        Lib/test/ziptestdata/exe_with_z64 \
>                 Lib/test/ziptestdata/exe_with_zip \
>                 Lib/test/ziptestdata/header.sh
> -TRIGGERS=      ${PYTHON_VERSION}
> +
> +# Duplicate python.mk variables. TODO: Let lang/python?? ports use python.mk bits.
> +PYTHON_VER=            ${PYTHON_DISTVERSION:R}
> +PYTHON_VERSION=                python${PYTHON_VER}
> +PYTHON_SUFFIX=         ${PYTHON_VER:S/.//g}
>
>  DISABLED_EXTENSIONS=   _sqlite3 _tkinter _gdbm
>  CONFIGURE_ARGS+=       --enable-shared --without-ensurepip \
> diff --git a/lang/python311/files/python3.11.ucl.in b/lang/python311/files/python3.11.ucl.in
> deleted file mode 100644
> index 63d455839549..000000000000
> --- a/lang/python311/files/python3.11.ucl.in
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -path_glob: "%%PYTHON_SITELIBDIR%%/*"
> -trigger: {
> -       type: lua
> -       sandbox: false
> -       script: <<EOS
> -function cleanup(directory)
> -  for _,d in ipairs(pkg.readdir(directory)) do
> -    local full_path = directory .. "/" .. d
> -    local stat = pkg.stat(full_path)
> -    if stat["type"] == "dir" then
> -      if (d ~= "__pycache__") then
> -        cleanup(full_path)
> -      else
> -        for _,bytecode_file in ipairs(pkg.readdir(full_path)) do
> -          local file_origin = string.gsub(bytecode_file, "[.]cpython[-]%%PYTHON_SUFFIX%%[.].*pyc", ".py")
> -          if file_origin  then
> -            local origin_path = directory .. "/" .. file_origin
> -            if (not pkg.stat(origin_path)) then
> -              --print("  >=> removed stale bytecode " .. bytecode_file)
> -              os.remove(full_path .. "/" .. bytecode_file)
> -            end
> -          end
> -        end
> -      end
> -      local res = pkg.readdir(full_path)
> -      if #res == 0 then
> -        --print("  >=> removed empty directory " .. full_path )
> -        os.remove(full_path)
> -      end
> -    end
> -  end
> -end
> -
> -print(">=> Cleaning stale bytecode files...")
> -cleanup("%%PYTHON_SITELIBDIR%%")
> -
> -print(">=> Byte-compiling Python source files...")
> -pkg.exec({"%%PYTHON_VERSION%%", "-m", "compileall", "-q", "-o", "0", "-o", "1", "-o", "2", "%%PYTHON_SITELIBDIR%%"})
> -EOS
> -}
> diff --git a/lang/python37/Makefile b/lang/python37/Makefile
> index 459ebdfd771b..ec98e226f309 100644
> --- a/lang/python37/Makefile
> +++ b/lang/python37/Makefile
> @@ -1,6 +1,6 @@
>  PORTNAME=      python
>  DISTVERSION=   ${PYTHON_DISTVERSION}
> -PORTREVISION=  1
> +PORTREVISION=  2
>  CATEGORIES=    lang python
>  MASTER_SITES=  PYTHON/ftp/python/${DISTVERSION}
>  PKGNAMESUFFIX= ${PYTHON_SUFFIX}
> @@ -19,14 +19,17 @@ EXPIRATION_DATE=    2023-06-27
>  LIB_DEPENDS=   libffi.so:devel/libffi \
>                 libmpdec.so:math/mpdecimal
>
> -USES=          cpe ncurses pathfix pkgconfig python:${PYTHON_DISTVERSION:R},env readline \
> -               shebangfix ssl tar:xz trigger
> +USES=          cpe ncurses pathfix pkgconfig readline shebangfix ssl tar:xz
>  PATHFIX_MAKEFILEIN=    Makefile.pre.in
>  USE_LDCONFIG=  yes
>  GNU_CONFIGURE= yes
>  python_CMD=    ${PREFIX}/bin/python${PYTHON_DISTVERSION:R}
>  SHEBANG_FILES= Lib/*.py Lib/*/*.py Lib/*/*/*.py Lib/*/*/*/*.py
> -TRIGGERS=      ${PYTHON_VERSION}
> +
> +# Duplicate python.mk variables. TODO: Let lang/python?? ports use python.mk bits.
> +PYTHON_VER=            ${PYTHON_DISTVERSION:R}
> +PYTHON_VERSION=                python${PYTHON_VER}
> +PYTHON_SUFFIX=         ${PYTHON_VER:S/.//g}
>
>  DISABLED_EXTENSIONS=   _sqlite3 _tkinter _gdbm
>  CONFIGURE_ARGS+=       --enable-shared --with-system-ffi --with-system-libmpdec --without-ensurepip
> diff --git a/lang/python37/files/python3.7.ucl.in b/lang/python37/files/python3.7.ucl.in
> deleted file mode 100644
> index a9ebb18f9c27..000000000000
> --- a/lang/python37/files/python3.7.ucl.in
> +++ /dev/null
> @@ -1,42 +0,0 @@
> -path_glob: "%%PYTHON_SITELIBDIR%%/*"
> -trigger: {
> -       type: lua
> -       sandbox: false
> -       script: <<EOS
> -function cleanup(directory)
> -  for _,d in ipairs(pkg.readdir(directory)) do
> -    local full_path = directory .. "/" .. d
> -    local stat = pkg.stat(full_path)
> -    if stat["type"] == "dir" then
> -      if (d ~= "__pycache__") then
> -        cleanup(full_path)
> -      else
> -        for _,bytecode_file in ipairs(pkg.readdir(full_path)) do
> -          local file_origin = string.gsub(bytecode_file, "[.]cpython[-]%%PYTHON_SUFFIX%%[.].*pyc", ".py")
> -          if file_origin  then
> -            local origin_path = directory .. "/" .. file_origin
> -            if (not pkg.stat(origin_path)) then
> -              --print("  >=> removed stale bytecode " .. bytecode_file)
> -              os.remove(full_path .. "/" .. bytecode_file)
> -            end
> -          end
> -        end
> -      end
> -      local res = pkg.readdir(full_path)
> -      if #res == 0 then
> -        --print("  >=> removed empty directory " .. full_path )
> -        os.remove(full_path)
> -      end
> -    end
> -  end
> -end
> -
> -print(">=> Cleaning stale bytecode files...")
> -cleanup("%%PYTHON_SITELIBDIR%%")
> -
> -print(">=> Byte-compiling Python source files...")
> -pkg.exec({"%%PYTHON_VERSION%%", "-m", "compileall", "-q", "%%PYTHON_SITELIBDIR%%"})
> -pkg.exec({"%%PYTHON_VERSION%%", "-O", "-m", "compileall", "-q", "%%PYTHON_SITELIBDIR%%"})
> -pkg.exec({"%%PYTHON_VERSION%%", "-OO", "-m", "compileall", "-q", "%%PYTHON_SITELIBDIR%%"})
> -EOS
> -}
> diff --git a/lang/python38/Makefile b/lang/python38/Makefile
> index 056ff45a8f98..07d227c23956 100644
> --- a/lang/python38/Makefile
> +++ b/lang/python38/Makefile
> @@ -1,6 +1,6 @@
>  PORTNAME=      python
>  DISTVERSION=   ${PYTHON_DISTVERSION}
> -PORTREVISION=  1
> +PORTREVISION=  2
>  CATEGORIES=    lang python
>  MASTER_SITES=  PYTHON/ftp/python/${DISTVERSION}
>  PKGNAMESUFFIX= ${PYTHON_SUFFIX}
> @@ -15,8 +15,7 @@ LICENSE=      PSFL
>
>  LIB_DEPENDS=   libffi.so:devel/libffi
>
> -USES=          cpe ncurses pathfix pkgconfig python:${PYTHON_DISTVERSION:R},env readline \
> -               shebangfix ssl tar:xz trigger
> +USES=          cpe ncurses pathfix pkgconfig readline shebangfix ssl tar:xz
>  PATHFIX_MAKEFILEIN=    Makefile.pre.in
>  USE_LDCONFIG=  yes
>  GNU_CONFIGURE= yes
> @@ -25,7 +24,11 @@ SHEBANG_FILES=       Lib/*.py Lib/*/*.py Lib/*/*/*.py Lib/*/*/*/*.py
>  SHEBANG_FILES+=        Lib/test/ziptestdata/exe_with_z64 \
>                 Lib/test/ziptestdata/exe_with_zip \
>                 Lib/test/ziptestdata/header.sh
> -TRIGGERS=      ${PYTHON_VERSION}
> +
> +# Duplicate python.mk variables. TODO: Let lang/python?? ports use python.mk bits.
> +PYTHON_VER=            ${PYTHON_DISTVERSION:R}
> +PYTHON_VERSION=                python${PYTHON_VER}
> +PYTHON_SUFFIX=         ${PYTHON_VER:S/.//g}
>
>  DISABLED_EXTENSIONS=   _sqlite3 _tkinter _gdbm
>  CONFIGURE_ARGS+=       --enable-shared --without-ensurepip \
> diff --git a/lang/python38/files/python3.8.ucl.in b/lang/python38/files/python3.8.ucl.in
> deleted file mode 100644
> index a9ebb18f9c27..000000000000
> --- a/lang/python38/files/python3.8.ucl.in
> +++ /dev/null
> @@ -1,42 +0,0 @@
> -path_glob: "%%PYTHON_SITELIBDIR%%/*"
> -trigger: {
> -       type: lua
> -       sandbox: false
> -       script: <<EOS
> -function cleanup(directory)
> -  for _,d in ipairs(pkg.readdir(directory)) do
> -    local full_path = directory .. "/" .. d
> -    local stat = pkg.stat(full_path)
> -    if stat["type"] == "dir" then
> -      if (d ~= "__pycache__") then
> -        cleanup(full_path)
> -      else
> -        for _,bytecode_file in ipairs(pkg.readdir(full_path)) do
> -          local file_origin = string.gsub(bytecode_file, "[.]cpython[-]%%PYTHON_SUFFIX%%[.].*pyc", ".py")
> -          if file_origin  then
> -            local origin_path = directory .. "/" .. file_origin
> -            if (not pkg.stat(origin_path)) then
> -              --print("  >=> removed stale bytecode " .. bytecode_file)
> -              os.remove(full_path .. "/" .. bytecode_file)
> -            end
> -          end
> -        end
> -      end
> -      local res = pkg.readdir(full_path)
> -      if #res == 0 then
> -        --print("  >=> removed empty directory " .. full_path )
> -        os.remove(full_path)
> -      end
> -    end
> -  end
> -end
> -
> -print(">=> Cleaning stale bytecode files...")
> -cleanup("%%PYTHON_SITELIBDIR%%")
> -
> -print(">=> Byte-compiling Python source files...")
> -pkg.exec({"%%PYTHON_VERSION%%", "-m", "compileall", "-q", "%%PYTHON_SITELIBDIR%%"})
> -pkg.exec({"%%PYTHON_VERSION%%", "-O", "-m", "compileall", "-q", "%%PYTHON_SITELIBDIR%%"})
> -pkg.exec({"%%PYTHON_VERSION%%", "-OO", "-m", "compileall", "-q", "%%PYTHON_SITELIBDIR%%"})
> -EOS
> -}
> diff --git a/lang/python39/Makefile b/lang/python39/Makefile
> index a577ab3e0b2e..c93a47e69fc3 100644
> --- a/lang/python39/Makefile
> +++ b/lang/python39/Makefile
> @@ -1,6 +1,6 @@
>  PORTNAME=      python
>  DISTVERSION=   ${PYTHON_DISTVERSION}
> -PORTREVISION=  1
> +PORTREVISION=  2
>  CATEGORIES=    lang python
>  MASTER_SITES=  PYTHON/ftp/python/${DISTVERSION}
>  PKGNAMESUFFIX= ${PYTHON_SUFFIX}
> @@ -15,8 +15,8 @@ LICENSE=      PSFL
>
>  LIB_DEPENDS=   libffi.so:devel/libffi
>
> -USES=          compiler:c11 cpe ncurses pathfix pkgconfig \
> -               python:${PYTHON_DISTVERSION:R},env readline shebangfix ssl tar:xz trigger
> +USES=          compiler:c11 cpe ncurses pathfix pkgconfig readline \
> +               shebangfix ssl tar:xz
>  PATHFIX_MAKEFILEIN=    Makefile.pre.in
>  USE_LDCONFIG=  yes
>  GNU_CONFIGURE= yes
> @@ -25,7 +25,11 @@ SHEBANG_FILES=       Lib/*.py Lib/*/*.py Lib/*/*/*.py Lib/*/*/*/*.py
>  SHEBANG_FILES+=        Lib/test/ziptestdata/exe_with_z64 \
>                 Lib/test/ziptestdata/exe_with_zip \
>                 Lib/test/ziptestdata/header.sh
> -TRIGGERS=      ${PYTHON_VERSION}
> +
> +# Duplicate python.mk variables. TODO: Let lang/python?? ports use python.mk bits.
> +PYTHON_VER=            ${PYTHON_DISTVERSION:R}
> +PYTHON_VERSION=                python${PYTHON_VER}
> +PYTHON_SUFFIX=         ${PYTHON_VER:S/.//g}
>
>  DISABLED_EXTENSIONS=   _sqlite3 _tkinter _gdbm
>  CONFIGURE_ARGS+=       --enable-shared --without-ensurepip \
> diff --git a/lang/python39/files/python3.9.ucl.in b/lang/python39/files/python3.9.ucl.in
> deleted file mode 100644
> index 63d455839549..000000000000
> --- a/lang/python39/files/python3.9.ucl.in
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -path_glob: "%%PYTHON_SITELIBDIR%%/*"
> -trigger: {
> -       type: lua
> -       sandbox: false
> -       script: <<EOS
> -function cleanup(directory)
> -  for _,d in ipairs(pkg.readdir(directory)) do
> -    local full_path = directory .. "/" .. d
> -    local stat = pkg.stat(full_path)
> -    if stat["type"] == "dir" then
> -      if (d ~= "__pycache__") then
> -        cleanup(full_path)
> -      else
> -        for _,bytecode_file in ipairs(pkg.readdir(full_path)) do
> -          local file_origin = string.gsub(bytecode_file, "[.]cpython[-]%%PYTHON_SUFFIX%%[.].*pyc", ".py")
> -          if file_origin  then
> -            local origin_path = directory .. "/" .. file_origin
> -            if (not pkg.stat(origin_path)) then
> -              --print("  >=> removed stale bytecode " .. bytecode_file)
> -              os.remove(full_path .. "/" .. bytecode_file)
> -            end
> -          end
> -        end
> -      end
> -      local res = pkg.readdir(full_path)
> -      if #res == 0 then
> -        --print("  >=> removed empty directory " .. full_path )
> -        os.remove(full_path)
> -      end
> -    end
> -  end
> -end
> -
> -print(">=> Cleaning stale bytecode files...")
> -cleanup("%%PYTHON_SITELIBDIR%%")
> -
> -print(">=> Byte-compiling Python source files...")
> -pkg.exec({"%%PYTHON_VERSION%%", "-m", "compileall", "-q", "-o", "0", "-o", "1", "-o", "2", "%%PYTHON_SITELIBDIR%%"})
> -EOS
> -}