vp-build/srcpkgs/xbps-triggers/files/pycompile

117 lines
3.0 KiB
Bash
Executable File

#!/bin/sh
#
# Trigger to compile python code into native bytecode and remove
# generated bytecode files.
#
# Packages need to set the variable pycompile_dirs with a list
# of directories (absolute path) separated by spaces, and WITHOUT
# the first slash, e.g:
#
# pycompile_dirs="usr/blah/foo usr/zoo/d00d"
#
# or if the code resides in standard site-packages directory,
# need to set the pycompile_module variable:
#
# pycompile_module="blah foo"
#
# Or if a module is stored in top-level site-packages directory:
#
# pycompile_module="foo.py"
#
# Additionally another var can be used to specify the target python version:
#
# pycompile_version="3.4"
#
# Arguments: $ACTION = [run/targets]
# $TARGET = [post-install/pre-remove]
# $PKGNAME
# $VERSION
# $UPDATE = [yes/no]
#
ACTION="$1"
TARGET="$2"
PKGNAME="$3"
VERSION="$4"
UPDATE="$5"
export PATH="usr/bin:/usr/sbin:/usr/sbin:/usr/bin:/sbin:/bin"
update_ldcache() {
if [ -x sbin/ldconfig -o -x bin/ldconfig ]; then
echo "Updating ldconfig(8) cache..."
ldconfig -X || :
fi
}
compile()
{
for f in ${pycompile_dirs}; do
echo "Byte-compiling python code in ${f}..."
python${pycompile_version} -m compileall -f -q ${f} && \
python${pycompile_version} -O -m compileall -f -q ${f}
done
for f in ${pycompile_module}; do
echo "Byte-compiling python${pycompile_version} code for module ${f}..."
if [ -d "usr/lib/python${pycompile_version}/site-packages/${f}" ]; then
python${pycompile_version} -m compileall -f -q \
usr/lib/python${pycompile_version}/site-packages/${f} && \
python${pycompile_version} -O -m compileall -f -q \
usr/lib/python${pycompile_version}/site-packages/${f}
else
python${pycompile_version} -m compileall -f -q \
usr/lib/python${pycompile_version}/site-packages/${f} && \
python${pycompile_version} -O -m compileall -f -q \
usr/lib/python${pycompile_version}/site-packages/${f}
fi
done
update_ldcache
}
remove()
{
for f in ${pycompile_dirs}; do
echo "Removing byte-compiled python${pycompile_version} files in ${f}..."
find ${f} -type f -name \*.py[co] -delete 2>&1 >/dev/null
find ${f} -type d -name __pycache__ -delete 2>&1 >/dev/null
done
for f in ${pycompile_module}; do
echo "Removing byte-compiled python${pycompile_version} code for module ${f}..."
if [ -d usr/lib/python${pycompile_version}/site-packages/${f} ]; then
find usr/lib/python${pycompile_version}/site-packages/${f} \
-type f -name \*.py[co] -delete 2>&1 >/dev/null
find usr/lib/python${pycompile_version}/site-packages/${f} \
-type d -name __pycache__ -delete 2>&1 >/dev/null
else
rm -f usr/lib/python${pycompile_version}/site-packages/${f%.py}.py[co]
fi
done
update_ldcache
}
case "$ACTION" in
targets)
echo "post-install pre-remove"
;;
run)
[ ! -x usr/bin/python${pycompile_version} ] && exit 0
[ -z "${pycompile_dirs}" -a -z "${pycompile_module}" ] && exit 0
case "$TARGET" in
post-install)
compile
;;
pre-remove)
remove
;;
*)
exit 1
;;
esac
;;
*)
exit 1
;;
esac
exit 0