From aacf8fffaea55631542d8f61bc97bf964a0ee12b Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Sun, 4 May 2014 19:57:27 +0200 Subject: php-pecl-pcsc: 0.3 (alpha) New package --- Makefile | 4 + pcsc-build.patch | 287 +++++++++++++++++++++++++++++++++++++++++++++++++++++ php-pecl-pcsc.spec | 214 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 505 insertions(+) create mode 100644 Makefile create mode 100644 pcsc-build.patch create mode 100644 php-pecl-pcsc.spec diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..13af741 --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +SRCDIR := $(shell pwd) +NAME := $(shell basename $(SRCDIR)) +include ../../../common/Makefile + diff --git a/pcsc-build.patch b/pcsc-build.patch new file mode 100644 index 0000000..813669d --- /dev/null +++ b/pcsc-build.patch @@ -0,0 +1,287 @@ +--- pecl/pcsc/trunk/config.m4 2014/05/04 14:56:27 333470 ++++ pecl/pcsc/trunk/config.m4 2014/05/04 17:05:12 333471 +@@ -29,7 +29,7 @@ + AC_MSG_RESULT($PCSC_DIR) + PHP_ADD_INCLUDE($PCSC_DIR/include/PCSC/) + dnl PHP_EVAL_LIBLINE($PCSC_LIBS, PCSC_SHARED_LIBADD) +- PHP_ADD_LIBRARY_WITH_PATH(pcsclite, "$PCSC_DIR/lib/", PCSC_SHARED_LIBADD) ++ PHP_ADD_LIBRARY_WITH_PATH(pcsclite, "$PCSC_DIR/$PHP_LIBDIR", PCSC_SHARED_LIBADD) + + dnl Finally, tell the build system about the extension and what files are needed + PHP_NEW_EXTENSION(pcsc, pcsc.c, $ext_shared) +--- pecl/pcsc/trunk/config.m4 2014/05/04 17:05:12 333471 ++++ pecl/pcsc/trunk/config.m4 2014/05/04 17:20:35 333472 +@@ -33,7 +33,7 @@ + + dnl Finally, tell the build system about the extension and what files are needed + PHP_NEW_EXTENSION(pcsc, pcsc.c, $ext_shared) +- PHP_INSTALL_HEADERS([php_pcsc.h]) ++ PHP_INSTALL_HEADERS([ext/pcsc], [php_pcsc.h]) + PHP_SUBST(PCSC_SHARED_LIBADD) + fi + +--- pecl/pcsc/trunk/pcsc.c 2014/05/04 17:20:35 333472 ++++ pecl/pcsc/trunk/pcsc.c 2014/05/04 17:50:17 333473 +@@ -135,71 +135,119 @@ + PHP_MINIT_FUNCTION(pcsc) + { + /* Return Codes */ ++#ifdef SCARD_E_BAD_SEEK + REGISTER_PCSC_CONSTANT(SCARD_E_BAD_SEEK); ++#endif + REGISTER_PCSC_CONSTANT(SCARD_E_CANCELLED); + REGISTER_PCSC_CONSTANT(SCARD_E_CANT_DISPOSE); + REGISTER_PCSC_CONSTANT(SCARD_E_CARD_UNSUPPORTED); ++#ifdef SCARD_E_CERTIFICATE_UNAVAILABLE + REGISTER_PCSC_CONSTANT(SCARD_E_CERTIFICATE_UNAVAILABLE); ++#endif ++#ifdef SCARD_E_COMM_DATA_LOST + REGISTER_PCSC_CONSTANT(SCARD_E_COMM_DATA_LOST); ++#endif ++#ifdef SCARD_E_DIR_NOT_FOUND + REGISTER_PCSC_CONSTANT(SCARD_E_DIR_NOT_FOUND); ++#endif + REGISTER_PCSC_CONSTANT(SCARD_E_DUPLICATE_READER); ++#ifdef SCARD_E_FILE_NOT_FOUND + REGISTER_PCSC_CONSTANT(SCARD_E_FILE_NOT_FOUND); ++#endif ++#ifdef SCARD_E_ICC_CREATEORDER + REGISTER_PCSC_CONSTANT(SCARD_E_ICC_CREATEORDER); ++#endif ++#ifdef SCARD_E_ICC_INSTALLATION + REGISTER_PCSC_CONSTANT(SCARD_E_ICC_INSTALLATION); ++#endif + REGISTER_PCSC_CONSTANT(SCARD_E_INSUFFICIENT_BUFFER); + REGISTER_PCSC_CONSTANT(SCARD_E_INVALID_ATR); ++#ifdef SCARD_E_INVALID_CHV + REGISTER_PCSC_CONSTANT(SCARD_E_INVALID_CHV); ++#endif + REGISTER_PCSC_CONSTANT(SCARD_E_INVALID_HANDLE); + REGISTER_PCSC_CONSTANT(SCARD_E_INVALID_PARAMETER); + REGISTER_PCSC_CONSTANT(SCARD_E_INVALID_TARGET); + REGISTER_PCSC_CONSTANT(SCARD_E_INVALID_VALUE); ++#ifdef SCARD_E_NO_ACCESS + REGISTER_PCSC_CONSTANT(SCARD_E_NO_ACCESS); ++#endif ++#ifdef SCARD_E_NO_DIR + REGISTER_PCSC_CONSTANT(SCARD_E_NO_DIR); ++#endif ++#ifdef SCARD_E_NO_FILE + REGISTER_PCSC_CONSTANT(SCARD_E_NO_FILE); ++#endif ++#ifdef SCARD_E_NO_KEY_CONTAINER + REGISTER_PCSC_CONSTANT(SCARD_E_NO_KEY_CONTAINER); ++#endif + REGISTER_PCSC_CONSTANT(SCARD_E_NO_MEMORY); + REGISTER_PCSC_CONSTANT(SCARD_E_NO_READERS_AVAILABLE); + REGISTER_PCSC_CONSTANT(SCARD_E_NO_SERVICE); + REGISTER_PCSC_CONSTANT(SCARD_E_NO_SMARTCARD); ++#ifdef SCARD_E_NO_SUCH_CERTIFICATE + REGISTER_PCSC_CONSTANT(SCARD_E_NO_SUCH_CERTIFICATE); ++#endif + REGISTER_PCSC_CONSTANT(SCARD_E_NOT_READY); + REGISTER_PCSC_CONSTANT(SCARD_E_NOT_TRANSACTED); + REGISTER_PCSC_CONSTANT(SCARD_E_PCI_TOO_SMALL); + REGISTER_PCSC_CONSTANT(SCARD_E_PROTO_MISMATCH); + REGISTER_PCSC_CONSTANT(SCARD_E_READER_UNAVAILABLE); + REGISTER_PCSC_CONSTANT(SCARD_E_READER_UNSUPPORTED); ++#ifdef SCARD_E_SERVER_TOO_BUSY + REGISTER_PCSC_CONSTANT(SCARD_E_SERVER_TOO_BUSY); ++#endif + REGISTER_PCSC_CONSTANT(SCARD_E_SERVICE_STOPPED); + REGISTER_PCSC_CONSTANT(SCARD_E_SHARING_VIOLATION); + REGISTER_PCSC_CONSTANT(SCARD_E_SYSTEM_CANCELLED); + REGISTER_PCSC_CONSTANT(SCARD_E_TIMEOUT); ++#ifdef SCARD_E_UNEXPECTED + REGISTER_PCSC_CONSTANT(SCARD_E_UNEXPECTED); ++#endif + REGISTER_PCSC_CONSTANT(SCARD_E_UNKNOWN_CARD); + REGISTER_PCSC_CONSTANT(SCARD_E_UNKNOWN_READER); ++#ifdef SCARD_E_UNKNOWN_RES_MNG + REGISTER_PCSC_CONSTANT(SCARD_E_UNKNOWN_RES_MNG); ++#endif + REGISTER_PCSC_CONSTANT(SCARD_E_UNSUPPORTED_FEATURE); ++#ifdef SCARD_E_WRITE_TOO_MANY + REGISTER_PCSC_CONSTANT(SCARD_E_WRITE_TOO_MANY); ++#endif + + REGISTER_PCSC_CONSTANT(SCARD_F_COMM_ERROR); + REGISTER_PCSC_CONSTANT(SCARD_F_INTERNAL_ERROR); + REGISTER_PCSC_CONSTANT(SCARD_F_UNKNOWN_ERROR); + REGISTER_PCSC_CONSTANT(SCARD_F_WAITED_TOO_LONG); + ++#ifdef SCARD_P_SHUTDOWN + REGISTER_PCSC_CONSTANT(SCARD_P_SHUTDOWN); ++#endif + + REGISTER_PCSC_CONSTANT(SCARD_S_SUCCESS); + ++#ifdef SCARD_W_CANCELLED_BY_USER + REGISTER_PCSC_CONSTANT(SCARD_W_CANCELLED_BY_USER); ++#endif ++#ifdef SCARD_W_CARD_NOT_AUTHENTICATED + REGISTER_PCSC_CONSTANT(SCARD_W_CARD_NOT_AUTHENTICATED); ++#endif ++#ifdef SCARD_W_CHV_BLOCKED + REGISTER_PCSC_CONSTANT(SCARD_W_CHV_BLOCKED); ++#endif ++#ifdef SCARD_W_EOF + REGISTER_PCSC_CONSTANT(SCARD_W_EOF); ++#endif + REGISTER_PCSC_CONSTANT(SCARD_W_REMOVED_CARD); + REGISTER_PCSC_CONSTANT(SCARD_W_RESET_CARD); ++#ifdef SCARD_W_SECURITY_VIOLATION + REGISTER_PCSC_CONSTANT(SCARD_W_SECURITY_VIOLATION); ++#endif + REGISTER_PCSC_CONSTANT(SCARD_W_UNPOWERED_CARD); + REGISTER_PCSC_CONSTANT(SCARD_W_UNRESPONSIVE_CARD); + REGISTER_PCSC_CONSTANT(SCARD_W_UNSUPPORTED_CARD); ++#ifdef SCARD_W_WRONG_CHV + REGISTER_PCSC_CONSTANT(SCARD_W_WRONG_CHV); ++#endif + + /* Protocols */ + REGISTER_PCSC_CONSTANT(SCARD_PROTOCOL_RAW); +@@ -256,48 +304,80 @@ + /* map error codes to string */ + static char* php_pcsc_error_to_string(DWORD dwRC) { + switch(dwRC) { ++#ifdef SCARD_E_BAD_SEEK + case SCARD_E_BAD_SEEK: return "SCARD_E_BAD_SEEK"; ++#endif + case SCARD_E_CANCELLED: return "SCARD_E_CANCELLED"; + case SCARD_E_CANT_DISPOSE: return "SCARD_E_CANT_DISPOSE"; + case SCARD_E_CARD_UNSUPPORTED: return "SCARD_E_CARD_UNSUPPORTED"; ++#ifdef SCARD_E_CERTIFICATE_UNAVAILABLE + case SCARD_E_CERTIFICATE_UNAVAILABLE: return "SCARD_E_CERTIFICATE_UNAVAILABLE"; ++#endif ++#ifdef SCARD_E_COMM_DATA_LOST + case SCARD_E_COMM_DATA_LOST: return "SCARD_E_COMM_DATA_LOST"; ++#endif ++#ifdef SCARD_E_DIR_NOT_FOUND + case SCARD_E_DIR_NOT_FOUND: return "SCARD_E_DIR_NOT_FOUND"; ++#endif + case SCARD_E_DUPLICATE_READER: return "SCARD_E_DUPLICATE_READER"; ++#ifdef SCARD_E_FILE_NOT_FOUND + case SCARD_E_FILE_NOT_FOUND: return "SCARD_E_FILE_NOT_FOUND"; ++#endif ++#ifdef SCARD_E_ICC_CREATEORDER + case SCARD_E_ICC_CREATEORDER: return "SCARD_E_ICC_CREATEORDER"; ++#endif ++#ifdef SCARD_E_ICC_INSTALLATION + case SCARD_E_ICC_INSTALLATION: return "SCARD_E_ICC_INSTALLATION"; ++#endif + case SCARD_E_INSUFFICIENT_BUFFER: return "SCARD_E_INSUFFICIENT_BUFFER"; + case SCARD_E_INVALID_ATR: return "SCARD_E_INVALID_ATR"; ++#ifdef SCARD_E_INVALID_CHV + case SCARD_E_INVALID_CHV: return "SCARD_E_INVALID_CHV"; ++#endif + case SCARD_E_INVALID_HANDLE: return "SCARD_E_INVALID_HANDLE"; + case SCARD_E_INVALID_PARAMETER: return "SCARD_E_INVALID_PARAMETER"; + case SCARD_E_INVALID_TARGET: return "SCARD_E_INVALID_TARGET"; + case SCARD_E_INVALID_VALUE: return "SCARD_E_INVALID_VALUE"; ++#ifdef SCARD_E_NO_ACCESS + case SCARD_E_NO_ACCESS: return "SCARD_E_NO_ACCESS"; ++#endif ++#ifdef SCARD_E_NO_DIR + case SCARD_E_NO_DIR: return "SCARD_E_NO_DIR"; ++#endif ++#ifdef SCARD_E_NO_FILE + case SCARD_E_NO_FILE: return "SCARD_E_NO_FILE"; ++#endif ++#ifdef SCARD_E_NO_KEY_CONTAINER + case SCARD_E_NO_KEY_CONTAINER: return "SCARD_E_NO_KEY_CONTAINER"; ++#endif + case SCARD_E_NO_MEMORY: return "SCARD_E_NO_MEMORY"; + case SCARD_E_NO_READERS_AVAILABLE: return "SCARD_E_NO_READERS_AVAILABLE"; + case SCARD_E_NO_SERVICE: return "SCARD_E_NO_SERVICE"; + case SCARD_E_NO_SMARTCARD: return "SCARD_E_NO_SMARTCARD"; ++#ifdef SCARD_E_NO_ACCESS + case SCARD_E_NO_SUCH_CERTIFICATE: return "SCARD_E_NO_SUCH_CERTIFICATE"; ++#endif + case SCARD_E_NOT_READY: return "SCARD_E_NOT_READY"; + case SCARD_E_NOT_TRANSACTED: return "SCARD_E_NOT_TRANSACTED"; + case SCARD_E_PCI_TOO_SMALL: return "SCARD_E_PCI_TOO_SMALL"; + case SCARD_E_PROTO_MISMATCH: return "SCARD_E_PROTO_MISMATCH"; + case SCARD_E_READER_UNAVAILABLE: return "SCARD_E_READER_UNAVAILABLE"; + case SCARD_E_READER_UNSUPPORTED: return "SCARD_E_READER_UNSUPPORTED"; ++#ifdef SCARD_E_SERVER_TOO_BUSY + case SCARD_E_SERVER_TOO_BUSY: return "SCARD_E_SERVER_TOO_BUSY"; ++#endif + case SCARD_E_SERVICE_STOPPED: return "SCARD_E_SERVICE_STOPPED"; + case SCARD_E_SHARING_VIOLATION: return "SCARD_E_SHARING_VIOLATION"; + case SCARD_E_SYSTEM_CANCELLED: return "SCARD_E_SYSTEM_CANCELLED"; + case SCARD_E_TIMEOUT: return "SCARD_E_TIMEOUT"; +- case SCARD_E_UNEXPECTED: return "SCARD_E_UNEXPECTED"; ++#ifdef SCARD_E_SERVER_TOO_BUSY ++ case SCARD_E_SERVER_TOO_BUSY: return "SCARD_E_UNEXPECTED"; ++#endif + case SCARD_E_UNKNOWN_CARD: return "SCARD_E_UNKNOWN_CARD"; + case SCARD_E_UNKNOWN_READER: return "SCARD_E_UNKNOWN_READER"; ++#ifdef SCARD_E_UNKNOWN_RES_MNG + case SCARD_E_UNKNOWN_RES_MNG: return "SCARD_E_UNKNOWN_RES_MNG"; ++#endif + /* apparently E_UNEXPECTED and E_UNSUPPORTED are defined + by a buggy header file on Linux, causing a "double used constant" + error. Just leave this out on Linux, then. +@@ -305,14 +385,20 @@ + #ifdef PHP_WIN32 + case SCARD_E_UNSUPPORTED_FEATURE: return "SCARD_E_UNSUPPORTED_FEATURE"; + #endif ++#ifdef SCARD_E_WRITE_TOO_MANY + case SCARD_E_WRITE_TOO_MANY: return "SCARD_E_WRITE_TOO_MANY"; ++#endif + case SCARD_F_COMM_ERROR: return "SCARD_E_WRITE_TOO_MANY"; + case SCARD_F_INTERNAL_ERROR: return "SCARD_F_INTERNAL_ERROR"; + case SCARD_F_UNKNOWN_ERROR: return "SCARD_F_UNKNOWN_ERROR"; + case SCARD_F_WAITED_TOO_LONG: return "SCARD_F_WAITED_TOO_LONG"; ++#ifdef SCARD_P_SHUTDOWN + case SCARD_P_SHUTDOWN: return "SCARD_P_SHUTDOWN"; ++#endif + case SCARD_S_SUCCESS: return "SCARD_S_SUCCESS"; ++#ifdef SCARD_W_CANCELLED_BY_USER + case SCARD_W_CANCELLED_BY_USER: return "SCARD_W_CANCELLED_BY_USER"; ++#endif + #ifdef SCARD_W_CACHE_ITEM_NOT_FOUND + case SCARD_W_CACHE_ITEM_NOT_FOUND: return "SCARD_W_CACHE_ITEM_NOT_FOUND"; + #endif +@@ -322,16 +408,26 @@ + #ifdef SCARD_W_CACHE_ITEM_TOO_BIG + case SCARD_W_CACHE_ITEM_TOO_BIG: return "SCARD_W_CACHE_ITEM_TOO_BIG"; + #endif ++#ifdef SCARD_W_CARD_NOT_AUTHENTICATED + case SCARD_W_CARD_NOT_AUTHENTICATED: return "SCARD_W_CARD_NOT_AUTHENTICATED"; ++#endif ++#ifdef SCARD_W_CHV_BLOCKED + case SCARD_W_CHV_BLOCKED: return "SCARD_W_CHV_BLOCKED"; ++#endif ++#ifdef SCARD_W_EOF + case SCARD_W_EOF: return "SCARD_W_EOF"; ++#endif + case SCARD_W_REMOVED_CARD: return "SCARD_W_REMOVED_CARD"; + case SCARD_W_RESET_CARD: return "SCARD_W_RESET_CARD"; ++#ifdef SCARD_W_SECURITY_VIOLATION + case SCARD_W_SECURITY_VIOLATION: return "SCARD_W_SECURITY_VIOLATION"; ++#endif + case SCARD_W_UNPOWERED_CARD: return "SCARD_W_UNPOWERED_CARD"; + case SCARD_W_UNRESPONSIVE_CARD: return "SCARD_W_UNRESPONSIVE_CARD"; + case SCARD_W_UNSUPPORTED_CARD: return "SCARD_W_UNSUPPORTED_CARD"; ++#ifdef SCARD_W_WRONG_CHV + case SCARD_W_WRONG_CHV: return "SCARD_W_WRONG_CHV"; ++#endif + default: return "Unknown"; + } + } +--- pecl/pcsc/trunk/pcsc.c 2014/05/04 17:50:17 333473 ++++ pecl/pcsc/trunk/pcsc.c 2014/05/04 17:53:25 333474 +@@ -370,8 +370,8 @@ + case SCARD_E_SHARING_VIOLATION: return "SCARD_E_SHARING_VIOLATION"; + case SCARD_E_SYSTEM_CANCELLED: return "SCARD_E_SYSTEM_CANCELLED"; + case SCARD_E_TIMEOUT: return "SCARD_E_TIMEOUT"; +-#ifdef SCARD_E_SERVER_TOO_BUSY +- case SCARD_E_SERVER_TOO_BUSY: return "SCARD_E_UNEXPECTED"; ++#ifdef SCARD_E_UNEXPECTED ++ case SCARD_E_UNEXPECTED: return "SCARD_E_UNEXPECTED"; + #endif + case SCARD_E_UNKNOWN_CARD: return "SCARD_E_UNKNOWN_CARD"; + case SCARD_E_UNKNOWN_READER: return "SCARD_E_UNKNOWN_READER"; diff --git a/php-pecl-pcsc.spec b/php-pecl-pcsc.spec new file mode 100644 index 0000000..1c07d28 --- /dev/null +++ b/php-pecl-pcsc.spec @@ -0,0 +1,214 @@ +# spec file for php-pecl-pcsc +# +# Copyright (c) 2014 Remi Collet +# License: CC-BY-SA +# http://creativecommons.org/licenses/by-sa/3.0/ +# +# Please, preserve the changelog entries +# +%{?scl: %scl_package php-pecl-pcsc} +%{!?php_inidir: %global php_inidir %{_sysconfdir}/php.d} +%{!?__pecl: %global __pecl %{_bindir}/pecl} +%{!?__php: %global __php %{_bindir}/php} + +%global with_zts 0%{?__ztsphp:1} +%global pecl_name pcsc +%if "%{php_version}" < "5.6" +%global ini_name %{pecl_name}.ini +%else +%global ini_name 40-%{pecl_name}.ini +%endif + +Summary: An extension for PHP using the winscard PC/SC API +Name: %{?scl_prefix}php-pecl-%{pecl_name} +Version: 0.3 +Release: 1%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')} +License: BSD +Group: Development/Languages +URL: http://pecl.php.net/package/%{pecl_name} +Source0: http://pecl.php.net/get/%{pecl_name}-%{version}.tgz + +# http://svn.php.net/viewvc?view=revision&revision=333471 +# http://svn.php.net/viewvc?view=revision&revision=333472 +# http://svn.php.net/viewvc?view=revision&revision=333473 +# http://svn.php.net/viewvc?view=revision&revision=333474 +Patch0: %{pecl_name}-build.patch + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildRequires: pcsc-lite-devel +BuildRequires: %{?scl_prefix}php-devel > 5.3 +BuildRequires: %{?scl_prefix}php-pear + +Requires(post): %{__pecl} +Requires(postun): %{__pecl} +Requires: %{?scl_prefix}php(zend-abi) = %{php_zend_api} +Requires: %{?scl_prefix}php(api) = %{php_core_api} + +Provides: %{?scl_prefix}php-%{pecl_name} = %{version} +Provides: %{?scl_prefix}php-%{pecl_name}%{?_isa} = %{version} +Provides: %{?scl_prefix}php-pecl(%{pecl_name}) = %{version} +Provides: %{?scl_prefix}php-pecl(%{pecl_name})%{?_isa} = %{version} + +%if "%{?vendor}" == "Remi Collet" +# Other third party repo stuff +%if "%{php_version}" > "5.4" +Obsoletes: php53-pecl-%{pecl_name} +Obsoletes: php53u-pecl-%{pecl_name} +Obsoletes: php54-pecl-%{pecl_name} +%endif +%if "%{php_version}" > "5.5" +Obsoletes: php55u-pecl-%{pecl_name} +%endif +%if "%{php_version}" > "5.6" +Obsoletes: php56u-pecl-%{pecl_name} +%endif +%endif + +%if 0%{?fedora} < 20 && 0%{?rhel} < 7 +# Filter shared private +%{?filter_provides_in: %filter_provides_in %{_libdir}/.*\.so$} +%{?filter_setup} +%endif + + +%description +This is an extension for using PC/SC based smart cards with PHP. +It is a wrapper to the wonderful and free project PCSC-Lite which is the +middleware to access a smart card using SCard API (PC/SC). + + +%package devel +Summary: %{name} developer files (header) +Group: Development/Libraries +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: %{?scl_prefix}php-devel%{?_isa} + +%description devel +These are the files needed to compile programs using %{name}. + + +%prep +%setup -q -c +mv %{pecl_name}-%{version} NTS + +cd NTS +%patch0 -p3 -b .build + +# Sanity check, really often broken +extver=$(sed -n '/#define PHP_PCSC_VERSION/{s/.* "//;s/".*$//;p}' php_pcsc.h) +if test "x${extver}" != "x%{version}"; then + : Error: Upstream extension version is ${extver}, expecting %{version}. + exit 1 +fi +cd .. + +%if %{with_zts} +# Duplicate source tree for NTS / ZTS build +cp -pr NTS ZTS +%endif + +# Create configuration file +cat > %{ini_name} << 'EOF' +; Enable %{pecl_name} extension module +extension=%{pecl_name}.so +EOF + + +%build +cd NTS +%{_bindir}/phpize +%configure \ + --with-php-config=%{_bindir}/php-config \ + --with-libdir=%{_lib} +make %{?_smp_mflags} + +%if %{with_zts} +cd ../ZTS +%{_bindir}/zts-phpize +%configure \ + --with-php-config=%{_bindir}/zts-php-config \ + --with-libdir=%{_lib} +make %{?_smp_mflags} +%endif + + +%install +rm -rf %{buildroot} + +make -C NTS \ + install INSTALL_ROOT=%{buildroot} + +# install config file +install -D -m 644 %{ini_name} %{buildroot}%{php_inidir}/%{ini_name} + +# Install XML package description +install -D -m 644 package.xml %{buildroot}%{pecl_xmldir}/%{name}.xml + +%if %{with_zts} +make -C ZTS \ + install INSTALL_ROOT=%{buildroot} + +install -D -m 644 %{ini_name} %{buildroot}%{php_ztsinidir}/%{ini_name} +%endif + +# Test & Documentation +for i in $(grep 'role="doc"' package.xml | sed -e 's/^.*name="//;s/".*$//') +do install -Dpm 644 NTS/$i %{buildroot}%{pecl_docdir}/%{pecl_name}/$i +done + + +%post +%{pecl_install} %{pecl_xmldir}/%{name}.xml >/dev/null || : + + +%postun +if [ $1 -eq 0 ] ; then + %{pecl_uninstall} %{pecl_name} >/dev/null || : +fi + + +%check +cd NTS +: Minimal load test for NTS extension +%{__php} --no-php-ini \ + --define extension=modules/%{pecl_name}.so \ + --modules | grep PC/SC + +%if %{with_zts} +cd ../ZTS +: Minimal load test for ZTS extension +%{__ztsphp} --no-php-ini \ + --define extension=modules/%{pecl_name}.so \ + --modules | grep PC/SC +%endif + + +%clean +rm -rf %{buildroot} + + +%files +%defattr(-,root,root,-) +%doc %{pecl_docdir}/%{pecl_name} +%{pecl_xmldir}/%{name}.xml + +%config(noreplace) %{php_inidir}/%{ini_name} +%{php_extdir}/%{pecl_name}.so + +%if %{with_zts} +%config(noreplace) %{php_ztsinidir}/%{ini_name} +%{php_ztsextdir}/%{pecl_name}.so +%endif + +%files devel +%defattr(-,root,root,-) +%{php_incldir}/ext/%{pecl_name} + +%if %{with_zts} +%{php_ztsincldir}/ext/%{pecl_name} +%endif + + +%changelog +* Sun May 4 2014 Remi Collet - 0.3-1 +- initial package, version 0.3 (alpha) \ No newline at end of file -- cgit