summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--LICENSE35
-rw-r--r--Makefile4
-rw-r--r--php-pecl-ssdeep.spec214
-rw-r--r--ssdeep.patch84
4 files changed, 337 insertions, 0 deletions
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..78fed68
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,35 @@
+PECL ssdeep PHP Extension Licence
+-------
+This extension is under the BSD Licence:
+
+Copyright (c) 2014, Simon Holywell
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+ssdeep Licensing Exemption
+-------
+
+Although ssdeep and the fuzzy hashing API are usually licensed under GNU GPLv2 Jesse Kornblum has licenced them to PECL under the terms of the Perl Artistic Licence with the following declaration:
+"I hereby license ssdeep, the current version and all subsequent versions, under the terms of the Perl Artistic License, for inclusion into the PECL."
+See http://news.php.net/php.pecl.dev/7625 for the verbatim email.
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/php-pecl-ssdeep.spec b/php-pecl-ssdeep.spec
new file mode 100644
index 0000000..4f57ea9
--- /dev/null
+++ b/php-pecl-ssdeep.spec
@@ -0,0 +1,214 @@
+# spec file for php-pecl-ssdeep
+#
+# 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-ssdeep}
+%{!?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 ssdeep
+
+Summary: Wrapper for libfuzzy library
+Name: %{?scl_prefix}php-pecl-%{pecl_name}
+Version: 1.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://git.php.net/?p=pecl/text/ssdeep.git;a=blob_plain;f=LICENSE;hb=HEAD
+Source1: LICENSE
+
+# http://git.php.net/?p=pecl/text/ssdeep.git;a=patch;h=8c82ad02f89aa46ff772e676fda83d31e58fc8e8
+Patch0: %{pecl_name}.patch
+
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+BuildRequires: ssdeep-devel > 2.5
+BuildRequires: %{?scl_prefix}php-devel > 5.2
+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 0%{!?scl:1}
+# 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
+%endif
+
+%if 0%{?fedora} < 20
+# Filter shared private
+%{?filter_provides_in: %filter_provides_in %{_libdir}/.*\.so$}
+%{?filter_setup}
+%endif
+
+
+%description
+The ssdeep project page describes it as a library for
+"...computing context triggered piecewise hashes (CTPH).
+Also called fuzzy hashes, CTPH can match inputs that have homologies.
+Such inputs have sequences of identical bytes in the same order,
+although bytes in between these sequences may be different in both
+content and length".
+
+For an in depth paper explaining context triggered piecewise hashes please
+see http://dfrws.org/2006/proceedings/12-Kornblum.pdf
+
+This extensions wraps the ssdeep fuzzy hashing API created by Jesse Kornblum.
+
+
+%prep
+%setup -q -c
+mv %{pecl_name}-%{version} NTS
+
+cd NTS
+cp %{SOURCE1} .
+%patch0 -p1
+
+# Sanity check, really often broken
+extver=$(sed -n '/define PHP_SSDEEP_VERSION/{s/.* "//;s/".*$//;p}' php_ssdeep.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 << 'EOF' | tee %{pecl_name}.ini
+; Enable %{summary} extension module
+extension=%{pecl_name}.so
+EOF
+
+
+%build
+cd NTS
+%{_bindir}/phpize
+%configure \
+ --with-ssdeep=%{_prefix} \
+ --with-php-config=%{_bindir}/php-config \
+ --with-libdir=%{_lib}
+make %{?_smp_mflags}
+
+%if %{with_zts}
+cd ../ZTS
+%{_bindir}/zts-phpize
+%configure \
+ --with-ssdeep=%{_prefix} \
+ --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 %{pecl_name}.ini %{buildroot}%{php_inidir}/%{pecl_name}.ini
+
+# 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 %{pecl_name}.ini %{buildroot}%{php_ztsinidir}/%{pecl_name}.ini
+%endif
+
+# Test & Documentation
+for i in $(grep 'role="test"' package.xml | sed -e 's/^.*name="//;s/".*$//')
+do install -Dpm 644 NTS/$i %{buildroot}%{pecl_testdir}/%{pecl_name}/$i
+done
+for i in LICENSE $(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=%{buildroot}%{php_extdir}/%{pecl_name}.so \
+ --modules | grep %{pecl_name}
+
+: Upstream test suite for NTS extension
+TEST_PHP_EXECUTABLE=%{__php} \
+TEST_PHP_ARGS="-n -d extension=$PWD/modules/%{pecl_name}.so" \
+NO_INTERACTION=1 \
+REPORT_EXIT_STATUS=1 \
+%{__php} -n run-tests.php
+
+%if %{with_zts}
+cd ../ZTS
+: Minimal load test for ZTS extension
+%{__ztsphp} --no-php-ini \
+ --define extension=%{buildroot}%{php_ztsextdir}/%{pecl_name}.so \
+ --modules | grep %{pecl_name}
+
+: Upstream test suite for ZTS extension
+TEST_PHP_EXECUTABLE=%{_bindir}/zts-php \
+TEST_PHP_ARGS="-n -d extension=$PWD/modules/%{pecl_name}.so" \
+NO_INTERACTION=1 \
+REPORT_EXIT_STATUS=1 \
+%{_bindir}/zts-php -n run-tests.php
+%endif
+
+
+%clean
+rm -rf %{buildroot}
+
+
+%files
+%defattr(-,root,root,-)
+%doc %{pecl_docdir}/%{pecl_name}
+%doc %{pecl_testdir}/%{pecl_name}
+%{pecl_xmldir}/%{name}.xml
+%config(noreplace) %{php_inidir}/%{pecl_name}.ini
+%{php_extdir}/%{pecl_name}.so
+
+%if %{with_zts}
+%config(noreplace) %{php_ztsinidir}/%{pecl_name}.ini
+%{php_ztsextdir}/%{pecl_name}.so
+%endif
+
+
+%changelog
+* Wed Jan 22 2014 Remi Collet <remi@fedoraproject.org> - 1.0.3-1
+- initial package, version 1.0.3 (stable) \ No newline at end of file
diff --git a/ssdeep.patch b/ssdeep.patch
new file mode 100644
index 0000000..ed37070
--- /dev/null
+++ b/ssdeep.patch
@@ -0,0 +1,84 @@
+From 8c82ad02f89aa46ff772e676fda83d31e58fc8e8 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@php.net>
+Date: Wed, 22 Jan 2014 09:06:11 +0100
+Subject: [PATCH] Improves libfuzzy detection - honour --with-libdir option
+
+Allow to use --with-ssdeep=/usr, and find:
+- lib in /usr/lib64
+- inc in /usr/include
+---
+ ax_libssdeep.m4 | 37 ++++++++++++++++++-------------------
+ 1 file changed, 18 insertions(+), 19 deletions(-)
+
+diff --git a/ax_libssdeep.m4 b/ax_libssdeep.m4
+index 93561f9..d948f99 100644
+--- a/ax_libssdeep.m4
++++ b/ax_libssdeep.m4
+@@ -28,6 +28,7 @@ AC_DEFUN([AX_SSDEEP], [
+
+ SSDEEP_LIB_NAME="fuzzy"
+ SSDEEP_LIB_FILENAME="lib$SSDEEP_LIB_NAME.$LIB_EXTENSION"
++ SSDEEP_LIBDIR=${PHP_LIBDIR-lib}
+
+ if test -z "$withssdeep" -o "$withssdeep" = "yes"; then
+ for i in /usr/lib /usr/local/lib; do
+@@ -40,16 +41,16 @@ AC_DEFUN([AX_SSDEEP], [
+ fi
+ elif test "$withssdeep" = "no"; then
+ AC_MSG_ERROR(["Cannot build whilst ssdeep is disabled."])
++ elif test -f "$withssdeep/$SSDEEP_LIB_FILENAME"; then
++ SSDEEP_LIB_DIR="$withssdeep"
++ elif test -f "$withssdeep/$SSDEEP_LIBDIR/$SSDEEP_LIB_FILENAME"; then
++ SSDEEP_LIB_DIR="$withssdeep/$SSDEEP_LIBDIR"
++ elif test -f "$withssdeep/$SSDEEP_LIB_FILENAME"; then
++ SSDEEP_LIB_DIR="$withssdeep"
++ elif test -f "$withssdeep/.libs/$SSDEEP_LIB_FILENAME"; then
++ SSDEEP_LIB_DIR="$withssdeep/.libs/"
+ else
+- if test -f "$withssdeep/$SSDEEP_LIB_FILENAME"; then
+- SSDEEP_LIB_DIR="$withssdeep"
+- else
+- if test -f "$withssdeep/.libs/$SSDEEP_LIB_FILENAME"; then
+- SSDEEP_LIB_DIR="$withssdeep/.libs/"
+- else
+- AC_MSG_ERROR(["Could not find ssdeep library '$withssdeep/.libs/$SSDEEP_LIB_FILENAME'. Try specifying the path to the ssdeep build directory."])
+- fi
+- fi
++ AC_MSG_ERROR(["Could not find ssdeep library '$withssdeep/.libs/$SSDEEP_LIB_FILENAME'. Try specifying the path to the ssdeep build directory."])
+ fi
+
+ SSDEEP_LIBDIR="-L$SSDEEP_LIB_DIR"
+@@ -65,22 +66,20 @@ AC_DEFUN([AX_SSDEEP], [
+ if test "$SSDEEP_INCLUDEDIR" = ""; then
+ AC_MSG_ERROR(["Could not find ssdeep '$SSDEEP_LIB_NAME.h' header file. Try specifying the path to the ssdeep build directory."])
+ fi
++ elif test -f "$withssdeep/../$SSDEEP_LIB_NAME.h"; then
++ SSDEEP_INCLUDEDIR="$withssdeep/../"
++ elif test -f "$withssdeep/include/$SSDEEP_LIB_NAME.h"; then
++ SSDEEP_INCLUDEDIR="$withssdeep/include/"
++ elif test -f "$withssdeep/$SSDEEP_LIB_NAME.h"; then
++ SSDEEP_INCLUDEDIR="$withssdeep"
+ else
+- if test -f "$withssdeep/../$SSDEEP_LIB_NAME.h"; then
+- SSDEEP_INCLUDEDIR="$withssdeep/../"
+- else
+- if test -f "$withssdeep/$SSDEEP_LIB_NAME.h"; then
+- SSDEEP_INCLUDEDIR="$withssdeep"
+- else
+- AC_MSG_ERROR(["Could not find ssdeep '$SSDEEP_LIB_NAME.h' header file. Try specifying the path to the ssdeep build directory."])
+- fi
+- fi
++ AC_MSG_ERROR(["Could not find ssdeep '$SSDEEP_LIB_NAME.h' header file. Try specifying the path to the ssdeep build directory."])
+ fi
+
+ SSDEEP_INCLUDEDIR_NO_FLAG="$SSDEEP_INCLUDEDIR"
+ SSDEEP_INCLUDEDIR="-I$SSDEEP_INCLUDEDIR"
+
+- AC_MSG_RESULT([$SSDEEP_LIB_DIR])
++ AC_MSG_RESULT([$SSDEEP_LIB_DIR, $SSDEEP_INCLUDEDIR_NO_FLAG])
+
+ AC_DEFINE([SSDEEP_ENABLED], [1], [Enables ssdeep])
+
+--
+1.8.4.3
+