--- /dev/null
+#!/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
--- /dev/null
+/*
+ +----------------------------------------------------------------------+
+ | 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:
+ */
--- /dev/null
+/*
+ +----------------------------------------------------------------------+
+ | 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:
+ */
--- /dev/null
+<?
+$module = '_extname_';
+$function = $module . '_test';
+if (extension_loaded($module)) {
+ $str = $function($module);
+} else {
+ $str = "Module $module is not compiled in PHP";
+}
+echo "$str\n";
+?>