From cb5b212ed061a9ef3136b316d8e0b7408c80f538 Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Sun, 5 Dec 2004 16:12:32 +0000 Subject: [PATCH] * lib/py-compile: Add --destdir switch to py-compile that takes a path argument that is not compiled into the file when byte compiling. * lib/am/python.am: Use the new py-compile arguments to not include DESTDIR in the byte compiled files. * tests/python12.test: Test that DESTDIR won't be byte compiled into python files. --- ChangeLog | 9 +++++ THANKS | 1 + lib/am/python.am | 9 ++++- lib/py-compile | 105 ++++++++++++++++++++++++++++++++++------------------ tests/Makefile.am | 1 + tests/Makefile.in | 1 + tests/python12.test | 62 +++++++++++++++++++++++++++++++ 7 files changed, 150 insertions(+), 38 deletions(-) create mode 100755 tests/python12.test diff --git a/ChangeLog b/ChangeLog index ae8d550..dada358 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2004-11-15 Toshio Kuratomi + + * lib/py-compile: Add --destdir switch to py-compile that takes a + path argument that is not compiled into the file when byte compiling. + * lib/am/python.am: Use the new py-compile arguments to not include + DESTDIR in the byte compiled files. + * tests/python12.test: Test that DESTDIR won't be byte compiled into + python files. + 2004-12-05 Alexandre Duret-Lutz * doc/automake.texi (Clean): Typo. diff --git a/THANKS b/THANKS index 0302ad2..d169c87 100644 --- a/THANKS +++ b/THANKS @@ -253,6 +253,7 @@ Thomas Tanner tanner@ffii.org Tim Goodwin tjg@star.le.ac.uk Tim Mooney mooney@dogbert.cc.ndsu.NoDak.edu Tim Van Holder tim.van.holder@pandora.be +Toshio Kuratomi toshio@tiki-lounge.com Tom Epperly tepperly@llnl.gov Ulrich Drepper drepper@gnu.ai.mit.edu Ulrich Eckhardt eckhardt@satorlaser.com diff --git a/lib/am/python.am b/lib/am/python.am index 6a7ae4c..826dd15 100644 --- a/lib/am/python.am +++ b/lib/am/python.am @@ -52,8 +52,13 @@ install-%DIR%PYTHON: $(%DIR%_PYTHON) done; \ ## Byte-compile must be done at install time, since file times are ## encoded in the actual files. - test -z "$$dlist" || \ - PYTHON=$(PYTHON) $(py_compile) --basedir "$(DESTDIR)$(%NDIR%dir)" $$dlist + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(%NDIR%dir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(%NDIR%dir)" $$dlist; \ + fi; \ + else :; fi endif %?INSTALL% diff --git a/lib/py-compile b/lib/py-compile index f5d4fdc..f6bba63 100755 --- a/lib/py-compile +++ b/lib/py-compile @@ -1,7 +1,7 @@ #!/bin/sh # py-compile - Compile a Python program -scriptversion=2004-01-12.23 +scriptversion=2004-12-05.17 # Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc. @@ -34,34 +34,54 @@ if [ -z "$PYTHON" ]; then fi basedir= - -case "$1" in - --basedir) - basedir=$2 - if test -z "$basedir"; then - echo "$0: Missing argument to --basedir." 1>&2 - exit 1 - fi - shift 2 - ;; - -h|--h*) - cat <<\EOF -Usage: py-compile [--help] [--version] [--basedir DIR] FILES..." - -Byte compile some python scripts FILES. This should be performed -after they have been moved to the final installation location +destdir= +files= +while test $# -ne 0; do + case "$1" in + --basedir) + basedir=$2 + if test -z "$basedir"; then + echo "$0: Missing argument to --basedir." 1>&2 + exit 1 + fi + shift + ;; + --destdir) + destdir=$2 + if test -z "$destdir"; then + echo "$0: Missing argument to --destdir." 1>&2 + exit 1 + fi + shift + ;; + -h|--h*) + cat <<\EOF +Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..." + +Byte compile some python scripts FILES. Use --destdir to specify any +leading directory path to the FILES that you don't want to include in the +byte compiled file. Specify --basedir for any additional path information you +do want to be shown in the byte compiled file. + +Example: + py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py Report bugs to . EOF - exit 0 - ;; - -v|--v*) - echo "py-compile $scriptversion" - exit 0 - ;; -esac - -if [ $# = 0 ]; then + exit 0 + ;; + -v|--v*) + echo "py-compile $scriptversion" + exit 0 + ;; + *) + files="$files $1" + ;; + esac + shift +done + +if test -z "$files"; then echo "$0: No files given. Try \`$0 --help' for more information." 1>&2 exit 1 fi @@ -69,38 +89,51 @@ fi # if basedir was given, then it should be prepended to filenames before # byte compilation. if [ -z "$basedir" ]; then - trans="path = file" + pathtrans="path = file" else - trans="path = os.path.join('$basedir', file)" + pathtrans="path = os.path.join('$basedir', file)" +fi + +# if destdir was given, then it needs to be prepended to the filename to +# byte compile but not go into the compiled file. +if [ -z "$destdir" ]; then + filetrans="filepath = path" +else + filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)" fi $PYTHON -c " import sys, os, string, py_compile -files = '''$*''' +files = '''$files''' + print 'Byte-compiling python modules...' for file in string.split(files): - $trans - if not os.path.exists(path) or not (len(path) >= 3 and path[-3:] == '.py'): + $pathtrans + $filetrans + if not os.path.exists(filepath) or not (len(filepath) >= 3 + and filepath[-3:] == '.py'): continue print file, sys.stdout.flush() - py_compile.compile(path) + py_compile.compile(filepath, filepath + 'c', path) print" || exit $? # this will fail for python < 1.5, but that doesn't matter ... $PYTHON -O -c " import sys, os, string, py_compile -files = '''$*''' +files = '''$files''' print 'Byte-compiling python modules (optimized versions) ...' for file in string.split(files): - $trans - if not os.path.exists(path) or not (len(path) >= 3 and path[-3:] == '.py'): + $pathtrans + $filetrans + if not os.path.exists(filepath) or not (len(filepath) >= 3 + and filepath[-3:] == '.py'): continue print file, sys.stdout.flush() - py_compile.compile(path) + py_compile.compile(filepath, filepath + 'o', path) print" 2>/dev/null || : # Local Variables: diff --git a/tests/Makefile.am b/tests/Makefile.am index 3efb44e..62adf63 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -419,6 +419,7 @@ python8.test \ python9.test \ python10.test \ python11.test \ +python12.test \ recurs.test \ recurs2.test \ remake.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index f538315..11bfe1f 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -538,6 +538,7 @@ python8.test \ python9.test \ python10.test \ python11.test \ +python12.test \ recurs.test \ recurs2.test \ remake.test \ diff --git a/tests/python12.test b/tests/python12.test new file mode 100755 index 0000000..84f71ca --- /dev/null +++ b/tests/python12.test @@ -0,0 +1,62 @@ +#! /bin/sh +# Copyright (C) 2004 Free Software Foundation, Inc. +# +# This file is part of GNU Automake. +# +# GNU Automake is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# GNU Automake is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Automake; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# Ensure DESTDIR is not included in byte-compiled files. + +required=python +. ./defs || exit 1 + +set -e + +cat >>configure.in <<'EOF' +AM_PATH_PYTHON +AC_OUTPUT +EOF + +cat >Makefile.am <<'END' +mydir = $(datadir)/my +my_PYTHON = my.py + +my.py: + echo 'def my(): return 1' >$@ +END + +$ACLOCAL +$AUTOCONF +$AUTOMAKE --add-missing + +rm -rf inst build +mkdir inst +instdir=`pwd`/inst +mkdir build +cd build +../configure --prefix="/usr" +DESTDIR=$instdir $MAKE -e install + +# Perfunctory test that the files were created +test -f "$instdir/usr/share/my/my.py" +test -f "$instdir/usr/share/my/my.pyc" +test -f "$instdir/usr/share/my/my.pyo" + +# If DESTDIR has made it into the byte compiled files, fail the test +$FGREP "$instdir" "$instdir/usr/share/my/my.pyo" \ + "$instdir/usr/share/my/my.pyc" && exit 1 + +: -- 2.7.4