public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Raghavendra D Prabhu <rprabhu@wnohang.net>
To: Michael Witten <mfwitten@gmail.com>
Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Use the environment variable PYTHON if defined
Date: Tue, 29 Mar 2011 23:45:24 +0530	[thread overview]
Message-ID: <20110329181524.GA5140@Xye> (raw)
In-Reply-To: <e987828e-87ec-4973-95e7-47f10f5d9bab-mfwitten@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 7746 bytes --]

* On Mon, Mar 28, 2011 at 10:36:02PM +0000, Michael Witten <mfwitten@gmail.com> wrote:
>On Sat, Mar 26, 2011 at 17:44, Raghavendra D Prabhu <rprabhu@wnohang.net> wrote:
>> On systems with python{2,3} installed, perf build can break
>> which can be fixed by exporting PYTHON to the right value.
>> Added support for PYTHON in the Makefile.
>
>Yes, I too have run into this problem; my distribution, Arch Linux,
>installs python3 as the main python:
>
>  /usr/bin/python{,-config}
>
>and python2 as an ancillary, versioned python:
>
>  /usr/bin/python2{,-config}
>
>The real problem here is not so much that perf's Makefile
>hardcodes the program names `python' and `python-config';
>rather, the problem is that perf's python code (both .c
>and probably .py) is incompatible with python3, thereby
>causing the build to break.
>
>The Correct Solution (for the most part) is to make perf's
>python code compatible with both versions of python
>(I was hoping somebody who knows these things better would
>do it, which is why I never submitted a patch for
>changing the hardcoded values).
>
>In any case, Raghavendra's patch is a pretty darn good
>bandage that will allow people to keep working; however,
>$(PYTHON) can be used in a few other places, and the
>assignment of its value can be error-checked more thoroughly.
>
>The following is a patch that does a bit more; you can save
>this email to `path/to/email' and then apply the patch
>by running:
>
>  git am --scissors path/to/email
>
>8<--------8<--------8<--------8<--------8<--------8<--------8<
>Subject: [PATCH] perf tools: Makefile: PYTHON{,_CONFIG} to bandage python3 incompatibility
>Currently, python3 is not supported by perf's code; this
>can cause the build to fail for systems that have python3
>installed as the default python:
>
>  python{,-config}
>
>The Correct Solution is to write compatibility code so that
>python3 works out-of-the-box.
>
>However, users often have an ancillary python2 installed:
>
>  python2{,-config}
>
>Therefore, a quick fix is to allow the user to specify those
>ancillary paths as the python binaries that Makefile should
>use, thereby avoiding python3 altogether.
>
>This commit adds the ability to set PYTHON and/or PYTHON_CONFIG
>either as environment variables or as make variables on the
>command line; the paths may be relative, and usually only
>PYTHON is necessary in order for PYTHON_CONFIG to be defined
>implicitly.
>
>Thanks to:
>
>  Raghavendra D Prabhu <rprabhu@wnohang.net>
>
>for motivating this patch.
>
>See:
>
>  Message-ID: <e987828e-87ec-4973-95e7-47f10f5d9bab-mfwitten@gmail.com>
>
>Signed-off-by: Michael Witten <mfwitten@gmail.com>
>---
> tools/perf/Makefile          |   22 +++++++++++++++++---
> tools/perf/feature-tests.mak |   44 ++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 62 insertions(+), 4 deletions(-)
>
>diff --git a/tools/perf/Makefile b/tools/perf/Makefile
>index 158c30e..b468383 100644
>--- a/tools/perf/Makefile
>+++ b/tools/perf/Makefile
>@@ -13,6 +13,12 @@ endif
>
> # Define V to have a more verbose compile.

>+# Define PYTHON to point to the python binary if the default
>+# `python' is not correct; for example: PYTHON=python2
>+#
>+# Define PYTHON_CONFIG to point to the python-config binary if
>+# the default `$(PYTHON)-config' is not correct.
>+#
> # Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8

> # Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72.
>@@ -165,7 +171,7 @@ grep-libs = $(filter -l%,$(1))
> strip-libs = $(filter-out -l%,$(1))
>
> $(OUTPUT)python/perf.so: $(PYRF_OBJS)
>-	$(QUIET_GEN)python util/setup.py --quiet  build_ext --build-lib='$(OUTPUT)python' \
>+	$(QUIET_GEN)$(PYTHON) util/setup.py --quiet  build_ext --build-lib='$(OUTPUT)python' \
> 						--build-temp='$(OUTPUT)python/temp'

