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