Date: Mon, 27 Feb 2023 12:56:10 +0100 From: Baptiste Daroussin <bapt@FreeBSD.org> To: Charlie Li <vishwin@FreeBSD.org> Cc: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org Subject: Re: git: c17ddfbf66e2 - main - lang/python: add bytecode trigger Message-ID: <20230227115610.ecstnqgy3ete6t7n@aniel.nours.eu> In-Reply-To: <202302152135.31FLZxEE021962@gitrepo.freebsd.org> References: <202302152135.31FLZxEE021962@gitrepo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Feb 15, 2023 at 09:35:59PM +0000, Charlie Li wrote: > The branch main has been updated by vishwin: > > URL: https://cgit.FreeBSD.org/ports/commit/?id=c17ddfbf66e2801ec620d49979aca3d7077d7002 > > commit c17ddfbf66e2801ec620d49979aca3d7077d7002 > Author: Charlie Li <vishwin@FreeBSD.org> > AuthorDate: 2023-02-15 20:57:06 +0000 > Commit: Charlie Li <vishwin@FreeBSD.org> > CommitDate: 2023-02-15 21:35:07 +0000 > > lang/python: add bytecode trigger > > Facilitates compiling, writing and removing bytecode files (.pyc) > in site-packages after all pkg transactions have been completed. > > Technical details: https://wiki.freebsd.org/Python/CompiledPackages > > Fixes reports of Python port builds as root failing on filesystem > violations due to bytecode file writes where the port did not include > them in the package. > > For those ports/packages that currently package bytecode, some > checksum mismatches on those files may occur. This is harmless and > will be rectified, in large as part of a USE_PYTHON=distutils > overhaul to reduce churn. > > While here, implement a long-standing todo item of letting lang/python > ports use python.mk bits. Not only does this obviate duplicate > variables in each Makefile, but SUB_LIST (also added) is used for > these triggers. > > Co-authored by: tcberner > Approved by: tcberner (mentor) > Differential Revision: https://reviews.freebsd.org/D34739 > --- > CHANGES | 8 +++++++ > Mk/Uses/python.mk | 25 ++++++++++++++++---- > UPDATING | 17 ++++++++++++++ > lang/python310/Makefile | 11 ++++----- > lang/python310/files/python3.10.ucl.in | 40 ++++++++++++++++++++++++++++++++ > lang/python311/Makefile | 11 ++++----- > lang/python311/files/python3.11.ucl.in | 40 ++++++++++++++++++++++++++++++++ > lang/python37/Makefile | 10 ++++---- > lang/python37/files/python3.7.ucl.in | 42 ++++++++++++++++++++++++++++++++++ > lang/python38/Makefile | 10 ++++---- > lang/python38/files/python3.8.ucl.in | 42 ++++++++++++++++++++++++++++++++++ > lang/python39/Makefile | 11 ++++----- > lang/python39/files/python3.9.ucl.in | 40 ++++++++++++++++++++++++++++++++ > 13 files changed, 269 insertions(+), 38 deletions(-) > > diff --git a/CHANGES b/CHANGES > index 2c65d5dbbe11..a8736d2217ea 100644 > --- a/CHANGES > +++ b/CHANGES > @@ -10,6 +10,14 @@ 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 4e98aa29603c..7017308e7c9c 100644 > --- a/Mk/Uses/python.mk > +++ b/Mk/Uses/python.mk > @@ -257,17 +257,20 @@ > # packages for different Python versions. > # default: -py${PYTHON_SUFFIX} > # > -# Using USES=python also will add some useful entries to PLIST_SUB: > +# Using USES=python also will add some useful entries to SUB_LIST and PLIST_SUB: > # > -# PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR:S;${PREFIX}/;;} > -# PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR:S;${PREFIX}/;;} > +# PYTHON_INCLUDEDIR=${PYTHONPREFIX_INCLUDEDIR} > +# PYTHON_LIBDIR=${PYTHONPREFIX_LIBDIR} > # PYTHON_PLATFORM=${PYTHON_PLATFORM} > -# PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR:S;${PREFIX}/;;} > +# PYTHON_SITELIBDIR=${PYTHONPREFIX_SITELIBDIR} > # PYTHON_SUFFIX=${PYTHON_SUFFIX} > # PYTHON_VER=${PYTHON_VER} > # PYTHON_VERSION=${PYTHON_VERSION} > # > -# and PYTHON2 and PYTHON3 will be set according to the 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: > # > # PYTHON2="" PYTHON3="@comment " for Python 2.x > # PYTHON2="@comment " PYTHON3="" for Python 3.x > @@ -785,6 +788,16 @@ ${_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. > @@ -797,8 +810,10 @@ 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 9a4ea9c7a5ed..d3bd39a6dcb5 100644 > --- a/UPDATING > +++ b/UPDATING > @@ -5,6 +5,23 @@ they are unavoidable. > You should get into the habit of checking this file for changes each time > you update your ports collection, before attempting any port upgrades. > > +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 7e51ea43cce1..66974f6c5366 100644 > --- a/lang/python310/Makefile > +++ b/lang/python310/Makefile > @@ -1,5 +1,6 @@ > PORTNAME= python > DISTVERSION= ${PYTHON_DISTVERSION} > +PORTREVISION= 1 > CATEGORIES= lang python > MASTER_SITES= PYTHON/ftp/python/${DISTVERSION:C/[a-z].*//} > PKGNAMESUFFIX= ${PYTHON_SUFFIX} > @@ -14,8 +15,8 @@ LICENSE= PSFL > > LIB_DEPENDS= libffi.so:devel/libffi > > -USES= compiler:c11 cpe ncurses pathfix pkgconfig readline \ > - shebangfix ssl tar:xz > +USES= compiler:c11 cpe ncurses pathfix pkgconfig \ > + python:${PYTHON_DISTVERSION:R},env readline shebangfix ssl tar:xz trigger > PATHFIX_MAKEFILEIN= Makefile.pre.in > USE_LDCONFIG= yes > GNU_CONFIGURE= yes > @@ -24,11 +25,7 @@ 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 > - > -# 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} > +TRIGGERS= ${PYTHON_VERSION} > > 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 > new file mode 100644 > index 000000000000..63d455839549 > --- /dev/null > +++ b/lang/python310/files/python3.10.ucl.in > @@ -0,0 +1,40 @@ > +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...") Why adding those fancy ">=>" in front? no other trigger are doing this. > +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 81b31ae90b5c..537d1c352706 100644 > --- a/lang/python311/Makefile > +++ b/lang/python311/Makefile > @@ -1,5 +1,6 @@ > PORTNAME= python > DISTVERSION= ${PYTHON_DISTVERSION} > +PORTREVISION= 1 > CATEGORIES= lang python > MASTER_SITES= PYTHON/ftp/python/${DISTVERSION:C/[a-z].*//} > PKGNAMESUFFIX= ${PYTHON_SUFFIX} > @@ -14,8 +15,8 @@ LICENSE= PSFL > > LIB_DEPENDS= libffi.so:devel/libffi > > -USES= compiler:c11 cpe ncurses pathfix pkgconfig readline \ > - shebangfix ssl tar:xz > +USES= compiler:c11 cpe ncurses pathfix pkgconfig \ > + python:${PYTHON_DISTVERSION:R},env readline shebangfix ssl tar:xz trigger > PATHFIX_MAKEFILEIN= Makefile.pre.in > USE_LDCONFIG= yes > GNU_CONFIGURE= yes > @@ -24,11 +25,7 @@ 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 > - > -# 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} > +TRIGGERS= ${PYTHON_VERSION} > > 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 > new file mode 100644 > index 000000000000..63d455839549 > --- /dev/null > +++ b/lang/python311/files/python3.11.ucl.in > @@ -0,0 +1,40 @@ > +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 ba87a69cb89e..29abf7366ba1 100644 > --- a/lang/python37/Makefile > +++ b/lang/python37/Makefile > @@ -1,5 +1,6 @@ > PORTNAME= python > DISTVERSION= ${PYTHON_DISTVERSION} > +PORTREVISION= 1 > CATEGORIES= lang python > MASTER_SITES= PYTHON/ftp/python/${DISTVERSION} > PKGNAMESUFFIX= ${PYTHON_SUFFIX} > @@ -18,17 +19,14 @@ EXPIRATION_DATE= 2023-06-27 > LIB_DEPENDS= libffi.so:devel/libffi \ > libmpdec.so:math/mpdecimal > > -USES= cpe ncurses pathfix pkgconfig readline shebangfix ssl tar:xz > +USES= cpe ncurses pathfix pkgconfig python:${PYTHON_DISTVERSION:R},env readline \ > + shebangfix ssl tar:xz trigger > 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 > - > -# 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} > +TRIGGERS= ${PYTHON_VERSION} > > 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 > new file mode 100644 > index 000000000000..a9ebb18f9c27 > --- /dev/null > +++ b/lang/python37/files/python3.7.ucl.in > @@ -0,0 +1,42 @@ > +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 fd476d48aecf..07a565977f73 100644 > --- a/lang/python38/Makefile > +++ b/lang/python38/Makefile > @@ -1,5 +1,6 @@ > PORTNAME= python > DISTVERSION= ${PYTHON_DISTVERSION} > +PORTREVISION= 1 > CATEGORIES= lang python > MASTER_SITES= PYTHON/ftp/python/${DISTVERSION} > PKGNAMESUFFIX= ${PYTHON_SUFFIX} > @@ -14,7 +15,8 @@ LICENSE= PSFL > > LIB_DEPENDS= libffi.so:devel/libffi > > -USES= cpe ncurses pathfix pkgconfig readline shebangfix ssl tar:xz > +USES= cpe ncurses pathfix pkgconfig python:${PYTHON_DISTVERSION:R},env readline \ > + shebangfix ssl tar:xz trigger > PATHFIX_MAKEFILEIN= Makefile.pre.in > USE_LDCONFIG= yes > GNU_CONFIGURE= yes > @@ -23,11 +25,7 @@ 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 > - > -# 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} > +TRIGGERS= ${PYTHON_VERSION} > > 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 > new file mode 100644 > index 000000000000..a9ebb18f9c27 > --- /dev/null > +++ b/lang/python38/files/python3.8.ucl.in > @@ -0,0 +1,42 @@ > +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 58d7f7372ab2..178b0bc8b070 100644 > --- a/lang/python39/Makefile > +++ b/lang/python39/Makefile > @@ -1,5 +1,6 @@ > PORTNAME= python > DISTVERSION= ${PYTHON_DISTVERSION} > +PORTREVISION= 1 > CATEGORIES= lang python > MASTER_SITES= PYTHON/ftp/python/${DISTVERSION} > PKGNAMESUFFIX= ${PYTHON_SUFFIX} > @@ -14,8 +15,8 @@ LICENSE= PSFL > > LIB_DEPENDS= libffi.so:devel/libffi > > -USES= compiler:c11 cpe ncurses pathfix pkgconfig readline \ > - shebangfix ssl tar:xz > +USES= compiler:c11 cpe ncurses pathfix pkgconfig \ > + python:${PYTHON_DISTVERSION:R},env readline shebangfix ssl tar:xz trigger > PATHFIX_MAKEFILEIN= Makefile.pre.in > USE_LDCONFIG= yes > GNU_CONFIGURE= yes > @@ -24,11 +25,7 @@ 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 > - > -# 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} > +TRIGGERS= ${PYTHON_VERSION} > > 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 > new file mode 100644 > index 000000000000..63d455839549 > --- /dev/null > +++ b/lang/python39/files/python3.9.ucl.in > @@ -0,0 +1,40 @@ > +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 > +}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20230227115610.ecstnqgy3ete6t7n>