diff options
author | Jouni Ahto <jah@php.net> | 2000-06-09 02:51:43 +0000 |
---|---|---|
committer | Jouni Ahto <jah@php.net> | 2000-06-09 02:51:43 +0000 |
commit | c9dfab50246476d19d79a71135d48a021711c274 (patch) | |
tree | b825bea43f0e23eeb0f70f8cdba441433aac3da6 | |
parent | 897bb1b572fd33741fdd23d739a3a1923301fec8 (diff) | |
download | php-git-c9dfab50246476d19d79a71135d48a021711c274.tar.gz |
- Added skeleton module creating script.
-rwxr-xr-x | ext/skeleton/create_module | 122 | ||||
-rw-r--r-- | ext/skeleton/php_skeleton.h | 87 | ||||
-rw-r--r-- | ext/skeleton/skeleton.c | 144 | ||||
-rw-r--r-- | ext/skeleton/skeleton.php | 10 |
4 files changed, 363 insertions, 0 deletions
diff --git a/ext/skeleton/create_module b/ext/skeleton/create_module new file mode 100755 index 0000000000..b5b18c66e0 --- /dev/null +++ b/ext/skeleton/create_module @@ -0,0 +1,122 @@ +#!/bin/sh + +extname="$1" +EXTNAME=`echo $1|tr a-z A-Z` + +cd .. + +givup() { + echo $* + exit 1 +} + +if test "$extname" = ""; then + givup "usage: $0 extension-name" +fi + +if test -d "$extname" ; then + givup "Directory $extname already exists." +fi + +test -f ext_skel || givup "ext_skel must be in the current directory" + +if echo '\c' | grep -s c >/dev/null 2>&1 +then + ECHO_N="echo -n" + ECHO_C="" +else + ECHO_N="echo" + ECHO_C='\c' +fi + +echo "Creating directory" + +mkdir $extname || givup "Cannot create directory $extname" + +cd $extname +chmod 755 . + +$ECHO_N "Creating basic files:$ECHO_C" + +$ECHO_N " config.m4$ECHO_C" +cat >config.m4 <<eof +dnl \$Id\$ +dnl config.m4 for extension $extname +dnl don't forget to call PHP_EXTENSION($extname) + +dnl Comments in this file start with the string 'dnl'. +dnl Remove where necessary. This file will not work +dnl without editing. + +dnl If your extension references something external, use with: + +dnl PHP_ARG_WITH($extname, for $extname support, +dnl Make sure that the comment is aligned: +dnl [ --with-$extname Include $extname support]) + +dnl Otherwise use enable: + +dnl PHP_ARG_ENABLE($extname, whether to enable $extname support, +dnl Make sure that the comment is aligned: +dnl [ --enable-$extname Enable $extname support]) + +if test "\$PHP_$EXTNAME" != "no"; then + dnl If you will not be testing anything external, like existence of + dnl headers, libraries or functions in them, just uncomment the + dnl following line and you are ready to go. + dnl AC_DEFINE(HAVE_$EXTNAME, 1, [ ]) + dnl Write more examples of tests here... + PHP_EXTENSION($extname, \$ext_shared) +fi +eof + +$ECHO_N " Makefile.in$ECHO_C" +cat >Makefile.in <<eof +# \$Id\$ + +LTLIBRARY_NAME = lib$extname.la +LTLIBRARY_SOURCES = $extname.c +LTLIBRARY_SHARED_NAME = $extname.la + +include \$(top_srcdir)/build/dynlib.mk +eof + + +$ECHO_N " .cvsignore$ECHO_C" +cat >.cvsignore <<eof +.deps +Makefile +*.o +*.lo +*.la +.libs +libs.mk +eof + +$ECHO_N " $extname.c$ECHO_C" +cat ../skeleton/skeleton.c | sed -e "s/_extname_/$extname/g" | sed -e "s/_EXTNAME_/$EXTNAME/g" > $extname.c + +$ECHO_N " php_$extname.h$ECHO_C" +cat ../skeleton/php_skeleton.h | sed -e "s/_extname_/$extname/g" | sed -e "s/_EXTNAME_/$EXTNAME/g" > php_$extname.h + +$ECHO_N " $extname.php$ECHO_C" +cat ../skeleton/skeleton.php | sed -e "s/_extname_/$extname/g" | sed -e "s/_EXTNAME_/$EXTNAME/g" > $extname.php + +chmod 644 * + +echo " [done]." + +cat <<eof + +To use your new extension, you will have to execute the following steps: + + $ cd ../.. + $ vi ext/$extname/config.m4 + $ ./buildconf + $ ./configure --[with|enable]-$extname + $ make + $ vi ext/$extname/$extname.c + +Repeat the last two steps as often as necessary. + +eof diff --git a/ext/skeleton/php_skeleton.h b/ext/skeleton/php_skeleton.h new file mode 100644 index 0000000000..b43f9f762f --- /dev/null +++ b/ext/skeleton/php_skeleton.h @@ -0,0 +1,87 @@ +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.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. | + +----------------------------------------------------------------------+ + | Authors: | + +----------------------------------------------------------------------+ + */ + +/* $Id: */ + +#ifndef _PHP__EXTNAME__H +#define _PHP__EXTNAME__H + +#if COMPILE_DL +#undef HAVE__EXTNAME_ +#define HAVE__EXTNAME_ 1 +#endif + +/* You should tweak config.m4 so this symbol (or some else suitable) + gets defined. +*/ +#if HAVE__EXTNAME_ + +extern zend_module_entry _extname__module_entry; +#define _extname__module_ptr &_extname__module_entry + +#ifdef PHP_WIN32 +#define PHP__EXTNAME__API __declspec(dllexport) +#else +#define PHP__EXTNAME__API +#endif + +PHP_MINIT_FUNCTION(_extname_); +PHP_MSHUTDOWN_FUNCTION(_extname_); +PHP_RINIT_FUNCTION(_extname_); +PHP_RSHUTDOWN_FUNCTION(_extname_); +PHP_MINFO_FUNCTION(_extname_); + +PHP_FUNCTION(_extname__test); /* For testing, remove later. */ + +typedef struct { + /* Fill in this structure and use entries in it + for thread safety instead of using true globals. + */ +} php__extname__globals; + +/* In every function that needs to use variables in php__extname__globals, + do call _EXTNAME_LS_FETCH(); after declaring other variables used by + that function, and always refer to them as _EXTNAME_G(variable). + You are encouraged to rename these macros something shorter, see + examples in any other php module directory. +*/ + +#ifdef ZTS +#define _EXTNAME_G(v) (_extname__globals->v) +#define _EXTNAME_LS_FETCH() php__extname__globals *_extname__globals = ts_resource(gd__extname__id) +#else +#define _EXTNAME_G(v) (_extname__globals.v) +#define _EXTNAME_LS_FETCH() +#endif + +#else + +#define _extname__module_ptr NULL + +#endif + +#define phpext__extname__ptr _extname__module_ptr + +#endif /* _PHP__EXTNAME__H */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/skeleton/skeleton.c b/ext/skeleton/skeleton.c new file mode 100644 index 0000000000..3c261bd2de --- /dev/null +++ b/ext/skeleton/skeleton.c @@ -0,0 +1,144 @@ +/* + +----------------------------------------------------------------------+ + | PHP version 4.0 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997, 1998, 1999, 2000 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.02 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available at through the world-wide-web at | + | http://www.php.net/license/2_02.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. | + +----------------------------------------------------------------------+ + | Authors: | + +----------------------------------------------------------------------+ + */ + +/* $Id: */ + +#include "php.h" +#include "php_ini.h" +#include "php__extname_.h" + +/* You should tweak config.m4 so this symbol (or some else suitable) + gets defined. +*/ +#if HAVE__EXTNAME_ + +/* Use this for type if your module registers any resources. You can of course + rename it and add more if needed. These can be true globals, they don't need + thread safety. Remove if not needed. +*/ +static int le_extname_; + +#ifdef ZTS +int _extname__globals_id; +#else +php__extname__globals _extname__globals; +#endif + +/* Every user visible function must have an entry in _extname_functions[]. +*/ +function_entry _extname__functions[] = { + PHP_FE(_extname__test, NULL) + {NULL, NULL, NULL} /* Must be the last line in $extension_functions[] */ +}; + +zend_module_entry _extname__module_entry = { + "_extname_", + _extname__functions, + PHP_MINIT(_extname_), + PHP_MSHUTDOWN(_extname_), + PHP_RINIT(_extname_), /* Replace with NULL if there's nothing to do at request start */ + PHP_RSHUTDOWN(_extname_), /* Replace with NULL if there's nothing to do at request end */ + PHP_MINFO(_extname_), + STANDARD_MODULE_PROPERTIES +}; + +#ifdef COMPILE_DL__EXTNAME_ +ZEND_GET_MODULE(_extname_) +#endif + +/* Remove comments and fill if you need to have entries in php.ini +PHP_INI_BEGIN() +PHP_INI_END() +*/ + +PHP_MINIT_FUNCTION(_extname_) +{ +/* Remove comments if you have entries in php.ini + REGISTER_INI_ENTRIES(); +*/ + return SUCCESS; +} + +PHP_MSHUTDOWN_FUNCTION(_extname_) +{ +/* Remove comments if you have entries in php.ini + UNREGISTER_INI_ENTRIES(); +*/ + return SUCCESS; +} + +/* Remove if there's nothing to do at request start */ +PHP_RINIT_FUNCTION(_extname_) +{ + return SUCCESS; +} + +/* Remove if there's nothing to do at request end */ +PHP_RSHUTDOWN_FUNCTION(_extname_) +{ + return SUCCESS; +} + +PHP_MINFO_FUNCTION(_extname_) +{ + php_info_print_table_start(); + php_info_print_table_header(2, "_extname_ 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 _extname__test(string arg) + Return a string to confirm that the module is compiled in */ +PHP_FUNCTION(_extname__test) +{ + zval **arg; + int len; + char string[256]; + + if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg) == FAILURE) { + WRONG_PARAM_COUNT; + } + + convert_to_string_ex(arg); + + len = sprintf(string, "Congratulations, you have successfully modified ext/_extname_/config.m4, module %s is compiled in PHP", Z_STRVAL_PP(arg)); + RETVAL_STRINGL(string, len, 1); +} +/* }}} */ +/* The previous line is meant for 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. +*/ + +#endif /* HAVE__EXTNAME_ */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/skeleton/skeleton.php b/ext/skeleton/skeleton.php new file mode 100644 index 0000000000..953ea2cf6f --- /dev/null +++ b/ext/skeleton/skeleton.php @@ -0,0 +1,10 @@ +<? +$module = '_extname_'; +$function = $module . '_test'; +if (extension_loaded($module)) { + $str = $function($module); +} else { + $str = "Module $module is not compiled in PHP"; +} +echo "$str\n"; +?> |