Annotation of embedaddon/php/README.EXT_SKEL, revision 1.1
1.1 ! misho 1: (NOTE: you may also want to take a look at the pear package
! 2: PECL_Gen, a PHP-only alternative for this script that
! 3: supports way more extension writing tasks and is
! 4: supposed to replace ext_skel completely in the long run ...)
! 5:
! 6: WHAT IT IS
! 7:
! 8: It's a tool for automatically creating the basic framework for a PHP module
! 9: and writing C code handling arguments passed to your functions from a simple
! 10: configuration file. See an example at the end of this file.
! 11:
! 12: HOW TO USE IT
! 13:
! 14: Very simple. First, change to the ext/ directory of the PHP 4 sources. If
! 15: you just need the basic framework and will be writing all the code in your
! 16: functions yourself, you can now do
! 17:
! 18: ./ext_skel --extname=module_name
! 19:
! 20: and everything you need is placed in directory module_name.
! 21:
! 22: [ Note that GNU awk is likely required for this script to work. Debian
! 23: systems seem to default to using mawk, so you may need to change the
! 24: #! line in skeleton/create_stubs and the cat $proto | awk line in
! 25: ext_skel to use gawk explicitly. ]
! 26:
! 27: If you don't need to test the existence of any external header files,
! 28: libraries or functions in them, the module is already almost ready to be
! 29: compiled in PHP. Just remove 3 comments in your_module_name/config.m4,
! 30: change back up to PHP sources top directory, and do
! 31:
! 32: ./buildconf; ./configure --enable-module_name; make
! 33:
! 34: But if you already have planned the overall scheme of your module, what
! 35: functions it will contain, their return types and the arguments they take
! 36: (a very good idea) and don't want to bother yourself with creating function
! 37: definitions and handling arguments passed yourself, it's time to create a
! 38: function definitions file, which you will give as an argument to ext_skel
! 39: with option
! 40:
! 41: --proto=filename.
! 42:
! 43: FORMAT OF FUNCTION DEFINITIONS FILE
! 44:
! 45: All the definitions must be on one line. In it's simplest form, it's just
! 46: the function name, e.g.
! 47:
! 48: my_function
! 49:
! 50: but then you'll be left with an almost empty function body without any
! 51: argument handling.
! 52:
! 53: Arguments are given in parenthesis after the function name, and are of
! 54: the form 'argument_type argument_name'. Arguments are separated from each
! 55: other with a comma and optional space. Argument_type can be one of int,
! 56: bool, double, float, string, array, object or mixed.
! 57:
! 58: An optional argument is separated from the previous by an optional space,
! 59: then '[' and of course comma and optional space, like all the other
! 60: arguments. You should close a row of optional arguments with same amount of
! 61: ']'s as there where '['s. Currently, it does not harm if you forget to do it
! 62: or there is a wrong amount of ']'s, but this may change in the future.
! 63:
! 64: An additional short description may be added after the parameters.
! 65: If present it will be filled into the 'proto' header comments in the stubs
! 66: code and the <refpurpose> tag in the XML documentation.
! 67:
! 68: An example:
! 69:
! 70: my_function(int arg1, int arg2 [, int arg3 [, int arg4]]) this is my 1st
! 71:
! 72: Arguments arg3 and arg4 are optional.
! 73:
! 74: If possible, the function definition should also contain it's return type
! 75: in front of the definition. It's not actually used for any C code generating
! 76: purposes but PHP in-source documentation instead, and as such, very useful.
! 77: It can be any of int, double, string, bool, array, object, resource, mixed
! 78: or void.
! 79:
! 80: The file must contain nothing else but function definitions, no comments or
! 81: empty lines.
! 82:
! 83: OTHER OPTIONS
! 84:
! 85: --no-help
! 86:
! 87: By default, ext_skel creates both comments in the source code and a test
! 88: function to help first time module writers to get started and testing
! 89: configuring and compiling their module. This option turns off all such things
! 90: which may just annoy experienced PHP module coders. Especially useful with
! 91:
! 92: --stubs=file
! 93:
! 94: which will leave out also all module specific stuff and write just function
! 95: stubs with function value declarations and passed argument handling, and
! 96: function entries and definitions at the end of the file, for copying and
! 97: pasting into an already existing module.
! 98:
! 99: --xml[=file]
! 100:
! 101: Creates the basics for phpdoc .xml file.
! 102:
! 103: --full-xml
! 104:
! 105: Not implemented yet. When or if there will ever be created a framework for
! 106: self-contained extensions to use phpdoc system for their documentation, this
! 107: option enables it on the created xml file.
! 108:
! 109: CURRENT LIMITATIONS, BUGS AND OTHER ODDITIES
! 110:
! 111: Only arguments of types int, bool, double, float, string and array are
! 112: handled. For other types you must write the code yourself. And for type
! 113: mixed, it wouldn't even be possible to write anything, because only you
! 114: know what to expect.
! 115:
! 116: It can't handle correctly, and probably never will, variable list of
! 117: of arguments. (void foo(int bar [, ...])
! 118:
! 119: Don't trust the generated code too much. It tries to be useful in most of
! 120: the situations you might encounter, but automatic code generation will never
! 121: beat a programmer who knows the real situation at hand. ext_skel is generally
! 122: best suited for quickly generating a wrapper for c-library functions you
! 123: might want to have available in PHP too.
! 124:
! 125: This program doesn't have a --help option. It has --no-help instead.
! 126:
! 127: EXAMPLE
! 128:
! 129: The following _one_ line
! 130:
! 131: bool my_drawtext(resource image, string text, resource font, int x, int y [, int color])
! 132:
! 133: will create this function definition for you (note that there are a few
! 134: question marks to be replaced by you, and you must of course add your own
! 135: value definitions too):
! 136:
! 137: /* {{{ proto bool my_drawtext(resource image, string text, resource font, int x, int y [, int color])
! 138: */
! 139: PHP_FUNCTION(my_drawtext)
! 140: {
! 141: char *text = NULL;
! 142: int argc = ZEND_NUM_ARGS();
! 143: int image_id = -1;
! 144: int text_len;
! 145: int font_id = -1;
! 146: long x;
! 147: long y;
! 148: long color;
! 149: zval *image = NULL;
! 150: zval *font = NULL;
! 151:
! 152: if (zend_parse_parameters(argc TSRMLS_CC, "rsrll|l", &image, &text, &text_len, &font, &x, &y, &color) == FAILURE)
! 153: return;
! 154:
! 155: if (image) {
! 156: ZEND_FETCH_RESOURCE(???, ???, image, image_id, "???", ???_rsrc_id);
! 157: }
! 158: if (font) {
! 159: ZEND_FETCH_RESOURCE(???, ???, font, font_id, "???", ???_rsrc_id);
! 160: }
! 161:
! 162: php_error(E_WARNING, "my_drawtext: not yet implemented");
! 163: }
! 164: /* }}} */
! 165:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>