From 14cac554fae6cdbf97bc7882f17da260aa7b2fde Mon Sep 17 00:00:00 2001 From: Michael Maclean Date: Sun, 26 Dec 2010 16:12:31 +0000 Subject: [PATCH] Initial commit --- CREDITS | 1 + EXPERIMENTAL | 0 config.m4 | 78 +++++++++++++++++++++ config.w32 | 13 ++++ opencv.c | 182 +++++++++++++++++++++++++++++++++++++++++++++++++ opencv.php | 21 ++++++ php_opencv.h | 83 ++++++++++++++++++++++ tests/001.phpt | 21 ++++++ 8 files changed, 399 insertions(+) create mode 100644 CREDITS create mode 100644 EXPERIMENTAL create mode 100644 config.m4 create mode 100644 config.w32 create mode 100644 opencv.c create mode 100644 opencv.php create mode 100644 php_opencv.h create mode 100644 tests/001.phpt diff --git a/CREDITS b/CREDITS new file mode 100644 index 0000000..f5341cf --- /dev/null +++ b/CREDITS @@ -0,0 +1 @@ +opencv \ No newline at end of file diff --git a/EXPERIMENTAL b/EXPERIMENTAL new file mode 100644 index 0000000..e69de29 diff --git a/config.m4 b/config.m4 new file mode 100644 index 0000000..b019bd7 --- /dev/null +++ b/config.m4 @@ -0,0 +1,78 @@ +dnl +dnl $ Id: opencv 1.0.1$ +dnl + +PHP_ARG_WITH(opencv, for OpenCV support, +[ --with-opencv Enable OpenCV support], yes) + +if test "$PHP_OPENCV" != "no"; then + export OLD_CPPFLAGS="$CPPFLAGS" + export CPPFLAGS="$CPPFLAGS $INCLUDES -DHAVE_OPENCV" + + AC_MSG_CHECKING(PHP version) + AC_TRY_COMPILE([#include ], [ +#if PHP_VERSION_ID < 50200 +#error this extension requires at least PHP version 5.2.0 +#endif +], +[AC_MSG_RESULT(ok)], +[AC_MSG_ERROR([need at least PHP 5.2.0])]) + + export CPPFLAGS="$OLD_CPPFLAGS" + + PHP_SUBST(OPENCV_SHARED_LIBADD) + AC_DEFINE(HAVE_OPENCV, 1, [ ]) + + PHP_NEW_EXTENSION(opencv, opencv.c, $ext_shared) + + EXT_OPENCV_HEADERS="php_opencv_api.h" + + ifdef([PHP_INSTALL_HEADERS], [ + PHP_INSTALL_HEADERS(ext/opencv, $EXT_OPENCV_HEADERS) + ]) + + if test "$PHP_OPENCV" != "no"; then + OPENCV_CHECK_DIR=$PHP_OPENCV + OPENCV_TEST_FILE=/include/opencv.h + OPENCV_LIBNAME=opencv + fi + condition="$OPENCV_CHECK_DIR$OPENCV_TEST_FILE" + + if test -r $condition; then + OPENCV_DIR=$OPENCV_CHECK_DIR + CFLAGS="$CFLAGS -I$OPENCV_DIR/include" + LDFLAGS=`$OPENCV_DIR/bin/opencv-config --libs` + else + AC_MSG_CHECKING(for pkg-config) + + if test ! -f "$PKG_CONFIG"; then + PKG_CONFIG=`which pkg-config` + fi + + if test -f "$PKG_CONFIG"; then + AC_MSG_RESULT(found) + AC_MSG_CHECKING(for opencv) + + if $PKG_CONFIG --exists opencv; then + if $PKG_CONFIG --atleast-version=2.1.0 opencv; then + opencv_version_full=`$PKG_CONFIG --modversion opencv` + AC_MSG_RESULT([found $opencv_version_full]) + OPENCV_LIBS="$LDFLAGS `$PKG_CONFIG --libs opencv`" + OPENCV_INCS="$CFLAGS `$PKG_CONFIG --cflags-only-I opencv`" + PHP_EVAL_INCLINE($OPENCV_INCS) + PHP_EVAL_LIBLINE($OPENCV_LIBS, OPENCV_SHARED_LIBADD) + AC_DEFINE(HAVE_OPENCV, 1, [whether opencv exists in the system]) + else + AC_MSG_RESULT(too old) + AC_MSG_ERROR(Ooops ! You need at least opencv 2.1.0) + fi + else + AC_MSG_RESULT(not found) + AC_MSG_ERROR(Ooops ! no opencv detected in the system) + fi + else + AC_MSG_RESULT(not found) + AC_MSG_ERROR(Ooops ! no pkg-config found .... ) + fi + fi +fi diff --git a/config.w32 b/config.w32 new file mode 100644 index 0000000..9b1cb2a --- /dev/null +++ b/config.w32 @@ -0,0 +1,13 @@ +// $Id$ +// vim:ft=javascript + +// If your extension references something external, use ARG_WITH +// ARG_WITH("opencv", "for opencv support", "no"); + +// Otherwise, use ARG_ENABLE +// ARG_ENABLE("opencv", "enable opencv support", "no"); + +if (PHP_OPENCV != "no") { + EXTENSION("opencv", "opencv.c"); +} + diff --git a/opencv.c b/opencv.c new file mode 100644 index 0000000..aee3711 --- /dev/null +++ b/opencv.c @@ -0,0 +1,182 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2010 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: | + +----------------------------------------------------------------------+ +*/ + +/* $Id: header 297205 2010-03-30 21:09:07Z johannes $ */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" +#include "php_ini.h" +#include "ext/standard/info.h" +#include "php_opencv.h" + +/* If you declare any globals in php_opencv.h uncomment this: +ZEND_DECLARE_MODULE_GLOBALS(opencv) +*/ + +/* True global resources - no need for thread safety here */ +static int le_opencv; + +/* {{{ opencv_functions[] + * + * Every user visible function must have an entry in opencv_functions[]. + */ +const zend_function_entry opencv_functions[] = { + PHP_FE(confirm_opencv_compiled, NULL) /* For testing, remove later. */ + {NULL, NULL, NULL} /* Must be the last line in opencv_functions[] */ +}; +/* }}} */ + +/* {{{ opencv_module_entry + */ +zend_module_entry opencv_module_entry = { +#if ZEND_MODULE_API_NO >= 20010901 + STANDARD_MODULE_HEADER, +#endif + "opencv", + opencv_functions, + PHP_MINIT(opencv), + PHP_MSHUTDOWN(opencv), + PHP_RINIT(opencv), /* Replace with NULL if there's nothing to do at request start */ + PHP_RSHUTDOWN(opencv), /* Replace with NULL if there's nothing to do at request end */ + PHP_MINFO(opencv), +#if ZEND_MODULE_API_NO >= 20010901 + "0.1", /* Replace with version number for your extension */ +#endif + STANDARD_MODULE_PROPERTIES +}; +/* }}} */ + +#ifdef COMPILE_DL_OPENCV +ZEND_GET_MODULE(opencv) +#endif + +/* {{{ PHP_INI + */ +/* Remove comments and fill if you need to have entries in php.ini +PHP_INI_BEGIN() + STD_PHP_INI_ENTRY("opencv.global_value", "42", PHP_INI_ALL, OnUpdateLong, global_value, zend_opencv_globals, opencv_globals) + STD_PHP_INI_ENTRY("opencv.global_string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_opencv_globals, opencv_globals) +PHP_INI_END() +*/ +/* }}} */ + +/* {{{ php_opencv_init_globals + */ +/* Uncomment this function if you have INI entries +static void php_opencv_init_globals(zend_opencv_globals *opencv_globals) +{ + opencv_globals->global_value = 0; + opencv_globals->global_string = NULL; +} +*/ +/* }}} */ + +/* {{{ PHP_MINIT_FUNCTION + */ +PHP_MINIT_FUNCTION(opencv) +{ + /* If you have INI entries, uncomment these lines + REGISTER_INI_ENTRIES(); + */ + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_MSHUTDOWN_FUNCTION + */ +PHP_MSHUTDOWN_FUNCTION(opencv) +{ + /* uncomment this line if you have INI entries + UNREGISTER_INI_ENTRIES(); + */ + return SUCCESS; +} +/* }}} */ + +/* Remove if there's nothing to do at request start */ +/* {{{ PHP_RINIT_FUNCTION + */ +PHP_RINIT_FUNCTION(opencv) +{ + return SUCCESS; +} +/* }}} */ + +/* Remove if there's nothing to do at request end */ +/* {{{ PHP_RSHUTDOWN_FUNCTION + */ +PHP_RSHUTDOWN_FUNCTION(opencv) +{ + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_MINFO_FUNCTION + */ +PHP_MINFO_FUNCTION(opencv) +{ + php_info_print_table_start(); + php_info_print_table_header(2, "opencv support", "enabled"); + php_info_print_table_end(); + + /* Remove comments if you have entries in php.ini + DISPLAY_INI_ENTRIES(); + */ +} +/* }}} */ + + +/* Remove the following function when you have succesfully modified config.m4 + so that your module can be compiled into PHP, it exists only for testing + purposes. */ + +/* Every user-visible function in PHP should document itself in the source */ +/* {{{ proto string confirm_opencv_compiled(string arg) + Return a string to confirm that the module is compiled in */ +PHP_FUNCTION(confirm_opencv_compiled) +{ + char *arg = NULL; + int arg_len, len; + char *strg; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) { + return; + } + + len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "opencv", arg); + RETURN_STRINGL(strg, len, 0); +} +/* }}} */ +/* The previous line is meant for vim and emacs, so it can correctly fold and + unfold functions in source code. See the corresponding marks just before + function definition, where the functions purpose is also documented. Please + follow this convention for the convenience of others editing your code. +*/ + + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: noet sw=4 ts=4 fdm=marker + * vim<600: noet sw=4 ts=4 + */ diff --git a/opencv.php b/opencv.php new file mode 100644 index 0000000..6b821da --- /dev/null +++ b/opencv.php @@ -0,0 +1,21 @@ +"; + +if(!extension_loaded('opencv')) { + dl('opencv.' . PHP_SHLIB_SUFFIX); +} +$module = 'opencv'; +$functions = get_extension_funcs($module); +echo "Functions available in the test extension:$br\n"; +foreach($functions as $func) { + echo $func."$br\n"; +} +echo "$br\n"; +$function = 'confirm_' . $module . '_compiled'; +if (extension_loaded($module)) { + $str = $function($module); +} else { + $str = "Module $module is not compiled into PHP"; +} +echo "$str\n"; +?> diff --git a/php_opencv.h b/php_opencv.h new file mode 100644 index 0000000..fd2c474 --- /dev/null +++ b/php_opencv.h @@ -0,0 +1,83 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2010 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: | + +----------------------------------------------------------------------+ +*/ + +/* $Id: header 297205 2010-03-30 21:09:07Z johannes $ */ + +#ifndef PHP_OPENCV_H +#define PHP_OPENCV_H + +extern zend_module_entry opencv_module_entry; +#define phpext_opencv_ptr &opencv_module_entry + +#ifdef PHP_WIN32 +# define PHP_OPENCV_API __declspec(dllexport) +#elif defined(__GNUC__) && __GNUC__ >= 4 +# define PHP_OPENCV_API __attribute__ ((visibility("default"))) +#else +# define PHP_OPENCV_API +#endif + +#ifdef ZTS +#include "TSRM.h" +#endif + +PHP_MINIT_FUNCTION(opencv); +PHP_MSHUTDOWN_FUNCTION(opencv); +PHP_RINIT_FUNCTION(opencv); +PHP_RSHUTDOWN_FUNCTION(opencv); +PHP_MINFO_FUNCTION(opencv); + +PHP_FUNCTION(confirm_opencv_compiled); /* For testing, remove later. */ + +/* + Declare any global variables you may need between the BEGIN + and END macros here: + +ZEND_BEGIN_MODULE_GLOBALS(opencv) + long global_value; + char *global_string; +ZEND_END_MODULE_GLOBALS(opencv) +*/ + +/* In every utility function you add that needs to use variables + in php_opencv_globals, call TSRMLS_FETCH(); after declaring other + variables used by that function, or better yet, pass in TSRMLS_CC + after the last function argument and declare your utility function + with TSRMLS_DC after the last declared argument. Always refer to + the globals in your function as OPENCV_G(variable). You are + encouraged to rename these macros something shorter, see + examples in any other php module directory. +*/ + +#ifdef ZTS +#define OPENCV_G(v) TSRMG(opencv_globals_id, zend_opencv_globals *, v) +#else +#define OPENCV_G(v) (opencv_globals.v) +#endif + +#endif /* PHP_OPENCV_H */ + + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: noet sw=4 ts=4 fdm=marker + * vim<600: noet sw=4 ts=4 + */ diff --git a/tests/001.phpt b/tests/001.phpt new file mode 100644 index 0000000..c194193 --- /dev/null +++ b/tests/001.phpt @@ -0,0 +1,21 @@ +--TEST-- +Check for opencv presence +--SKIPIF-- + +--FILE-- + +--EXPECT-- +opencv extension is available