]> granicus.if.org Git - php/commitdiff
- Added skeleton module creating script.
authorJouni Ahto <jah@php.net>
Fri, 9 Jun 2000 02:51:43 +0000 (02:51 +0000)
committerJouni Ahto <jah@php.net>
Fri, 9 Jun 2000 02:51:43 +0000 (02:51 +0000)
ext/skeleton/create_module [new file with mode: 0755]
ext/skeleton/php_skeleton.h [new file with mode: 0644]
ext/skeleton/skeleton.c [new file with mode: 0644]
ext/skeleton/skeleton.php [new file with mode: 0644]

diff --git a/ext/skeleton/create_module b/ext/skeleton/create_module
new file mode 100755 (executable)
index 0000000..b5b18c6
--- /dev/null
@@ -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 (file)
index 0000000..b43f9f7
--- /dev/null
@@ -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 (file)
index 0000000..3c261bd
--- /dev/null
@@ -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 (file)
index 0000000..953ea2c
--- /dev/null
@@ -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";
+?>