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
42 lines
1.4 KiB
Text
42 lines
1.4 KiB
Text
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
|
|
}
|