[papi] Fixes to make papi with unbundled libpfm.

William Eden Cohen wcohen at fedoraproject.org
Thu Aug 30 15:48:18 UTC 2012


commit 600459f55c9abc231138f7c4a6e351bfaaddf4ff
Author: William Cohen <wcohen at redhat.com>
Date:   Thu Aug 30 11:47:43 2012 -0400

    Fixes to make papi with unbundled libpfm.

 papi-siginfo.patch           |   12 --
 papi-unbundled-libpfm4.patch |  359 ++++++++++++++++++++++++++++++++++++++++++
 papi.spec                    |   12 +-
 3 files changed, 368 insertions(+), 15 deletions(-)
---
diff --git a/papi-unbundled-libpfm4.patch b/papi-unbundled-libpfm4.patch
new file mode 100644
index 0000000..d816e7e
--- /dev/null
+++ b/papi-unbundled-libpfm4.patch
@@ -0,0 +1,359 @@
+commit bc9ddffc849009110176c9a4d9deedb679589856
+Author: Vince Weaver <vweaver1 at eecs.utk.edu>
+Date:   Tue Aug 28 14:54:04 2012 -0400
+
+    Fix compiling with separate libpfm4
+    
+    The problem was if you used any of the --with-pfm-incdir
+    type directives to configure, it would them assume you wanted
+    a perfmon2 build.
+    
+    This removes that assumption.
+    
+    I did check this with perfmon2, perfctr, and perf_event builds
+    so hopefully I didn't break anything.
+
+diff --git a/src/configure b/src/configure
+index 50b76ed..1a802e2 100755
+--- a/src/configure
++++ b/src/configure
+@@ -5290,6 +5290,9 @@ fi
+ echo "$as_me:$LINENO: result: $shlib" >&5
+ echo "${ECHO_T}$shlib" >&6
+ 
++# default
++pfm_incdir="libpfm4/include/"
++
+ ##################################################
+ #          perfctr
+ ##################################################
+@@ -5358,6 +5361,7 @@ fi
+ fi
+ 
+ if test "$perfctr" != 0; then
++  pfm_incdir="libpfm-3.y/include/"
+   echo "$as_me:$LINENO: checking for perfctr version" >&5
+ echo $ECHO_N "checking for perfctr version... $ECHO_C" >&6
+   if test "$perfctr" = 7 -a "$arch" != "ppc64"; then
+@@ -5717,6 +5721,7 @@ if test "${with_perfmon+set}" = set; then
+   perfmon=$withval
+              user_specified_interface=perfmon
+ 	     force_perfmon2=yes
++	     pfm_incdir="libpfm-3.y/include"
+              perfmon=`echo ${perfmon} | sed 's/^ \t*//;s/ \t*$//'`
+              perfmon=`echo ${perfmon} | grep -e '[1-9]\.[0-9][0-9]*'`
+              if test "x$perfmon" = "x"; then
+@@ -5797,32 +5802,30 @@ fi
+ fi;
+ 
+ 
++
++
+ # Check whether --with-pfm_root or --without-pfm_root was given.
+ if test "${with_pfm_root+set}" = set; then
+   withval="$with_pfm_root"
+   pfm_root=$withval
+-            user_specified_interface=perfmon
+ fi;
+ 
+ # Check whether --with-pfm_prefix or --without-pfm_prefix was given.
+ if test "${with_pfm_prefix+set}" = set; then
+   withval="$with_pfm_prefix"
+   pfm_prefix=$withval
+-            user_specified_interface=perfmon
+ fi;
+ 
+ # Check whether --with-pfm_incdir or --without-pfm_incdir was given.
+ if test "${with_pfm_incdir+set}" = set; then
+   withval="$with_pfm_incdir"
+   pfm_incdir=$withval
+-            user_specified_interface=perfmon
+ fi;
+ 
+ # Check whether --with-pfm_libdir or --without-pfm_libdir was given.
+ if test "${with_pfm_libdir+set}" = set; then
+   withval="$with_pfm_libdir"
+   pfm_libdir=$withval
+-            user_specified_interface=perfmon
+ fi;
+ 
+ 
+@@ -5831,7 +5834,7 @@ fi;
+ ##################################################
+ perf_events=no
+ force_perf_events=no
+-pe_incdir="libpfm4/include/perfmon"
++pe_incdir="$pfm_incdir/perfmon"
+ 
+ 
+ # Check whether --with-perf_events or --without-perf_events was given.
+diff --git a/src/configure.in b/src/configure.in
+index 6e79436..6a36421 100644
+--- a/src/configure.in
++++ b/src/configure.in
+@@ -766,6 +766,9 @@ if test "$papiLIBS" != "shared static"; then
+ fi
+ AC_MSG_RESULT($shlib)
+ 
++# default
++pfm_incdir="libpfm4/include/"
++
+ ##################################################
+ #          perfctr
+ ##################################################
+@@ -788,6 +791,7 @@ if test "$cross_compiling" = "no" ; then
+ fi 
+ 
+ if test "$perfctr" != 0; then 
++  pfm_incdir="libpfm-3.y/include/"
+   AC_MSG_CHECKING(for perfctr version)
+   if test "$perfctr" = 7 -a "$arch" != "ppc64"; then
+     AC_MSG_ERROR([Perfctr 2.7.x only works on PPC64 machines. Patch kernel with 2.6.x.])
+@@ -871,6 +875,7 @@ AC_ARG_WITH(perfmon,
+             [perfmon=$withval 
+              user_specified_interface=perfmon
+ 	     force_perfmon2=yes
++	     pfm_incdir="libpfm-3.y/include"
+              perfmon=`echo ${perfmon} | sed 's/^[ \t]*//;s/[ \t]*$//'`
+              perfmon=`echo ${perfmon} | grep -e '[[1-9]]\.[[0-9]][[0-9]]*'`
+              if test "x$perfmon" = "x"; then
+@@ -906,22 +911,20 @@ AC_ARG_WITH(perfmon,
+                fi
+ 	         fi])
+ 
++
++
+ AC_ARG_WITH(pfm_root,
+            [  --with-pfm-root=<path>		Specify path to source tree (for use by developers only) ],
+-           [pfm_root=$withval
+-            user_specified_interface=perfmon])
++           [pfm_root=$withval])
+ AC_ARG_WITH(pfm_prefix,
+            [  --with-pfm-prefix=<path>		Specify prefix to installed pfm distribution ],
+-           [pfm_prefix=$withval
+-            user_specified_interface=perfmon])
++           [pfm_prefix=$withval])
+ AC_ARG_WITH(pfm_incdir,
+            [  --with-pfm-incdir=<path>		Specify directory of pfm header files in non-standard location ],
+-           [pfm_incdir=$withval
+-            user_specified_interface=perfmon])
++           [pfm_incdir=$withval])
+ AC_ARG_WITH(pfm_libdir,
+            [  --with-pfm-libdir=<path>		Specify directory of pfm library in non-standard location ],
+-           [pfm_libdir=$withval
+-            user_specified_interface=perfmon])
++           [pfm_libdir=$withval])
+ 
+ 
+ ##################################################
+@@ -929,7 +932,7 @@ AC_ARG_WITH(pfm_libdir,
+ ##################################################
+ perf_events=no
+ force_perf_events=no
+-pe_incdir="libpfm4/include/perfmon"
++pe_incdir="$pfm_incdir/perfmon"
+ 
+ AC_ARG_WITH(perf_events,
+               [  --with-perf-events		Specify use of Linux Performance Event (requires kernel 2.6.32 or greater)],
+commit f4465bbb633d6a123093fe20b7c1c091d3067a07
+Author: Vince Weaver <vweaver1 at eecs.utk.edu>
+Date:   Tue Aug 28 14:55:30 2012 -0400
+
+    Add some spacing to the Rules.pfm4_pe
+    
+    Otherwise it was difficult figuring out what the nested set
+    of if/ifdefs was doing.
+
+diff --git a/src/Rules.pfm4_pe b/src/Rules.pfm4_pe
+index 25e7441..56a2f07 100644
+--- a/src/Rules.pfm4_pe
++++ b/src/Rules.pfm4_pe
+@@ -2,23 +2,23 @@
+ DESCR = "Linux with perf_event kernel support and libpfm4"
+ 
+ ifneq (/usr,$(PFM_PREFIX))
+-PWD = $(shell pwd)
+-ifeq (,$(PFM_LIB_PATH))
+-ifeq (,$(PFM_ROOT))
+-        PFM_ROOT := $(PWD)/libpfm4
+-endif
+-        PFM_LIB_PATH := $(PFM_ROOT)/lib
+-	CC_SHR += -Wl,-rpath-link -Wl,$(PFM_LIB_PATH)
+-endif
+-ifeq (,$(PFM_INC_PATH))
+-ifeq (,$(PFM_ROOT))
+-        PFM_ROOT := $(PWD)/libpfm4
+-endif
+-        PFM_INC_PATH := $(PFM_ROOT)/include
+-endif
+-ifneq (/usr/include,$(PFM_INC_PATH))
+-CFLAGS	+= -I$(PFM_INC_PATH)
+-endif
++   PWD = $(shell pwd)
++   ifeq (,$(PFM_LIB_PATH))
++      ifeq (,$(PFM_ROOT))
++         PFM_ROOT := $(PWD)/libpfm4
++      endif
++      PFM_LIB_PATH := $(PFM_ROOT)/lib
++      CC_SHR += -Wl,-rpath-link -Wl,$(PFM_LIB_PATH)
++   endif
++   ifeq (,$(PFM_INC_PATH))
++      ifeq (,$(PFM_ROOT))
++         PFM_ROOT := $(PWD)/libpfm4
++      endif
++      PFM_INC_PATH := $(PFM_ROOT)/include
++   endif
++   ifneq (/usr/include,$(PFM_INC_PATH))
++      CFLAGS	+= -I$(PFM_INC_PATH)
++   endif
+ endif
+ 
+ MISCHDRS += linux-lock.h mb.h papi_libpfm4_events.h $(PAPI_EVENTS_TABLE)
+commit 729a87213660a2136ea227c79313ebcc2eb97989
+Author: Vince Weaver <vweaver1 at eecs.utk.edu>
+Date:   Tue Aug 28 17:02:07 2012 -0400
+
+    configure: don't check for libpfm if incdir specified
+    
+    When various --with-pfm values are passed, extra checks are done
+    against the libpfm library.  This was being done even if only
+    the include path was specified, which probably shouldn't be necessary.
+    
+    This broke things because a recent change I made had the
+    libpfm include path be always valid.
+
+diff --git a/src/configure b/src/configure
+index 1a802e2..dd18bbf 100755
+--- a/src/configure
++++ b/src/configure
+@@ -5407,11 +5407,11 @@ if test "$perfctr" != 0; then
+   dotest=0
+   if test "x$perfctr_root" != "x"; then
+     LIBS="-L$perfctr_root/usr.lib -lperfctr"
+-    CPPFLAGS="-I$perfctr_root/usr.lib -I$perfctr_root/linux/include"
++    CPPFLAGS="$CPPFLAGS -I$perfctr_root/usr.lib -I$perfctr_root/linux/include"
+     dotest=1
+   elif test "x$perfctr_prefix" != "x"; then
+     LIBS="-L$perfctr_prefix/lib -lperfctr"
+-    CPPFLAGS="-I$perfctr_prefix/include"
++    CPPFLAGS="$CPPFLAGS -I$perfctr_prefix/include"
+     perfctr_libdir="$perfctr_prefix/lib"
+     perfctr_incdir="$perfctr_prefix/include"
+     dotest=1
+@@ -5425,6 +5425,7 @@ if test "$perfctr" != 0; then
+       dotest=1
+     fi
+   fi
++
+   if test "$dotest" = 1; then
+     echo "$as_me:$LINENO: checking for vperfctr_open in -lperfctr" >&5
+ echo $ECHO_N "checking for vperfctr_open in -lperfctr... $ECHO_C" >&6
+@@ -5955,11 +5956,11 @@ if test "$perfmon" != 0 -o "$perf_events" = "yes"; then
+   dotest=0
+   if test "x$pfm_root" != "x"; then
+     LIBS="-L$pfm_root/lib -lpfm"
+-    CPPFLAGS="-I$pfm_root/include"
++    CPPFLAGS="$CPPFLAGS -I$pfm_root/include"
+     dotest=1
+   elif test "x$pfm_prefix" != "x"; then
+     LIBS="-L$pfm_prefix/lib -lpfm"
+-    CPPFLAGS="-I$pfm_prefix/include"
++    CPPFLAGS="$CPPFLAGS -I$pfm_prefix/include"
+     if test "x$pfm_libdir" = "x"; then
+       pfm_libdir="$pfm_prefix/lib"
+     fi
+@@ -5973,8 +5974,7 @@ if test "$perfmon" != 0 -o "$perf_events" = "yes"; then
+       dotest=1
+     fi
+     if test "x$pfm_incdir" != "x"; then
+-      CPPFLAGS="-I$pfm_incdir"
+-      dotest=1
++      CPPFLAGS="$CPPFLAGS -I$pfm_incdir"
+     fi
+   fi
+   if test "$dotest" = 1; then
+diff --git a/src/configure.in b/src/configure.in
+index 6a36421..c286c62 100644
+--- a/src/configure.in
++++ b/src/configure.in
+@@ -821,11 +821,11 @@ if test "$perfctr" != 0; then
+   dotest=0
+   if test "x$perfctr_root" != "x"; then
+     LIBS="-L$perfctr_root/usr.lib -lperfctr"
+-    CPPFLAGS="-I$perfctr_root/usr.lib -I$perfctr_root/linux/include"
++    CPPFLAGS="$CPPFLAGS -I$perfctr_root/usr.lib -I$perfctr_root/linux/include"
+     dotest=1
+   elif test "x$perfctr_prefix" != "x"; then
+     LIBS="-L$perfctr_prefix/lib -lperfctr"
+-    CPPFLAGS="-I$perfctr_prefix/include"
++    CPPFLAGS="$CPPFLAGS -I$perfctr_prefix/include"
+     perfctr_libdir="$perfctr_prefix/lib"
+     perfctr_incdir="$perfctr_prefix/include"
+     dotest=1
+@@ -839,6 +839,7 @@ if test "$perfctr" != 0; then
+       dotest=1
+     fi
+   fi
++
+   if test "$dotest" = 1; then
+     AC_CHECK_LIB([perfctr], [vperfctr_open], 
+                  [AC_CHECK_HEADERS([libperfctr.h], 
+@@ -1004,11 +1005,11 @@ if test "$perfmon" != 0 -o "$perf_events" = "yes"; then
+   dotest=0
+   if test "x$pfm_root" != "x"; then
+     LIBS="-L$pfm_root/lib -lpfm"
+-    CPPFLAGS="-I$pfm_root/include"
++    CPPFLAGS="$CPPFLAGS -I$pfm_root/include"
+     dotest=1
+   elif test "x$pfm_prefix" != "x"; then
+     LIBS="-L$pfm_prefix/lib -lpfm"
+-    CPPFLAGS="-I$pfm_prefix/include"
++    CPPFLAGS="$CPPFLAGS -I$pfm_prefix/include"
+     if test "x$pfm_libdir" = "x"; then
+       pfm_libdir="$pfm_prefix/lib"
+     fi
+@@ -1022,8 +1023,7 @@ if test "$perfmon" != 0 -o "$perf_events" = "yes"; then
+       dotest=1
+     fi
+     if test "x$pfm_incdir" != "x"; then
+-      CPPFLAGS="-I$pfm_incdir"
+-      dotest=1
++      CPPFLAGS="$CPPFLAGS -I$pfm_incdir"
+     fi
+   fi
+   if test "$dotest" = 1; then
+commit b978a744ee48a7e9cbb20bd77c28e0fc3e4eb19d
+Author: Vince Weaver <vweaver1 at eecs.utk.edu>
+Date:   Wed Aug 29 12:59:45 2012 -0400
+
+    configure: fix autodetect perfmon case
+    
+    The fixes I made yesterday to libpfm include finding broke
+    on perfmon2 PAPI if you were letting the library be autodetected.
+    This change should fix things.  Tested on an actual 2.6.30
+    perfmon2 system.
+
+diff --git a/src/configure b/src/configure
+index dd18bbf..f4fdcb9 100755
+--- a/src/configure
++++ b/src/configure
+@@ -5787,6 +5787,7 @@ fi
+ fi
+ 
+                if test "$perfmon" != 0; then
++	         pfm_incdir="libpfm-3.y/include"
+                  perfmon=`echo ${perfmon} | sed 's/^ \t*//;s/ \t*$//'`
+                  perfmon=`echo ${perfmon} | grep -e '[1-9]\.[0-9][0-9]*'`
+                  perfmon=`echo ${perfmon} | sed 's/\.//'`
+diff --git a/src/configure.in b/src/configure.in
+index c286c62..3f465ad 100644
+--- a/src/configure.in
++++ b/src/configure.in
+@@ -898,6 +898,7 @@ AC_ARG_WITH(perfmon,
+                                             [perfmon=`cat /proc/perfmon | grep version | cut -d: -f2`],
+                                             [perfmon=0])])
+                if test "$perfmon" != 0; then
++	         pfm_incdir="libpfm-3.y/include"
+                  perfmon=`echo ${perfmon} | sed 's/^[ \t]*//;s/[ \t]*$//'`
+                  perfmon=`echo ${perfmon} | grep -e '[[1-9]]\.[[0-9]][[0-9]]*'`
+                  perfmon=`echo ${perfmon} | sed 's/\.//'`
diff --git a/papi.spec b/papi.spec
index a194f82..d9a75e3 100644
--- a/papi.spec
+++ b/papi.spec
@@ -2,11 +2,12 @@
 Summary: Performance Application Programming Interface
 Name: papi
 Version: 5.0.0
-Release: 2%{?dist}
+Release: 5%{?dist}
 License: BSD
 Group: Development/System
 URL: http://icl.cs.utk.edu/papi/
 Source0: http://icl.cs.utk.edu/projects/papi/downloads/%{name}-%{version}.tar.gz
+Patch5: papi-unbundled-libpfm4.patch
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
 BuildRequires: ncurses-devel
 BuildRequires: gcc-gfortran
@@ -48,14 +49,16 @@ the PAPI user-space libraries and interfaces.
 %prep
 %setup -q
 
+%patch5 -p1
+
 %build
 %if %{without bundled_libpfm}
 # Build our own copy of libpfm.
-%global libpfm_config --with-pfm-incdir=%{_includedir}/perfmon --with-pfm-libdir=%{_libdir}
+%global libpfm_config --with-pfm-incdir=%{_includedir} --with-pfm-libdir=%{_libdir}
 %endif
 
 cd src
-%configure --with-libpfm4 \
+%configure --with-perf-events \
 %{?libpfm_config} \
 --with-static-lib=yes --with-shared-lib=yes --with-shlib \
 --with-components="appio coretemp example lmsensors lustre mx net rapl stealtime"
@@ -109,6 +112,9 @@ rm -rf $RPM_BUILD_ROOT
 %{_libdir}/*.a
 
 %changelog
+* Thu Aug 30 2012 William Cohen <wcohen at redhat.com> - 5.0.0-5
+- Fixes to make papi with unbundled libpfm.
+
 * Mon Aug 27 2012 William Cohen <wcohen at redhat.com> - 5.0.0-2
 - Keep libpfm unbundled.
 


More information about the scm-commits mailing list