> # No Perl scripts right now:
>@@ -474,10 +480,18 @@ endif
> ifdef NO_LIBPYTHON
> 	BASIC_CFLAGS += -DNO_LIBPYTHON
> else
>+        override PYTHON := \
>+            $(or $(call get-supplied-or-default-executable,$(PYTHON),python),\
>+                 $(error Please set PYTHON appropriately))
>+
>+        override PYTHON_CONFIG := \
>+            $(or $(call get-supplied-or-default-executable,$(PYTHON_CONFIG),$(PYTHON)-config),\
>+                 $(error Please set PYTHON_CONFIG appropriately))
>+
>-       PYTHON_EMBED_LDOPTS = $(shell python-config --ldflags 2>/dev/null)
>+       PYTHON_EMBED_LDOPTS = $(shell $(PYTHON_CONFIG) --ldflags 2>/dev/null)
>        PYTHON_EMBED_LDFLAGS = $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
>        PYTHON_EMBED_LIBADD = $(call grep-libs,$(PYTHON_EMBED_LDOPTS))
>-	PYTHON_EMBED_CCOPTS = `python-config --cflags 2>/dev/null`
>+	PYTHON_EMBED_CCOPTS = $(shell $(PYTHON_CONFIG) --cflags 2>/dev/null)
> 	FLAGS_PYTHON_EMBED=$(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
> 	ifneq ($(call try-cc,$(SOURCE_PYTHON_EMBED),$(FLAGS_PYTHON_EMBED)),y)
> 		msg := $(warning No Python.h found, install python-dev[el] to have python support in 'perf script' and to build the python bindings)
>@@ -829,7 +843,7 @@ clean:
> 	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope*
> 	$(MAKE) -C Documentation/ clean
> 	$(RM) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-CFLAGS
>-	@python util/setup.py clean --build-lib='$(OUTPUT)python' \
>+	@$(PYTHON) util/setup.py clean --build-lib='$(OUTPUT)python' \
> 				   --build-temp='$(OUTPUT)python/temp'
>
> .PHONY: all install clean strip
>diff --git a/tools/perf/feature-tests.mak b/tools/perf/feature-tests.mak
>index b041ca6..8d677f4 100644
>--- a/tools/perf/feature-tests.mak
>+++ b/tools/perf/feature-tests.mak
>@@ -128,3 +128,47 @@ try-cc = $(shell sh -c						  \
> 	 echo "$(1)" |						  \
> 	 $(CC) -x c - $(2) -o "$$TMP" > /dev/null 2>&1 && echo y; \
> 	 rm -f "$$TMP"')
>+
>+# is-absolute
>+# Usage: bool-value = $(call is-absolute,path)
>+#
>+define is-absolute
>+$(shell sh -c "echo '$(1)' | grep ^/")
>+endef
>+
>+# lookup
>+# Usage: absolute-executable-path-or-empty = $(call lookup,path)
>+#
>+define lookup
>+$(shell sh -c "command -v '$(1)'")
>+endef
>+
>+# is-executable
>+# Usage: bool-value = $(call is-executable,path)
>+#
>+define is-executable
>+$(shell sh -c "test -f '$(1)' -a -x '$(1)' && echo y")
>+endef
>+
>+# get-executable
>+# Usage: absolute-executable-path-or-empty = $(call get-executable,path)
>+#
>+# The goal is to get an absolute path for an executable;
>+# the `command -v' is defined by POSIX, but it's not
>+# necessarily very portable, so it's only used if
>+# relative path resolution is requested, as determined
>+# by the presence of a leading `/'.
>+#
>+define get-executable
>+$(if $(1),$(if $(call is-absolute,$(1)),$(if $(call is-executable,$(1)),$(1)),$(call lookup,$(1))))
>+endef
>+
>+# get-supplied-or-default-executable
>+# Usage: absolute-executable-path-or-empty = $(call get-supplied-or-default-executable,path,default)
>+#
>+define get-supplied-or-default-executable
>+$(if $(1),$(call _attempt,$(1)),$(call _attempt,$(2)))
>+endef
>+define _attempt
>+$(or $(call get-executable,$(1)),$(warning The path '$(1)' is not executable.))
>+endef
Hi, 

@Michael, yeah, I use Arch linux too and noticed this issue when
building it. Thanks.

@Arnaldo, the patch submitted by Michael seems to be taking care of far
more cases than mine, so that is much better. I will check my encoding
and/or the signed-off issue next time I submit anything (I had created
it with git format-patch --stdout followed by mutt -H <file>, not sure
whether this messed it up, or Vim did it). Thanks again.

[-- Attachment #2: Type: application/pgp-signature, Size: 490 bytes --]

  reply	other threads:[~2011-03-29 18:15 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-26 22:44 [PATCH] Use the environment variable PYTHON if defined Raghavendra D Prabhu
2011-03-28 14:47 ` Arnaldo Carvalho de Melo
2011-03-28 22:36   ` Michael Witten
2011-03-29 18:15     ` Raghavendra D Prabhu [this message]
2011-03-29 19:15       ` Michael Witten
2011-03-29 20:40         ` Arnaldo Carvalho de Melo
2011-03-29 21:02           ` Michael Witten
2011-03-29 21:14             ` Arnaldo Carvalho de Melo
2011-03-31 19:15               ` Raghavendra D Prabhu
2011-03-31 20:29                 ` Michael Witten
2011-04-02 20:46                   ` Raghavendra D Prabhu
2011-04-02 22:40                     ` Michael Witten
2011-03-31 15:37           ` Michael Witten
2011-04-08 21:17             ` Raghavendra D Prabhu
2011-04-09  1:24               ` Michael Witten
2011-04-02 21:46                 ` [PATCH 2/2] perf tools: Makefile: PYTHON{,_CONFIG} to bandage Python 3 incompatibility Michael Witten
2011-04-09  1:12                 ` [PATCH 1/2] perf tools: Makefile: Clean up `python/perf.so' rule Michael Witten
2011-04-09 18:42                 ` [PATCH] Use the environment variable PYTHON if defined Raghavendra D Prabhu
2011-04-09 20:34                   ` Michael Witten
2011-04-12 20:52                     ` [PULL] Improve Python 3 handling Michael Witten
2011-04-21  9:22     ` [tip:perf/core] perf tools: Makefile: PYTHON{,_CONFIG} to bandage Python 3 incompatibility tip-bot for Michael Witten

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110329181524.GA5140@Xye \
    --to=rprabhu@wnohang.net \
    --cc=acme@ghostprotocols.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mfwitten@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox