107 lines
2.8 KiB
Bash
Executable file
107 lines
2.8 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="$PATH:/usr/local/bin"
|
|
|
|
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
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
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
|