#!/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" update_ldcache() { if [ -x sbin/ldconfig ]; then echo "Updating ldconfig(8) cache..." sbin/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