1#!/bin/sh 2# py-compile - Compile a Python program 3 4scriptversion=2009-04-28.21; # UTC 5 6# Copyright (C) 2000, 2001, 2003, 2004, 2005, 2008, 2009 Free Software 7# Foundation, Inc. 8 9# This program is free software; you can redistribute it and/or modify 10# it under the terms of the GNU General Public License as published by 11# the Free Software Foundation; either version 2, or (at your option) 12# any later version. 13 14# This program is distributed in the hope that it will be useful, 15# but WITHOUT ANY WARRANTY; without even the implied warranty of 16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17# GNU General Public License for more details. 18 19# You should have received a copy of the GNU General Public License 20# along with this program. If not, see <http://www.gnu.org/licenses/>. 21 22# As a special exception to the GNU General Public License, if you 23# distribute this file as part of a program that contains a 24# configuration script generated by Autoconf, you may include it under 25# the same distribution terms that you use for the rest of that program. 26 27# This file is maintained in Automake, please report 28# bugs to <bug-automake@gnu.org> or send patches to 29# <automake-patches@gnu.org>. 30 31if [ -z "$PYTHON" ]; then 32 PYTHON=python 33fi 34 35basedir= 36destdir= 37files= 38while test $# -ne 0; do 39 case "$1" in 40 --basedir) 41 basedir=$2 42 if test -z "$basedir"; then 43 echo "$0: Missing argument to --basedir." 1>&2 44 exit 1 45 fi 46 shift 47 ;; 48 --destdir) 49 destdir=$2 50 if test -z "$destdir"; then 51 echo "$0: Missing argument to --destdir." 1>&2 52 exit 1 53 fi 54 shift 55 ;; 56 -h|--h*) 57 cat <<\EOF 58Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..." 59 60Byte compile some python scripts FILES. Use --destdir to specify any 61leading directory path to the FILES that you don't want to include in the 62byte compiled file. Specify --basedir for any additional path information you 63do want to be shown in the byte compiled file. 64 65Example: 66 py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py 67 68Report bugs to <bug-automake@gnu.org>. 69EOF 70 exit $? 71 ;; 72 -v|--v*) 73 echo "py-compile $scriptversion" 74 exit $? 75 ;; 76 *) 77 files="$files $1" 78 ;; 79 esac 80 shift 81done 82 83if test -z "$files"; then 84 echo "$0: No files given. Try \`$0 --help' for more information." 1>&2 85 exit 1 86fi 87 88# if basedir was given, then it should be prepended to filenames before 89# byte compilation. 90if [ -z "$basedir" ]; then 91 pathtrans="path = file" 92else 93 pathtrans="path = os.path.join('$basedir', file)" 94fi 95 96# if destdir was given, then it needs to be prepended to the filename to 97# byte compile but not go into the compiled file. 98if [ -z "$destdir" ]; then 99 filetrans="filepath = path" 100else 101 filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)" 102fi 103 104$PYTHON -c " 105import sys, os, py_compile 106 107files = '''$files''' 108 109sys.stdout.write('Byte-compiling python modules...\n') 110for file in files.split(): 111 $pathtrans 112 $filetrans 113 if not os.path.exists(filepath) or not (len(filepath) >= 3 114 and filepath[-3:] == '.py'): 115 continue 116 sys.stdout.write(file) 117 sys.stdout.flush() 118 py_compile.compile(filepath, filepath + 'c', path) 119sys.stdout.write('\n')" || exit $? 120 121# this will fail for python < 1.5, but that doesn't matter ... 122$PYTHON -O -c " 123import sys, os, py_compile 124 125files = '''$files''' 126sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n') 127for file in files.split(): 128 $pathtrans 129 $filetrans 130 if not os.path.exists(filepath) or not (len(filepath) >= 3 131 and filepath[-3:] == '.py'): 132 continue 133 sys.stdout.write(file) 134 sys.stdout.flush() 135 py_compile.compile(filepath, filepath + 'o', path) 136sys.stdout.write('\n')" 2>/dev/null || : 137 138# Local Variables: 139# mode: shell-script 140# sh-indentation: 2 141# eval: (add-hook 'write-file-hooks 'time-stamp) 142# time-stamp-start: "scriptversion=" 143# time-stamp-format: "%:y-%02m-%02d.%02H" 144# time-stamp-time-zone: "UTC" 145# time-stamp-end: "; # UTC" 146# End: 147