[lttng-dev] [PATCH lttng-ust] Fix: Corrected python version assumptions in lttng-gen-tp
Gerlando Falauto
gerlando.falauto at keymile.com
Tue May 13 04:38:29 EDT 2014
Hi Jesper,
[...]
> I *thought* I was running on python2.7 but as it turns out I was not.
> When resolving "python" I get python2.7 but when I check the explicit version laying at /usr/bin/python its actually a 2.4 version so no wonder it was failing.
>
> Checking the PEP for when "except XX as yy" was introduced points to that it was introduced in python 2.6 so entirely my mistake.
> Reran it now with the a 2.7 version and it works as intended.
>
> However, I still think you should run it through env as proposed in the patch and not use the explicit path to python.
I still have some issues, even with this change.
As a matter of fact, my default python installation would be a python2.6:
$ python
python
Python 2.6.6 (r266:84292, Jan 22 2014, 05:06:49)
I'm however cross-compiling, so I specify a sysroot and I explicitly set
the python version in my configure script:
$ . /opt/eldk/eldk_init ppc_6xx # set the env for cross-compiling
$ python2.7
Python 2.7.3 (default, Aug 2 2013, 20:37:10)
[GCC 4.7.2] on linux2
$ which python2.7
/opt/eldk/powerpc/sysroots/i686-eldk-linux/usr/bin/python2.7
$ ac_cv_header_linux_perf_event_h=no PYTHON=python2.7 ./configure
--target=powerpc-linux --host=powerpc-linux --build=i686-linux
--with-libtool-sysroot=/opt/eldk/powerpc/sysroots/powerpc-linux
--prefix=/usr
$ MAKEFLAGS= && DESTDIR=/opt/eldk/powerpc/sysroots/powerpc-linux make
all install install-strip pkgconfigdir=/tmp pkgconfig_DATA=
This doesn't however help, as the script will call "python" from the
current environment (thereby ignoring the PYTHON= value used by the
configure script when checking for python version).
So perhaps a solution would be to change the configure script (or
whatever it comes from by means of autoconfig/automake) so to create a
"python" symlink in the working directory (to the version
selected/detected) and then add it to the path (*).
I guess a quick-and-dirty alternative could be to change the makefile so
to use the "PYTHON" environment variable to explictly set what
interpreter to use -- but that would defeat the whole purpose of the
shebang so I believe it's a very bad idea:
--- a/doc/examples/gen-tp/Makefile
+++ b/doc/examples/gen-tp/Makefile
@@ -46,7 +46,7 @@ sample.o: sample.c sample_tracepoint.h
CFLAGS="$(CFLAGS) $(AM_CFLAGS)" \
LDFLAGS="$(LDFLAGS) $(AM_LDFLAGS)" \
CC="$(CC)" \
- $(LTTNG_GEN_TP_PATH)lttng-gen-tp -o $@ $<
+ $(PYTHON) $(LTTNG_GEN_TP_PATH)lttng-gen-tp -o $@ $<
# The following rule can be used to generate all files instead of
having one
# for each file type. Note that the sample.o has a dependency on the
@@ -55,10 +55,10 @@ sample.o: sample.c sample_tracepoint.h
# lttng-gen-tp $<
%.h: %.tp
- $(LTTNG_GEN_TP_PATH)lttng-gen-tp -o $@ $<
+ $(PYTHON) $(LTTNG_GEN_TP_PATH)lttng-gen-tp -o $@ $<
%.c: %.tp
- $(LTTNG_GEN_TP_PATH)lttng-gen-tp -o $@ $<
+ $(PYTHON) $(LTTNG_GEN_TP_PATH)lttng-gen-tp -o $@ $<
.PHONY: clean
clean:
What do you think?
Thank you!
Gerlando
(*) As suggested by
http://redsymbol.net/articles/env-and-python-scripts-version/
More information about the lttng-dev
mailing list