aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/Makefile
diff options
context:
space:
mode:
authorMichael Witten <mfwitten@gmail.com>2011-04-02 17:46:09 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2011-04-19 07:18:36 -0400
commitced465c400b23656ef2c4fbfb4add0e5b92e3d97 (patch)
tree58df4aa0275a03260a1773d418610a22fecf4957 /tools/perf/Makefile
parent3643b133f2cb8023e8cedcbef43215a99d7df561 (diff)
perf tools: Makefile: PYTHON{,_CONFIG} to bandage Python 3 incompatibility
Currently, Python 3 is not supported by perf's code; this can cause the build to fail for systems that have Python 3 installed as the default python: python{,-config} The Correct Solution is to write compatibility code so that Python 3 works out-of-the-box. However, users often have an ancillary Python 2 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 Python 3 altogether; as an added benefit, the Python binaries may be installed in non-standard locations without the need for updating any PATH variable. 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. Some rudimentary error checking is performed when the user explicitly specifies a value for any of these variables. In addition, this commit introduces significantly robust makefile infrastructure for working with paths and communicating with the shell; it's currently only used for handling Python, but I hope it will prove useful in refactoring the makefiles. Thanks to: Raghavendra D Prabhu <rprabhu@wnohang.net> for motivating this patch. Acked-by: Raghavendra D Prabhu <rprabhu@wnohang.net> Link: http://lkml.kernel.org/r/e987828e-87ec-4973-95e7-47f10f5d9bab-mfwitten@gmail.com Signed-off-by: Michael Witten <mfwitten@gmail.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/Makefile')
-rw-r--r--tools/perf/Makefile97
1 files changed, 77 insertions, 20 deletions
diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index aaf4dd3fd80..b5276c7e9be 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -5,6 +5,8 @@ endif
5# The default target of this Makefile is... 5# The default target of this Makefile is...
6all: 6all:
7 7
8include config/utilities.mak
9
8ifneq ($(OUTPUT),) 10ifneq ($(OUTPUT),)
9# check that the output directory actually exists 11# check that the output directory actually exists
10OUTDIR := $(shell cd $(OUTPUT) && /bin/pwd) 12OUTDIR := $(shell cd $(OUTPUT) && /bin/pwd)
@@ -13,6 +15,12 @@ endif
13 15
14# Define V to have a more verbose compile. 16# Define V to have a more verbose compile.
15# 17#
18# Define PYTHON to point to the python binary if the default
19# `python' is not correct; for example: PYTHON=python2
20#
21# Define PYTHON_CONFIG to point to the python-config binary if
22# the default `$(PYTHON)-config' is not correct.
23#
16# Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8 24# Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8
17# 25#
18# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72. 26# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72.
@@ -165,7 +173,7 @@ grep-libs = $(filter -l%,$(1))
165strip-libs = $(filter-out -l%,$(1)) 173strip-libs = $(filter-out -l%,$(1))
166 174
167$(OUTPUT)python/perf.so: $(PYRF_OBJS) 175$(OUTPUT)python/perf.so: $(PYRF_OBJS)
168 $(QUIET_GEN)CFLAGS='$(BASIC_CFLAGS)' python util/setup.py \ 176 $(QUIET_GEN)CFLAGS='$(BASIC_CFLAGS)' $(PYTHON_WORD) util/setup.py \
169 --quiet build_ext \ 177 --quiet build_ext \
170 --build-lib='$(OUTPUT)python' \ 178 --build-lib='$(OUTPUT)python' \
171 --build-temp='$(OUTPUT)python/temp' 179 --build-temp='$(OUTPUT)python/temp'
@@ -473,24 +481,74 @@ else
473 endif 481 endif
474endif 482endif
475 483
476ifdef NO_LIBPYTHON 484disable-python = $(eval $(disable-python_code))
477 BASIC_CFLAGS += -DNO_LIBPYTHON 485define disable-python_code
486 BASIC_CFLAGS += -DNO_LIBPYTHON
487 $(if $(1),$(warning No $(1) was found))
488 $(warning Python support won't be built)
489endef
490
491override PYTHON := \
492 $(call get-executable-or-default,PYTHON,python)
493
494ifndef PYTHON
495 $(call disable-python,python interpreter)
496 python-clean :=
478else 497else
479 PYTHON_EMBED_LDOPTS = $(shell python-config --ldflags 2>/dev/null) 498
480 PYTHON_EMBED_LDFLAGS = $(call strip-libs,$(PYTHON_EMBED_LDOPTS)) 499 PYTHON_WORD := $(call shell-wordify,$(PYTHON))
481 PYTHON_EMBED_LIBADD = $(call grep-libs,$(PYTHON_EMBED_LDOPTS)) 500
482 PYTHON_EMBED_CCOPTS = `python-config --cflags 2>/dev/null` 501 python-clean := $(PYTHON_WORD) util/setup.py clean \
483 FLAGS_PYTHON_EMBED=$(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS) 502 --build-lib='$(OUTPUT)python' \
484 ifneq ($(call try-cc,$(SOURCE_PYTHON_EMBED),$(FLAGS_PYTHON_EMBED)),y) 503 --build-temp='$(OUTPUT)python/temp'
485 msg := $(warning No Python.h found, install python-dev[el] to have python support in 'perf script' and to build the python bindings) 504
486 BASIC_CFLAGS += -DNO_LIBPYTHON 505 ifdef NO_LIBPYTHON
487 else 506 $(call disable-python)
488 ALL_LDFLAGS += $(PYTHON_EMBED_LDFLAGS) 507 else
489 EXTLIBS += $(PYTHON_EMBED_LIBADD) 508
490 LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-python.o 509 override PYTHON_CONFIG := \
491 LIB_OBJS += $(OUTPUT)scripts/python/Perf-Trace-Util/Context.o 510 $(call get-executable-or-default,PYTHON_CONFIG,$(PYTHON)-config)
492 LANG_BINDINGS += $(OUTPUT)python/perf.so 511
493 endif 512 ifndef PYTHON_CONFIG
513 $(call disable-python,python-config tool)
514 else
515
516 PYTHON_CONFIG_SQ := $(call shell-sq,$(PYTHON_CONFIG))
517
518 PYTHON_EMBED_LDOPTS := $(shell $(PYTHON_CONFIG_SQ) --ldflags 2>/dev/null)
519 PYTHON_EMBED_LDFLAGS := $(call strip-libs,$(PYTHON_EMBED_LDOPTS))
520 PYTHON_EMBED_LIBADD := $(call grep-libs,$(PYTHON_EMBED_LDOPTS))
521 PYTHON_EMBED_CCOPTS := $(shell $(PYTHON_CONFIG_SQ) --cflags 2>/dev/null)
522 FLAGS_PYTHON_EMBED := $(PYTHON_EMBED_CCOPTS) $(PYTHON_EMBED_LDOPTS)
523
524 ifneq ($(call try-cc,$(SOURCE_PYTHON_EMBED),$(FLAGS_PYTHON_EMBED)),y)
525 $(call disable-python,Python.h (for Python 2.x))
526 else
527
528 ifneq ($(call try-cc,$(SOURCE_PYTHON_VERSION),$(FLAGS_PYTHON_EMBED)),y)
529 $(warning Python 3 is not yet supported; please set)
530 $(warning PYTHON and/or PYTHON_CONFIG appropriately.)
531 $(warning If you also have Python 2 installed, then)
532 $(warning try something like:)
533 $(warning $(and ,))
534 $(warning $(and ,) make PYTHON=python2)
535 $(warning $(and ,))
536 $(warning Otherwise, disable Python support entirely:)
537 $(warning $(and ,))
538 $(warning $(and ,) make NO_LIBPYTHON=1)
539 $(warning $(and ,))
540 $(error $(and ,))
541 else
542 ALL_LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
543 EXTLIBS += $(PYTHON_EMBED_LIBADD)
544 LIB_OBJS += $(OUTPUT)util/scripting-engines/trace-event-python.o
545 LIB_OBJS += $(OUTPUT)scripts/python/Perf-Trace-Util/Context.o
546 LANG_BINDINGS += $(OUTPUT)python/perf.so
547 endif
548
549 endif
550 endif
551 endif
494endif 552endif
495 553
496ifdef NO_DEMANGLE 554ifdef NO_DEMANGLE
@@ -831,8 +889,7 @@ clean:
831 $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope* 889 $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope*
832 $(MAKE) -C Documentation/ clean 890 $(MAKE) -C Documentation/ clean
833 $(RM) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-CFLAGS 891 $(RM) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-CFLAGS
834 @python util/setup.py clean --build-lib='$(OUTPUT)python' \ 892 $(python-clean)
835 --build-temp='$(OUTPUT)python/temp'
836 893
837.PHONY: all install clean strip 894.PHONY: all install clean strip
838.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell 895.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell