diff options
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | php-pecl-xhprof.spec | 228 | ||||
-rw-r--r-- | xhprof-arginfo.patch | 54 | ||||
-rw-r--r-- | xhprof-php54.patch | 85 |
4 files changed, 371 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1e65467 --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +SRCDIR := $(shell pwd) +NAME := $(shell basename $(SRCDIR)) +include ../common/Makefile + diff --git a/php-pecl-xhprof.spec b/php-pecl-xhprof.spec new file mode 100644 index 0000000..02edd69 --- /dev/null +++ b/php-pecl-xhprof.spec @@ -0,0 +1,228 @@ +%{!?__pecl: %{expand: %%global __pecl %{_bindir}/pecl}} + +%global pecl_name xhprof + +Name: php-pecl-xhprof +Version: 0.9.2 +Release: 5%{?dist}.1 +Summary: PHP extension for XHProf, a Hierarchical Profiler +Group: Development/Languages +License: ASL 2.0 +URL: http://pecl.php.net/package/%{pecl_name} +Source0: http://pecl.php.net/get/%{pecl_name}-%{version}.tgz + +# From github +Patch0: %{pecl_name}-arginfo.patch +Patch1: %{pecl_name}-php54.patch + +# https://bugs.php.net/61262 +ExcludeArch: ppc64 + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildRequires: php-devel >= 5.2.0 +BuildRequires: php-pear >= 1:1.4.0 + +Requires: php(zend-abi) = %{php_zend_api} +Requires: php(api) = %{php_core_api} +Requires(post): %{__pecl} +Requires(postun): %{__pecl} +Provides: php-pecl(%{pecl_name}) = %{version} + +# RPM 4.8 +%{?filter_provides_in: %filter_provides_in %{_libdir}/.*\.so$} +%{?filter_setup} +# RPM 4.9 +%global __provides_exclude_from %{?__provides_exclude_from:%__provides_exclude_from|}%{_libdir}/.*\\.so$ + + +%description +XHProf is a function-level hierarchical profiler for PHP. + +This package provides the raw data collection component, +implemented in C (as a PHP extension). + +The HTML based navigational interface is provided in the "xhprof" package. + + +%package -n xhprof +Summary: A Hierarchical Profiler for PHP - Web interface +Group: Development/Tools +%if 0%{?fedora} > 11 || 0%{?rhel} > 5 +BuildArch: noarch +%endif + +Requires: php-pecl-xhprof = %{version}-%{release} +Requires: php >= 5.2.0 +Requires: %{_bindir}/dot + +%description -n xhprof +XHProf is a function-level hierarchical profiler for PHP and has a simple HTML +based navigational interface. + +The raw data collection component, implemented in C (as a PHP extension, +provided by the "php-pecl-xhprof" package). + +The reporting/UI layer is all in PHP. It is capable of reporting function-level +inclusive and exclusive wall times, memory usage, CPU times and number of calls +for each function. + +Additionally, it supports ability to compare two runs (hierarchical DIFF +reports), or aggregate results from multiple runs. + +Documentation : %{_datadir}/doc/%{name}-%{version}/docs/index.html + + +%prep +%setup -c -q + +# Extension configuration file +cat >%{pecl_name}.ini <<EOF +; Enable %{pecl_name} extension module +extension = xhprof.so + +; You can either pass the directory location as an argument to the constructor +; for XHProfRuns_Default() or set xhprof.output_dir ini param. +xhprof.output_dir = /tmp +EOF + +# Apache configuration file +cat >httpd.conf <<EOF +Alias /xhprof /usr/share/xhprof/xhprof_html + +<Directory /usr/share/xhprof/xhprof_html> + <IfModule mod_authz_core.c> + # Apache 2.4 + <RequireAny> + Require ip 127.0.0.1 + Require ip ::1 + </RequireAny> + </IfModule> + <IfModule !mod_authz_core.c> + # Apache 2.2 + Order Deny,Allow + Deny from All + Allow from 127.0.0.1 + Allow from ::1 + </IfModule> +</Directory> +EOF + +cd %{pecl_name}-%{version} +%patch0 -p1 -b .refl +%patch1 -p1 -b .php54 + +%if 0%{?__ztsphp:1} +# duplicate for ZTS build +cp -r extension ext-zts +%endif + +# not to be installed +mv xhprof_html/docs ../docs + + +%build +cd %{pecl_name}-%{version}/extension +%{_bindir}/phpize +%configure \ + --with-php-config=%{_bindir}/php-config +make %{?_smp_mflags} + +%if 0%{?__ztsphp:1} +cd ../ext-zts +%{_bindir}/zts-phpize +%configure \ + --with-php-config=%{_bindir}/zts-php-config +make %{?_smp_mflags} +%endif + + +%install +rm -rf %{buildroot} +make install -C %{pecl_name}-%{version}/extension INSTALL_ROOT=%{buildroot} +install -D -m 644 %{pecl_name}.ini %{buildroot}%{_sysconfdir}/php.d/%{pecl_name}.ini + +%if 0%{?__ztsphp:1} +make install -C %{pecl_name}-%{version}/ext-zts INSTALL_ROOT=%{buildroot} +install -D -m 644 %{pecl_name}.ini %{buildroot}%{php_ztsinidir}/%{pecl_name}.ini +%endif + +# Install XML package description +install -D -m 644 package.xml %{buildroot}%{pecl_xmldir}/%{name}.xml + +# Install the web interface +install -D -m 644 httpd.conf %{buildroot}%{_sysconfdir}/httpd/conf.d/xhprof.conf + +mkdir -p %{buildroot}%{_datadir}/xhprof +cp -pr %{pecl_name}-%{version}/xhprof_html %{buildroot}%{_datadir}/xhprof/xhprof_html +cp -pr %{pecl_name}-%{version}/xhprof_lib %{buildroot}%{_datadir}/xhprof/xhprof_lib + + +%check +# simple module load test +php --no-php-ini \ + --define extension_dir=%{pecl_name}-%{version}/extension/modules \ + --define extension=%{pecl_name}.so \ + --modules | grep %{pecl_name} + +%if 0%{?__ztsphp:1} +%{__ztsphp} --no-php-ini \ + --define extension_dir=%{pecl_name}-%{version}/ext-zts/modules \ + --define extension=%{pecl_name}.so \ + --modules | grep %{pecl_name} +%endif + + +%clean +rm -rf %{buildroot} + + +%post +%{pecl_install} %{pecl_xmldir}/%{name}.xml >/dev/null || : + + +%postun +if [ $1 -eq 0 ] ; then + %{pecl_uninstall} %{pecl_name} >/dev/null || : +fi + + +%files +%defattr(-,root,root,-) +%doc %{pecl_name}-%{version}/{CHANGELOG,CREDITS,README,LICENSE,examples} +%config(noreplace) %{_sysconfdir}/php.d/%{pecl_name}.ini +%{php_extdir}/%{pecl_name}.so +%{pecl_xmldir}/%{name}.xml + +%if 0%{?__ztsphp:1} +%config(noreplace) %{php_ztsinidir}/%{pecl_name}.ini +%{php_ztsextdir}/%{pecl_name}.so +%endif + + +%files -n xhprof +%defattr(-,root,root,-) +%doc docs +%config(noreplace) %{_sysconfdir}/httpd/conf.d/xhprof.conf +%{_datadir}/xhprof + + +%changelog +* Sun May 06 2012 Remi Collet <remi@fedoraproject.org> - 0.9.2-5 +- make configuration file compatible with apache 2.2 / 2.4 + +* Mon Mar 05 2012 Remi Collet <remi@fedoraproject.org> - 0.9.2-4 +- rename patches +- install html and lib under /usr/share/xhprof + +* Sat Mar 03 2012 Remi Collet <remi@fedoraproject.org> - 0.9.2-3 +- prepare for review +- make ZTS build conditionnal (for PHP 5.3) +- add xhprof.output_dir in configuration file +- open https://bugs.php.net/61262 for ppc64 + +* Thu Mar 01 2012 Remi Collet <RPMS@FamilleCollet.com> - 0.9.2-2 +- split web interace in xhprof sub-package + +* Thu Mar 01 2012 Remi Collet <RPMS@FamilleCollet.com> - 0.9.2-1 +- Initial RPM package + diff --git a/xhprof-arginfo.patch b/xhprof-arginfo.patch new file mode 100644 index 0000000..60fefbe --- /dev/null +++ b/xhprof-arginfo.patch @@ -0,0 +1,54 @@ +From 0b3d4054d86b5a52d258623be1497c0c1c3f9a54 Mon Sep 17 00:00:00 2001 +From: philip <philip@c90b9560-bf6c-de11-be94-00142212c4b1> +Date: Wed, 7 Apr 2010 18:17:09 +0000 +Subject: [PATCH] Added arginfo for reflection + +git-svn-id: https://svn.php.net/repository/pecl/xhprof/trunk@297630 c90b9560-bf6c-de11-be94-00142212c4b1 +--- + extension/xhprof.c | 23 +++++++++++++++++++---- + 1 files changed, 19 insertions(+), 4 deletions(-) + +diff --git a/extension/xhprof.c b/extension/xhprof.c +index eabb165..7001d12 100644 +--- a/extension/xhprof.c ++++ b/extension/xhprof.c +@@ -280,6 +280,21 @@ static ZEND_DLEXPORT void (*_zend_execute_internal) (zend_execute_data *data, + static inline char **hp_strings_in_zval(zval *values); + static inline void hp_array_del(char **name_array); + ++/* {{{ arginfo */ ++ZEND_BEGIN_ARG_INFO_EX(arginfo_xhprof_enable, 0, 0, 0) ++ ZEND_ARG_INFO(0, flags) ++ ZEND_ARG_INFO(0, options) ++ZEND_END_ARG_INFO() ++ ++ZEND_BEGIN_ARG_INFO(arginfo_xhprof_disable, 0) ++ZEND_END_ARG_INFO() ++ ++ZEND_BEGIN_ARG_INFO(arginfo_xhprof_sample_enable, 0) ++ZEND_END_ARG_INFO() ++ ++ZEND_BEGIN_ARG_INFO(arginfo_xhprof_sample_disable, 0) ++ZEND_END_ARG_INFO() ++ + /** + * ********************* + * PHP EXTENSION GLOBALS +@@ -287,10 +302,10 @@ static ZEND_DLEXPORT void (*_zend_execute_internal) (zend_execute_data *data, + */ + /* List of functions implemented/exposed by xhprof */ + zend_function_entry xhprof_functions[] = { +- PHP_FE(xhprof_enable, NULL) +- PHP_FE(xhprof_disable, NULL) +- PHP_FE(xhprof_sample_enable, NULL) +- PHP_FE(xhprof_sample_disable, NULL) ++ PHP_FE(xhprof_enable, arginfo_xhprof_enable) ++ PHP_FE(xhprof_disable, arginfo_xhprof_disable) ++ PHP_FE(xhprof_sample_enable, arginfo_xhprof_sample_enable) ++ PHP_FE(xhprof_sample_disable, arginfo_xhprof_sample_disable) + {NULL, NULL, NULL} + }; + +-- +1.7.5.4 + diff --git a/xhprof-php54.patch b/xhprof-php54.patch new file mode 100644 index 0000000..92cd231 --- /dev/null +++ b/xhprof-php54.patch @@ -0,0 +1,85 @@ +From a6bae51236677d95cb329d5b20806465c0260394 Mon Sep 17 00:00:00 2001 +From: Scott MacVicar <scott@fb.com> +Date: Sat, 16 Jul 2011 14:43:01 -0700 +Subject: [PATCH] Fixed PHP 5.4 building + +Summary: +Fixed PHP 5.4 building +* class names became constants +* return_reference is stored in zend_function.fn_flags +* deal with znode reorganisation + +Test Plan: +Build against php 5.4 +Build against php 5.3 + +Reviewers: scoates + +CC: + +Differential Revision: 682 +--- + extension/xhprof.c | 19 +++++++++++++++++-- + 1 files changed, 17 insertions(+), 2 deletions(-) + +diff --git a/extension/xhprof.c b/extension/xhprof.c +index 7001d12..33311b3 100644 +--- a/extension/xhprof.c ++++ b/extension/xhprof.c +@@ -28,6 +28,7 @@ + #include "php_ini.h" + #include "ext/standard/info.h" + #include "php_xhprof.h" ++#include "Zend/zend_extensions.h" + #include <sys/time.h> + #include <sys/resource.h> + #include <stdlib.h> +@@ -898,7 +899,7 @@ size_t hp_get_function_stack(hp_entry_t *entry, + static char *hp_get_function_name(zend_op_array *ops TSRMLS_DC) { + zend_execute_data *data; + char *func = NULL; +- char *cls = NULL; ++ const char *cls = NULL; + char *ret = NULL; + int len; + zend_function *curr_func; +@@ -942,7 +943,12 @@ size_t hp_get_function_stack(hp_entry_t *entry, + /* we are dealing with a special directive/function like + * include, eval, etc. + */ ++#if ZEND_EXTENSION_API_NO >= 220100525 ++ curr_op = data->opline->extended_value; ++#else + curr_op = data->opline->op2.u.constant.value.lval; ++#endif ++ + switch (curr_op) { + case ZEND_EVAL: + func = "eval"; +@@ -1660,13 +1666,22 @@ ZEND_DLEXPORT void hp_execute_internal(zend_execute_data *execute_data, + if (!_zend_execute_internal) { + /* no old override to begin with. so invoke the builtin's implementation */ + zend_op *opline = EX(opline); ++#if ZEND_EXTENSION_API_NO >= 220100525 ++ temp_variable *retvar = &EX_T(opline->result.var); ++ ((zend_internal_function *) EX(function_state).function)->handler( ++ opline->extended_value, ++ retvar->var.ptr, ++ (EX(function_state).function->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? ++ &retvar->var.ptr:NULL, ++ EX(object), ret TSRMLS_CC); ++#else + ((zend_internal_function *) EX(function_state).function)->handler( + opline->extended_value, + EX_T(opline->result.u.var).var.ptr, + EX(function_state).function->common.return_reference ? + &EX_T(opline->result.u.var).var.ptr:NULL, + EX(object), ret TSRMLS_CC); +- ++#endif + } else { + /* call the old override */ + _zend_execute_internal(execute_data, ret TSRMLS_CC); +-- +1.7.5.4 + |